var baseText = null;
var FormName;
var formHotel;
var hotelForm = new Array("dayOfMonth","month","year");
var inputControlName;
var maxDate = new Date(0);
var selectedDate = new Date(0);
var useSelectedDate = false;
var usedFor = "arrival";
var noAnchor = false;
var calendarTitle = "";
var popUp ;
if(typeof(top.calDate)=="undefined")
{
	top.calDate=new Date();
	top.calDate.setDate(1);
}
var calDate=top.calDate;
var currentDate = new Date();

/*********************************************************************
Main Calendar pop-up function
  divid - object in which calendar will display
  FormName - Form containing check-in and check-out date input fields
  usedFor - 'arrival' or 'departure'
**********************************************************************/
function popupCalendar(divid, frmName, usedFor){
	FormName = frmName;
	popUp = document.getElementById(divid);
//	popUp.style.top = "0px"; 
//	popUp.style.left = "0px";   
	popUp.style.display = "block";
	popUp.className = "calboxon";
	popUp.innerHTML = ""; //clear any previous content
	if (baseText == null) 
	baseText = popUp.innerHTML;  
	getDateFromInputField(FormName, usedFor);
	if(usedFor == "arrival"){
		calendarTitle = "Check-In";
		popUp.style.top = "0px"; 
		popUp.style.left = "0px";   
	} else {
		calendarTitle = "Check-Out";
		popUp.style.top = "0px"; 
		popUp.style.left = "83px"; 
	}
	// create calendar with header (showing usage), close button and function which draws remainder of calendar
	//alert(usedFor);
	//alert(calDate.getMonth());
	var calNew = "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" width=\"100%\" style=\"width:100%;padding:0;margin:0;background-color:#012674;border:1px solid #B0D1E3;border-bottom:0px;\"><tr><td style=\"width:100%;padding:0;margin:0;color:#ffffff;font-size:11px;line-height:18px;font-weight:bold;\">&nbsp;" + calendarTitle + "</td><td style=\"padding:0px 6px 0px 0px;line-height:18px;text-align:right;vertical-align:middle;\"><a href=\"javascript:void(0);\" onclick=\"hidePopup(\'calPopUp\');\"><img src=\"/images/btn-close-grey.gif\" border=\"0\"><a></td></tr></table>" + DrawCalendarNew();
	popUp.innerHTML  = calNew;	
}

/*****************************
Function to hide the calendar
*****************************/
function hidePopup(divid){   
	var popUp = document.getElementById(divid);   
	popUp.style.display = "none";
	popUp.className = "calboxoff";
	//popUp.style.visibility = "hidden";
}

/******************************************
Function to determine whether a date falls 
within an acceptable pre-defined range
******************************************/
function withInBoundry(inputDate){
	var inDt = new Date(inputDate);
	var chkMaxDt = new Date();
	var currDt = new Date();
	chkMaxDt.setYear(formHotel.elements["maxYear"].value);
	chkMaxDt.setMonth((formHotel.elements["maxMonth"].value) - 1);
	chkMaxDt.setDate(formHotel.elements["maxDayOfMonth"].value);
	//alert(chkMaxDt + "   "  + inputDate + "   "  + inDt + "     " + currDt + 
	//		"     " + dateDiff(chkMaxDt.getDate(),chkMaxDt.getMonth(),chkMaxDt.getYear(),inDt) + 
	//		"     " + dateDiff(currDt.getDate(),currDt.getMonth(),currDt.getYear(),inDt));
	if(dateDiff(chkMaxDt.getDate(),chkMaxDt.getMonth(),chkMaxDt.getFullYear(),inDt) < 0 ||
		dateDiff(currDt.getDate(),currDt.getMonth(),currDt.getFullYear(),inDt) > 0 ){		
		return false;
	}
	return true;
}

