var IMG_DIR = "/event/images/";

var WEEK_START_DAY = 0;
var WEEK_END_DAY = 6;

var nowTime = 0;

var year = 2007;
var month = 5;
var date = 0;

var selectdate = 0;

var monthFirst = 1;
var monthLast = 31;

var monthFirstDay = 0;//0（日）～6(土)
var monthLastDay = 0;

var weekCount = 0;
var enabledatelist = null;

function getTodayWithDates(today, datelist){
	enabledatelist = datelist;
	getToday(today);
}
function getToday(today){
	getToday2(today, true);
}
function getToday2(today, moveMonth){
	today.setHours(0);
	today.setMinutes(0);
	today.setSeconds(0);
	today.setMilliseconds(0);
	nowTime = today.getTime();
	
	yy = today.getYear();
	mm = today.getMonth() + 1;
	dd = today.getDate();
	if (yy < 2000) { yy += 1900; }
	//if (mm < 10) { mm = "0" + mm; }
	//if (dd < 10) { dd = "0" + dd; }
	
	year = yy;
	month = mm;
	date = dd;
	//document.write(yy + "/" + mm + "/" + dd);
	
	getStartDate();
	getEndDate();
	getWeekCount();
	
	//alert(year + " " + month + " " + date);
	//alert("monthFirst = " + monthFirst);
	//alert("monthLast = " + monthLast);
	//alert("monthFirstDay = " + monthFirstDay);
	//alert("monthLastDay = " + monthLastDay);
	//alert("weekCount = " + weekCount);
	
	tmonth = month;
	if (tmonth < 10) { tmonth = "0" + tmonth; }
	if (jumpYearValue != null) {
		
		if (jumpYearValue != year && jumpMonthValue != tmonth) {
			var sdate = new Date();
			sdate.setDate(1);
			sdate.setMonth(jumpMonthValue - 1);
			sdate.setYear(jumpYearValue);
			
			jumpMonth(sdate);
			
			jumpYearValue = null;
			jumpMonthValue = null;
			return;
		}
	} else if (jumpYearValue == null) {
		
		if (moveMonth) {
			selectdate = $('selectdates').value
			if (selectdate != null && selectdate != "") {
				if (selectdate.substr(0, 4) == year && selectdate.substr(4, 2) == month) {
					
				} else {
					var sdate = new Date();
					var sy = selectdate.substr(0, 4);
					var sm = selectdate.substr(4, 2);
					if (sm.substr(0,1) == "0")
						sm = sm.substr(1);
					sdate.setDate(1);
					sdate.setMonth(sm - 1);
					sdate.setYear(sy);
					jumpMonth(sdate);
					return;
				}
			}
		} else {
			selectdate = $('selectdates').value
		}
	}
	
	writeCalendar();
}

function getStartDate(){
	var nowdate = new Date(nowTime);
	
	nowdate.setDate(1);
	monthFirstDay = nowdate.getDay();
}

function getEndDate(){
	var nowdate = new Date(nowTime);
	
	nowdate.setDate(1);
	nowdate.setTime(nowdate.getTime() + (31 * 24 * 3600 * 1000));
	nowdate.setDate(1);
	nowdate.setTime(nowdate.getTime() - (1 * 24 * 3600 * 1000));
	
	monthLast = nowdate.getDate();
	monthLastDay = nowdate.getDay();
}

function getWeekCount(){
	weekCount = 1;
	var nextUp = false;
	var day = monthFirstDay;
	for (var i=1; i<=monthLast; i++) {
		if (day == 7) {
			day = 0;
		}
		if (nextUp) {
			weekCount++;
		}
		if (day == WEEK_END_DAY) {
			nextUp = true;
		} else {
			nextUp = false;
		}
		day++;
	}
}

function getStringDay(day){
	switch (day) {
		case 0:
	//		return "Sun";
			return "日";
		case 1:
	//		return "Mon";
			return "月";
		case 2:
	//		return "Tue";
			return "火";
		case 3:
	//		return "Wed";
			return "水";
		case 4:
	//		return "Thu";
			return "木";
		case 5:
	//		return "Fri";
			return "金";
		case 6:
	//		return "Sat";
			return "土";
	}
}

function getStringMonth(month){
	switch (month) {
		case 1:
	//		return "Jan";
			return "1月";
		case 2:
	//		return "Feb";
			return "2月";
		case 3:
	//		return "Mar";
			return "3月";
		case 4:
	//		return "Apr";
			return "4月";
		case 5:
	//		return "May";
			return "5月";
		case 6:
	//		return "Jun";
			return "6月";
		case 7:
	//		return "Jul";
			return "7月";
		case 8:
	//		return "Aug";
			return "8月";
		case 9:
	//		return "Sep";
			return "9月";
		case 10:
	//		return "Oct";
			return "10月";
		case 11:
	//		return "Nov";
			return "11月";
		case 12:
	//		return "Dec";
			return "12月";
	}
}

