//which days in the line (0-6) are weekend:
var tadp_weekend = [5,6];
//background color for weekend:
if(ta_brand == 5) {
	var tadp_weekendColor = "#E2F6FE";
} else if(ta_brand == 18) {
	var tadp_weekendColor = "#f5f5f5";
} else {
	var tadp_weekendColor = "#FFFFCC";
}

var tadp_gNow = new Date();
var tadp_ggWinCal;
Calendar.Months = ["Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kes&auml;kuu","Hein&auml;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_minYear_1;
var tadp_minMonth_1
var tadp_maxMonth_1;
var tadp_maxDay_1;
var tadp_maxYear_1;
var returnItem1;
var returnItem2;
var tadp_maxYear_1;
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, p_format) {
	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;
		this.gYearly = true;
	} else {
		this.gMonthName = Calendar.get_month(p_month);
		this.gMonth = new Number(p_month);
		this.gYearly = false;
	}
	this.gYear = p_year;
	this.gFormat = p_format;
	tadp_gNow.setDate(ta_1st_search_day+1);
	tadp_minDay_1 = tadp_gNow.getDate();
	tadp_minYear_1 = tadp_gNow.getFullYear();
	tadp_minMonth_1 = tadp_gNow.getMonth();
	this.gBGColor = "white";
	this.gFGColor = "black";
	this.gTextColor = "black";
    if(ta_brand == 5) {
		this.gHeaderColor = "#00AEF5";
    } else if(ta_brand == 18) {
		this.gHeaderColor = "#cc0000";
    } else {
		this.gHeaderColor = "#FF6600";
    }
	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) {
    monthNo=0;
    for(i=0; i<Calendar.Months.length; i++) {
        if(monthText == Calendar.Months[i])
            monthNo = i;
    }
    return monthNo;
}

function parseYear(myText) {
    var separator = myText.indexOf(" ");
    return myText.substring(separator, myText.length);
}

//map different functions -> important for Netscape / Mozilla use.
Calendar.get_month = Calendar_get_month;
Calendar.get_daysofmonth = Calendar_get_daysofmonth;
Calendar.calc_month_year = Calendar_calc_month_year;
Calendar.print = Calendar_print;

function Calendar_get_month(monthNo) {
	return Calendar.Months[monthNo];
}

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) {
		if ((p_year % 100) == 0 && (p_year % 400) != 0)
			return Calendar.DOMonth[monthNo];

		return Calendar.lDOMonth[monthNo];
	} else
		return Calendar.DOMonth[monthNo];
}

function Calendar_calc_month_year(p_Month, p_Year, incr) {

	var ret_arr = new Array();

	if (incr == -1) {
		// when moving backwards
		if (p_Month == 0) {
			ret_arr[0] = 11;
			ret_arr[1] = parseInt(p_Year) - 1;
		}
		else {
			ret_arr[0] = parseInt(p_Month) - 1;
			ret_arr[1] = parseInt(p_Year);
		}
	} else if (incr == 1) {
		// when moving forward
		if (p_Month == 11) {
			ret_arr[0] = 0;
			ret_arr[1] = parseInt(p_Year) + 1;
		}
		else {
			ret_arr[0] = parseInt(p_Month) + 1;
			ret_arr[1] = parseInt(p_Year);
		}
	}
	return ret_arr;
}

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.getMonthlyCalendarCode = function() {
	var vCode = "";
	var vHeader_Code = "";
	var vData_Code = "";

	// Begin Table Drawing code here..
    if(ta_brand == 5) {
		vCode = vCode + "<table border=\"0\" cellpadding=\"3\" cellspacing=\"1\" bgcolor=\"#007C9C\">";
    } else if(ta_brand == 18) {
		vCode = vCode + "<table border=\"0\" cellpadding=\"3\" cellspacing=\"1\" bgcolor=\"#626060\">";
    } else {
		vCode = vCode + "<table border=\"0\" cellpadding=\"3\" cellspacing=\"1\" bgcolor=\"#FECFB3\">";
    }
	vHeader_Code = this.cal_header();
	vData_Code = this.cal_data();
	vCode = vCode + vHeader_Code + vData_Code;
	vCode = vCode + "</table>";
	return vCode;
}