/*****************************************************************
// This method picks already entered value from check-in/check-out fields
// depending upon the parameter usedFor
// FormName - form having check-in and check-out fields
// field - It can have values 'arrival' or 'departure' depending upon 
// which input field or calendar icon user has clicked.
*******************************************************************/
function getDateFromInputField(FormName, field){
	if(field == "arrival"){
		inputControlName = "arrDate";
		usedFor = 'arrival';
	} else if(field == "departure"){
		inputControlName = "depDate";
		usedFor = 'departure';
	}

	if (Browser.nav4){
		if (document.layers['DivBotHotel']){
			formHotel = document.layers['DivBotHotel'].document.forms[FormName];
		}
	}
	else{
		formHotel = document.forms[FormName];
	}

	var inputDate = formHotel.elements[inputControlName].value;

	if(inputDate!= ''){ 
		if(isValidDate(inputDate)){		
			selectedDate = new Date(inputDate); 
			useSelectedDate = true;
		}else{
			inputDate = '';
			useSelectedDate = false;	
		}
	}
}
	
/****************************
Function to determine whether 
a year is leap year or not
*****************************/
function isLeapYear(year){
	if((year%4)==0)
	{
		if(year%100==0)
		{
			if(year%400==0) return true; else return false;
		}
		else return true;
	}
	else
		return false;
}

/******************************************
Function to create row of months and 
container for calendars
******************************************/
function createCalendar(){	
//	var monthNum=calDate.getMonth() - 1; 
	var monthNum= new Date().getMonth() - 1;
	/*=================================
	Create table of month names & links
	===================================*/
//	alert("Create Calendar monthNum "+ monthNum);
	var curMonthNum = currentDate.getMonth();
	var monthSeparator = "|";
	var monthNames = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
	var startTable = "<table border='0' cellpadding='0' cellspacing='0' width='100%' style='border:1px solid #B0D1E3;border-bottom-width:0px;'><tr>";
	var monthRow = "";	
	var counter =0;
	var monthIndex =0;
	for(var i = curMonthNum; i < monthNames.length ; i++,counter++){
		if(counter >10 ){			
			(i+1)>11 ? monthIndex=1 : monthIndex = i+1;
			if(i==-1) i=11;
			monthRow+= "<td style='text-align:left;padding:0px;margin:0;line-height:14px;'>&nbsp;<a href='javascript:reDrawCalendar("+i+");' style='font-size:10px;font-weight:bold;color:#213F5C;text-decoration:none;'>" + monthNames[i]+ "</a>&nbsp;</td>";		
			break;
		}else{			
			monthIndex = i+1;
			if(i==-1) i=11;
			monthRow+= "<td style='text-align:left;padding:0px;margin:0;line-height:14px;'>&nbsp;<a href='javascript:reDrawCalendar("+i+");' style='font-size:10px;font-weight:bold;color:#213F5C;text-decoration:none;'>" + monthNames[i] + "</a>&nbsp;" + monthSeparator + "</td>";
		}
		if(i == 11) 
			i= - 1;			
	}	
	monthRow+= "</tr></table>";
	/*===============================
	Create table containing calendars
	=================================*/
	calRow = "<table border='0' cellpadding='0' cellspacing='0' class='calendarContainer'><tr><td style='width:50%;padding:0px;margin:0px;border-right:1px solid #B0D1E3;'>"+ showCalendar(0) +" </td><td style='width:50%;padding:0px;margin:0px;'>"+ showCalendar(1) +"</td></tr></table>";
	calTable = startTable + monthRow + calRow ;
			//alert("calTable: " + calTable);
	return calTable;
}

