// Talk to flash 2008
	function tellFlash(s){
		if(window.mymovie) window.document["mymovie"].SetVariable("sectionNumberUpdate", s);
		if(document.mymovie) document.mymovie.SetVariable("sectionNumberUpdate", s);
	}
	
// Search box 2008
	function searchEvent(s){
		var el = document.getElementById('search');
		if(s){
			if(el.value=='Search') el.value='';
		}else{
			if(el.value=='') el.value='Search';
		}
	}


function launch_livechat()
{
window.open('https://hba.custhelp.com/cgi-bin/hba.cfg/php/enduser/live.php','','width=990,height=680,scrollbars=yes,toolbar=no,menubar=no,location=no,resizable=yes');
}

function helmParent(theURL) {
 window.opener.location.href='/' + siteId + '/' + subSiteId + '/App/' + theURL;
 window.opener.focus();
 window.close();
}
function siteParent(theURL) {
 window.opener.location.href='/' + siteId + '/' + subSiteId + '/' + contentPre + '/' + theURL;
 window.opener.focus();
 window.close();
}



function printit (page, height, width) {
  page = checkExtension(page);
  
   if ((page.indexOf('mktg_') >= 0) || (page.indexOf('hosp_detail_') >= 0) || (page.indexOf('extras_detail_') >= 0)) {
		printPre = "App";
		var pos = page.indexOf(".htm");
		if (pos >= 0)
		{
			page = Left(page,pos);
		}
		/*page += ".action?status=p";*/
		page += ".action";
	}

  var url = location.protocol + '//' + location.host + '/' + siteId + '/' + subSiteId + '/' + printPre + '/' + page;
  
  var features = 'width=' + width +
                 ',height=' + height +
                 ',hotkeys=no,location=no,personalbar=no,status=no,toolbar=no,scrollbars=yes,resizable=yes';
				 
  var featuresmed = 'width=' + width +
                 ',height=' + height +
                 ',hotkeys=no,location=no,personalbar=no,status=no,toolbar=yes,scrollbars=yes,resizable=yes';

  contextHelpWin = window.open(url,'ContextHelp',featuresmed);
  contextHelpWin.focus();

}