Calendar.prototype.show = function() {
	var vCode = "";

	this.gWinCal.document.open();

	// Setup the page...
	this.wwrite("<html>");
	this.wwrite("<head><title>Kalenteri</title>");
    //this.wwrite("<link rel=\"stylesheet\" href=\"" + resourcesImages + "aurinkomatkat.css\" type=\"text/css\">");
    this.wwrite("<link rel=\"stylesheet\" href=\"/tripsearch/");
    this.wwrite(nresources);
    this.wwrite("css/common.css\" type=\"text/css\">");
	this.wwrite("</head>");
	//body tag
	this.wwrite("<body style=\"background-image: none; background-color: #ffffff;\"" +
		"bgcolor=\"#ffffff\" " +
		"link=\"" + this.gLinkColor + "\" " +
		"vlink=\"" + this.gLinkColor + "\" " +
		"alink=\"" + this.gLinkColor + "\" " +
		"text=\"" + this.gTextColor + "\">");
	//first table begins
	this.wwrite("<center><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">");
	this.wwrite("<tr><td><table border=\"0\" cellpadding=\"3\" cellspacing=\"1\" width=\"100%\">");
	this.wwrite("<tr><td colspan=\"5\" valign=\"middle\" class=\"leipateksti12\"><b>");
	//month and year
	this.wwriteA(this.gMonthName + " " + this.gYear);
	this.wwriteA("</b></td>");

	// Show navigation arrows
	//Previous month
	var prevMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, -1);
	var prevMM = prevMMYYYY[0];
	var prevYYYY = prevMMYYYY[1];
	//next month
	var nextMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, 1);
	var nextMM = nextMMYYYY[0];
	var nextYYYY = nextMMYYYY[1];
	this.wwrite("<td valign=\"top\">");
	var date_now = tadp_gNow;

    var backwardImageText = '<img src="/tripsearch/' + nresources + 'images/icons/arrow_backward.gif\" alt=\"&lt;\" width=\"10\" height=\"10\" border=\"0\" valign=\"absmiddle\" vspace=\"5\" hspace=\"5\">';
    var forwardImageText = '<img src="/tripsearch/' + nresources + 'images/icons/arrow_forward.gif\" alt=\"&gt;\" width=\"10\" height=\"10\" border=\"0\" valign=\"absmiddle\" vspace=\"5\" hspace=\"5\">';

    if(((prevMM >= date_now.getMonth()) && (prevYYYY == date_now.getFullYear())) || (prevYYYY == (date_now.getFullYear()+1))) {
		this.wwrite("<a class=\"calendar\" href=\"" +
			"javascript:window.opener.Build(" +
		    "'" + returnItem1 + "', '" + returnItem2 +"', '" + prevMM + "', '" + prevYYYY + "', '" + this.gFormat + "'" +
		    ");" +
		    "\">" + backwardImageText + "<\/a>");
	}
	this.wwrite("</td>");
	this.wwrite("<td align=\"right\" valign=\"top\">");
	if(!(nextMM >= tadp_maxMonth_1 && prevYYYY == tadp_maxYear_1)) {
		this.wwrite("<a class=\"calendar\" href=\"" +
			"javascript:window.opener.Build(" +
		    "'" + returnItem1 + "', '" + returnItem2 +"', '" + nextMM + "', '" + nextYYYY + "', '" + this.gFormat + "'" +
		    ");" +
		    "\">" + forwardImageText + "<\/a>");
	}
	this.wwrite("</td>");
	this.wwrite("</tr></table></td></tr>");
	this.wwrite("<tr><td>");

	//The rest of the calendar (put inside a table)
	vCode = this.getMonthlyCalendarCode();
	this.wwrite(vCode);

	this.wwrite("</td></tr></table></center></body></html>");
	this.gWinCal.document.close();
}

