/**
	This function relies on the existence of an HTML entity capable of containing text named "countdown".
	So, before calling this function, make sure that something along the lines of <p id="countdown"></p> exists in your page.
**/
var bTimerRunning = false;
var iSessionDownCtr = 0;
var iSessionEndTime = 0;
var iSessionStartTime = 0;
var bSessionTimeRunning = false;
var iSessionTimeLeftElement = -1;
var aTimeElements = new Array();

var bInitCalendar = false;
var bCurrMonth = false;
var iCurrYear;
var iCurrMonth;
var iCurrDay;
var iFirstDayOfMonth;
var iLastDayOfMonth;
var CalendarTable;
var aMonthTable = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");

function UpdateTime()
{
    var dCurrTime = new Date();

    if (arguments.length > 0) {
        if (arguments.length == 1)
            aTimeElements.push(document.getElementById(arguments[0]));
        else {
            iSessionDownCtr = arguments[0];

            for (var iECtr = 1; iECtr < arguments.length; iECtr++)
                aTimeElements.push(document.getElementById(arguments[iECtr]));

            iSessionTimeLeftElement = aTimeElements.length - 1;
            iSessionStartTime = dCurrTime.getTime() / 1000;
            iSessionEndTime = iSessionStartTime + iSessionDownCtr;

            if (iSessionStartTime != iSessionEndTime)
                bSessionTimeRunning = true;
            else
                aTimeElements[iSessionTimeLeftElement].innerHTML = 'Not Logged In';
        }
    }

    if (aTimeElements.length) {
        for (var iECtr = 0; iECtr < aTimeElements.length; iECtr++) {
            if (iECtr != iSessionTimeLeftElement)
                aTimeElements[iECtr].innerHTML = dCurrTime.toLocaleString();
        }

        if (iSessionTimeLeftElement >= 0 && bSessionTimeRunning) {
            var iCurrTime = dCurrTime.getTime() / 1000;
            var strTimeRemaining = 'test';

            if (iCurrTime >= iSessionEndTime) {
                window.location = "userlogin.php5?logout";
                strTimeRemaining = '<font color=red><b>Session Expired</b></font>';
                bSessionTimeRunning = false;
            } else {
                var iTimeLeft = iSessionEndTime - iCurrTime;
                strTimeRemaining = 'Session Time: ' + Math.floor(iTimeLeft / 3600) + ':' + FormatNumber(Math.floor((iTimeLeft % 3600) / 60), 2, true) + ':' + FormatNumber(Math.floor(iTimeLeft % 60), 2, true);

                if (iTimeLeft < 180)
                    strTimeRemaining = '<font color=red><b>' + strTimeRemaining + '</b></font>';
                else if (iTimeLeft < 300)
                    strTimeRemaining = '<font color=yellow><b>' + strTimeRemaining + '</b></font>';
            }

            aTimeElements[iSessionTimeLeftElement].innerHTML = strTimeRemaining;
        }
    }

    if ((!bTimerRunning && arguments.length != 0) || (bTimerRunning && arguments.length == 0)) {
        bTimerRunning = true;

        setTimeout('UpdateTime()', 1000);   //Recursive call, keeps the clock running.
    }
}

function FormatNumber(iNumber, iPadDigits, bZeroPad)
{
    var strNumber = new String(iNumber);

    while (strNumber.length < iPadDigits) {
        if (bZeroPad)
            strNumber = '0' + strNumber;
        else
            strNumber = ' ' + strNumber;
    }

    return (strNumber);
}


function InitializeCalendar(strCalendarTableId)
{
    CalendarTable = document.getElementById(strCalendarTableId);

    var dCurrTime = new Date();

    SetupCalendarVar(dCurrTime);

    bInitCalendar = true;

    DisplayCalendar();
}

function SetupCalendarVar(dSetDate)
{
    iCurrYear = dSetDate.getFullYear();
    iCurrMonth = dSetDate.getMonth();
    iCurrDay = dSetDate.getDate();
    dSetDate.setDate(1);
    iFirstDayOfMonth = dSetDate.getDay();
    dSetDate.setMonth(iCurrMonth + 1);
    dSetDate.setDate(0);
    iLastDayOfMonth = dSetDate.getDate();

    var dCurrTime = new Date();

    if (dCurrTime.getFullYear() != iCurrYear || dCurrTime.getMonth() != iCurrMonth)
        bCurrMonth = false;
    else {
        iCurrDay = dCurrTime.getDate();

        bCurrMonth = true;
    }
}

function CalendarNextMonth()
{
    var dNewDate = new Date();

    dNewDate.setFullYear(iCurrYear);
    dNewDate.setMonth(iCurrMonth);
    dNewDate.setDate(1);
    dNewDate.setMonth(iCurrMonth + 1);

    SetupCalendarVar(dNewDate);
    DisplayCalendar();
}

function CalendarPrevMonth()
{
    var dNewDate = new Date();

    dNewDate.setFullYear(iCurrYear);
    dNewDate.setMonth(iCurrMonth);
    dNewDate.setDate(1);
    dNewDate.setMonth(iCurrMonth - 1);

    SetupCalendarVar(dNewDate);
    DisplayCalendar();
}

function DisplayCalendar()
{
    if (bInitCalendar && CalendarTable) {
        var CalendarRows = CalendarTable.rows;

        if (bInitCalendar && CalendarTable && CalendarRows) {
            CalendarRows[0].cells[1].innerHTML = aMonthTable[iCurrMonth] + " " + iCurrYear;

            var iDayCtr = 1;
            var strDay = new String();

            for (var iRowCtr = 2; iRowCtr < 8; iRowCtr++) {
                for (var iColCtr = 0; iColCtr < 7; iColCtr++) {
                    if (iDayCtr > iLastDayOfMonth || (iRowCtr == 2 && iColCtr < iFirstDayOfMonth))
                        strDay = "&nbsp;";
                    else {
                        strDay = '<a href="javascript:CalendarDateClick(' + iDayCtr + ');">';

                        if (bCurrMonth && iDayCtr == iCurrDay)
                            strDay = strDay + "<b>" + iDayCtr + "</b>";
                        else
                            strDay = strDay + iDayCtr;

                        strDay = strDay + "</a>";

                        iDayCtr++;
                    }

                    CalendarRows[iRowCtr].cells[iColCtr].innerHTML = strDay;
                }
            }
        }
    }
}

function CalendarDateClick(iDay)
{
    var strDate;

    strDate = (iCurrMonth + 1) + "/" + iDay + "/" +  iCurrYear;

    window.alert("Day of month " + strDate);
}
