var tadp_gNow = new Date();
var tadp_ggWinCal;
Calendar.Months = ["Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu","Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu"];
Calendar.DOMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
Calendar.lDOMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var tadp_minDay_1;
var tadp_minMonth_1
var tadp_minYear_1;
var tadp_maxDay_1;
var tadp_maxMonth_1;
var tadp_maxYear_1;
var returnItem1;
var returnItem2;
var tadp_earliest; // whether to control tadp_earliest or latest day

function Calendar(p_item_my, p_item_d, p_WinCal, p_month, p_year) {
	if ((p_month == null) && (p_year == null))	return;

	if (p_WinCal == null)
		this.gWinCal = tadp_ggWinCal;
	else
		this.gWinCal = p_WinCal;

	if (p_month == null) {
		this.gMonthName = null;
		this.gMonth = null;
	} else {
		this.gMonthName = Calendar.Months[p_month];
		this.gMonth = new Number(p_month);
	}
	this.gYear = p_year;
	tadp_gNow.setDate(ta_1st_search_day+1);
	tadp_minDay_1 = tadp_gNow.getDate();
	tadp_minMonth_1 = tadp_gNow.getMonth();
	tadp_minYear_1 = tadp_gNow.getFullYear();
	this.gReturnItem1 = parseDocumentText(p_item_my);
	returnItem1 = this.gReturnItem1;
	this.gReturnItem2 = parseDocumentText(p_item_d);  //this is the box for day.
	returnItem2 = this.gReturnItem2;
}

function parseDocumentText(documentText) {
	var separator = documentText.indexOf(".")+1;
	var parsedText = documentText.substring(0, separator-1);
	if(parsedText == "document")
		documentText =  documentText.substring(separator, documentText.length);
	return documentText;
}

function parseMonth(myText) {
	var separator = myText.indexOf(" ");
	return myText.substring(0, separator);
}

function getMonthNo(monthText) {
	for(i=0; i<Calendar.Months.length; i++) {
		if(monthText == Calendar.Months[i])
			return i;
	}
	return 0; // error, select first month
}

function parseYear(myText) {
	var separator = myText.indexOf(" ");
	return myText.substring(separator + 1, myText.length);
}

//map different functions -> important for Netscape / Mozilla use.
Calendar.get_daysofmonth = Calendar_get_daysofmonth;
Calendar.print = Calendar_print;

function Calendar_get_daysofmonth(monthNo, p_year) {
	/*
	1.Years that can be evenly divided by four are normally leap years, but
	2.Years that can be evenly divided by 100 are not leap years, but
	3.Years alsby 400 are leap years.
	*/
	if (p_year % 4 == 0 && (p_year % 100 != 0 || p_year % 400 == 0))
		return Calendar.lDOMonth[monthNo];
	else
		return Calendar.DOMonth[monthNo];
}

function Calendar_print() {
	tadp_ggWinCal.print();
}
// This is for compatibility with Navigator 3, (if required)
// need to create and discard one object before the prototype object exists.
new Calendar();

