//-----------------------------------------------------------------------------
function show_calendar(languageID, str_target, str_datetime, loppuPvm, winX, winY, cal) {
// Popup calendar...
//-----------------------------------------------------------------------------

	var arr_months = new Array(12); //["Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu", "Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu"];
	var week_days = new Array(7); //["Su", "Ma", "Ti", "Ke", "To", "Pe", "La"];
	var n_weekstart = 1; // day week starts from (normally 0 or 1)

	switch (languageID) 
	{ 
		case "en": 
			arr_months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
			week_days =  ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
			break;
		case "sv":
			arr_months = ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"];
			week_days =  ["S&ouml;", "M&aring;", "Ti", "On", "To", "Fr", "L&ouml;"];
			break;
		default:
			arr_months = ["Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kes&auml;kuu", "Hein&auml;kuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu"];
			week_days =  ["Su", "Ma", "Ti", "Ke", "To", "Pe", "La"];
	}

	var dt_datetime = (str_datetime == null || str_datetime =="" ?  new Date() : str2dt(str_datetime));
	var dt_prev_month = new Date(dt_datetime);
	dt_prev_month.setMonth(dt_datetime.getMonth()-1);
	var dt_next_month = new Date(dt_datetime);
	dt_next_month.setMonth(dt_datetime.getMonth()+1);
	var dt_firstday = new Date(dt_datetime);
	dt_firstday.setDate(1);
	dt_firstday.setDate(1-(7+dt_firstday.getDay()-n_weekstart)%7);
	var dt_lastday = new Date(dt_next_month);
	dt_lastday.setDate(0);
	
	var linkPrevMonth = "javascript:window.opener.show_calendar('"+languageID+"','"+str_target+"', '"+ dt2dtstr(dt_prev_month)+"'+document.cal.time.value);"
	var linkNextMonth = "javascript:window.opener.show_calendar('"+languageID+"','"+str_target+"', '"+dt2dtstr(dt_next_month)+"'+document.cal.time.value);"

	// html generation (feel free to tune it for your particular application)
	// print calendar header
	var str_buffer = new String (
		"<html>\n"+
		"<head>\n"+
		"	<title>Kalenteri</title>\n"+
		"	<link rel=\"STYLESHEET\" type=\"text/css\" href=\"../css/hus.css\">\n"+
		"</head>\n"+
		"<body bgcolor=\"White\" style=\"padding-right:10px;\">\n"+
		"<table align=\"center\" cellspacing=\"1\" cellpadding=\"4\" border=\"0\" width=\"100%\" bgcolor=\"#9A9A9A\">\n"+
			"<tr>"+
				//edellinen kk
				"<td class=\"calHeadArrows\" align=\"center\" onclick=\"" + linkPrevMonth + "\">\n"+
					"<a class=\"calHeadArrows\" href=\"" + linkPrevMonth + "\">"+
						"&laquo;"+
					"</a>"+
				"</td>\n"+
				//kk ja vuosi
				"<td class=\"calHead\" colspan=\"5\" align=\"center\">"+
					"<span class=\"valikkoPaaotsikko\">"+
						arr_months[dt_datetime.getMonth()]+" "+dt_datetime.getFullYear()+
					"</span>"+
				"</td>\n"+
				//seuraava kk
				"<td class=\"calHeadArrows\" align=\"center\" onclick=\"" + linkNextMonth + "\">"+
					"<a class=\"calHeadArrows\" href=\"" + linkNextMonth + "\">"+
						"&raquo;"+
					"</a>"+
				"</td>\n"+
			"</tr>\n"
	);

	var dt_current_day = new Date(dt_firstday);
	// print weekdays titles
	str_buffer += "<tr>\n";
	for (var n=0; n<7; n++)
		str_buffer += "	<td class=\"calDark\">"+
		week_days[(n_weekstart+n)%7]+"</td>\n";
	// print calendar table
	str_buffer += "</tr>\n";
	while (dt_current_day.getMonth() == dt_datetime.getMonth() ||
		dt_current_day.getMonth() == dt_firstday.getMonth()) {
		// print row heder
		str_buffer += "<tr>\n";
		for (var n_current_wday=0; n_current_wday<7; n_current_wday++) {
				if (dt_current_day.getDate() == dt_datetime.getDate() &&
					dt_current_day.getMonth() == dt_datetime.getMonth())
					// print current date
					str_buffer += "	<td class=\"calLight\" align=\"center\">";
// Erottaa viikonloppupvm, jos niin halutaan
//				else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
//					// weekend days
//					str_buffer += "	<td class=\"calLight\" align=\"right\">";
				else if (dt_current_day.getMonth() != dt_datetime.getMonth())
					// days of other month
					str_buffer += "	<td class=\"calList\" align=\"center\">";
				else
					// print working days of current month
					str_buffer += "	<td class=\"calLight\" align=\"center\">";

				if (dt_current_day.getMonth() == dt_datetime.getMonth())
					// print days of current month
					if (loppuPvm == 1)
						str_buffer += "<a href=\"javascript:window.opener."+str_target+".value='"+dt2dtstr(dt_current_day)+"'+document.cal.time.value; window.close();\">";
//					else
//						str_buffer += "<a href=\"javascript:window.opener."+str_target+".value='"+dt2dtstr(dt_current_day)+"'+document.cal.time.value; window.close();\">";
				else 
					// print days of other months
					if (loppuPvm == 1)
						str_buffer += "<a href=\"javascript:window.opener."+str_target+".value='"+dt2dtstr(dt_current_day)+"'+document.cal.time.value; window.close();\">";
					else
						str_buffer += "<a href=\"javascript:window.opener."+str_target+".value='"+dt2dtstr(dt_current_day)+"'+document.cal.time.value; window.close();\">";

				str_buffer += dt_current_day.getDate()+"</a></td>\n";
				dt_current_day.setDate(dt_current_day.getDate()+1);
		}
		// print row footer
		str_buffer += "</tr>\n";
	}
	// print calendar footer
	str_buffer +=

		"</table>\n" +
		"</tr>\n</td>\n</table>\n" +
	//form for temp data
		"<form name=\"cal\">\n"+
			"<input type=\"hidden\" name=\"time\" value=\""+dt2tmstr(dt_datetime)+"\" maxlength=\"8\">"+
		"</form>\n" +
		"</body>\n" +
		"</html>\n";

//haetaan ikkunan keskikohta ja positioidaan popup siihen.
	var winleft = (screen.width - winX) / 2;
	var wintop  = (screen.height - winY) / 2;

	var vWinCal = window.open("", "Calendar", 'width=200,height=250,status=no,resizable=yes,left='+winleft + ',top='+wintop);	
	vWinCal.opener = self;
	var calc_doc = vWinCal.document;
	calc_doc.write (str_buffer);
	calc_doc.close();	
}

