	/*
	*****************************************************************************************************
	Author : Lea Smart
	Source : www.totallysmartit.com
	Date : 7/3/2001
	DHTML Calendar
	Version 1.2
	
	You are free to use this code if you retain this header.
	You do not need to link to my site (be nice though!)
	
	Amendments
	22 Jan 2002; Added ns resize bug code; rewrote date functions into Date 'class';
				 Added support for yyyy-mm-dd date format
				 Added support for calendar beginning on any day
	7th Feb 2002 Fixed day highlight when year wasn't current year bug
	9th Jun 2002 Fixed bug with weekend colour
				 Amended the code for the date functions extensions.  Shortened addDays code considerably
	*****************************************************************************************************
	*/
	var req;
	var req1;
	var doesNotSupport = true;

function showDeliveryTimeChart(url){	
	
    if (window.XMLHttpRequest) {
        req1 = new XMLHttpRequest;
    }else if (window.ActiveXObject) {
            req1 = new ActiveXObject("Microsoft.XMLHTTP");
    }//End If

    if (req1) {
        req1.open("POST",url, true);
        req1.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

        req1.send(url);
        req1.onreadystatechange = processShowTimeChart;

        if (req1.readyState == 4){
            if (req1.status == 200){
           	
            }//End If
        }//End If
    }else{
        alert("Please use latest version of the current browser to function properly");
        doesNotSupport = false;
    }//End If*/
}//End If

function processShowTimeChart() {
    if (req1.readyState == 4) {
        if (req1.status == 200) {
       		document.getElementById('divDeliverytime').style.position='absolute';
			document.getElementById('divDeliverytime').style.width='200px';
			document.getElementById('divDeliverytime').style.height='400px';
			document.getElementById('divDeliverytime').style.left='710px';
			document.getElementById('divDeliverytime').style.top='485px';
        	document.getElementById('droptimechart').style.display='inline';
			document.getElementById('divDeliverytime').style.display='inline';
			document.getElementById('divDeliverytime').innerHTML = req1.responseText;
			Drag.init(document.getElementById("divDeliverytime"));
        }//End If
    }//End If
}//End Function

function doFormValidateChart(url){	
	
    if (window.XMLHttpRequest) {
        req1 = new XMLHttpRequest;
    }else if (window.ActiveXObject) {
            req1 = new ActiveXObject("Microsoft.XMLHTTP");
    }//End If

    if (req1) {
        req1.open("POST",url, true);
        req1.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

        req1.send(url);
        req1.onreadystatechange = processdoFormValidateChart;

        if (req1.readyState == 4){
            if (req1.status == 200){
      
        		if(req1.responseText=="0"){
           			document.getElementById('diffid').style.display="inline";
        		}else{
        			document.getElementById('diffid').style.display="none";
        		}//End If
            }//End If
        }//End If
    }else{
        alert("Please use latest version of the current browser to function properly");
        doesNotSupport = false;
    }//End If*/
}//End If

function processdoFormValidateChart() {

    if (req1.readyState == 4) {
        if (req1.status == 200) {

        	if(req1.responseText=="0"){
           		document.getElementById('diffid').style.display="inline";
        	}else{
        		document.getElementById('diffid').style.display="none";
        	}//End If
        }//End If
    }//End If
}//End Function

function doValidateChart(url){	
	
    if (window.XMLHttpRequest) {
        req1 = new XMLHttpRequest;
    }else if (window.ActiveXObject) {
            req1 = new ActiveXObject("Microsoft.XMLHTTP");
    }//End If

    if (req1) {
        req1.open("POST",url, true);
        req1.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

        req1.send(url);
        req1.onreadystatechange = processdoValidateChart;

     if (req1.readyState == 4){
          /*  if (req1.status == 200){
            	document.getElementById('desired_time_chart').style.display='inline';
				document.getElementById('divDeliverytime').style.display='inline';
				document.getElementById('divDeliverytime').innerHTML = req1.responseText;
				Drag.init(document.getElementById("divDeliverytime"));
            }//End If*/
        }//End If
    }else{
        alert("Please use latest version of the current browser to function properly");
        doesNotSupport = false;
    }//End If*/
}//End If

