/******************************************************
* jCalendar
* Description: Javascript popup calendar that allow 
			to choose date from calendar. 
* Author: Jiwon Han
* Email: iamjiwon@hotmail.com
* virsion : v.94
* Last Modified : 7/15/2005
* Copyright (C) 2005 cybergolf.com
* Tested Browser : IE, FireFox

v.91
-added event handle that hide calendar when click any other area of calendar
v.92
-added border on selected day
-remove background color on today when disablePastDay mode is activated
v.93
--added option to set last month of calendar 
v.94
--Fixed next button show even calendar date is bigger than 
	maxMonth when last month of calendar is set up
--Fixed calendar date is can be bigger than maxMonth 
	when read date value from field and last month of calendar is set up
*******************************************************/

//Options
var disablePastday = true;
var maxMonth = 12;

//global varialbes
var userAgents = navigator.userAgent.toLowerCase();
var browser = new Object();
var returnField;
var disableMaxMonth = false;

if (maxMonth > 0){
	maxMonth--;
	disableMaxMonth = true
}
if(checkIt("konqueror"))
	browser.name="Konqueror";
else if(checkIt("safari"))
	browser.name="safari";
else if(checkIt("opera"))
	browser.name="opera";
else if(checkIt("msie"))
	browser.name="IE";
else if(checkIt("firefox"))
	browser.name="firefox";
else if(checkIt("netscape")){
	browser.name="netscape";
	browser.version=userAgents.charAt(8);
}
else
	browser.name="unknown";

function checkIt(str)
{
	return userAgents.indexOf(str)+1;
}
if (browser.name == "netscape" && browser.virsion == "4"){
	var STR_SHOW = "show";
	var STR_HIDE = "hide";
}
else{
	var STR_SHOW = "visible";
	var STR_HIDE = "hidden";
}

document.writeln ("<div id=jCalendar style='visibility:"+STR_HIDE+";position:absolute; z-index:10000;'></div>");

//Event Handle
document.onclick = documentClick;
document.getElementById("jCalendar").onclick = jCalendarClick;
function documentClick(e)
{
	var objCal = document.getElementById("jCalendar");
	if (objCal.style.visibility == STR_SHOW){
		if (!e) var e = window.event;
		if (e.target)
			var curObj = e.target;
		else
			var curObj = e.srcElement;
		if (curObj.name != returnField.name)
			hideJCalendar();
	}
}
function jCalendarClick(e)
{
	if (!e) var e = window.event;
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
}
//End Event Handle

