var errFontColor = (typeof(errFontColor) != "undefined") ? errFontColor : "red";
var commonFontColor = (typeof(commonFontColor) != "undefined") ? commonFontColor : "black";
var errBorderColor = (typeof(errBorderColor) != "undefined") ? errBorderColor : "1px solid " + errFontColor;
var commonBorderColor = (typeof(commonBorderColor) != "undefined") ? commonBorderColor : "1px double buttonshadow";

var fontFace = "verdana";
var fontSize = 11;

var titleWidth = 90;
var titleMode = 2;
var dayWidth = 12;
var dayDigits = 2;

var titleColor = "#979797";
var daysColor = "#979797";
var bodyColor = "#ffffff";
var dayColor = "#ffffff";
var currentDayColor = "#ffffff";
var footColor = "#979797";
var borderColor = "#252525";

var titleFontColor = "#252525";
var daysFontColor = "#252525";
var dayFontColor = "#252525";
var currentDayFontColor = "#e16937";
var footFontColor = "#252525";

var calFormat = "dd.mm.yyyy";
var maxYearDelta = 100;
var calendarContainer = 1;  /*0- контент для слоя; 1- контент для страницы.*/
var defaultMinYear = 1900;
var weekDay = 1;

if (typeof(baseUrl)=="undefined") {
  var baseUrl =  document.getElementsByTagName("base")[0].getAttribute("href");
}
// ------
//get Language settings
var yxMonths, yxDays, yxLinks, errMess, mess2User;
if (typeof(calMessages)=="object") {
    yxMonths =  calMessages["months"];
    yxDays =calMessages["weeekdays"];
    yxLinks =calMessages["buttons"];
    errMess= calMessages["notFoundError"];
    mess2User=calMessages["checkDatesInputs"];
} else {
    yxMonths = new Array("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь");
    yxDays = new Array("вс", "пн", "вт", "ср", "чт", "пт", "сб", "вс");
    yxLinks = new Array("[закрыть]", "[очистить]");
    errMess= "Не найден календарь с именем: ";
    mess2User= "Пожалуйста, проверьте правильность введения дат!";
}

// codes
var calWidth = 184, calHeight = 223, calOffsetX = -184, calOffsetY = 28;
if (CalendarLoadFlag == null) {
    var calWin = null;
    var winX = 0, winY = 0;
    var cal = "cal";
    var cals = new Array();
    var currentCal = null;
}

var isOpera = (navigator.userAgent.indexOf("Opera") != -1);
var isOpera6 = (navigator.appVersion.indexOf("MSIE 5") != -1 && navigator.userAgent.indexOf("Opera 6") != -1);
var isN6 = (navigator.userAgent.indexOf("Gecko") != -1);
var isN4 = (document.layers) ? true : false;
var isMac = (navigator.userAgent.indexOf("Mac") != -1);
var isIE = (document.all && !isOpera && (!isMac || navigator.appVersion.indexOf("MSIE 4") == -1)) ? true : false;

if (isN4) {
    fontSize += 2;
}

var span2 = "</span>";

function CreateCalendarDiv(ev) {
    var e = ev || event;
    var src = window.event ? e.srcElement : e.target;
    if (src.tagName != "IMG" && src.tagName != "BUTTON") return;
    var parentObj = src.parentNode;
    var DivTag = document.createElement("DIV");
    DivTag.setAttribute("id", "CalendarLayer");
    DivTag.style.position = "absolute";
    DivTag.style.display = "none";
    DivTag.style.zIndex = "100";
    if (isIE) {
        //   DivTag.style.marginLeft = "-110px";
        //  DivTag.style.marginTop = "20px";
    }
    if (src.tagName == "IMG")
        parentObj.parentNode.appendChild(DivTag);
    else parentObj.appendChild(DivTag);

}

function calendarBody(part) {
    var str = "";
    if (part == "top") {
        str += '<table cellspacing="0" cellpadding="0" width="100%" class="eatr_cal"><tr><td class="cal_body">\n';
        str += '<table width="100%" cellpadding="0" cellspacing="0"><tr><td style="cursor:default;">';
        if (calendarContainer == 1) str += '<iframe name="calIFrame" id="calIFrame" ' + ((window.setIE6iframeSrc) ? setIE6iframeSrc(true) : "") + ' frameborder="0"></iframe>';
    }
    else if (part == "bottom") {
        str += '</td></tr></table>';
        str += '</td><td><table cellpadding="0" cellspacing="0" style="height:100%"><tr><td style="font-size:4px;">&nbsp;</td></tr><tr><td class="win_bg">&nbsp;</td></tr></table></td></tr>';
        str += '<tr><td valign="top"><table width="100%" cellspacing="0" cellpadding="0"><tr><td style="font-size:4px;">&nbsp;</td><td class="win_vbg">&nbsp;</td></tr></table></td><td valign="top"></td></tr></table>';
    }
    return str;
}

function span1(tag) {
    return "<span class='" + tag + "'>";
}
function spanx(tag, color) {
    return "." + tag + " { font-family:" + fontFace + "; color:" + color + "; }\n";
}


function a1(tag) {
    //  return "<a class='"+tag+"' style='cursor:pointer;color:#173C74;' onclick=";
    return "<a class='aOff' onMouseOver=\"this.className='aOn'\" onMouseOut=\"this.className='aOff'\"  onclick=";
}

function ax(tag, color) {
    return "." + tag + " { text-decoration:none; color:" + color + "; }\n";
}

