var d_dtmViewDate = new Date();
var d_dtmDateMIN = new Date();
var d_dtmDateMAX = new Date();
var d_intViewMonth = d_dtmViewDate.getMonth();
var d_intViewDayOfMonth = d_dtmViewDate.getDate();
var d_lngViewYear = d_dtmViewDate.getFullYear();
var d_objPrevElement = new Object();
var d_dtmToday = new Date();
var d_dtmDefault = new Date();
var d_dtmSelectedDate = false

var d_strMonth = new Array()

d_strMonth[0]="January"
d_strMonth[1]="February"
d_strMonth[2]="March"
d_strMonth[3]="April"
d_strMonth[4]="May"
d_strMonth[5]="June"
d_strMonth[6]="July"
d_strMonth[7]="August"
d_strMonth[8]="September"
d_strMonth[9]="October"
d_strMonth[10]="November"
d_strMonth[11]="December"


function fToggleColor(a_objElement) {
	var toggleColor = "#ff0000";
	if (a_objElement.id == "calDateText") {
	if (a_objElement.color == toggleColor) {
	a_objElement.color = "";
	}
	else {
	a_objElement.color = toggleColor;
	}
	} else if (a_objElement.id == "calCell") {
	for (var i in a_objElement.children) {
	if (a_objElement.children[i].id == "calDateText") {
	if (a_objElement.children[i].color == toggleColor) {
	a_objElement.children[i].color = "";
	} else {
	a_objElement.children[i].color = toggleColor;
	            }
	         }
	      }
	   }
}


function fSetSelectedDay(a_objElement){
	//add a switch statment, to handel if either a date cell or date span
	//has been clicked
	
	//alert('Selected element: ' + a_objElement.firstChild.nodeValue)
	switch(a_objElement.id){
	case 'calCell':
		//this is the <td> element
		//alert("1");
		//alert(a_objElement.firstChild.firstChild.nodeValue);
		if (!isNaN(parseInt(a_objElement.firstChild.firstChild.nodeValue))) {
			//alert(document.getElementById("calSelectedDate"));
			a_objElement.bgColor = "#c0c0c0";
			d_objPrevElement.bgColor = "";

			document.getElementById("calSelectedDate").value = parseInt(a_objElement.firstChild.firstChild.nodeValue);
			d_objPrevElement = a_objElement;
			//because the jscript getmonth, returns the month numbers starting from 0, eg jan=0,
			//the month portion of the window returnValue is incremented by 1, so that it represents a real world month number
			//alert('d_lngViewYear:' + d_lngViewYear)
			//alert('d_intViewMonth:' + d_intViewMonth)
			//alert('document.all.calSelectedDate.value:' + document.getElementById("calSelectedDate").value)
			
			//##d_dtmSelectedDate = new Date(d_lngViewYear,d_intViewMonth,document.all.calSelectedDate.value)
			d_dtmSelectedDate = new Date(d_lngViewYear,d_intViewMonth,document.getElementById("calSelectedDate").value)
			//alert('fSetSelectedDay:d_dtmSelectedDate:' + d_dtmSelectedDate)
			unLoadMe();
		}
		else{
			alert('NaN')
		}
		break
	case 'calDateText':
		//alert("2");
		//alert(a_objElement.firstChild.nodeValue);
		if (!isNaN(parseInt(a_objElement.firstChild.nodeValue))) {
			//alert(document.getElementById("calSelectedDate"));
			a_objElement.bgColor = "#c0c0c0";
			d_objPrevElement.bgColor = "";

			document.getElementById("calSelectedDate").value = parseInt(a_objElement.firstChild.nodeValue);
			d_objPrevElement = a_objElement;
			//because the jscript getmonth, returns the month numbers starting from 0, eg jan=0,
			//the month portion of the window returnValue is incremented by 1, so that it represents a real world month number
			//alert('d_lngViewYear:' + d_lngViewYear)
			//alert('d_intViewMonth:' + d_intViewMonth)
			//alert('document.all.calSelectedDate.value:' + document.getElementById("calSelectedDate").value)
			
			//##d_dtmSelectedDate = new Date(d_lngViewYear,d_intViewMonth,document.all.calSelectedDate.value)
			d_dtmSelectedDate = new Date(d_lngViewYear,d_intViewMonth,document.getElementById("calSelectedDate").value)
			//alert('fSetSelectedDay:d_dtmSelectedDate:' + d_dtmSelectedDate)
			unLoadMe();
		}
		else{
			alert('NaN')
		}
		break;
	}
	
}