function Left(str, n){
	if (n <= 0)
	    return "";
	else if (n > String(str).length)
	    return str;
	else
	    return String(str).substring(0,n);
}
function Right(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function select_jumpMenu(selObj) {
  var page = selObj.options[selObj.selectedIndex].value;
  if (page.indexOf('.do') != -1) {
    helm(page);
  } 
  if (page.indexOf('.hcsp') != -1) {
    site(page);
  }
}

function makeHelmUrl(page) {
  return 'https://' + location.host + '/' + siteId + '/' + subSiteId + '/' + weblogicDir + '/' + page;
}

function helm(page) {
  location.href = makeHelmUrl(page);
}

function site(page, newWindow) {
    //var url = 'http' + protocol + '://' + location.host + relativepath + docPrefix + page;
	if ((page.indexOf('mktg_') >= 0) || (page.indexOf('hosp_detail_') >= 0) || (page.indexOf('extras_detail_') >= 0)) {
		dispDir = "App";
		var pos = page.indexOf(".htm");
		if (pos >= 0)
		{
			page = Left(page,pos);
		}
		page += ".action";
	} else if (page.indexOf('faq_') >= 0)  {
		dispDir = faqPre;
	} else if (page.indexOf('gloss_') >= 0)  {
		dispDir = glossPre;
	} else if (page.indexOf('_form.htm') >= 0) {
		dispDir = downloadPre;
	} else {//else assume content
		dispDir = contentPre;
	}
	
	//remove .pdf from the extension
	var pageOf = page.indexOf('.hcsp');
	
	if (pageOf >= 0) {
	page = Left(page, pageOf);
	}
	
	pageOf = -1;
	pageOf = page.indexOf('.pdf');
	//remove .pdf from the extension
	if (pageOf >= 0) {
	page = Left(page, pageOf);
	}
	
	page = checkExtension(page);
	var url = 'http' + protocol + '://' + location.host + '/' + siteId + '/' + subSiteId + '/' + dispDir + '/' + page;

	if (newWindow) {
		javascript:window.open(url);
	} else {
		location.href = url;
	}
}

function siteUrl(page, dontUsePrefix) {
	if (page.indexOf('icon_loc') >= 0 || page.indexOf('icon_arrow') >= 0) {
	//fix just for icon images on functions which use this function to get their location
	var url = ImagesRoot + page;
	
	} else {
	
		if ((page.indexOf('mktg_') >= 0) || (page.indexOf('hosp_detail_') >= 0) || (page.indexOf('extras_detail_') >= 0)) {
			dispDir = productPre;
		} else if (page.indexOf('faq_') >= 0)  {
			dispDir = faqPre;
		} else if (page.indexOf('gloss_') >= 0)  {
			dispDir = glossPre;
		} else {//else assume content
			dispDir = contentPre;
		}
		
		page = checkExtension(page);
		if (dontUsePrefix) {
			var url = '/' + siteId + '/' + subSiteId + '/' + dispDir + '/' + page;
		} else { 
			var url = 'http' + protocol + '://' + location.host + '/' + siteId + '/' + subSiteId + '/' + dispDir + '/' + page;
		} 
	}
	return url;
}

function siteUrl_old(page, dontUsePrefix) {
	if (dontUsePrefix) {
    	var url = relativepath + docPrefix + page;
	} else {	
    	var url = 'http' + protocol + '://' + location.host + relativepath + docPrefix + page;
	}
	return url;
}

function checkExtension(page) {
	var url;
  	if (page.indexOf('.htm') >= 0 || page.indexOf('.do') >= 0 || page.indexOf('.action') >= 0)  {
	//.htm, or .do or .action already there, don't append
	url = page;
	} else {
	//Add .htm to the end if it is not already there	
	url = page + '.htm';
	} 
	return url;
}


function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_nbGroup(event, grpName) { //v6.0
  var i,img,nbArr,args=MM_nbGroup.arguments;
  if (event == "init" && args.length > 2) {
    if ((img = MM_findObj(args[2])) != null && !img.MM_init) {
      img.MM_init = true; img.MM_up = args[3]; img.MM_dn = img.src;
      if ((nbArr = document[grpName]) == null) nbArr = document[grpName] = new Array();
      nbArr[nbArr.length] = img;
      for (i=4; i < args.length-1; i+=2) if ((img = MM_findObj(args[i])) != null) {
        if (!img.MM_up) img.MM_up = img.src;
        img.src = img.MM_dn = args[i+1];
        nbArr[nbArr.length] = img;
    } }
  } else if (event == "over") {
    document.MM_nbOver = nbArr = new Array();
    for (i=1; i < args.length-1; i+=3) if ((img = MM_findObj(args[i])) != null) {
      if (!img.MM_up) img.MM_up = img.src;
      img.src = (img.MM_dn && args[i+2]) ? args[i+2] : ((args[i+1])? args[i+1] : img.MM_up);
      nbArr[nbArr.length] = img;
    }
  } else if (event == "out" ) {
    for (i=0; i < document.MM_nbOver.length; i++) {
      img = document.MM_nbOver[i]; img.src = (img.MM_dn) ? img.MM_dn : img.MM_up; }
  } else if (event == "down") {
    nbArr = document[grpName];
    if (nbArr)
      for (i=0; i < nbArr.length; i++) { img=nbArr[i]; img.src = img.MM_up; img.MM_dn = 0; }
    document[grpName] = nbArr = new Array();
    for (i=2; i < args.length-1; i+=2) if ((img = MM_findObj(args[i])) != null) {
      if (!img.MM_up) img.MM_up = img.src;
      img.src = img.MM_dn = (args[i+1])? args[i+1] : img.MM_up;
      nbArr[nbArr.length] = img;
  } }
}
function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_goToURL() { //v3.0
  var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
  for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}

function addBookmark() {
  if (window.external)
    external.AddFavorite(location.href, document.title)
  else
    alert("Your browser doesn't support this feature.");
}

function MM_timelinePlay(tmLnName, myID) { //v1.2
  //Copyright 1997 Macromedia, Inc. All rights reserved.
  var i,j,tmLn,props,keyFrm,sprite,numKeyFr,firstKeyFr,propNum,theObj,firstTime=false;
  if (document.MM_Time == null) MM_initTimelines(); //if *very* 1st time
  tmLn = document.MM_Time[tmLnName];
  if (myID == null) { myID = ++tmLn.ID; firstTime=true;}//if new call, incr ID
  if (myID == tmLn.ID) { //if Im newest
    setTimeout('MM_timelinePlay("'+tmLnName+'",'+myID+')',tmLn.delay);
    fNew = ++tmLn.curFrame;
    for (i=0; i<tmLn.length; i++) {
      sprite = tmLn[i];
      if (sprite.charAt(0) == 's') {
        if (sprite.obj) {
          numKeyFr = sprite.keyFrames.length; firstKeyFr = sprite.keyFrames[0];
          if (fNew >= firstKeyFr && fNew <= sprite.keyFrames[numKeyFr-1]) {//in range
            keyFrm=1;
            for (j=0; j<sprite.values.length; j++) {
              props = sprite.values[j]; 
              if (numKeyFr != props.length) {
                if (props.prop2 == null) sprite.obj[props.prop] = props[fNew-firstKeyFr];
                else        sprite.obj[props.prop2][props.prop] = props[fNew-firstKeyFr];
              } else {
                while (keyFrm<numKeyFr && fNew>=sprite.keyFrames[keyFrm]) keyFrm++;
                if (firstTime || fNew==sprite.keyFrames[keyFrm-1]) {
                  if (props.prop2 == null) sprite.obj[props.prop] = props[keyFrm-1];
                  else        sprite.obj[props.prop2][props.prop] = props[keyFrm-1];
        } } } } }
      } else if (sprite.charAt(0)=='b' && fNew == sprite.frame) eval(sprite.value);
      if (fNew > tmLn.lastFrame) tmLn.ID = 0;
  } }
}

function MM_timelineGoto(tmLnName, fNew, numGotos) { //v2.0
  //Copyright 1997 Macromedia, Inc. All rights reserved.
  var i,j,tmLn,props,keyFrm,sprite,numKeyFr,firstKeyFr,lastKeyFr,propNum,theObj;
  if (document.MM_Time == null) MM_initTimelines(); //if *very* 1st time
  tmLn = document.MM_Time[tmLnName];
  if (numGotos != null)
    if (tmLn.gotoCount == null) tmLn.gotoCount = 1;
    else if (tmLn.gotoCount++ >= numGotos) {tmLn.gotoCount=0; return}
  jmpFwd = (fNew > tmLn.curFrame);
  for (i = 0; i < tmLn.length; i++) {
    sprite = (jmpFwd)? tmLn[i] : tmLn[(tmLn.length-1)-i]; //count bkwds if jumping back
    if (sprite.charAt(0) == "s") {
      numKeyFr = sprite.keyFrames.length;
      firstKeyFr = sprite.keyFrames[0];
      lastKeyFr = sprite.keyFrames[numKeyFr - 1];
      if ((jmpFwd && fNew<firstKeyFr) || (!jmpFwd && lastKeyFr<fNew)) continue; //skip if untouchd
      for (keyFrm=1; keyFrm<numKeyFr && fNew>=sprite.keyFrames[keyFrm]; keyFrm++);
      for (j=0; j<sprite.values.length; j++) {
        props = sprite.values[j];
        if (numKeyFr == props.length) propNum = keyFrm-1 //keyframes only
        else propNum = Math.min(Math.max(0,fNew-firstKeyFr),props.length-1); //or keep in legal range
        if (sprite.obj != null) {
          if (props.prop2 == null) sprite.obj[props.prop] = props[propNum];
          else        sprite.obj[props.prop2][props.prop] = props[propNum];
      } }
    } else if (sprite.charAt(0)=='b' && fNew == sprite.frame) eval(sprite.value);
  }
  tmLn.curFrame = fNew;
  if (tmLn.ID == 0) eval('MM_timelinePlay(tmLnName)');
}

function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}

