var	fixedX = -1 // pildi horisontaalne asukoht. kui -1 kuvatakse avava objekti alla
var	fixedY = -1 // pildi vertikaalne asukoht
var startAt = 1 // nädala algus: 0 pühapäev, 1 esmaspäev
var showWeekNumber = 0
var showToday = 1
//var imgDir = "../gfx/"
var imgDir = "http://www.ozoon.net/gfx/"

var gotoString = "Vali käesolev kuu"
var weekString = "ndl"
var scrollLeftMessage = "Eelmine kuu"
var scrollRightMessage = "Järgmine kuu"
var selectMonthMessage = "Vali kuu"
var selectYearMessage = "Vali aasta"
var selectDateMessage = "Vali [date] kuupäevaks."

// kalendri alumise osa tausta värv
var colorFooter = "#DDDDFF"
// kalendri ülemise osa taustavärv
var colorBar = "#FFFFFF"
// kalendri äärise värv
var colorBorder = "#000066"
// kalendri valitud kuupäeva värv
var colorSelection = "#CC0000"
// riigipüha teisiti värvimine
var colorHoliday = "#FFDDDD"
// käesoleva päeva teisiti värvimine
var colorToday = "#000000"
// nädalavahetuse teisiti värvimine
var colorDayFree = "#909090"
// kalendri äärise laius
var sizeBorder = 4

var	crossobj, crossMonthObj, crossYearObj, monthSelected, yearSelected, dateSelected, omonthSelected, oyearSelected, odateSelected, intervalID1, intervalID2, timeoutID1, timeoutID2, ctlToPlaceValue, ctlNow, dateFormat, nStartingYear

var	bPageLoaded=false
var	ie=document.all
var	dom=document.getElementById

var	ns4=document.layers
var	today =	new	Date()
var	dateNow	 = today.getDate()
var	monthNow = today.getMonth()
var	yearNow	 = today.getYear()
var	imgsrc = new Array("drop1.gif","drop2.gif","left1.gif","left2.gif","right1.gif","right2.gif")
var	img	= new Array()

var bShow = false;

function hideElement( elmID, overDiv ) {
    if( ie ) {
        for( i = 0; i < document.all.tags( elmID ).length; i++ ) {
            obj = document.all.tags( elmID )[i];
            if( !obj || !obj.offsetParent ) {
                continue;
            }
            
            // Find the element's offsetTop and offsetLeft relative to the BODY tag.
            objLeft = obj.offsetLeft;
            objTop = obj.offsetTop;
            objParent = obj.offsetParent;
            
            
            while( objParent.tagName.toUpperCase() != "BODY" ) {
                objLeft  += objParent.offsetLeft;
                objTop   += objParent.offsetTop;
                objParent = objParent.offsetParent;
            }
            
            
            objHeight = obj.offsetHeight;
            objWidth = obj.offsetWidth;
            
            
            if(( overDiv.offsetLeft + overDiv.offsetWidth ) <= objLeft );
            else if(( overDiv.offsetTop + overDiv.offsetHeight ) <= objTop );
            else if( overDiv.offsetTop >= ( objTop + objHeight ));
            else if( overDiv.offsetLeft >= ( objLeft + objWidth ));
            else {
                obj.style.visibility = "hidden";
            }
        }
    }
}
     
function showElement( elmID ) {
    if( ie ) {
        for( i = 0; i < document.all.tags( elmID ).length; i++ ) {
            obj = document.all.tags( elmID )[i];
            
            if( !obj || !obj.offsetParent ) {
                continue;
            }
            obj.style.visibility = "";
        }
    }
}

function HolidayRec (d, m, y, desc)	{
    this.d = d
    this.m = m
    this.y = y
    this.desc = desc
}

var HolidaysCounter = 0
var Holidays = new Array()

function addHoliday (d, m, y, desc) {
    Holidays[HolidaysCounter++] = new HolidayRec ( d, m, y, desc )
}

