
var g_vCalendarID = ""
var g_vDateFieldID = ""

var g_vYEAR = new Number()
var g_vMONTH = new Number()
var g_vDAY = new Number()

var g_vPrefBgColor
var g_vPrefWeekdaysBgColor
var g_vPrefSelectedColor
var g_vPrefWeekdaysTextColor
var g_vPrefDaysTextColor
var g_vPrefFontName
var g_vPrefFontSize
var g_aMonths = new Array(12)
var g_aWeekdays = new Array(7)

var g_vSelectedCellID


g_vSelectedCellID=""

g_vPrefBgColor = "lightgrey"
g_vPrefCalendarBgColor = "lightgrey"
g_vPrefWeekdaysBgColor = "slategray"
g_vPrefCalendarOverBgColor = "#808080"

g_vPrefSelectedColor = "cadetblue"

g_vPrefWeekdaysTextColor = "white"
g_vPrefDaysTextColor = "black"

g_vPrefFontName = "Verdana"
g_vPrefFontSize = "1"
g_vPrefControlFontSize = "xx-small"

g_vPrefSubmitText = "Upiši"
g_vPrefCancelText = "Odustani"

g_aMonths = ["Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"]
g_aWeekdays = ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"]



function initCalendar (I_vYear, I_vMonth, I_vDay)
{
    g_vYEAR = I_vYear
    g_vMONTH = I_vMonth
    g_vDAY = I_vDay

    document.getElementById(g_vCalendarID + "_YEAR").value = g_vYEAR
    document.getElementById(g_vCalendarID + "_MONTH").selectedIndex = g_vMONTH
    updateCalendar (g_vYEAR, g_vMONTH, g_vDAY)
}



function selectDAY(I_vCellID, I_vSelectedDay)
{
    if (g_vSelectedCellID != "")
    {
        document.getElementById(g_vSelectedCellID).bgColor = g_vPrefCalendarBgColor
    }
    g_vSelectedCellID = I_vCellID
    document.getElementById(I_vCellID).bgColor = g_vPrefSelectedColor

    g_vDAY = I_vSelectedDay
}



function selectMONTH(I_vSelectedMonth)
{

    g_vMONTH = I_vSelectedMonth
    updateCalendar (g_vYEAR, g_vMONTH, g_vDAY)
}



function incrementYEAR()
{
    g_vYEAR++
    document.getElementById(g_vCalendarID + "_YEAR").value = g_vYEAR
    updateCalendar (g_vYEAR, g_vMONTH, g_vDAY)

}



function decrementYEAR()
{
    g_vYEAR--
    document.getElementById(g_vCalendarID + "_YEAR").value = g_vYEAR
    updateCalendar (g_vYEAR, g_vMONTH, g_vDAY)
}



function selectYEAR(I_vYear)
{
    vCurrentDate = new Date()

    if (!parseInt(I_vYear) && I_vYear != 0) I_vYear = vCurrentDate.getFullYear()
    if (I_vYear < 30) I_vYear += 2000
    if (I_vYear >= 30 && I_vYear <= 99) I_vYear += 1900
    if (I_vYear >= 100 && I_vYear <= 999) I_vYear += 1000

    g_vYEAR = I_vYear

    updateCalendar (g_vYEAR, g_vMONTH, g_vDAY)
}



function drawCalendarGrid ()
{
    var vX
    var vY
    var vCode

    vCode = "<TABLE bgcolor='" + g_vPrefCalendarBgColor + "' cellspacing='0' cellpadding='2' border='0'>"

    vCode += "<TR>"

    for (vX=0;vX<7;vX++)
    {
        vCode += "<TD bgcolor='" + g_vPrefWeekdaysBgColor + "'><FONT face='" + g_vPrefFontName + "' size='" + g_vPrefFontSize + "' color='" + g_vPrefWeekdaysTextColor + "'>" + g_aWeekdays[vX] + "</FONT></TD>"
    }

    vCode += "<TR>"

    for (vY=0; vY<6; vY++)
    {
        vCode += "<TR>"
        for (vX=0; vX<7; vX++)
        {
            //vCode += "<TD id='" + cell" + vX + vY + "' align='center' valign='middle' bgcolor='" + g_vPrefCalendarBgColor + "'>"

            vCode += "<TD"
            vCode += " id='" + g_vCalendarID + "_cell" + vX + vY + "'"
            vCode += " align='center' valign='middle'"
            vCode += " bgcolor='" + g_vPrefCalendarBgColor + "'"
            //vCode += " onmouseover=if(this.id!='" + g_vPrefCalendarBgColor + "')this.bgColor='" + g_vPrefCalendarOverBgColor + "'"
            //vCode += " onmouseout=this.bgColor='" + g_vPrefCalendarBgColor + "'"
            vCode += ">"

            vCode += "</TD>"
        }
        vCode += "</TR>"
    }
    vCode += "</TABLE>"

    document.write(vCode)
}



