
var onresCurDate, onresDate1, onresDate2, onresDateLastClicked, blnFirstAction; 
var intMonth1, intMonth2;

function onresGetDaysInMonth(iMonth, iYear) {
    var dPrevDate = new Date(iYear, iMonth, 0);
    return dPrevDate.getDate();
}
    
function onresBuildCal(iYear, iMonth) {
    var aMonth = new Array();
    aMonth[0] = new Array(7);
    aMonth[1] = new Array(7);
    aMonth[2] = new Array(7);
    aMonth[3] = new Array(7);
    aMonth[4] = new Array(7);
    aMonth[5] = new Array(7);
    aMonth[6] = new Array(7);
    var dCalDate = new Date(iYear, iMonth-1, 1);
    var iDayOfFirst = dCalDate.getDay();
    var iDaysInMonth = onresGetDaysInMonth(iMonth, iYear);
    var iVarDate = 1;
    var i, d, w;

    aMonth[0][0] = "S";
    aMonth[0][1] = "M";
    aMonth[0][2] = "T";
    aMonth[0][3] = "W";
    aMonth[0][4] = "T";
    aMonth[0][5] = "F";
    aMonth[0][6] = "S";

    for (d = iDayOfFirst; d < 7; d++) {
        aMonth[1][d] = iVarDate;
        iVarDate++;
    }
    for (w = 2; w < 7; w++) {
        for (d = 0; d < 7; d++) {
            if (iVarDate <= iDaysInMonth) {
                aMonth[w][d] = iVarDate;
                iVarDate++;
            }
        }
    }
    return aMonth;
}


function onresGetIdFromDate(iYear, iMonth, iDay)
{
    var strID;
    strID = "cal" + iYear;
    if (iMonth < 10){
        strID += "0" + iMonth;
    } else {
        strID += iMonth;
    }
    if (iDay < 10){
        strID += "0" + iDay;
    } else {
        strID += iDay;
    }
    return strID;
}

function onresGetIdFromDateObject(objDate)
{
    var strID = onresGetIdFromDate(objDate.getFullYear(),objDate.getMonth()+1,objDate.getDate());
    return strID;
}

function onresGetDateFromId(strID)
{
    var varDay,varMonth,varYear,objDate;
    strID = strID.replace(/cal/,"");
    varYear = parseInt(strID.substring(0,4));
    varMonth = parseInt(parseFloat(strID.substring(4,6)));
    varDay = parseInt(parseFloat(strID.substring(6,8)));
    //alert ("day:" + varDay + " month:" + varMonth + " year:" + varYear)
    objDate = new Date();
    objDate.setFullYear(varYear);
    objDate.setDate(varDay);
    objDate.setMonth(varMonth-1);
    
    return objDate;
}

function onresBuildCalHTML(iYear, iMonth) {
    var myMonth, strHTML, intTempDay, objDate, intYesterday;

    myMonth = onresBuildCal(iYear, iMonth);
    
    // Find current date to disable dates in the past
    objDate = new Date();
    if ((objDate.getFullYear() > iYear) || (((objDate.getMonth()+1) > iMonth) && (objDate.getFullYear() == iYear)))
    {
        intYesterday = 40;
    }
    else
    {
        if (iMonth == (objDate.getMonth()+1))
        {
            intYesterday = objDate.getDate();
        }
        else
        {
            intYesterday = 0;
        }
    }
    
    strHTML = "<table class='onresCalendarTable'>"
    strHTML += "<tr>";
    strHTML += "<td class='onresCalendarDayOfWeek'>" + myMonth[0][0] + "</td>";
    strHTML += "<td class='onresCalendarDayOfWeek'>" + myMonth[0][1] + "</td>";
    strHTML += "<td class='onresCalendarDayOfWeek'>" + myMonth[0][2] + "</td>";
    strHTML += "<td class='onresCalendarDayOfWeek'>" + myMonth[0][3] + "</td>";
    strHTML += "<td class='onresCalendarDayOfWeek'>" + myMonth[0][4] + "</td>";
    strHTML += "<td class='onresCalendarDayOfWeek'>" + myMonth[0][5] + "</td>";
    strHTML += "<td class='onresCalendarDayOfWeek'>" + myMonth[0][6] + "</td>";
    strHTML += "</tr>";
    for (w = 1; w < 7; w++) {
        strHTML += "<tr>"
        for (d = 0; d < 7; d++) {
            intTempDay = myMonth[w][d];
            if (!isNaN(intTempDay)) {
                strHTML += "<td id='" + onresGetIdFromDate(iYear,iMonth, intTempDay) 
                if (intTempDay > intYesterday)
                    strHTML += "' class='onresDay' onclick='onresSelectDay(this)'>";
                else
                    if (intTempDay == intYesterday)
                        strHTML += "' class='onresDayToday' onclick='onresSelectDay(this)'>";
                    else
                        strHTML += "' class='onresDayDisabled'>";
                strHTML += intTempDay;
            } else {
                strHTML += "<td class='onresDay'>&nbsp;";
            }
            strHTML += "</td>"
        }
        strHTML += "</tr>";
    }
    strHTML += "</table>"
    return strHTML;
}