function processdoValidateChart() {
    if (req1.readyState == 4) {
        if (req1.status == 200) {
        	if(req1.responseText=="0"){
        		document.cart_quantity.del_date_showerr.value="0";
				document.getElementById('deliverydateid').style.display='none';
        	}else if(req1.responseText=="1"){
        	    document.cart_quantity.del_date_showerr.value="1";        	
				document.getElementById('deliverydateid').style.display='block';
				//	document.getElementById('deliverydateid').style.width='100%'; 				
				//document.getElementById('deliverydateid').innerHTML = "<img src='images/error.gif' border='0' width='22' height='22' />&nbsp;<font color='red'>Please see the earliest delivery date</font>";
        	}//End If
        }//End If
    }//End If
}//End Function
function getEarliestTime(url){	
	
    if (window.XMLHttpRequest) {
        req5 = new XMLHttpRequest;
    }else if (window.ActiveXObject) {
            req5 = new ActiveXObject("Microsoft.XMLHTTP");
    }//End If

    if (req5) {
        req5.open("POST",url, true);
        req5.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

        req5.send(url);
        req5.onreadystatechange = processGetEarliestTime;

     if (req5.readyState == 4){
        
        }//End If
    }else{
        alert("Please use latest version of the current browser to function properly");
        doesNotSupport = false;
    }//End If*/
}//End If

function processGetEarliestTime() {
    if (req5.readyState == 4) {
        if (req5.status == 200) {        	
        	document.getElementById('showgetearliesttimeid').innerHTML = "<font color=\"blue\"> Earliest Delivery Time:"+req5.responseText+"</font>";        	
        }//End If
    }//End If
}//End Function
function requestDeliveryTime(url) {
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest;
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
    }

    if (req) {
        req.open("POST",url, true);
        req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        d= document.cart_quantity;
        ele_len = d.elements.length;
//alert(ele_len);
        var postvalues="";
//alert(d.deliverydate.value);
        postvalues="dd="+d.deliverydate.value;
//postvalues="countryid=US";
//alert(postvalues);
        req.send(postvalues);
        req.onreadystatechange = processReqChange;
    } else {
       alert("Please use latest version of the current browser to function properly");
       doesNotSupport = false;
    }
}

