//==============================================================================
//=============================  C A L E N D A R  ==============================
//==============================================================================

function openCalendar(form, field, type, locale) {
	url = window.url;
	params      	= "lang=de-iso-8859-1&server=1";
	var calendar 	= window.open(url + "?" + params, "calendar", "width=300,height=220,status=no");
//	dateField   	= eval("document." + form + "." + field);
	dateField   	= eval("document." + form + "." + field);
//alert("openCalendar:"+"document." + form + "." + field);
//alert("openCalendar::1");
//	dateType    	= type;
	dateType    	= "date";
//	dateLocale  	= locale;
	dateLocale  	= "de";
//alert("openCalendar::dateLocale"+dateLocale);
	calendar.focus();
}

//------------------------------------------------------------------------------

    var day;
    var month;
    var year;
    var hour = 0;
    var minute = 0;
    var second = 0;
    var clock_set = 0;

var month_names_de = new Array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
var day_names_de   = new Array("<font color='#D40D02'>So</font>","Mo","Di","Mi","Do","Fr","<font color='#D40D02'>Sa</font>");

var month_names_en = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var day_names_en   = new Array("<font color='#D40D02'>Su</font>","Mo","Tu","We","Th","Fr","<font color='#D40D02'>Sa</font>");

var month_names_default = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var day_names_default   = new Array("<font color='#D40D02'>Su</font>","Mo","Tu","We","Th","Fr","<font color='#D40D02'>Sa</font>");

//------------------------------------------------------------------------------
    /**
      * Allows moving around inputs/select by Ctrl+arrows
      *
      * @param   object   event data
      */
    function onKeyDownArrowsHandler(e) {
        e = e||window.event;
        var o = (e.srcElement||e.target);
        if (!o) return;
        if (o.tagName != "TEXTAREA" && o.tagName != "INPUT" && o.tagName != "SELECT") return;
        if (!e.ctrlKey) return;
        if (!o.id) return;

        var pos = o.id.split("_");
        if (pos[0] != "field" || typeof pos[2] == "undefined") return;

        var x = pos[2], y=pos[1];

        // skip non existent fields
        for (i=0; i<10; i++)
        {
            switch(e.keyCode) {
                case 38: y--; break; // up
                case 40: y++; break; // down
                case 37: x--; break; // left
                case 39: x++; break; // right
                default: return;
            }

            var id = "field_" + y + "_" + x;
            var nO = document.getElementById(id);
            if (!nO) {
                var id = "field_" + y + "_" + x + "_0";
                var nO = document.getElementById(id);
            }
            if (nO) break;
        }

        if (!nO) return;
        nO.focus();
        if (nO.tagName != 'SELECT') {
            nO.select();
        }
        e.returnValue = false;
    }

//------------------------------------------------------------------------------

    function formatNum2(i, valtype) {
        f = (i < 10 ? '0' : '') + i;
        if (valtype && valtype != '') {
            switch(valtype) {
                case 'month':
                    f = (f > 12 ? 12 : f);
                    break;

                case 'day':
                    f = (f > 31 ? 31 : f);
                    break;

                case 'hour':
                    f = (f > 24 ? 24 : f);
                    break;

                default:
                case 'second':
                case 'minute':
                    f = (f > 59 ? 59 : f);
                    break;
            }
        }

        return f;
    }

//------------------------------------------------------------------------------

    function formatNum4(i) {
        return (i < 1000 ? i < 100 ? i < 10 ? '000' : '00' : '0' : '') + i;
    }