function calOBJ(title, attrName, form, message, dataField, fieldPrefix, minYearField, yearDeltaField) {
    if (form == undefined) {
        var inp = $("cal_" + attrName);
        if (inp) {
            form = inp.form;
        } else {
            form = null;
        }
    } else {
        if (form instanceof String) {
            form = document.forms[form];
        }
    }
    if (form == null) {
        form = document.forms[document.forms.length - 1];
    }
    this.fieldPrefix = (fieldPrefix) ? fieldPrefix : "";
    this.dataFieldPrefix = (dataField) ? dataField : "";
    this.attrName = attrName;
    this.minYear = minYearField ? minYearField : defaultMinYear;
    this.yearDelta = yearDeltaField ? yearDeltaField : maxYearDelta;

    this.name = this.fieldPrefix + "calendar(" + attrName + ")";
    this.field = this.fieldPrefix + "date(" + attrName + ")";

    if (this.dataFieldPrefix != "") {
        this.dataField = this.dataFieldPrefix + "(" + attrName + ")";
    } else {
        this.dataField = this.fieldPrefix + "data(" + attrName + ")";
    }

    this.hhField = this.fieldPrefix + "hh(" + attrName + ")";
    this.mmField = this.fieldPrefix + "mm(" + attrName + ")";
    this.ssField = this.fieldPrefix + "ss(" + attrName + ")";

    this.message = message;
    this.title = title;

    if (form.tagName) {
        this.formName = form.name;
        this.form = form;
    } else {
        this.formName = form;
        this.form = document.forms[this.formName];
    }

    this.getFieldObj = function (name) {
        var objByID = $(name);
        if (!objByID) {
            return this.form[name];
        }
        else  return objByID;
    };

    var fieldObj = this.getFieldObj(this.field); //this.form[this.field]
    this.viewType = (!fieldObj || (fieldObj && fieldObj.type == "hidden")) ? "time" : (!this.getFieldObj(this.hhField) || !this.getFieldObj(this.mmField)) ? "date" : "datetime";

    var dataFieldObj = this.getFieldObj(this.dataField); //this.form[this.dataField]
    if (dataFieldObj && dataFieldObj.value != "") {
        if (fieldObj) fieldObj.value = getFormatedDate(dataFieldObj.value, this.viewType);
        if (this.viewType == "datetime" || this.viewType == "time") {
            setHour(this.getFieldObj(this.hhField), this.getFieldObj(this.dataField).value);
            setMinute(this.getFieldObj(this.mmField), this.getFieldObj(this.dataField).value);
            setSecond(this.getFieldObj(this.ssField), this.getFieldObj(this.dataField).value);
        }
    }
    addCalendarConvertEvent(this);
}
function toDate(value) {
    var tmpD = new Date();
    tmpD.setTime(value);
    return tmpD;
}
function setHour(field, value, flag) {
    if (field) field.value = (!flag) ? toDate(value).getHours() : toDate(value).getUTCHours();
}
function setMinute(field, value, flag) {
    if (field)field.value = (!flag) ? toDate(value).getMinutes() : toDate(value).getUTCMinutes();
}
function setSecond(field, value, flag) {
    if (field)field.value = (!flag) ? toDate(value).getSeconds() : toDate(value).getUTCSeconds();
}

function setFont(font, size) {
    if (font != "") {
        fontFace = font;
    }
    if (size > 0) {
        fontSize = size;

        if (isN4) {
            fontSize += 2;
        }
    }
}

function setWidth(tWidth, tMode, dWidth, dDigits) {
    if (tWidth > 0) {
        titleWidth = tWidth;
    }
    if (tMode == 1 || tMode == 2) {
        titleMode = tMode;
    }
    if (dWidth > 0) {
        dayWidth = dWidth;
    }
    if (dDigits > 0) {
        dayDigits = dDigits;
    }
}

function setColor(tColor, dsColor, bColor, dColor, cdColor, fColor, bdColor) {
    if (tColor != "") {
        titleColor = tColor;
    }
    if (dsColor != "") {
        daysColor = dsColor;
    }
    if (bColor != "") {
        bodyColor = bColor;
    }
    if (dColor != "") {
        dayColor = dColor;
    }
    if (cdColor != "") {
        currentDayColor = cdColor;
    }
    if (fColor != "") {
        footColor = fColor;
    }
    if (bdColor != "") {
        borderColor = bdColor;
    }
}

function setFontColor(tColorFont, dsColorFont, dColorFont, cdColorFont, fColorFont) {
    if (tColorFont != "") {
        titleFontColor = tColorFont;
    }
    if (dsColorFont != "") {
        daysFontColor = dsColorFont;
    }
    if (dColorFont != "") {
        dayFontColor = dColorFont;
    }
    if (cdColorFont != "") {
        currentDayFontColor = cdColorFont;
    }
    if (fColorFont != "") {
        footFontColor = fColorFont;
    }
}

function setFormat(format) {
    calFormat = format;
}

function setSize(width, height, ox, oy) {
    if (width > 0) {
        calWidth = width;
    }
    if (height > 0) {
        calHeight = height;
    }

    calOffsetX = ox;
    calOffsetY = oy;
}

function setWeekDay(wDay) {
    if (wDay == 0 || wDay == 1) {
        weekDay = wDay;
    }
}

function setMonthNames(janName, febName, marName, aprName, mayName, junName, julName, augName, sepName, octName, novName, decName) {
    if (janName != "") {
        yxMonths[0] = janName;
    }
    if (febName != "") {
        yxMonths[1] = febName;
    }
    if (marName != "") {
        yxMonths[2] = marName;
    }
    if (aprName != "") {
        yxMonths[3] = aprName;
    }
    if (mayName != "") {
        yxMonths[4] = mayName;
    }
    if (junName != "") {
        yxMonths[5] = junName;
    }
    if (julName != "") {
        yxMonths[6] = julName;
    }
    if (augName != "") {
        yxMonths[7] = augName;
    }
    if (sepName != "") {
        yxMonths[8] = sepName;
    }
    if (octName != "") {
        yxMonths[9] = octName;
    }
    if (novName != "") {
        yxMonths[10] = novName;
    }
    if (decName != "") {
        yxMonths[11] = decName;
    }
}

function setDayNames(sunName, monName, tueName, wedName, thuName, friName, satName) {
    if (sunName != "") {
        yxDays[0] = yxDays[7] = sunName;
    }
    if (monName != "") {
        yxDays[1] = monName;
    }
    if (tueName != "") {
        yxDays[2] = tueName;
    }
    if (wedName != "") {
        yxDays[3] = wedName;
    }
    if (thuName != "") {
        yxDays[4] = thuName;
    }
    if (friName != "") {
        yxDays[5] = friName;
    }
    if (satName != "") {
        yxDays[6] = satName;
    }
}

function setLinkNames(closeLink, clearLink) {
    if (closeLink != "") {
        yxLinks[0] = closeLink;
    }
    if (clearLink != "") {
        yxLinks[1] = clearLink;
    }
}

function addExistedCalendarObj(calObj) {
    if (calObj == null) return;
    if (calObj.name.indexOf("calendar") == -1) return;
    cals[cals.length] = calObj;
}

function addCalendar(title, attrName, form, message, dataField, fieldPrefix, minYearField, yearDeltaField) {
    var newCal = new calOBJ(title, attrName, form, message, dataField, fieldPrefix, minYearField, yearDeltaField);
    cals[cals.length] = newCal;
    return newCal;
}

function findCalendar(name) {
    for (var i = 0; i < cals.length; i++) {
        if (cals[i].name == name) {
            if (cals[i].form == null) {
                if (cals[i].formName == "") {
                    if (document.forms[0]) {
                        cals[i].form = document.forms[0];
                    }
                }
                else if (document.forms[cals[i].formName]) {
                    cals[i].form = document.forms[cals[i].formName];
                }
            }

            return cals[i];
        }
    }

    return null;
}

function getDayName(y, m, d) {
    var wd = new Date(y, m, d);
    return yxDays[wd.getDay()].substring(0, 3);
}

function getMonthFromName(m3) {
    for (var i = 0; i < yxMonths.length; i++) {
        if (yxMonths[i].toLowerCase().substring(0, 3) == m3.toLowerCase()) {
            return i;
        }
    }

    return 0;
}