function onresDrawCal(objDiv, iYear, iMonth) {
    objDiv.innerHTML = onresBuildCalHTML(iYear, iMonth);
    //alert(objDiv.innerHTML);
}

function getElementsByClassName(strClass)
{
    var retnode = [];
    var myclass = new RegExp('\\b'+strClass+'\\b');
    var elem = document.getElementsByTagName('td');
    for (var i = 0; i < elem.length; i++) {
        var classes = elem[i].className;
        if (myclass.test(classes)) retnode.push(elem[i]);
    }
    return retnode;
}

function onresGetMonthName(intMonth){
    if (intMonth>11)
    {
        intMonth = 0;
    }
    var arrMonthNames = new Array(7);
    arrMonthNames[0] = "January";
    arrMonthNames[1] = "February";
    arrMonthNames[2] = "March";
    arrMonthNames[3] = "April";
    arrMonthNames[4] = "May";
    arrMonthNames[5] = "June";
    arrMonthNames[6] = "July";
    arrMonthNames[7] = "August";
    arrMonthNames[8] = "September";
    arrMonthNames[9] = "October";
    arrMonthNames[10] = "November";
    arrMonthNames[11] = "December";
    return arrMonthNames[intMonth];
}


function onresAddMonth(d,month){
    t  = new Date (d);
    t.setMonth(d.getMonth()+ month) ;
    if (t.getDate() < d.getDate())
    {
        t.setDate(0);
    }
    return t;
} 

function dayDiff(dtDate1,dtDate2){
	var intMS1 = dtDate1.valueOf();
	var intMS2 = dtDate2.valueOf();
	var intDays1 = intMS1/1000/60/60/24;
	var intDays2 = intMS2/1000/60/60/24;
	var intDiff = intDays2-intDays1;
	return intDiff;
}

function dayAdd(intDays,objDate){
	var intDate = objDate.valueOf();
	var intAdd = (intDays * 24 * 60 * 60 * 1000);
	intDate = intDate + intAdd;
	var objReturnDate = new Date(intDate);
	return objReturnDate;
}

function OutputDateString(objDate){
	var intYear = objDate.getFullYear();
	if(intYear < 2000){
		intYear = intYear + 100;
	}
	var arrMonths = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

	return objDate.getDate() + " " + arrMonths[objDate.getMonth()] + " " + intYear;
}

// *********************************************************************************
// Functions below interact directly with specific elements on the HTML page
// *********************************************************************************

function onresSetMonthHeading()
{
    document.getElementById("onresCalendarMonth1").innerHTML = onresGetMonthName(intMonth1);
    document.getElementById("onresCalendarMonth2").innerHTML = onresGetMonthName(intMonth2);
}

function onresCalendarAddMonth(intM)
{
    onresCurDate = onresAddMonth(onresCurDate,intM);
    var dateNextMonth = new Date(onresCurDate);
    dateNextMonth = onresAddMonth(dateNextMonth,1);
    
    intMonth1 = onresCurDate.getMonth();
    intMonth2 = dateNextMonth.getMonth();
    onresDrawCal(document.getElementById("onresCalendar1"),onresCurDate.getFullYear(), intMonth1+1);
    onresDrawCal(document.getElementById("onresCalendar2"),dateNextMonth.getFullYear(), intMonth2+1);
    onresSetMonthHeading();
    onresHighlightDateRange();
}