/**
 * 移動する前の年と月
 */
var jumpYearValue = null;
var jumpMonthValue = null;

/**
 * 表示時の選択日ジャンプ用
 */
function jumpMonth(nowdate) {
	if (enabledatelist == null) {
		getToday(nowdate);
	} else {
		var yy = nowdate.getYear();
		var mm = nowdate.getMonth() + 1;
		var dd = nowdate.getDate();
		if (yy < 2000) { yy += 1900; }
		if (mm < 10) { mm = "0" + mm; }
		if (dd < 10) { dd = "0" + dd; }
		var date = "" + yy + mm + dd;
		var exist = false;
		for (var i=0 ; i<enabledatelist.length; i++) {
			if (enabledatelist[i]['date'] == date) {
				exist = true;
				break;
			}
		}
		if (!exist) {
			//RequestNewMonthData
			if (typeof requestNewMonthDate != 'undefined') {
				responseType = "prev";
				
				jumpYearValue = yy;
				jumpMonthValue = mm;
				document.body.style.cursor = "wait";
				
				requestNewMonthDate(yy, mm);
			}
		} else {
			getToday(nowdate);
		}
	}
}

function prevMonth() {
	outMouseOut();
	
	var nowdate = new Date();
	nowdate.setDate(1);
	nowdate.setMonth(month - 1);
	nowdate.setYear(year);
	nowdate.setTime(nowdate.getTime() - (1 * 24 * 3600 * 1000));
	
	if (enabledatelist == null) {
		getToday(nowdate);
	} else {
		var yy = nowdate.getYear();
		var mm = nowdate.getMonth() + 1;
		var dd = nowdate.getDate();
		if (yy < 2000) { yy += 1900; }
		if (mm < 10) { mm = "0" + mm; }
		if (dd < 10) { dd = "0" + dd; }
		var date = "" + yy + mm + dd;
		var exist = false;
		for (var i=0 ; i<enabledatelist.length; i++) {
			if (enabledatelist[i]['date'] == date) {
				exist = true;
				break;
			}
		}
		if (!exist) {
			//RequestNewMonthData
			if (typeof requestNewMonthDate != 'undefined') {
				responseType = "prev";
				
				jumpYearValue = yy;
				jumpMonthValue = mm;
				document.body.style.cursor = "wait";
				
				requestNewMonthDate(yy, mm);
			}
		} else {
			//getToday(nowdate);
			getToday2(nowdate, false)
		}
	}
}
function responseMonthData(datelist) {
	
	document.body.style.cursor = "auto";
	
	enabledatelist = datelist;
	
	var nowdate = new Date();
	nowdate.setDate(1);
	nowdate.setMonth(month - 1);
	nowdate.setYear(year);
	
	if (responseType == "prev")
		nowdate.setTime(nowdate.getTime() - (1 * 24 * 3600 * 1000));
	else if (responseType == "next")
		nowdate.setTime(nowdate.getTime() + (31 * 24 * 3600 * 1000));
	else
		nowdate = new Date();
	
	getToday2(nowdate, true);
}

var responseType = "today";

function nextMonth() {
	outMouseOut();
	
	var nowdate = new Date();
	nowdate.setDate(1);
	nowdate.setMonth(month - 1);
	nowdate.setYear(year);
	nowdate.setTime(nowdate.getTime() + (31 * 24 * 3600 * 1000));
	
	if (enabledatelist == null) {
		getToday(nowdate);
	} else {
		//最高93日取得するため10日足せば大丈夫
		var nowdateplus = new Date(nowdate.getTime() + (10 * 24 * 3600 * 1000));
		var yy = nowdateplus.getYear();
		var mm = nowdateplus.getMonth() + 1;
		var dd = nowdateplus.getDate();
		if (yy < 2000) { yy += 1900; }
		if (mm < 10) { mm = "0" + mm; }
		if (dd < 10) { dd = "0" + dd; }
		var date = "" + yy + mm + dd;
		var exist = false;
		for (var i=0 ; i<enabledatelist.length; i++) {
			if (enabledatelist[i]['date'] == date) {
				exist = true;
				break;
			}
		}
		if (!exist) {
			//RequestNewMonthData
			if (typeof requestNewMonthDate != 'undefined') {
				responseType = "next";
				
				jumpYearValue = yy;
				jumpMonthValue = mm;
				document.body.style.cursor = "wait";
				
				requestNewMonthDate(yy, mm);
			}
		} else {
			//getToday(nowdate);
			getToday2(nowdate, false)
		}
	}
}

