/**
* Calendar Widget Version 1.0
* Copyright (c) 2004, Tribador Mediaworks,
*
* Brian Munroe <bmunroe@tribador.net
*
* calendar.js - Calendar Widget JavaScript Library
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation.  No representations are made about the suitability of this
* software for any purpose.  It is provided "as is" without express or
* implied warranty.
*/



function _isLeapYear(year) {
    return (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) ? 1 : 0;
}

function setCalendar(idtag,yyyy,mm,dd) {
    y = document.getElementById(idtag);   
    t = document.getElementById(idtag + "time").value;
    y.value = yyyy + "-" + mm + "-" + dd+ " " + t;
    y = document.getElementById(idtag + "Div");
    y.style.display = "none";
    
    validateDate(document.getElementById(idtag),true);
}

function closeCal(idtag) {
    t = document.getElementById(idtag + "Div");
    t.style.display = "none";
}

function closeCalNoDate(idtag) {
    y = document.getElementById(idtag);
    y.value = "";
    t = document.getElementById(idtag + "Div");
    t.style.display = "none";
}

function closeCalSetToday(idtag) {
    var doDate = new Date();
    var mm = doDate.getMonth()+1;
    var dd = doDate.getDate();
    var yyyy = doDate.getYear();

    if (yyyy < 1000) {
        yyyy = yyyy + 1900;
    }

	document.getElementById(idtag + "time").value = doDate.getHours()+":"+doDate.getMinutes()+":"+doDate.getSeconds();

    setCalendar(idtag,yyyy,mm,dd);
}

function redrawCalendar(idtag) {

    var x = document.getElementById(idtag + "SelectMonth");
    for (i = 0; i < x.options.length;i++){
        if (x.options[i].selected) {
            var mm = x.options[i].value;
        }
    }

    var y = document.getElementById(idtag + "SelectYear");
    for (i = 0; i < y.options.length; i++) {
        if (y.options[i].selected) {
            var yyyy = y.options[i].value;
        }
    }

    // Who f-ing knows why you need this?
    // If you don't cast it to an int,
    // the browser goes into some kind of
    // infinite loop, atleast in IE6.0/Win32
    //
    mm = mm*1;
    yyyy = yyyy*1;

    drawCalendar(idtag,yyyy,mm);
}

function _buildCalendarControls() {

    var months = ["Leden","Únor","Březen","Duben","Květen","Červen","Červenec","Srpen","Září","Řijen","Listopad","Prosinec"];
    var nw = new Date();
		

    (arguments[0] ? idtag = arguments[0] : idtag = "");
    ((arguments[1] || arguments[1]=='0000') ? yyyy = arguments[1] : yyyy = nw.getYear());
    ((arguments[2] || arguments[2]=='00') ? mm = arguments[2] : mm = nw.getMonth());
    ((arguments[3] || arguments[3]=='00') ? dd = arguments[3] : dd = nw.getDay());

    // Mozilla hack,  I am sure there is a more elegent way, but I did it
    // on a Friday to get a release out the door...
    //
    if (yyyy < 1000) {
        yyyy = yyyy + 1900;
    }

    var monthArray = '<select style="width: 49%" id="' + idtag + 'SelectMonth" onChange="redrawCalendar(\'' + idtag + '\');">';
    // First build the month selection box
    for (i = 0; i < months.length; i++){
        if (i == mm-1) {
            monthArray = monthArray + '<option value="' + eval(i + 1) + '" selected="selected">' + months[i] + '</option>';
        } else {
            monthArray = monthArray + '<option value="' + eval(i + 1) + '">' + months[i] + '</option>';
        }
    }
    monthArray = monthArray + "</select>";

    var yearArray = '<select style="width: 49%" id="' + idtag + 'SelectYear" onChange="redrawCalendar(\'' + idtag + '\');">';
    for (i=yyyy-80;i<= yyyy+4;i++){
        if (i == yyyy) {
            yearArray = yearArray + '<option value="' + i + '" selected="selected">' + i + '</option>';
        } else {
            yearArray = yearArray + '<option value="' + i + '">' + i + '</option>';
        }
    }
    yearArray = yearArray + "</select>";
        
    
    time = '<input type="text" id="'+ idtag + 'time" value="" style="width: 80%" />&nbsp;&nbsp;&nbsp;<span style="cursor: pointer; font-weight: bold; color: #268;" onclick="setCalendar(\''+idtag+'\','+yyyy+','+mm+','+dd+'); return false;" >OK</span><br /><br />';
    
    return(time + " " +monthArray + " " + yearArray);
}