if (dom) {
    for (i=0; i < imgsrc.length; i++) {
        img[i] = new Image
        img[i].src = imgDir + imgsrc[i]
    }
    
    document.write ("<div onclick='bShow=true' id='calendar' style='z-index:+999;position:absolute;visibility:hidden;'>")
    document.write ("<table cellpadding='0' cellspacing='0' border='0'><tr><td rowspan='2' colspan='2'>")
    document.write ("<table cellpadding=0 cellspacing=0 style='font-family:tahome;font-size:11px;border-width:" + sizeBorder + "px;border-style:solid; border-color: " + colorBorder + "; font-family:tahoma; font-size:11px}' bgcolor='#ffffff'>")
    document.write ("<tr bgcolor='" + colorBar + "'><td>")
    document.write ("<table cellpadding='2' cellspacing='0' width='100%'><tr>")
    document.write ("<td nowrap align='left'><font size=2>&nbsp;<span id='monthBackward'></span></font></td>")
    document.write ("<td nowrap style='padding:2px;font-family:tahoma; font-size:11px;' align='center'><font color='#000000'><span id='caption'></span></font></td>")
    document.write ("<td nowrap align='right'><font size=2><span id='monthForward'></span>&nbsp;</font></td>")
    document.write ("</tr></table></td></tr>")
    document.write ("<tr><td style='padding:5px' bgcolor=#ffffff><span id='content'></span></td></tr>")
    document.write ("<tr bgcolor='" + colorFooter + "'><td style='padding:5px' align=center><span id='lblToday'></span></td></tr></table>")
    document.write ("</td><td width='6' height='6'><img src='" + imgDir + "p.png' width='6' height='6' border='0'></td></tr>")
    document.write ("<tr><td style='background-image: url(" + imgDir + "p_0_20p.png);'><img src='" + imgDir + "p.png' width='6' height='100' border='0'></td></tr>")
    document.write ("<tr><td width='6' height='6'><img src='" + imgDir + "p.png' width='6' height='6' border='0'></td><td style='background-image: url(" + imgDir + "p_0_20p.png);'><img src='" + imgDir + "p.png' width='100' height='6' border='0'></td><td style='background-image: url(" + imgDir + "p_0_20p.png);'><img src='" + imgDir + "p.png' width='6' height='6' border='0'></td></tr>")
    document.write ("</table>")
    document.write ("</div>")
}

var	monthName =	new	Array("Jaanuar","Veebruar","M&auml;rts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember")

if (startAt==0) {
    dayName = new Array ("P","E","T","K","N","R","L")
} else {
    dayName = new Array ("E","T","K","N","R","L","P")
}

var	styleAnchor="text-decoration:none;color:black;"
var	styleLightBorder="border-style:solid;border-width:1px;border-color:" + colorSelection + ";"

function swapImage(srcImg, destImg){
    if (ie) { document.getElementById(srcImg).setAttribute("src",imgDir + destImg) }
}