function getFormat() {
    var calF = calFormat;

    calF = calF.replace(/\\/g, '\\\\');
    calF = calF.replace(/\//g, '\\\/');
    calF = calF.replace(/\[/g, '\\\[');
    calF = calF.replace(/\]/g, '\\\]');
    calF = calF.replace(/\(/g, '\\\(');
    calF = calF.replace(/\)/g, '\\\)');
    calF = calF.replace(/\{/g, '\\\{');
    calF = calF.replace(/\}/g, '\\\}');
    calF = calF.replace(/\</g, '\\\<');
    calF = calF.replace(/\>/g, '\\\>');
    calF = calF.replace(/\|/g, '\\\|');
    calF = calF.replace(/\*/g, '\\\*');
    calF = calF.replace(/\?/g, '\\\?');
    calF = calF.replace(/\+/g, '\\\+');
    calF = calF.replace(/\^/g, '\\\^');
    calF = calF.replace(/\$/g, '\\\$');

    calF = calF.replace(/dd/i, '\\d\\d');
    calF = calF.replace(/mm/i, '\\d\\d');
    calF = calF.replace(/yyyy/i, '\\d\\d\\d\\d');
    calF = calF.replace(/day/i, '\\w\\w\\w');
    calF = calF.replace(/mon/i, '\\w\\w\\w');

    return new RegExp(calF);
}

//Функция для определения весокосный ли год
function leapYear(y) {
    if (y % 4 == 0) {
        if (y % 100 == 0) {
            if (y % 400 == 0) return 1;
            else return 0;
        }
        else return 1;
    }
    else return 0;
}

function checkTime(field, mode) {
    var timeStr = field.value;
    var numTimeStr = 0;
    if (!isNaN(parseInt(timeStr))) numTimeStr = parseInt(timeStr);
    switch (mode) {
        case 1:if (numTimeStr > 23) numTimeStr = 23; break;
        case 2:if (numTimeStr > 59) numTimeStr = 59;break;
        case 3:if (numTimeStr > 59) numTimeStr = 59;break;
    }
    timeStr = get2Digits(numTimeStr);
    field.value = timeStr;
}

function getDateNumbers(date, currentCalendar) {
    var y, m, d;
    var yIdx = calFormat.search(/yyyy/i);
    var mIdx = calFormat.search(/mm/i);
    var m3Idx = calFormat.search(/mon/i);
    var dIdx = calFormat.search(/dd/i);
    var dateStr = date.value;
    var myDate = new Date();
    var yearDelta = myDate.getFullYear() + (currentCalendar != null ? currentCalendar.yearDelta : maxYearDelta);
    var minYearValue = currentCalendar != null ? currentCalendar.minYear : defaultMinYear;
    var badY = false;
    var badM = false;
    var badD = false;

    y = dateStr.substring(yIdx, yIdx + 4) - 0;
    if (y < minYearValue || y > yearDelta) {
        badY = true;
        y = y < minYearValue ? minYearValue : yearDelta;
    }

    if (mIdx != -1) {
        m = dateStr.substring(mIdx, mIdx + 2) - 0;
        if (m > 12) badM = true;
        m = (m > 0) ? (m <= 12) ? m - 1 : 11 : 0;
    }
    else {
        m = getMonthFromName(dateStr.substring(m3Idx, m3Idx + 3));
    }

    d = dateStr.substring(dIdx, dIdx + 2) - 0;
    d = (d > 0) ? d : 1;
    if (d > 31) badD = true;
    if (d > 28) {
        d = (d > 31) ? 31 : d;
        if (m == 3 || m == 5 || m == 8 || m == 10) d = (d > 30) ? 30 : d;
        if (m == 1) d = (leapYear(y)) ? 29 : 28;
    }

    date.value = ((!badD) ? get2Digits(d) : "xx") + "." + ((!badM) ? get2Digits(m + 1) : "xx") + "." + ((!badY) ? y : "xxxx");

    return new Array(y, m, d);
}

function hideCal() {
    if (calWin != null) {
        calWin.close();
        calWin = null;
    }
    else if ($("CalendarLayer"))
    {
        var obj = $("CalendarLayer");
        var parentObj = obj.parentNode;
        //   obj.style.display = "none";
        parentObj.removeChild(obj);
    }
    window.status = "";
    resizeParent();
}

function getLeftIE(x, m) {
    var dx = 0;
    if (x.tagName == "TD") {
        dx = x.offsetLeft;
    }
    else if (x.tagName == "TABLE") {
        dx = x.offsetLeft;
        if (m) {
            dx += (x.cellPadding != "" ? parseInt(x.cellPadding) : 2);
            m = false;
        }
    }
    return dx + (x.parentElement.tagName == "BODY" ? 0 : getLeftIE(x.parentElement, m));
}
function getTopIE(x, m) {
    var dy = 0;
    if (x.tagName == "TR") {
        dy = x.offsetTop;
    }
    else if (x.tagName == "TABLE") {
        dy = x.offsetTop;
        if (m) {
            dy += (x.cellPadding != "" ? parseInt(x.cellPadding) : 2);
            m = false;
        }
    }
    return dy + (x.parentElement.tagName == "BODY" ? 0 : getTopIE(x.parentElement, m));
}

function getLeftN4(l) {
    return l.pageX;
}
function getTopN4(l) {
    return l.pageY;
}

function getLeftN6(l) {
    return l.offsetLeft;
}
function getTopN6(l) {
    return l.offsetTop;
}

function lastDay(d) {
    var yy = d.getFullYear(), mm = d.getMonth();
    for (var i = 31; i >= 28; i--) {
        var nd = new Date(yy, mm, i);
        if (mm == nd.getMonth()) {
            return i;
        }
    }
}

function firstDay(d) {
    var yy = d.getFullYear(), mm = d.getMonth();
    var fd = new Date(yy, mm, 1);
    return fd.getDay();
}

function dayDisplay(i) {
    if (dayDigits == 0) {
        return yxDays[i];
    }
    else {
        return yxDays[i].substring(0, dayDigits);
    }
}

function calMakeCmd(cmdName, param) {
    var mycalCmd = "";
    if (cmdName == null || cmdName == "") return;
    if (param == null) param = "";
    if ($("CalendarLayer")) {
        if (calendarContainer == 1)  mycalCmd = "if(self.parent && self.parent." + cmdName + ") self.parent." + cmdName + "(" + param + ")";
        else mycalCmd = cmdName + "(" + param + ")";
    }
    else mycalCmd = "if(window.opener && !window.opener.closed && window.opener." + cmdName + ") window.opener." + cmdName + "(" + param + ")";

    return mycalCmd;
}

function calTitle(d) {
    var yy = d.getFullYear(), mm = yxMonths[d.getMonth()];
    var s = "<style>span.days {font-weight:bold;font-size:11px}</style><table align='center' border='0' bgcolor='" + borderColor + "' cellspacing='0' cellpadding='1'><tr><td>\n<table cellspacing='0' cellpadding='0' border='0'>\n";

    if (titleMode == 2) {
        s += "<tr align='center' bgcolor='" + titleColor + "'><td colspan='7'>\n<table cellpadding='0' cellspacing='0' border='0'><tr align='center' valign='middle'><td align='right'>" + span1("title") + "<b>&nbsp;" + a1("titlea") + "'" + calMakeCmd("moveYear", "-1") + "'><img src='"+baseUrl+"images/military/arrowleft.gif' border='0'/>&nbsp;</a></b>" + span2 + "</td><td width='" + titleWidth + "'><b>" + span1("title") + yy + span2 + "</b></td><td align='left'>" + span1("title") + "<b>" + a1("titlea") + "'" + calMakeCmd("moveYear", "1") + "'>&nbsp;<img src='"+baseUrl+"images/military/arrowright.gif' border='0'/></a>&nbsp;</b>" + span2 + "</td></tr><tr align='center' valign='middle'><td align='right'>" + span1("title") + "<b>" + a1("titlea") + "'" + calMakeCmd("prepMonth", d.getMonth()) + "'>&nbsp;<img src='"+baseUrl+"images/military/arrowleft.gif' border='0'/>&nbsp;</a></b>" + span2 + "</td><td width='" + titleWidth + "'><b>" + span1("title") + mm + span2 + "</b></td><td align='left'>" + span1("title") + "<b>" + a1("titlea") + "'" + calMakeCmd("nextMonth", d.getMonth()) + "'>&nbsp;<img src='"+baseUrl+"images/military/arrowright.gif' border='0'/>&nbsp;</a></b>" + span2 + "</td></tr></table>\n</td></tr><tr align='center' bgcolor='" + daysColor + "'>";
    }
    else {
        s += "<tr align='center' bgcolor='" + titleColor + "'><td colspan='7'>\n<table cellpadding='0' cellspacing='0' border='0' ><tr align='center' valign='middle'><td>" + span1("title") + "<b>" + a1("titlea") + "'" + calMakeCmd("moveYear", "-1") + "'>&nbsp;&lt;&lt;</a>&nbsp;" + a1("titlea") + "'" + calMakeCmd("prepMonth", d.getMonth()) + "'><img src='"+baseUrl+"images/military/arrowleft.gif' border='0'/>&nbsp;</a></b>" + span2 + "</td><td style='font-size:14px !important;' width='" + titleWidth + "'><b>" + span1("title") + mm + "<br/>" + yy + span2 + "</b></td><td>" + span1("title") + "<b>" + a1("titlea") + "'" + calMakeCmd("nextMonth", d.getMonth()) + "'>&nbsp;<img src='"+baseUrl+"images/military/arrowright.gif' border='0'/></a>&nbsp;" + a1("titlea") + "'" + calMakeCmd("moveYear", "1") + "'>&gt;&gt;&nbsp;</a></b>" + span2 + "</td></tr></table>\n</td></tr><tr align='center' bgcolor='" + daysColor + "'>";
    }

    for (var i = weekDay; i < weekDay + 7; i++) {
        s += "<td style='border-bottom:1px solid #000000' width='" + dayWidth + "'>" + span1("days") + dayDisplay(i) + span2 + "</td>";
    }

    s += "</tr>\n";

    return s;
}

function calStyle() {
    return "<style type='text/css'>\n .aOn {border:3px solid #e16937;cursor:pointer; padding:3px;font-size:" + fontSize + "px; }\n .aOff {padding:3px;border:3px solid #ffffff;cursor:pointer;font-size:" + fontSize + "px;}\n" + spanx("title", titleFontColor) + spanx("days", daysFontColor) + spanx("foot", footColor) + spanx("day", dayFontColor) + spanx("currentDay", currentDayFontColor) + ax("titlea", titleFontColor) + ax("daya", dayFontColor) + ax("currenta", currentDayFontColor) + ax("foota", footFontColor) + "span.title .aOn,span.title  .aOff,span.foot .aOn,span.foot  .aOff{border:0px !important; padding:0px !important; color:#252525;}</style>\n";
}


function calHeader() {
    return "<head>\n<title>" + currentCal.title + "</title>\n</head>\n<body style='margin:0px;overflow:hidden;cursor:default;'>\n";
}

function calFooter() {
    return "<tr bgcolor='" + footColor + "'><td colspan='7' align='center'>" + span1("foot") + "<b>" + a1("foota") + "'" + calMakeCmd("hideCal") + "'>" + yxLinks[0] + "</a>&nbsp;&nbsp;" + a1("foota") + "'" + calMakeCmd("clearDate") + "'>" + yxLinks[1] + "</a></b>" + span2 + "</td></tr></table>\n</td></tr></table>\n";
}

function calBody(d, day) {
    var s = "", dayCount = 1, fd = firstDay(d), ld = lastDay(d);

    if (weekDay > 0 && fd == 0) {
        fd = 7;
    }

    for (var i = 0; i < 6; i++) {
        s += "<tr align='center' bgcolor='" + bodyColor + "'>";
        for (var j = weekDay; j < weekDay + 7; j++) {
            if (i * 7 + j < fd || dayCount > ld) {
                s += "<td>" + span1("day") + "&nbsp;" + span2 + "</td>";
            }
            else {
                var bgColor = dayColor;
                var fgTag = "day";
                var fgTagA = "daya";
                if (dayCount == day) {
                    bgColor = currentDayColor;
                    fgTag = "currentDay";
                    fgTagA = "currenta";
                }

                s += "<td style='padding:6px 0' bgcolor='" + bgColor + "'>" + span1(fgTag) + a1(fgTagA) + "'" + calMakeCmd("pickDate", dayCount) + "'>" + (dayCount++) + "</a>" + span2 + "</td>";
            }
        }
        s += "</tr>";
    }

    return s;
}

function moveYear(dy) {
    cY += dy;
    var nd = new Date(cY, cM, 1);
    changeCal(nd);
}

function prepMonth(m) {
    cM = m - 1;
    if (cM < 0) {
        cM = 11;
        cY--;
    }
    var nd = new Date(cY, cM, 1);
    changeCal(nd);
}

function nextMonth(m) {
    cM = m + 1;
    if (cM > 11) {
        cM = 0;
        cY++;
    }
    var nd = new Date(cY, cM, 1);
    changeCal(nd);
}

function changeCal(d) {
    var dd = 0;
    if (currentCal != null) {
        var calRE = getFormat();

        var calFieldObj = currentCal.getFieldObj(currentCal.field);
        var calDataFieldObj = currentCal.getFieldObj(currentCal.dataField);
        var cd;

        if (calFieldObj.value != "" && calRE.test(calFieldObj.value)) {
            cd = getDateNumbers(calFieldObj, currentCal);
            if (cd[0] == d.getFullYear() && cd[1] == d.getMonth()) {
                dd = cd[2];
            }
        }
        else if (calDataFieldObj.value != "") {
            cd = new Date();
            cd.setTime(calDataFieldObj.value);
            if (cd.getFullYear() == d.getFullYear() && cd.getMonth() == d.getMonth()) {
                dd = cd.getDate();
            }
        }
        else {
            cd = new Date();
            if (cd.getFullYear() == d.getFullYear() && cd.getMonth() == d.getMonth()) {
                dd = cd.getDate();
            }
        }
    }

    var calendar;
    var calDiv = $("CalendarLayer");
    if (calDiv != null) {
        if (calendarContainer == 0) {
            calendar = calStyle() + calTitle(d) + calBody(d, dd) + calFooter();
            calDiv.innerHTML = calendarBody("top") + calendar + calendarBody("bottom");
        }
        else {
            calendar = calHeader() + calStyle() + calTitle(d) + calBody(d, dd) + calFooter() + "</body>";
            //       calDiv.innerHTML=calendarBody("top") + calendarBody("bottom");
            if ($('calIFrame') != null)
            {
                if (isIE || isOpera6) {
                    //	alert(document.frames('calIFrame').document.body.innerHTML);
                    document.frames('calIFrame').document.open();
                    document.frames('calIFrame').document.write(calendar);
                    document.frames('calIFrame').document.close();
                }
                else {
                    $('calIFrame').contentDocument.open();
                    $('calIFrame').contentDocument.write(calendar);
                    $('calIFrame').contentDocument.close();
                }
                calDiv.style.width = calWidth;
                calDiv.style.height = calHeight;
                $('calIFrame').style.height = calHeight;
                $('calIFrame').style.width = calWidth;
            }
        }

    }
    else {
        calendar = calHeader() + calStyle() + calTitle(d) + calBody(d, dd) + calFooter() + "</body>";
        calWin.document.open();
        calWin.document.write(calendar);
        calWin.document.close();
    }
}

function markClick(e) {
    var ev = window.event ? window.event : e;
    if ($("CalendarLayer") != null) hideCal();
    CreateCalendarDiv(ev);
    winX = ev.screenX;
    winY = ev.screenY;
    stopEvent(e);
    return true;
}

function showCal(name, fieldPrefix, e) {
    var ev = window.event ? window.event : e;

    if (!fieldPrefix) fieldPrefix = "";
    name = fieldPrefix + "calendar(" + name + ")";
    var lastCal = currentCal;
    var d = new Date(), hasCal = false;

    currentCal = findCalendar(name);
    if ($("CalendarLayer") != null) {
        hideCal();
        if (lastCal != null && lastCal.name == name) return;
    }

    markClick(ev);
    // alert(lastCal+"->"+currentCal.name+"\n"+ currentCal.form+" ["+currentCal.form.name+"]\n"+currentCal.field);

    if (currentCal != null && currentCal.form != null && currentCal.getFieldObj(currentCal.field)) {
        var calRE = getFormat();

        var calFieldObj = currentCal.getFieldObj(currentCal.field);
        var calDataFieldObj = currentCal.getFieldObj(currentCal.dataField);

        if (calFieldObj.value != "" && calRE.test(calFieldObj.value)) {
            var cd = getDateNumbers(calFieldObj, currentCal);
            d = new Date(cd[0], cd[1], cd[2]);
            cY = cd[0];
            cM = cd[1];
            dd = cd[2];
        }
        else if (calDataFieldObj.value != "") {
            d = new Date();
            d.setTime(calDataFieldObj.value);
            cY = d.getFullYear();
            cM = d.getMonth();
            dd = d.getDate();
        }
        else {
            cY = d.getFullYear();
            cM = d.getMonth();
            dd = d.getDate();
        }

        var calendar;
        var calDiv = $("CalendarLayer");
        if (calDiv != null) {

            if (calendarContainer == 0) {
                calendar = calStyle() + calTitle(d) + calBody(d, dd) + calFooter();
                calDiv.innerHTML = calendarBody("top") + calendar + calendarBody("bottom");
                calDiv.style.width = calWidth + "px";
                calDiv.style.height = calHeight + "px";
                calDiv.style.display = "";
            } else {
                calendar = calHeader() + calStyle() + calTitle(d) + calBody(d, dd) + calFooter() + "</body>";
                calDiv.innerHTML = calendarBody("top") + calendarBody("bottom");
                if ($('calIFrame') != null) {
                    if (isIE || isOpera6) {
                        document.frames('calIFrame').document.open();
                        document.frames('calIFrame').document.write(calendar);
                        document.frames('calIFrame').document.close();
                    }
                    else {
                        $('calIFrame').contentDocument.open();
                        $('calIFrame').contentDocument.write(calendar);
                        $('calIFrame').contentDocument.close();
                    }
                    calDiv.style.width = calWidth + "px";
                    calDiv.style.height = calHeight + "px";
                    $('calIFrame').style.height = calHeight + "px";
                    $('calIFrame').style.width = calWidth + "px";
                    calDiv.style.display = "";
                }
                if (
                        ((winX + calWidth) > document.body.clientWidth) ||
                                ((winY + calHeight) > document.body.clientHeight)
                        )  resizeParent();
            }

        } else {
            calendar = calHeader() + calStyle() + calTitle(d) + calBody(d, dd) + calFooter() + "</body>";

            if (calWin != null && !calWin.closed) {
                hasCal = true;
                calWin.moveTo(winX + calOffsetX, winY + calOffsetY);
            }

            if (!hasCal) {
                if (isIE || isOpera6) {
                    calWin = window.open("", "cal", "toolbar=0,width=" + calWidth + ",height=" + calHeight + ",left=" + (winX + calOffsetX) + ",top=" + (winY + calOffsetY));
                }
                else {
                    calWin = window.open("", "cal", "toolbar=0,width=" + calWidth + ",height=" + calHeight + ",screenx=" + (winX + calOffsetX) + ",screeny=" + (winY + calOffsetY));
                }
            }

            calWin.document.open();
            calWin.document.write(calendar);
            calWin.document.close();

            calWin.focus();
        }

    }
    else {
        if (currentCal == null) {
            window.status = "Calendar [" + name + "] not found.";
        }
        else if (!currentCal.form) {
            window.status = "Form [" + currentCal.formName + "] not found.";
        }
        else if (!currentCal.getFieldObj(currentCal.field)) {
            window.status = "Form Field [" + currentCal.formName + "." + currentCal.field + "] not found.";
        }

        if (lastCal != null) {
            currentCal = lastCal;
        }
    }
}

function get2Digits(n) {
    return ((n < 10) ? "0" : "") + n;
}

function clearDate() {
	var obj = currentCal.getFieldObj(currentCal.field);
    obj.value = "";	
	findHidden(obj.form, 0, obj).value = '';
    hideCal();
}

function findFormbyFieldName(fname) {
    var frm = null;
    var frmLen = document.forms.length;
    for (var i = 0; i < frmLen; i++) {
        if (document.forms[i].elements[fname] != null) {
            frm = document.forms[i];
            break;
        }
    }
    return frm;
}

function clearDateField(fld, fieldPrefix) {
    if (fld == null) {
        return;
    }
    if (!fieldPrefix) fieldPrefix = "";
    var name = fieldPrefix + "calendar(" + fld + ")";
    currentCal = findCalendar(name);
    if (!currentCal || !currentCal.form) return;

    var f = currentCal.getFieldObj(currentCal.field);
    if (f) {
        f.value = "";
        if (f.onchange != null) {
            f.onchange();
        }
    }
    f = currentCal.getFieldObj(currentCal.dataField);
    if (f) f.value = "";
    f = currentCal.getFieldObj(currentCal.hhField);
    if (f) f.value = "";
    f = currentCal.getFieldObj(currentCal.mmField);
    if (f) f.value = "";
    f = currentCal.getFieldObj(currentCal.ssField);
    if (f) f.value = "";

    /*  frm = findFormbyFieldName('data(' + fld + ')');
     if (frm == null) {
     frm = findFormbyFieldName('value(' + fld + ')');
     }
     if (frm == null) {
     return;
     }
     if (frm.elements["value(" + fld + ")"] != null) frm.elements["value(" + fld + ")"].value = "";
     if (frm.elements["data(" + fld + ")"] != null) frm.elements["data(" + fld + ")"].value = "";
     if (frm.elements["date(" + fld + ")"] != null) frm.elements["date(" + fld + ")"].value = "";
     if (frm.elements["hh(" + fld + ")"] != null) frm.elements["hh(" + fld + ")"].value = "";
     if (frm.elements["mm(" + fld + ")"] != null) frm.elements["mm(" + fld + ")"].value = "";
     if (frm.elements["ss(" + fld + ")"] != null) frm.elements["ss(" + fld + ")"].value = "";
     */
}

function pickDate(d) {
    //  alert("cY="+cY+"\ncM="+cM+"\nd="+d);
    hideCal();
    window.focus();
    var date = calFormat;
    date = date.replace(/yyyy/i, cY);
    date = date.replace(/mm/i, get2Digits(cM + 1));
    date = date.replace(/MON/, yxMonths[cM].substring(0, 3).toUpperCase());
    date = date.replace(/Mon/i, yxMonths[cM].substring(0, 3));
    date = date.replace(/dd/i, get2Digits(d));
    date = date.replace(/DAY/, getDayName(cY, cM, d).toUpperCase());
    date = date.replace(/day/i, getDayName(cY, cM, d));

    var calFieldObj = currentCal.getFieldObj(currentCal.field);
    var calDataFieldObj = currentCal.getFieldObj(currentCal.dataField);

    calFieldObj.value = date;
    calFieldObj.blur();
    if (calDataFieldObj.onchange != null) {
        calDataFieldObj.onchange();
    }
    else {
        calFieldObj.focus();
        // IE5/Mac needs focus to show the value, weird.
        calFieldObj.focus();
    }
    //for formSave
    if (self.setChanged) {
        setChanged();
    }
}
// ------

// user functions
function checkDate(name) {
    var thisCal = findCalendar(name);

    if (thisCal != null && thisCal.form != null && thisCal.getFieldObj(thisCal.field)) {
        var calRE = getFormat();

        if (calRE.test(thisCal.getFieldObj(thisCal.field).value)) {
            return 0;
        }
        else {
            return 1;
        }
    }
    else {
        return 2;
    }
}

function getCurrentDate() {
    var date = calFormat, d = new Date();
    date = date.replace(/yyyy/i, d.getFullYear());
    date = date.replace(/mm/i, get2Digits(d.getMonth() + 1));
    date = date.replace(/dd/i, get2Digits(d.getDate()));

    return date;
}

function compareDates(date1, date2) {
    var calRE = getFormat();
    var d1, d2;

    if (calRE.test(date1)) {
        d1 = getNumbers(date1);
    }
    else {
        d1 = getNumbers(getCurrentDate());
    }

    if (calRE.test(date2)) {
        d2 = getNumbers(date2);
    }
    else {
        d2 = getNumbers(getCurrentDate());
    }

    var dStr1 = d1[0] + "" + d1[1] + "" + d1[2];
    var dStr2 = d2[0] + "" + d2[1] + "" + d2[2];

    if (dStr1 == dStr2) {
        return 0;
    }
    else if (dStr1 > dStr2) {
        return 1;
    }
    else {
        return -1;
    }
}

function getNumbers(date) {
    var calRE = getFormat();
    var y, m, d;

    if (calRE.test(date)) {
        var yIdx = calFormat.search(/yyyy/i);
        var mIdx = calFormat.search(/mm/i);
        var m3Idx = calFormat.search(/mon/i);
        var dIdx = calFormat.search(/dd/i);

        y = date.substring(yIdx, yIdx + 4);
        if (mIdx != -1) {
            m = date.substring(mIdx, mIdx + 2);
        }
        else {
            var mm = getMonthFromName(date.substring(m3Idx, m3Idx + 3)) + 1;
            m = (mm < 10) ? ("0" + mm) : ("" + mm);
        }
        d = date.substring(dIdx, dIdx + 2);

        return new Array(y, m, d);
    }
    else {
        return new Array("", "", "");
    }
}
function getFormatedDate(milliseconds, viewtype) {
    var date = calFormat;
    var d = new Date();
    if (milliseconds) {
        d.setTime(milliseconds);
    }
    //alert("GET DATE\nviewtype="+viewtype+"\ntimestamp="+milliseconds+"\nGMT= "+get2Digits(d.getUTCDate())+"."+get2Digits(d.getUTCMonth()+1)+"."+d.getUTCFullYear()+"  "+d.getUTCHours()+":"+d.getUTCMinutes()+"\n local= "+get2Digits(d.getDate())+"."+get2Digits(d.getMonth()+1)+"."+d.getFullYear()+"  "+d.getHours()+":"+d.getMinutes());

    /*if (viewtype == "date"){
     var year=d.getUTCFullYear();
     var month=d.getUTCMonth();
     var day=d.getUTCDate();
     } else {*/
    var year = d.getFullYear();
    var month = d.getMonth();
    var day = d.getDate();
    //}

    date = date.replace(/yyyy/i, year);
    date = date.replace(/mm/i, get2Digits(month + 1));
    date = date.replace(/MON/, yxMonths[month].substring(0, 3).toUpperCase());
    date = date.replace(/Mon/i, yxMonths[month].substring(0, 3));

    date = date.replace(/dd/i, get2Digits(day));
    date = date.replace(/DAY/, getDayName(year, month, day).toUpperCase());
    date = date.replace(/day/i, getDayName(year, month, day));
    return date;
}
function collectEvent(obj) {
    var s = "";
    if (!obj) return s;
    if (!obj.getAttribute) return s;
    var func = obj.getAttribute("onblur");
    if (func != null) {
        func += " ";
        if (window.attachEvent) {
            s = func.substring(func.indexOf("{") + 1, func.indexOf("}") - 1);
        }
        else {
            s = func;
        }
    }
    return s;
}

function bindOnblurEvent(obj, handler) {
    if (!obj) return;
    if (obj.addEventListener) obj.onblur = function(event) {
        eval(handler);
    };
    else obj.onblur = new Function(handler);
}

function addCalendarConvertEvent(currentCal) {
    var str = "calendarConvert('" + currentCal.name + "')";
    var obj;
    var s;
    obj = currentCal.getFieldObj(currentCal.field);
    if (obj) {
        s = str + ";" + collectEvent(obj);
        bindOnblurEvent(obj, s);
        if (obj.addEventListener) obj.addEventListener("keyup", checkHitEnter, false);
        else if (obj.attachEvent) obj.attachEvent("onkeyup", checkHitEnter);
    }
    obj = currentCal.getFieldObj(currentCal.hhField);
    if (obj) {
        s = str + ";" + collectEvent(obj);
        bindOnblurEvent(obj, s);
    }
    obj = currentCal.getFieldObj(currentCal.mmField);
    if (obj) {
        s = str + ";" + collectEvent(obj);
        bindOnblurEvent(obj, s);
    }
    obj = currentCal.getFieldObj(currentCal.ssField);
    if (obj) {
        s = str + ";" + collectEvent(obj);
        bindOnblurEvent(obj, s);
    }
}

function calendarConvert(name) {
    var currentCal = findCalendar(name);
    if (!currentCal) {
        alert(errMess.replace(/\{1\}/,name));
        return false;
    }
    var calRE = getFormat();
    var viewtype = currentCal.viewType;
    var hhFieldObj = currentCal.getFieldObj(currentCal.hhField);
    var mmFieldObj = currentCal.getFieldObj(currentCal.mmField);
    var ssFieldObj = currentCal.getFieldObj(currentCal.ssField);

    var hasHours = hhFieldObj && hhFieldObj.value != "";
    var hasMinutes = mmFieldObj && mmFieldObj.value != "";
    var hasSeconds = ssFieldObj && ssFieldObj.value != "";

    var d = null;
    var calFieldObj = currentCal.getFieldObj(currentCal.field);
    var calDataFieldObj = currentCal.getFieldObj(currentCal.dataField);

    if (calFieldObj && calFieldObj.value != "" && calRE.test(calFieldObj.value)) {
        var cd = getDateNumbers(calFieldObj, currentCal);
        if (calFieldObj.value == calFieldObj.getAttribute("mask")) {
            alert(currentCal.message);
            return false;
        }
        d = new Date(cd[0], cd[1], cd[2]);
    }
    else {
        if (hasHours || hasMinutes || hasSeconds) d = new Date();
    }

    //	if (currentCal.attrName=="BirthDate")
    // alert("prepare SET DATE\n "+currentCal.form[currentCal.dataField].value+"\n d= "+d.getDate()+"."+d.getMonth()+"."+d.getFullYear()+"  "+d.getHours()+":"+d.getMinutes());

    if (d != null) {
        if (viewtype == "date") {
            d.setHours('0');
            d.setMinutes('0');
            d.setSeconds('0');
        }
        else {
            d.setHours((hasHours) ? hhFieldObj.value : '0');
            d.setMinutes((hasMinutes) ? mmFieldObj.value : '0');
            d.setSeconds((hasSeconds) ? ssFieldObj.value : '0');
        }
        if (isNaN(d)) {
            alert(currentCal.message);
            return false;
        } else {
            //				if (currentCal.attrName=="BirthDate")
            //alert(" get ready :\nviewtype="+viewtype+"\n"+currentCal.form[currentCal.dataField].value+"\n d= "+d.getDate()+"."+d.getMonth()+"."+d.getFullYear()+"  "+d.getHours()+":"+d.getMinutes());
            if (viewtype != "date") {
                calDataFieldObj.value = Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds());
                d = new Date(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds());
            }
            else {
                calDataFieldObj.value = Date.UTC(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds());
            }
            //				if (currentCal.attrName=="BirthDate")
            //alert(" this is it (send to core) :\nviewtype="+viewtype+"\n"+currentCal.form[currentCal.dataField].value+"\n d= "+d.getDate()+"."+d.getMonth()+"."+d.getFullYear()+"  "+d.getHours()+":"+d.getMinutes());
            if (calDataFieldObj.onchange != null) calDataFieldObj.onchange();
            return true;
        }
    } else {
        // clear milliseconds time
        if (calDataFieldObj) {
            calDataFieldObj.value = "";
        }
        return true;
    }
}

