var monthNames = new Array( "January", "February", "March", "April", "May",
        "June", "July", "August", "September", "October", "November",
        "December" );
var dayShortNames = new Array( "M", "T", "W", "T", "F", "S", "S" );
var currentlyShownDate, currCalLayer;
currCalLayer = "";

function validDate( strDate )
{
    var separated = strDate.split( "." );
    if( separated.length != 3 )
        return new Date();
    for( i=0; i<3; i++ )
        if( separated[i].charAt( 0 ) == "0" )
            separated[i] = separated[i].substr(1);
    intDay = parseInt( separated[ 0 ] );
    intMonth = parseInt( separated[ 1 ] );
    intYear = parseInt( separated[ 2 ] );
    var selDate = new Date();
    selDate.setFullYear( intYear );
    selDate.setMonth( intMonth-1 );
    selDate.setDate( intDay );
    return selDate;
}

function showCalendar( calId )
{
    setCalendarPosition( calId );
    var txtObj = findObject( calId );
    var layerObj = findObject( "l_" + calId );
    if( txtObj )
        {
        var inputDate = new Date( validDate( txtObj.value ).valueOf() );
        if( layerObj.calendarType == 1 )
            drawCalendar( inputDate, "l_"+calId );
        if( layerObj.calendarType == 2 )
            drawTimer( inputDate, "l_" + calId );
        }
    else
        {
        if( layerObj.calendarType == 1 )
            drawCalendar( new Date(), "l_"+calId );
        if( layerObj.calendarType == 2 )
            drawTimer( new Date(), "l_" + calId );
        }
    showElem( "l_" + calId );
    var imgObj = findObject( "img_" + calId );
    if( imgObj )
        imgObj.src = (layerObj && layerObj.calendarType==1)?"/img/cal_dropdown_a.gif":"/img/time_dropdown_a.gif";
}

function hideCalendar( calId )
{
    hideElem( "l_" + calId );
    currCalLayer = "";
    var layerObj = findObject( "l_" + calId );
    var imgObj = findObject( "img_" + calId );
    if( imgObj )
        imgObj.src = (layerObj && layerObj.calendarType==1)?"/img/cal_dropdown.gif":"/img/time_dropdown.gif";
}


function turnCalendar( calId )
{
    var currLayer = currCalLayer;
    if( currCalLayer != "" )
        hideCalendar( currCalLayer.substr( 2 ) );
    if( currLayer != "l_"+calId )
        showCalendar( calId );
    else
        hideCalendar( calId );
    return false;
}

function createDateTimeInput( id1, value1, id2, value2 )
{
    document.write( "<table cellpadding=0 cellspacing=0 border=0><tr><td>" );
    createDateInput( id1, value1, "" );
    document.write( "</td><td>" );
    createTimeInput( id2, value2 );
    document.write( "</td></tr></table>" );
}

function createDateInput( id, value, onchangehandler )
{
    htmlText = "<table cellpadding=0 cellspacing=0 border=0><tr><td><a name=a_" + id + "><input size=13 maxlen=11 type=text name=" + id + " id=" + id + " value=\"" + value + "\"";
    if( onchangehandler != "" )
        htmlText += " onChange = \"" + onchangehandler + "\"";
    htmlText += "></a></td>";
    htmlText += "<td><a href=/ onClick=\"return turnCalendar('" + id +"');\"><img name=img_" + id + " src=/img/cal_dropdown.gif width=28 height=19 border=0 align=absmiddle></a>";
    htmlText += "<span id=l_" + id + " style=\"position: absolute; visibility: hidden;\">&nbsp;</span></td></tr></table>";

    document.write( htmlText );
    setCalendarPosition( id );
    var layerObj = findObject( "l_" + id );
    if( layerObj )
        layerObj.calendarType = 1;
}

function createTimeInput( id, value )
{
    htmlText = "<table cellpadding=0 cellspacing=0 border=0><tr><td><a name=a_" + id + "><input size=9 maxlen=6 type=text name=" + id + " id=" + id + " value=\"" + value + "\"></a></td><td>";
    htmlText += "<a href=/ onClick=\"return turnCalendar('" + id +"');\"><img name=img_" + id + " src=/img/time_dropdown.gif width=28 height=19 border=0 align=absmiddle></a>";
    htmlText += "<span id=l_" + id + " style=\"position: absolute; visibility: hidden;\">&nbsp;</span></td></tr></table>";

    document.write( htmlText );
    setCalendarPosition( id );

    var layerObj = findObject( "l_" + id );
    if( layerObj )
        layerObj.calendarType = 2;
}