/***********************************
Function to create actual calendar 
for a month
************************************/
function showCalendar(index)
{	
	var calendarTable="";
//	var curYear=calDate.getFullYear();
	var monthNum=0; 
	var dayOfMonth=0;
	var layerNum=0;
	// get name of form containing date input
	if (Browser.ie || Browser.nav6up)
	{
		if (document.forms[FormName])
		{
			formHotel = document.forms[FormName];			
		}
	}
	if (Browser.nav4)
	{
		if (document.layers['DivBotHotel'])
		{
			formHotel = document.layers['DivBotHotel'].document.forms[FormName];		
		}
	}
	// get current value for date input (to be used as currently selected date)
	var inputDate = formHotel.elements[inputControlName].value;

	if (inputDate != ''){
		if(isValidDate(inputDate)){	
			selectedDate = new Date(inputDate); 	
			useSelectedDate = true;	
		}else{
			inputDate = '';
			useSelectedDate = false;	
		}
	}	
	
	var checkNext = formHotel.elements["maxYear"].value + "" + formHotel.elements["maxMonth"].value;
	maxDate.setYear(formHotel.elements["maxYear"].value);
	maxDate.setMonth(formHotel.elements["maxMonth"].value - 1);// Here months are starting from index 0 that's why we are reducing 1 from the month that we are picking from form.
	maxDate.setDate(formHotel.elements["maxDayOfMonth"].value);
	//alert(checkNext);
	//alert(maxDate);
	
	var set = false;
	dom = (document.getElementById)? true : false;
	ie4 = (document.all)? true : false;
	ns6= (dom && !ie4)? true : false;
	ns4 = (document.layers)? true:false;
	
	if (ie4) {
		//alert(parseInt(checkNext.substring(0,4), 10)%2000 +" XXX "+ calDate.getYear()%100 );
		if(parseInt(checkNext.substring(0,4), 10)%2000== calDate.getFullYear()%100 && parseInt(checkNext.substring(6,4), 10)== calDate.getMonth()){
			set = true;
		}
	} else if (ns4 || ns6) {
		//alert(calDate.getYear()%100);
		//alert(checkNext.substring(0,4)%);
		if(parseInt(checkNext.substring(0,4), 10)%2000 == calDate.getFullYear()%100 && parseInt(checkNext.substring(6,4), 10)== calDate.getMonth()){
			set = true;
		}		
	}	
	
	// start calendar table
	var tableStart = "<table border='0' cellpadding='0' cellspacing='0' width='100%'><tr><td><table border='0' cellpadding='0' cellspacing='0' width='100%' align='center' class='calendar'>";

	calendarTable+=tableStart; //+afterYear;


	if (index == '0'){	
		monthNum = calDate.getMonth();		
	}else{		
		if(calDate.getMonth() == 0){		
			 monthNum = index;			 
		}else{
		 	monthNum = calDate.getMonth() + index;		 	
		}
				
		if(monthNum == 12)
			monthNum =0;
			
		var		currMonthIndex = new Date().getMonth();
		var		selMonthIndex = monthNum;
		if (selMonthIndex <= currMonthIndex){
			year = new Date().getFullYear();
			year =  year + 1 ;
			calDate.setYear(year);
		}	
	}
	
	var curYear=calDate.getFullYear();	
	
	// add month header row for this calendar
	var monthNames=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
/*	(calDate.getMonth() == 0) ? monthNum = (11 + index) : monthNum = (calDate.getMonth()-1) + index;
	if(monthNum == 12)
		monthNum =0;			
*/
	var monthRowStart="<tr><td colspan='9' style='width:100%;padding:0px;margin:0px'><table border='0' cellpadding='0' cellspacing='0' width='100%' style='width:100%;padding:0px;margin:0px;'><tr><td style='padding-left:6px;padding-right:6px;text-align:center;font-size:11px;line-height:14px;font-weight:bold;'>";
	var monthRowEnd="</td><td style='text-align:right;padding:0px;margin:0px;width:100%;background-color:#E7EFFF;border:1px solid #B0D1EB;border-width:0px 0px 1px 1px;line-height:14px;'>&nbsp;</td></tr></table></td></tr>";
	calendarTable+=monthRowStart+monthNames[monthNum]+"&nbsp;"+calDate.getFullYear()+monthRowEnd;

	// add day of week header row for this calendar
	calendarTable+="<tr style='text-align:center;'><td style='width:5px;margin:0px;padding:0px;'>&nbsp;</td><td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td><td style='width:5px;'>&nbsp;</td></tr>"

	// create rows of days for this calendar
	var daysInMonthes=[31,28,31,30,31,30,31,31,30,31,30,31];
	var tdTagForDay="<td class='dayCellInactive'>";
	var tdTagForCurrentDay="<td class='dayCellCurrent'>";
	var tdTagForActiveDay="<td class='dayCellActive'>";
	var tdTagForInactiveDay="<td class='dayCellInactive'>";
	var aTagForPastFutureDay="<div class='dayBorderInactive'>";
	var aTagForDay="<div class='dayBorderActive' onmouseover='this.className=\"dayBorderActiveHover\"' onmouseout='this.className=\"dayBorderActive\"'><a class='dayLink' href='javascript:divClick(\"";
	var aTagForSelectedDay="<div class='dayBorderSelected'><a class='dayLinkSelected' href='javascript:divClick(\"";
	var aTagForCurrentDay="<div class='dayBorderActive' onmouseover='this.className=\"dayBorderActiveHover\"' onmouseout='this.className=\"dayBorderActive\"'><a class='dayLinkCurrent' href='javascript:divClick(\"";
	var tmpDate = new Date(calDate.getFullYear(), monthNum, 1);	
	var startDay = tmpDate.getDay();
	var daysInMonth=daysInMonthes[monthNum];
	if (monthNum==1 && isLeapYear(curYear)) daysInMonth=29;
	for (var j=0; j < 6; j++)
	{
		if(j==0 || j==2 || j==4)
		{
			calendarTable+="<tr align='center'><td style='width:5px;margin:0px;padding:0px;'>&nbsp;</td>";
		}
		else
		{
			calendarTable+="<tr align='center'><td style='width:5px;margin:0px;padding:0px;'>&nbsp;</td>";
		}
		for (var k=0; k < 7; k++)
		{
			//calendarTable+=tdTagForDay;

			if((j==0 && k < startDay) || (dayOfMonth==daysInMonth))
			{
				calendarTable+=tdTagForDay+"&nbsp;</td>";
			}
			else
			{
				if ((dayOfMonth == (currentDate.getDate() - 1)) && (monthNum == currentDate.getMonth()) && (curYear == currentDate.getFullYear()) )
				{
					calendarTable+=tdTagForActiveDay+aTagForCurrentDay;
				}
				else if(dateDiff(dayOfMonth+1 ,monthNum,curYear,currentDate)< 0 || dateDiff(dayOfMonth+1,monthNum,curYear,maxDate) > 0){					
					calendarTable+=tdTagForInactiveDay+aTagForPastFutureDay;
					noAnchor = true;
				}
				else if(useSelectedDate == true &&(dayOfMonth == (selectedDate.getDate() - 1)) && (monthNum == selectedDate.getMonth()) && (curYear == selectedDate.getFullYear())){
					calendarTable+=tdTagForCurrentDay+aTagForSelectedDay;
				}
				else
				{
					calendarTable+=tdTagForActiveDay+aTagForDay;
				}
				
				if(noAnchor == true){
					calendarTable+=(++dayOfMonth)+"</div>";
					noAnchor = false;
				}else{
					calendarTable+=curYear+"\",\""+(monthNum+1)+"\",\""+(dayOfMonth+1)+"\",\""+FormName+"\",\""+usedFor;
					calendarTable+="\")'>";
					calendarTable+=(++dayOfMonth)+"</a>";
					}
				calendarTable+="</td>";
				layerNum++;
			}
		}
		calendarTable+="<td style='width:5px;'>&nbsp;</td></tr>";
	}

	// close table for this calendar
	var documentEnd="</table></td></tr></table>";
	calendarTable+=documentEnd;			
	return calendarTable;
}

