var dom = (document.getElementById) ? 1:0 //ie5 - n6

var inputDateField = 0;
var divIdCalendar  = 0;
var bCalOpen       = 0;
var nCalTimeOut    = null;

var ie = (document.all)? true : false;
var n6 = (document.getElementById)? true : false;

// Get day, month year of current day
var now       = new Date();
var nSlcDay   = now.getDate();
var nSlcMonth = now.getMonth()+1;
var nSlcYear  = now.getFullYear();

function FormatDayToString(dDay)
{
	var strDay = dDay;
	if(dDay < 10)
		strDay = "0"+strDay;
	
	return strDay;
}

//function buildCalendar(bSlcOnlyFutureDays, csLangIn)
function buildCalendar(dDay, dMonth, dYear, bIsInputVal, bSlcOnlyFutureDaysIn, csLangIn)
{
	// Constant declaration for month and day strings
	var calendarString = "";
	var days  = new Array (new Array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"),
						   new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thrusday", "Friday", "Saturday") );
	var month = new Array (new Array("janvier", "f&eacute;vrier", "mars", "avril", "mai", "juin", "juillet", "ao&ucirc;t", "septembre", "octobre", "novembre", "d&eacute;cembre" ),
	                       new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December") );
	var title = new Array (new Array("Journ&eacute;e courante", "Journ&eacute;e s&eacute;lectionn&eacute;e"),
						   new Array("Current day", "Day selected"));
	var close = new Array ( new Array("Fermer"),
					    						new Array("Close"));

	// Toggle calendar language between english and french
	if(csLangIn == "FR")
		calendarLang=0;
	else
		calendarLang=1;
	
	// Get day, month year of current day
	var now  = new Date();
	var currentDay   = now.getDate();
	var currentMonth = now.getMonth();
	var currentYear  = now.getFullYear();

	// Reset nSlcDay Month and Year to current month
	nSlcDay   = 1;
	nSlcMonth = dMonth;
	nSlcYear  = dYear;
	
	// Calculate previous month
	var prevMonthDate = new Date(dYear, dMonth-1, dDay);
	prevMonthDate.setMonth(prevMonthDate.getMonth()-1);

	// Calculate next month
	var nextMonthDate = new Date(dYear, dMonth-1, dDay);
	nextMonthDate.setMonth(nextMonthDate.getMonth()+1);

	// Create link to navigate in the calendar
	var prevMonthLink = "#";//"pageAccueil.php?ddate=01-"+FormatDayToString( (prevMonthDate.getMonth()+1) )+"-"+FormatDayToString( (prevMonthDate.getFullYear()) );
	var prevMonth     = month[calendarLang][prevMonthDate.getMonth()]+" "+(prevMonthDate.getFullYear());
	var monthYear     = month[calendarLang][dMonth-1]+" "+dYear;
	var nextMonthLink = "#";//"pageAccueil.php?ddate=01-"+FormatDayToString( (nextMonthDate.getMonth()+1) )+"-"+FormatDayToString( (nextMonthDate.getFullYear()) );
	var nextMonth     = month[calendarLang][nextMonthDate.getMonth()]+" "+(nextMonthDate.getFullYear());

	// Starting the code that creates the calendar
	calendarString += "<TABLE class=\"cadre\" bgcolor=\"#ffffff\" cellSpacing=\"1\" cellPadding=\"1\" border=\"0\">";
	calendarString += "<TBODY>";
	calendarString += "<tr><td colspan=\"7\" align=\"right\" class=\"cal_content\"><a href='javascript:void(0)' onclick='parent.hideCalendar();return false;'>"+close[calendarLang]+" X</a></td></tr>"
	calendarString += "  <TR>";
	calendarString += "    <TD class=\"cal_head\" align=\"center\">";
	calendarString += "      <A class=\"cal_head\" title=\""+prevMonth+"\" onclick=\"javascript:parent.prevMonth('"+csLangIn+"', "+bSlcOnlyFutureDaysIn+")\" href=\"javascript:void(0)\">&lt;</A>";
	calendarString += "    </TD>";
	calendarString += "    <TD class=\"cal_head\" align=\"center\" colSpan=\"5\">"+monthYear+"</TD>";
	calendarString += "    <TD class=\"cal_head\" align=\"center\">";
	calendarString += "      <A class=\"cal_head\" title=\""+nextMonth+"\" onclick=\"javascript:parent.nextMonth('"+csLangIn+"', "+bSlcOnlyFutureDaysIn+")\" href=\"javascript:void(0)\">&gt;</A>";
	calendarString += "    </TD>";
	/************************* print days of week */
	calendarString += "  </TR>";
	calendarString += "  <TR>";

	var nbDaysInWeek = 0;
	var nDate = new Date(dYear, dMonth-1, dDay);
	// get day of week for date entered
	nDayNumberInWeek = nDate.getDay();
	// set date to first day of month
	nDate.setDate(1);
	nbDaysInWeek = nDate.getDay();
	
	nDate.setDate(nDate.getDate()-nbDaysInWeek-1); //set date to sunday date for
	
	// print days of week
	for(i=0; i<7; i++)
	{
//		if(nDayNumberInWeek == i)
//			calendarString += "    <TD class=\"smallBlueBold\" width=\"20\" height=\"20\">"+ days[calendarLang][i].substr(0, 3) +"</TD>";
//		else
			calendarString += "    <TD class=\"smallBlue\" width=\"20\" height=\"20\">"+ days[calendarLang][i].substr(0, 3) +"</TD>";	
	}
	calendarString += "  </TR>";

    for(w=0; w<6; w++)
	{
		calendarString +="<tr>\n";
        for(wd=0; wd<7; wd++)
		{
			// calculates the date to put in the cell
			nDate.setDate( nDate.getDate() + 1 );
			nYear = nDate.getFullYear();
			
			var strDateCell = nYear+"-"+FormatDayToString(nDate.getMonth()+1)+"-"+FormatDayToString(nDate.getDate());//yyyy-mm-dd

			if(nDate.getMonth()==(dMonth-1))
			{
				if(nDate.getMonth()==currentMonth && nDate.getDate()==currentDay && nDate.getFullYear()==currentYear)
					calendarString +="<TD align=\"center\" bgcolor=\"#96B99F\" title=\""+title[calendarLang][0]+"\"><A class=\"smallBlueBold\" href=\"#\" onclick=\"javascript:parent.printDate('"+strDateCell+"');\">"+FormatDayToString(nDate.getDate())+"</A></TD>";
				else
				{//alert(dMonth+" "+dDay+" "+dYear+" "+(nDate.getMonth()+1)+" "+nDate.getDate()+" "+nDate.getFullYear());
					if((nDate.getMonth()+1)==dMonth && nDate.getDate()==dDay && nDate.getFullYear()==dYear && bIsInputVal)
						calendarString +="<TD align=\"center\" title=\""+title[calendarLang][1]+"\"><A class=\"smallOrangeBold\" href=\"javascript:void(0)\" onclick=\"javascript:parent.printDate('"+strDateCell+"');\">"+FormatDayToString(nDate.getDate())+"</A></TD>";
					else
						if(bSlcOnlyFutureDaysIn)
							if(isDateFutureDay(nDate))
								calendarString +="<TD align=\"center\"><A class=\"smallBlueNoUnder\" href=\"javascript:void(0)\" onclick=\"javascript:parent.printDate('"+strDateCell+"');\">"+FormatDayToString(nDate.getDate())+"</A></TD>";
							else
								calendarString +="<TD align=\"center\" class=\"smallGrayBold\">"+FormatDayToString(nDate.getDate())+"</TD>";
						else
							calendarString +="<TD align=\"center\"><A class=\"smallBlueNoUnder\" href=\"javascript:void(0)\" onclick=\"javascript:parent.printDate('"+strDateCell+"');\">"+FormatDayToString(nDate.getDate())+"</A></TD>";
				}
			}
			else
			{
				calendarString +="<TD class=\"cal_content\">&nbsp;</TD>";
			}
		}
	
		calendarString +="</tr>\n";
	}
	
//	calendarString += "<tr><td colspan=\"7\" align=\"center\" class=\"cal_content\"><a href='#' onclick='top.closeCal();return false;'>close</a></td></tr>"

	calendarString +="</TBODY>";
	calendarString +="</TABLE>";

	return calendarString;
}


function GetDateValue(inputDateFieldIn)
{
	var reDateFormat = /^\d{4}-\d{2}-\d{2}$/;
	if (inputDateField.value.search(reDateFormat)==-1) {//if match failed
		//alert("Invalid date format use (yyyy-mm-dd)");
		return new Date();
	}
	else {
		var csDateTokens = inputDateField.value.split("-"); //split using minus char as delimiter
		return new Date(csDateTokens[0], (csDateTokens[1]-1), csDateTokens[2]);
	}
	
}

function hideFrame()
{
  if (ie) {
  if ( document.all['calFrame'].style.visibility == 'visible' )
      document.all['calFrame'].style.visibility = 'hidden';
  } else if (n6){
		if ( document.getElementById('calFrame').style.visibility == 'visible' )
      document.getElementById('calFrame').style.visibility = 'hidden';
  }
}

function updateFrame( csCalendarHTML )
{
	if(ie){
    document.frames['calFrame'].document.open();
    document.frames['calFrame'].document.write(csCalendarHTML);
    document.frames['calFrame'].document.close();
	} else if(n6){
	  window['calFrame'].document.open();
    window['calFrame'].document.write(csCalendarHTML);
    window['calFrame'].document.close();
	}

  if (ie) {
		if ( document.all['calFrame'].style.visibility == 'hidden' )
      document.all['calFrame'].style.visibility = 'visible';
  } else if (n6){
		if ( document.getElementById('calFrame').style.visibility == 'hidden' )
      document.getElementById('calFrame').style.visibility = 'visible';
  }
}

function printCalendar(eventIn, inputObj, bSlcOnlyFutureDaysIn, csLanguage){

	inputDateField = document.getElementById(inputObj);

	var inputDate = GetDateValue(inputDateField);

//	alert(inputDateField.offsetWidth+inputDateField.offsetLeft); //position in X Axis
//	alert(document.getElementById("calendar").offsetTop);
//	alert(inputDateField.size+" "+inputDateField.offsetWidth+" "+inputDateField.offsetHeight+" "+inputDateField.offsetTop+" "+inputDateField.offsetLeft);
//	var browserVer=parseInt(navigator.appVersion); 
//	alert(browserVer);

	// top left corner position of the calendar
	document.getElementById("calFrame").style.position = "absolute";
	document.getElementById("calFrame").style.top  = eventIn.clientY;
	document.getElementById("calFrame").style.left = eventIn.clientX;

	var csCalendar = HTMLheader() + buildCalendar(inputDate.getDate(), (inputDate.getMonth()+1), inputDate.getFullYear(), 1, bSlcOnlyFutureDaysIn, csLanguage) + HTMLfooter();
	
	updateFrame( csCalendar );
	

//	bCalOpen = 0;
//	clearTimeout(nCalTimeOut);
//	setTimeout("bCalOpen = 1", 2000);
}

function printDate(csDate){

	inputDateField.value = csDate;
	
	hideCalendar();
}

function prevMonth(csLangIn, bSlcOnlyFutureDaysIn){
	nSlcDay   = 1;
	nSlcMonth--;
	if(nSlcMonth < 1)
	{
		nSlcMonth = 12;
		nSlcYear--;
	}

	var csCalendar = HTMLheader() + buildCalendar(nSlcDay, nSlcMonth, nSlcYear, 0, bSlcOnlyFutureDaysIn, csLangIn) + HTMLfooter();

	updateFrame( csCalendar );

//	bCalOpen = 0;
//	clearTimeout(nCalTimeOut);
//	setTimeout("bCalOpen = 1", 2000);
}

function nextMonth(csLangIn, bSlcOnlyFutureDaysIn){
	nSlcDay   = 1;
	nSlcMonth++;
	if(nSlcMonth > 12)
	{
		nSlcMonth = 1;
		nSlcYear++;
	}

	var csCalendar = HTMLheader() + buildCalendar(nSlcDay, nSlcMonth, nSlcYear, 0, bSlcOnlyFutureDaysIn, csLangIn) + HTMLfooter();

	updateFrame( csCalendar );

	
// 	bCalOpen = 0;
// 	clearTimeout(nCalTimeOut);
// 	setTimeout("bCalOpen = 1", 2000);
}

function isDateFutureDay(nDateIn){
	if(nDateIn > now)
		return true;
	else
		return false;
}

function hideCalendar()
{
	hideFrame();

	bCalOpen = 0;
}

function closeCal(){
//alert(nSlcDay+" "+nSlcMonth+" "+nSlcYear);
	if(/*divIdCalendar && */bCalOpen)
	{
//		nCalTimeOut = setTimeout("hideCalendar()", 10);
	}
	
	bCalOpen = 0;
}

function HTMLheader(){
  return '<html><head><title>Calendar</title><LINK href=\"http://secure.globaltsg.com/Shared/styles/myCalendar.css\" type=\"text/css\" rel=\"stylesheet\" />\n\
</head><body>';
}

function HTMLfooter(){
  return '</body></html>';
}