//------------------------------------------------------------------------------

    function initCalendar() {

//        dateLocale = window.opener.dateLocale;
        dateLocale = "de";
        if(dateLocale != "de" && dateLocale != "en") {
//            dateLocale = "default";
            dateLocale = "de";
        }
        if (!year && !month && !day) {                 /-- Called for first time --/
//            alert("initCalendar::!year && !month && !day");
            if (window.opener.dateField.value) {
//              alert("initCalendar::window.opener.dateField.value");
                value = window.opener.dateField.value;
                if (window.opener.dateType == 'datetime' || window.opener.dateType == 'date') {
                    if (window.opener.dateType == 'datetime') {
                        parts   = value.split(' ');
                        value   = parts[0];

                        if (parts[1]) {
                            time    = parts[1].split(':');
                            hour    = parseInt(time[0]);
                            minute  = parseInt(time[1]);
                            second  = parseInt(time[2]);
                        }
                    }

                //-- BSMO -- change date in another format --//

                    if(dateLocale == "de") {
                        date        = value.split(".");
                        day         = parseInt(date[0]);
                        if(date[1].substr(0,1)=='0') { date[1] = date[1].substr(1); }
                        month       = parseInt(date[1]) - 1;
                        year        = parseInt(date[2]);
                    } else if(dateLocale == "en") {
                        date        = value.split("/");
                        day         = parseInt(date[0]);
                        if(date[1].substr(0,1)=='0') { date[1] = date[1].substr(1); }
                        month       = parseInt(date[1]) - 1;
                        year        = parseInt(date[2]);
                    } else {
                        date        = value.split("-");
                        day         = parseInt(date[2]);
                        if(date[1].substr(0,1)=='0') { date[1] = date[1].substr(1); }
                        month       = parseInt(date[1]) - 1;
                        year        = parseInt(date[0]);
                    }
                //------------------------------------------//

                } else {

                //-- BSMO -- change date in another format --//

                    if(dateLocale == "de") {
//                      alert("BSMO -- change date in another format::1");
                        day         = parseInt(value.substr(0,2));
                        month       = parseInt(value.substr(3,2)) - 1;
                        year        = parseInt(value.substr(6,4));
                    } else if(dateLocale == "en") {
//                      alert("BSMO -- change date in another format::2");
                        day         = parseInt(value.substr(0,2));
                        month       = parseInt(value.substr(3,2)) - 1;
                        year        = parseInt(value.substr(6,4));
                    } else {
//                      alert("BSMO -- change date in another format::3");
                        year        = parseInt(value.substr(0,4));
                        month       = parseInt(value.substr(4,2)) - 1;
                        day         = parseInt(value.substr(6,2));
                    }
                //------------------------------------------//

                    hour        = parseInt(value.substr(8,2));
                    minute      = parseInt(value.substr(10,2));
                    second      = parseInt(value.substr(12,2));
                }
            }
            // --- bsmo (ms-life specific?) - jn@bsmo.de 2006-10-11 ---
            else {
                dt      = new Date();
                year    = dt.getFullYear();
                month   = dt.getMonth();
                day     = dt.getDate();
            }
            // --- / bsmo ms-life specifif(?) - jn@bsmo.de 2006-10-11 ---
            
            if (isNaN(year) || isNaN(month) || isNaN(day) || day == 0) {
//              alert("initCalendar::isNaN(year) || isNaN(month) || isNaN(day) || day == 0");
                dt      = new Date();
                year    = dt.getFullYear();
                month   = dt.getMonth();
                day     = dt.getDate();
            }
            if (isNaN(hour) || isNaN(minute) || isNaN(second)) {
//              alert("initCalendar::isNaN(hour) || isNaN(minute) || isNaN(second)");
                dt      = new Date();
                hour    = dt.getHours();
                minute  = dt.getMinutes();
                second  = dt.getSeconds();
            }

        } else {                                        //-- Moving in calendar --//

            if (month > 11) {
                month = 0;
                year++;
            }
            if (month < 0) {
                month = 11;
                year--;
            }
        }

        if (document.getElementById) {
            cnt = document.getElementById("calendar_data");
        } else if (document.all) {
            cnt = document.all["calendar_data"];
        }

        cnt.innerHTML = "";

        str = "";

        //-- heading table --//
        str += '<br><table class="head" border=0><tr><th width="50%">';
        if(dateLocale == "de") {
            str += '<a href="#" onclick="month--; initCalendar();">&lt;&lt;&#160;</a></a><b>' + month_names_de[month] + '</b><a href="#" onclick="month++; initCalendar();">&#160;&gt;&gt;</a>';
        } else if(dateLocale == "en") {
           str += '<a href="#" onclick="month--; initCalendar();">&lt;&lt;&#160;</a></a><b>' + month_names_en[month] + '</b><a href="#" onclick="month++; initCalendar();">&#160;&gt;&gt;</a>';
        } else {
            str += '<a href="#" onclick="month--; initCalendar();">&lt;&lt;&#160;</a></a><b>' + month_names_default[month] + '</b><a href="#" onclick="month++; initCalendar();">&#160;&gt;&gt;</a>';
        }
        //--str += '</th><th width="20%">' + '<span style="font-weight:normal">(<i>' + window.opener.dateType + '</i>)</span>';
        str += '</th><th width="50%">';
        str += '<a href="#" onclick="year--; initCalendar();">&lt;&lt;&#160;</a><b>'  + year + '</b><a href="#" onclick="year++; initCalendar();">&#160;&gt;&gt;</a>';
        str += '</th></tr></table><br>';

        str += '<table class="calendar"><tr>';
        for (i = 0; i < 7; i++) {
            if(dateLocale == "de") {
                str += "<th>" + day_names_de[i] + "</th>";
            } else if(dateLocale == "en") {
                str += "<th>" + day_names_en[i] + "</th>";
            } else {
                str += "<th>" + day_names_default[i] + "</th>";
            }
        }
        str += "</tr>";

        var firstDay = new Date(year, month, 1).getDay();
        var lastDay = new Date(year, month + 1, 0).getDate();

        str += "<tr>";

        dayInWeek = 0;
        for (i = 0; i < firstDay; i++) {
            str += "<td>&nbsp;</td>";
            dayInWeek++;
        }
        for (i = 1; i <= lastDay; i++) {
            if (dayInWeek == 7) {
                str += "</tr><tr>";
                dayInWeek = 0;
            }

            dispmonth = 1 + month;

        //-- BSMO -- change date in another format --//

           if(dateLocale == "de" || dateLocale == "default") {

                if (window.opener.dateType == 'datetime' || window.opener.dateType == 'date') {
                    actVal = formatNum2(i, 'day') + "." + formatNum2(dispmonth, 'month') + "." + formatNum4(year);
                } else {
                    actVal = "" + formatNum2(i, 'day') + formatNum2(dispmonth, 'month') + formatNum4(year);
                }    

            } else if(dateLocale == "en") {

                if (window.opener.dateType == 'datetime' || window.opener.dateType == 'date') {
                    actVal = formatNum2(i, 'day') + "/" + formatNum2(dispmonth, 'month') + "/" + formatNum4(year);
                } else {
                    actVal = "" + formatNum2(i, 'day') + formatNum2(dispmonth, 'month') + formatNum4(year);
                }    

            } else {

                if (window.opener.dateType == 'datetime' || window.opener.dateType == 'date') {
                    actVal = formatNum4(year) + "-" + formatNum2(dispmonth, 'month') + "-" + formatNum2(i, 'day');
                } else {
                    actVal = "" + formatNum4(year) + formatNum2(dispmonth, 'month') + formatNum2(i, 'day');
                }
            }

        //-------------------------------------------//
            if (i == day) {
                style = ' class="selected"';
            } else {
                style = '';
            }
            str += "<td" + style + "><a href='#' onclick='returnDate(\"" + actVal + "\");'>" + i + "</a></td>"
            dayInWeek++;
        }
        for (i = dayInWeek; i < 7; i++) {
            str += "<td>&nbsp;</td>";
        }

        str += "</tr></table>";

        cnt.innerHTML = str;

        //-- Should we handle time also? --//
        if (document.getElementById) {
            cnt = document.getElementById("clock_data");
        } else if (document.all) {
            cnt = document.all["clock_data"];
        }
        str = '<br><br>';
        str += '<form class="clock">';	
        if (window.opener.dateType == 'datetime') {     //--   && !clock_set   --//
            str += '&#160; &#160; &#160; &#160; &#160; &#160; &#160;';
            str += '<input id="hour"    type="text" size="2" maxlength="2" onblure="this.value=formatNum2(this.value, \'hour\');"  value="' + formatNum2(hour, 'hour') + '" />:';
            str += '<input id="minute"  type="text" size="2" maxlength="2" onblur="this.value=formatNum2(this.value, \'minute\')" value="' + formatNum2(minute, 'minute') + '" />:';
            str += '<input id="second"  type="text" size="2" maxlength="2" onblur="this.value=formatNum2(this.value, \'second\')" value="' + formatNum2(second, 'second') + '" />';
            str += ' &#160; &#160; &#160; &#160; &#160; ';
            //cnt.innerHTML = str;
            //clock_set = 1;
       } else {
            str += ' &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;  ';
            str += ' &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;  ';
       }
       str += '<a href="javascript:top.close();" style="color:black; font-weight:bold;"> close &#160;&gt;&gt;</a>';
       str += '</form>';
       cnt.innerHTML = str;
    }

