var day, month, year;
var fieldInFormOfInterest; // Ha!
var cal_window;
var imageLeft, imageTop;
var dateFormat = "mm/dd/yyyy"; //Valid Formats:  ""  "yyyy/mm/dd"  "mm/dd/yyyy"  "dd/mm/yyyy"  
var functionName
document.writeln("<div id=\"CLRCAL1\" style=\"background-color:white;position:absolute;z-index=15;display:none;\"></div>");

function setDate(dateField, id, lang, funcName) {
	this.inDate = dateField.value;
	fieldInFormOfInterest = dateField;

	functionName = funcName
   // SET DAY MONTH AND YEAR TO TODAY'S DATE
   	var now   = new Date();
   	day   = now.getDate();
   	month = now.getMonth();
   	year  = now.getFullYear();

   // IF A DATE WAS PASSED IN THEN PARSE THAT DATE
   	if (inDate.indexOf('/')) {
 
 	if (dateFormat=="yyyy/mm/dd"){
	
		var inYear = parseInt(inDate.substring(0,inDate.indexOf("/")));
	    	
		var inMonth = inDate.substring(inDate.indexOf("/") + 1, inDate.lastIndexOf("/"));
    	if (inMonth.substring(0,1) == "0" && inMonth.length > 1)
	    	inMonth = inMonth.substring(1,inMonth.length);
    	inMonth = parseInt(inMonth);
		   
   		var inDay = inDate.substring(inDate.lastIndexOf("/") + 1, inDate.length);
		if (inDay.substring(0,1) == "0" && inDay.length > 1)
    		inDay = inDay.substring(1,inDay.length);
    	inDay = parseInt(inDay);	
		
	}else if (dateFormat=="mm/dd/yyyy"){
       	var inMonth = inDate.substring(0,inDate.indexOf("/"));
        if (inMonth.substring(0,1) == "0" && inMonth.length > 1)
            inMonth = inMonth.substring(1,inMonth.length);
        inMonth = parseInt(inMonth);
    	var inDay   = inDate.substring(inDate.indexOf("/") + 1, inDate.lastIndexOf("/"));
        if (inDay.substring(0,1) == "0" && inDay.length > 1)
        	inDay = inDay.substring(1,inDay.length);
        inDay = parseInt(inDay);
	    var inYear  = parseInt(inDate.substring(inDate.lastIndexOf("/") + 1, inDate.length));
	}else if (dateFormat=="mm/dd/yyyy"){ 
       	var inDay = inDate.substring(0,inDate.indexOf("/"));
        if (inDay.substring(0,1) == "0" && inDay.length > 1)
            inDay = inDay.substring(1,inDay.length);
        inDay = parseInt(inDay);
    	var inMonth   = inDate.substring(inDate.indexOf("/") + 1, inDate.lastIndexOf("/"));
        if (inMonth.substring(0,1) == "0" && inMonth.length > 1)
        	inMonth = inMonth.substring(1,inMonth.length);
        inMonth = parseInt(inMonth);
	    var inYear  = parseInt(inDate.substring(inDate.lastIndexOf("/") + 1, inDate.length));		
	}
    	if (inDay) {
    		day = inDay;
    	}
    	if (inMonth) {
    	    month = inMonth-1;
    	}
    	if (inYear) {
    		year = inYear;
    	}
   }
    imageLeft = getImagePageLeft(id);
	imageTop = getImagePageTop(id);
   	cal_window = document.getElementById("CLRCAL1");
	displayCalendar(day, month, year, lang);
}	

function changeDate(action) {
	if (action == "prevYear") {
		year--;							
	}
	else if (action == "nextYear") {
		year++;
	}
	else if (action == "prevMonth") {
      if (month == 0) {
			month = 11;
			if (year > 1000) {
				year--;
			}
      }
      else {
      	month--;
      }
	}
	else if (action == "nextMonth") {
      if (month == 11) {
			month = 0;
			year++;
      }
      else {
			month++;
      }
	}
	else if (action == "today") {
    	var now = new Date();
	    day = now.getDate();
	    month = now.getMonth();
		year = now.getFullYear();

	}
	displayCalendar(day, month, year);
}