function fGetDaysInMonth(iMonth, iYear) {
var dPrevDate = new Date(iYear, iMonth, 0);
return dPrevDate.getDate();
}
function fBuildCal(iYear, iMonth, iDayStyle) {
	var aMonth = new Array();
	aMonth[0] = new Array(7);
	aMonth[1] = new Array(7);
	aMonth[2] = new Array(7);
	aMonth[3] = new Array(7);
	aMonth[4] = new Array(7);
	aMonth[5] = new Array(7);
	aMonth[6] = new Array(7);
	//var dCalDate = new Date(iYear, iMonth-1, 1);
	var dCalDate = new Date(iYear, iMonth, 1);
	var iDayOfFirst = dCalDate.getDay();
	var iDaysInMonth = fGetDaysInMonth(iMonth+1, iYear);
	var iVarDate = 1;
	var i, d, w;
	if (iDayStyle == 2) {
		aMonth[0][0] = "Sunday";
		aMonth[0][1] = "Monday";
		aMonth[0][2] = "Tuesday";
		aMonth[0][3] = "Wednesday";
		aMonth[0][4] = "Thursday";
		aMonth[0][5] = "Friday";
		aMonth[0][6] = "Saturday";
	} else if (iDayStyle == 1) {
		aMonth[0][0] = "Sun";
		aMonth[0][1] = "Mon";
		aMonth[0][2] = "Tue";
		aMonth[0][3] = "Wed";
		aMonth[0][4] = "Thu";
		aMonth[0][5] = "Fri";
		aMonth[0][6] = "Sat";
	} else {
		aMonth[0][0] = "Su";
		aMonth[0][1] = "Mo";
		aMonth[0][2] = "Tu";
		aMonth[0][3] = "We";
		aMonth[0][4] = "Th";
		aMonth[0][5] = "Fr";
		aMonth[0][6] = "Sa";
	}
	for (d = iDayOfFirst; d < 7; d++) {
		aMonth[1][d] = iVarDate;
		iVarDate++;
	}
	for (w = 2; w < 7; w++) {
		for (d = 0; d < 7; d++) {
			if (iVarDate <= iDaysInMonth) {
			aMonth[w][d] = iVarDate;
			iVarDate++;
		      }
		   }
	}	//close for w
	return aMonth;
}
function fDrawCal(a_dtmDate, iCellWidth, iCellHeight, sDateTextSize, sDateTextWeight, iDayStyle) {
	var myMonth;
	var l_strTemp
	var l_bolOverFlow = false
	if (a_dtmDate<d_dtmDateMIN ){
			a_dtmDate=d_dtmDateMIN
			//java months are numbered from zero=jan
			d_dtmViewDate=a_dtmDate
			l_bolOverFlow = true
	}
	else{
		if (a_dtmDate>d_dtmDateMAX){
			a_dtmDate=d_dtmDateMAX
			d_dtmViewDate=d_dtmDateMAX
			l_bolOverFlow = true
		}
		
	}
	
	
	myMonth = fBuildCal(a_dtmDate.getFullYear(), a_dtmDate.getMonth(), iDayStyle);

	d_intViewMonth =d_dtmViewDate.getMonth()
	d_lngViewYear =d_dtmViewDate.getFullYear()
	document.getElementById("calendarMonth").innerHTML = d_strMonth[d_intViewMonth] + ", " + d_lngViewYear
	
	//alert(d_dtmToday.getFullYear() + "-" + d_dtmToday.getMonth())
	//alert(a_dtmDate.getFullYear())
	//alert(a_dtmDate.getFullYear())

	// useing innerhtml l_strTemp = "<DIV id='calendar_area'>"
	l_strTemp = ""
	l_strTemp = l_strTemp + "<TABLE border='1' bordercolorlight=black bordercolordark=black cellspacing=0>"
	l_strTemp += "<TR>";
	l_strTemp += "<TD align='center' style='FONT-FAMILY:Arial;FONT-SIZE:12px;FONT-WEIGHT: bold'>" + myMonth[0][0] + "</td>";
	l_strTemp += "<TD align='center' style='FONT-FAMILY:Arial;FONT-SIZE:12px;FONT-WEIGHT: bold'>" + myMonth[0][1] + "</td>";
	l_strTemp += "<TD align='center' style='FONT-FAMILY:Arial;FONT-SIZE:12px;FONT-WEIGHT: bold'>" + myMonth[0][2] + "</td>";
	l_strTemp += "<TD align='center' style='FONT-FAMILY:Arial;FONT-SIZE:12px;FONT-WEIGHT: bold'>" + myMonth[0][3] + "</td>";
	l_strTemp += "<TD align='center' style='FONT-FAMILY:Arial;FONT-SIZE:12px;FONT-WEIGHT: bold'>" + myMonth[0][4] + "</td>";
	l_strTemp += "<TD align='center' style='FONT-FAMILY:Arial;FONT-SIZE:12px;FONT-WEIGHT: bold'>" + myMonth[0][5] + "</td>";
	l_strTemp += "<TD align='center' style='FONT-FAMILY:Arial;FONT-SIZE:12px;FONT-WEIGHT: bold'>" + myMonth[0][6] + "</td>";
	l_strTemp += "</TR>";
	//for each week row
	for (var w = 1; w < 7; w++) {
		l_strTemp = l_strTemp + "<TR>"
		for (d = 0; d < 7; d++) {
			//l_strTemp += "<TD align='left' valign='top' width='" + iCellWidth + "' height='" + iCellHeight + "' id=calCell style='cursor:pointer;' onMouseOver='fToggleColor(this)' onMouseOut='fToggleColor(this)' onclick=fSetSelectedDay(this) ";
			l_strTemp += "<TD align='left' valign='top' width='" + iCellWidth + "' height='" + iCellHeight + "' id='calCell' ";
			if (!isNaN(myMonth[w][d])) {
				//its a day of the current month, add some fancy stuff to the opening <TD
				l_strTemp += " style='cursor:pointer;' onMouseOver='fToggleColor(this)' onMouseOut='fToggleColor(this)' "
				
				var l_strFont = ''
				var l_strTDClass = ''
				l_bolValid= true
				
				//var a_dtmTempDate=new Date(d_lngViewYear,d_intViewMonth,myMonth[w][d])
				var a_dtmTempDate=new Date(a_dtmDate.getFullYear(),a_dtmDate.getMonth(),myMonth[w][d])
				//alert(a_dtmTempDate)
				if(a_dtmTempDate < d_dtmDateMIN){
					//
					l_bolValid = false
					l_strTDClass = "class='notthismonth' "
					//alert(a_dtmTempDate +  " ; min " + l_bolValid)
				}
				
				if(a_dtmTempDate > d_dtmDateMAX){
					//
					l_bolValid = false
					l_strTDClass = "class='notthismonth' "
					//alert(a_dtmTempDate +  " ; max " + l_bolValid)
				}
						
				l_strFont = "<SPAN id=calDateText style='FONT-FAMILY:Arial;FONT-SIZE:" + sDateTextSize + ";FONT-WEIGHT:" + sDateTextWeight + "' ";
				if(l_bolValid==true){
					
					l_strTDClass =  " onclick='fSetSelectedDay(this);' "
					
					//test if the current day is today
					//if((d_lngViewYear==d_dtmToday.getFullYear())&&(d_intViewMonth==d_dtmToday.getMonth())&&(myMonth[w][d]==d_dtmToday.getDate())){
					//set border
					//	l_strTemp += " bordercolor='red' "
					//}
				
					//test if the current day is the default day
					if(d_dtmDefault && (d_lngViewYear==d_dtmDefault.getFullYear()) && (d_intViewMonth==d_dtmDefault.getMonth()) && (myMonth[w][d]==d_dtmDefault.getDate())){
						//set the class for default date
						l_strTDClass += "class='selected' "
						//alert('Selected')
					}
					else{
						//test for today
						//test if the current day is today
						if((d_lngViewYear==d_dtmToday.getFullYear())&&(d_intViewMonth==d_dtmToday.getMonth())&&(myMonth[w][d]==d_dtmToday.getDate())){
						//set border
							l_strTDClass += " class='today' "
						}
						else{
							//set the day format 
							if((d==0)||(d==6)){
								l_strTDClass += "class='weekend' "
							}
							else{
								l_strTDClass += "class='weekday' "
							}
						}
					}
					
					
					//l_strTemp += "<SPAN id=calDateText onMouseOver='fToggleColor(this)' style='cursor:pointer;;FONT-FAMILY:Arial;FONT-SIZE:" + sDateTextSize + ";FONT-WEIGHT:" + sDateTextWeight + "' onMouseOut='fToggleColor(this)' onclick='fSetSelectedDay(this);window.close()'>" + myMonth[w][d] + "</span>";
						//#//l_strFont += " onMouseOver='fToggleColor(this)' onMouseOut='fToggleColor(this)' onclick='fSetSelectedDay(this);' ";
						l_strFont += " onMouseOver='fToggleColor(this)' onMouseOut='fToggleColor(this)' ";
				}
				else{
					//#//l_strFont += " onclick='alert(\"This date is outside the acceptable range.Please select another date.\")'; "
					l_strTemp += " onclick='alert(\"This date is outside the acceptable range.Please select another date.\")'; "
				}
				l_strTemp += l_strTDClass + ">" + l_strFont + ">" + myMonth[w][d] + "</span>";
				
				
			} else {
				//close the openening <TD
				l_strTemp += "class='notthismonth'>"
				//l_strTemp += "<span id=calDateText onMouseOver='fToggleColor(this)' style='cursor:pointer;;FONT-FAMILY:Arial;FONT-SIZE:" + sDateTextSize + ";FONT-WEIGHT:" + sDateTextWeight + "' onMouseOut='fToggleColor(this)' onclick=fSetSelectedDay(this)>&nbsp;</font>";
				l_strTemp += "<span id=calDateText>&nbsp;</span>";
			}
			l_strTemp += "</TD>"
		}
		l_strTemp += "</TR>";
	}
	l_strTemp += "</TABLE>"
	//l_strTemp += "</DIV>"
	//alert('return cal')
	return l_strTemp
}