function setDate( day )
{
    var calId = currCalLayer.substr(2);
    var txtObj = findObject( calId );
    if( txtObj )
        {
        strDay = day.toString();
        strMonth = (currentlyShownDate.getMonth()+1).toString();
        strYear = currentlyShownDate.getFullYear().toString();
        if( strDay.length < 2 )
            strDay = "0" + strDay;
        if( strMonth.length < 2 )
            strMonth = "0" + strMonth;
        txtObj.value = strDay + "." + strMonth + "." + strYear;
        if( txtObj.focus )
            txtObj.focus();
        }
    hideCalendar( calId );
    return false;
}

function setTime( hour )
{
    var calId = currCalLayer.substr(2);
    var txtObj = findObject( calId );
    if( txtObj )
        {
        strHour = hour.toString();
        if( strHour.length < 2 )
            strHour = "0" + strHour;
        txtObj.value = strHour + ":00";
        if( txtObj.focus )
            txtObj.focus();
        }
    hideCalendar( calId );
    return false;
}

function prevMonth()
{
    var currMonth = currentlyShownDate.getMonth();
    currMonth--;
    currentlyShownDate.setMonth( currMonth );
    drawCalendar( currentlyShownDate, currCalLayer );
    return false;
}

function nextMonth()
{
    var currMonth = currentlyShownDate.getMonth();
    currMonth++;
    currentlyShownDate.setMonth( currMonth );
    drawCalendar( currentlyShownDate, currCalLayer );
    return false;
}

function prevYear()
{
    var currYear = currentlyShownDate.getFullYear();
    currYear--;
    currentlyShownDate.setFullYear( currYear );
    drawCalendar( currentlyShownDate, currCalLayer );
    return false;
}

function nextYear()
{
    var currYear = currentlyShownDate.getFullYear();
    currYear++;
    currentlyShownDate.setFullYear( currYear );
    drawCalendar( currentlyShownDate, currCalLayer );
    return false;
}

function drawTimer( currDate, layerID )
{
    calHTML = "<table cellpadding=1 cellspacing=1 border=0 bgcolor=#d0d0d0>";
    calHTML += "<tr bgcolor=white><td>";

    calHTML += "<table cellpadding=2 cellspacing=1 border=0>";
    for( i=0; i<12; i++ )
        {
        hourStr = i.toString();
        if( hourStr.length < 2 )
            hourStr = "0" + hourStr;
        hourStr = hourStr + ":00";
        calHTML += "<tr><td align=right><a href=/ onClick=\"return setTime(" + i + ");\">" + hourStr + "</a></td></tr>";
        }
    calHTML += "</table>";
    calHTML += "</td><td>";
    calHTML += "<table cellpadding=2 cellspacing=1 border=0>";
    for( i=12; i<24; i++ )
        {
        hourStr = i.toString();
        calHTML += "<tr><td align=right><a href=/ onClick=\"return setTime(" + i + ");\">" + i.toString() + ":00" + "</a></td></tr>";
        }
    calHTML += "</table>";
    calHTML += "</td></tr>";
    calHTML += "</table>";

    var layerObj = findObject( layerID );
    if( layerObj )
        {
        Writelayer( layerObj, calHTML );
        currCalLayer = layerID;
        }
}

