﻿var _mode;
var _dayToChange;
var _monthYearToChange;
var _minMonth;
var _minYear;
var _maxMonth;
var _maxYear;
var _runChange = null;
var _allCalendars = new Array();
var _dayToSelect = new Array();
var _monthToSelect = new Array();
var _yearToSelect = new Array();

function hideAllCalendars() {
    for (i = 0; i < _allCalendars.length; i++)
        document.getElementById(_allCalendars[i]).style.display = 'none';
}

function selectDate(id, day, year, month, dayControl) {
    if (_mode == 'dateFinder') {
        _dayToChange.selectedIndex = day - 1;
        document.getElementById(id).style.display = "none";
    }
    else {
        _dayToSelect[id] = day;
        _monthToSelect[id] = month;
        _yearToSelect[id] = year;
        document.getElementById(dayControl).value = day;
    }
    updateCalendar(id, year, month);
}

function initialiseCalendar(id, selectedYear, selectedMonth) {
    var val = _monthYearToChange.options[_monthYearToChange.selectedIndex].value.split("/");
    var year = val[0];
    var month = val[1];

    eval(selectedYear).value = year;
    eval(selectedMonth).value = month;
    updateCalendar(id, year, month);
}

function initialiseCalendarByValues(id, selectedYear, selectedMonth) {
    year = eval(selectedYear).value;
    month = eval(selectedMonth).value;
    updateCalendar(id, year, month);
}

function updateMonthAndYear(month, year) {
    if (_monthYearToChange == null)
        return;
    if (month < 10)
        month = "0" + month;
    monthYear = year + "/" + month;
    for (i = 0; i < _monthYearToChange.options.length; i++) {
        if (_monthYearToChange.options[i].value == monthYear) {
            _monthYearToChange.selectedIndex = i;
            break;
        }
    }
    if (_runChange != null)
        _runChange();
}

function getDaysInMonth(month, year) {
    var prevDate = new Date(year, month, 0);
    return prevDate.getDate();
}

function buildDays(year, month) {
    var dayList = new Array();
    dayList[0] = new Array(7);
    dayList[1] = new Array(7);
    dayList[2] = new Array(7);
    dayList[3] = new Array(7);
    dayList[4] = new Array(7);
    dayList[5] = new Array(7);
    var monthCal = new Date(year, month - 1, 1);
    var firstDay = monthCal.getDay();
    var daysInMonth = getDaysInMonth(month, year);
    var actualDate = 1;
    var i, d, w;
    for (d = firstDay; d < 7; d++) {
        dayList[0][d] = actualDate;
        actualDate++;
    }
    for (w = 1; w < 6; w++) {
        for (d = 0; d < 7; d++) {
            if (actualDate <= daysInMonth) {
                dayList[w][d] = actualDate;
                actualDate++;
            }
        }
    }
    return dayList;
}

var monthNames; //Global
function buildMonthNames() {
    monthNames = new Array(12);
    monthNames[0] = WebjetTsaCalendarResource.January;
    monthNames[1] = WebjetTsaCalendarResource.February;
    monthNames[2] = WebjetTsaCalendarResource.March;
    monthNames[3] = WebjetTsaCalendarResource.April;
    monthNames[4] = WebjetTsaCalendarResource.May;
    monthNames[5] = WebjetTsaCalendarResource.June;
    monthNames[6] = WebjetTsaCalendarResource.July;
    monthNames[7] = WebjetTsaCalendarResource.August;
    monthNames[8] = WebjetTsaCalendarResource.September;
    monthNames[9] = WebjetTsaCalendarResource.October;
    monthNames[10] = WebjetTsaCalendarResource.November;
    monthNames[11] = WebjetTsaCalendarResource.December;
    return monthNames;
}

var dayNames;
function buildDayNames() {
    dayNames = new Array(7);
    dayNames[0] = WebjetTsaCalendarResource.Sun;
    dayNames[1] = WebjetTsaCalendarResource.Mon;
    dayNames[2] = WebjetTsaCalendarResource.Tue;
    dayNames[3] = WebjetTsaCalendarResource.Wed;
    dayNames[4] = WebjetTsaCalendarResource.Thu;
    dayNames[5] = WebjetTsaCalendarResource.Fri;
    dayNames[6] = WebjetTsaCalendarResource.Sat;
}