function stopEvent(ev) {
    var e = window.event ? window.event : ev;
    //  if (!e) var e = window.event;
    e.cancelBubble = true;
    if (e.stopPropagation) e.stopPropagation();
}

function setDatetoHidden(o, n, mess, skipClean) {
    if (o == null) return;
    var f = o.form;
    if (f == null) return;

    var hid = $(n);
    if (!hid) {
        hid = f.elements[n];
    }

    if (hid == null) return;
    if (o.getAttribute("inline") && self.hideMessageContainer) hideMessageContainer(o);
    if (o.value.toLowerCase().indexOf("x") != -1 || o.value == '') {
        hid.value = "";
        if (o.value == o.getAttribute("mask") || o.value == '') {
            o.value = "";
            o.removeAttribute("error");
            return;
        }
        var maskMessage = o.getAttribute("maskMessage");
        if (!maskMessage) {
            maskMessage = mess;
        }
        if (o.getAttribute("inline") && self.getMessageContainer) {
            var messDiv = getMessageContainer(o, maskMessage, null);
            messDiv.style.display = "";
        } else {
            alert(maskMessage);
        }
        o.setAttribute("error", maskMessage);
        if (!skipClean) o.value = "";
    } else {
        o.removeAttribute("error");
    }
}

function fullfillDate(myfield) {
    var y, m, d;
    var yIdx = calFormat.search(/yyyy/i);
    var mIdx = calFormat.search(/mm/i);
    var m3Idx = calFormat.search(/mon/i);
    var dIdx = calFormat.search(/dd/i);
    var dateStr = myfield.value;
    var myDate = new Date();

    y = dateStr.substring(yIdx, yIdx + 4);
    if (y.indexOf("x") != -1) {
        var xx = y.substring(0, 2);
        if (xx == "xx") y = myDate.getFullYear();
        else {
            var num = parseInt(xx);
            if (isNaN(num)) y = myDate.getFullYear();
            else {
                if (num < 20) y = "20" + xx;
                else y = "19" + xx;
            }
        }
    }

    //  y= (y.indexOf("x") == -1) ? y : (y.substring(0,1)!="xx") ? "20"+y.substring(0,2) : myDate.getFullYear();

    if (mIdx != -1) {
        m = dateStr.substring(mIdx, mIdx + 2);
        m = (m.indexOf("x") == -1) ? m : myDate.getMonth() + 1;
    }
    else {
        m = getMonthFromName(dateStr.substring(m3Idx, m3Idx + 3));
    }

    d = dateStr.substring(dIdx, dIdx + 2);
    d = (d.indexOf("x") == -1) ? d : myDate.getDate();

    myfield.value = get2Digits((d - 0)) + "." + ((m.length > 2) ? m : get2Digits((m - 0))) + "." + y;
}