function isFourDigitYear(year) {
   if (year.length != 4) {
       alert ("Sorry, the year must be four-digits in length.");
       document.calControl.year.select();
       document.calControl.year.focus();
   }
   else {
       return true;
   }
}

function returnDate(theDay) {
	var dYear = "";
	day = theDay;
	
	if (day < 10) day = ("0" + day);
	month++;
	if (month < 10) month = "0" + month;
	
	dYear = year + "";
	//dYear = dYear.substring(2,4);
//	
	if (dateFormat=="yyyy/mm/dd"){
		fieldInFormOfInterest.value = year + "/" + month + "/" + day;
	}else if(dateFormat=="mm/dd/yyyy"){
		fieldInFormOfInterest.value = month + "/" + day + "/" + dYear;
	}else if(dateFormat=="dd/mm/yyyy"){
		fieldInFormOfInterest.value = + day + "/" + month + "/" + year;
	}
	cal_window.style.display = "none";
	if (functionName != null){
		functionName(fieldInFormOfInterest.value);
	}
}

function displayCalendar(day, month, year,lang) {
	day = parseInt(day);
	month = parseInt(month);
	year = parseInt(year);

	if (lang == 1 || lang == null) {
		var monthArr = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
	} else {
		var monthArr = new Array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre');
	}		
	var days = getDaysInMonth(month+1, year);
	var firstOfMonth = new Date(year, month, 1);
	var startingPos = firstOfMonth.getDay();

	var curDayOfWeek = 0;
	var curDayOfMonth = 1;
	var curWeek= 0;

	var now = new Date();
	var nowDay = now.getDate();
	var nowMonth = now.getMonth();
	var nowYear = now.getFullYear();


	var outStr = "";
		
	outStr += "<div align='center' id=\"selectCal\">";
	outStr += "<table border='0' cellspacing='1' class=\"selectCaltable\">";
	
	
	outStr += "<tr><td class=\"selectCaltitle\" colspan=\"7\" align=\"center\"><span style=\"float:right\"><input type='button' name='nextMonth' value=' x ' onClick='cal_window.style.display = \"none\";if (functionName != null){functionName();}' class=\"selectCalButtonClose\" onMouseOver=\"this.className = 'selectCalButtonCloseOn';\" onMouseout=\"this.className = 'selectCalButtonClose';\"></span>" + monthArr[month] + " " + year + "</td></tr>";

	if (lang == 1 || lang == null) {	
		outStr += "<tr align='center'><td class=\"selectCaldayHeader\">S</td><td class=\"selectCaldayHeader\">M</td><td class=\"selectCaldayHeader\">T</td><td class=\"selectCaldayHeader\">W</td><td class=\"selectCaldayHeader\">T</td><td class=\"selectCaldayHeader\">F</td><td class=\"selectCaldayHeader\">S</td></tr>";
	}else{
		outStr += "<tr align='center'><td class=\"selectCaldayHeader\">D</td><td class=\"selectCaldayHeader\">L</td><td class=\"selectCaldayHeader\">M</td><td class=\"selectCaldayHeader\">M</td><td class=\"selectCaldayHeader\">J</td><td class=\"selectCaldayHeader\">V</td><td class=\"selectCaldayHeader\">S</td></tr>";
	}
	weekCount = 0
	for (var i = 0; i < startingPos + days; i++) {
		if (curDayOfWeek == 0){
		 outStr += "<tr align='center'>";
		 weekCount += 1;
		}	
	
		if (i < startingPos) {
			outStr += "<td class=\"selectCaldayBlank\">&nbsp;</td>";
			curDayOfWeek++;
		}
		else {
			if ((nowDay == curDayOfMonth) && (nowMonth == month) && (nowYear == year))
				outStr += "<td class=\"selectCalToday\" onMouseOver=\"this.className = 'selectCalDayOn';\" onMouseout=\"this.className = 'selectCalToday';\" onClick=\"returnDate(" + curDayOfMonth + ")\">" + curDayOfMonth + "</td>";
			else
				outStr += "<td class=\"selectCalDay\" onMouseOver=\"this.className = 'selectCalDayOn';\" onMouseout=\"this.className = 'selectCalDay';\" onClick=\"returnDate(" + curDayOfMonth + ")\">" + curDayOfMonth + "</td>";
			curDayOfWeek++;
			curDayOfMonth++;
		}
		if (curDayOfWeek % 7 == 0) {
			curWeek++;
			outStr += "</tr>";
			curDayOfWeek = 0
		}

	}
	while (curDayOfWeek % 7 != 0) {
		outStr += "<td class=\"selectCaldayBlank\">&nbsp;</td>";
		curDayOfWeek++;
	}
	if(weekCount <= 5){
		outStr += "<tr align='center'>";
		for(i=0;i<7; i++){
			outStr += "<td class=\"selectCaldayBlank\">&nbsp;</td>";
		}
		outStr += "</tr>";
	}
	
	
	outStr += "<tr><td colspan=\"7\" class=\"selectCalButtonBar\">";

	outStr += "<table border='0' cellspacing='0' cellpadding=\"0\" align=\"center\" width=\"100%\">";
	outStr += "<table border='0' cellspacing='0' cellpadding=\"0\" align=\"center\" width=\"100%\">";
	outStr += "<tr><td>";	
	outStr += "<input type='button' name='prevYear' value='<<' onClick='changeDate(this.name);' class=\"selectCalButton\" onMouseOver=\"this.className = 'selectCalButtonOn';\" onMouseout=\"this.className = 'selectCalButton';\">";
	outStr += "</td>";	
	outStr += "<td>";	
	outStr += "<input type='button' name='prevMonth' value=' < ' onClick='changeDate(this.name);' class=\"selectCalButton\"onMouseOver=\"this.className = 'selectCalButtonOn';\" onMouseout=\"this.className = 'selectCalButton';\">";
	outStr += "</td>";	
	outStr += "<td width='100%' align='center'>";	
	outStr += "<input type='button' name='today' value='Today' onClick='changeDate(this.name);' class=\"selectCalButton\" onMouseOver=\"this.className = 'selectCalButtonOn';\" onMouseout=\"this.className = 'selectCalButton';\">";
	outStr += "</td>";	
	outStr += "<td>";	
	outStr += "<input type='button' name='nextMonth' value=' > ' onClick='changeDate(this.name);' class=\"selectCalButton\" onMouseOver=\"this.className = 'selectCalButtonOn';\" onMouseout=\"this.className = 'selectCalButton';\">";
	outStr += "</td>";	
	outStr += "<td>";		
	outStr += "<input type='button' name='nextYear' value='>>' onClick='changeDate(this.name);' class=\"selectCalButton\" onMouseOver=\"this.className = 'selectCalButtonOn';\" onMouseout=\"this.className = 'selectCalButton';\"><br>";
	outStr += "</td></tr>";
	outStr += "</table>";
	outStr += "</td></tr>";
	outStr += "</table>";

	outStr += "</div>";
	//alert(outStr);

	
	cal_window.innerHTML = outStr;
	cal_window.style.left = imageLeft
	cal_window.style.top = imageTop
	cal_window.style.display = "";
	
	var bottom = getWindowBottom();
	if ((bottom - cal_window.offsetHeight) < imageTop){
		imageTop = bottom - cal_window.offsetHeight -5;
		cal_window.style.top = imageTop
	}


}

function getDaysInMonth(month, year) {
   if (month==1 || month==3 || month==5 || month==7 || month==8 ||
       month==10 || month==12)  return(31);
   else if (month==4 || month==6 || month==9 || month==11) return(30);
   else if (month==2)  {
       if (isLeapYear(year)) {
           return(29);
       }
       else {
           return(28);
       }
   }
}

function isLeapYear (Year) {
	if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) {
		return (true);
	}
	else {
		return (false);
	}
}
function getImagePageLeft(img) {
  var x, obj;
    x = 0;
    obj = img;
    while (obj.offsetParent != null) {
      x += obj.offsetLeft;
      obj = obj.offsetParent;
    }
    x += obj.offsetLeft;
    return x;
}

function getImagePageTop(img) {
  var y, obj;
    y = 0;
    obj = img;
    while (obj.offsetParent != null) {
      y += obj.offsetTop;
      obj = obj.offsetParent;
    }
    y += obj.offsetTop;
    return y;
}

function getWindowBottom(){

	var tmpBottom;
	tmpBottom = document.body.clientHeight + document.body.scrollTop;
	return tmpBottom;
}