//-----------------------------------------------------------------------------
function str2dt (str_datetime) {
// datetime parsing and formatting routimes. modify them if you wish other datetime format
//-----------------------------------------------------------------------------
//	var re_date = /^(\d+)\-(\d+)\-(\d+)\s+(\d+)\:(\d+)\:(\d+)$/;
	var re_date = /^(\d+)\.(\d+)\.(\d+)$/;
	if (!re_date.exec(str_datetime))
		return alert("Invalid Datetime format: "+ str_datetime);
//	return (new Date (RegExp.$3, RegExp.$2-1, RegExp.$1, RegExp.$4, RegExp.$5, RegExp.$6));
	return (new Date (RegExp.$3, RegExp.$2-1, RegExp.$1));
}

//-----------------------------------------------------------------------------
function dt2dtstr (dt_datetime) {
//-----------------------------------------------------------------------------
	var dt = dt_datetime.getDate();
	var mt = dt_datetime.getMonth()+1;

	if(dt < 10){dt = '0' + dt} else{dt = dt};
	if(mt < 10){mt = '0' + mt} else{mt = mt};
	
	return (new String (
				dt +"."+ mt +"."+ dt_datetime.getFullYear()));
}

//-----------------------------------------------------------------------------
function dt2tmstr (dt_datetime) {
//-----------------------------------------------------------------------------
//	return (new String (
//			dt_datetime.getHours()+":"+dt_datetime.getMinutes()+":"+dt_datetime.getSeconds()));
	return ""
}

