var targetDate = new Date();
var calName;
var formName;

function setCalendar(f, name) {
	var el, tableEl, rowEl, cellEl, linkEl;
	var tmpDate;
	var i, j;

	if (f == null) { f=1; }

	el = document.getElementById("calendarHeader_" + name);
	el.innerHTML = targetDate.getMonthName() + " " + targetDate.getFullYear();

	tmpDate = new Date(Date.parse(targetDate));
	tmpDate.setDate(1);

	while (tmpDate.getDay() != 1) {
		tmpDate.addDays(-1);
	}

	tableEl = document.getElementById('calendar_' + name);

	for (i = 0; i <= 5; i++) {
		rowEl = tableEl.rows[i];

		for (j = 0; j < rowEl.cells.length; j++) {
			cellEl = rowEl.cells[j];
			linkEl = cellEl.firstChild;

			if (tmpDate.getMonth() == targetDate.getMonth()) {
				var ind = tmpDate.getDate() + '-' + (tmpDate.getMonth() + 1) + '-' + tmpDate.getFullYear();

				if (dates.indexOf(ind)>-1) {
					linkEl.date = new Date(Date.parse(tmpDate));
					linkEl.className = 'notlnk2';
				} else {
					linkEl.className = 'notlnk1';
				}

				linkEl.firstChild.nodeValue = tmpDate.getDate();
				linkEl.style.visibility = '';
			} else {
				linkEl.style.visibility = 'hidden';
			}

			tmpDate.addDays(1);
		}
	}
}

function addMonths(n, name) {
	targetDate.addMonths(n);
	setCalendar(0, name);
}

function addYears(n) {
	targetDate.addYears(n);
	setCalendar(0);
}

function setTargetDate(link) {
	if (link.date != null) {
		targetDate = new Date(Date.parse(link.date));
		setCalendar(1, this.formName);

		mm = String(targetDate.getMonth() + 1);
		dd = String(targetDate.getDate());
		yy = String(targetDate.getFullYear());

		if (dd.length == 1) dd = '0' + dd;
		if (mm.length == 1) mm = '0' + mm;

		if (this.formName != null && this.formName != ''){
			document.getElementById('date').value = dd + '/' + mm + '/' + yy;
		}

		hidecalendar();
	}
}

function displayDate() {
	var gsss;

	gsss = formatDate(targetDate);
	asss = gsss.split("/");

	window.opener.document.mainform.month.value = Math.abs(asss[0]);
	window.opener.document.mainform.date.value = Math.abs(asss[1]);
	window.opener.document.mainform.year.value = Math.abs(asss[2]);
}

function formatDate() {
	var mm, dd, yyyy;
	mm = String(targetDate.getMonth() + 1);

	while (mm.length < 2)
		mm = "0" + mm;
	dd = String(targetDate.getDate());

	while (dd.length < 2)
	dd = "0" + dd;

	yyyy = String(targetDate.getFullYear());

	while (yyyy.length < 4)
		yyyy = "0" + yyyy;

	return mm + "/" + dd + "/" + yyyy;
}

Date.prototype.savedDate  = null;
Date.prototype.getMonthName = dateGetMonthName;
Date.prototype.getDays      = dateGetDays;
Date.prototype.addDays      = dateAddDays;
Date.prototype.addMonths    = dateAddMonths;
Date.prototype.addYears     = dateAddYears;

function dateGetMonthName() {
	return this.monthNames[this.getMonth()];
}

function dateGetDays() {
	var tmpDate, d, m;

	tmpDate = new Date(Date.parse(this));
	m = tmpDate.getMonth();
	d = 28;
	do {
		d++;
		tmpDate.setDate(d);
	} while (tmpDate.getMonth() == m);

	return d - 1;
}

function dateAddDays(n) {
	this.setDate(this.getDate() + n);
	this.savedDate = this.getDate();
}

function dateAddMonths(n) {
	if (this.savedDate == null)
		this.savedDate = this.getDate();

	this.setDate(1);
	this.setMonth(this.getMonth() + n);
	this.setDate(Math.min(this.savedDate, this.getDays()));
}

function dateAddYears(n) {
	if (this.savedDate == null)
		this.savedDate = this.getDate();

	this.setDate(1);
	this.setFullYear(this.getFullYear() + n);
	this.setDate(Math.min(this.savedDate, this.getDays()));
}

function showcalendar() {
	var elem = $('calendar');
	var list = $('list_dates');

	this.formName = 'date';

	if (elem.getStyle('display')=='block') {
		elem.setStyle('display', 'none');
		list.removeClass('open2');
	} else {
		var c = list.getCoordinates();
		var top = c.top + c.height;
		var left = c.left + c.width - 209;

		elem.setStyles({
			'top': top,
			'left': left,
			'display': 'block'
		});

		list.addClass('open2');
	}
}

function hidecalendar() {
	var elem = $('calendar');
	elem.setStyle('display', 'none');
	formsubmit();
}