function processReqChange() {
    if (req.readyState == 4) {
        if (req.status == 200) {
            var aa=req.responseText;
            document.getElementById('droptimechart').style.display='inline';
			document.getElementById('divDeliverytime').style.display='inline';
            //document.getElementById('divDeliverytime').innerHTML = aa;
        }
    }
}
	var timeoutDelay = 2000; // milliseconds, change this if you like, set to 0 for the calendar to never auto disappear
	var g_startDay = 0// 0=sunday, 1=monday
	
	// preload images
	var imgUp = new Image(8,12);
	imgUp.src = 'images/up.gif';
	var imgDown = new Image(8,12);
	imgDown.src = 'images/down.gif';
	
	// used by timeout auto hide functions
	var timeoutId = false;
	Array.prototype.in_array = function(p_val) {
	  for(var i = 0, l = this.length; i < l; i++) {
		if(this[i] == p_val) {
			return true;
		}
	  }
	  return false;
    }

	// the now standard browser sniffer class
	function Browser(){
	  this.dom = document.getElementById?1:0;
	  this.ie4 = (document.all && !this.dom)?1:0;
	  this.ns4 = (document.layers && !this.dom)?1:0;
	  this.ns6 = (this.dom && !document.all)?1:0;
	  this.ie5 = (this.dom && document.all)?1:0;
	  this.ok = this.dom || this.ie4 || this.ns4;
	  this.platform = navigator.platform;
	}
	var browser = new Browser();
		
	// dom browsers require this written to the HEAD section
	
	if (browser.dom || browser.ie4){
	    document.writeln('<style>');
		document.writeln('#container {');
		document.writeln('position : absolute;');
		document.writeln('left : 100px;');
		document.writeln('top : 100px;');
		document.writeln('width : 150px;');;
		browser.platform=='Win32'?height=205:height=210;
		document.writeln('height : ' + height +'px;');
		document.writeln('clip:rect(0px 150px ' + height + 'px 0px);');
		//document.writeln('overflow : hidden;');
		document.writeln('visibility : hidden;');
		document.writeln('background-color : #ffffff');
		document.writeln('}');
		document.writeln('</style>')
		document.write('<div id="container"');
		if (timeoutDelay) document.write(' onmouseout="calendarTimeout();" onmouseover="if (timeoutId) clearTimeout(timeoutId);"');
		document.write('></div>');
	}
	
	var g_Calendar;  // global to hold the calendar reference, set by constructor
	
	function calendarTimeout(){
	  if (browser.ie4 || browser.ie5){
	    if (window.event.srcElement && window.event.srcElement.name!='month') timeoutId=setTimeout('g_Calendar.hide();',timeoutDelay);
	  }
	  if (browser.ns6 || browser.ns4){
	    timeoutId=setTimeout('g_Calendar.hide();',timeoutDelay);
	  }
	}
	
	// constructor for calendar class
	function Calendar(){
	  g_Calendar = this;
	  // some constants needed throughout the program
	  this.daysOfWeek = new Array("Su","Mo","Tu","We","Th","Fr","Sa");
	  this.months = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
		this.years = new Array("2008","2009","2010");
	  this.daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	  
	  if (browser.ns4){
	    var tmpLayer = new Layer(127);
		if (timeoutDelay){
		  tmpLayer.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT);
		  tmpLayer.onmouseover = function(event) { if (timeoutId) clearTimeout(timeoutId); };
		  tmpLayer.onmouseout = function(event) { timeoutId=setTimeout('g_Calendar.hide()',timeoutDelay);};
		}
	    tmpLayer.x = 100;
	    tmpLayer.y = 100;
	    tmpLayer.bgColor = "#ffffff";
	  }
	  if (browser.dom || browser.ie4){
		var tmpLayer = browser.dom?document.getElementById('container'):document.all.container;
	  }
	  this.containerLayer = tmpLayer;
	  if (browser.ns4 && browser.platform=='Win32') {
	    this.containerLayer.clip.height=134;
	    this.containerLayer.clip.width=127;
	  }

	}
	
 	Calendar.prototype.getFirstDOM = function() {
		var thedate = new Date();
		thedate.setDate(1);
		thedate.setMonth(this.month);
		thedate.setFullYear(this.year);
		return thedate.getDay();
	}

	Calendar.prototype.getDaysInMonth = function (){
	   if (this.month!=1) {
	   return this.daysInMonth[this.month]
	   }
	   else {
	     // is it a leap year
		    if (Date.isLeapYear(this.year)) {
			  return 29;
			}
		    else {
			  return 28;
			}
	   }
	}
	 
	Calendar.prototype.buildString = function(){
	  
	  var tmpStr = '<form onSubmit="this.year.blur();return false;"><table width="100%" border="0" cellspacing="0" cellpadding="2" class="calBorderColor"><tr><td valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="1" class="calBgColor">';
	  tmpStr += '<tr>';
	  tmpStr += '<td width="60%" class="cal" align="left">';
	  
	  
	  if (this.hasDropDown) {
	    tmpStr += '<select class="month" name="month" onchange="g_Calendar.selectChange();">';
		for (var i=0;i<this.months.length;i++){
	      tmpStr += '<option value="' + i + '"' 
		  if (i == this.month) tmpStr += ' selected';
		  tmpStr += '>' + this.months[i] + '</option>';
	    }
	    tmpStr += '</select>';
	  } else {
	    tmpStr += '<table border="0" cellspacing="0" cellpadding="0"><tr><td><a href="javascript: g_Calendar.changeMonth(-1);"><img name="calendar" src="images/down.gif" width="8" height="12" border="0" alt=""></a></td><td class="cal" width="100%" align="center">' + this.months[this.month] + '</td><td class="cal"><a href="javascript: g_Calendar.changeMonth(+1);"><img name="calendar" src="images/up.gif" width="8" height="12" border="0" alt=""></a></td></tr></table>';
	  }
	  tmpStr += '</td>';
	  /* observation : for some reason if the below event is changed to 'onChange' rather than 'onBlur' it totally crashes IE (4 and 5)!
	  */
	  tmpStr += '<td width="40%" align="right" class="cal">';
	  
	  if (this.hasDropDown) { 
	    tmpStr += '<select class="year" name="year" onchange="g_Calendar.inputChange();">';
		for (var i=0;i<this.years.length;i++){
	      tmpStr += '<option value="' + this.years[i] + '"' 
		  if ((this.years[i] == this.year) || (i == this.year)) tmpStr += ' selected';
		  tmpStr += '>' + this.years[i] + '</option>';
	    }
	    tmpStr += '</select>';
	  } else {
	  tmpStr += '<table border="0" cellspacing="0" cellpadding="0"><tr><td class="cal"><a href="javascript: g_Calendar.changeYear(-1);"><img name="calendar" src="images/down.gif" width="8" height="12" border="0" alt=""></a></td><td class="cal" width="100%" align="center">' + this.year + '</td><td class="cal"><a href="javascript: g_Calendar.changeYear(+1);"><img name="calendar" src="images/up.gif" width="8" height="12" border="0" alt=""></a></td></tr></table>'
	  }
	  tmpStr += '</td>';
	  tmpStr += '</tr>';
	  tmpStr += '</table>';
	  var iCount = 1;

	  var iFirstDOM = (7+this.getFirstDOM()-g_startDay)%7; // to prevent calling it in a loop

	  var iDaysInMonth = this.getDaysInMonth(); // to prevent calling it in a loop
	  
	  tmpStr += '<table width="100%" border="0" cellspacing="0" cellpadding="1" class="calBgColor">';
	  tmpStr += '<tr>';
	    for (var i=0;i<7;i++){
	      //alert(i);
		    tmpStr += '<td align="center" class="calDaysColor">' + this.daysOfWeek[(g_startDay+i)%7] + '</td>';
		}
	  tmpStr += '</tr>';
	   //alert(this.month);
	   //alert(this.oMonth);
	  var tmpFrom = parseInt('' + this.dateFromYear + this.dateFromMonth + this.dateFromDay,10);
	  var tmpTo = parseInt('' + this.dateToYear + this.dateToMonth + this.dateToDay,10);
	  var tmpCompare;
	  for (var j=1;j<=6;j++){
	     tmpStr += '<tr >';
	     for (var i=1;i<=7;i++){
		   tmpStr += '<td width="16" align="center" '
		   if ( (7*(j-1) + i)>=iFirstDOM+1  && iCount <= iDaysInMonth){
		   	 /* Added and Modified by C.A.Sheela */
		     if (iCount==this.day && this.year==this.oYear && this.month==this.oMonth) tmpStr += 'class="calHighlightColor"';
			 else {
			 	/* Added and Modified by C.A.Sheela */
			 	if((iCount<this.day && this.year<=this.oYear && this.month<=this.oMonth) || (this.month<this.oMonth && this.year==this.oYear) || (this.year<this.oYear) ){
					tmpStr += 'class="calPastDays"';
				}else if (i==((7-g_startDay)%7)+1){
				 tmpStr += 'class="calWeekend"';
					//else tmpStr += 'class="cal"';
			 	}else{
			 		tmpStr += 'class="weekDaysCal"';
			 	}
			 }
		     tmpStr += '>';
			 /* could create a date object here and compare that but probably more efficient to convert to a number
			   and compare number as numbers are primitives */
			 tmpCompare = parseInt('' + this.year + padZero(this.month) + padZero(iCount),10);
			 if (tmpCompare >= tmpFrom && tmpCompare <= tmpTo) {
			  var thisDate = new Date();
			  var today = thisDate.getDate();
			 // var today_month = thisDate.getMonth();
			 
			  if((iCount<today && this.year<=this.oYear && this.month<=this.oMonth) || (this.month<this.oMonth && this.year==this.oYear) || (this.year<this.oYear) ){
				if(i==((7-g_startDay)%7)+1){
			     tmpStr += '<span width="16">' + iCount + '</span>';
			   }
			   else{
				 tmpStr += '<span width="16">' + iCount + '</span>';
			   }
			  }
			  else{
			  	
			   var month = this.month+1;
			   if(month<=9){ month = '0'+month; }
			   else{ month = month; }
			   if(iCount<=9){ var da = '0'+iCount; }
			   else{ var da = iCount; }
			   var cmpdate = da+'/'+month+'/'+this.year;
			   v_array = this.holidays;
			   d_array = this.non_delivery;
			   s_array = this.storeowner;
			   //alert(this.holidays[1]);
			   //if(i){
			   if(d_array.in_array(cmpdate)==true){
				 tmpStr += '<span width="16" style="background-color:#ffff00;color:#000000;">' + iCount + '</span>';
			   }
			   
			   else if(v_array.in_array(cmpdate)==true){
				 //tmpStr += '<span width="16" style="background-color:#99cc33;"><a class="cal" href="javascript: g_Calendar.clickDay(' + iCount + ');" onmouseout=requestDeliveryTime("delivery_chartnew.php");>' + iCount + '</a></span>';
				 tmpStr += '<span width="16" style="background-color:#99cc33;"><a class="cal" href="javascript: g_Calendar.clickDay(' + iCount + ');" onmouseout="if(document.cart_quantity.deliverydate.value) document.cart_quantity.deliverydate.focus();">' + iCount + '</a></span>';
			   }
			   
			   else if(s_array.in_array(cmpdate)==true){
				 //tmpStr += '<span width="16" style="background-color:#26D0D8;"><a class="cal" href="javascript: g_Calendar.clickDay(' + iCount + ');" onmouseout=requestDeliveryTime("delivery_chartnew.php");>' + iCount + '</a></span>';
				 tmpStr += '<span width="16" style="background-color:#26D0D8;"><a class="cal" href="javascript: g_Calendar.clickDay(' + iCount + ');" onmouseout="if(document.cart_quantity.deliverydate.value) document.cart_quantity.deliverydate.focus();">' + iCount + '</a></span>';
			   }
			   else if(i==((7-g_startDay)%7)+1){
			    // tmpStr += '<span width="16" style="background-color:#A5A5A5;"><a class="cal" href="javascript: g_Calendar.clickDay(' + iCount + ');" onmouseout=requestDeliveryTime("delivery_chartnew.php");>' + iCount + '</a></span>';
	     		 tmpStr += '<span width="16" style="background-color:#A5A5A5;"><a class="calWeekEndDays" href="javascript: g_Calendar.clickDay(' + iCount + ');" onmouseout="if(document.cart_quantity.deliverydate.value) document.cart_quantity.deliverydate.focus();">' + iCount + '</a></span>';   		
		   
				}	
			   else{
			    //alert(this.month);
				 //tmpStr += '<span width="16"><a class="cal" href="javascript: g_Calendar.clickDay(' + iCount + ');" onmouseout=requestDeliveryTime("delivery_chartnew.php");>' + iCount + '</a></span>';
				 tmpStr += '<span width="16"><a class="cal" href="javascript: g_Calendar.clickDay(' + iCount + ');" onmouseout="if(document.cart_quantity.deliverydate.value) document.cart_quantity.deliverydate.focus();">' + iCount + '</a></span>';
			   }
			   /*for(h=0;h<=this.holiday_cnt;h++){
			       var cmpdate = iCount+'/'+(this.month+1)+'/'+this.year;
			       if(cmpdate==this.holidays[h]){
					  tmpStr += '<span width="16" style="background-color:#99cc33;"><a class="cal" href="javascript: g_Calendar.clickDay(' + iCount + ');">' + iCount + '</a></span>';
				   }
     		   }*/
			  }
			  
			 } /*else {
			   tmpStr += '<span width="16" style="background-color:#FFFFD4;"><a class="cal" href="javascript: g_Calendar.clickDay(' + iCount + ');">' + iCount + '</a></span>';
			 }*/
			 iCount++;
		   } /*else {
		     if  (i==7-g_startDay || i==((7-g_startDay)%7)+1) tmpStr += 'class="calWeekend"'; else tmpStr +='class="cal"';
			 tmpStr += '>&nbsp;';
		   }*/
		   tmpStr += '</td>'
		 }
		 tmpStr += '</tr>'
	  }
	  tmpStr += '</table></td></tr></table></form>';
	  tmpStr += '<table border="0" cellspacing="0" cellpadding="0" width="100%" class="calBorderColor"><tr align="left" valign="middle"><td align="left" valign="top" style="height:15px;width:20px;"><img src="images/TierColor1.gif" border="0" style="height:15px;width:15px;" /></td><td align="left" valign="middle"><span>';
	  //for(p=0;p<this.sun_cnt;p++){
		tmpStr += '<b>Public Holidays</b><br>';
	  //}
	  tmpStr += '</span></td></tr></table>';
	   tmpStr += '<table border="0" cellspacing="0" cellpadding="0" width="100%" class="calBorderColor"><tr align="left" valign="middle"><td align="left" valign="top" style="height:15px;width:20px;"><img src="images/TierColor4.gif" border="1" style="height:15px;width:15px;" /></td><td align="left" valign="middle"><span>';
		tmpStr += '<b>Sundays</b><br>';
	    tmpStr += '</span></td></tr></table>';
	    tmpStr += '<table border="0" cellspacing="0" cellpadding="0" width="100%" class="calBorderColor"><tr align="left" valign="middle"><td align="left" valign="top" style="height:15px;width:20px;"><img src="images/TierColor2.gif" border="1" style="height:15px;width:15px;" /></td><td align="left" valign="middle"><span>';
		tmpStr += '<b>Non-Delivery days</b><br>';
	    tmpStr += '</span></td></tr></table>';
	    tmpStr += '<table border="0" cellspacing="0" cellpadding="0" width="100%" class="calBorderColor"><tr align="left" valign="middle"><td align="left" valign="top" style="height:15px;width:20px;"><img src="images/TierColor3.gif" border="1" style="height:15px;width:15px;" /></td><td align="left" valign="middle"><span>';
		tmpStr += '<b>Special days</b><br>';
	    tmpStr += '</span></td></tr></table>';
	  /*tmpStr += '<table border="0" cellspacing="0" cellpadding="0" width="100%" class="calBorderColor"><tr align="left" valign="middle"><td align="left" valign="top" style="height:15px;width:20px;"><img src="http://www.24hrscityflorist.com/oscdemo/images/TierColor3.gif" border="0" style="height:15px;width:15px;" /></td><td align="left" valign="middle"><span>';
	  for(p=0;p<this.ord_cnt;p++){
		tmpStr += '<b>'+this.pro_ordtime[p]+'</b> - Additional SGD$'+this.pro_ordamt[p]+'<br>';
	  }
	  tmpStr += '</span></td></tr></table>';
	  tmpStr += '<table border="0" cellspacing="0" cellpadding="0" width="100%" class="calBorderColor"><tr align="left" valign="middle"><td align="left" valign="top" style="height:15px;width:20px;"><img src="http://www.24hrscityflorist.com/oscdemo/images/TierColor2.gif" border="0" style="height:15px;width:15px;" /></td><td align="left" valign="middle"><span><b>Non-Delivery day</b></span></td></tr></table>';*/
	  return tmpStr;
	}
	
	Calendar.prototype.selectChange = function(){		
 		this.month = browser.ns6?this.containerLayer.ownerDocument.forms[0].month.selectedIndex:this.containerLayer.document.forms[0].month.selectedIndex;
 	    this.writeString(this.buildString());
	}
	
	Calendar.prototype.inputChange = function(){
	  var tmp = browser.ns6?this.containerLayer.ownerDocument.forms[0].year:this.containerLayer.document.forms[0].year;
	  if (tmp.value >=1900 || tmp.value <=2100){
	    this.year = tmp.value;
	    this.writeString(this.buildString());
	  } else {
	    tmp.value = this.year;
	  }
	}
	Calendar.prototype.changeYear = function(incr){
	   (incr==1)?this.year++:this.year--;
	   this.writeString(this.buildString());
	}
	Calendar.prototype.changeMonth = function(incr){
	    if (this.month==11 && incr==1){
	      this.month = 0;
	  	  this.year++;
	    } else {
	      if (this.month==0 && incr==-1){
	        this.month = 11;
		    this.year--;
	      } else {
		    (incr==1)?this.month++:this.month--;
		  }
		}
		this.writeString(this.buildString());
	}
	
	Calendar.prototype.clickDay = function(day){
	   document.cart_quantity.additional.focus();
	   var tmp = eval('document.' + this.target);
	   tmp.value = this.formatDateAsString(day,this.month,this.year);
	  // alert(tmp.value);
	    if (browser.ns4) this.containerLayer.hidden=true;
	    if (browser.dom || browser.ie4){
	      this.containerLayer.style.visibility='hidden';
	    }
	}
	Calendar.prototype.formatDateAsString = function(day, month, year){
	  var delim = eval('/\\' + this.dateDelim + '/g');
	   switch (this.dateFormat.replace(delim,"")){
	     case 'ddmmmyyyy': return padZero(day) + this.dateDelim + this.months[month].substr(0,3) + this.dateDelim + year;
		 case 'ddmmyyyy': return padZero(day) + this.dateDelim + padZero(month+1) + this.dateDelim + year;
		 case 'mmddyyyy': return padZero((month+1)) + this.dateDelim + padZero(day) + this.dateDelim + year;
	     case 'yyyymmdd': return year + this.dateDelim + padZero(month+1) + this.dateDelim + padZero(day);
		 default: alert('unsupported date format');
	   }
	}
	Calendar.prototype.writeString = function(str){
	 
	  if (browser.ns4){
	    this.containerLayer.document.open();
	    this.containerLayer.document.write(str);
	    this.containerLayer.document.close();
	  } 
	  if (browser.dom || browser.ie4){
	    this.containerLayer.innerHTML = str;
	  }
	}
	
	Calendar.prototype.show = function(event, target, bHasDropDown, dateFormat, dateFrom, dateTo,ord_cnt,sun_cnt,pro_sunamt,pro_ordamt,pro_ordtime,pro_suntime,holiday_cnt,holidays,non_delivery,storeowner){
	// calendar can restrict choices between 2 dates, if however no restrictions
	// are made, let them choose any date between 1900 and 3000
    this.ord_cnt       = ord_cnt;
    this.sun_cnt       = sun_cnt;
	this.pro_ordamt    = pro_ordamt;
	this.pro_sunamt    = pro_sunamt;
	this.pro_ordtime   = pro_ordtime;
	this.pro_suntime   = pro_suntime;
	this.holidays      = holidays;
	this.non_delivery  = non_delivery;
	this.holiday_cnt   = holiday_cnt;
	this.storeowner    = storeowner;
	
	this.dateFrom = dateFrom || new Date(1900,0,1);
	this.dateFromDay = padZero(this.dateFrom.getDate());
	this.dateFromMonth = padZero(this.dateFrom.getMonth());
	this.dateFromYear = this.dateFrom.getFullYear();
	this.dateTo = dateTo || new Date(3000,0,1);
	this.dateToDay = padZero(this.dateTo.getDate());
	this.dateToMonth = padZero(this.dateTo.getMonth());
	this.dateToYear = this.dateTo.getFullYear();
	this.hasDropDown = bHasDropDown;
	this.dateFormat = 'dd-mm-yyyy';
	switch (this.dateFormat){
	  case 'dd-mmm-yyyy':
	  case 'dd-mm-yyyy':
	  case 'yyyy-mm-dd':
	    this.dateDelim = '-';
		break;
	  case 'dd/mm/yyyy':
	  case 'mm/dd/yyyy':
	  case 'dd/mmm/yyyy':
	    this.dateDelim = '/';
		break;
	}
	
	  if (browser.ns4) {
	    if (!this.containerLayer.hidden) {
		  this.containerLayer.hidden=true;
		  return;
		}
	   }
	  if (browser.dom || browser.ie4){
	    if (this.containerLayer.style.visibility=='visible') {
		  this.containerLayer.style.visibility='hidden';
		  return;
		}  
	  }

	  if (browser.ie5 || browser.ie4){
	    var event = window.event;
	  }
	  if (browser.ns4){
	    this.containerLayer.x = event.x+10;
	    this.containerLayer.y = event.y-5;
	  }
	  if (browser.ie5 || browser.ie4){
	    var obj = event.srcElement;
 	    x = 0;
  		while (obj.offsetParent != null) {
    		  x += obj.offsetLeft;
    		  obj = obj.offsetParent;
  		}
  		x += obj.offsetLeft;
	    y = 0;
		var obj = event.srcElement;
	    while (obj.offsetParent != null) {
    		  y += obj.offsetTop;
    		  obj = obj.offsetParent;
  		}
  		y += obj.offsetTop;
		
        /* this.containerLayer.style.left = x+35;
		if (event.y>0)this.containerLayer.style.top = y; */
		//this.containerLayer.style.left = "760px";
		//this.containerLayer.style.top  = "425px";
		this.containerLayer.style.left = (x-2);
		this.containerLayer.style.top  = y+32;
	  }
	  if (browser.ns6){
	    this.containerLayer.style.left = event.pageX+10;
		this.containerLayer.style.top = event.pageY-5;
	  }
	  this.target = target;
	  var tmp = eval('document.' + this.target);
	 /* if (tmp && tmp.value && tmp.value.split(this.dateDelim).length==3 && tmp.value.indexOf('d')==-1){
	    var atmp = tmp.value.split(this.dateDelim)
		switch (this.dateFormat){
		 case 'dd-mmm-yyyy':
		 case 'dd/mmm/yyyy':
		   for (var i=0;i<this.months.length;i++){
		     if (atmp[1].toLowerCase()==this.months[i].substr(0,3).toLowerCase()){
		       this.month = this.oMonth = i;
			   break;
		     }
		   }
		   this.day = parseInt(atmp[0],10);
		   this.year = this.oYear = parseInt(atmp[2],10);
		   break;
		 case 'dd/mm/yyyy':
		 case 'dd-mm-yyyy':
		   var thisDate = new Date();
		   var today_month = thisDate.getMonth();
		   var tod_year    = thisDate.getFullYear();
		   //this.month = this.oMonth = parseInt(atmp[1]-1,10); 
		   this.month = this.oMonth = today_month;
		   this.day = parseInt(atmp[0],10);
		  // this.year = this.oYear = parseInt(atmp[2],10);
		   this.year = this.oYear = tod_year;
		   break;
		 case 'mm/dd/yyyy':
		 case 'mm-dd-yyyy':
		   this.month = this.oMonth = parseInt(atmp[0]-1,10);
		   this.day = parseInt(atmp[1],10);
		   this.year = this.oYear = parseInt(atmp[2],10);
		   break;
		 case 'yyyy-mm-dd':
		   this.month = this.oMonth = parseInt(atmp[1]-1,10);
		   this.day = parseInt(atmp[2],10);
		   this.year = this.oYear = parseInt(atmp[0],10);
		   break;
		}
	  } else { // no date set, default to today */
	    var theDate = new Date();
	  	 this.year = this.oYear = theDate.getFullYear();
	     this.month = this.oMonth = theDate.getMonth();
	     this.day = this.oDay = theDate.getDate();
	  //}
	  this.writeString(this.buildString());
	  
	  // and then show it!
	   if (browser.ns4) {
	   this.containerLayer.hidden=false;
	   }
	  if (browser.dom || browser.ie4){
	      this.containerLayer.style.visibility='visible';
	  }
	}
	
	Calendar.prototype.hide = function(){
	  if (browser.ns4) this.containerLayer.hidden = true;
	  if (browser.dom || browser.ie4){
	    this.containerLayer.style.visibility='hidden';
	  }
	}
	
	function handleDocumentClick(e){
	  if (browser.ie4 || browser.ie5) e = window.event;

	  if (browser.ns6){
	    var bTest = (e.pageX > parseInt(g_Calendar.containerLayer.style.left,10) && e.pageX <  (parseInt(g_Calendar.containerLayer.style.left,10)+125) && e.pageY < (parseInt(g_Calendar.containerLayer.style.top,10)+125) && e.pageY > parseInt(g_Calendar.containerLayer.style.top,10));
	    if (e.target.name!='imgCalendar' && e.target.name!='month'  && e.target.name!='year' && e.target.name!='calendar' && !bTest){
		  g_Calendar.hide(); 
		}
	  }
	  if (browser.ie4 || browser.ie5){
		// extra test to see if user clicked inside the calendar but not on a valid date, we don't want it to disappear in this case
	   var bTest = (e.x > parseInt(g_Calendar.containerLayer.style.left,10) && e.x <  (parseInt(g_Calendar.containerLayer.style.left,10)+125) && e.y < (parseInt(g_Calendar.containerLayer.style.top,10)+125) && e.y > parseInt(g_Calendar.containerLayer.style.top,10));
	    if (e.srcElement.name!='imgCalendar' && e.srcElement.name!='month' && e.srcElement.name!='year' && !bTest & typeof(e.srcElement)!='object'){
		  g_Calendar.hide(); 
		}
	  }
	  if (browser.ns4) g_Calendar.hide();
	}
	
	// utility function
	function padZero(num) {
	  return ((num <= 9) ? ("0" + num) : num);
	}
	  // Finally licked extending  native date object;
	  Date.isLeapYear = function(year){ if (year%4==0 && ((year%100!=0) || (year%400==0))) return true; else return false; }
	  Date.daysInYear = function(year){ if (Date.isLeapYear(year)) return 366; else return 365;}
	  var DAY = 1000*60*60*24;
	  Date.prototype.addDays = function(num){
		return new Date((num*DAY)+this.valueOf());
	  }	
	  
	function firstonload() {
		new Calendar(new Date());
		  if (browser.ns4){
			if (typeof document.NSfix == 'undefined'){
			  document.NSfix = new Object();
			  document.NSfix.initWidth=window.innerWidth;
			  document.NSfix.initHeight=window.innerHeight;
			}
		  }
	}

	 // events capturing, careful you don't override this by setting something in the onload event of 
	// the body tag
	window.onload=function(){ 
	  new Calendar(new Date());
	  if (browser.ns4){
	    if (typeof document.NSfix == 'undefined'){
		  document.NSfix = new Object();
	      document.NSfix.initWidth=window.innerWidth;
		  document.NSfix.initHeight=window.innerHeight;
		}
	  }
	}
	if (browser.ns4) window.onresize = function(){
	  if (document.NSfix.initWidth!=window.innerWidth || document.NSfix.initHeight!=window.innerHeight) window.location.reload(false);
	} // ns4 resize bug workaround
	window.document.onclick=handleDocumentClick;
    //window.onerror = function(msg,url,line){
	//  alert('******* an error has occurred ********' +
	//  '\n\nPlease check that' + 
	//  '\n\n1)You have not added any code to the body onload event,'
	//  +  '\nif you want to run something as well as the calendar initialisation'
	//  + '\ncode, add it to the onload event in the calendar library.'
	//  + '\n\n2)You have set the parameters correctly in the g_Calendar.show() method '
	//  + '\n\nSee www.totallysmartit.com\\examples\\calendar\\simple.asp for examples'
	//  + '\n\n------------------------------------------------------'
	//  + '\nError details'
	//  + '\nText:' + msg + '\nurl:' + url + '\nline:' + line);
//	}