function updateCalendar (I_vYear, I_vMonth, I_vDay)
{
    var vX
    var vY
    var vInnerText
    var vCellDay

    for (vY=0; vY<6; vY++)
    {
        for (vX=0; vX<7; vX++)
        {

            var oDate = new Date (I_vYear, I_vMonth, 1)

            vCellDay = ((vY * 7) + vX) - oDate.getDay() + 1

            oDate.setMonth(I_vMonth + 1)
            oDate.setDate(0)

            vInnerText = ""

            vInnerText += "<FONT face='" + g_vPrefFontName + "' size='" + g_vPrefFontSize + "' color='" + g_vPrefDaysTextColor + "'>"
            if (vCellDay >= 1 && vCellDay <= oDate.getDate())
            {
                vInnerText += "<A onclick=selectDAY('" + g_vCalendarID + "_cell" + vX + vY + "','" + vCellDay + "') style='cursor:hand'>"
                vInnerText += vCellDay
                vInnerText += "</A>"
            }
            else
            {
                vInnerText += "&nbsp;"
            }
            vInnerText += "</FONT>"

            document.getElementById(g_vCalendarID + "_cell" + vX + vY).innerHTML = vInnerText

            //document.getElementById("cell" + vX + vY).bgColor = g_vPrefCalendarBgColor

             if (vCellDay == I_vDay)
                selectDAY (g_vCalendarID + "_cell" + vX + vY, vCellDay)
        }
    }

    document.getElementById(g_vCalendarID + "_MONTH").selectedIndex = I_vMonth
    document.getElementById(g_vCalendarID + "_YEAR").value = I_vYear

}



function drawMonthSelector ()
{
    var vCode
    var vCntr

    vCode = "<select id='" + g_vCalendarID + "_MONTH' style='font-family:" + g_vPrefFontName + ";font-size:" + g_vPrefControlFontSize + "' onchange=selectMONTH(this.value)>"

    for (vCntr=0;vCntr<12;vCntr++)
    {
        vCode += "<option value=" + vCntr + ">" + g_aMonths[vCntr] + "</option>"
    }
    vCode += "</select>"

    document.write(vCode)
}



function drawYearSelector ()
{
    var vCode

    vCode = ""
    vCode += "<FONT face='" + g_vPrefFontName + "' size='" + g_vPrefFontSize + "' color='" + g_vPrefDaysTextColor + "'>"
    vCode += "<A onclick=decrementYEAR() style='cursor:hand'><STRONG>«</STRONG></A>"
    vCode += "&nbsp;"
    vCode += "<input type='text' id='" + g_vCalendarID + "_YEAR' onkeypress='if(window.event.keyCode==13)selectYEAR(parseInt(this.value))' onfocusout=selectYEAR(parseInt(this.value)) style='font-family:" + g_vPrefFontName + ";font-size:" + g_vPrefControlFontSize + "' size='4' maxlength='4'>"
    vCode += "g.&nbsp;"
    vCode += "<A onclick=incrementYEAR() style='cursor:hand'><STRONG>»</STRONG></A>"
    vCode += "</FONT>"

    document.write(vCode)
}



function drawButtons ()
{
    var vCode

    vCode = ""
    vCode += "<input type='button' value='" + g_vPrefSubmitText + "' onclick=onSubmit('" + g_vCalendarID + "') style='font-family:" + g_vPrefFontName + ";font-size:" + g_vPrefControlFontSize + "'>"
    vCode += "<input type='button' value='" + g_vPrefCancelText + "' onclick=document.getElementById('" + g_vCalendarID + "').style.visibility='hidden' style='font-family:" + g_vPrefFontName + ";font-size:" + g_vPrefControlFontSize + "'>"

    document.write(vCode)
}



function onSubmit ()
{

    var vYear = g_vYEAR
    var vMonth = g_vMONTH
    var vDay = g_vDAY

    vMonth++

    document.all(g_vDateFieldID).value = vDay + "." + vMonth + "." + vYear

    document.getElementById (g_vCalendarID).style.visibility = "hidden"
}



function drawCalendarFrame ()
{
    document.write( "<TABLE class='calendarFrame'><TR><TD align='left'>")
    document.write("<TR>")
    document.write("<TD align='left'>")

    drawMonthSelector()

    document.write("</TD>")
    document.write("<TD align='right'>")

    drawYearSelector()

    document.write("</TD>")
    document.write("</TR>")
    document.write("<TR>")
    document.write("<TD align='center' colspan='2'>")

    drawCalendarGrid()

    document.write("</TD>")
    document.write("</TR>")
    document.write("<TR>")
    document.write("<TD align='left' colspan='2'>")

    drawButtons()

    document.write("</TD>")
    document.write("</TR>")
    document.write("</TABLE>")
}



