	
var cellWidth=20;
var cellHeight=18;

var mouseOverCal = false;

// Restore the colours to restore
var preOverBackground = "" ;
var preOverColor = "" ;

// Restore the colours 
function out(el)
	{
	el.style.backgroundColor = preOverBackground ;
	el.style.color = preOverColor ;
	}
	
//TODO: Pick up the colours of the style sooner than B/W
function over(el)
{
	//TODO: var elRows = el.parentElement.parentElement.rows;
	//TODO: var elCols = elRows[1].childNodes ;
	//TODO: window.status = "cal:" + elCols[0].innerHTML + "," + elCols[0].style.backgroundColor ;
	
	preOverBackground = el.style.backgroundColor ;
	preOverColor = el.style.color ;

	//TODO: el.style.backgroundColor = elCols[0].style.backgroundColor ;
	
	el.style.background='black';
	el.style.color='white';
}

var currentlyDisplayingCalendar="";
function showCalendar(baseName,shadowLayerName,dateMillis,maxDateMillis)
{	
	iframeSetVisible(true, shadowLayerName);    
	//alert("show!");
    var selD=document.getElementById(baseName+"CalSelectD");
    var selMY=document.getElementById(baseName+"CalSelectMY");
   
    
    var d8=getNewDateObj(selD.value,selMY.value);
	//var maxd8=getNewDateObj(selD.value,selMY.value);    

    var layerName=baseName+"CalendarId";
    var str=baseName+" = new mcomCalendar('" + baseName + "',d8,shadowLayerName);";
    //alert("evaling:"+str);
    eval(str);
    str="document.getElementById(layerName).innerHTML="+baseName+".write();";
    
    eval(str);
    //showImage(baseName);
    //document.getElementById(layerName).innerHTML=baseName.write();
    if (document.getElementById) // Netscape 6 and IE 5+
    {
        var targetElement = document.getElementById(layerName);
        var shadowElement = document.getElementById(shadowLayerName);       
 		var h = targetElement.innerHTML;
		shadowElement.innerHTML = h;  
		targetElement.innerHTML="";
        shadowElement.style.visibility = "visible";
		shadowElement.style.display = "block";
		shadowElement.style.top=selD.style.top;
    }
    selectIndexes(eval(baseName));
    currentlyDisplayingCalendar=baseName;    
    
}

function iframeSetVisible(state, shadowLayerName)
{
   var IfrRef = document.getElementById('DivShim');
   if(IfrRef)
   {
	    var DivRef = document.getElementById(shadowLayerName);  
	    if(state)
	    {     
	    	IfrRef.style.display = "block";    
	    	IfrRef.style.top = DivRef.style.top;
	    	IfrRef.style.left = DivRef.style.left;	    	
	    	
	    	IfrRef.style.height = 167;
	    	IfrRef.style.width = 150;  
	    	IfrRef.style.zIndex = 10;  
	    }   	
	    else
	    {    	  
	    	IfrRef.style.display = "none";
	    }
   }
}

function getNewDateObj(D,MY){
    //var newD8 = new Date();
    var fy=MY.substring(MY.indexOf("-")+1);
    //newD8.setFullYear(fy);
    var mSelect=0;
    var monthName=MY.substring(0,MY.indexOf("-"));
    for(var i=0;i<months.length;i++){
    	var srch=months[i].substring(0,3);
    	if(srch.toLowerCase()==monthName.toLowerCase()){
	    mSelect=i;
	    break;
    	}
    }
    
    var origD=D;
    var test=getLengthFromMonth(mSelect,fy);
    if(D>test){
    	//alert(D+" is larger than "+test);
    	D=test;	
    }
    
    if(D.length<2){D="0"+D};
    if(mSelect<10){mSelect="0"+mSelect;}
    //alert(fy);
    var mm = mSelect;
    var dd = D;
    var yy = fy; //.substring(2,4);
    //fy=fy.substring(2,4);

    var dateStr=yy+", "+mm+", "+dd;
    //alert(dateStr);
    var newD8 = new Date(yy,mm,dd);
    //alert(newD8.getTime());
    return newD8;
    
    //newD8.setMonth(mSelect);    
    //alert("get"+newD8.getMonth());

    //newD8.setDate(D);
    
    //return newD8;
}