function LTrim(str)
{
   var whitespace = new String(" \t\n\r");
   var s = new String(str);
   if (whitespace.indexOf(s.charAt(0)) != -1) {
      var j=0, i = s.length;
           while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
         j++;
      s = s.substring(j, i);
   }
   return s;
}

function RTrim(str)
{
   var whitespace = new String(" \t\n\r");
   var s = new String(str);
   if (whitespace.indexOf(s.charAt(s.length-1)) != -1) {
      var i = s.length - 1;       // Get length of string
      while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
         i--;
      s = s.substring(0, i+1);
   }
   return s; 
}

function productPage (cover) {

var z='hcintra_006233.hcsp';
var t='<!--$HospTHC-->';
var p='<!--$HospTHC-->';
var i='<!--$HospEBP-->';
var b='<!--$HospEB-->';
var n='<!--$HospEB-->';
var g='<!--$HospE-->';
var j='<!--$HospE-->';
var q='<!--$HospECEB-->';
var r='<!--$HospECE-->';
var c='<!--$HospSNS-->';
var u='<!--$HospFE-->';
var y='<!--$HospSCS-->';
var v='<!--$HospOVHC-->';
var l='<!--$HospPHC-->';
var u4='<!--$ExtUHC-->';
var m='<!--$ExtPE-->';
var e='<!--$ExtGE-->';
var y7='<!--$ExtYCE-->';
var y8='<!--$ExtYCE-->';
var a='<!--$ExtYCEP-->';
var c='<!--$ExtYCEP-->';
var x='<!--$ExtSE-->';
var h='<!--$ExtBE-->';
var s='<!--$ExtGD-->';


	cover = cover.toLowerCase();
	if (cover == 'c')
		return c;	
	else if (cover == 'z')
 		return z;
 	else if (cover == 't')
        return t; 
    else if (cover == 'p')
        return p; 
     else if (cover == 'i')
        return i; 
     else if (cover == 'b')
        return b; 
     else if (cover == 'n')
        return n; 
     else if (cover == 'g')
        return g; 
     else if (cover == 'j')
        return j; 
     else if (cover == 'q')
        return q; 
        else if (cover == 'r')
                return r; 
        else if (cover == 'u')
                return u; 
        else if (cover == 'y')
                return y; 
        else if (cover == 'v')
                return v; 
        else if (cover == 'l')
                return l; 
        else if (cover == '4')
                return u4; 
        else if (cover == 'm')
                return m; 
        else if (cover == 'e')
                return e; 
        else if (cover == '7')
                return y7; 
        else if (cover == '8')
                return y8; 
        else if (cover == 'a')
                return a; 
        else if (cover == 'x')
                return x; 
        else if (cover == 'h')
                return h; 
        else if (cover == 's')
                return s; 
}
function ratechange(customer,cover) {
	customer = RTrim(LTrim(customer));
	cover = RTrim(LTrim(cover));
    var url = 'https://' + location.host + '<!--$RelativePath-->' + docPrefix + customer + productPage(cover);
	location.href = url;
}

