/* 2011/11 created by callaway ito */
var dp_selected = null;
var dp_avail_from = null;
var dp_current_y = null;
var dp_current_m = null;
var week_lbls = ["日","月","火","水","木","金","土"];
var holidays = null;
var closedays = null;
var avail_time = null;

function addSelOption(selObj, value, text)
{
	selObj.length++;
	selObj.options[selObj.length - 1].value = value;
	selObj.options[selObj.length - 1].text = text;
}

function createSelection(selObj, caption, ary)
{
	selObj.length = 0;
	addSelOption(selObj, '0', caption);
	for(var i = 0; i < ary.length; i++)
	{
		addSelOption (selObj , ary[i], ary[i]);
	}
}

function t2m(time_str) {
	var temp = time_str.split(':');
	var m = parseInt(temp[0],10) * 60 + parseInt(temp[1],10);
	return m;
}

function m2t(m) {
	var h = Math.floor(m / 60);
	var mm = m % 60;
	return h + ':' + (mm == 0 ? '00' : '30');
}

function makeTimeSelection(list) {
	var selection = new Array();
	for(var i=0; i<list.length; i++) {
		var temp = list[i].split('-');
		var sm = t2m(temp[0]);
		var em = t2m(temp[1]);
		for(var j=0; sm+j<=em; j=j+30) {
			selection.push(m2t(sm+j));
		}
	}
	createSelection(window.document.getElementById("res-time"), "-----", selection);
}

function dpClick(obj, date_str) {
	var temp = date_str.split('-');
	if(dp_selected != null) {
		$('#dpd' + dp_selected.getDate()).removeClass('date_selected');
	}
	dp_selected = new Date(temp[0], temp[1]-1, temp[2]);
	$('#res-date').html('<span class="selected_date">' + dp_selected.getFullYear() + '年' + (dp_selected.getMonth() + 1) + '月' + dp_selected.getDate() + '日（' + week_lbls[dp_selected.getDay()] + '）</span>');
	jQuery(obj).addClass('date_selected');
	if(checkDate(holidays, dp_selected))
		var idx = 7;
	else
		var idx = dp_selected.getDay();
	makeTimeSelection(avail_time[idx]);
}

function initCal(json) {
	holidays = json["holidays"];
	closedays = json["closed"];
	avail_time = json["avail_time"];
	$('#calendar_message').html(json["comment"]);
	temp = new Date;
	temp.setTime(temp.getTime() - 14400000); //4:00までを当日とするので4時間ひく
	dp_avail_from = new Date(temp.getFullYear(), temp.getMonth(), temp.getDate());
    var baseSec = dp_avail_from.getTime();
    var addSec = json["lead_days"] * 86400000;
    var targetSec = baseSec + addSec;
    dp_avail_from.setTime(targetSec);
	dp_current_y = dp_avail_from.getFullYear();
	dp_current_m = dp_avail_from.getMonth() + 1;
	renderCal();
}

function dpPrevMon() {
	if(dp_current_m == 1) {
		dp_current_y = dp_current_y - 1;
		dp_current_m = 12;
	} else {
		dp_current_m = dp_current_m - 1;
	}
	renderCal();
}

function dpNextMon() {
	if(dp_current_m == 12) {
		dp_current_y = dp_current_y + 1;
		dp_current_m = 1;
	} else {
		dp_current_m = dp_current_m + 1;
	}
	renderCal();
}