/****************************************
Function to create a calendar.
Called by DrawCalendarNew() and
reDrawCalendar()
*****************************************/
function DrawCalendar()
{
	if(Browser.ie || Browser.nav6up || Browser.opera)
	{
		//alert("if");
		var finalCal=createCalendar();
		return finalCal;
	}
	else
	{
		//alert("else");
		var tmp = createCalendar();
		document.layers[0].document.open();
		document.layers[0].document.write(tmp);
		document.layers[0].document.close();
	}
	
	//alert(selectedDate.getMonth() + "  " + selectedDate.getYear());
	//alert(calDate);
}

/****************************************
Function to display initial calendar.
Selecting another month when the
calendar is already displayed will call 
reDrawCalendar())
*****************************************/
function DrawCalendarNew()
{
	//alert("formHotel.elements[inputControlName].value" + formHotel.elements[inputControlName].value);
	if(formHotel.elements[inputControlName].value != ''){		
		if(isValidDate(formHotel.elements[inputControlName].value)){	
			if(withInBoundry(formHotel.elements[inputControlName].value)){	
				calDate.setYear(selectedDate.getFullYear());	
				calDate.setMonth(selectedDate.getMonth() );	
				calDate.setDate(selectedDate.getDate() );	
			}	
		}
	}
	return DrawCalendar();
}