function drawCalendar( currDate, layerID )
{
    var firstDate = new Date( currDate.valueOf() );
    var lastDate = new Date( currDate.valueOf() );
    var prevMonthLastDate = new Date( currDate.valueOf() );
    var today = new Date();

    currentlyShownDate = new Date( currDate.valueOf() );

    var topNavStr;
    topNavStr = "<table cellpadding=0 cellspacing=1 border=0>";
    topNavStr += "<tr><td><a href=/ onClick=\"return prevYear();\"><img src=/img/cal_prev_year.gif width=15 height=15 border=0></td>";
    topNavStr += "<td><a href=/ onClick=\"return prevMonth();\"><img src=/img/cal_prev_month.gif width=15 height=15 border=0></a></td>";
    topNavStr += "<td align=center nowrap>" + monthNames[ currDate.getMonth() ] + ", " + currDate.getFullYear() + "</td>";
    topNavStr += "<td><a href=/ onClick=\"return nextMonth();\"><img src=/img/cal_next_month.gif width=15 height=15 border=0></a></td>";
    topNavStr += "<td><a href=/ onClick=\"return nextYear();\"><img src=/img/cal_next_year.gif width=15 height=15 border=0></a></td>";
    topNavStr += "</tr></table>";

    firstDate.setDate( 1 );
    intLastDate = 31;
    lastDate.setDate( intLastDate );
    while( lastDate.getMonth() != currDate.getMonth() )
        {
        intLastDate--;
        lastDate.setMonth( currDate.getMonth() );
        lastDate.setDate( intLastDate );
        }

    prevMonthLastDate.setDate( 1 );
    prevMonthLastDate.setMonth( currDate.getMonth()-1 );
    intLastDate = 31;
    prevMonthLastDate.setDate( intLastDate );
    while( prevMonthLastDate.getMonth() == currDate.getMonth() )
        {
        prevMonthLastDate.setDate( 1 );
        prevMonthLastDate.setMonth( currDate.getMonth()-1 );
        intLastDate--;
        prevMonthLastDate.setDate( intLastDate );
        }

    calHTML = "<table cellpadding=1 cellspacing=1 border=0 bgcolor=#d0d0d0>";
    calHTML += "<tr bgcolor=white><td>";
    calHTML += "<table cellpadding=2 cellspacing=1 border=0>";
    calHTML += "<tr bgcolor=white><td colspan=7>" + topNavStr + "</td></tr>";
    calHTML += "<tr bgcolor=white>";
    for( i=0; i<dayShortNames.length; i++ )
        calHTML += "<td align=center width=14%>" + dayShortNames[i] + "</td>";
    calHTML += "</tr>";
    calHTML += "<tr><td colspan=7 background=/img/cal_hr.gif><img src=/img/zero.gif width=1 height=1 border=0></td></tr>";

    limitDay = firstDate.getDay();
    if( limitDay == 0 )
        limitDay = 7;
    for( currCell=0; currCell<limitDay-1; currCell++ )
        {
        if( currCell == 0 )
            calHTML += "<tr>";
        calHTML += "<td align=right bgcolor=#f0f0f0><font color=#b0b0b0>" + (prevMonthLastDate.getDate()-limitDay+2+currCell) + "</font></td>";
        }
    for( i=1; i<=lastDate.getDate(); i++ )
        {
        if( currCell == 0 )
            calHTML += "<tr>";
        if( today.getMonth() == currDate.getMonth() &&
            today.getFullYear() == currDate.getFullYear() &&
            today.getDate() == i )
            backColor = "#dcd0bd"; // "#a9c6d5";
        else
            backColor = "#ece4d6"; //#c9e6f5";
        calHTML += "<td align=right bgcolor=" + backColor + "><a href=/ onClick=\"return setDate(" + i + ");\">" + i + "</a></td>";
        currCell ++;
        if( currCell == 7 )
            {
            calHTML += "</tr>";
            currCell = 0;
            }
        }
    if( currCell )
        {
        currDay = 1;
        for( ; currCell<7; currCell++ )
            {
            calHTML += "<td align=right bgcolor=#f0f0f0><font color=#b0b0b0>" + currDay + "</font></td>";
            currDay++;
            }
        calHTML += "</tr>";
        }

    calHTML += "</table>";
    calHTML += "</td></tr></table>";

    var layerObj = findObject( layerID );
    if( layerObj )
        {
        Writelayer( layerObj, calHTML );
        currCalLayer = layerID;
        }
}

function setCalendarPosition( calId )
{
    var layerPos = new getCalendarPosition( "a_"+calId );
    var calObj = findObject( "l_"+calId );
    if (document.getElementById || document.all)
        {
        calObj.style.left = layerPos.x;
        calObj.style.top = layerPos.y;
        }
    else if (document.layers)
        {
        calObj.left = layerPos.x;
        calObj.top = layerPos.y;
        }
}

function getCalendarPosition(anchorName)
{
    for (var i = 0; i < document.anchors.length; i++)
        {
        if (document.anchors[i].name == anchorName)
            {
            this.x = anchorPosX(document.anchors[i]);
            this.y = anchorPosY(document.anchors[i])+21;
            return this;
            }
        }
}

function resizing()
{
    if( currCalLayer != "" )
        hideCalendar( currCalLayer.substr( 2 ) )
}
window.onresize = resizing;