//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);
}
//put in the header of the calendar
Calendar.prototype.cal_header = function() {
	var vCode = "";

	vCode = vCode + "<tr>";
	vCode = vCode + "<td width=\"25\" class=\"leipateksti\" valign=\"middle\" align=\"center\" bgcolor=\"" + this.gHeaderColor + "\"><font color=\"#FFFFFF\"><b>Ma</b></font></TD>";
	vCode = vCode + "<td width=\"25\" class=\"leipateksti\" valign=\"middle\" align=\"center\" bgcolor=\"" + this.gHeaderColor + "\"><font color=\"#FFFFFF\"><b>Ti</b></font></TD>";
	vCode = vCode + "<td width=\"25\" class=\"leipateksti\" valign=\"middle\" align=\"center\" bgcolor=\"" + this.gHeaderColor + "\"><font color=\"#FFFFFF\"><b>Ke</b></font></TD>";
	vCode = vCode + "<td width=\"25\" class=\"leipateksti\" valign=\"middle\" align=\"center\" bgcolor=\"" + this.gHeaderColor + "\"><font color=\"#FFFFFF\"><b>To</b></font></TD>";
	vCode = vCode + "<td width=\"25\" class=\"leipateksti\" valign=\"middle\" align=\"center\" bgcolor=\"" + this.gHeaderColor + "\"><font color=\"#FFFFFF\"><b>Pe</b></font></TD>";
	vCode = vCode + "<td width=\"25\" class=\"leipateksti\" valign=\"middle\" align=\"center\" bgcolor=\"" + this.gHeaderColor + "\"><font color=\"#FFFFFF\"><b>La</b></font></TD>";
	vCode = vCode + "<td width=\"25\" class=\"leipateksti\" valign=\"middle\" align=\"center\" bgcolor=\"" + this.gHeaderColor + "\"><font color=\"#FFFFFF\"><b>Su</b></font></TD>";
	vCode = vCode + "</tr>";

	return vCode;
}

Calendar.prototype.cal_data = function() {
	var vDate = new Date();
	vDate.setDate(1);
	vDate.setMonth(this.gMonth);
	vDate.setFullYear(this.gYear);
	var isMaxMonth = false;
	var isMinMonth = false;
	var thisMonthsMaxDay;
	var thisMonthsMinDay;
	if(this.gYear == tadp_maxYear_1)
        if(this.gMonth+1 == tadp_maxMonth_1) {
            isMaxMonth = true;
            thisMonthsMaxDay = tadp_maxDay_1;
        }
    if(this.gYear == tadp_minYear_1)
        if(this.gMonth == tadp_minMonth_1) {
            isMinMonth = true;
            thisMonthsMinDay = tadp_minDay_1;

        }
	var vFirstDay=vDate.getDay();
	if(vFirstDay == 0)
		vFirstDay = 6;
	else
		vFirstDay--;
	var vDay=1;
	var vLastDay=Calendar.get_daysofmonth(this.gMonth, this.gYear);
	var vOnLastDay=0;
	var vCode = "";
	var vSetMethod;
	if (tadp_earliest) {
	    vSetMethod = "setEarly";
	} else {
	    vSetMethod = "setLatest";
	}

	/*
	Get day for the 1st of the requested month/year..
	Place as many blank cells before the 1st day of the month as necessary.
	*/
	vCode = vCode + "<tr>";
	for (i=0; i<vFirstDay; i++) {
		vCode = vCode + "<td class=\"leipateksti\" valign=\"middle\" align=\"center\"" + this.write_weekend_string(i) + ">&nbsp;</TD>";
	}
	// Write rest of the 1st week
	for (j=vFirstDay; j<7; j++) {
        if((isMaxMonth == true) || (isMinMonth == true)) {
            if(vDay < thisMonthsMinDay) {
                vCode = vCode + "<td class=\"leipateksti\" valign=\"middle\" align=\"center\"" + this.write_weekend_string(j) + ">" +
                this.format_day(vDay) +
                "</td>";
            } else {
                vCode = vCode + "<td class=\"leipateksti\" valign=\"middle\" align=\"center\"" + this.write_weekend_string(j) + ">" +
                    "<A class=\"calendar\" 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();\">" +
                        this.format_day(vDay) +
                    "</A>" +
                "</td>";
            }
        }else {
            vCode = vCode + "<td class=\"leipateksti\" valign=\"middle\" align=\"center\"" + this.write_weekend_string(j) + ">" +
                "<A class=\"calendar\" 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();\">" +
                    this.format_day(vDay) +
                "</A>" +
            "</td>";
        }
		vDay=vDay + 1;
	}
	vCode = vCode + "</tr>";

	// Write the rest of the weeks
	for (k=2; k<7; k++) {
		vCode = vCode + "<tr>";

        // "setA_day(self.opener.document." + this.gReturnItem2 + "); saveDateField(self.opener.document." + this.gReturnItem2 +");" +
		for (j=0; j<7; j++) {
            if((isMaxMonth == true) || (isMinMonth == true)) {
                if(vDay < thisMonthsMinDay) {
                    vCode = vCode + "<td class=\"leipateksti\" valign=\"middle\" align=\"center\"" + this.write_weekend_string(j) + ">" +
                    this.format_day(vDay) +
                    "</td>";
                } else {
                    vCode = vCode + "<td class=\"leipateksti\" valign=\"middle\" align=\"center\"" + this.write_weekend_string(j) + ">" +
                        "<A class=\"calendar\" 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();\">" +
                        this.format_day(vDay) +
                        "</A>" +
                    "</td>";
                }
            } else {
                vCode = vCode + "<td class=\"leipateksti\" valign=\"middle\" align=\"center\"" + this.write_weekend_string(j) + ">" +
                    "<A class=\"calendar\" 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();\">" +
                    this.format_day(vDay) +
                    "</A>" +
                    "</td>";
            }
        vDay=vDay + 1;
        if (vDay > vLastDay) {
            vOnLastDay = 1;
            break;
        }
    }
    if (j == 6)
        vCode = vCode + "</tr>";
    if (vOnLastDay == 1)
        break;
	}
	// Fill up the rest of last week with empty spaces:
	for (m=1; m<(7-j); m++) {
			vCode = vCode + "<td class=\"leipateksti\" valign=\"middle\" align=\"center\"" + this.write_weekend_string(j+m) +
			">&nbsp;</TD>";
	}
	return vCode;
}

