var calendar = null; // remember the calendar object so that we reuse it and
                     // avoid creation other calendars.
                     
function checkCalendar(ev) {
	var el = is_ie ? getElement(ev) : getTargetElement(ev);
	for (; el != null; el = el.parentNode)
	// FIXME: allow end-user to click some link without closing the
	// calendar.  Good to see real-time stylesheet change :)
	if (el == calendar.element || el.tagName == "A") break;
		if (el == null) {
		// calls closeHandler which should hide the calendar.
		calendar.callCloseHandler();
		stopEvent(ev);
	}
}
	
function selected(cal, date) {
	cal.sel.value = date; // just update the date in the input field.
}

function closeHandler(cal) {
	cal.hide();                        // hide the calendar

	// don't check mousedown on document anymore (used to be able to hide the
	// calendar when someone clicks outside it, see the showCalendar function).
	removeEvent(document, "mousedown", checkCalendar);
}

function showCalendar(id, format) {
			
		
		  var el = document.getElementById(id);
		  var datDate = el.value
			if (!IsDate(datDate)){
				var oDate = new Date();
				
				var day = oDate.getDate();
				var month = oDate.getMonth() + 1;
				var year = oDate.getFullYear();
				
				datDate = String(day + '-' + month + '-' + year);
		  } else {
			  var yearpart = String(datDate);
			  var firstdatepart = yearpart.substring(0,yearpart.lastIndexOf("/")+1)
			
			  yearpart = yearpart.substring(yearpart.lastIndexOf("/")+1)
			
			  if (yearpart.length == 2) {
				  yearpart = parseInt(yearpart, 10);
				  if (yearpart<70){
					yearpart += 2000
				  }
				  else {
					yearpart += 1900
				  }
				  datDate = firstdatepart + yearpart
			  }
		  }
		  if (calendar != null) {
		    // we already have some calendar created
		    calendar.hide();                 // so we hide it first.
		  } else {
		    // first-time call, create the calendar.
		    var cal = new Calendar(true, null, selected, closeHandler);
		    calendar = cal;                  // remember it in the global var
		    cal.setRange(1900, 2070);        // min/max year allowed.
		  }
		  calendar.setDateFormat(format);    // set the specified date format
		  calendar.parseDate(datDate);      // try to parse the text in field
		  calendar.sel = el;                 // inform it what input field we use
		  calendar.showAtElement(el);        // show the calendar below it

		  // catch "mousedown" on document
		  addEvent(document, "mousedown", checkCalendar);
		  return false;
		}



function IsDate(DateToCheck){
if(DateToCheck==""){return false;}
var m_strDate = FormatDate(DateToCheck);
if(m_strDate==""){
return false;
}
var m_arrDate = m_strDate.split("/");
var m_DAY = m_arrDate[0];
var m_MONTH = m_arrDate[1];
var m_YEAR = m_arrDate[2];
if(m_YEAR.length > 4){return false;}
m_strDate = m_MONTH + "/" + m_DAY + "/" + m_YEAR;
var testDate=new Date(m_strDate);
if(testDate.getMonth()+1==m_MONTH){
return true;
} 
else{
return false;
}
}//end function




function FormatDate(DateToFormat,FormatAs){
if(DateToFormat==""){return"";}
if(!FormatAs){FormatAs="dd/mm/yyyy";}

var strReturnDate;
FormatAs = FormatAs.toLowerCase();
DateToFormat = DateToFormat.toLowerCase();
var arrDate
var arrMonths = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var strMONTH;
var Separator;

while(DateToFormat.indexOf("st")>-1){
DateToFormat = DateToFormat.replace("st","");
}

while(DateToFormat.indexOf("nd")>-1){
DateToFormat = DateToFormat.replace("nd","");
}

while(DateToFormat.indexOf("rd")>-1){
DateToFormat = DateToFormat.replace("rd","");
}

while(DateToFormat.indexOf("th")>-1){
DateToFormat = DateToFormat.replace("th","");
}

if(DateToFormat.indexOf(".")>-1){
Separator = ".";
}

if(DateToFormat.indexOf("-")>-1){
Separator = "-";
}


if(DateToFormat.indexOf("/")>-1){
Separator = "/";
}

if(DateToFormat.indexOf(" ")>-1){
Separator = " ";
}

arrDate = DateToFormat.split(Separator);
DateToFormat = "";
	for(var iSD = 0;iSD < arrDate.length;iSD++){
		if(arrDate[iSD]!=""){
		DateToFormat += arrDate[iSD] + Separator;
		}
	}
DateToFormat = DateToFormat.substring(0,DateToFormat.length-1);
arrDate = DateToFormat.split(Separator);

if(arrDate.length < 3){
return "";
}

var DAY = arrDate[0];
var MONTH = arrDate[1];
var YEAR = arrDate[2];




if(parseFloat(arrDate[1]) > 12){
DAY = arrDate[1];
MONTH = arrDate[0];
}

if(parseFloat(DAY) && DAY.toString().length==4){
YEAR = arrDate[0];
DAY = arrDate[2];
MONTH = arrDate[1];
}


for(var iSD = 0;iSD < arrMonths.length;iSD++){
var ShortMonth = arrMonths[iSD].substring(0,3).toLowerCase();
var MonthPosition = DateToFormat.indexOf(ShortMonth);
	if(MonthPosition > -1){
	MONTH = iSD + 1;
		if(MonthPosition == 0){
		DAY = arrDate[1];
		YEAR = arrDate[2];
		}
	break;
	}
}

var strTemp = YEAR.toString();
if(strTemp.length==2){

	if(parseFloat(YEAR)>40){
	YEAR = "19" + YEAR;
	}
	else{
	YEAR = "20" + YEAR;
	}

}


	if(parseInt(MONTH)< 10 && MONTH.toString().length < 2){
	MONTH = "0" + MONTH;
	}
	if(parseInt(DAY)< 10 && DAY.toString().length < 2){
	DAY = "0" + DAY;
	}
	switch (FormatAs){
	case "dd/mm/yyyy":
	return DAY + "/" + MONTH + "/" + YEAR;
	case "mm/dd/yyyy":
	return MONTH + "/" + DAY + "/" + YEAR;
	case "dd/mmm/yyyy":
	return DAY + " " + arrMonths[MONTH -1].substring(0,3) + " " + YEAR;
	case "mmm/dd/yyyy":
	return arrMonths[MONTH -1].substring(0,3) + " " + DAY + " " + YEAR;
	case "dd/mmmm/yyyy":
	return DAY + " " + arrMonths[MONTH -1] + " " + YEAR;	
	case "mmmm/dd/yyyy":
	return arrMonths[MONTH -1] + " " + DAY + " " + YEAR;
	}

return DAY + "/" + strMONTH + "/" + YEAR;;

} //End Function

