﻿var isIE = (navigator.appName.indexOf("Microsoft") > -1);
var dayArray = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
var monthArray = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec");
var lang = 'CH';
var lastMonth = monthArray.length - 1;
var thisMonth;
var thisYear;
var eventArray = new Array();


function genCalendar()
{
	if (d.getElementById('TodayYear'))
	{
		today = new Date(Number(d.getElementById('TodayYear').value), (Number(d.getElementById('TodayMonth').value) - 1), Number(d.getElementById('TodayDay').value));
		var todayDate = today.getDate();
		var todayDay = today.getDay();
		var todayMonth = today.getMonth();
		var todayYear = today.getFullYear();
	}
	var self = this;
	
	this.init = function()
	{
		var xml = new loadXML(path + 'events.xml?version='+Math.random());
		xml.action = function(x)
		{
			var xml = x.responseXML;
			
			//Get Today Time
			/*var today = xml.getElementsByTagName('today');
			todayDate = today[0].attributes.getNamedItem('day').value.toString();
			todayMonth = Number(today[0].attributes.getNamedItem('month').value.toString()) - 1;
			todayYear = today[0].attributes.getNamedItem('year').value.toString();
			today = new Date(todayYear, todayMonth, todayDate);
			todayDay = today.getDay();
			//alert(todayDay + '  :  ' + todayDate + '  :  ' + todayMonth + '  :  ' + todayYear);*/
			
			var date = xml.getElementsByTagName('date');
			for (var i=0; i<date.length; i++)
			{
				var dateObj = new Object();
				dateObj = getChildNodes(date[i].childNodes);
				//dateObj[i] = getAttributes(date[i]);
				
				dateObj.startDate = Number(date[i].attributes.getNamedItem('startDate').value.toString());
				dateObj.startMonth = Number(date[i].attributes.getNamedItem('startMonth').value.toString()) - 1;
				dateObj.endDate = Number(date[i].attributes.getNamedItem('endDate').value.toString());
				dateObj.endMonth = Number(date[i].attributes.getNamedItem('endMonth').value.toString()) - 1;
				dateObj.year = Number(date[i].attributes.getNamedItem('year').value.toString());
				eventArray.push(dateObj);
			}
			
			self.genEventsCalendar(today);
		}
	};
	
	this.genEventsCalendar = function(thisDate)
	{
		if (!thisDate)	thisDate = today;
		var date = thisDate.getDate();
		var day = thisDate.getDay();
		var month = thisDate.getMonth();
		var year = thisDate.getFullYear();
		
		if (month == todayMonth && year == todayYear)
		{
			date = todayDate;
			day = todayDay;
		}
		
		//Gen Left Details
		genDateDetails(date, day, month, year);
		
		//Gen Right Calendar
		/*var table = d.createElement('table');
		var tr = d.createElement('tr');
		var th = d.createElement('th');
		th.innerHTML = "S";
		tr.appendChild(th);
		table.appendChild(tr);*/
		
		// Find out when this month starts and ends.
		var thisMonthDate = new Date(year, month, 1);
		var nextMonthDate = new Date((month == lastMonth)?(year+1):year, (month == lastMonth)?0:(month+1), 1);
		var startDay = thisMonthDate.getDay();
		var endDay = Math.round((nextMonthDate.getTime() - thisMonthDate.getTime()) / (1000*60*60*24));
		
		
		var col = 7;
		var totalCell = 6*col;
		var num = 1;
		var table = d.getElementById('calandar').getElementsByTagName('table')[0];
		
		//Remove Rows
		while (table.rows.length > 1)	table.deleteRow((table.rows.length-1));
		
		for (var i=0; i<totalCell; i++)
		{
			if (i%col == 0)	var row = table.insertRow(-1);
			var cell = row.insertCell(-1);
			var pos = createDiv('', 'pos');
			
			if (i >= startDay && i < (endDay + startDay))
			{
				var str = num;
				
				//Check Events Date
				for (var j=0; j<eventArray.length; j++)
				{
					if (!eventArray[j].year == year)	continue;
					
					var isEvent = false;
					if (eventArray[j].startMonth == month && eventArray[j].endMonth == month)
					{
						if (num >= eventArray[j].startDate && num <= eventArray[j].endDate)
						{
							cell.startDate = eventArray[j].startDate;
							cell.endDate = eventArray[j].endDate;
							isEvent = true;
						}
					}
					else if (eventArray[j].startMonth == month)
					{
						if (num >= eventArray[j].startDate)
						{
							cell.startDate = eventArray[j].startDate;
							cell.endDate = endDay;
							isEvent = true;
						}
					}
					else if (eventArray[j].endMonth == month)
					{
						if (num <= eventArray[j].endDate)
						{
							cell.startDate = 1;
							cell.endDate = eventArray[j].endDate;
							isEvent = true;
						}
					}
					if (!isEvent)	continue;
					
					if (eventArray[j].holiday)	cell.className = 'sunday';
					
					var name = eval('eventArray[j].name' + lang);
					if (!name)	continue;
					
					//Highlight Events
					str = '<div id="day_'+num+'" class="eventDetails">'+name+'</div><a href="'+eventArray[j].link+'" target="'+eventArray[j].target+'">'+num+'</a>';
					
					cell.className = 'event';
					cell.num = num;
					cell.onmouseover = function()	{showEventDetail(this.num, this.startDate, this.endDate);};
					cell.onmouseout = function()	{hideEventDetail(this.num, this.startDate, this.endDate);};
					
					break;
				}
				
				if (i%col == 0 && !cell.className)	cell.className = 'sunday';
				
				pos.innerHTML = str;
				
				//Highlight Today
				if (date == num && month == todayMonth && year == todayYear)
				{
					//cell.className += ' todayDate';
					var todayDiv = createDiv('', 'todayDate');
					pos.appendChild(todayDiv);
				}
				
				cell.appendChild(pos);
				cell.id = 'date_' + num;
				
				num ++;
			}
			else
			{
				cell.innerHTML = "&nbsp;";
			}
		}
		//alert(startDay + "  :  " + endDay + "  :  " + totalCell);
		
		//table.style.visibility = "visible";
	}
	
	this.init();
}