//------------------------------------------------------------------------------

    function doCheckSearchFormPeriod()
    {
        if(window.opener.document.forms["MsSearchForm"].dateBegin.value!="") {
            window.opener.document.forms["MsSearchForm"].dt="range";
            window.opener.document.forms["MsSearchForm"].dt[1].checked=true;
        }
        if(window.opener.document.forms["MsSearchForm"].dateEnd.value!="") {
            window.opener.document.forms["MsSearchForm"].dt="range";
            window.opener.document.forms["MsSearchForm"].dt[1].checked=true;
       }
    }

//------------------------------------------------------------------------------

    function returnDate(d) {
        txt = d;
//        alert("returnDate::d == "+d);
//        alert("returnDate::window.opener.dateType == "+window.opener.dateType);

        if (window.opener.dateType == 'datetime') {
            // need to get time
            h = parseInt(document.getElementById('hour').value);
            m = parseInt(document.getElementById('minute').value);
            s = parseInt(document.getElementById('second').value);
            if (window.opener.dateType == 'datetime') {
                txt += ' ' + formatNum2(h, 'hour') + ':' + formatNum2(m, 'minute') + ':' + formatNum2(s, 'second');
            } else {
                // timestamp
                txt += formatNum2(h, 'hour') + formatNum2(m, 'minute') + formatNum2(s, 'second');
            }
        }

        window.opener.dateField.value = txt;
        // --- bsmo ms-life specific -- jn@bsmo.de 2006-10-10 ---
        doCheckSearchFormPeriod();
        // --- / bsmo ms-life specific -- jn@bsmo.de 2006-10-10 ---
        window.close();
    }

//------------------------------------------------------------------------------


