// Title: Timestamp picker
// Description: See the demo at url
// URL: http://www.geocities.com/tspicker/
// Version: 1.0.a (Date selector only) reworked by Richard Perry
// Date: 12-12-2001 (mm-dd-yyyy)
// Version 1.0.b reworked by Eddie May. Added time display and made compliant with Netscape 6.2.
// Date 22/01/2002 (dd-mm-yyyy).
// Version 1.0.c reworked by Dubravko Ostoic Added Locale suport(for Coratia), some graphic fitures
// Date 22.02.2002 (dd.mm.yyyy).
// Author: Denis Gritcyuk <denis@softcomplex.com>; <tspicker@yahoo.com>
// Notes: Permission given to use this script in any kind of applications if
//    header lines are left unchanged. Feel free to contact the author
//    for feature requests and/or donations

function show_calendar_x(start_day_ind, str_locale, str_target, str_datetime, str_selected_datetime, str_start_year,str_offset) {
// start_day_ind - day week starts from (normally 0 -Sunday or 1 - Monday)
// str_locale -  locale month & day presentation ("HR" - Cratian, All Other English")
// str_target - targer object in document to store return value
// str_datetime - Input timestamp to parse in picker
// str_selected_datetime - date that wil be selected in picker

	tStart_day_ind = new String (start_day_ind);
	// Default locale month & day presentation
	var arr_months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
	var week_days = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];

	// French locale month & day presentation
	if (str_locale == "fr") {
		var arr_months = ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"];
		var week_days = ["Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa"];
	}
        
        if (str_locale == "it") {
		var arr_months = ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"];
		var week_days = ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa"];
	}
        
        if (str_locale == "sp") {
		var arr_months = ["Enero", "Febrero", "Marzo", "Abril", "Mayo","Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre","Diciembre"];
		var week_days = ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa"];
	}
        
        if (str_locale == "de") {
		var arr_months = ["Januar", "Februar", "März", "April", "Mai","Juni", "Juli", "August", "September", "Oktober", "November","Dezember"];
		var week_days = ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"];
	}
        
        if (str_locale == "nl") {
		var arr_months = ["Januari", "Februari", "Maart", "April", "Mei","Juni", "Juli", "Augustus", "September", "Oktober", "November","December"];
		var week_days = ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"];
	}

	var n_weekstart = start_day_ind; // day week starts from (normally 0 -Sunday or 1 - Monday)
	var dt_datetime = (str_datetime == null || str_datetime =="" ?  new Date() : str2dt4x(str_datetime, str_locale));
	var dt_selected_datetime = (str_selected_datetime == null || str_selected_datetime =="" ?  new Date() : str2dt4x(str_selected_datetime, str_locale));
	var dt_prev_month = new Date(dt_datetime);
        
	dt_prev_month.setMonth(dt_datetime.getMonth()-1);
	if (dt_datetime.getMonth()%12 != (dt_prev_month.getMonth()+1)%12) {
		dt_prev_month.setMonth(dt_datetime.getMonth());
		dt_prev_month.setDate(0);
	}
	var dt_next_month = new Date(dt_datetime);
	dt_next_month.setMonth(dt_datetime.getMonth()+1);
	if ((dt_datetime.getMonth() + 1)%12 != dt_next_month.getMonth()%12)
		dt_next_month.setDate(0);
		var dt_prev_year = new Date(dt_datetime);
		//dt_prev_year.setYear(dt_datetime.getYear()-1);
		dt_prev_year.setYear(dt_datetime.getFullYear()-1);

	var dt_next_year = new Date(dt_datetime);
	//dt_next_year.setYear(dt_datetime.getYear()+1);
	dt_next_year.setYear(dt_datetime.getFullYear()+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);

	// html generation (feel free to tune it for your particular application)
	// print calendar header
	var str_buffer = new String (
		"<html>\n"+
			"<head>\n"+
				" <title>Calendar</title>\n"+
			"<script language=\"JavaScript\" src=\"/includes/core/calendar/table_scroler.js\"></script>\n"+
			"<script language=\"JavaScript\" src=\"/includes/core/calendar/image_change.js\"></script>\n"+
			"</head>\n"+
			"<body bgcolor=\"White\">\n"+
				"<table class=\"clsOTable\" cellspacing=\"0\" border=\"0\" width=\"100%\" onMouseover=\"table_cell_over(event,'yellow')\" onMouseout=\"table_cell_out(event)\">\n"+
					 "<tr><td bgcolor=\"#4682B4\">\n"+
						 "<table cellspacing=\"1\" cellpadding=\"3\" border=\"0\" width=\"100% \">\n"+
							 "<tr>\n"+
								 " <td bgcolor=\"#4682B4\"><a href=\"javascript:window.opener.show_calendar_x("+tStart_day_ind+", '"+str_locale+"', '"+str_target+"', '"+dt2dtstr4x(dt_prev_year, str_locale)+"', '', '"+str_start_year+"', "+str_offset+");\">"+ "<img name=\"imgPrevYear\" src=\"/includes/core/calendar/button_first.gif\" width=\"16\" height=\"16\" border=\"0\""+" alt=\"previous year\"></a></td>\n"+
								 " <td bgcolor=\"#4682B4\"><a href=\"javascript:window.opener.show_calendar_x("+tStart_day_ind+", '"+str_locale+"', '"+str_target+"', '"+ dt2dtstr4x(dt_prev_month, str_locale)+"', '', '"+str_start_year+"', "+str_offset+");\">"+"<img name=\"imgPrevMonth\" src=\"/includes/core/calendar/button_prev.gif\" width=\"16\" height=\"16\" border=\"0\""+" alt=\"previous month\"></a></td>\n"+
								 " <td bgcolor=\"#4682B4\" colspan=\"3\">"+"<font color=\"white\" face=\"tahoma, verdana\" size=\"1\">" +arr_months[dt_datetime.getMonth()]+" "+dt_datetime.getFullYear()+"</font></td>\n"+
								 " <td bgcolor=\"#4682B4\" align=\"right\"><a href=\"javascript:window.opener.show_calendar_x("+tStart_day_ind+", '"+str_locale+"', '"+str_target+"', '"+dt2dtstr4x(dt_next_month, str_locale)+"', '', '"+str_start_year+"', "+str_offset+");\">"+"<img name=\"imgNextMonth\" src=\"/includes/core/calendar/button_next.gif\" width=\"16\" height=\"16\" border=\"0\""+" alt=\"next month\"></a></td>\n"+
								 " <td bgcolor=\"#4682B4\" align=\"right\"><a href=\"javascript:window.opener.show_calendar_x("+tStart_day_ind+", '"+str_locale+"', '"+str_target+"', '"+dt2dtstr4x(dt_next_year, str_locale)+"', '', '"+str_start_year+"', "+str_offset+");\">"+"<img name=\"imgNextYear\" src=\"/includes/core/calendar/button_last.gif\" width=\"16\" height=\"16\" border=\"0\""+" alt=\"next year\"></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++) {
		// print sunday and saturday titles
		if (((n_weekstart+n)%7 == 0) || ((n_weekstart+n)%7 == 6))
			str_buffer += " <td bgcolor=\"#87CEFA\">"+ "<font color=\"red\" face=\"tahoma, verdana\" size=\"2\">"+week_days[(n_weekstart+n)%7]+"</font></td>\n";
		else
			str_buffer += " <td bgcolor=\"#87CEFA\">"+ "<font color=\"white\" face=\"tahoma, verdana\" size=\"2\">"+week_days[(n_weekstart+n)%7]+"</font></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_selected_datetime.getDate() && dt_current_day.getMonth() == dt_selected_datetime.getMonth() && dt_current_day.getYear() == dt_selected_datetime.getYear())
				// print current date
				str_buffer += " <td style=\"cursor:pointer\" class=\"cell\" bgcolor=\"#FFB6C1\" align=\"right\" ";
			else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
				// weekend days
				str_buffer += " <td style=\"cursor:pointer\" class=\"cell\" bgcolor=\"#DBEAF5\" align=\"right\" ";
			else
				// print working days of current month
				str_buffer += " <td style=\"cursor:pointer\" class=\"cell\" bgcolor=\"white\" align=\"right\" ";
			if (dt_current_day.getMonth() == dt_datetime.getMonth())
				// print days of current month
				str_buffer += " onClick =\"javascript:window.opener."+str_target+".value='"+dt2dtstr4x(dt_current_day, str_locale)+"'; javascript:window.opener."+str_target+"_day.selectedIndex='"+dt2dtstrday(dt_current_day,str_offset)+"'; javascript:window.opener."+str_target+"_month.selectedIndex='"+dt2dtstrmonth(dt_current_day,str_offset)+"'; javascript:window.opener."+str_target+"_year.selectedIndex='"+dt2dtstryear(dt_current_day, str_start_year,str_offset)+"'; javascript:window.opener."+str_target+"_wday.value='"+dt2dtstrwday(dt_current_day, str_locale)+"'; window.close();\">"+"<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">";
			else
				// print days of other months
				str_buffer += " onClick=\"javascript:window.opener."+str_target+".value='"+dt2dtstr4x(dt_current_day, str_locale)+"'; javascript:window.opener."+str_target+"_day.selectedIndex='"+dt2dtstrday(dt_current_day,str_offset)+"'; javascript:window.opener."+str_target+"_month.selectedIndex='"+dt2dtstrmonth(dt_current_day,str_offset)+"'; javascript:window.opener."+str_target+"_year.selectedIndex='"+dt2dtstryear(dt_current_day, str_start_year,str_offset)+"'; javascript:window.opener."+str_target+"_wday.value='"+dt2dtstrwday(dt_current_day, str_locale)+"'; window.close();\">"+"<font color=\"gray\" face=\"tahoma, verdana\" size=\"2\">";
				str_buffer += dt_current_day.getDate()+"</font></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" +
		"</body>\n" +
		"</html>\n";

	var vWinCal = window.open("", "Calendar","width=200,height=250,status=no,resizable=yes,top=200,left=200");
	vWinCal.opener = self;
	vWinCal.focus();
	var calc_doc = vWinCal.document;
	calc_doc.write (str_buffer);
	calc_doc.close();
}

