/*-------------------------------------------------------------
 calendar
-------------------------------------------------------------*/
//$(function(){
function calender(selectyearMonth, selectDay, plan_type, dept){		// ToDo: 引数の与え方要検討（..., dept, plan_type）|| （..., {"dept":***, "plan_type":***})

	var template = '<iframe scrolling="no" frameborder="0" id="calendarBoxMask"></iframe><div id="calendarBox" class="box"><dl id="calendar01" class="box"><dt>-</dt><dd><ul class="box wdays"><li>月</li><li>火</li><li>水</li><li>木</li><li>金</li><li class="sat">土</li><li class="sun">日</li></ul><ul class="box days"><li class="firstDay">1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li class="d29">29</li><li class="d30">30</li><li class="d31">31</li></ul></dd></dl><dl id="calendar02" class="box"><dt>-</dt><dd><ul class="box wdays"><li>月</li><li>火</li><li>水</li><li>木</li><li>金</li><li class="sat">土</li><li class="sun">日</li></ul><ul class="box days"><li class="firstDay">1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li class="d29">29</li><li class="d30">30</li><li class="d31">31</li></ul></dd></dl><ul class="navigation"><li class="prev">前の2ヶ月を表示する</li><li class="next">次の2ヶ月を表示する</li></ul><p id="closeBox">閉じる</p></div>';
	var wday = new Array('sun','mon','tue','wed','thu','fri','sat','sun');
	
	//var targetBase = $('#calTrigger').closest('form');


	var selectDef  =  '<option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option>'
					+ '<option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option><option value="11">11</option><option value="12">12</option>'
					+ '<option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option>'
					+ '<option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option>'
					+ '<option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option><option value="29">29</option><option value="30">30</option>'
					+ '<option value="31">31</option>';

	//settings
	var minDate = '',
		maxDate = '',
		dispDate = '',
		holiday_list = '';

	switch (arguments.length) { 
		case 2:
			plan_type = '';
		case 3:
			dept = ''; 
	}

	var calender_path = '/calender?plan_type='+ encodeURIComponent(plan_type) +'&dept='+ encodeURIComponent(dept);	// escape(), encodeURIComponent()

	$.getJSON(calender_path, function(data) {

		start = new Date();
		start.setTime(Date.parse(data['start_date']));
		end = new Date();
		end.setTime(Date.parse(data['end_date']));

		minDate = new Array(start.getFullYear(), start.getMonth()+1, start.getDate());
		maxDate = new Array(end.getFullYear(), end.getMonth()+1, end.getDate());
		
		dispDate = new Array(minDate[0],minDate[1]);
		
		holidays = data['holidays'];

		$("#date1").children().remove();
		init();

	});

	function init(){
		//appendOption();
		appendOption(selectyearMonth);
		dateCheck('#date1');

//初期設定として追加 2010.03.09 tsukamoto
		undecidedEvent();

		//$(template).hide().appendTo(targetBase);
		$(template).hide().appendTo('#search_box_form');
		
		$('#undecided').click(function(){undecidedEvent()});

		$("#calTrigger:not('.disable')").die("click");
		$("#calTrigger:not('.disable')").live("click",function(){toggleCalBox()});
		$('#closeBox').click(function(){hideCalBox()});
		$('li.prev','#calendarBox').click(function(){prevPaging()});
		$('li.next','#calendarBox').click(function(){nextPaging()});
		$("ul.days>li:not('.disable')","#calendarBox").live("click",function(){clickDate(this)});
		$('body.calOpen').live("click",function(){hideCalBox();});
		$('body.calOpen #calendarBox').live("click",function(){return false;});

//検索条件で日帰りが選択されていた場合の初期設定
//2010.03.12 tsukamoto Add

		if(selectyearMonth != '' && selectDay != '') {
			//$('#date1').val(selectyearMonth);
			$('#date2').val(selectDay);
			//$("#date2").html(selectDef).val(selectDay);
		}
//2010.03.12 tsukamoto Add

	}

	
	function getHoliday(y,m){
	
		if(("" + m).length < 2){ m = "0" + m}
		
		var yearMonth = y+"-"+m;
		var array = new Array();
		
		re = new RegExp("[0-9]{4}-[0-9]{2}");
		
		for (var i in holidays){
			if(holidays[i].match(re) == yearMonth) {
				array.push(~~(holidays[i].match(/[0-9]{2}$/)));
			}
		}
		
		return array;
	}
	
	
	function appendOption(selected_year_month){
		var code = '';
		var m = maxDate[1];		// ToDo: i==j ???

		var selected,
			year_month;
		
		for(var i=minDate[0],j=maxDate[0];i<=j;i++){
			var firstMonth = (i==minDate[0]) ? minDate[1] : 1;
			var lastMonth = (i==j) ? maxDate[1] : 12;
			for(var k=firstMonth; k<=lastMonth; k++){
				year_month = i + "/" + k;
				selected = (year_month == selected_year_month)? 'selected': '';
				code += '<option value="'+year_month+'" '+selected+'>'+i+"年"+k+"</option>";
			}
		}
		$('#date1').append($(code))
		          .live("change",function(){dateCheck(this)});
	}
	
	
	function dateCheck(self){

		var val = $(self).val().split("/");

		var y = val[0];
		var m = val[1]*1;
		var removedCount = 0;
		var lday = getLastDay(y,m)-1;

		$("#date2").html(selectDef).val('01')
		           .children("option:gt("+lday+")").remove();
		if (y <= minDate[0] && m <= minDate[1]) {
			var startDate = minDate[2]-1;
			$("option:lt("+startDate+")",'#date2').remove();
			removedCount = startDate;
		}
		if (y >= maxDate[0] && m >= maxDate[1]) {
			var endDate = maxDate[2]-1;
			
			if(removedCount > 0) {
				endDate -= removedCount;
			}
			
			$("option:gt("+endDate+")",'#date2').remove();
		}
	}

	function updateDisp(y,m){
		var cal = $("#calendarBox");

		//min check
		if (y <= minDate[0] && m <= minDate[1]) {
			$('li.prev',cal).hide();
		} else {
			$('li.prev',cal).show();
		}
		
		//max check
		if(y >= maxDate[0] && m >= maxDate[1]) {
			$('li.next',cal).hide();
			$('#calendar02',cal).hide();
		} else if(y >= maxDate[0] && m+1 >= maxDate[1]) {
			$('li.next',cal).hide();
			$('#calendar02',cal).show();
		} else {
			$('li.next',cal).show();
			$('#calendar02',cal).show();
		}
		
		//month set
		monthSet('#calendar01',y,m);
		if (m != 12) {
			monthSet('#calendar02', y, m + 1);
		} else {
			monthSet('#calendar02', y+1, 1);
		}
		
		dispDate[0] = y;
		dispDate[1] = m;
	}
	
	function monthSet(target,y,m){
		
		var monthName = $('dt',target);
		//var monthNum = (m < 10) ? "0"+m : m;
		var monthNum = m;

		monthName.text(y+'年'+monthNum+'月');
		monthName.attr({"calY":y, "calM":m});
		
		var dayList = $('ul.days',target);
		var fNum = getFirstWday(y,m);
		var sat = 7-fNum, sun = 8-fNum;
		var fday = wday[fNum];
		var lday = 'to'+getLastDay(y,m);
		dayList.attr('class','box days').addClass(fday + ' ' + lday);
		$("li",dayList).removeClass('sat sun disable holiday');
		$("li:nth-child(7n"+sat+")",dayList).addClass('sat');
		$("li:nth-child(7n"+sun+")",dayList).addClass('sun');
		if(dayList.hasClass('sun')){
			$("li:first",dayList).addClass('sun');
		}
		
		var holidayAry = getHoliday(y,m);

		
		for(var i=0,len=holidayAry.length; i<len; i++){
			var idx = holidayAry[i]*1-1;
			$("li:eq("+idx+")",dayList).addClass('holiday');
		}
		if (y <= minDate[0] && m <= minDate[1]) {
			var startDate = minDate[2]-1;
			$("li:lt("+startDate+")",dayList).addClass('disable');
		}
		if (y >= maxDate[0] && m >= maxDate[1]) {
			var endDate = maxDate[2]-1;
			$("li:gt("+endDate+")",dayList).addClass('disable');
		}
	}
	
	function hideCalBox(){
		$('#calendarBox').hide('fast');
		$('#calendarBoxMask').hide('fast');
		$('body').removeClass('calOpen');
	}
	
	function showCalBox(){
		updateDisp(minDate[0],minDate[1]);
		$('#calendarBox').show('fast');
		$('#calendarBoxMask').show('fast');
		$('body').addClass('calOpen');
	}

	function toggleCalBox(){
		if($('#calendarBox').css('display') == 'none'){
			showCalBox();
		} else {
			hideCalBox();
		}
	}
	
	function clickDate(self){
		//var selectedMonth = ($(self).closest('dl').children('dt').text().split('月'))[0].replace(/年/, '/');
		var selectedMonth = $(self).closest('dl').children('dt').attr('calY') +'/'+ $(self).closest('dl').children('dt').attr('calM');
		var selectedDay   = $(self).text();
		
		//if(selectedDay < 10){ selectedDay = "0" + selectedDay}
		$("#date1").val(selectedMonth);
		dateCheck('#date1');
		$("#date2").val(selectedDay);
		hideCalBox();
	}
	
	function nextPaging(){
		var y = dispDate[0], m = dispDate[1];
		if (m >= 11) {
			y++;
			m = dispDate[1]-10;
		} else {
			m = m+2;
		}
		updateDisp(y,m);
	}
	
	function prevPaging(){
		var y = dispDate[0], m = dispDate[1];
		if (m <= 2) {
			y--;
			m = dispDate[1]+10;
		} else {
			m = m-2;
		}
		updateDisp(y,m);
	}
	
	function getFirstWday(y,m){
		var num = new Date(y,m-1,1).getDay();
		return num;
	}

	function getLastDay(y,m){
		return 32 - new Date(y, m-1, 32).getDate();
	}
	
	
	function undecidedEvent(){
		var self = $('#undecided');
		if(self.attr('checked') == true){
			$('#date1,#date2').attr('disabled','disabled').addClass('disable');
			$('#calTrigger').addClass('disable').css('cursor','default');
		} else {
			$('#date1,#date2').attr('disabled','').removeClass('disable');
			$('#calTrigger').removeClass('disable').css('cursor','pointer');
		}
	}
	

//});
}

