var today = new Date();
var currMonth = today.getMonth();
var currYear = today.getFullYear();
var shownCalendarId = '';
var shownCalendarBtn = null;
var currField = null;
var currHiddenField = null;
var currDate = new Date();
var monthNames = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'];
var monthNamesR = ['января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'];
var weekdayInits = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'];

function setDate(dateSet, monthSet, yearSet) {
var dateToSet = new Date(yearSet, monthSet, dateSet);
monthSet++;
monthSet = (monthSet < 10)? '0'+ monthSet: monthSet;
dateSet = (dateSet < 10)? '0'+ dateSet: dateSet;
if (currField) currField.value =yearSet+'-' +monthSet+'-'+dateSet;
hideCurrCalendar();
}

function showCalendar(btnElem, leerId, ancName, fieldName) {
var currCalBtn = shownCalendarBtn;
if (shownCalendarId != '') hideCurrCalendar();
if (currCalBtn != btnElem) {
currField = document.forms[btnElem].elements[fieldName];
if (currHiddenField && currHiddenField.value != '') currDate.setTime(currHiddenField.value);
else currDate = new Date();
shownCalendarBtn = btnElem;
shownCalendarId = leerId;
drawCalendar(leerId, ancName);
}}

function hideCurrCalendar() {
if (shownCalendarId != '') hideLeer(shownCalendarId);
if (shownCalendarBtn != null && shownCalendarBtn.style) shownCalendarBtn.style.borderStyle = 'outset';
shownCalendarId = '';
shownCalendarBtn = null;
currField = null;
}

function drawCalendar(leerId, ancName, showYear, showMonth) {
if (shownCalendarBtn != null) {
if (shownCalendarBtn.style) shownCalendarBtn.style.borderStyle = 'inset';
}
var month = new Date();
if (showMonth != null) month.setMonth(showMonth, 1);
else month.setMonth(currDate.getMonth());
if (showYear != null) month.setYear(showYear);
else month.setYear(currDate.getFullYear());
var thisMonth = month.getMonth();
var nextMonth = (thisMonth == 11)? 0 : thisMonth + 1;
var prevMonth = (thisMonth == 0)? 11 : thisMonth - 1;
var thisYear = month.getFullYear();
var nextYear = (thisMonth == 11)? thisYear + 1 : thisYear;
var prevYear = (thisMonth == 0)? thisYear - 1 : thisYear;
var isThisMonth = (month.getFullYear() == currDate.getFullYear() && month.getMonth() == currDate.getMonth())? true : false;
var calendarHTML = '<table width=130 cellpadding=1 cellspacing=0 border=1><tr bgcolor=#E7E7E7><td><table width=100% cellpadding=1 cellspacing=0 border=0><tr>';
calendarHTML += '<td class="subtitle"><a href="" onClick="drawCalendar(\'' + leerId + '\', \'' + ancName + '\', ' + prevYear + ', ' + prevMonth + '); return false;">&lt;</a></td>';
calendarHTML += '<td align=center nowrap class="subtitle">' + monthNames[month.getMonth()] + ', ' + month.getFullYear() + '</td>';
calendarHTML += '<td align=right class="subtitle"><a href="" onClick="drawCalendar(\'' + leerId + '\', \'' + ancName + '\', ' + nextYear + ', ' + nextMonth + '); return false;">&gt;</a></td></tr>' +
'<tr><td colspan=3 align=center bgcolor=#FFFFFF style="border-top: 1px solid #E7E7E7;">';
calendarHTML += '<table cellpadding=1 cellspacing=0 border=0><tr align=right >'
for (var i = 0; i < weekdayInits.length; i++) calendarHTML += '<td class="subtitle" style="border-bottom: 1px solid #E7E7E7;">' + weekdayInits[i] + '</td>'
calendarHTML += '<tr align=right>'
month.setDate(1);
var daysToStart = (month.getDay() == 0)? 7 : month.getDay();
for (var i = 0; i < daysToStart - 1; i++) calendarHTML += '<td><br></td>';
for (var i = 1; i < 33; i++) {
month.setDate(i);
if (month.getMonth() == thisMonth) {
if (isThisMonth && currDate.getDate() == i) calendarHTML += '<td><a href="" onClick="setDate(' + i + ', ' + thisMonth + ', ' + thisYear + '); return false;"><b>' + i + '</b></a></td>';
else calendarHTML += '<td><a href="" onClick="setDate(' + i + ', ' + thisMonth + ', ' + thisYear + '); return false;">' + i + '</a></td>';
} else break;
if (month.getDay() == 0) calendarHTML += '</tr><tr align=right>';
}
if (month.getDay() != 1) {
var finalDay = (month.getDay() == 0)? 7 : month.getDay();
var daysToEnd = 8 - finalDay;
for (var i = 0; i < daysToEnd; i++) calendarHTML += '<td><br></td>';
}
calendarHTML += '</tr></table></td></tr></table></td></tr></table>';
var leerPos = new getCalendarPosition(ancName);
if (document.getElementById) {
var leerElem = document.getElementById(leerId);
leerElem.innerHTML = calendarHTML;
leerElem.style.left = leerPos.x;
leerElem.style.top = leerPos.y;
leerElem.style.visibility = 'visible';
} else if (document.all) {
var leerElem = document.all[leerId];
leerElem.innerHTML = calendarHTML;
leerElem.style.left = leerPos.x;
leerElem.style.top = leerPos.y;
leerElem.style.visibility = 'visible';
} else if (document.layers) {
document.layers[leerId].left = leerPos.x;
document.layers[leerId].top = leerPos.y;
document.layers[leerId].document.open();
document.layers[leerId].document.write(calendarHTML);
document.layers[leerId].document.close();
document.layers[leerId].visibility = 'show';
}}

function hideLeer(leerId) {
if (document.layers) {
document.layers[leerId].visibility = 'hide';
} else if (document.getElementById) {
document.getElementById(leerId).style.visibility = 'hidden';
} else if (document.all) {
document.all[leerId].style.visibility = 'hidden';
}}

function ancPosX(anchorPtr) {
if (document.layers) {
return anchorPtr.x;
} else if (document.getElementById || document.all) {
var pos = anchorPtr.offsetLeft;
while (anchorPtr.offsetParent != null) {
anchorPtr = anchorPtr.offsetParent;
pos += anchorPtr.offsetLeft;
}
return pos;
}}

function ancPosY(anchorPtr) {
if (document.layers) {
return anchorPtr.y;
} else if (document.getElementById || document.all) {
var pos = anchorPtr.offsetTop;
while (anchorPtr.offsetParent != null) {
anchorPtr = anchorPtr.offsetParent;
pos += anchorPtr.offsetTop;
}
return pos;
}}

function getCalendarPosition(ancName) {
anc = document.getElementById(ancName);
this.x = ancPosX(anc);
this.y = ancPosY(anc) + 20;
return this;
}

function isParent(elemPtr, parentId) {
if (document.getElementById) {
}
return false;
}
if (document.layers) {
origWidth = window.innerWidth;
origHeight = window.innerHeight;
}

function resizing() {
if (document.layers) {
if (window.innerWidth != origWidth || window.innerHeight != origHeight) location.reload();
} else hideCurrCalendar();
}