function init()	{
    if (!ns4) {
        if (!ie) { yearNow += 1900 }
        
        crossobj=(dom)?document.getElementById("calendar").style : ie? document.all.calendar : document.calendar
        hideCalendar()
        
        sHTML0 = "<img src='" + imgDir + "cal_np_today.png' border='0' onClick='dateSelected=dateNow;monthSelected=monthNow;yearSelected=yearNow;closeCalendar();'>&nbsp;&nbsp;"
        sHTML0 += "<img src='" + imgDir + "cal_np_cancel.png' border='0' onClick='hideCalendar()'>"
        document.getElementById("lblToday").innerHTML =	sHTML0
        
        mbHTML = "&nbsp;<span id='spanLeft' style='cursor:pointer' onclick='yearSelected--;constructCalendar()' onmouseout='clearInterval(intervalID1);' onmousedown='clearTimeout(timeoutID1);timeoutID1=setTimeout(\"StartDecMonth()\",500)' onmouseup='clearTimeout(timeoutID1);clearInterval(intervalID1)'><img src='" + imgDir + "cal_grey_rwd.png' border='0'></span>"
        mbHTML += "<span id='spanLeft' style='cursor:pointer' onclick='decMonth()' onmouseout='clearInterval(intervalID1);' onmousedown='clearTimeout(timeoutID1);timeoutID1=setTimeout(\"StartDecMonth()\",500)' onmouseup='clearTimeout(timeoutID1);clearInterval(intervalID1)'><img src='" + imgDir + "cal_red_rwd.png' border='0'></span>"
        document.getElementById("monthBackward").innerHTML = mbHTML
        
        mfHTML = "<span id='spanRight' style='cursor:pointer' onmouseout='clearInterval(intervalID1)' onclick='incMonth()' onmousedown='clearTimeout(timeoutID1); timeoutID1=setTimeout(\"StartIncMonth()\",500)' onmouseup='clearTimeout(timeoutID1);clearInterval(intervalID1)'><img src='" + imgDir + "cal_red_fwd.png' border='0'></span>"
        mfHTML += "<span id='spanRight' style='cursor:pointer' onmouseout='clearInterval(intervalID1)' onclick='yearSelected++;constructCalendar()' onmousedown='clearTimeout(timeoutID1); timeoutID1=setTimeout(\"StartIncMonth()\",500)' onmouseup='clearTimeout(timeoutID1);clearInterval(intervalID1)'><img src='" + imgDir + "cal_grey_fwd.png' border='0'></span>&nbsp;"
        document.getElementById("monthForward").innerHTML = mfHTML
        
        sHTML1="<span id='spanMonth'></span>"
        sHTML1+="<span id='spanYear'></span>"
        document.getElementById("caption").innerHTML = sHTML1
        
        bPageLoaded=true
    }
}


function hideCalendar()	{
    crossobj.visibility="hidden"
    if (crossMonthObj != null){crossMonthObj.visibility="hidden"}
    if (crossYearObj !=	null){crossYearObj.visibility="hidden"}
    
    showElement( 'SELECT' );
    showElement( 'APPLET' );
}

function padZero(num) {
    return (num	< 10)? '0' + num : num ;
}

function constructDate(d,m,y) {
    sTmp = dateFormat
    sTmp = sTmp.replace ("dd","<e>")
    sTmp = sTmp.replace ("d","<d>")
    sTmp = sTmp.replace ("<e>",padZero(d))
    sTmp = sTmp.replace ("<d>",d)
    sTmp = sTmp.replace ("mmm","<o>")
    sTmp = sTmp.replace ("mm","<n>")
    sTmp = sTmp.replace ("m","<m>")
    sTmp = sTmp.replace	("<m>",m+1)
    sTmp = sTmp.replace	("<n>",padZero(m+1))
    sTmp = sTmp.replace	("<o>",monthName[m])
    return sTmp.replace ("yyyy",y)
}


function closeCalendar() {
    var	sTmp
    
    hideCalendar();
    ctlToPlaceValue.value =	constructDate(dateSelected,monthSelected,yearSelected);
    if (ctlToPlaceValue.id.indexOf('cal_') == 0) changedDate(ctlToPlaceValue.id);
    ctlToPlaceValue.focus(); // Allan Trankmann lisas selle rea
}


function incMonth () {
    monthSelected++
    if (monthSelected>11) {
        monthSelected=0
        yearSelected++
    }
    constructCalendar()
}

function decMonth () {
    monthSelected--
    if (monthSelected<0) {
        monthSelected=11
        yearSelected--
    }
    constructCalendar()
}

function incYear() {
    yearSelected++
    constructCalendar()
}

function decYear() {
    yearSelected--
    constructCalendar()
}


function WeekNbr(n) {
    year = n.getFullYear();
    month = n.getMonth() + 1;
    if (startAt == 0) {
        day = n.getDate() + 1;
    } else {
        day = n.getDate();
    }
    
    a = Math.floor((14-month) / 12);
    y = year + 4800 - a;
    m = month + 12 * a - 3;
    b = Math.floor(y/4) - Math.floor(y/100) + Math.floor(y/400);
    J = day + Math.floor((153 * m + 2) / 5) + 365 * y + b - 32045;
    d4 = (((J + 31741 - (J % 7)) % 146097) % 36524) % 1461;
    L = Math.floor(d4 / 1460);
    d1 = ((d4 - L) % 365) + L;
    week = Math.floor(d1/7) + 1;
    
    return week;
}