function hideCalendar(baseName,shadowLayerName)
{	
	iframeSetVisible(false, shadowLayerName);
    var layerName=baseName+"CalendarId";
    if (document.getElementById) 
    {
        var shadowElement = document.getElementById(shadowLayerName);         
		shadowElement.innerHTML = "";
        shadowElement.style.visibility = 'hidden';
		shadowElement.style.display = "none";
    }
    currentlyDisplayingCalendar="";
}
function toggleCalendar(baseName,shadowLayerName,dateMillis,maxDateMillis)
{
    var layerName=baseName+"CalendarId";
    if (document.getElementById) 
    {
    	var str="var test = document.getElementById(layerName).innerHTML";
    	eval(str);
        var shadowElement = document.getElementById(shadowLayerName);
        if(currentlyDisplayingCalendar==baseName){
        //if(shadowElement.style.visibility == 'visible'){
          hideCalendar(baseName,shadowLayerName);
        }else{
          showCalendar(baseName,shadowLayerName,dateMillis,maxDateMillis);
	}
    }
}
function setMonthOldXXX(mo,cal){
	//more trickery!
	calId=cal;
	cal = eval(cal);
	//The Date object is smart enough to know that it should roll over in December
	//when going forward and in January when going back
	cal.dateObject.setMonth(mo);
	cal = new mcomCalendar(calId,cal.dateObject,cal.shadowLayerName);
	cal.formattedDate = cal.getFormattedDate();
	//alert("shadowLayerName="+cal.shadowLayerName);
    	
    	var layerName=cal.bn+"CalendarId";
	
	//document.getElementById(cal.bn+"DaysRow").innerHTML = cal.writeDays();
	document.getElementById(layerName).innerHTML=cal.write();
	//showImage(calId);
	//document.getElementById(cal.bn+"DaysRow").innerHTML = cal.writeDays();
    if (document.getElementById) // Netscape 6 and IE 5+
    {
        var targetElement = document.getElementById(layerName);
        var shadowElement = document.getElementById(cal.shadowLayerName);
	var h = targetElement.innerHTML;
	shadowElement.innerHTML = h;      
	targetElement.innerHTML="";  
        shadowElement.style.visibility = 'visible';
    }
    selectIndexes(cal);

}
function setYearOldXXX(mo,cal){
	//more trickery!
	calId=cal;	
	cal = eval(cal);
	//The Date object is smart enough to know that it should roll over in December
	//when going forward and in January when going back
	cal.dateObject.setFullYear(mo);
	cal = new mcomCalendar(cal.bn,cal.dateObject,cal.shadowLayerName);
	cal.formattedDate = cal.getFormattedDate();
    	var layerName=cal.bn+"CalendarId";
	
	//document.getElementById(cal.bn+"DaysRow").innerHTML = cal.writeDays();
	document.getElementById(layerName).innerHTML=cal.write();
	//showImage(calId);
	//document.getElementById(cal.bn+"DaysRow").innerHTML = cal.writeDays();
    if (document.getElementById) // Netscape 6 and IE 5+
    {
        var targetElement = document.getElementById(layerName);
        var shadowElement = document.getElementById(cal.shadowLayerName);
		var h = targetElement.innerHTML;
		shadowElement.innerHTML = h;    
		targetElement.innerHTML="";    
        shadowElement.style.visibility = 'visible';
    }
    selectIndexes(cal);

}

function selectIndexesOldXXX(cal){
    var sel=document.getElementById(cal.bn+"CalMonth");
    var newM=cal.dateObject.getMonth();
    //alert(newM);
    sel.selectedIndex=newM;    
    var sel=document.getElementById(cal.bn+"CalYear");
    var newY=cal.dateObject.getFullYear();    
    for(var i=0;i<sel.options.length;i++){
    	if(sel.options[i].value==newY){    		
    	    sel.selectedIndex=i;
    	}
    }
}

// Calendar specific functions
var days = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
var months = new Array('January','February','March','April','May','June','July','August','September','October','November','December');