function showJCalendar(theField,yy,mm)
{
	returnField	= (theField) ? theField : returnField;
	var theDate = new Date(theField.value);
	var theDate2 = new Date(returnField.value);
	var today = new Date();
	yy = (theDate.getFullYear()) ? theDate.getFullYear() : (isNaN(yy)) ? today.getFullYear() : yy;
	mm = (theDate.getMonth()+1) ? theDate.getMonth()+1 : (isNaN(mm)) ? today.getMonth()+1 : mm;
	if (disableMaxMonth){
		var maxDate = new Date();
		maxDate.setMonth(maxDate.getMonth()+maxMonth);
		var lastCalendarYear = maxDate.getFullYear();
		var lastCalendarMonth = maxDate.getMonth()+1;
		if (yy > lastCalendarYear || (yy == lastCalendarYear && mm > lastCalendarMonth)){
			yy = today.getFullYear();
			mm = today.getMonth()+1;
		}
	}
	yy2 = theDate2.getFullYear();
	mm2 = theDate2.getMonth()+1
	dd = (yy == yy2 && mm == mm2) ? theDate2.getDate() : null;	
	var calendarCode = generateCalendarCode(yy,mm,dd);
	var objCalendar = document.getElementById("jCalendar");
	objCalendar.style.visibility = STR_SHOW;
	objCalendar.style.left = calcLeftMargin(returnField);
	objCalendar.style.top = calcTopMargin(returnField);
	objCalendar.innerHTML = calendarCode;
}
function calcLeftMargin(theField)
{
	var posX = 0;
	var objX = theField;
	while (objX.offsetParent){
		posX += objX.offsetLeft;
		objX = objX.offsetParent;
	}
	//for homepage booking adjust
	if (BookingTap_Style == 1){
		if (browser.name == "IE")
			website_width = 964;
		else
			website_width = 980;
		width_adjust = (getWinowWidth()-website_width)/2;
		if (width_adjust > 0)
			posX -= width_adjust;
	}
	return posX;
}
function calcTopMargin(theField)
{
	var posY = 0;
	var objY = theField;
	while (objY.offsetParent){
		posY += objY.offsetTop;
		objY = objY.offsetParent;
	}
	posY += theField.offsetHeight;
	//for homepage booking adjust
	if (BookingTap_Style == 1)
		posY -= 107;
	return posY;
}
function hideJCalendar()
{
	var objCalendar = document.getElementById("jCalendar");
	objCalendar.style.visibility = STR_HIDE;
	objCalendar.innerHTML = "";
}	
function generateCalendarCode(yy,mm,dd)
{
	var prevYear = (mm == 1) ? yy - 1 : yy;
	var prevMonth = (mm == 1) ? 12 : mm - 1;
	var nextYear = (mm == 12) ? yy + 1 : yy;
	var nextMonth = (mm == 12) ? 1 : mm + 1;
	var thisDate = new Date(mm+"/1/"+yy);
	var firstDay = thisDate.getDay() + 1;
	var lastDay = getLastDayOfMonth(mm);
	var today = new Date();
	var todayYear = today.getFullYear();
	var todayMonth = today.getMonth()+1;
	var todayDate = today.getDate();
	if (disableMaxMonth){
		var maxDate = new Date();
		maxDate.setMonth(maxDate.getMonth()+maxMonth);
		var lastCalendarYear = maxDate.getFullYear();
		var lastCalendarMonth = maxDate.getMonth()+1;
	}
	var html = "<table cellpadding=2 cellspacing=0 width=180 height=180 style='border: 2px solid #666666; font-family:arial;' bgColor=ffffff><tr><td valign=top>";
	html += "<table width=100% cellpadding=3 cellspacing=2><tr>";
	if (disablePastday && yy <= todayYear && mm <= todayMonth)
		html += "<td style='font-size:14px;font-weight:bold;color:666666;background-color:666666;'><</td>";
	else
		html += "<td onClick=javascript:showJCalendar('',"+prevYear+","+prevMonth+"); style='cursor:pointer;font-size:14px;font-weight:bold;color:ffffff;background-color:666666;'><</td>";
	html += "<td width=100% align=center style='font-size:12px;font-weight:bold;background-color:666666;color:ffffff;'>"+getMonthName(mm)+" "+yy+"</td>";
	
	if (disableMaxMonth && (yy > lastCalendarYear || (yy == lastCalendarYear && mm >= lastCalendarMonth)))
		html += "<td style='font-size:14px;font-weight:bold;color:666666;background-color:666666;'>></td>";
	else
		html += "<td onClick=javascript:showJCalendar('',"+nextYear+","+nextMonth+");  style='cursor:pointer;font-size:14px;font-weight:bold;color:ffffff;background-color:666666;'>></td></tr></table>";
	html += "<table cellpadding=1 cellspacing=1 width=100% style='font-size:12px;'>"
	html += "<tr style='font-weight:bold;'><td align=center>S</td><td align=center>M</td><td align=center>T</td><td align=center>W</td><td align=center>T</td><td align=center>F</td><td align=center>S</td></tr>"
	var d = 0;
	for (i=1; i<=42; i++){
		if (i % 7 == 1) html += "<tr height=18>";
		if (i >= firstDay && i < (firstDay+lastDay)){
			if (disablePastday && ((yy < todayYear) || (yy <= todayYear && mm < todayMonth) || (yy <= todayYear && mm <= todayMonth && (d+1) < todayDate))){
				if (dd == (d+1))
					html += "<td align=center style='color:999999;background-color:cc0000;'><div style='background-color:ffffff;width:100%;height:100%;'>"+(++d).toString().strike()+"</div></td>";
				else
					html += "<td align=center style='color:999999;'>"+(++d).toString().strike()+"</td>";
			}
			else if (dd == (d+1))
				html += "<td align=center onClick=Javascript:setDateValue("+yy+","+mm+","+(++d)+"); style='cursor:pointer;background-color:cc0000;'><div style='background-color:ffffff;width:100%;height:100%;'>"+d+"</div></td>";
			else if (!disablePastday && (yy == todayYear && mm == todayMonth && (d+1) == todayDate))
				html += "<td align=center onClick=Javascript:setDateValue("+yy+","+mm+","+(++d)+"); style='cursor:pointer;background-color:eeeeee;'>"+d+"</td>";
			else
				html += "<td align=center onClick=Javascript:setDateValue("+yy+","+mm+","+(++d)+"); style='cursor:pointer;'>"+d+"</td>";
		}
		else
			html += "<td></td>";
		if (i % 7 == 0) html += "</tr>";
	}
	html += "</table>"
	html += "<table cellpadding=2 cellsapcing=0 width=100%><tr><td height=2></td></tr>";
	html += "<tr><td align=center style='cursor:pointer;font-size:12px;font-weight:bold;background-color:666666;color:ffffff;' onClick='Javascript:hideJCalendar();'>close</td>"
	html += "</tr></table>";
	html += "</td></tr></table>";
	return html;
}
function setDateValue(yy,mm,dd)
{
	hideJCalendar();
	returnField.value = mm+"/"+dd+"/"+yy;
}
function getMonthName(m)
{
	var months = ['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'];
	return months[m-1];
}
function getLastDayOfMonth(m)
{
	var endDays = [31,28,31,30,31,30,31,31,30,31,30,31];
	return endDays[m-1];
}

function getWinowWidth() {
  if( typeof( window.innerWidth ) == 'number' ) {
    myWidth = window.innerWidth;
  } else if( document.documentElement && ( document.documentElement.clientWidth) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
  } else if( document.body && ( document.body.clientWidth) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
  }
	return myWidth;
}