function fUpdateCal(iYear, iMonth) {
	myMonth = fBuildCal(iYear, iMonth);
	d_objPrevElement.bgColor = "";
	document.getElementById("calSelectedDate").value = "";
	for (w = 1; w < 7; w++) {
		for (d = 0; d < 7; d++) {
			if (!isNaN(myMonth[w][d])) {
				calDateText[((7*w)+d)-7].innerText = myMonth[w][d];
			} 
			else {
				calDateText[((7*w)+d)-7].innerText = " ";
			}
		}	//close 'd' for loop
   }	//close 'w' for loop
}



function unLoadMe(){
	if (d_dtmSelectedDate){
		d_objReturnElement.value = d_dtmSelectedDate.getDate() + "/" + (d_dtmSelectedDate.getMonth() + 1) + "/" + d_dtmSelectedDate.getFullYear();
	}
	else{
		if (d_dtmDefault){
			d_objReturnElement.value = d_dtmDefault.getDate() + "/" + (d_dtmDefault.getMonth() + 1) + "/" + d_dtmDefault.getFullYear();
		}
		else{
			d_objReturnElement.value = ""
		}
	}
	
	ajaxCalClose();
}


function loadCal(){
	if(d_dtmDateMIN==false){
		d_dtmDateMIN = d_dtmDefault
	}
	if(d_dtmDateMAX==false){
		d_dtmDateMAX = new Date()
		d_dtmDateMAX.setMonth(d_dtmDateMAX.getMonth()+18)
	}
	if(!d_dtmDefault){
		d_dtmViewDate = new Date();
	}
	document.getElementById("calSelectedDate").value = d_dtmDefault
	document.getElementById("calendar_area").innerHTML=fDrawCal(d_dtmViewDate, 30, 30, "12px", "bold", 1);
}