function getFormattedDate(){
	return days[this.day] + ', ' + months[this.month] + ' ' + this.date + ', ' + this.year;
	//return this.month + '/' + this.date + '/' + this.year;
}
function getFormattedDateFromDateObj(d){
	return d.getDate() + ' ' + months[d.getMonth()] + ' ' + d.getFullYear();
	//return this.month + '/' + this.date + '/' + this.year;
}
function getLength(){
	return getLengthFromMonth(this.month,this.dateObject.getFullYear());	
}
function getLengthFromDateObj(dateObj){
	return getLengthFromMonth(dateObj.getMonth(),dateObj.getFullYear());
}

function getLengthFromMonth(month,fullYear){
	switch(month){
		case 1:
			if((fullYear%4==0&&fullYear%100!=0)||fullYear%400==0)
				return 29; //leap year
			else
				return 28;
		case 3:
			return 30;
		case 5:
			return 30;
		case 8:
			return 30;
		case 10:
			return 30
		default:
			return 31;
	}	
}
function mcomCalendar(id,d,shadowLayerName){

	this.bn = id;
	this.dateObject = d;
	//alert("cal1");   
	this.write = writeNewCal;
	this.writeDays = writeCalDays;
	//alert("cal2");   	
	this.length = getLength;
	this.month = d.getMonth();
	this.date = d.getDate();
	this.day = d.getDay();
	this.year = d.getFullYear();
	this.getFormattedDate = getFormattedDate;
	this.shadowLayerName = shadowLayerName;
	//get the first day of the month's day
	d.setDate(1);
	this.firstDay = d.getDay();
	//then reset the date object to the correct date
	d.setDate(this.date);
}

function writeCalDays(){
	var dayString = "";
	//baseName = this.baseName;
	//alert("calDays:"+bName);
	//var cal = eval(bName);
	//TEMPORARY!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	
	//alert("writeCalDays");
	//create 6 rows so that the calendar doesn't resize
	var whStr=' width="'+cellWidth+'" height="'+cellHeight+'" ';
	for(j=0;j<42;j++){
		var displayNum = (j-this.firstDay+1);
		if(j<this.firstDay){
			//write the leading empty cells
			dayString += '<td class="t" '+whStr+'>&nbsp;</td>';
		}else if(displayNum==this.date){
			dayString += '<td id="' + this.bn +'selected" class="caltdtoday" onmouseout="javascript:out(this);" onmouseover="javascript:over(this);" onClick="javascript:changeDate(this,\'' + this.bn + '\')"'+whStr+'>' + displayNum + '</td>';
		}else if(displayNum > this.length()){
			//Empty cells at bottom of calendar
			dayString += '<td class="t"'+whStr+'></td>';
		}else{
			//the rest of the numbered cells
			dayString += '<td id="" class="caltd" onmouseout="javascript:out(this);" onmouseover="javascript:over(this);" onClick="javascript:changeDate(this,\'' + this.bn + '\')"'+whStr+'>' + displayNum + '</td>';
		}
		if(j%7==6){
			dayString += '</tr>';
		}
	}
	//alert("wholeCal:"+dayString);	
	return dayString;
}

function writeNewCal(){
	
	var dMillis=this.dateObject.getTime();
	var calId=this.bn+"Id";
	var calString = '<table onMouseOver="mouseOverCal = true" onMouseOut="mouseOverCal = false" id="' + this.bn + 'CalTable" class="caltable" cellpadding="0" cellspacing="1">';
	calString += '<tr id="' + this.bn + 'DropDownRow">';
	//alert("drops");
	calString += writeCalDropdowns(this.bn);
	calString += '</tr>';
	calString += '<tr id="' + this.bn + 'DaysRow">';
	//alert("days");
	var dayStr=this.writeDays();
	//alert("dayStr:"+dayStr);
	calString += dayStr;
	//calString+='<tr><td colspan="7" onmouseout="javascript:out(this);" onmouseover="javascript:over(this);" class="closeButton" onclick="hideCalendar(\''+this.bn+'\',\''+this.shadowLayerName+'\')"><img alt="close" name="closeImage" src="javascript:closeImage" width="40" height="16"></td></tr>';
	calString+='<tr><td colspan="7" onmouseout="javascript:out(this);" onmouseover="javascript:over(this);" class="closeButton" onclick="hideCalendar(\''+this.bn+'\',\''+this.shadowLayerName+'\')">';
	calString+='close</td></tr>';
	calString += '</table>';
	//alert(calString);
	return calString;
}