function drawCalendar(id, selectedYear, selectedMonth, selectedDay, minMonth, minYear, maxMonth, maxYear, display) {
    _allCalendars[_allCalendars.length] = id;
    var year = eval(selectedYear).value;
    var month = eval(selectedMonth).value;
    _minMonth = minMonth;
    _minYear = minYear;
    _maxMonth = maxMonth;
    _maxYear = maxYear;

    var dayList = buildDays(year, month);
    buildMonthNames();
    buildDayNames();
    //position:absolute;
    document.write("<table id='" + id + "' border='0' cellpadding=1 cellspacing=0 style='display:" + display + ";border-width:3px;border-style:solid;border-collapse:collapse;position:absolute; z-index: 999; background-color:White;>");

    drawMonthsList(id, minMonth, minYear); //2 rows
    document.write("<tr class='Webjet_Calendar_Month'>")
    document.write("<td align=left><a id=previous_" + id + " style='text-decoration:none' href=\"javascript:previousMonth('" + id + "'," + selectedYear + "," + selectedMonth + ");\">&lt;</a></td>")
    document.write("<td align='center' colspan=5 id=calMonthYear_" + id + "></td>");
    document.write("<td align=right><a id=next_" + id + " style='text-decoration:none' href=\"javascript:nextMonth('" + id + "'," + selectedYear + "," + selectedMonth + ");\">&gt;</a></td>")
    document.write("</tr><tr>");
    for (i = 0; i < 7; i++)
        document.write("<td class='Webjet_Calendar_WeekDay'>" + dayNames[i] + "</td>");
    document.write("</tr>");
    for (w = 0; w < 6; w++) {
        document.write("<tr valign=top>")
        for (d = 0; d < 7; d++) {
            document.write("<td id=td_" + id + "_" + w + "_" + d + " align='center' valign='middle' width='20' height='20' >");
            document.write("<a id=calDateText_" + id + "_" + w + "_" + d + " class='Webjet_Calendar_Day' day=" + selectedDay + "> </a>");
            document.write("<script language='javascript'> var ds_" + id + "='" + selectedDay + "'; </script>");
            document.write("</td>")
        }
        document.write("</tr>");
    }
    document.write("</table>")
    updateCalendar(id, year, month);
}
//2 rows withmonths links
function drawMonthsList(id, minMonth, minYear) {
    //debugger;
    var m = minMonth; //1-based
    var y = minYear;
    document.write("<tr class='Webjet_Calendar_MonthsList'><td colSpan=7><table class='CalendarMonthsList'><tr>");
    for (mi = 0; mi < 12; mi++) {
        var sMonthShort = monthNames[m - 1].substring(0, 3); //first 3 chars from 0-based monthNames
        //document.write("<td align='center'>");
        var sTd = "<td align=center><a id=" + sMonthShort + "_" + id + " style='text-decoration:none' href=\"javascript:updateCalendar('" + id + "'," + y + "," + m + ");\">" + sMonthShort + "</a></td>";
        document.write(sTd);
        if (mi == 5)//after first 6 months
        {
            document.write("</tr><tr>")
        }
        m++;
        if (m == 13) {
            m = 1;
            y++;
        }
    }
    document.write("</tr></table></td></tr>")
}
function isBeforeToday(day, month, year) {
    //Month is 0 based; new Date() has current time part, so compare with (day+1)
    return new Date(year, month - 1, day + 1) < new Date();
}


function setLimits(id, month, year) {
    document.getElementById("next_" + id).innerHTML = (year == _maxYear && month == _maxMonth) ? "" : "&gt;";
    document.getElementById("previous_" + id).innerHTML = (year == _minYear && month == _minMonth) ? "" : "&lt;";
}


function nextMonth(id, selectedYear, selectedMonth) {
    var y = eval(selectedYear).value;
    var m = eval(selectedMonth).value;
    m++;
    if (m == 13) {
        m = 1;
        y++;
    }
    eval(selectedMonth).value = m;
    eval(selectedYear).value = y;
    updateCalendar(id, y, m);
}
function previousMonth(id, selectedYear, selectedMonth) {
    var y = eval(selectedYear).value;
    var m = eval(selectedMonth).value;
    m--;
    if (m == 0) {
        m = 12;
        y--;
    }
    eval(selectedMonth).value = m;
    eval(selectedYear).value = y;
    updateCalendar(id, y, m);
}


function getDayOfMonth(d) {
    return isNaN(d) ? "" : d;
}

function updateCalendar(id, year, month) {
    var dayList = buildDays(year, month);

    for (w = 0; w < 6; w++)
        for (d = 0; d < 7; d++) {
        var dayOfMonth = getDayOfMonth(dayList[w][d]);
        var dateBit = document.getElementById("calDateText_" + id + "_" + w + "_" + d);
        var dateCell = document.getElementById("td_" + id + "_" + w + "_" + d);
        dateBit.innerHTML = dayOfMonth;

        dateCell.className = getCellClass(id, year, month, dayOfMonth);

        if (isBeforeToday(dayOfMonth, month, year) || dayOfMonth == "") {
            dateBit.style.textDecoration = "line-through";
            dateBit.href = "javascript:;";
        }
        else {
            dateBit.style.textDecoration = "none";
            if (year == _yearToSelect[id] && month == _monthToSelect[id] && dayList[w][d] == _dayToSelect[id]) {
                dateCell.className += "Selected";
                dateBit.className = "Webjet_Calendar_DaySelected";
            }
            else {
                dateBit.className = "Webjet_Calendar_Day";
            }
            dateBit.href = "javascript:selectDate('" + id + "'," + dayOfMonth + "," + year + "," + month + ",ds_" + id + ")";
        }
    }
    
	updateMonthAndYear(month, year);

	if (WebjetTsaCalendarResource.LocaleId=='zh-HK')
	{
		document.getElementById("calMonthYear_" + id).innerHTML = year + "年" + monthNames[month - 1];
	}
	else
	{
		document.getElementById("calMonthYear_" + id).innerHTML = monthNames[month - 1] + " " + year;	
	}
    
    setLimits(id, month, year);
}

function getCellClass(id, year, month, day) {
    if (_mode == "dateFinder")
        return "Webjet_Calendar_Clear";
    if (day == "" || isBeforeToday(day, month, year) || day == "")
        return "Webjet_Calendar_Clear";
    var availArray = id + "_avail";
    var avail = eval(availArray)[year + "/" + twoDigit(month) + "/" + twoDigit(day)];
    if (avail == 1)
        return "Webjet_Calendar_Available";
    if (avail == 0)
        return "Webjet_Calendar_unAvailable";
    return "Webjet_Calendar_Clear";
}

function twoDigit(d) {
    if (d <= 9)
        return "0" + d;
    return d;
}