/**
 * Kalendri (html) koostamine vastavalt valitud kuupäevale
 */
function constructCalendar () {
    var aNumDays = Array (31,0,31,30,31,30,31,31,30,31,30,31)

    var dateMessage
    var	startDate =	new	Date(yearSelected, monthSelected, 1)
    var endDate
    var numDaysInPreviousMonth

    if (monthSelected==1) {
        endDate	= new Date(yearSelected, monthSelected+1, 1);
        endDate	= new Date(endDate - (24*60*60*1000));
        numDaysInMonth = endDate.getDate()
        numDaysInPreviousMonth = 0;
    } else {
        numDaysInMonth = aNumDays[monthSelected];
        numDaysInPreviousMonth = aNumDays[monthSelected-1];
    }

    datePointer	= 0
    dayPointer = startDate.getDay() - startAt

    if (dayPointer<0) {
        dayPointer = 6
    }

    sHTML =	"<table border=0 style='font-family:verdana;font-size:10px;'><tr>"

    if (showWeekNumber==1) {
        sHTML += "<td width=20><b>" + weekString + "</b></td><td width=1 rowspan=7 bgcolor='#d0d0d0' style='padding:0px'></td>"
    }

    for	(i=0; i<7; i++) {
        sHTML += "<td width='20' align='right'>"+ dayName[i]+"&nbsp;</td>"
    }
    sHTML +="</tr><tr>"

    if (showWeekNumber==1) {
        sHTML += "<td align=right>" + WeekNbr(startDate) + "&nbsp;</td>"
    }

    for	(var i=1; i<=dayPointer; i++) {
        sHTML += "<td>&nbsp;</td>"
    }

    for	( datePointer=1; datePointer<=numDaysInMonth; datePointer++ ) {
        dayPointer++;
        sHTML += "<td align=right>"
        sStyle=styleAnchor
        if ((datePointer==odateSelected) &&	(monthSelected==omonthSelected)	&& (yearSelected==oyearSelected)) {
            sStyle+=styleLightBorder
        }

        sHint = ""

        for (k=0;k<HolidaysCounter;k++)	{
            if ((parseInt(Holidays[k].d)==datePointer)&&(parseInt(Holidays[k].m)==(monthSelected+1))) {
                if ((parseInt(Holidays[k].y)==0)||((parseInt(Holidays[k].y)==yearSelected)&&(parseInt(Holidays[k].y)!=0))) {
                    sStyle+="background-color: " + colorHoliday + ";"
                    sHint+=sHint==""?Holidays[k].desc:"\n"+Holidays[k].desc
                }
            }
        }

        if ((datePointer==dateNow)&&(monthSelected==monthNow)&&(yearSelected==yearNow)) {
            sHTML += "<b><a style='"+sStyle+"' href='javascript:dateSelected="+datePointer+";closeCalendar();'><font color='" + colorToday + "'>&nbsp;" + datePointer + "</font>&nbsp;</a></b>"
        } else if (dayPointer % 7 == (startAt * -1)+1 || (dayPointer+1) % 7 == (startAt * -1)+1) {
            sHTML += "<a style='"+sStyle+"' href='javascript:dateSelected="+datePointer + ";closeCalendar();'>&nbsp;<font color='" + colorDayFree + "'>" + datePointer + "</font>&nbsp;</a>"
        } else {
            sHTML += "<a style='"+sStyle+"' href='javascript:dateSelected="+datePointer + ";closeCalendar();'>&nbsp;" + datePointer + "&nbsp;</a>"
        }

        sHTML += ""
        if ((dayPointer+startAt) % 7 == startAt) {
            sHTML += "</tr><tr>"
            if ((showWeekNumber==1)&&(datePointer<numDaysInMonth)) {
                sHTML += "<td align=right>" + (WeekNbr(new Date(yearSelected,monthSelected,datePointer+1))) + "&nbsp;</td>"
            }
        }
    }

    sHTML += "<tr>";

    document.getElementById("content").innerHTML = sHTML
    document.getElementById("spanMonth").innerHTML = "<b>" + monthName[monthSelected] + "</b>&nbsp;"
    document.getElementById("spanYear").innerHTML =	"<b>" + yearSelected + "</b>"
}