function writeCalDropdownsOldXXX(bName){
	var calId=bName;

	var calString = '<td colspan="4">'; 
	calString += '<select class="calselect" name="' + calId + 'CalMonth" id="' + calId + 'CalMonth" onchange="setMonth(this.value,\'' + calId + '\');"><option value="0">January</option><option value="1">February</option><option value="2">March</option><option value="3">April</option><option value="4">May</option><option value="5">June</option><option value="6">July</option><option value="7">August</option><option value="8">September</option><option value="9">October</option><option value="10">November</option><option value="11">December</option></select>';
	calString += '</td><td colspan="3">';
	
	calString += '<select align="right" class="calselect" name="' + calId + 'CalYear" id="' + calId + 'CalYear" onchange="setYear(this.value,\'' + calId + '\');">';
	
	var startDate=new Date(eval(bName+"MinDateMillis"));
	var endDate=new Date(eval(bName+"MaxDateMillis"));
	
	var startVal=startDate.getFullYear();
	var stopVal=endDate.getFullYear();

	while(startVal<=stopVal){
		calString += '<option value="'+startVal+'">'+startVal+'</option>';
		startVal++;
	}
	
	calString += '</select></td>';	

//alert(calString);
	calString += '</tr><tr>';
	
	for(i=0;i<days.length;i++){
		calString += '<th class="days">' + days[i].substring(0,1) + '</th>';
	}

	return calString;
}



function changeDate(td,cal){
	
	//Some JavaScript trickery
	//Change the cal argument to the existing calendar object
	//This is why the first argument in the constructor must match the variable name
	//The cal reference also allows for multiple calendars on a page
	//alert("changeDate:"+td+":"+bName);
	//var eStr = "bName = " + bName + ";";
	//alert("cal:"+cal);
	cal = eval(cal);
	//alert("cal:"+cal);
	//document.getElementById(cal.id + "selected").className = "caltd";
	document.getElementById(cal.bn + "selected").bn = "";
	//td.className = "caltd";
	td.bn = cal.bn + "selected";
	//set the calendar object to the new date
	cal.dateObject.setDate(td.firstChild.nodeValue);
	cal = new mcomCalendar(cal.bn,cal.dateObject,cal.shadowLayerName);
	
	var startDate=new Date(eval(cal.bn+"MinDateMillis"));
	var endDate=new Date(eval(cal.bn+"MaxDateMillis"));
	
	if(cal.dateObject.getTime() < startDate.getTime() -(1000*60*60*24) || cal.dateObject.getTime() > endDate.getTime()){
		var errString = "Please select a date within the range:\n";
		errString+=getFormattedDateFromDateObj(startDate)+" and \n";
		errString+=getFormattedDateFromDateObj(endDate);
		
	alert(errString);
	return;
	}

	feedbackSelectIndexes(cal);
	
	hideCalendar(cal.bn,cal.shadowLayerName);
    	updateValidDays(cal.bn);	
}

function feedbackSelectIndexes(cal){
	//alert(cal+":"+cal.bn+"CalSelectM");
    var sel=document.getElementById(cal.bn+"CalSelectD");
    //alert(sel);
    var newD=cal.dateObject.getDate();
    if(newD<10){
    	newD="0"+newD;
    }
    for(var i=0;i<sel.options.length;i++){
    	if(sel.options[i].value==newD){
    	    sel.selectedIndex=i;
    	    break;
    	}
    }    
    //sel.selectedIndex=newM;    
    //alert(newM);
    var sel=document.getElementById(cal.bn+"CalSelectMY");
    var newM=cal.dateObject.getMonth();
    var newY=cal.dateObject.getFullYear();
    var search = months[newM].substring(0,3)+"-"+newY;
    //alert("search:"+search);
    for(var i=0;i<sel.options.length;i++){
    	
    	var MY = sel.options[i].value;
    	//alert("MY:"+MY);
    	if(MY==search){
    	    sel.selectedIndex=i;
    	    break;
    	}
    }
    updateDayOfWeek(cal.bn);
}