function goToday() {
	
	outMouseOut();
	
	if (enabledatelist == null) {
		getToday(new Date());
	} else {
		var nowdate = new Date();
		var yy = nowdate.getYear();
		var mm = nowdate.getMonth() + 1;
		var dd = nowdate.getDate();
		if (yy < 2000) { yy += 1900; }
		if (mm < 10) { mm = "0" + mm; }
		if (dd < 10) { dd = "0" + dd; }
		var date = "" + yy + mm + dd;
		var exist = false;
		for (var i=0 ; i<enabledatelist.length; i++) {
			if (enabledatelist[i]['date'] == date) {
				exist = true;
				break;
			}
		}
		if (!exist) {
			//RequestNewMonthData
			if (typeof requestNewMonthDate != 'undefined') {
				responseType = "today";
				
				jumpYearValue = yy;
				jumpMonthValue = mm;
				document.body.style.cursor = "wait";
				
				requestNewMonthDate(yy, mm);
			}
		} else {
			
			jumpYearValue = yy;
			jumpMonthValue = mm;
			
			getToday(nowdate);
		}
	}
}

/******************************************************
 * HTMLの作成
 *
 */
function writeCalendar(){
	
	var html = "";
	html += "<div id='calendarhat'></div>";
	
	html += "<div class='top'>";
	html += "<div class='button'>";
	html += "<div class='back'><a href='javascript:prevMonth()'><img src='" + IMG_DIR + "minicalendar/calendar_back.png'/></a></div>";
	html += "<div class='today'><a href='javascript:goToday()'><img src='" + IMG_DIR + "minicalendar/calendar_today.png'/></a></div>";
	html += "<div class='next'><a href='javascript:nextMonth()'><img src='" + IMG_DIR + "minicalendar/calendar_next.png'/></a></div>";
	html += "</div>";
//	html += "<div class='title'>" + getStringMonth(month) + "." + year + "</div>";
	html += "<div class='title'>" + year + "年" + getStringMonth(month) + "</div>";
	html += "</div>";
	
	html += "<div class='week'>";
	
	
	for (var wday=WEEK_START_DAY; wday<=WEEK_END_DAY; wday++) {
		html += "<div class='date'>" + getStringDay(wday) + "</div>";
	}
	html += "</div>";
	
	html += "<div class='week'>";
	
	for (var i=0; i<monthFirstDay; i++) {
		html += "<div class='date'>&nbsp;</div>";
	}
	
	var nextUp = false;
	var day = monthFirstDay;
	for (var i=1; i<=monthLast; i++) {
		if (day == 7) {
			day = 0;
		}
		if (nextUp) {
			html += "</div><div class='week'>";
		}
		if (day == WEEK_END_DAY) {
			nextUp = true;
		} else {
			nextUp = false;
		}
		
		var selectdateDay = 0;
		if (selectdate != null && selectdate.length == 8 && selectdate.substr(0, 4) == year && selectdate.substr(4, 2) == month) {
			if (selectdate.substr(6,1) == "0") {
				selectdateDay = selectdate.substr(7, 1);
			} else {
				selectdateDay = selectdate.substr(6, 2);
			}
		}
		if (isToday(i)) {
			html += "<div class='date2'>" + getDateImageHTML(i) + "</div>";
		} else if (i == selectdateDay) {
			html += "<div class='date2'>" + getDateImageHTML(i) + "</div>";
		} else {
			html += "<div class='date'>" + getDateImageHTML(i) + "</div>";
		}
		
		day++;
	}
	
	for (var i=monthLastDay+1; i<=WEEK_END_DAY; i++) {
		html += "<div class='date'>&nbsp;</div>";
	}
	
	html += "</div>";
	html += "<div id='calendartail'></div>";
	
	var d = $('calendar');
	d.innerHTML = html;
}

function isEnableDate(date) {
	for (var i=0 ; i<enabledatelist.length; i++) {
		if (enabledatelist[i]['date'] == date) {
			var value = enabledatelist[i]['value'];
			if (value == 1) {
				return true;
			} else {
				return false;
			}
		}
	}
	return false;
}