// datetime parsing and formatting routimes. modify them if you wish other datetime format
function str2dt4x(str_datetime, str_locale) {
	if (str_locale == "HR") {
		var re_date = /^(\d+)\.(\d+)\.(\d+)$/;
		if (!re_date.exec(str_datetime))
			return alert("Pogrešan format datuma: "+ str_datetime);
		tDatum = new Date (RegExp.$3, RegExp.$2-1, RegExp.$1);
	} else {
		var re_date = /^(\d+)\/(\d+)\/(\d+)$/;
		if (!re_date.exec(str_datetime))
			return alert("Invalid Datetime format: "+ str_datetime);
		tDatum = new Date (RegExp.$3, RegExp.$2-1, RegExp.$1);
	}
	return (tDatum);
}

function dt2dtstr4x(dt_datetime, str_locale) {
	
        tDatumDay = new String (dt_datetime.getDate());
        
        if (tDatumDay <= 9){
                tDatumDay = '0' + tDatumDay        
        }
        
        tDatumMonth = new String (dt_datetime.getMonth()+1);
        
        if (tDatumMonth <= 9){
                tDatumMonth = '0' + tDatumMonth        
        }
        
        tDatumYear = new String (dt_datetime.getFullYear());
        
        
        tDatumString = new String (tDatumDay+"/"+tDatumMonth+"/"+tDatumYear);
	
	return (tDatumString);
}

function dt2dtstrday(dt_datetime,str_offset) {
	tDatumString = new String (dt_datetime.getDate()-1+str_offset);
	return (tDatumString);
}

function dt2dtstrmonth(dt_datetime,str_offset) {
	tDatumString = new String (dt_datetime.getMonth()+str_offset);
	return (tDatumString);
}

function dt2dtstryear(dt_datetime,str_start_year,str_offset) {
	tDatumString = new String (dt_datetime.getFullYear()-str_start_year+str_offset);
	return (tDatumString);
}

function dt2dtstrwday(dt_datetime,str_locale) {
	var days = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]
        
        if (str_locale == "fr") {
                var days = ["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"]
        }
        
        if (str_locale == "it") {
                var days = ["Dom","Lun","Mar","Mer","Gio","Ven","Sab"]
        }
        
        if (str_locale == "sp") {
                var days = ["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"]
        }
        
        if (str_locale == "de") {
		var days = ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"];
	}
        
        if (str_locale == "nl") {
                var days = ["Zon","Maa","Din","Woe","Don","Vri","Zat"]
        }
        
        tDatumString = new String (days[dt_datetime.getDay()])
	return (tDatumString);
}