/****************************************
Function to redraw a new set of months
on the calendar control when a user 
selects a different month on the calendar
control already being displayed
*****************************************/
function reDrawCalendar(selMonthIndex){

	var currMonthIndex = new Date().getMonth();
	var month ;
	var year ;

	//alert("before setting date " + calDate.getYear() + +" "+ calDate.getMonth());
	if (selMonthIndex < currMonthIndex){	
		month =	selMonthIndex ;
		year = new Date().getFullYear();
		year =  year + 1 ;
		calDate.setYear(year);
		calDate.setMonth(month);
	}else if(selMonthIndex >= currMonthIndex){		
		month =	selMonthIndex ;		
		year = new Date().getFullYear();		
		calDate.setYear(year);			
		calDate.setMonth(month);
	}
	
//		DrawCalendar();	
//		var calNew = "<div id=\"statusbar\"><a href=\"#\" onclick=\"hidePopup(\'calPopUp\');\">Close window<a></div>"+ DrawCalendar();
	var calNew = "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"width:100%;padding:0px;margin:0px;background-color:#012674;border:1px solid #B0D1E3;border-bottom:0px;\"><tr><td style=\"padding:0px;color:#ffffff;font-size:11px;line-height:18px;font-weight:bold;\">&nbsp;" + calendarTitle + "</td><td style=\"padding:0px 6px 0px 0px;line-height:18px;text-align:right;vertical-align:middle;\"><a href=\"javascript:void(0);\" onclick=\"hidePopup(\'calPopUp\');\"><img src=\"/images/btn-close-grey.gif\" border=\"0\"><a></td></tr>"+ DrawCalendar() + '</table>';
		//alert("calNew" + calNew);		
		popUp.innerHTML  = calNew;	
}

/****************************************
Function to calculate the difference (in 
milliseconds) of two dates
*****************************************/
function dateDiff(dayOfMonth,monthNum,curYear, date2){
	 //alert(dayOfMonth + "  " + monthNum + "  " +curYear);
	date1 = new Date(0);	
	date1.setDate(dayOfMonth);
	date1.setMonth(monthNum);
	date1.setYear(curYear);
	date1.setHours(23);
	date1.setMinutes(59);
	date1.setSeconds(59);	
	date2.setHours(23);
	date2.setMinutes(59);
	date2.setSeconds(59);
    var date1_ms = date1.getTime();
    var date2_ms = date2.getTime();

    // Calculate the difference in milliseconds
    var difference_ms = date1_ms - date2_ms;
    return difference_ms;
}

var lastEl=null;

function doNothing(year,month,day){
	//Do nothing if dates are in past or in too far future(> 360 days).
}

/**********************************************************************************
Function to set the date control input value to the date selected from the calendar
frmName - form Name
usedFor -  can have values 'arrival' or 'departure'
***********************************************************************************/
function divClick(year,month,day,frmName,usedFor){
	var formHotel = null;
	var strMonthYear;		
	if(month < 11){
		strMonthYear = year + "0" + (parseInt(month) - 1);
	}else{
		strMonthYear = year + (parseInt(month) - 1);
	}	
	if (Browser.nav4){
		if (document.layers['DivBotHotel']){
			formHotel = document.layers['DivBotHotel'].document.forms[frmName];
		}			
	} else {
		if (document.forms[frmName]){
		formHotel = document.forms[frmName];
		}
	}

	if (formHotel != null){
	 // decremented array index since the default of blank is no longer available
      formHotel.elements[inputControlName].value=month+ "/" + day + "/" + year;
      if(usedFor == 'arrival'){      		
	      changeDepDateAuto(formHotel, formHotel.elements['packagesTest'].value);
      }
      // This is done to prevent erroneous condition if the calendar is invoked from the 
      // Hotel Search pages. 
      try{      		
    	  formHotel.elements[hotelForm[0]].onchange();
      }catch(e){}	
	}
	hidePopup('calPopUp');
	return;
}

/***********************************************************************************
Function to validate check-in, check-out dates without the alerts.
dtStr- can be check-in or check-out date
***********************************************************************************/
function isValidDate(dtStr){
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strMonth=dtStr.substring(0,pos1)
	var strDay=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		//alert("The date format should be : mm/dd/yyyy")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
	//	alert("Please enter a valid month")
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		//alert("Please enter a valid day")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYr || year>maxYr){
		//alert("Please enter a valid 4 digit year between "+minYr+" and "+maxYr)
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		//alert("Please enter a valid date")
		return false
	}
return true
} 