//-----------------------------------------------------------------------------
function checkSearchDates (strError,frmName) {
//-----------------------------------------------------------------------------
	var isErr
	var form	= document.forms[frmName];
	var startD	= form.StartDate.value;
	var endD	= form.EndDate.value;

//comDate(form.day1.value,form.day2.value);
	//Tarkistetaan jälkeen pvm.
	if(startD.length > 1){
		if(!isDate(startD)){
			isErr = true;
		}
		if(compareDate(startD,'')){
			isErr = true;
		}
	}

	//Tarkistetaan ennen pvm.
	if(endD.length > 1){
		if(!isDate(endD)){
			isErr = true;
		}
	}

	//Tarkistetaan ettei jälkeen pvm ole suurempikuin ennen pvm.
	if(startD.length > 1 && endD.length > 1){
		if(compareDate(startD,endD)){
			isErr = true;
		}
	}

	//Tarkistetaan tuliko virheitä ja palautetaan true/false(error viesti).
	if(isErr){
		alert(strError);
		return false;
	}
	else{
		return true;
	}

}

//-----------------------------------------------------------------------------
function checkCalendarDates (frmName,strError,strTimeError) {
//-----------------------------------------------------------------------------
	var isErr	= new Boolean(false);
	var isErrT	= new Boolean(false);
	var form	= document.forms[frmName];
	var startD	= form.StartDate.value;
	var endD	= form.EndDate.value;
	var startT	= form.StartDateKlo.value;
	var endT	= form.EndDateKlo.value;
//	var parD	= form.ParticipationDeadline.value;
	var d		= new Date();
	var today 	= d.getDate() +"."+ (d.getMonth()+1) + "." +d.getYear(); 
	var h;
	var m;
	var separator;
	var timeArr;


	//Tarkistetaan alkaa pvm.
	if(startD.length > 1){
		if(!isDate(startD)){
			isErr = true;
		}
		//tarkistetaan ettei alkaa pvm ole pienempi kuin tämä pvm.
		if(compareDate(today,startD)){
			isErr = true;
		}
	}

	//Tarkistetaan loppuu pvm.
	if(endD.length > 1){
		if(!isDate(endD)){
			isErr = true;
		}
	}

	//Tarkistetaan ettei loppu pvm ole ennen kuin alkaa pvm.
	if(startD.length > 1 && endD.length > 1){
		if(compareDate(startD,endD)){
			isErr = true;
		}
	}

	//Tarkistetaan alku klo.
	if(replace(startT, " ", "").length > 0){
		if(checkHourMinute(startT)){ 
			isErrT = true;
		}
	}

	//Tarkistetaan loppu klo.
	if(replace(endT, " ", "").length > 0){
		if(checkHourMinute(endT)){ 
			isErrT = true;
		}
	}


/*/Tarkistetaan ilmoittautumis pvm.
	if(parD.length > 1){
		if(!isDate(parD)){
			isErr = true;
		}
	}

	//Tarkistetaan ettei ilmoittautumis pvm ole jälkeenpäin kuin alkaa pvm.
	if(parD.length > 1 && startD.length > 1){
		if(compareDate(parD,startD)){
			isErr = true;
		}
	}
*/
	//Tarkistetaan tuliko virheitä ja palautetaan true/false(error viesti).
	if(isErr == true || isErrT == true){
		if(isErr == true){alert(strError)}; //Virhe päivämäärissä.
		if(isErrT == true){alert(strTimeError)}; //Virhe kellonajoissa.
		return false;
	}
	else{
		return true;
	}

}



//-----------------------------------------------------------------------------
function isDate(dateStr) {
//-----------------------------------------------------------------------------
    var datePat = /^(\d{1,2})(\/|.)(\d{1,2})(\/|.)(\d{4})$/;
    var matchArray = dateStr.match(datePat); // is the format ok?

    if (matchArray == null) {
        alert("Päivämäärän muoto pitää olla: pp.kk.vvvv");
        return false;
    }

    day 	= matchArray[1]; // parse date into variables
    month 	= matchArray[3]; 
    year 	= matchArray[5];

    if (month < 1 || month > 12) { // check month range
        return false;
    }

    if (day < 1 || day > 31) {
        return false;
    }

    if ((month==4 || month==6 || month==9 || month==11) && day==31) {
        return false;
    }

    if (month == 2) { // check for february 29th
        var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
        if (day > 29 || (day==29 && !isleap)) {
            return false;
        }
    }

    return true; //true; // date is valid
}