function genDateDetails(date, day, month, year)
{
	var calandar = d.getElementById('calandarDay');
	
	calandar.innerHTML = "";
	
	var prevImg = createImg(('images/arrow_up.gif'), 'Previous Month', '', '', 'javascript:changeMonth(-1);');
	
	var monthDiv = createDiv('month');
	var holderDiv = createDiv('', 'monthDiv');
	var img = createImg(('images/calendar/' + monthArray[month].toLowerCase() + '.gif'), monthArray[month].toUpperCase());
	holderDiv.appendChild(img);
	var div = createDiv('', '', year);
	monthDiv.appendChild(holderDiv);
	monthDiv.appendChild(div);
	
	var nextImg = createImg(('images/arrow_down.gif'), 'Next Month', '', '', 'javascript:changeMonth(1);');
	
	var todayDiv = createDiv('today');
	var img = createImg(('images/today_icon.gif'), 'Today');
	todayDiv.appendChild(img);
	todayDiv.innerHTML += '&nbsp;今天';
	
	calandar.appendChild(prevImg);
	calandar.appendChild(monthDiv);
	calandar.appendChild(nextImg);
	calandar.appendChild(todayDiv);
	
	thisMonth = month;
	thisYear = year;
}

function changeMonth(index)
{
	thisMonth += index;
	
	if (thisMonth > lastMonth)
	{
		thisMonth = 0;
		thisYear += 1;
	}
	else if (thisMonth < 0)
	{
		thisMonth = lastMonth;
		thisYear -= 1;
	}
	
	self.genEventsCalendar(new Date(thisYear, thisMonth, 1));
}

/*display tip box*/
function showEventDetail(id, startDate, endDate)
{
	var layer = d.getElementById('day_'+startDate);	
	var btn = d.getElementById('date_'+startDate);	
	//var w = d.getElementById('calandar').getElementsByTagName('table')[0].offsetWidth;
	//var padValue = w - btn.offsetLeft;
	//var different = layer.offsetWidth - padValue + ((isIE)?5:3);
	
	layer.style.display = 'block';
	layer.style.top = -(layer.offsetHeight + ((isIE)?5:3)) + 'px';
	
	/*if (padValue < layer.offsetWidth)
	{
		var total = different + layer.offsetWidth;
		//layer.style.margin = '0px 0px 0px -'+total+'px';
		layer.style.left = -total + "px";
	}*/
	
	for (var i=startDate; i<=endDate; i++)
	{
		btn = d.getElementById('date_'+i);
		
		//btn.className = "holidayOver";
	}
}

function hideEventDetail(id, startDate, endDate)
{
	var layer = d.getElementById('day_'+startDate);
	var btn = d.getElementById('date_'+startDate);
	
	layer.style.display = 'none';
	
	for (var i=startDate; i<=endDate; i++)
	{
		btn = d.getElementById('date_'+i);
		
		//btn.className = "holiday";
	}
}
/*end of display tip box*/

	
function loadXML(url)
{
	var x;
	var self = this;
	
	this.action = function()	{};

	if (typeof(XMLHttpRequest) == 'undefined')
	{
		XMLHttpRequest = function()
		{
		    try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
				catch(e) {}
		    try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
				catch(e) {}
		    try { return new ActiveXObject("Msxml2.XMLHTTP"); }
				catch(e) {}
		    try { return new ActiveXObject("Microsoft.XMLHTTP"); }
				catch(e) {}
		    throw new Error("This browser does not support XMLHttpRequest.");
		};
	}

	x = new XMLHttpRequest();
	if (x.overrideMimeType)	x.overrideMimeType('text/xml');
	
	if (x)
	{
		x.onreadystatechange = function()
		{
			if (x.readyState == 4 && x.status == 200)
			{
				self.action(x);
			}
		}
		x.open('GET', url, true);
		x.send(null);
	}
}

function getChildNodes(xml)
{
	var obj = new Object();
	
	for (var i=0; i<xml.length; i++)
	{
		if (!isIE)	if (xml[i].toString() == '[object Text]')	continue;
		var name = xml[i].nodeName.toString();
		var value = (xml[i].firstChild)	?	xml[i].firstChild.data.toString()	:	'';
		obj[name] = value;
	}
	
	return obj;
}

function getAttributes(xml)
{
	var obj = new Object();
	
	for (var i=0; i<xml.attributes.length; i++)
	{
		obj[xml.attributes[i].name.toString()] = xml.attributes[i].value.toString();
	}
	
	return obj;
}