//create a variable to hold the XMLHttp object
var xmlhttp;
var d_objReturnElement

function ajaxCal(a_objElement,a_minDD_MM_YYYY,a_maxDD_MM_YYYY){
	
	//create the modal control elements
	createModalArea('ajax_cal');
	 
	document.onmousedown=dragCalendar;
	document.onmouseup=new Function("d_bolDrag=false");

	d_dtmDateMIN= getDateObj(a_minDD_MM_YYYY)
	d_dtmDateMAX= getDateObj(a_maxDD_MM_YYYY)
	d_dtmDefault= getDateObj(a_objElement.value)
	
	d_objReturnElement = a_objElement
	xmlhttp = getAjaxObject();
	xmlhttp.onreadystatechange=ajaxCal_stateChanged;
	xmlhttp.open("GET","/ol_booking/system/ajx_MinMaxCalendar.asp",true);
	xmlhttp.send(null);
}


function ajaxCalClose() {
	document.getElementById("ajax_cal").style.display = "none";
	document.getElementById('ajax_cal').innerHTML =""
	document.onmousedown='';
	document.onmouseup='';
	hideModal('ajax_cal');

}


function ajaxCal_stateChanged(){
	switch (xmlhttp.readyState){
	case 0:
		break
	case 1:
		break
	case 2:
		//loadCal();
		break
	case 3:
		break
	case 4:
		document.getElementById('ajax_cal').innerHTML=xmlhttp.responseText;
		while(document.getElementById('currentMonth')== null){
		//do nothing but wait
		}
		loadCal();
		showModal('ajax_cal',380,380);
		break
	}
}