function checkHitEnter(ev) {
    var e = window.event ? window.event : ev;
    var field = window.event ? e.srcElement : e.target;
    if (e.keyCode != 13) return true;
    fullfillDate(field);
}

function setCalendarHideEvent() {
    var b = document.body;
    if (!b) return;
    if (b.addEventListener) b.addEventListener("click", markClick, false);
    if (b.attachEvent) b.attachEvent("onclick", markClick);
}

var root = window.addEventListener || window.attachEvent ? window : document.addEventListener ? document : null;
if (root) {
    if (root.addEventListener) root.addEventListener("load", setCalendarHideEvent, false);
    else if (root.attachEvent) root.attachEvent("onload", setCalendarHideEvent);
}

//var CalendarLoadFlag;
if (CalendarLoadFlag == null) {
    var CalendarLoadFlag = true;
}


/* ------------------------------ compare two date area------------------------------*/
function findHidden(form, n, obj) {
    if (form == null || form.tagName.toLowerCase() != "form") return null;
    var hid = null;
    if (obj != null) {
        var hidAttr = obj.getAttribute("hidElem");
        hid = (hidAttr != null) ? form.elements[hidAttr] : null;
        if (hid != null) return hid;
    }
    for (var i = 0; i < form.elements.length; i++) {
        if (form.elements[i].type != "hidden") {
            continue;
        }
        if (form.elements[i].name.indexOf(n) != -1) {
            hid = form.elements[i];
            break;
        }
    }
    return hid;
}

