    // **** BROWSER VERSION ****
    var agt=navigator.userAgent.toLowerCase();
    var appVer = navigator.appVersion.toLowerCase();

    var is_minor = parseFloat(appVer);
    var is_major = parseInt(is_minor);

    // Note: On IE, start of appVersion return 3 or 4
    // which supposedly is the version of Netscape it is compatible with.
    // So we look for the real version further on in the string

    var iePos  = appVer.indexOf('msie');
    if (iePos !=-1) {
       is_minor = parseFloat(appVer.substring(iePos+5,appVer.indexOf(';',iePos)))
       is_major = parseInt(is_minor);
    }

    var is_getElementById   = (document.getElementById) ? "true" : "false"; // 001121-abk
    var is_getElementsByTagName = (document.getElementsByTagName) ? "true" : "false"; // 001127-abk
    var is_documentElement = (document.documentElement) ? "true" : "false"; // 001121-abk

    var is_gecko = ((navigator.product)&&(navigator.product.toLowerCase()=="gecko"))?true:false;
    var is_gver  = 0;
    var is_valid_gecko = false;
		var gecko_pos = agt.indexOf("gecko");
		if (gecko_pos != -1) {
			var gecko_date = agt.substring(gecko_pos+6,gecko_pos+14);
			if (gecko_date > "20011128" && agt.indexOf("mozilla/5") != -1) is_valid_gecko=true;
		}
    if (is_gecko) {
			is_gver=navigator.productSub;
		}

    var is_moz   = ((agt.indexOf('mozilla/5')!=-1) && (agt.indexOf('spoofer')==-1) &&
                    (agt.indexOf('compatible')==-1) && (agt.indexOf('opera')==-1)  &&
                    (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)     &&
                    (is_gecko) && 
                    ((navigator.vendor=="")||(navigator.vendor=="Mozilla")));
    if (is_moz) {
       var is_moz_ver = (navigator.vendorSub)?navigator.vendorSub:0;
       if(!(is_moz_ver)) {
           is_moz_ver = agt.indexOf('rv:');
           is_moz_ver = agt.substring(is_moz_ver+3);
           is_paren   = is_moz_ver.indexOf(')');
           is_moz_ver = is_moz_ver.substring(0,is_paren);
       }
       is_minor = is_moz_ver;
       is_major = parseInt(is_moz_ver);
    }

    var is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
                && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
                && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)
                && (!(is_moz)));

    // Netscape6 is mozilla/5 + Netscape6/6.0!!!
    // Mozilla/5.0 (Windows; U; Win98; en-US; m18) Gecko/20001108 Netscape6/6.0
    // Changed this to use navigator.vendor/vendorSub - dmr 060502   
    // var nav6Pos = agt.indexOf('netscape6');
    // if (nav6Pos !=-1) {
    if ((navigator.vendor)&&
        ((navigator.vendor=="Netscape6")||(navigator.vendor=="Netscape"))&&
        (is_nav)) {
       is_major = parseInt(navigator.vendorSub);
       // here we need is_minor as a valid float for testing. We'll
       // revert to the actual content before printing the result. 
       is_minor = parseFloat(navigator.vendorSub);
    }

    var is_opera = (agt.indexOf("opera") != -1);
    var is_opera2 = (agt.indexOf("opera 2") != -1 || agt.indexOf("opera/2") != -1);
    var is_opera3 = (agt.indexOf("opera 3") != -1 || agt.indexOf("opera/3") != -1);
    var is_opera4 = (agt.indexOf("opera 4") != -1 || agt.indexOf("opera/4") != -1);
    var is_opera5 = (agt.indexOf("opera 5") != -1 || agt.indexOf("opera/5") != -1);
    var is_opera6 = (agt.indexOf("opera 6") != -1 || agt.indexOf("opera/6") != -1);
	var is_opera7 = (agt.indexOf("opera 7") != -1 || agt.indexOf("opera/7") != -1);// new 020128- abk
    var is_opera5up = (is_opera && !is_opera2 && !is_opera3 && !is_opera4);
    var is_opera6up = (is_opera && !is_opera2 && !is_opera3 && !is_opera4 && !is_opera5); // new020128
	var is_opera7up = (is_opera && !is_opera2 && !is_opera3 && !is_opera4 && !is_opera5 && !is_opera6); 

    var is_nav2 = (is_nav && (is_major == 2));
    var is_nav3 = (is_nav && (is_major == 3));
    var is_nav4 = (is_nav && (is_major == 4));
    var is_nav4up = (is_nav && is_minor >= 4);  // changed to is_minor for
                                                // consistency - dmr, 011001
    var is_navonly      = (is_nav && ((agt.indexOf(";nav") != -1) ||
                          (agt.indexOf("; nav") != -1)) );

    var is_nav6   = (is_nav && is_major==6);    // new 010118 mhp
    var is_nav6up = (is_nav && is_minor >= 6 || is_valid_gecko); // new 010118 mhp

    
	var is_nav5   = (is_nav && is_major == 5 && !is_nav6); // checked for ns6
    var is_nav5up = (is_nav && is_minor >= 5);

    var is_nav7   = (is_nav && is_major == 7);
    var is_nav7up = (is_nav && is_minor >= 7);

    var is_ie   = ((iePos!=-1) && (!is_opera));
    var is_ie3  = (is_ie && (is_major < 4));

    var is_ie4   = (is_ie && is_major == 4);
    var is_ie4up = (is_ie && is_minor >= 4);
    var is_ie5   = (is_ie && is_major == 5);
    var is_ie5up = (is_ie && is_minor >= 5);
    
    var is_ie5_5  = (is_ie && (agt.indexOf("msie 5.5") !=-1)); // 020128 new - abk
    var is_ie5_5up =(is_ie && is_minor >= 5.5);                // 020128 new - abk
	
    var is_ie6   = (is_ie && is_major == 6);
    var is_ie6up = (is_ie && is_minor >= 6);

    // KNOWN BUG: On AOL4, returns false if IE3 is embedded browser
    // or if this is the first browser window opened.  Thus the
    // variables is_aol, is_aol3, and is_aol4 aren't 100% reliable.

    var is_aol   = (agt.indexOf("aol") != -1);
    var is_aol3  = (is_aol && is_ie3);
    var is_aol4  = (is_aol && is_ie4);
    var is_aol5  = (agt.indexOf("aol 5") != -1);
    var is_aol6  = (agt.indexOf("aol 6") != -1);
    var is_aol7  = ((agt.indexOf("aol 7")!=-1) || (agt.indexOf("aol7")!=-1));

    var is_webtv = (agt.indexOf("webtv") != -1);
    
    // new 020128 - abk
    
    var is_TVNavigator = ((agt.indexOf("navio") != -1) || (agt.indexOf("navio_aoltv") != -1)); 
    var is_AOLTV = is_TVNavigator;

    var is_hotjava = (agt.indexOf("hotjava") != -1);
    var is_hotjava3 = (is_hotjava && (is_major == 3));
    var is_hotjava3up = (is_hotjava && (is_major >= 3));



    //	*** Calendar CODE ***

	//var timeoutDelay = 2000; NOT USED // milliseconds, change this if you like, set to 0 for the calendar to never auto disappear
	//var timeoutId = false; NOT USED // used by timeout auto hide functions
	var g_startDay = 0// 0=sunday, 1=monday
	
	// preload images
	//var imgUp = new Image(8,12); imgUp.src = '/Resources/calendar/images/up.gif';
	//var imgDown = new Image(8,12); imgDown.src = '/Resources/calendar/images/down.gif';
	
	document.write('<iframe src="Resources/calendar/void.html" name="calendarFrame" id="container" class="iframeStyle" marginwidth="0" marginheight="0" frameborder="0" scrolling="no"></iframe>');
	// void.html just contains <html> and <body> tag. Calendar script writes into <body> tag.

	
	var g_Calendar;  // global to hold the calendar reference, set by constructor
    
    
     var orderMonth;
     var orderDay;
     var orderYear;
     
     var monthLength;
     var dayLength;
     var yearLength;
     
     var delim1;
     var delim2;  
    
     
     var daysOfWeek;
     var months;  
     var dateFormat;   
     
	     
    // constructor for calendar class
	function Calendar(){
	  g_Calendar = this;
	  // some constants needed throughout the program
	  this.daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    	  if (is_ie5up || is_nav6up || is_opera7up) {
    	  	tmpIframeObject = document.getElementById('container');
  	  	this.targetIframe = tmpIframeObject;
  	  	// retrieve the iframe's inner document
  	  	if (is_ie5 || is_ie5_5) { this.targetDocument = frames['calendarFrame'].document; this.targetDocument.createStyleSheet('calendar.css') }
	  	else if (is_ie6up) { this.targetDocument = tmpIframeObject.contentWindow.document }
	  	else if (is_nav6up || is_opera7up) { this.targetDocument = tmpIframeObject.contentDocument}
	  }
	}

	
 	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="parent.g_Calendar.selectChange();">'
		for (var i=0;i<months.length;i++){
	          tmpStr += '<option value="' + i + '"' 
		  if (i == this.month) tmpStr += ' selected';
		  tmpStr += '>' + months[i] + '</option>';
	        }
	    tmpStr += '</select>';
	  } else {
	    tmpStr = tmpStr + '<table border="0" cellspacing="0" cellpadding="0"><tr><td><a href="javascript: parent.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">' + months[this.month] + '</td><td class="cal"><a href="javascript: parent.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 += '<input class="year" type="text" size="4"';
	  tmpStr += ' name="year" maxlength="4" onBlur="parent.g_Calendar.inputChange();" value="' + this.year + '">';
	  } else {
	  tmpStr += '<table border="0" cellspacing="0" cellpadding="0"><tr><td class="cal"><a href="javascript: parent.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: parent.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++){
		  tmpStr += '<td align="center" class="calDaysColor">' + daysOfWeek[(g_startDay+i)%7].substring(0,1) + '</td>';
		}
	  tmpStr += '</tr>';
	  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){
		     if (iCount==this.day && this.year==this.oYear && this.month==this.oMonth) tmpStr += 'class="calHighlightColor"';
			 else {
			    if (i==7-g_startDay || i==((7-g_startDay)%7)+1) tmpStr += 'class="calWeekend"';
				else tmpStr += 'class="cal"';
			 }
		     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) {
			   tmpStr += '<a class="cal" href="javascript: parent.g_Calendar.clickDay(' + iCount + ');">' + iCount + '</a>';
			 } else {
			   tmpStr += '<span class="disabled">' + iCount + '</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>'
	  return tmpStr;
	}
	

	Calendar.prototype.selectChange = function(){
	  this.month = this.targetDocument.forms[0].month.selectedIndex;
	  this.writeString(this.buildString());
	}
	

	Calendar.prototype.inputChange = function(){
	  var tmp = this.targetDocument.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){
	   // the "tmp" Object is the date field in the main document and is set by the "show" function (see below)
	   var tmp = eval('document.' + this.target);
 
	 var YEARS = "y";
	 var MONTHS = "M"
	 var DAY_NAME = "E";
	 var DAYS = "d";
	 var pos = 0;
	 var ch = "";
	 var length = 0;
	 var count = 0;    
     
     var index = day % 7;
     var dayOfWeek = index + this.getFirstDOM();
     
     if(dayOfWeek > 7 ){
       dayOfWeek = dayOfWeek -7;
     }
     
     dayOfWeek--;
     
     if(dayOfWeek < 0 ){
       dayOfWeek = 6;
     }
     
     tmp.value = "";
     do{
      if(ch != this.dateFormat.charAt(pos)){
         ch = this.dateFormat.charAt(pos);
         if(ch == DAYS){
            length = getLength(this.dateFormat,pos,DAYS);
            if(length == 2 && day < 10){
              tmp.value += "0";
            }
            tmp.value += day; 
         }else if(ch == DAY_NAME){
            length = getLength(this.dateFormat,pos,DAY_NAME);
            if(length == 1){
              tmp.value += daysOfWeek[dayOfWeek].substr(0,1)
            }else if(length == 2){
              tmp.value += daysOfWeek[dayOfWeek].substr(0,2);
            }else if(length == 3){
              tmp.value += daysOfWeek[dayOfWeek].substr(0,3);
            }else {
              tmp.value += daysOfWeek[dayOfWeek];
            }
         }else if(ch == YEARS){
            length = getLength(this.dateFormat,pos,YEARS);
            var yearStr = this.year.toString();
            tmp.value += yearStr.substr(yearStr.length-length, yearStr.length); 
         }else if(ch == MONTHS){
            length = getLength(this.dateFormat,pos,MONTHS);
            if(length == 2 && this.month < 9){
              tmp.value += "0";
              tmp.value += this.month +1;
            }else if(length == 3){
              tmp.value += this.months[this.month].substr(0,3);
            }else if(length == 4){
              tmp.value += this.months[this.month];
            }else {
              tmp.value += this.month +1;
            }
         }else{
             tmp.value += ch;
         }
       }else if(ch != DAY_NAME  && ch != DAYS && ch != MONTHS && ch != YEARS){
            tmp.value += ch;
      }else {
         count++; 
      }
      pos++;
    }while(pos < this.dateFormat.length );
    
    this.targetIframe.style.visibility='hidden';
  }
	
	
	
	function getLength(value, stratIndex , character){
		var start = stratIndex;
		var end = stratIndex;
		do{
			end++;
		}while(value.indexOf(character,end) != -1);
   
		return end-start;
	}


	Calendar.prototype.writeString = function(str){
	    // retrieve the (only) <body> tag in the void.html Iframe source
	    var innerBody = this.targetDocument.getElementsByTagName('body').item(0);
	    innerBody.innerHTML = str;
	}


	// EXAMPLE: onclick="g_calendar.show(event,current_form.current_field, ...)
	Calendar.prototype.show = function(evt, target, bHasDropDown, dateFormat, daysPar, monthsPar , dateFrom, dateTo){
	//trim uset to solved resin tag bug "<...   ..../> \"
	dateFormat = dateFormat.replace(/^\s+/,'').replace(/\s+$/,'');
	
	daysPar = daysPar.replace(/^\s+/,'').replace(/\s+$/,'');
	monthsPar = monthsPar.replace(/^\s+/,'').replace(/\s+$/,'');
	
	daysOfWeek = daysPar.split("|");
    months = monthsPar.split("|");  
	this.daysOfWeek = daysOfWeek;
	this.months = months;
	
	if (is_ie5up || is_nav6up || is_opera7up) {
	// calendar can restrict choices between 2 dates, if however no restrictions
	// are made, let them choose any date between 1900 and 3000
	if (dateFrom) this.dateFrom = dateFrom; else this.dateFrom = new Date(1900,0,1);
	this.dateFromDay = padZero(this.dateFrom.getDate());
	this.dateFromMonth = padZero(this.dateFrom.getMonth());
	this.dateFromYear = this.dateFrom.getFullYear();
	if (dateTo) this.dateTo = dateTo; else this.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;
	if (dateFormat) this.dateFormat = dateFormat; else this.dateFormat = 'dd-MMM-yyyy';
	
	 var MONTH = "M";
     var DAY = "d";
     var YEAR = "y";
     var DAY_NAME = "E";
     
     orderMonth = this.dateFormat.indexOf(MONTH);
     orderDay = this.dateFormat.indexOf(DAY);
     orderYear = this.dateFormat.indexOf(YEAR);
     orderDayName = this.dateFormat.indexOf(DAY_NAME); 
     
     monthLength = getMonthLength(orderMonth,this.dateFormat);
     dayLength = getDayLength(orderDay,this.dateFormat);
     yearLength = getYearLength(orderYear,this.dateFormat);
     dayNameLength = getDayNameLength(orderDayName,this.dateFormat);
     
     if (orderDay < orderYear && orderDay > orderMonth) { // month day year
          delim1 = this.dateFormat.substring(orderMonth + monthLength, this.dateFormat.indexOf("d"));
          delim2 = this.dateFormat.substring(this.dateFormat.indexOf("d") + dayLength, this.dateFormat.indexOf("y"));
     } else if (orderMonth < orderYear && orderMonth > orderDay) { //day month year
          delim1 = this.dateFormat.substring(orderDay + dayLength, this.dateFormat.indexOf("M"));
          delim2 = this.dateFormat.substring(this.dateFormat.indexOf("M") + monthLength, this.dateFormat.indexOf("y"));
     } else if (orderMonth > orderYear && orderMonth < orderDay) { //year month day
          delim1 = this.dateFormat.substring(orderYear +yearLength, this.dateFormat.indexOf("M"));
          delim2 = this.dateFormat.substring(this.dateFormat.indexOf("M") + monthLength, this.dateFormat.indexOf("d"));
     }
     
     
     
   	// hide IFRAME during computation (if already visible for another field)
	if (this.targetIframe.style.visibility=='visible') {
		  this.targetIframe.style.visibility='hidden';
		  return;
	}
	
	// move IFRAME to coordinates of mouse click (handle event)
	evt = (evt) ? evt : ((window.event) ? window.event : "") // if Netscape6/DOM, "evt" already contains event, otherwise (IE) set to window.event
	if (is_ie5up) {
		this.targetIframe.style.left = evt.clientX + document.body.scrollLeft;
		this.targetIframe.style.top = evt.clientY + document.body.scrollTop;
	} else if (is_nav6up || is_opera7up) {
		this.targetIframe.style.left = evt.pageX;
		this.targetIframe.style.top = evt.pageY;
	}
	
	// process the current date in the field (passed as "target") and setup calendar
	  this.target = target;
	  var tmp = eval('document.' + this.target);
	  
	  var fldValue = tmp.value;
	  	  
	  if(dateFormat.indexOf(DAY_NAME) > -1){
	      for(var i = 0; i<daysOfWeek.length; i++ ){
	         if(tmp.value.indexOf(daysOfWeek[i]) > -1){
	            var str = daysOfWeek[i];
	            fldValue = tmp.value.substring(0,tmp.value.indexOf(str));
	            fldValue += "EEEE";
	            fldValue += tmp.value.substring(tmp.value.indexOf(str) + str.length);
	            break;
	         }else if(fldValue.indexOf(daysOfWeek[i].substr(0,dayNameLength)) > -1){
	            var str = daysOfWeek[i].substr(0,dayNameLength);
	            fldValue = tmp.value.substring(0,tmp.value.indexOf(str));
	            if(dayNameLength == 3){
					fldValue += "EEE";
	            }else if(dayNameLength == 2){
					fldValue += "EE";
	            }else{
					fldValue += "E";
	            }
	            fldValue += tmp.value.substring(tmp.value.indexOf(str) + str.length);
	            break;
	         }
	      }
	       
	  }
	  var strToDelete = "";
	  for(var i = 0; i < dateFormat.length; i++){
	     var ch = dateFormat.charAt(i);
	     if(ch==MONTH || ch==DAY || ch==YEAR){
	       break;
	     }else{
	       strToDelete = strToDelete + ch; 
	     }
	  
	  }
	 fldValue = fldValue.substring(strToDelete.length);
	  
var theDate = new Date();
this.year = this.oYear = theDate.getFullYear();
this.month = this.oMonth = theDate.getMonth();
this.day = this.oDay = theDate.getDate();

if (tmp && fldValue) {
	var parsed_year;
	var preparsed_month;
	var parsed_month;
	var parsed_day;
	    var atmp = splitDate(delim1,delim2,fldValue);
	    if (orderDay < orderYear && orderDay > orderMonth) { // month day year
		preparsed_month = atmp[0];
		parsed_day = parseInt(atmp[1],10);
		parsed_year = parseInt(atmp[2],10);
	} else if (orderMonth < orderYear && orderMonth > orderDay) { // day month year
		preparsed_month = atmp[1];
		parsed_day = parseInt(atmp[0],10);
		parsed_year = parseInt(atmp[2],10);
	} else if (orderMonth > orderYear && orderMonth < orderDay) { // year month day
		preparsed_month = atmp[1];
		parsed_day = parseInt(atmp[2],10);
		parsed_year = parseInt(atmp[0],10);
				}
		   
           if(monthLength == 2){
		parsed_month = parseInt(preparsed_month-1,10);
		   }else  if(monthLength > 2){
		     for (var i=0;i<months.length;i++){
			if (preparsed_month.substr(0,3).toLowerCase()== months[i].substr(0,3).toLowerCase()) {
				parsed_month = i;
				break;
				}
			 }
		   }

	if(parsed_year < 100) {
		if(parsed_year < 25) {
			parsed_year = parsed_year + 2000;
  			  }else{
			parsed_year = parsed_year + 1900;
  			  }
            }
				 
	if (parsed_year >= 1900 && parsed_year <= 2999) {
			this.year = this.oYear = parsed_year;
				      }
	if (parsed_month >= 0 && parsed_month <= 11) {
		this.month = this.oMonth = parsed_month;
			      }
	this.day = this.oDay = parsed_day;
		   }
		   
	  this.writeString(this.buildString());
	  
	  this.targetIframe.style.visibility='visible';
	  }
	}

	Calendar.prototype.hide = function(){
		this.targetIframe.style.visibility='hidden';
	}


	// function used to hide the calendar upon a user click (outside the calendar)
	function handleDocumentClick(e){
	e = (e) ? e : ((window.event) ? window.event : "") // if Netscape6/DOM, "e" already contains event, otherwise (IE) set to window.event
	if (g_Calendar) { // g_Calendar is initialized during the page "onload" event which is triggered when the page has been completely loaded, but the user could click BEFORE the page is not completely loaded.
	var bTest; // boolean used to test if user clicked inside the calendar. TRUE=clicked inside.
	var tmpIframe = g_Calendar.targetIframe;
	if (is_nav6up || is_opera7up) {
	    bTest = (e.pageX > parseInt(tmpIframe.style.left,10) && e.pageX <  (parseInt(tmpIframe.style.left,10)+125) && e.pageY < (parseInt(tmpIframe.style.top,10)+125) && e.pageY > parseInt(tmpIframe.style.top,10));
	} else if (is_ie5up) {
	   // we are catching a click event in the "window" object, so e.x gives the correct value
	   bTest = (e.x > parseInt(tmpIframe.style.left,10) && e.x <  (parseInt(tmpIframe.style.left,10)+125) && e.y < (parseInt(tmpIframe.style.top,10)+125) && e.y > parseInt(tmpIframe.style.top,10));
	}

	var tmpTargetElement; // object used to check if user clicked an item in the calendar
        if (e.target) {
            tmpTargetElement = (e.target.nodeType == 3) ? e.target.parentNode : e.target
        } else {
            tmpTargetElement = e.srcElement
        }
	// if clicked
	if (tmpTargetElement.name!='imgCalendar' && tmpTargetElement.name!='month'  && tmpTargetElement.name!='year' && tmpTargetElement.name!='calendar' && !bTest)
	{
		g_Calendar.hide();
	}
	} // if (g_Calendar)

	} // end function
	// ****************** capture click events in window ***********************
	window.document.onclick=handleDocumentClick;
	// *************************************************************************
	

	// utility function
	function padZero(num) {
	  return ((num <= 9) ? ("0" + num) : num);
	}
	
	function getMonthLength(monthPos,dateFormat) {
	  var start = monthPos;
	  var end = monthPos;
	  while(dateFormat.indexOf("M",end) != -1){
	    end++;
	  }
	  
	  return end - start;
	}
	
	function getDayLength(dayPos,dateFormat) {
	  var start = dayPos;
	  var end = dayPos;
	  while(dateFormat.indexOf("d",end) != -1){
	    end++;
	  }
	  
	  return end - start;
	}
	
	function getYearLength(yearPos,dateFormat) {
	  var start = yearPos;
	  var end = yearPos;
	  while(dateFormat.indexOf("y",end) != -1){
	    end++;
	  }
	  return end - start;
	}
	
	function getDayNameLength(dnPos,dateFormat) {
	  var start = dnPos;
	  var end = dnPos;
	  while(dateFormat.indexOf("E",end) != -1){
	    end++;
	  }
	  return end - start;
	}
	
	function splitDate(delim1,delim2,value){
	     var result = new Array(3);
	     if(delim1 == delim2){
				result = value.split(delim1);
		 }
	     else {
	       var index1 = value.indexOf(delim1);
		   var index2 = value.indexOf(delim2, index1+delim1.length);
		   if(index1 < index2){
				result[0] = value.substr(0,index1);
				result[1] = value.substring(index1 + delim1.length,index2);
				result[2] = value.substr(index2 + delim2.length,value.length);
			}else if(index1 > index2){
				result[0] = value.substr(0,index2);
				result[1] = value.substring(index2 + delim2.length,index1);
				result[2] = value.substr(index1 + delim1.length,value.length);
			}
	     }
	     return result;
	}
	
	


	// 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());
	}
	