function updateValidDays(baseName){
	
    var selD=document.getElementById(baseName+"CalSelectD");
    var selMY=document.getElementById(baseName+"CalSelectMY");

    var d8=getNewDateObj(selD.value,selMY.value);
    //alert(d8.getTime());
    var endDate = new Date(eval(baseName+"MaxDateMillis")); 
    var startDate = new Date(eval(baseName+"MinDateMillis"));    
    var numDays=getLengthFromDateObj(d8);    
   
    //if(selD.selectedIndex > numDays){
    //	selD.selectedIndex=numDays;
    //}
    
    var newD=d8.getDate();
    if(newD<10){
    	newD="0"+newD;
    }
       
    if((d8.getMonth() == endDate.getMonth() && d8.getYear() == endDate.getYear()))
    {
    	var selected = selD.options.value;
    	selD.options.length = 0;
    	
    	for(var i=1; i<endDate.getDate()+1; i++)
    	{
    		var name=i+"";
    		if(i == 1 || i == 21 || i ==31)
    			name+="st";
    		else
    		if(i == 2 || i == 22)
    			name += "nd";
    		else
    		if(i == 3 || i == 23)
    			name += "rd";
    		else
    			name+="th";
    		var value = i+"";
    		if(i<10)
    			value = "0" + value;	
    		selD.options[i-1] = new Option(name, value);
    	}
    	
    	if(selected > selD.options.length)
    		selD.selectedIndex = selD.options.length - 1;
    }   
    else
    {    	
    	for(var i=1; i<=numDays; i++)
    	{
    		var name=i+"";
    		if(i == 1 || i == 21 || i ==31)
    			name+="st";
    		else
    		if(i == 2 || i == 22)
    			name += "nd";
    		else
    		if(i == 3 || i == 23)
    			name += "rd";
    		else
    			name+="th";
    		var value = i+"";
    		if(i<10)
    			value = "0" + value;	
    		selD.options[i-1] = new Option(name, value);
    				
    	}
    }
           
    for(var i=0;i<selD.options.length;i++)
    {      	
    	if(selD.options[i].value==newD)
    	{
    	    selD.selectedIndex=i;
    	    break;
    	}
    }   
    
     for(var i=27;(i<31 && i <selD.options.length);i++){
    
    	if(i>=numDays)
    	{    		
            selD.options[i].className="invalidOption";
		}
		else
		{		
		    selD.options[i].className="validOption";
		}
    }
     
    var newM=d8.getMonth();
    var newY=d8.getFullYear();	

    var search = months[newM].substring(0,3)+"-"+newY;
  
    for(var i=0;i<selMY.options.length;i++){
    	var MY = selMY.options[i].value;
    	
    	if(MY==search){
    	    selMY.selectedIndex=i;
    	    break;
    	}
    }    
    var layerName=baseName+"CalendarId";
    if(document.getElementById(layerName).innerHTML!=""){
    	selectIndexes(eval(baseName));	
    }
//alert("updateValidDays fin");    
}

function updateDayOfWeek(baseName){
	var selD=document.getElementById(baseName+"CalSelectD");
    var selMY=document.getElementById(baseName+"CalSelectMY");
    var d8=getNewDateObj(selD.value,selMY.value);
    var dayDiv=document.getElementById(baseName+"DayOfWeek");
    dayDiv.innerHTML = days[d8.getDay()].substr(0,3);
}