function clickWidgetIcon(idtag) {
    (arguments[0] ? idtag = arguments[0] : idtag = "");

    t = document.getElementById(idtag + "Div");
    if (t.style.display == "none") {
        drawCalendar(idtag);
    } else {
        closeCal(idtag);
    }
}

function drawCalendar() {	

    (arguments[0] ? idtag = arguments[0] : idtag = "");
    ((arguments[1] || arguments[1]=='0000') ? yyyy = arguments[1] : yyyy = void(0));
    ((arguments[2] || arguments[2]=='00') ? mm = arguments[2] : mm = void(0));
    ((arguments[3] || arguments[2]=='00') ? dd = arguments[3] : dd = void(0));

	

    if (!yyyy && !mm) {
        x = document.getElementById(idtag);
        if (x.value != "") {
			var doDate = new Date();
            var wholeValue = x.value;
            var timedate = wholeValue.split(" ");           
            var dateparts = timedate[0].split("-");
            var mm = dateparts[1]=='00' ? doDate.getMonth()+1 : dateparts[1]*1;
            var dd = dateparts[2]=='00' ? doDate.getDate() : dateparts[2]*1;
            var yyyy = dateparts[0]=='0000' ? doDate.getYear() : dateparts[0]*1;
            if (timedate[1]+''!='undefined')
				var ttt = timedate[1];            
			else
				var ttt = '';
        } else {
            var doDate = new Date();
            var mm = doDate.getMonth()+1;
            var dd = doDate.getDate();
            var yyyy = doDate.getYear();
        }
    }

    // Mozilla hack,  I am sure there is a more elegent way, but I did it
    // on a Friday to get a release out the door...
    //
    if (yyyy < 1000) {
        yyyy = yyyy + 1900;
    }

    var newDate = new Date(yyyy,mm-1,1);    
    var startDay = newDate.getDay()-1;
    if (startDay ==-1) startDay = 6;    
    var dom = [31,28,31,30,31,30,31,31,30,31,30,31];
    var dateControls = '<tr><td class="DateControlFrame" colspan="7">' + _buildCalendarControls(idtag,yyyy,mm,dd) + '</td></tr>';    
    var beginTable = '<h2>Kalendář</h2><table>';
    var calHeader = '<tr><th style="padding: 2;">Po</th><th class="CalHeader">Út</th><th class="CalHeader">St</th><th class="CalHeader">Čt</th><th class="CalHeader">Pá</th><th class="CalHeader">So</th><th class="CalHeader">Ne</th></tr>';
    var closeControls = '<tr><th colspan=7> <a href="" style="color: #226688; text-decoration: none;" onclick="closeCal(\'' + idtag + '\'); return false;">Zavřít</a>  &nbsp;&nbsp;&nbsp; <a style="color: #226688; text-decoration: none;" href="" onclick="closeCalNoDate(\'' + idtag + '\'); return false;"><b>Žádné datum</b></a> &nbsp;&nbsp;&nbsp; <a style="color: #226688; text-decoration: none;" href="" onclick="closeCalSetToday(\'' + idtag + '\'); return false;">Dnes</a></th></tr></table>';
    var curHTML = "";
    var curDay = 1;
    var endDay = 0;
    var rowElement = 0;
    var startFlag = 1;
    var endFlag = 0;
    var elementClick = "";
    var celldata = "";

    ((_isLeapYear(yyyy) && mm == 2) ? endDay = 29 : endDay = dom[mm-1]);

    // calculate the lead gap
    if (startDay != 0) {
        curHTML = "<tr>";
        for (i = 0; i < startDay; i++) {
            curHTML = curHTML + '<td class="EmptyCell">&nbsp;</td>';
            rowElement++;
        }
    }

    for (i=1;i<=endDay;i++){
        (dd != i ? celldata = "" : celldata = "color: #fff; background: #268;");

        if (rowElement == 0) {
            curHTML = curHTML + '<tr>' + '<td style="cursor: pointer; text-align: center;'+ celldata +' " onclick="setCalendar(\'' + idtag + '\','+ yyyy +',' + mm + ',' + i +');">' + i + '</td>';
            rowElement++;
            continue;
        }

        if (rowElement > 0 && rowElement < 6) {
            curHTML = curHTML + '<td style="cursor: pointer; text-align: center;'+ celldata +' "  onclick="setCalendar(\'' + idtag + '\','+ yyyy +',' + mm + ',' + i +');">' + i + '</td>';
            rowElement++;
            continue;
        }

        if (rowElement == 6) {
            curHTML = curHTML + '<td style="cursor: pointer; text-align: center;'+ celldata +' "  onclick="setCalendar(\'' + idtag + '\','+ yyyy +',' + mm + ',' + i +');">' + i + '</td></tr>';
            rowElement = 0;
            continue;
        }
    }

    // calculate the end gap
    if (rowElement != 0) {
        for (i = rowElement; i <= 6; i++){
            curHTML = curHTML + '<td class="EmptyCell">&nbsp;</td>';
        }
    }

    curHTML = curHTML + "</tr>";
    t = document.getElementById(idtag + "Div");
    dateField = document.getElementById(idtag);
    t.innerHTML = beginTable + calHeader + curHTML + dateControls + closeControls;
    
    if (ttt!=undefined) {
		document.getElementById(idtag+'time').value = ttt;
		if (ttt==''||ttt==' ') {
			document.getElementById(idtag+'time').value = '00:00:00';
		}
	} else {
		document.getElementById(idtag+'time').value = '00:00:00';
	}

    // need to write some better browser detection/positioning code here
    // Also, there is a perceived stability issue where the calendar goes offscreen
    // when the widget is right justified..Need some edge detection
    //
    
    
    var kitName = "applewebkit/";
	var tempStr = navigator.userAgent.toLowerCase();
	var pos = tempStr.indexOf(kitName);
	var isAppleWebkit = (pos != -1);
    
    if (isAppleWebkit || document.all) {
        ieOffset = 10;
    } else {
        ieOffset = 0;
    }

    t.style.left = ieOffset + dateField.offsetLeft + "px";
    t.style.display = "";
}

