﻿/**
 * calendar
 */

 (function() {
	
	var CALENDAR_HTML_ID = 'calendar';
	
	var next_month_calc = function(func, yy, mm) {
		if (func == 'next') mm++;
		else if (func == 'back') mm--;
		if (mm > 12) {
			mm = 1;
			yy++;
		} else if (mm < 1) {
			mm = 12;
			yy--;
		}
		return yy + '-' + mm;
	};
	
	var get_day = function(yy, mm, dd) {
		var temp_d = new Date(yy, (mm - 1), dd);
		return temp_d.getDay();
	};
	
	var selected_calendar = function(back_id, yy, mm, dd) {
		if (mm < 10) mm = '0' + mm;
		if (dd < 10) dd = '0' + dd;
		document.getElementById(back_id).value = yy + '-' + mm + '-' + dd;
		document.getElementById(CALENDAR_HTML_ID).innerHTML = '';
	};
	
	var createCalender = function(back_id, next_month) {
		
		var now_input = document.getElementById(back_id).value;
		var year, month, day;
		if (next_month) {
			var temp_value = next_month.split('-');
			year = temp_value[0];
			month = temp_value[1];
			day = 1;
		} else if (now_input) {
			var temp_value = now_input.split('-');
			year = temp_value[0];
			month = temp_value[1];
			day = temp_value[2];
		}
		if (!day) {
			var temp_value = new Date();
			year = temp_value.getFullYear();
			if (year < 1900) year += 1900;
			month = temp_value.getMonth();
			month++;
			day = temp_value.getDate();
		}
		
		month *= 1;
		day *= 1;
		
		var full_years = ',31,28,31,30,31,30,31,31,30,31,30,31'.split(',');
		
		if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) full_years[2] = 29;
		var out_html = '';
		out_html += '<p class="calendar_top">';
		out_html += '<span id="prevMonth">&lt;</span>&nbsp;';
		out_html += year + '年' + month + '月&nbsp;';
		out_html += '<span id="nextMonth">&gt;</span>&nbsp;';
		out_html += '</p>';
		out_html += '<table class="calendar">';
		out_html += '<col class="sun" />';
		out_html += '<col />';
		out_html += '<col />';
		out_html += '<col />';
		out_html += '<col />';
		out_html += '<col />';
		out_html += '<col class="sat" />';
		out_html += '<tr>';
		out_html += '<th class="sun">Su</th>';
		out_html += '<th>Mo</th>';
		out_html += '<th>Tu</th>';
		out_html += '<th>We</th>';
		out_html += '<th>Th</th>';
		out_html += '<th>Fr</th>';
		out_html += '<th class="sat">Sa</th>';
		out_html += '</tr>';
		
		var start_day = get_day(year, month, 1);
		
		if (start_day > 0) {
			out_html += '<tr>';
			for (temp = 0; temp < start_day; temp++) {
				out_html += '<td>&nbsp;</td>';
			}
		}
		
		for (dat_ct = 1; dat_ct <= full_years[month]; dat_ct++) {
			if (start_day == 0) out_html += '<tr>';
			out_html += '<td id="day' + dat_ct + '">' + dat_ct + '</td>';
			if (start_day == 6) out_html += '</tr>';
			start_day++;
			if (start_day > 6) start_day = 0;
		}
		
		if (start_day > 0) {
			for (temp = start_day; temp <= 6; temp++) {
				out_html += '<td>&nbsp;</td>';
			}
			out_html += '</tr>';
		}
		
		out_html += '</table>';
		document.getElementById(CALENDAR_HTML_ID).innerHTML = out_html;
		
		var p = document.getElementById('prevMonth');
		var n = document.getElementById('nextMonth');
		p.onclick = function() {
			createCalender(back_id, next_month_calc('back', year, month));
		};
		n.onclick = function() {
			createCalender(back_id, next_month_calc('next', year, month));
		};
		p.onmouseover = n.onmouseover = function() {
			Kaas.addClass(this, 'calendarPageOver');
		};
		p.onmouseout = n.onmouseout = function() {
			Kaas.removeClass(this, 'calendarPageOver');
		};
		
		var td = document.getElementById('calendar').getElementsByTagName('td');
		for (var j = 1; j <= full_years[month]; j++) {
			var target = document.getElementById('day' + j)
			target.num = j;
			
			target.onclick = function() {
				selected_calendar(back_id, year, month, this.num);
				if (Kaas.isIEVer('6.0') && container == 'searchBox') Kaas.ie6hideSelects.show();
				Kaas.addClass(Kaas.$('calendar'), 'calendarHide');
			};
			
			target.onmouseover = function() {
				Kaas.addClass(this, 'dayOver');
			};
			
			target.onmouseout = function() {
				Kaas.removeClass(this, 'dayOver');
			};
		}
		
	};
	
	
	function init(obj) {
		
		var target = obj.target;
		var container = obj.container;
		var label = obj.label;
		
		var e = document.createElement('div');
		if (!Kaas.$(CALENDAR_HTML_ID)) Kaas.$(container).appendChild(e).id = CALENDAR_HTML_ID;
		Kaas.addClass(Kaas.$('calendar'), 'calendarHide');
		
		if (label != null) {
			label.onclick = function() { Kaas.$(target).focus(); };
		}
		
		Kaas.$(target).onfocus = function() {
			createCalender(target);
			if (Kaas.isIEVer('6.0') && container == 'searchBox') Kaas.ie6hideSelects.hide();
			if (Kaas.hasClassName(Kaas.$('calendar'), 'calendarHide')) Kaas.removeClass(Kaas.$('calendar'), 'calendarHide');
		};
		
	}
	
	
	Kaas.addEvent(window, 'load', function() {
		
		Kaas.loadStyleSheet('calendar');
		
		if (Kaas.$('searchBox')) {
			init( {
				target: 'selectDay',
				container: 'searchBox',
				label: Kaas.$('searchBox').getElementsByTagName('label')[0]
			} );
		}
		
		if (Kaas.$('cDay1')) {
			init( {
				target: 'cDay1',
				container: 'qContact',
				label: null
			} );
		}
		
		if (Kaas.$('cDay2')) {
			init( {
				target: 'cDay2',
				container: 'qContact'
			} );
		}
		
	});
	
})();