function getDateImageHTML(i) {
	var no = i;
	if (no < 10)
		no = "0" + no;
	
	//カレンダーで選択した月の日確認
	var selectdateDay = 0;
	if (selectdate != null && selectdate.length == 8 && selectdate.substr(0, 4) == year && selectdate.substr(4, 2) == month) {
		if (selectdate.substr(6,1) == "0") {
			selectdateDay = selectdate.substr(7, 1);
		} else {
			selectdateDay = selectdate.substr(6, 2);
		}
	}
	
	if (i == selectdateDay) {
		//選択日
		return "<img id='selectdateimg' src='" + IMG_DIR + "minicalendar/mouseover" + no + ".png'/>";
		
	} else if (isToday(i)) {
		//今日
		if (enabledatelist == null) {
			return "<a href='javascript:goDateSearchPage(" + year + monthCheck(month) + dateCheck(i) + ");' onMouseover='onTodayDate(\"" + no + "\")' onMouseout='outTodayDate(\"" + no + "\")'><img id='todayimg' src='" + IMG_DIR + "minicalendar/currentday" + no + ".png'/></a>";
		} else {
			var val = "" + year + monthCheck(month) + dateCheck(i);
			if(isEnableDate(val)) {
				return "<a href='javascript:goDateSearchPage(" + year + monthCheck(month) + dateCheck(i) + ");' onMouseover='onTodayDate(\"" + no + "\")' onMouseout='outTodayDate(\"" + no + "\")'><img id='todayimg' src='" + IMG_DIR + "minicalendar/currentday" + no + ".png'/></a>";
			} else {
				return "<img id='todayimg' src='" + IMG_DIR + "minicalendar/currentday" + no + ".png'/>";
			}
		}
	} else {
		if (enabledatelist == null) {
			return "<a href='javascript:goDateSearchPage(" + year + monthCheck(month) + dateCheck(i) + ");' onMouseover='onDate(\"" + no + "\")'><img id='date" + no + "' src='" + IMG_DIR + "minicalendar/" + no + ".png'/></a>";
		} else {
			var val = "" + year + monthCheck(month) + dateCheck(i);
			if(isEnableDate(val)) {
				return "<a href='javascript:goDateSearchPage(" + year + monthCheck(month) + dateCheck(i) + ");' onMouseover='onDate(\"" + no + "\")'><img id='date" + no + "' src='" + IMG_DIR + "minicalendar/" + no + ".png'/></a>";
			} else {
				return "<img id='date" + no + "' src='" + IMG_DIR + "minicalendar/date_bg.png'/>";
			}
		}
	}
}

function isToday(i) {
	today = new Date();
	yy = today.getYear();
	mm = today.getMonth() + 1;
	dd = today.getDate();
	if (yy < 2000) { yy += 1900; }
	if (mm < 10) { mm = "0" + mm; }
	if (dd < 10) { dd = "0" + dd; }
	if (year == yy && month == mm && i == dd) {
		return true;
	}
	return false;
}

function onDate(no) {
	name = "date" + no;
	
	var p = Position.cumulativeOffset($(name));
	x = p[0] + "px";
	y = p[1] + "px";
	
	$('dateonmouseimg').src = IMG_DIR + 'minicalendar/mouseover' + no + '.png';
	
	$('dateonmouseimg').setStyle({
		'width': '39px',
		'height': '32px'
	});
	$('dateonmouse').setStyle({
		'z-index': '100',
		'margin': ' -3px 0 0 -5px',
		'top': y,
		'left': x,
		'width': '39px',
		'height': '32px'
	});
	
	mouseSelectDate = no;
}

var mouseSelectDate = 0;


function outMouseOut() {
	$('dateonmouse').setStyle({
		'width': '0px',
		'height': '0px'
	});
	$('dateonmouseimg').setStyle({
		'width': '0px',
		'height': '0px'
	});
}

function goDateSearchPageOnMouse() {
	if (mouseSelectDate != 0) {
		var clickdate = "" + year + monthCheck(month) + mouseSelectDate;
		 goDateSearchPage(clickdate);
	}
}



function onTodayDate(no) {
	$('todayimg').src = IMG_DIR + 'minicalendar/mouseover' + no + '.png';
}

function outTodayDate(no) {
	$('todayimg').src = IMG_DIR + 'minicalendar/currentday' + no + '.png';
}

function monthCheck(month) {
	mm = month;
	if (mm < 10) { mm = "0" + mm; }
	return mm;
}
function dateCheck(i) {
	dd = i;
	if (dd < 10) { dd = "0" + dd; }
	return dd;
}

/*
function isSAFARICheck() {
	var ua = navigator.userAgent;
	ua = ua.toUpperCase();
	if (ua.indexOf("SAFARI") > -1)	return true;
	return false;
}
*/

//getToday(new Date());
//getToday(new Date(2007, 8, 1));