function createCalendarWidget() {
    (arguments[0] ? idtag = arguments[0] : idtag = "");
    (arguments[1] ? isEditable = arguments[1] : isEditable = "EDIT");
    (arguments[2] ? hasIcon = arguments[2] : hasIcon = "NO_ICON");
    (arguments[3] ? iconPath = arguments[3] : hasIcon = "./OU812.gif");
    (arguments[4] ? value = arguments[4] : value = "");

    (isEditable == "NO_EDIT" ? readOnly = 'readonly="readonly"' : readOnly = '');

    if (hasIcon == "ICON") {
        clicking = '';
        icon = ' <img src="' + iconPath + '" style="cursor: pointer;" id="' + idtag + 'Icon" onmousedown="clickWidgetIcon(\'' + idtag + '\');" />';
    } else {
        clicking = 'onclick="drawCalendar(\'' + idtag + '\')"';
        icon = '';
    }

    document.write('<input onKeyUp="validateDate(this,true)" name="' + idtag + '" id="' + idtag + '" type="text" value="' + value + '" ' + readOnly + ' ' + clicking + ' style="width: 160px;" />' +  icon + '<div style="position: absolute"><div id="' + idtag + 'Div" style="background: #fff; border: 2px solid #D0D3D5; display:none;"></div></div>');
    document.write('<script language="javascript" type="text/javascript">validateDate(document.getElementById("'+ idtag +'"),true)</script> ');
    document.write(' &nbsp;&nbsp;<span class="help" style="white-space: pre">(rrrr-mm-dd&nbsp;HH:MM:SS)</span>');
}