function openContextHelp(page, height, width, vps) {
  //var url = location.protocol + '//' + location.host + relativepath + docPrefix + page;
  //strip hcsp off end of page if hcsp to minimise code changes
  var pageOf = page.indexOf('.hcsp');
  var popupPreLocal = popupPre;

  if (pageOf >= 0) {
  	page = Left(page, pageOf);
  }
  
  if (page.indexOf('fnc_') >= 0) {
  	popupPreLocal = 'content';
  } else if (page.indexOf('.do') >= 0 || page.indexOf('.action') >= 0) {	
  	popupPreLocal = 'app';	
  }
 
  page = checkExtension(page);
  var url = location.protocol + '//' + location.host + '/' + siteId + '/' + subSiteId + '/' + popupPreLocal + '/' + page;
  var features = 'width=' + width +
                 ',height=' + height +
                 ',hotkeys=no,location=no,personalbar=no,status=no,toolbar=no,scrollbars=yes,resizable=yes';

  contextHelpWin = window.open(url,'ContextHelp',features);
  contextHelpWin.focus();
}

function resetFields(theForm, theFields) {
  if (confirm("Are you sure you want to clear the information you have entered on this page?")) {
    if (!theFields || theFields.length == 0) {
      theForm.reset();
    } else {
      with(theForm) {
        for (fieldIndex in theFields) {
          var fieldRef = elements[theFields[fieldIndex]];
          if (!fieldRef) continue;
                if (!fieldRef.type) {
                  if (fieldRef[0] && fieldRef[0].type == 'radio') {
                    fieldRef[0].checked=true;
                  }
                  continue;
                }
          if (fieldRef.type == 'checkbox') {fieldRef.checked=false;continue}
          if (fieldRef.type == 'text') {fieldRef.value='';continue}
		  if (fieldRef.type == 'password') {fieldRef.value='';continue}
          if (fieldRef.type == 'textarea') {fieldRef.value='';continue}
          if (fieldRef.type == 'select-one' || fieldRef.type == 'select-multiple') {fieldRef.value=fieldRef.options[0].value;continue}
        }
      }
    }
  }
}

