/* Authors: portions: Denis Gritcyuk, denis@softcomplex.com;
            portions: Lea Smart, www.totallysmartit.com;
            portions: Andre Bruno Boucher, CGI Inc. Montreal;
            portions: Emmanuel Pirsh, CGI Inc. Montreal;
            
 History: 2002-05-02, Added compatibility to & PC Mac plateforms
                      styles integrated, displays in a <DIV>

$Revision: 1.1 $, $Date: 2002/06/25 14:56:47 $, $Author: mlibersan $
Commentaires à jours
*/

//-- Les variables "isBrowser", "theCalDiv", "aLayers" et "aStyle" sont
//-- déclarées dans "cogeco_scripts.js".
//-- Les styles créés dynamiquement sont déclarés dans "cogeco_scripts.js".

function show_calendar(str_target, str_datetime) {
   
  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"];
	var n_weekstart = 0; // day week starts from (normally 0 or 1)

	var dt_datetime = (str_datetime == null || str_datetime =="" ?new Date():str2dt(str_datetime));

  var dt_prev_year = new Date(dt_datetime);
  dt_prev_year.setYear(dt_datetime.getFullYear()-1);

  var dt_next_year = new Date(dt_datetime);
  dt_next_year.setYear(dt_datetime.getFullYear()+1);


	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_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);
  
  
	//-- Création HTML dynamique
	var str_buffer = new String (
    //-- First table for outline purpose only
    "<table cellspacing=\"0\" cellpadding=\"1\" border=\"0\" class=\"calendar_header\">" +
    "  <tr><td>" +
		//-- Calendar table
		"<table cellspacing=\"0\" cellpadding=\"1\" border=\"0\" width=\"145\" height=\"145\" >" +
		"<tr><td colspan=\"7\" class=\"calendar_header\">" +

		"  <table cellspacing=\"0\" cellpadding=\"1\" border=\"0\" width=\"143\" >" +
		"    <tr>	" +
		"      <td><a href=\"javascript:show_calendar('" +
           str_target + "', '" + dt2dtstr(dt_prev_year) + "');" +
           "  \" class=\"calendar_header_text\">" +
           "&lt;&lt;</a></td>" +
    "      <td><a href=\"javascript:show_calendar('" +
      		 str_target + "', '" + dt2dtstr(dt_prev_month) + "');\" class=\"calendar_header_text\">" +
      		 "&lt;</a></td>" +
		"	     <td align=\"center\" class=\"calendar_header_month\" nowrap>" +
        		arr_months[dt_datetime.getMonth()] + " " + dt_datetime.getFullYear() + "</td>"+
		"      	<td align=\"right\"><a href=\"javascript:show_calendar('"
        		+ str_target + "', '" + dt2dtstr(dt_next_month) + "');\" class=\"calendar_header_text\">" +
        		"&gt;</a></td>" +
		"       <td align=\"right\"><a href=\"javascript:show_calendar('"
            + str_target + "', '" + dt2dtstr(dt_next_year) + "');\" class=\"calendar_header_text\">"+
            "&gt;&gt;</a></td>"+
    "    </tr>" +
    "  </table> " +

    "</td></tr>"
	);

	var dt_current_day = new Date(dt_firstday);
	// print weekdays titles
	str_buffer += "<tr>";
	for (var n=0; n<7; n++)
		str_buffer += "	<td align=\"right\" class=\"calendar_header_day\">"+
		week_days[(n_weekstart+n)%7]+"</td>";
	// print calendar table
	str_buffer += "</tr>";
	while (dt_current_day.getMonth() == dt_datetime.getMonth() ||
		dt_current_day.getMonth() == dt_firstday.getMonth()) {
		// print row header
		str_buffer += "<tr>";
		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=\"calendar_current_day\" align=\"right\">";
				} else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6){
					// weekend days
					str_buffer += "	<td class=\"calendar_week_end\" align=\"right\">";
				} else {
					// print working days of current month
					str_buffer += "	<td class=\"calendar_work_day\" align=\"right\">";
        }
        
				if (dt_current_day.getMonth() == dt_datetime.getMonth()){
					// print days of current month
					str_buffer += "<a href=\"javascript:" + str_target +
					".value='" + dt2dtstr(dt_current_day) + "';document" + aLayer + theCalDiv + aStyle + ".visibility='hidden';" + 
					str_target + ".blur();\" ><span class=\"calendar_day_text\">";
				} else {
					// print days of other months
					str_buffer += "<a href=\"javascript:" + str_target +
					".value='" + dt2dtstr(dt_current_day) + "';document" + aLayer + theCalDiv + aStyle + ".visibility='hidden';" + 
					str_target + ".blur();\" ><span class=\"calendar_day_grey\">";
				}
				str_buffer += dt_current_day.getDate() +"</span></a></td>";
				dt_current_day.setDate(dt_current_day.getDate()+1);
		}
		// print row footer
		str_buffer += "</tr>";
	}
	// print calendar footer
	str_buffer +=
		"</table>" +
		"</td></tr></table>" +
		//-- End calendar
		"</td></tr></table>" +
		//-- End Outline table
    "<input type=\"hidden\" name=\"time\" value=\"\" />";
    //-- Ajouter ces valeurs dans le champ "time" pour afficher l'heure 
    //-- " + dt2tmstr(dt_datetime) + "
		
  //-- Fonction déclarée dans le fichier cogeco_scripts.js
  //-- pour affichage adaptée selon fureteur
  drawCalendar(str_buffer);
}

// datetime parsing and formatting routimes. modify them if you wish other datetime format
function str2dt (str_datetime) {
	//Valeur d'origine au format "dd-mm-yyyy HH:MM:SS" (seulement des chiffres(digit) et un espace(space)).
	//var re_date = /^(\d+)\-(\d+)\-(\d+)\s+(\d+)\:(\d+)\:(\d+)$/;

	//Validation de la date et de l'heure au format
	//Masque de saisie.
	//Doit être au format "yyyy-mm-dd"
	var re_date = /^(\d+)\-(\d+)\-(\d+)$/;
  
  if ((re_date.test(str_datetime) != true) || (str_datetime.length < 10)){
	  alert("Invalid Date Format : " + str_datetime + "\nAccepted Format: yyyy-mm-dd.\n");
    return new Date();
	}
	// Valeur d'origine au format "dd-mm-yyyy HH:MM:SS"
	//return (new Date (RegExp.$3, RegExp.$2-1, RegExp.$1, RegExp.$4, RegExp.$5, RegExp.$6));

	//Nouvelle valeur au format "yyyy-mm-dd"
	return (new Date ( RegExp.$1, RegExp.$2-1, RegExp.$3));
}

function dt2dtstr (dt_datetime) {
  var aMonth = "";
  aMonth = (dt_datetime.getMonth() + 1);
  if (aMonth < 10){ aMonth = "0" + aMonth; }

  var  aDay = "";
  aDay = dt_datetime.getDate();
  if (aDay < 10) { aDay = "0" + aDay; }

	return (new String (
			dt_datetime.getFullYear() + "-" + aMonth + "-" + aDay));
}

function dt2tmstr (dt_datetime) {
  /*
  var anHour = dt_datetime.getHours();
  if (anHour < 10) { anHour = "0" + anHour; }

  var aMinute = dt_datetime.getMinutes();
  if (aMinute < 10) { aMinute = "0" + aMinute; }
  */

	return (new String ( "" )); //-- anHour + ":" + aMinute ));
}