function onresSelectDay(objCell){
    var strID = objCell.id;
    var objDate = onresGetDateFromId(strID);
    
    // On first click only we need to clear the defaults
    if (blnFirstAction) 
    {
        var intNights = document.getElementById("NumNights").selectedIndex;
        onresDate1 = objDate;
        onresDate2 = dayAdd(intNights,onresDate1);
    }
    else // normal logic after first user action
    {
        if (objDate <= onresDateLastClicked){
            onresDate1 = objDate;
            onresDate2 = onresDateLastClicked;
        } else {
            onresDate1 = onresDateLastClicked
            onresDate2 = objDate;
        }
    }
    
    onresDateLastClicked = objDate;
    onresSetForm();
}

function ChangeNumNights(){
	var intNumNights = document.getElementById("NumNights").selectedIndex;
	var objStartDate = new Date(document.getElementById("StartDate").value);
	var objEndDate = new Date(document.getElementById("EndDate").value);
	
	if(intNumNights > 0){
		if(!isNaN(objStartDate)){
			objEndDate = dayAdd(intNumNights,objStartDate);
			onresDate1 = objStartDate;
			onresDate2 = objEndDate;
			document.getElementById("EndDate").value = OutputDateString(onresDate2);
		} else {
			if(!isNaN(objEndDate)){
				objStartDate = dayAdd((0 - intNumNights),objEndDate);
				onresDate1 = objStartDate;
			    onresDate2 = objEndDate;
			    document.getElementById("StartDate").value = OutputDateString(onresDate1);
			}
		}
		onresHighlightDateRange();
		setDropDownDates()
	}
}

//function SetDate(strFieldName, objDate){
//    document.getElementById(strFieldName).value = OutputDateString(objDate);
//}

function onresSetForm()
{
    document.getElementById("StartDate").value = OutputDateString(onresDate1);
    document.getElementById("EndDate").value = OutputDateString(onresDate2);
    CalculateNumNights();
    onresHighlightDateRange();
    setDropDownDates();
}

function onresClearHighlightedDates()
{
    var i;
    var arrCells = getElementsByClassName('onresDaySelected');
    for (i = 0; i < arrCells.length; i++)
    {
        arrCells[i].className = 'onresDay';
    }
}

function onresHighlightDateRange()
{
    var objCell, strID, blnStarted;
    blnStarted = false;
    
    onresClearHighlightedDates();
    
    var objDate = new Date();
    if (onresDate1 > objDate)
        objDate = new Date(onresDate1);
  
    while (objDate < onresDate2)
    {
        strID = onresGetIdFromDateObject(objDate);
        objCell = document.getElementById(strID);
        
        if (objCell != null)
        {
            objCell.className = 'onresDaySelected';
            blnStarted = true;
        }
        else
        {
            if (blnStarted)
                break;
        }
        objDate = dayAdd(1,objDate);
    }
    objCell = document.getElementById(onresGetIdFromDateObject(onresDate2));
    if (objCell != null)
    {
        objCell.className = 'onresDaySelected';
    }
    blnFirstAction = false;
}

function CalculateNumNights(){
	var objStartDate = new Date(document.getElementById("StartDate").value);
	var objEndDate = new Date(document.getElementById("EndDate").value);
	var intNumNights = dayDiff(objStartDate,objEndDate)
	if((intNumNights > -1) && (intNumNights < 15)){
		document.getElementById("NumNights").selectedIndex = intNumNights;
	} else {
		document.getElementById("NumNights").selectedIndex = 15;
	}
}

function onresCalendarClear()
{
    blnFirstAction = true;
    onresCurDate = new Date();
    onresDate1 = dayAdd(2,onresCurDate);
    onresDate2 = dayAdd(3,onresCurDate);
    onresDateLastClicked = onresDate2;
    onresSetMonthsToDateRange();
    setDropDownDates();
    //document.getElementById("NumNights").selectedIndex = 2;
    //ChangeNumNights();
    onresSetForm();
    onresHighlightDateRange();
    blnFirstAction = true;
}