Calendar.prototype.format_day = function(vday) {
    if(tadp_earliest) {
        var vNowDay = ta_getValue(document.searchForm.ts_out_earliest_day);
	    var vNowMonth = parseMonth(ta_getValue(document.searchForm.ts_out_earliest_my));
	    var vNowYear = parseYear(ta_getValue(document.searchForm.ts_out_earliest_my));
	} else {
        var vNowDay = ta_getValue(document.searchForm.ts_out_latest_day);
	    var vNowMonth = parseMonth(ta_getValue(document.searchForm.ts_out_latest_my));
	    var vNowYear = parseYear(ta_getValue(document.searchForm.ts_out_latest_my));
	}
	if (vday == vNowDay && this.gMonth == vNowMonth && this.gYear == vNowYear)
		return ("<FONT COLOR=\"RED\"><B>" + vday + "</B></FONT>");
	else
		return (vday);
}

Calendar.prototype.write_weekend_string = function(vday) {
	var i;
	// Return special formatting for the tadp_weekend day.
	for (i=0; i<tadp_weekend.length; i++) {
		if (vday == tadp_weekend[i])
			return (" bgcolor=\"" + tadp_weekendColor + "\"");
	}
	return (" bgcolor=\"#FFFFFF\"");
}

Calendar.prototype.format_data_year_month_day = function(year, month, day) {
    var vData;
	var vMonth = 1 + month;
	vMonth = (vMonth.toString().length < 2) ? "0" + vMonth : vMonth;
	var vDD = (day.toString().length < 2) ? "0" + day: day;
	var vY4 = new String(year);

	vData = vY4 + vMonth + vDD;

	return vData;
}

function Build(p_item_my, p_item_d, p_month, p_year, p_format) {
	var p_WinCal = tadp_ggWinCal;
	gCal = new Calendar(p_item_my, p_item_d, p_WinCal, p_month, p_year, p_format);
	gCal.gBGColor="white";
	gCal.gLinkColor="black";
	gCal.gTextColor="black";
    if(ta_brand == 5) {
	    gCal.gHeaderColor="#00AEF5";
    } else if(ta_brand == 18) {
	    gCal.gHeaderColor="#cc0000";
    } else {
	    gCal.gHeaderColor="#FF6600";
    }
	gCal.show();
}

function show_calendar() {
	p_format = "MM/DD/YYYY";
	p_item_d = arguments[0];
	p_item_my = arguments[1];
	if (arguments[2] != null)
		p_day = arguments[2];
	if (arguments[3] != null)
		p_monthyear = arguments[3];
    if (arguments[4] != null)
        tadp_minDay_1 = arguments[4];
    if (arguments[5] != null)
        tadp_maxDay_1 = arguments[5];
    if (arguments[6] != null)
        tadp_maxMonth_1 = arguments[6];
    if (arguments[7] != null)
        tadp_maxYear_1 = arguments[7];
    if (arguments[8] != null && arguments[8] == 'tadp_earliest') {
        tadp_earliest = true;
    } else {
        tadp_earliest = false;
    }
    p_month = getMonthNo(parseMonth(ta_m_name[p_monthyear]));
    p_year = parseYear(ta_m_name[p_monthyear]);
	vWinCal = window.open("", "Calendar", "width=250,height=220,status=no,resizable=no,top=125,left=100");
	vWinCal.opener = self;
	tadp_ggWinCal = vWinCal;
	Build(p_item_my, p_item_d, p_month, p_year, p_format);
}