/**
 * Kalendri avamise sisendpunkt.
 *
 * @param ctl objekt, millelt kutsutakse funktsioon. kasutatakse kalendri paigutamiseks objekti suhtes
 * @param ctl2 objekt, kuhu kalendri poolt sisestatud väärtus kirjutada
 * @param format kuupäeva esitusformaat, näiteks dd.mm.yyyy
 * @param frameOffSetLeft kuipalju nihutada kalendrit avava objekti suhtes horisontaalselt. arvu kasvamine nihutab paremale
 * @param frameOffSetTop kuivõrd nihutada kalendrit avaja suhtes vertikaalselt. arvu kasvamine nihutab allapoole
 */
function popUpCalendar(ctl, ctl2, format, frameOffSetLeft, frameOffSetTop) {
    var	leftpos=0
    var	toppos=0
    
    if (bPageLoaded) {
        if ( crossobj.visibility ==	"hidden" ) {
            ctlToPlaceValue	= ctl2
            dateFormat=format;
            
            formatChar = " "
            aFormat	= dateFormat.split(formatChar)
            if (aFormat.length<3) {
                formatChar = "/"
                aFormat	= dateFormat.split(formatChar)
                if (aFormat.length<3) {
                    formatChar = "."
                    aFormat	= dateFormat.split(formatChar)
                    if (aFormat.length<3) {
                        formatChar = "-"
                        aFormat	= dateFormat.split(formatChar)
                        if (aFormat.length<3) {
                            formatChar=""
                        }
                    }
                }
            }
            tokensChanged =	0
            if ( formatChar	!= "" ) {
                aData =	ctl2.value.split(formatChar)
                
                for	(i=0;i<3;i++) {
                    if ((aFormat[i]=="d") || (aFormat[i]=="dd")) {
                        dateSelected = parseInt(aData[i], 10)
                        tokensChanged ++
                    } else if	((aFormat[i]=="m") || (aFormat[i]=="mm")) {
                        monthSelected =	parseInt(aData[i], 10) - 1
                        tokensChanged ++
                    } else if	(aFormat[i]=="yyyy") {
                        yearSelected = parseInt(aData[i], 10)
                        tokensChanged ++
                    } else if	(aFormat[i]=="mmm") {
                        for	(j=0; j<12;	j++) {
                            if (aData[i]==monthName[j]) {
                                monthSelected=j
                                tokensChanged++
                            }
                        }
                    }
                }
            }
            
            if ((tokensChanged!=3)||isNaN(dateSelected)||isNaN(monthSelected)||isNaN(yearSelected)) {
                dateSelected = dateNow
                monthSelected =	monthNow
                yearSelected = yearNow
            }
            
            odateSelected=dateSelected
            omonthSelected=monthSelected
            oyearSelected=yearSelected
            
            aTag = ctl
            do {
                aTag = aTag.offsetParent;
                leftpos	+= aTag.offsetLeft;
                toppos += aTag.offsetTop;
            } while(aTag.tagName!="BODY");
            
            
            crossobj.left =	fixedX==-1 ? ctl.offsetLeft + leftpos + frameOffSetLeft : fixedX
            crossobj.top = fixedY==-1 ? ctl.offsetTop + toppos + frameOffSetTop + ctl.offsetHeight : fixedY
            constructCalendar (1, monthSelected, yearSelected);
            crossobj.visibility=(dom||ie) ? "visible" : "show"
            
            hideElement( 'SELECT', document.getElementById("calendar") );
            hideElement( 'APPLET', document.getElementById("calendar") );
            bShow = true;
        } else {
            hideCalendar()
            if (ctlNow!=ctl) {popUpCalendar(ctl, ctl2, format, leftpos, toppos)}
        }
        ctlNow = ctl
    }
}

document.onkeypress = function hidecal1 () {
    if (event.keyCode==27) {
        hideCalendar()
    }
}
document.onclick = function hidecal2 () {
    if (!bShow) {
        hideCalendar()
    }
    bShow = false
}

if(ie) {
    init()
} else {
    window.onload=init
}