//-----------------------------------------------------------------------------
function isDate2(dateStr,language) {
//-----------------------------------------------------------------------------
    var datePat = /^(\d{1,2})(\/|.)(\d{1,2})(\/|.)(\d{4})$/;
    var matchArray = dateStr.match(datePat); // is the format ok?

    if (matchArray == null) {
        note(language);
		//alert("Päivämäärän muoto pitää olla: pp.kk.vvvv");
        return false;
    }

    day 	= matchArray[1]; // parse date into variables
    month 	= matchArray[3]; 
    year 	= matchArray[5];

    if (month < 1 || month > 12) { // check month range
		note(language);
        return false;
    }

    if (day < 1 || day > 31) {
		note(language);
        return false;
    }

    if ((month==4 || month==6 || month==9 || month==11) && day==31) {
		note(language);
        return false;
    }

    if (month == 2) { // check for february 29th
        var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
        if (day > 29 || (day==29 && !isleap)) {
            note(language);
			return false;
        }
    }

    return true; //true; // date is valid
}

//-----------------------------------------------------------------------------
function compareDate(dateStr1,dateStr2) {
//-----------------------------------------------------------------------------
	var d 			= new Date();
    var datePat 	= /^(\d{1,2})(\/|.)(\d{1,2})(\/|.)(\d{4})$/;
    var matchArray1 = dateStr1.match(datePat); // is the format ok?
    var matchArray2 = dateStr2.match(datePat); // is the format ok?

	var day1 	 = new Date(matchArray1[5]+"/"+matchArray1[3]+"/"+ matchArray1[1]);
	
	if(dateStr2.length > 1){
		var day2 = new Date(matchArray2[5]+"/"+matchArray2[3]+"/"+ matchArray2[1]);
	}
	else{
		var day2 = new Date(d.getYear() +"/"+ (d.getMonth()+1) + "/" +d.getDate());
	}
//	var today 	= new Date(d.getYear() +"/"+ (d.getMonth()+1) + "/" +d.getDate()); 
//	var day2 	= new Date(matchArray2[5]+"/"+matchArray2[3]+"/"+ matchArray2[1]);
	if(day1 > day2){
//		alert('false > eka suurempi')
		return true; //ensimmäinen pvm on suurempi.
	}
	else{
//		alert('true > eka pienempi')
		return false; //ensimmäinen pvm on pienempi.
	}
}


//-----------------------------------------------------------------------------
function isNumber (value) {
//-----------------------------------------------------------------------------
   	var ValidChars	= "0123456789";
   	var bIsNumber	= true;
   	var Char;
	var MAX_VALUE_LONG = 2147483647;

	if(replace(value," ", "").length > 0){
	//Tarkistetaan että kentässä on vain numeroita ja että arvo ei ole yli clng()-function.
		for (i = 0; i < value.length && bIsNumber == true; i++){ 
			Char = value.charAt(i); 
			if (ValidChars.indexOf(Char) == -1){
				bIsNumber = false;
			}
		}
		if(bIsNumber == false || value > MAX_VALUE_LONG){
			bIsNumber = false;
		}
	}

	return bIsNumber;
}

//-----------------------------------------------------------------------------
function checkHourMinute(value) {
//-----------------------------------------------------------------------------
//tarkistaa stringinä tulevan kellonajan. 
//tunnit ei voi olla yli 23, minuutit ei voi olla yli 59, erotinmerkki on oltava :
   	var isWrong	= false;

		if(value.indexOf(":") > 0){
			timeArr = value.split(":")
			h = timeArr[0]
			m = timeArr[1]
	
			if(isNumber(h) && isNumber(m)){
				if(h > 23 || m > 59){
					isWrong = true;
				}
			}
			else{isWrong = true}; // tunti tai minuutti on väärin merkitty
		}
		else{isWrong = true}; //välimerkki on väärin

	return isWrong;
}



//-----------------------------------------------------------------------------
function checkFormDates(language) {
//-----------------------------------------------------------------------------
    //tarkistaa hakuformin päivämääräkentät
	
	var Start = document.SearchForm.StartDate.value
	var End = document.SearchForm.EndDate.value
	
	
	if (Start.length > 0 ){
		if ( isDate2(Start,language)== false){
			return false;
		}
	}

	if (End.length > 0 ){
		if ( isDate2(End,language)== false ){
			return false;
		}
	}
	
	document.SearchForm.submit();
	
}

//-----------------------------------------------------------------------------
function note(language) {
//-----------------------------------------------------------------------------

if (language == 'fi'){
	alert("Pvm muotoa: pp.kk.vvvv");
	return;
	}
if (language == 'sv'){
	alert("Date: dd.mm.yyyy")
	return;
	}
if (language == 'en'){
	alert("Date in form: dd.mm.yyyy")
	return;
	}
}