function ensureLaterThan(masterId,slaveId){
	
	if(masterId==null||masterId==""){
		alert("no slaved");
		return;
	}
	
	var masterD=document.getElementById(masterId+"CalSelectD");
	var masterMY=document.getElementById(masterId+"CalSelectMY");
		
	var slaveD=document.getElementById(slaveId+"CalSelectD");
	var slaveMY=document.getElementById(slaveId+"CalSelectMY");	
	
	var masterD8=getNewDateObj(masterD.value,masterMY.value);
	var slaveD8=getNewDateObj(slaveD.value,slaveMY.value);
	
	var newMillis=masterD8.getTime()+(1000*60*60*24);//one day
	
	if(slaveD8.getTime()<newMillis){
		slaveD8.setTime(newMillis);
	}
		
	var numDays=getLengthFromDateObj(slaveD8);
	for(var i=27;i<31;i++){
		if(i>=numDays){
	    		slaveD.options[i].className="invalidOption";
		}
		else{
	    		slaveD.options[i].className="validOption";
		}
	}
	
	var newD=slaveD8.getDate();
	if(newD<10){
		newD="0"+newD;
	}    
	
	for(var i=0;i<slaveD.options.length;i++){
		if(slaveD.options[i].value==newD){
	    		slaveD.selectedIndex=i;
	   		break;
		}
	}
	
	var newM=slaveD8.getMonth();
	var newY=slaveD8.getFullYear();
	
	//alert(newD+":"+newM+":"+newY);
	
	var search = months[newM].substring(0,3)+"-"+newY;
	
	for(var i=0;i<slaveMY.options.length;i++){
	var MY = slaveMY.options[i].value;
	
		if(MY==search){
	    		slaveMY.selectedIndex=i;
	    		break;
		}
	}
	
	
	updateValidDays(slaveId);
    updateDayOfWeek(slaveId);	
	var layerName=slaveId+"CalendarId";
	if(document.getElementById(layerName).innerHTML!=""){
		selectIndexes(eval(slaveId));	
	}
        if(currentlyDisplayingCalendar==slaveId){
        	var c=eval(slaveId);
        	showCalendar(slaveId,c.shadowLayerName,eval(slaveId+"MinDateMillis"),eval(slaveId+"MaxDateMillis"));
	}
}


function selectIndexes(cal){
    var sel=document.getElementById(cal.bn+"CalMonthYear");
   
    
    var newM=cal.dateObject.getMonth();
    var newY=cal.dateObject.getFullYear();
    
    var val=months[newM].substring(0,3)+"-"+newY;

    for(var i=0;i<sel.options.length;i++){
    	if(sel.options[i].value==val){
    	    sel.selectedIndex=i;
    	}
    }
}

function writeCalDropdowns(bName){
	
	var calId=bName;

	var calString = '<td colspan="7" align="center">'; 
	calString += '<select class="calselect" name="' + calId + 'CalMonthYear" id="' + calId + 'CalMonthYear" onchange="setMonthYear(this.value,\'' + calId + '\');">';
	//<option value="0">January</option><option value="1">February</option><option value="2">March</option><option value="3">April</option><option value="4">May</option><option value="5">June</option><option value="6">July</option><option value="7">August</option><option value="8">September</option><option value="9">October</option><option value="10">November</option><option value="11">December</option>
	var startDate=new Date(eval(bName+"MinDateMillis"));
	var endDate=new Date(eval(bName+"MaxDateMillis"));
	
	//Something goes wrong in the conversion of maxDateMillis to the endDate
	//The following line would otherwise be while(startDate.getYear() != endDate.getYear() || startDate.getMonth() != endDate.getMonth() + 1){
	//Dipu : Patrick please note : I  added startDate.getYear() <= endDate.getYear() condition as it 
	//was going on infinite loop on the eurostar search pages
	while(startDate.getYear() <= endDate.getYear() && (startDate.getYear() != endDate.getYear() || startDate.getMonth() <= endDate.getMonth())){
		var y=startDate.getFullYear();
		var m=startDate.getMonth();
		var val=months[m].substring(0,3)+"-"+y;
		calString += '<option value="'+val+'">'+val+'</option>';
		startDate.setMonth(m+1);
		//check we haven't skipped a month (30/01 + 1 month = 02/03...)
		var check = startDate.getMonth();
		if (check - m == 2) {
			startDate.setMonth(check-1);
		}
	}
	
	calString += '</select></td>';	

	calString += '</tr><tr>';
	
	for(i=0;i<days.length;i++){
		calString += '<th class="days">' + days[i].substring(0,1) + '</th>';
	}

	return calString;
}
function setMonthYear(moy,cal){
	
    var fy=moy.substring(moy.indexOf("-")+1);
    //newD8.setFullYear(fy);
    var mSelect=0;
    var monthName=moy.substring(0,moy.indexOf("-"));
    for(var i=0;i<months.length;i++){
    	var srch=months[i].substring(0,3);
    	if(srch.toLowerCase()==monthName.toLowerCase()){
	    mSelect=i;
	    break;
    	}
    }
	
	
	//more trickery!
	calId=cal;
	cal = eval(cal);
	//The Date object is smart enough to know that it should roll over in December
	//when going forward and in January when going back
	cal.dateObject.setFullYear(fy);
	cal.dateObject.setMonth(mSelect);
	cal = new mcomCalendar(calId,cal.dateObject,cal.shadowLayerName);
	cal.formattedDate = cal.getFormattedDate();	
	
	var layerName=cal.bn+"CalendarId";
	
	//document.getElementById(cal.bn+"DaysRow").innerHTML = cal.writeDays();
	document.getElementById(layerName).innerHTML=cal.write();
	//showImage(calId);
	//document.getElementById(cal.bn+"DaysRow").innerHTML = cal.writeDays();
    if (document.getElementById) // Netscape 6 and IE 5+
    {
        var targetElement = document.getElementById(layerName);
        var shadowElement = document.getElementById(cal.shadowLayerName);
	var h = targetElement.innerHTML;
	shadowElement.innerHTML = h;      
	targetElement.innerHTML="";  
        shadowElement.style.visibility = 'visible';
    }
    selectIndexes(cal);

}