//  var bikky = document.cookie;

//  function getCookie(name) { // use: getCookie("name");
//    var index = bikky.indexOf(name + "=");
//    if (index == -1) return null;
//    index = bikky.indexOf("=", index) + 1;
//    var endstr = bikky.indexOf(";", index);
//    if (endstr == -1) endstr = bikky.length;
//    return unescape(bikky.substring(index, endstr));
//  }

//  var today = new Date();
//  var expiry = new Date(today.getTime() + 1 * 24 * 60 * 60 * 1000); // plus 1 days
//  var expired = new Date(today.getTime() - 1 * 24 * 60 * 60 * 1000); // less 1 days
//  var expiry = new Date(today.getTime() + 15 * 1000); // plus 5 secs
//  var expired = new Date(today.getTime() - 15 * 1000); // less 5 secs
//  var expiry = new Date(today.getTime() + 5 * 60 * 1000); // plus 15 seconds
//  var expired = new Date(today.getTime() - 5 * 60 * 1000); // less 15 seconds

//  function setCookie(name, value) { // use: setCookie("name", value);
//    if (value != null && value != "")
//      document.cookie=name + "=" + escape(value) + "; expires=" + expiry.toGMTString();
//    bikky = document.cookie; // update bikky
//    return getCookie(name) != null; // return false if the cookie was refused
//  }

//  function deleteCookie(name) { // use: deleteCookie("name");
//    document.cookie=name + "=null; expires=" + expired.toGMTString(); // delete cookie
//    bikky = document.cookie; // update bikky
    //document.forms[0].cookieContent.value = formatCookie(); // display cookie content
//  }

// JavaScript Document



    /*
    *****************************************************************************************************
    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 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;

    // 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('');
        document.writeln('<style type="text/css">');
        document.writeln('#container {');
        document.writeln('position : absolute;');
        document.writeln('left : 100px;');
        document.writeln('top : 100px;');
        document.writeln('width : 124px;');;
        browser.platform=='Win32'?height=140:height=145;
        document.writeln('height : ' + height +'px;');
        document.writeln('clip:rect(0px 124px ' + 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.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="'+ ImagesRootGeneric + '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="'+ ImagesRootGeneric + '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="';
        // get round NS4 win32 lenght of year input problem
        (browser.ns4 && browser.platform=='Win32')?tmpStr += 1:tmpStr += 4;
      tmpStr += '" name="year" maxlength="4" onBlur="g_Calendar.inputChange();" value="' + this.year + '">';
      } else {
      tmpStr += '<table border="0" cellspacing="0" cellpadding="0"><tr><td class="cal"><a href="javascript: g_Calendar.changeYear(-1);"><img name="calendar" src="'+ ImagesRootGeneric + '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="'+ ImagesRootGeneric + '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">' + this.daysOfWeek[(g_startDay+i)%7] + '</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: 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 = 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){
       var tmp = eval('document.' + this.target);
       tmp.value = this.formatDateAsString(day,this.month,this.year);
        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){
    // calendar can restrict choices between 2 dates, if however no restrictions
    // are made, let them choose any date between 1900 and 3000
    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 = dateFormat || 'dd-mmm-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;
      }
      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':
           this.month = this.oMonth = parseInt(atmp[1]-1,10);
           this.day = parseInt(atmp[0],10);
           this.year = this.oYear = parseInt(atmp[2],10);
           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());
      }

     // 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);
    //}//-->
