/*-------------------------------------------------------------
 calendar
-------------------------------------------------------------*/
$(function(){
	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 $ = window.$2;
	var BASE_URL = "http://tokyobookmark.net";

	var minDate = '';
	var maxDate = '';
	var dispDate =  '';

	var targetBase = $('#calTrigger').closest('form');
	//var selectDef  = $('#date2').html();

	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>';


	var getParams = getRequest();

	$.ajax({
		url : BASE_URL + "/calender/jp_top/" + getParams['dept'],
		dataType : "jsonp",
		cache : false,
		data : {
		},
		jsonp : "callback",
		success : function(json){
			minDate = new Array(~~json['start_year'],~~json['start_month'],~~json['start_day']);
			maxDate = new Array(~~json['end_year'],~~json['end_month'],~~json['end_day']);
			dispDate = new Array(minDate[0], minDate[1], minDate[2]);

			$("#date").children().remove();
			init();
		}
	});
	


	function init(){
		appendOption();
		dateCheck('#date');
		
		$(template).hide().appendTo(targetBase);
		
		if(window.location.pathname.match(/\/search_plan/)){
			$("#calendarBox, #calendarBoxMask").css({top: "400px", right: "auto"});
		}
		
		$('#undecided').attr('checked','').click(function(){undecidedEvent()});
		$("#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;});
		if(getParams['undecided'] == 1) {
			$("#undecided").attr('checked', 'checked');
			$("#date, #date2").attr('disabled', 'disabled');
		}

		if(dispDate[1] && dispDate[2]){

			/*----- Use setTimeout() for IE6 -----*/

			setTimeout(
				function(){
					$('#date').val(dispDate[1]);
					$('#date2').val(dispDate[2]);
				},
				0
			);
		}
	}
	
	function appendOption(){
		var code = '';
		
		var m = (i==j) ? maxDate[1] : 12;
		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++){
//				num = (k<10) ? "0"+k : k;
				num = k;
				
				if(getParams['date'] == i+"/"+num && getParams['date2']){
					code += "<option value="+i+"/"+num+" selected>"+i+"年"+num+"</option>";
				}
				else {
					code += "<option value="+i+"/"+num+">"+i+"年"+num+"</option>";
				}
			}
			
		}
		$('#date').append($(code)).live("change",function(){dateCheck(this)});
	}


	function dateCheck(self){
		var val = ($(self).val())? $(self).val().split("/"): [];

		var y = val[0];
		var m = val[1]*1;

		//$("option:eq("+(getParams['date2']-1)+")",'#date2').attr('selected', 'selected');
		var lday = getLastDay(y,m)-1;
		$("#date2").html(selectDef)
		           .children("option:gt("+lday+")").remove();

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

	}


	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+'月');
		
		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 selectedDay   = $(self).text();
		$("#date").val(selectedMonth);
		dateCheck($("#date"));

		setTimeout(
			function(){
				$("#date2").val(selectedDay)
			}, 0 );

		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 getHoliday(y,m){
		var yearMonth = y+"."+m;
		var array;
		switch(yearMonth){
			case "2010.1":
				array = new Array("1","11");
				break;
			case "2010.2":
				array = new Array("11");
				break;
			case "2010.3":
				array = new Array("21");
				break;
			case "2010.4":
				array = new Array("29");
				break;
			case "2010.5":
				array = new Array("3","4","5");
				break;
			case "2010.7":
				array = new Array("19");
				break;
			case "2010.9":
				array = new Array("20","23");
				break;
			case "2010.10":
				array = new Array("11");
				break;
			case "2010.11":
				array = new Array("3","23");
				break;
			case "2010.12":
				array = new Array("23");
				break;
			default:
				array = new Array(0);
				break;
		}
		return array;
	}
	
	function undecidedEvent(){
		var self = $('#undecided');
		if(self.attr('checked') == true){
			$('#date,#date2').attr('disabled','disabled').addClass('disable');
			$('#date,#date2').removeClass('hilight');
			$('#calTrigger').addClass('disable').css('cursor','default');
		} else {
			$('#date,#date2').attr('disabled','').removeClass('disable');
			$('#calTrigger').removeClass('disable').css('cursor','pointer');
		}
	}
	
	/*----- get URL prameters-----*/
	
	function getRequest(){
		var get = new Object();
		if(document.URL.match('nagoya')) {
			get['dept'] = 3;
		}else {
			get['dept'] = 4;
		}
		return get;
	}

});