var ie = document.all;
var nn6 = document.getElementById &&! document.all;
 
var d_bolDrag = false;
var x, y;
var d_objDragElement;
 
function moveCalendar( e ) {
  if( d_bolDrag ) {
	
    d_objDragElement.style.left = (nn6 ? tx + e.clientX - x : tx + event.clientX - x) + 'px'
    d_objDragElement.style.top  = (nn6 ? ty + e.clientY - y : ty + event.clientY - y)+ 'px'
    //alert(tx + ' ' + x)
    return false;
  }
  
}
 
function dragCalendar( e ) {
	//alert('mouse down')
  var fobj       = nn6 ? e.target : event.srcElement;
  var topelement = nn6 ? "HTML" : "BODY";
	//if(isChildOf(fobj,getDOMObj('ajax_cal'))){
	if(isChildOf(fobj,getDOMObj('ajax_cal'))){
  
		while (fobj.tagName != topelement && fobj.className != "dragme") {
			fobj = nn6 ? fobj.parentNode : fobj.parentElement;
		}
		//alert(fobj.tagName)
		if (fobj.className=="dragme") {
			d_bolDrag = true;
			//d_objDragElement = document.getElementById("ajax_cal");
			d_objDragElement = document.getElementById("ajax_cal");
			tx = parseInt(d_objDragElement.style.left+0);
			ty = parseInt(d_objDragElement.style.top+0);
			x = nn6 ? e.clientX : event.clientX;
			y = nn6 ? e.clientY : event.clientY;
			document.onmousemove=moveCalendar;
			return false;
		}
	}
	else{
		document.onmousemove='';
		return
	}
}
 