function setMonth(mo,cal){
	//more trickery!
	calId=cal;
	cal = eval(cal);
	//The Date object is smart enough to know that it should roll over in December
	//when going forward and in January when going back
	cal.dateObject.setMonth(mo);
	cal = new mcomCalendar(calId,cal.dateObject,cal.shadowLayerName);
	cal.formattedDate = cal.getFormattedDate();	
    	
    var layerName=cal.bn+"CalendarId";
	
	//document.getElementById(cal.bn+"DaysRow").innerHTML = cal.writeDays();
	document.getElementById(layerName).innerHTML=cal.write();
	//showImage(calId);
	//document.getElementById(cal.bn+"DaysRow").innerHTML = cal.writeDays();
    if (document.getElementById) // Netscape 6 and IE 5+
    {
        var targetElement = document.getElementById(layerName);
        var shadowElement = document.getElementById(cal.shadowLayerName);
		var h = targetElement.innerHTML;
		shadowElement.innerHTML = h;      
		targetElement.innerHTML="";  
        shadowElement.style.visibility = 'visible';
    }
    selectIndexes(cal);
}
function setYear(mo,cal){
	//more trickery!
	calId=cal;	
	cal = eval(cal);
	//The Date object is smart enough to know that it should roll over in December
	//when going forward and in January when going back
	cal.dateObject.setFullYear(mo);
	cal = new mcomCalendar(cal.bn,cal.dateObject,cal.shadowLayerName);
	cal.formattedDate = cal.getFormattedDate();
    var layerName=cal.bn+"CalendarId";
	
	//document.getElementById(cal.bn+"DaysRow").innerHTML = cal.writeDays();
	document.getElementById(layerName).innerHTML=cal.write();
	//showImage(calId);
	//document.getElementById(cal.bn+"DaysRow").innerHTML = cal.writeDays();
    if (document.getElementById) // Netscape 6 and IE 5+
    {
        var targetElement = document.getElementById(layerName);
        var shadowElement = document.getElementById(cal.shadowLayerName);
		var h = targetElement.innerHTML;
		shadowElement.innerHTML = h;    
		targetElement.innerHTML="";    
        shadowElement.style.visibility = 'visible';
    }
    selectIndexes(cal);
}

function closeCalendar(evt, target)
{					
	if(currentlyDisplayingCalendar != "")
	{		
	    if(calIconClicked == false)
		{		
		    if(!mouseOverCal)
		    {
		    	 hideCalendar('start',target);	
			     currentlyDisplayingCalendar = "";	 	
			}		   
	 	}
	 	else
	 		calIconClicked = false;
	}   			
 	return true;
}

function __mcomX(__mcomEl){var curleft=0;while(__mcomEl.offsetParent){curleft+=__mcomEl.offsetLeft;__mcomEl=__mcomEl.offsetParent;}return curleft;}
function __mcomY(__mcomEl){var curtop=0;while(__mcomEl.offsetParent){curtop+=__mcomEl.offsetTop;__mcomEl=__mcomEl.offsetParent;}return curtop;}
function __mcomW(__mcomEl){return __mcomEl.offsetWidth;}
function __mcomH(__mcomEl){return __mcomEl.offsetHeight;}
function __mcomGetElementInfo(__mcomEl){return __mcomX(__mcomEl)+'/'+__mcomY(__mcomEl)+'/'+__mcomW(__mcomEl)+'/'+__mcomH(__mcomEl);}