function onresSetMonthsToDateRange()
{
    if ((onresDate1.getMonth() < intMonth1) || (onresDate2.getMonth() > intMonth2) || (onresDate1.getFullYear() != onresDate2.getFullYear()))
    {
        intMonth1 = onresDate1.getMonth();
        var dateNextMonth = onresAddMonth(onresDate1,1);
        intMonth2 = dateNextMonth.getMonth();
        onresDrawCal(document.getElementById("onresCalendar1"),onresDate1.getFullYear(), intMonth1+1);
        onresDrawCal(document.getElementById("onresCalendar2"),dateNextMonth.getFullYear(), intMonth2+1);
        onresSetMonthHeading();
    }
}

function setCalendarFromForm()
{
    var objDate1, objDate2;
    var objDate1 = document.getElementById("StartDate");
    var objDate2 = document.getElementById("EndDate");
    try
    {
        objDate1 = new Date(objDate1.value);
        objDate2 = new Date(objDate2.value);
    }
    catch(err)
    {
        // likely invalid date
        return false;
    }
    onresDate1 = objDate1;
    onresDate2 = objDate2;
    CalculateNumNights();
    onresSetMonthsToDateRange();
    onresHighlightDateRange();
}

function formSubmit(){
    var objDdlCode = document.getElementById("ddlCode");
    var objCode = document.getElementById("Code");
    if (objDdlCode != null)
    {
        if (objDdlCode.selectedIndex > 0)
        {
            objCode.value = objDdlCode.options[objDdlCode.selectedIndex].value;
        }
    }
    // hack to get google analytics working on Poco Inn
    if (document.bookform.VendorID.value == "425")
    {
        //alert("425");
        pageTracker._linkByPost(document.bookform);
        //alert(document.bookform.action);
    }
    
	document.bookform.ReferringPage.value = getReferrerCookie("ReferringPage");
	document.bookform.submit();
}

window.onload=function(){
    onresCurDate = new Date();
    var intDaysInAdvanceBooking, objField;
    intDaysInAdvanceBooking = 2
    objField = document.getElementById("DaysInAdvanceBooking")
    if (objField){
        intDaysInAdvanceBooking = parseInt(objField.value);
        if (intDaysInAdvanceBooking < 1)
            intDaysInAdvanceBooking = 0;
    }
    
    intMonth1 = onresCurDate.getMonth();
    var dateNextMonth = onresAddMonth(onresCurDate,1);
    intMonth2 = dateNextMonth.getMonth();
    onresDrawCal(document.getElementById("onresCalendar1"),onresCurDate.getFullYear(), intMonth1+1);
    onresDrawCal(document.getElementById("onresCalendar2"),dateNextMonth.getFullYear(), intMonth2+1);
    onresSetMonthHeading();
    
    onresDate1 = dayAdd(intDaysInAdvanceBooking,onresCurDate);
    onresDate2 = dayAdd(intDaysInAdvanceBooking + 1,onresCurDate);
    onresDateLastClicked = onresDate2;
    onresSetForm();
    blnFirstAction = true;
    
    // Javascript hack to make adjacent tables the same size
    var objTable1 = document.getElementById("tblSearchForm");
    var objTable2 = document.getElementById("tblCalendars");
    if (objTable1.offsetHeight > objTable2.offsetHeight)
        objTable2.style.height = objTable1.offsetHeight;
    else
        objTable1.style.height = objTable2.offsetHeight;
    
    // Reset Rate Type
    var objDdlCode = document.getElementById("ddlCode");
    var objCode = document.getElementById("Code");
    if (objDdlCode != null)
    {
        objDdlCode.selectedIndex = 0;
        objCode.value = "";
    }    
}

// DROP DOWN DATES functions ************************************************