Calendar.prototype.show = function() {
	this.gWinCal.document.open();

	// html head
	this.wwrite('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');
	this.wwrite('<html><head><title>Kalenteri</title>');
	this.wwrite('<link href="/tripsearch/' + nresources + 'css/kalenteri_layer.css" rel="stylesheet" type="text/css" />');
	this.wwrite('</head>');

	// body
	this.wwrite('<body>');
	this.wwrite('<div class="Layer-top-bg-small"></div>');
	this.wwrite('<br style="clear: both; font-size: 4px;" />');
	this.wwrite('<div class="Layer-bg-small">');
	this.wwrite('<table width="90%"  border="0" cellpadding="2" cellspacing="0" class="calendar-tb">');

	// month select
	this.wwrite('<tr><td colspan="7">');
	this.wwrite('<select name="select" id="select" class="inputfield" onchange="self.opener.Build(' + "'" + returnItem1 + "','" + returnItem2 + "',this.options[this.selectedIndex].text);" + '">');
	var month = tadp_gNow.getMonth();
	var year = tadp_gNow.getFullYear();
	while(year < tadp_maxYear_1 || (month <= tadp_maxMonth_1 && year <= tadp_maxYear_1)) {
		var monthYear = Calendar.Months[month] + ' ' + year;
		var selected = (month == this.gMonth && year == this.gYear ? ' selected="selected"' : '' );
		this.wwrite('<option' + selected + ' value="' + monthYear + '">' + monthYear + '</option>');
		if(month == 11) {
			year++;
			month = 0;
		} else {
			month++;
		}
	}
	this.wwrite('</select></td></tr>');

	// table header
	this.wwrite('<tr><td bgcolor="#FFFFFF">MA</td><td bgcolor="#FFFFFF">TI</td><td bgcolor="#FFFFFF">KE</td><td bgcolor="#FFFFFF">TO</td><td bgcolor="#FFFFFF">PE</td><td bgcolor="#FFFFFF">LA</td><td bgcolor="#FFFFFF">SU</td></tr>');

	var vDate = new Date();
	vDate.setFullYear(this.gYear, this.gMonth, 1);
	var isMaxMonth = (this.gYear == tadp_maxYear_1 && this.gMonth == tadp_maxMonth_1);
	var isMinMonth = (this.gYear == tadp_minYear_1 && this.gMonth == tadp_minMonth_1);
	var thisMonthsMaxDay = isMaxMonth ? tadp_maxDay_1 : 31; // don't care about mounths actual max days here
	var thisMonthsMinDay = isMinMonth ? tadp_minDay_1 : 0;

	var vFirstDay=vDate.getDay();
	// translate from sun - sat to mon - sun
	vFirstDay = ((vFirstDay + 6) % 7)
	var vDay = 1 - vFirstDay; // start from first monday
	var vLastDay=Calendar.get_daysofmonth(this.gMonth, this.gYear);
	var vSetMethod = tadp_earliest ? "ta_setEarly" : "ta_setLatest";

	// Write the weeks
	for (k=1; k<7; k++) {
		if(vDay > vLastDay)
			break;
		this.wwrite('<tr>');
		for (i=0; i<7; i++) {
			if(vDay > vLastDay || vDay < 1) {
				this.wwrite('<td' + this.get_day_class(i) + '>&nbsp;</td>');
			} else if(vDay > thisMonthsMaxDay || vDay < thisMonthsMinDay) {
				this.wwrite('<td' + this.get_day_class(i) + '>' + vDay + '</td>');
			} else {
				this.wwrite('<td' + this.get_day_class(i) + '><a href="#" ' +
							'onclick="self.opener.'+vSetMethod+'(self.opener.document.' + returnItem2 + ',self.opener.document.' + returnItem1 + ",'" + this.format_data_year_month_day(this.gYear, this.gMonth, vDay) + "');" +
							'window.close();\">' + vDay + '</a></td>');
			}
			vDay=vDay + 1;
		}
		this.wwrite('</tr>');
	}

	// close button
	this.wwrite('<tr><td colspan="7" align="right">');
	this.wwrite('<input name="Submit2" type="submit" class="nappi" onclick="window.close();" value="Sulje" />');
	this.wwrite('</td></tr>');

	// footer
	this.wwrite('</table></div>');
	this.wwrite('<div class="layer-bottom-small"></div>');
	this.wwrite('</body></html>');
	this.gWinCal.document.close();
	this.gWinCal.focus();
}

//write line
Calendar.prototype.wwrite = function(wtext) {
	this.gWinCal.document.writeln(wtext);
}
//just write the text
Calendar.prototype.wwriteA = function(wtext) {
	this.gWinCal.document.write(wtext);
}

Calendar.prototype.get_day_class = function(vday) {
	if(vday == 5 || vday == 6) {
		return ' class="weekend"';
	} else {
		return '';
	}
}

Calendar.prototype.format_data_year_month_day = function(year, month, day) {
	month++;
	var vMonth = (month < 10) ? "0" + month : month;
	var vDD = (day < 10) ? "0" + day: day;
	var vY4 = new String(year);
	return vY4 + vMonth + vDD;
}

function Build(p_item_my, p_item_d, p_monthyear) {
	var p_month = getMonthNo(parseMonth(p_monthyear));
	var p_year = parseYear(p_monthyear);
	gCal = new Calendar(p_item_my, p_item_d, tadp_ggWinCal, p_month, p_year);
	gCal.show();
}

function show_calendar() {
	p_item_d = arguments[0];
	p_item_my = arguments[1];
	if (arguments[2] != null)
		p_day = parseInt(arguments[2]);
	if (arguments[3] != null)
		p_monthYearIndex = parseInt(arguments[3]);
	if (arguments[4] != null)
		tadp_minDay_1 = parseInt(arguments[4]);
	if (arguments[5] != null)
		tadp_maxDay_1 = parseInt(arguments[5]);
	if (arguments[6] != null)
		tadp_maxMonth_1 = parseInt(arguments[6]);
	if (arguments[7] != null)
		tadp_maxYear_1 = parseInt(arguments[7]);
	if (arguments[8] != null && arguments[8] == 'tadp_earliest') {
		tadp_earliest = true;
	} else {
		tadp_earliest = false;
	}

	var monthyear = ta_m_name[p_monthYearIndex];

	var width = 200;
	var height = 220;
    var x = 100;
    var y = 125;
    var xmod = width / 2;
    var ymod = height / 2;
    if(arguments[9] != null) {
        var event = arguments[9];
        x = event.screenX - xmod;
        y = event.screenY - ymod;
        if(x < 0)
            x = 0;
        if(y < 0)
            y = 0;
        var maxW = screen.availWidth;
        var maxH = screen.availHeight;
        if(!maxW) {
            var overScreenX = screen.availWidth - (x + xmod);
            if(overScreenX > 0)
                x =  x - overScreenX;
            var overScreenY = screen.availHeight - (y + ymod);
            if(overScreenY > 0)
                y =  y - overScreenY;
        }
    }
	vWinCal = window.open("", "Calendar", "width=" + width + ",height=" + height + ",status=no,resizable=no,top=" + y + ",left=" + x);
	vWinCal.opener = self;
	tadp_ggWinCal = vWinCal;
	Build(p_item_my, p_item_d, monthyear);
}