//get date in miliseconds
function getDateMS(obj, n) {
    if (obj == null) return false;
    var _date = new Date(new Number(obj.value));
    if (_date == "NaN") {
        calendarConvert('calendar(' + n + ')');
        _date = new Date(new Number(obj.value));
    }
    return _date.valueOf();
}

//compare two dates where n1,n2 - attr.name-s
//(n- "from date" && nn- "till date") OR (n- "from date" || n-"till date") && nn=null
function compareTwoDates(o, n, nn) {
    var result = true;
    if (o == null) return result;
    var form = (o.tagName && o.tagName.toLowerCase() == "form") ? o : o.form;
    if (form == null) return result;
    if (nn != null) {
        o1 = form.elements[n];
        o2 = form.elements[nn];
        if (o1 == null || o2 == null) return result;
        n1 = o1.getAttribute("name");
        n1 = n1.substring(n1.indexOf("(") + 1, n1.lastIndexOf(")"));
        n2 = o2.getAttribute("name");
        n2 = n2.substring(n2.indexOf("(") + 1, n2.lastIndexOf(")"));
        //	alert(o1.name+"["+n1+"] = "+o1.value+"\n"+o2.name+"["+n2+"] = "+o2.value);
    }
    else {
        var alias = o.getAttribute("alias");
        if (alias == null || (alias != null && trim(alias) == "")) return result;
        if (alias.lastIndexOf("_till") != -1) {
            alias1 = alias.substr(0, alias.lastIndexOf("_till")) + "_from";
            o1 = getObjectByAttr(form, "input", "alias", alias1, 1)[0];
            if (o1 == null) return result;
            n1 = o1.getAttribute("name");
            n1 = n1.substring(n1.indexOf("(") + 1, n1.lastIndexOf(")"));
            if (!n) {
                n = o.getAttribute("name");
                n = n.substring(n.indexOf("(") + 1, n.lastIndexOf(")"));
            }
            o2 = o;
            n2 = n;
        }
        else if (alias.lastIndexOf("_from") != -1) {
            alias2 = alias.substr(0, alias.lastIndexOf("_from")) + "_till";
            o2 = getObjectByAttr(form, "input", "alias", alias2, 1)[0];
            if (o2 == null) return result;
            n2 = o2.getAttribute("name");
            n2 = n2.substring(n2.indexOf("(") + 1, n2.lastIndexOf(")"));
            if (!n) {
                n = o.getAttribute("name");
                n = n.substring(n.indexOf("(") + 1, n.lastIndexOf(")"));
            }
            o1 = o;
            n1 = n;
        }
        else return result;
    }

    if (o1.value == "" || o2.value == "") {
        if (o1.style.border.indexOf("red") != -1) {
            o1.style.border = commonBorderColor;
            o1.removeAttribute("error");
        }
        if (o2.style.border.indexOf("red") != -1) o2.style.border = commonBorderColor;
        return result;
    }

    var fromDate_ms = getDateMS(findHidden(form, n1, o1), n1);
    var tillDate_ms = getDateMS(findHidden(form, n2, o2), n2);
    //	alert(fromDate_ms+"\n"+tillDate_ms+"\n"+(fromDate_ms > tillDate_ms));

    return compareDateValues(o1, fromDate_ms, tillDate_ms, null, o2);
}