/***
*
* Function: parseDateFromString
*
* Description:
*
*   Parse date format string and store result into date
*   object. The function respects folowing date format:
*
*     [d]d<delimiter>[m]m<delimiter>[yy]yy
*
*   where <delimiter> is any non-numeric character(s).
*   If any element is not specified it is replaced with
*   today's date
*
* Parameters:
*
*   I_vDate
*
*     Date object to convert to string
*
* Return:
*
*     Date object
*
***********************************************************/

function parseDateFromString (I_vDateString)
{
    var re = /\D/g
    var vaDateElementsArray
    var vCurrentDate
    var vDate
    var vDay
    var vMonth
    var vYear

    vCurrentDate = new Date()

    vaDateElementsArray = I_vDateString.split(re)

    if (typeof (vaDateElementsArray[0]) == "string" && vaDateElementsArray[0] != "")
        vDay = parseInt(vaDateElementsArray[0].replace(/(^0+)/g, ''))
    else
        vDay = vCurrentDate.getDate()

    if (typeof (vaDateElementsArray[1]) == "string" && vaDateElementsArray[1] != "")
        vMonth = parseInt(vaDateElementsArray[1].replace(/(^0+)/g, '')) - 1
    else
        vMonth = vCurrentDate.getMonth()

    if (typeof (vaDateElementsArray[2]) == "string" && vaDateElementsArray[2] != "")
    {
        vYear = parseInt(vaDateElementsArray[2].replace(/(^0+)/g, ''))

        if (!vYear)
            vYear = 0;
    }
    else
        vYear = vCurrentDate.getFullYear()

    if (vYear < 30) vYear += 2000
    if (vYear >= 30 && vYear <= 99) vYear += 1900
    if (vYear >= 100 && vYear <= 999) vYear += 1000

    vDate = new Date (vYear, vMonth, vDay)

    /* Check if input date is correct (if something is wrong the elements will not match) */
    if (vDate.getFullYear() != vYear ||
        vDate.getMonth() != vMonth ||
        vDate.getDate() != vDay)
    {
        return (null)
    }

    return (vDate)
}



/***
*
* Function: formatDate
*
* Description:
*
*   Formats the date from date object into specific date
*   format string
*
* Parameters:
*
*   I_vDate
*
*     Date object to convert to string
*
* Return:
*
*     Formated date string
*
***********************************************************/

function formatDate (I_vDate)
{
    var vCurrent = new Date()
    var vYear
    var vMonth
    var vDay

    if (I_vDate == null)
    {
        alert ("Neispravan datum")
        return ("")
    }
    else
    {
        vYear = I_vDate.getFullYear()

        vMonth = I_vDate.getMonth()

        vDay = I_vDate.getDate()

        vMonth++

        return (vDay + "." + vMonth + "." + vYear)
    }
}



/***
*
* Function: showCalendar
*
* Description:
*
*   Shows the calendar drawn by Calendar() function.
*   Actually this function unhides the calendar grid and
*   initializes it with input date value.
*
* Parameters:
*
*   I_vCalendarID
*
*     ID identifaying calendar instance created by
*     Calendar() function.
*
*   I_vPosX
*
*     X position of the upper left corner of the calendar
*
*   I_vPosY
*
*     Y position of the upper left corner of the calendar
*
*   I_vDateFieldID
*
*     ID of object representing destination for the date
*     string.
*
***********************************************************/

function showCalendar(I_vCalendarID, I_vPosX, I_vPosY, I_vDateFieldID)
{
    var vDate

    g_vCalendarID = I_vCalendarID
    g_vDateFieldID = I_vDateFieldID

    vDate = parseDateFromString (document.all(g_vDateFieldID).value)

    if (vDate == null)
        alert ("Neispravan datum!")

    initCalendar (vDate.getFullYear(), vDate.getMonth(), vDate.getDate())

    vCalendar = document.getElementById(g_vCalendarID)

    vCalendar.style.visibility = "visible"
    vCalendar.style.left = I_vPosX
    vCalendar.style.top = I_vPosY
}



/***
*
* Function: Calendar
*
* Description:
*
*   Draws calendar within DIV tag (using new layer)
*
* Parameters:
*
*   I_vCalendarID
*
*     ID identifaying calendar instance
*
***********************************************************/

function Calendar (I_vCalendarID)
{
    g_vCalendarID = I_vCalendarID

    document.write("<DIV id='" + I_vCalendarID + "' style='visibility:hidden; position:absolute;'>")

    drawCalendarFrame()

    document.write("</DIV>")
}



/***
*
* Function: getOffsetLeft
*
* Description:
*
*   Calculates offset X offset
*
***********************************************************/

function getOffsetLeft (el) {
    var ol = el.offsetLeft;
    while ((el = el.offsetParent) != null)
        ol += el.offsetLeft;
    return ol;
}



/***
*
* Function: getOffsetTop
*
* Description:
*
*   Calculates offset Y offset
*
***********************************************************/

function getOffsetTop (el) {
    var ot = el.offsetTop;
    while((el = el.offsetParent) != null)
        ot += el.offsetTop;
    return ot;
}