function renderCal() {
//	var html = '<div id="dp_prev" class="dp_nav" onclick="dpPrevMon();return false;">&lt;前</div><div id="dp_next" class="dp_nav" onclick="dpNextMon();return false;">次&gt;</div><div id="dp_year" class="dp_head">' + dp_current_y + '</div><div id="dp_y_lbl" class="dp_head">年</div><div id="dp_month" class="dp_head">' + dp_current_m + '</div><div id="dp_m_lbl" class="dp_head">月</div><div id="dp_bodydp1" class="dp_body"><div class="dp_head dp_head_wd dp_holiday tier_head col0">日</div><div class="dp_head dp_head_wd tier_head col1">月</div><div class="dp_head dp_head_wd tier_head col2">火</div><div class="dp_head dp_head_wd tier_head col3">水</div><div class="dp_head dp_head_wd tier_head col4">木</div><div class="dp_head dp_head_wd tier_head col5">金</div><div class="dp_head dp_head_wd dp_saturday tier_head col6">土</div>';
//	当月から4ヶ月後まで表示
	temp_4hl = temp.getMonth() + 5;
	if(temp_4hl > 12) {
		temp_4hl = temp_4hl - 12;
	}
	if(temp.getMonth() + 1 == dp_current_m) {
		var html = '<div id="dp_next" class="dp_nav" onclick="dpNextMon();">次&gt;</div>'; 
	} else {
		if(temp_4hl  == dp_current_m) {
			var html = '<div id="dp_prev" class="dp_nav" onclick="dpPrevMon();">&lt;前</div>'; 
		} else {
			var html = '<div id="dp_prev" class="dp_nav" onclick="dpPrevMon();">&lt;前</div><div id="dp_next" class="dp_nav" onclick="dpNextMon();">次&gt</div>'; 
		}
	}
	html = html + '<div id="dp_year" class="dp_head">' + dp_current_y + '</div><div id="dp_y_lbl" class="dp_head">年</div><div id="dp_month" class="dp_head">' + dp_current_m + '</div><div id="dp_m_lbl" class="dp_head">月</div><div id="dp_bodydp1" class="dp_body"><div class="dp_head dp_head_wd dp_holiday tier_head col10">日</div><div class="dp_head dp_head_wd tier_head col11">月</div><div class="dp_head dp_head_wd tier_head col12">火</div><div class="dp_head dp_head_wd tier_head col13">水</div><div class="dp_head dp_head_wd tier_head col14">木</div><div class="dp_head dp_head_wd tier_head col15">金</div><div class="dp_head dp_head_wd dp_saturday tier_head col16">土</div>';
	var day1 = new Date(dp_current_y, dp_current_m - 1, 1);
	var current_day = new Date;
    var baseSec = day1.getTime();
    var addSec = (0 - day1.getDay()) * 86400000;
    var targetSec = baseSec + addSec;
    current_day.setTime(targetSec);
	for(var i=0; i<6; i++) {
		for(var j=0; j<7; j++) {
			if(j == 0 || checkDate(holidays, current_day))
				var date_class = 'dp_holiday';
			else if(j == 6)
				var date_class = 'dp_saturday';
			else
				var date_class = 'dp_weekday';
			if(dp_selected != null && current_day.getTime() == dp_selected.getTime())
				date_class = date_class + ' date_selected';
			if(current_day.getMonth() + 1 != dp_current_m)
				;
			else if(current_day.getTime() < dp_avail_from.getTime() || checkDate(closedays, current_day) || avail_time[j] == "" || (date_class == "dp_holiday" && avail_time[7] == ""))
				html = html + '<div id="dpd' + current_day.getDate() + '" class="dp_date ' + date_class + ' tier' + i + ' col' + j + ' past">' + current_day.getDate() + '</div>';
			else
				html = html + '<div id="dpd' + current_day.getDate() + '" class="dp_date ' + date_class + ' tier' + i + ' col' + j + '" onclick="dpClick(this, \'' + dp_current_y + '-' + dp_current_m + '-' + current_day.getDate() + '\');">' + current_day.getDate() + '</div>';
			current_day.setDate(current_day.getDate() + 1);
		}
	}
	html = html + '</div>';
	$('#dp').html(html);
}

function checkDate(ary, d) {
	for(var i=0; i<ary.length; i++) {
		var temp = ary[i].split('-');
		temp_date = new Date(temp[0], temp[1]-1, temp[2]);
		if(d.getTime() == temp_date.getTime())
			return true;
		if(d.getTime() < temp_date.getTime()) //配列はソートされている前提
			return false;
	}
	return false;
}