// o - textfield containing compared date
//d - date in milliseconds
function compareDateWithDate(o, mess, d) {
    var result = true;
    if (o == null || !(o.tagName && o.tagName.toLowerCase() == "input")) return result;
    if (o.value == "") {
        if (o.style.border.indexOf("red") != -1) o.style.border = commonBorderColor;
        return result;
    }
    var n = o.getAttribute("name");
    n = n.substring(n.indexOf("(") + 1, n.lastIndexOf(")"));
    var _date = (d != null) ? new Date(new Number(d)) : new Date();
    if (_date == "NaN") _date = new Date();

    var fromDate_ms = getDateMS(findHidden(o.form, n, o), n);
    var tillDate_ms = _date.getTime();

    return compareDateValues(o, fromDate_ms, tillDate_ms, mess);
}

// o1,o2- textfields containing compared dates (o2 can be NULL)
// from - date in miliseconds from o1
// till - date in miliseconds from o2 or some static date(examp: current date)
// mess - alert message
function compareDateValues(o1, from, till, mess, o2) {
    if (!o1 || !o1.tagName) return true;
    if (!from || !till) return true;
    mess = (!mess || mess == "") ? mess2User  : mess;
    if (from > till) {
        o1.style.border = errBorderColor;
        if (o2 && o2.tagName) o2.style.border = errBorderColor;
        if (self.getMessageContainer && o1.getAttribute("inline")) {
            var messDiv = getMessageContainer(o1, mess, null);
            messDiv.style.display = "";
        } else {
            alert(mess);
        }
        o1.setAttribute("error", mess);
        return false;
    }
    else {
        o1.style.border = commonBorderColor;
        if (self.hideMessageContainer && o1.getAttribute("inline")) hideMessageContainer(o1);
        if (o2 && o2.tagName) o2.style.border = commonBorderColor;
        o1.removeAttribute("error");
        return true;
    }
}

//if resize() function is defined in parent(for calendar) window we do resize.
function resizeParent() {
    if (self.resize) {
        self.resize();
    }
}