function setDropDownDates()
{
    // Start Date
    var objDay = document.getElementById("ddlStartDay");
    if (!objDay)
        return;
    var objMonth = document.getElementById("ddlStartMonth");
    var objYear = document.getElementById("ddlStartYear");
    objMonth.selectedIndex = onresDate1.getMonth();
    setDropDownDaysForDate(objDay, onresDate1);
    setDropDownYear(objYear, onresDate1);
    
    // End Date
    objDay = document.getElementById("ddlEndDay");
    objMonth = document.getElementById("ddlEndMonth");
    objYear = document.getElementById("ddlEndYear");
    objMonth.selectedIndex = onresDate2.getMonth();
    setDropDownDaysForDate(objDay, onresDate2);
    setDropDownYear(objYear, onresDate2);
}

function setDropDownDaysForDate(objSelect, objDate)
{
    var intDays = onresGetDaysInMonth(objDate.getMonth()+1, objDate.getFullYear())
    if (objSelect.options.length != intDays)
    {
        objSelect.options.length = 0;
        for (var i = 0;i < intDays; i++)
        {
            objSelect.options[i] = new Option(1+i);
        }
    }
    var intDaysSelected = objDate.getDate();
    if (intDaysSelected > intDays)
        intDaysSelected = intDays;
    objSelect.selectedIndex = intDaysSelected - 1;
}

function setDropDownYear(objSelect, objDate)
{
    var i;
    var intYear = objDate.getFullYear();
    if (objSelect.options.length < 2)
    {
        objSelect.options.length = 0;
        for (i = 0;i < 10; i++)
        {
            objSelect.options[i] = new Option(String(intYear+i).substr(2),intYear+i);
        }
        objSelect.selectedIndex = 0;
    }
    else
    {
        for (i = 0;i < objSelect.options.length; i++)
        {
            if (objSelect.options[i].value == intYear)
                objSelect.selectedIndex = i;
        }
    }
    
}

function onchangeDropDownDate()
{
    blnFirstAction = false;
    
    // Start Date
    var objStartDay = document.getElementById("ddlStartDay");
    var objStartMonth = document.getElementById("ddlStartMonth");
    var objStartYear = document.getElementById("ddlStartYear");
    var strStartDate = ( (objStartDay.selectedIndex+1) + " " + objStartMonth.options[objStartMonth.selectedIndex].value + " " + objStartYear.options[objStartYear.selectedIndex].value);

    // End Date
    var objEndDay = document.getElementById("ddlEndDay");
    var objEndMonth = document.getElementById("ddlEndMonth");
    var objEndYear = document.getElementById("ddlEndYear");
    var strEndDate = ( (objEndDay.selectedIndex+1) + " " + objEndMonth.options[objEndMonth.selectedIndex].value + " " + objEndYear.options[objEndYear.selectedIndex].value);
    
    onresDate1 = new Date(strStartDate);
    onresDate2 = new Date(strEndDate);
    
    document.getElementById("StartDate").value = strStartDate;
    document.getElementById("EndDate").value = strEndDate;
    CalculateNumNights();
    
    setDropDownDaysForDate(objStartDay, onresDate1);
    setDropDownDaysForDate(objEndDay, onresDate2);
    
    if ((onresDate1 < onresDate2) && (dayDiff(onresDate1, onresDate2) < 64))
    {
        var objToday = new Date();
        if (objToday < dayAdd(1,onresDate1))
        {
            onresSetMonthsToDateRange();
            checkAndResetEmptyCalendar();
        }
    }
    onresHighlightDateRange();
}

function checkAndResetEmptyCalendar()
{
    // check if calendar has no dates selected and has gotten lost
    var arrCells = getElementsByClassName('onresDaySelected');
    if (arrCells.length == 0)
    {
        // reset calendar
        intMonth1 = onresDate1.getMonth();
        var dateNextMonth = onresAddMonth(onresDate1,1);
        intMonth2 = dateNextMonth.getMonth();
        onresDrawCal(document.getElementById("onresCalendar1"),onresDate1.getFullYear(), intMonth1+1);
        onresDrawCal(document.getElementById("onresCalendar2"),dateNextMonth.getFullYear(), intMonth2+1);
        
        onresSetMonthHeading();
        onresHighlightDateRange();
        //alert(onresDate1 + " ---|--- " + onresDate2);
    }
}
