var newwindow='';
function mobiOn(mobidomain){setCookie('mobPref','on','','/','','');if(mobidomain){window.location='http://'+mobidomain}}
function mobiOff(){if(document.getElementById('mobileSplashOuter')){document.getElementByid('mobileSplashOuter').style.display='none';}var now = new Date();var ex=new Date(now.getTime() + ( 1000 * 60 * 60 * 1) );setCookie('mobPref','off',ex,'/','','')}
function myVoid(){ ; } // do nothing
function trim(sStr){while(sStr.substring(0,1)== ' '){sStr=sStr.substring(1,sStr.length);}while(sStr.substring(sStr.length-1, sStr.length)==' '){sStr=sStr.substring(0,sStr.length-1);}return sStr;}
function rollover(doc_name,img_name,img_src){if(isString(img_name)){doc_name.getElementById(img_name).src=img_src;}else if(isObject(img_name)){img_name.src=img_src;}else{return -1;}}
function pngrollover(doc_name,img_name,img_src){if(document.all){doc_name.getElementById(img_name+'div').style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader (src=\''+img_src+'\', sizing Method=\'scale\')';}else{doc_name.getElementById(img_name + 'img').src=img_src;}}
function bannerRotate(banners,anchor_target_id,image_target_id,myIndex,image_target_attribute){var d=document;var n;if(!myIndex){n=Math.floor(Math.random()*banners.length);}else{n=myIndex}switch(image_target_attribute){case'backgroundImage':d.getElementById(image_target_id).style.backgroundImage = "url(" + banners[n][0] + ")";break;default:if(d.getElementById(image_target_id)){d.getElementById(image_target_id).src=banners[n][0];}if(anchor_target_id!=null){if(d.getElementById(anchor_target_id)){d.getElementById(anchor_target_id).href=banners[n][1];}}}return n;}
function bannerTextRotate (banners, div_target_id) {var n;n=Math.floor(Math.random() * banners.length);document.getElementById(div_target_id).innerHTML=banners[n];return 0;}
/*Code for fixing Internet Explorer!!!*/
/*Fortunately, can use some DOM1 methods with IE5 but still have to resort to IE5 DHTML to retrieve objects.
/*IE4, like NS4, does not support the DOM model at all and therefore the help elements probably won't disappear, anyway... i think*/
function fixIERender(doc_name) {var imgs=document.body.all.tags("img");for(i=0;i<imgs.length;i++){if(imgs[i].getAttributeNode('class').value=='infoBubbleDiv'){imgs[i].style.visibility='inherit';}}}
/*more code for fixing ie redraw bugs*/
function forceIERedraw(){if (document.all){var cn=document.body.className;document.body.className="nodisplay";document.body.className=cn;return 0;}}
window.onload=function(){if(document.getElementById('quoteDiv')){}if(document.all&&document.getElementById){window.event.cancelBubble=true;myMenus=document.getElementsByClass("menu");myId=document.getElementById("menu");if(myId)myMenus[myMenus.length]=myId;for(i=0;i<myMenus.length;i++){sfHover(myMenus[i]);}}forceIERedraw();}
document.getElementsByClass=function(needle){var my_array=document.getElementsByTagName("*");var retvalue=new Array();var i=0;var j=0;for(i=0,j=0;i<my_array.length;i++){var c=" "+my_array[i].className+" ";if(c.indexOf(" "+needle+" ")!=-1)retvalue[j++]=my_array[i];}return retvalue;}
/*menu gubbins*/
/*son of suckerfish: http://www.htmldog.com/articles/suckerfish/dropdowns/*/
sfHover= function(menuElement) {var sfEls=menuElement.getElementsByTagName("LI");
   for ( var i=0; i<sfEls.length; i++) { 
      sfEls[i].onmouseover=function() {this.className+=" sfhover";}
      sfEls[i].onmouseout=function() {this.className=this.className.replace(new RegExp(" sfhover\\b"),"");}
   }
}
/*font size  From:http://www.dynamicdrive.com/dynamicindex9/textsizer.js */
//Specify tags. Add or remove from list: //var tgs = new Array( 'div','td','tr');
var tgs = new Array( 'body');
//Specify spectrum of different font sizes:
//var szs = new Array( 'xx-small','x-small','small','medium','large','x-large','xx-large' );
var szs = new Array( 'x-small','small','medium','large','x-large');
//var startSz = 1;
function setFontSize(trgt,inc,mode) {
   if (!document.getElementById) return
   var d = document,cEl = null,sz = startSz,i,j,cTags;
   //alert('Start Size is '+startSz);
   cookieSize = '';
   if ( mode == 'ABS' ) {
      cookieSize = inc;
   }
   else {
      sz += inc;
      if ( sz < 0 ) sz = 0;
      if ( sz > 3 ) sz = 3;
      startSz = sz;
      cookieSize = szs[ sz ];
   } 
   // Store in cookie
   var now = new Date();
   var expires = new Date(now.getTime() + ( 1000 * 60 * 60 * 24) );

   if (!cookieSize) {
        expires = new Date(now.getTime() - 1000 * 60 * 60 * 24);
   }
   setCookie('fontSize', cookieSize, expires, '/');
   if ( !( cEl = d.getElementById( trgt ) ) ) cEl = d.getElementsByTagName( trgt )[ 0 ];
   if (mode == 'relative' || mode == 'ABS') {
      cEl.style.fontSize = cookieSize;
      for ( i = 0 ; i < tgs.length ; i++ ) {
	   cTags = cEl.getElementsByTagName( tgs[ i ] );
   	   for ( j = 0 ; j < cTags.length ; j++ ) cTags[ j ].style.fontSize = cookieSize;
	}
    } else {
	cEl.style.fontSize = parseInt(cEl.style.fontSize) + inc + "em";
	for ( i = 0 ; i < tgs.length ; i++ ) {
	   cTags = cEl.getElementsByTagName( tgs[ i ] );
	   for ( j = 0 ; j < cTags.length ; j++ ) cTags[ j ].style.fontSize = inc + "em";
	}
   }
}
/*popup window           */
/* this is the old style inline javascript window. Has been superceded by superPopUp which is called automagically using the article_popup uri*/
function newPopUp (url, name, options) {
	//assume for the time being it is 3 characters 
	var myWidth = options.substr(options.indexOf("width=") + 6, 3);
	var myHeight = options.substr(options.indexOf("height=") + 7, 3);
	if (!newwindow.closed && newwindow.location){
		newwindow.location.href = url;
		newwindow.resizeTo(myWidth, myHeight);
		newwindow.focus();
	}
	else{
		newwindow=window.open(url,name,options);
		if (!newwindow.opener) newwindow.opener = self;
	}
	if (window.focus) {newwindow.focus()}
}
/*popup window           */
function superPopUp(myWindow,myWidth,myHeight,options){myWindow.resizeTo(myWidth, myHeight);return;}
/*kev's pagination script          */
function pagination(anchor,current_page,maxpage,thisURI){var work_str='';if(current_page==0&&maxpage==1){return '';}for(i=0;i<maxpage;i++){if(i==current_page){work_str=work_str+' '+(i+1);}else{if(!thisURI){thisURI='';}work_str=work_str+' <a href="'+thisURI+'?pa='+i+'#'+anchor+'">'+(i+1)+'</a>';}}return work_str;}
/*kev's 'new' and 'updated' flags  */
function newFlag(dateStr,createdStr,startStr){
   var today=new Date();
   var one_day=1000*60*60*24;
   var dFmt='yyyy-MM-dd HH:mm';
   var pubDt=new Date(getDateFromFormat(dateStr,dFmt));  
   var crtDt=new Date(getDateFromFormat(createdStr,dFmt)); 
   var PubDysOld = Math.ceil((today.getTime()-pubDt.getTime())/(one_day)); 
   var CrtDysOld = Math.ceil((today.getTime()-crtDt.getTime())/(one_day)); 
   if(startStr){
      var strtDt = new Date(getDateFromFormat(startStr,'yyyy-MM-dd HH:mm')); 
      var SttDysOld=Math.ceil((today.getTime()-strtDt.getTime())/(one_day)); 
      if(SttDysOld<30){return '<span class="newarticle">New!</span>';}
      if(crtDt>=strtDt){
      if(PubDysOld<30&&(PubDysOld<SttDysOld)){return '<span class="newarticle">Updated!</span>';}}}if(PubDysOld<30){
      if(CrtdDysOld<30||(CrtDysOld<=PubDysOld)){return '<span class="newarticle">New!</span>';}
      else{return '<span class="newarticle">Updated!</span>';}}
      return ''; 
} 
/* date & time */
function getCalendarDate(){var months=new Array("January","February","March","April","May","June","July","August","September","October","November","December");
  var days=new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
  var now=new Date();
  var monthnumber=now.getMonth();
  var monthname=months[monthnumber];
  var monthday=now.getDate();
  var weekday=days[now.getDay()];
  var year=now.getYear();
  if(year<2000){year=year+1900;}
  var sp='&#xA0;'; 
  var dateString=weekday+sp+monthname+sp+monthday+sp+year;
  return dateString;
}
	
function getClockTime(){var now=new Date();
  var hour=now.getHours();
  var minute=now.getMinutes();
  var ap="AM";
  if(hour>11){ap="PM";}
  if(hour>12){hour=hour-12;}
  if(hour==0){hour=12;}
  if(minute<10){minute="0"+minute;}
  var timeString=hour+':'+minute+" "+ap;
  return timeString;
}
			
function doDate(dateString,dateFormat,nopadding) { 	
  var createdDate = new Date(getDateFromFormat(dateString,'yyyy-MM-dd HH:mm'));
  if(!(dateFormat)){dateFormat='d NNN y';}
    var spacer='&#xA0;';
  if(nopadding){spacer='';}
  return spacer+formatDate(createdDate,dateFormat)+spacer;
}
/* we're also going to need the tab objects we use everywhere for the lawgroup directory thingy */
//tab object
function initTab(objName) {
 this.obj = objName;
 this.aNodes = [];
};
//Node definition
function tabNode(id, name, url, title) {
 this.id = id;
 this.name = name;
 this.url = url;
 this.title = title;
};
//Add node
initTab.prototype.add = function(id, name, url, title) {
 this.aNodes[this.aNodes.length] = new tabNode(id, name, url, title);
};
//Function to dump tabs as linked list
initTab.prototype.dumpTabs = function () {
  var outputStr = "";
  for (n = 0; n < this.aNodes.length; n++) {
      outputStr = outputStr + '<li id=\"tab' + this.aNodes[n].id + 'l\"><a name=\"tab' + this.aNodes[n].id + '\" href=\"#\" id=\"tab' + this.aNodes[n].id + 'r\" onclick=\"' + this.aNodes[n].url + '\">' + this.aNodes[n].title + '</a></li>\n'
   }
  return outputStr;
}
//Function to write tabs to div
initTab.prototype.doTabs = function(myDiv) {
  outputStr = '<ul id="mb1" style="margin:0px;padding:0px;top:0px;left:0px;vertical-align:top;">' + initialTab.dumpTabs() + '</ul>';
  myDiv.innerHTML = outputStr;
  return;
}
function changePage(doc_name, page_name, tabclass) {
  var myPageIndex = -1;
  var dataPages = doc_name.getElementsByClass(tabclass);
  for (i = 0; i < dataPages.length; i++) {
      dataPages[i].style.display="none";
      if (dataPages[i].id == page_name) myPageIndex = i;
  }
 if (doc_name.getElementById("tab" + myPageIndex + "l")) {
     doc_name.getElementsByTagName("body").item(0).id = "body_tab" + myPageIndex;
 }
 doc_name.getElementById(page_name).style.display = "block";
 return false;
}
//this function allows us to dynamically add, remove, swap & check css classes for an object
function jscss(a,o,c1,c2){
  switch (a){
    case 'swap':
      o.className=!jscss('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
      break;
    case 'add':
      if(!jscss('check',o,c1)){o.className+=o.className?' '+c1:c1;}
      break;
    case 'remove':
      if(!jscss('check',o,c1)) return;
      var rep=o.className.match(' '+c1)?' '+c1:c1;
      o.className=o.className.replace(rep,'');
      break;
    case 'check':
      return new RegExp('\\b'+c1+'\\b').test(o.className)
      break;
  }
}

/***********************************************/
/* staffsearch profile switcher */
/***********************************************/
function profile_switch() {
   var d = document;
   var pb = d.getElementById('professional_biography');
   var prb = d.getElementById('personal_biography');
   var sP = d.getElementById('staffPhoto'); 
   var sPP = d.getElementById('staffPhotoPersonal');
   var sPI = d.getElementById('staff_professional_image');
   var sPRI = d.getElementById('staff_personal_image');
   var ps =  d.getElementById('profile_switcher');
   if (pb && pb.style.display != 'none') {
      if (sP && sPP) {
         sP.style.display='none';
      }
      if (sPP) {
         sPP.style.display='block';
      }
      pb.style.display = 'none';
      prb.style.display = 'block';
      if (sPI) {
         sPI.style.display = 'none';
         sPRI.style.display = 'block';
      }
      ps.value = 'View Professional Profile';
   } 
   else {
      if (sP) {
         sP.style.display='block';
      }
      if (sPP) {
         sPP.style.display='none';
      }
      pb.style.display = 'block';
      prb.style.display = 'none';
      if (sPI) {
	sPI.style.display = 'block';
        sPRI.style.display = 'none';
      }
      ps.value = 'View Personal Profile';
   }
}
/***********************************************/
/* show/hide faq function */
function skift(divId) { 
 var d = IDObject(divId);
 var Stat = d.style.display; 
 if (Stat != 'block') { 
	d.style.display = 'block'; 
 }else{ 
	d.style.display = 'none';
 }
}
function IDObject(id) {
 if (ie4) {
  return document.all[id]; 
 } else {
  return document.getElementById(id); 
 }
}
var ie4 = false;
if(document.all) {ie4=true;}
/***********************************************/
/* more show/hide faq function */
function expandFirst() {
document.getElementById(expandFirst.arguments[0]).style.display = "block";
for (var i=1; i<expandFirst.arguments.length; i++){document.getElementById(expandFirst.arguments[i]).style.display = "none";}}
function expandCollapse() {
for (var i=0; i<expandCollapse.arguments.length; i++) {var element = document.getElementById(expandCollapse.arguments[i]);element.style.display = (element.style.display == "none") ? "block" : "none";}
}

xMousePos=0;
yMousePos=0;
xMousePosMax=0;
yMousePosMax=0; 
function captureMousePosition(e) {
        if (document.layers) {
                // When the page scrolls in Netscape, the event's mouse position
                // reflects the absolute position on the screen. innerHight/Width
                // is the position from the top/left of the screen that the user is
                // looking at. pageX/YOffset is the amount that the user has
                // scrolled into the page. So the values will be in relation to
                // each other as the total offsets into the page, no matter if
                // the user has scrolled or not.
                xMousePos = e.pageX;
                yMousePos = e.pageY;
                xMousePosMax = window.innerWidth+window.pageXOffset;
                yMousePosMax = window.innerHeight+window.pageYOffset;
        } 
        else if (document.all) {
                // When the page scrolls in IE, the event's mouse position
                // reflects the position from the top/left of the screen the
                // user is looking at. scrollLeft/Top is the amount the user
                // has scrolled into the page. clientWidth/Height is the height/
                // width of the current page the user is looking at. So, to be
                // consistent with Netscape (above), add the scroll offsets to
                // both so we end up with an absolute value on the page, no
                // matter if the user has scrolled or not.
                //
                //NB. we are in standards compliant mode, so instead of using document.body, we must use document.body.parentNode, i.e. the HTML element
                if ( window.event && window.event.clientX ) {
                     if ( document.body ) {
                        xMousePos = window.event.clientX+document.body.parentNode.scrollLeft;
                        yMousePos = window.event.clientY+document.body.parentNode.scrollTop;
       
                        xMousePosMax = document.body.clientWidth+document.body.parentNode.scrollLeft;
                        yMousePosMax = document.body.clientHeight+document.body.parentNode.scrollTop;
                     }
                }
        } 
        else if (document.getElementById) {
                // Netscape 6 behaves the same as Netscape 4 in this regard
                xMousePos = e.pageX;
                yMousePos = e.pageY;
                xMousePosMax = window.innerWidth+window.pageXOffset;
                yMousePosMax = window.innerHeight+window.pageYOffset;
        }

}
//element geometry functions
function getElementLeft(myEl) {
        var parentLeft = 0;
        var total = 0;
        if (myEl.parentNode != null) {
                parentLeft = getElementLeft(myEl.parentNode);
                total = parentLeft + myEl.offsetLeft;
        } else {
                return 0;
        }
        return total;
}
function getElementTop(myEl) {
        var parentTop = 0;
        var total = 0;
        if (myEl.parentNode != null) {
                parentLeft = getElementTop(myEl.parentNode);
                total = parentTop + myEl.offsetTop;
        } else {
                return 0;
        }
        return total;
}
function myWidth() {
  var myWidth = 0
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
  } else if ( document.documentElement && document.documentElement.clientWidth ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
  } else if ( document.body && document.body.clientWidth ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
  }
  return myWidth;
}
function myHeight() {
  var myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myHeight = window.innerHeight;
  } else if( document.documentElement && document.documentElement.clientHeight ) {
    //IE 6+ in 'standards compliant mode'
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && document.body.clientHeight ) {
    //IE 4 compatible
    myHeight = document.body.clientHeight;
  }
  return myHeight;
}
function showPopUpAt(document, popup, el, x, y) {
   var s = el.style;
   document.getElementById(popup).style.left = x + "px";
   document.getElementById(popup).style.top = y + "px";
   document.getElementById(popup).style.display = 'block';
}
function showPopUpAtElement(document,popup, el, addOffSet) {
  var p = getAbsolutePos(el);
  var y_coord = p.y + el.offsetHeight;
  if ( addOffSet == 0 ) {
     y_coord = p.y;	      
  } 
  showPopUpAt(document, popup, el,p.x, y_coord);
}
function getAbsolutePos(el) {
  var r = { x: el.offsetLeft, y: el.offsetTop };
  if (el.offsetParent) {
     var tmp = getAbsolutePos(el.offsetParent);
     r.x += tmp.x;
     r.y += tmp.y;
  }
  return r;
}
function showPopOverHelp(doc_name, e, message) {
        if ( !doc_name.getElementById('popOverHelp') ) {
            return 0;
        }
	var x, y;
	if (doc_name.all) {
		x = window.event.clientX + document.body.scrollLeft;
		y = window.event.clientY + document.body.scrollTop;
	} else {
		x = e.pageX;
		y = e.pageY;
	}
	doc_name.getElementById('popOverHelp').style.left = (x + 15) + 'px';
	doc_name.getElementById('popOverHelp').style.top = (y + 15) + 'px';
	if (message != null) doc_name.getElementById('popOverHelp').innerHTML = message;
	doc_name.getElementById('popOverHelp').style.width = 'auto';
	if (myWidth() - parseInt(doc_name.getElementById('popOverHelp').style.left) < 100) {
		doc_name.getElementById('popOverHelp').style.left = (parseInt(doc_name.getElementById('popOverHelp').style.left) - 100) + 'px';
		doc_name.getElementById('popOverHelp').style.width = '50px';
	}
	if (myHeight() - parseInt(doc_name.getElementById('popOverHelp').style.top) < 100) {
		doc_name.getElementById('popOverHelp').style.top = (parseInt(doc_name.getElementById('popOverHelp').style.top) - 100) + 'px';
	}
	doc_name.getElementById('popOverHelp').style.display = 'block';
        if ( doc_name.getElementById('popupmenushadow') ) {
	doc_name.getElementById('popupmenushadow').style.left = (parseInt(doc_name.getElementById('popOverHelp').style.left) + 25) + 'px';
	doc_name.getElementById('popupmenushadow').style.top = (parseInt(doc_name.getElementById('popOverHelp').style.top) + 25) + 'px';
	if (myWidth() - parseInt(doc_name.getElementById('popupmenushadow').style.left) < 100) {
		doc_name.getElementById('popupmenushadow').style.left = (parseInt(doc_name.getElementById('popupmenushadow').style.left) - 100) + 'px';
		doc_name.getElementById('popupmenushadow').style.width = '15px';
	}
	if (myHeight() - parseInt(doc_name.getElementById('popupmenushadow').style.top) < 100) {
		doc_name.getElementById('popupmenushadow').style.top = (parseInt(doc_name.getElementById('popupmenushadow').style.top) - 100) + 'px';
	}
	doc_name.getElementById('popupmenushadow').style.display = 'block';
        }
	return true;
}
function editorPopOverHelp(doc_name, e, message) {
        captureMousePosition(e);
        doc_name.getElementById('popOverHelp').style.left = xMousePos - 10 + 'px'; 
        doc_name.getElementById('popOverHelp').style.top  = yMousePos - 10 + 'px';
        if (message != null) doc_name.getElementById('popOverHelp').innerHTML = message;
        var detect = navigator.userAgent.toLowerCase();
        if ( ( detect.indexOf('msie') + 1 ) == 0 ) {
           doc_name.getElementById('popOverHelp').style.width = 'auto';
        }
        doc_name.getElementById('popOverHelp').style.display = 'block';
        return true;
}
function hidePopOverHelp(doc_name) {
        if ( doc_name.getElementById('popOverHelp') ) {
	   doc_name.getElementById('popOverHelp').style.display = 'none';
	}		
        hideSubMenu(doc_name);
	return true;
}
function hideSubMenu(doc_name) {
        if ( doc_name.getElementById('submenu') ) {
           doc_name.getElementById('submenu').style.display = 'none';
        }         
                        return true;
}
function pageList(anchor, current_page, maxpage, thisURI, id ) {
   var work_str = '';
   if ( current_page == 0 && maxpage == 1 ) {
      return '';
   }
   var className = 'navNumber';
   for ( i=0; i<maxpage; i++) {
     className= 'navNumber';
     if ( i == current_page ) {
        className= 'navNumberOn';
     }
     if ( !thisURI ) {
        thisURI = '';
     }
     if ( anchor ) {
        work_str = work_str+' <a class="'+className+'" href="'+thisURI+'?id='+id+'&pa='+i+'#'+anchor+'">'+(i+1)+'</a>';
     }
     else {
        work_str = work_str+' <a class="'+className+'" href="'+thisURI+'?id='+id+'&pa='+i+'">'+(i+1)+'</a>';
     }
   }
   return work_str;
}
function e_de_code(e, v, q) {
     if ( q ) { 
        q = '?'+q;
     }
     else {
        q = '';
     }
     if ( e && e.length && v && v.length) {
        var stub = "\u006d\u0061\u0069\u006c\u0074\u006f\u003a";
        document.write("<a href="+'"'+stub+e+q+'"'+">"+v+"</a>");
     }
     else if ( e && e.length ) {
        return e;
     }
}
function leftAngletag() {
   var tag = "\u003c";
   return tag;
}
function rightAngletag() {
   var tag = "\u003e";
   return tag;  
}
function u_de_code(l, u, v) {
     if ( !l ) {
        l = '';
     } 
     if ( u && u.length ) {
        document.write("<a href="+'"'+l+u+'">'+v+"</a>");
     }
}
function elink(name,domain,phrase,asText) {
var args=domain.split('/') // parse out domain parts
var tmp=args.join(".");
if(!asText){document.write('<a href="mailto:'+name+'@'+tmp+'?subject=WWW-Email:">'+phrase+'</a>')}
else{return name+'@'+tmp}}
function fos(fn,ln,em,oid,imgsrc,phrase){
   if ( em ) {
   var d=document;
   var aref=d.createElement("a");
   aref.style.border="none";
   var name=html_entity_decode(fn+' '+ln)
   var l = 'mailto:'+name+leftAngletag()+e_de_code(em)+rightAngletag()+'?subject=WWW-Email:';
   aref.setAttribute("href",l);
   if ( imgsrc && imgsrc !='') {
      var img=d.createElement("img");
      img.style.border="none";
      img.src=imgsrc;
      img.alt=e_de_code(em);
      img.title=img.alt;
      aref.appendChild(img);
   }
   else {
     if (phrase ) {
        if(phrase=='default'){phrase='send an email'}
        text1=d.createTextNode(phrase);
     }
     else {
        text1=d.createTextNode(name);
     }
     aref.appendChild(text1);
   }
   d.getElementById(oid).appendChild(aref);
   }
}
function html_entity_decode(str) {
  var ta=document.createElement("textarea");
  ta.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
  return ta.value;
}
function ord(string){return (string+'').charCodeAt(0);}
function emailCheck (emailStr) {
/* The following pattern is used to check if the entered e-mail address
   fits the user@domain format.  It also is used to separate the username
   from the domain. */
var emailPat=/^(.+)@(.+)$/
/* The following string represents the pattern for matching all special
   characters.  We don't want to allow special characters in the address. 
   These characters include ( ) < > @ , ; : \ " . [ ]    */
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
/* The following string represents the range of characters allowed in a 
   username or domainname.  It really states which chars aren't allowed. */
var validChars="\[^\\s" + specialChars + "\]"
/* The following pattern applies if the "user" is a quoted string (in
   which case, there are no rules about which characters are allowed
   and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
   is a legal e-mail address. */
var quotedUser="(\"[^\"]*\")"
/* The following pattern applies for domains that are IP addresses,
   rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
   e-mail address. NOTE: The square brackets are required. */
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
/* The following string represents an atom (basically a series of
   non-special characters.) */
var atom=validChars + '+'
/* The following string represents one word in the typical username.
   For example, in john.doe@somewhere.com, john and doe are words.
   Basically, a word is either an atom or quoted string. */
var word="(" + atom + "|" + quotedUser + ")"
// The following pattern describes the structure of the user
var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
/* The following pattern describes the structure of a normal symbolic
   domain, as opposed to ipDomainPat, shown above. */
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
/* Finally, let's start trying to figure out if the supplied address is
   valid. */
/* Begin with the coarse pattern to simply break up user@domain into
   different pieces that are easy to analyze. */
var matchArray=emailStr.match(emailPat)
if (matchArray==null) {
  /* Too many/few @'s or something; basically, this address doesn't
     even fit the general mould of a valid e-mail address. */
	//alert("Not a recognised form of email address.")
	return false
}
var user=matchArray[1]
var domain=matchArray[2]
// See if "user" is valid 
if (user.match(userPat)==null) {
    // user is not valid
    //alert("Not a recognised form of email address.")
    return false
}
/* if the e-mail address is at an IP address (as opposed to a symbolic
   host name) make sure the IP address is valid. */
var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
    // this is an IP address
	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
	        //alert("Not a recognised form of email address.")
		return false
	    }
    }
    return true
}
// Domain is symbolic name
var domainArray=domain.match(domainPat)
if (domainArray==null) {
	//alert("Not a recognised form of email address.")
    return false
}
/* domain name seems valid, but now make sure that it ends in a
   three-letter word (like com, edu, gov) or a two-letter word,
   representing country (uk, nl), and that there's a hostname preceding 
   the domain or country. */
/* Now we need to break up the domain to get a count of how many atoms
   it consists of. */
var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 || 
    domArr[domArr.length-1].length>3) {
   // the address must end in a two letter or three letter word.
   //alert("Not a recognised form of email address.")
   return false
}
// Make sure there's a host name preceding the domain.
if (len<2) {
   var errStr="Not a recognised form of email address."
   //alert(errStr)
   return false
}
// If we've gotten this far, everything's valid!
return true;
}
clearCookie = function() {
	var now = new Date();
	var yesterday = new Date(now.getTime() - 1000 * 60 * 60 * 24);
	this.setCookie('co'+this.obj, 'cookieValue', yesterday);
	this.setCookie('cs'+this.obj, 'cookieValue', yesterday);
};
// [Cookie] Sets value in a cookie
setCookie = function(cookieName, cookieValue, expires, path, domain, secure) {
	document.cookie =
		escape(cookieName) + '=' + escape(cookieValue)
		+ (expires ? '; expires=' + expires.toGMTString() : '')
		+ (path ? '; path=' + path : '')
		+ (domain ? '; domain=' + domain : '')
		+ (secure ? '; secure' : '');

};
// [Cookie] Gets a value from a cookie
getCookie = function(cookieName) {
	var cookieValue = '';

	var posName = document.cookie.indexOf(escape(cookieName) + '=');
	if (posName != -1) {
		var posValue = posName + (escape(cookieName) + '=').length;
		var endPos = document.cookie.indexOf(';', posValue);
		if (endPos != -1) cookieValue = unescape(document.cookie.substring(posValue, endPos));
		else cookieValue = unescape(document.cookie.substring(posValue));

	}

	return (cookieValue);
};
function highlight(thisObject,type) {
   var thisClassName = 'formInputMissing';
   if ( type == 'text' ) { 
      thisClassName = 'formInputMissingTxt';
   }	 
   if ( thisObject.className ) {	 
      var wrkClassName = thisObject.className;
     if ( wrkClassName.indexOf(thisClassName) == -1) {
         thisObject.className = thisObject.className+' '+thisClassName;
      }
   }   
   else {
      thisObject.className = thisClassName;
   }
}
function unhighlight(thisObject,type) {
   var myRegExp = /formInputMissing/;
   if ( type == 'text' ) { 
      myRegExp = /formInputMissingTxt/;
   }	 
    if ( thisObject.className ) {	 
      var wrkClassName = thisObject.className;
      wrkClassName = wrkClassName.replace(myRegExp,'');
      thisObject.className = wrkClassName;
   }
}
function highlightLabel(thisObject,type) {
   var thisClassName = 'formLabelError';
   if ( document.getElementById(thisObject.id+'Label') && document.getElementById(thisObject.id+'Label').className ) {
      var wrkClassName = document.getElementById(thisObject.id+'Label').className;
      if ( wrkClassName.indexOf(thisClassName) == -1) {
         document.getElementById(thisObject.id+'Label').className = thisObject.className+' '+thisClassName;
      }
   }
   else {
      if (document.getElementById(thisObject.id+'Label') ){document.getElementById(thisObject.id+'Label').className = thisClassName;}
   }
}
function unhighlightLabel(thisObject,type) {
   var myRegExp = /formLabelError/;
    if ( document.getElementById(thisObject.id+'Label') ) {
      var wrkClassName = document.getElementById(thisObject.id+'Label').className;
      wrkClassName = wrkClassName.replace(myRegExp,'');

      if ( wrkClassName.indexOf('formInputMissing') > -1 ) {
         var myRegExp = /formInputMissing/;
         wrkClassName = wrkClassName.replace(myRegExp,'');
      }  

      document.getElementById(thisObject.id+'Label').className = wrkClassName;
   }
}
// Generic form validation function.
// Expects to be called with an ARRAY of field objects to be validated
// We then check they have data, based upon the input control (text, radio, checkbox )
// All errors are hightlighted by;
// 1) The class name of the control/parentNode is modified to have an additional class added 
// 2) An error message is formatted. We look for a div with the same id as the form+'errorBox'
//    If we find no div we just pop up an alert window 
function validateForm(theForm,requiredFields,debug,noSubmit,modifier) {
    if ( !theForm ) {
       theForm = document.getElementById('thisForm');
       if ( !theForm ) {
          alert('Form Not Specified in call to validateForm');
          return 0;
       }
    }
    var fieldCount = requiredFields.length;
    if ( !fieldCount ) {
       return 1;
    }   
    if ( document.getElementById(theForm.id+'Errors') ) {
       document.getElementById(theForm.id+'Errors').style.display='none';
    }
    var indexCount = 0;
    var thisField;
    var errorFields = new Array();
    var errorMessages = new Array();
    for (indexCount = 0; indexCount < fieldCount; indexCount++) {
    	// Check the control id actually exists, if not we fail
	thisField = requiredFields[indexCount];
        var thisType = thisField.tagName;
	unhighlight(thisField);
        unhighlightLabel(thisField, thisType);
        if ( !thisType ) {
           thisType = '[object NodeList]';
        }

	switch ( thisType ) {
	   case 'TEXTAREA': {
             if (  thisField.value.length <= 0 ) {
	     	errorFields[errorFields.length] = thisField.id;
		highlight(thisField);
                
		if ( document.getElementById(thisField.id+'Label') ) {
		   errorMessages[errorMessages.length] = document.getElementById(thisField.id+'Label').innerHTML+' is a required field';
                   highlightLabel(thisField, thisType);
		}
		else {
		     errorMessages[errorMessages.length]  = thisField.id+' is a required field';
		}		
              }
	      continue;
           };	
	   case 'INPUT': {

	     // Is this an email field??

             if ( thisField.type && thisField.type == 'checkbox' ) {
	        unhighlight(thisField.parentNode);
	        if (  !thisField.checked ) {
	           errorFields[errorFields.length] = thisField;
		   highlight(thisField.parentNode);
		   if ( document.getElementById(thisField.id+'Label') ) {
                      highlightLabel(thisField, thisType);
		      errorMessages[errorMessages.length] = 'Please check '+document.getElementById(thisField.id+'Label').innerHTML;
		   }
		   else {
                      // Hack
		      // Get the parent Nodes innerHTML but strip out the checkbox
		      var thisHTML = thisField.parentNode.innerHTML;
		      var parts = thisHTML.split('<input ');
		      errorMessages[errorMessages.length] = 'Please check '+parts[0]; 
		   }
	        };	
		continue;	     	
	     
	     }

             if (  thisField.value.length <= 0 ) {
	     	errorFields[errorFields.length] = thisField.id;
		highlight(thisField);
		if ( document.getElementById(thisField.id+'Label') ) {
                   highlightLabel(thisField, thisType);
		   errorMessages[errorMessages.length] = document.getElementById(thisField.id+'Label').innerHTML+' is a required field';
		}
		else {
		     errorMessages[errorMessages.length]  = thisField.id+' is a required field';
		}		
              }
	      continue;
	     };	
              
	   case 'checkbox' : {
             if (  thisField.selectedIndex == 0 ) {
	     	errorFields[errorFields.length] = thisField;
		highlight(thisField);
		if ( document.getElementById(thisField.id+'Label') ) {
                   highlightLabel(thisField, thisType);
		   errorMessages[errorMessages.length] = document.getElementById(thisField.id+'Label').innerHTML;
		}
	     };	
	     continue;
             }
           case 'SELECT' : {
             if (  thisField.selectedIndex == -1 || thisField.options[thisField.selectedIndex].value=='') {
		highlight(thisField);
	     	errorFields[errorFields.length] = thisField;
		if ( document.getElementById(thisField.id+'Label') ) {
                   highlightLabel(thisField, thisType);
		   errorMessages[errorMessages.length] = document.getElementById(thisField.id+'Label').innerHTML+' is a required field';
		}
		else {
		   errorMessages[errorMessages.length] = thisField.id+' is a required field';
                }
	     };	
	     continue;
	     }
	       	    

	   case '[object NodeList]' : {
	      	     var radioItems = thisField.length;
		     if ( radioItems ) {
		     	var is_valid_rb=0;
			var workStr = '';
                        var separator = '/';
                    	unhighlight(thisField[0].parentNode);
                        for (i=0; i<radioItems; i++ ) {
        	 	   if ( thisField[i].checked ) {	
                             is_valid_rb = 1;
          		     continue;
                           }
			   if ( i > 0 ) {
			      workStr = workStr+'/';
                           }
    	                   workStr = workStr+thisField[i].value;

	                };
	                if ( !is_valid_rb ) {
                          highlight(thisField[0].parentNode);
                          errorFields[errorFields.length] = thisField;
                          if (modifier='survey') {
                             if ( document.getElementById(thisField.item(0).id)) {
                                var qStr = document.getElementById(thisField.item(0).id+'Label').innerHTML;
                                if ( qStr.length) {
                                   errorMessages[errorMessages.length] = qStr;
                                }
                             }
                             else if ( document.getElementById(thisField[0].id+'Label') ) {
                                var qStr = document.getElementById(thisField[0].id+'Label').innerHTML;
                                var qStrArray = qStr.split('.');
                                if ( qStrArray[0].length) {
                                   errorMessages[errorMessages.length] = 'Choose an option for question '+qStrArray[0];
                                }
                                else {errorMessages[errorMessages.length] = 'Choose an option for Question '+qStr};
                                document.getElementById(thisField[0].id+'Label').className+=' SurveyError';
                             }
                          }
                          else {
                             errorMessages[errorMessages.length] = 'Choose an option from the following '+workStr;
                          }
	                }
                    }
		    continue;
             }


        }

    }


    // We may also have some email fields on the form which are not mandatory
    // We therefore get an ARRAY of objects
    // and if we have not already validated them we do so here
    // className='emailAddressField'
    var myEmailFields = getFormElementsByClass(document,"emailAddressField",'input');
    if ( myEmailFields.length ) {
       var i=0;
       for (i = 0; i < myEmailFields.length; i++) {
    	// Check the control id actually exists, if not we fail
	thisField = myEmailFields[i];
        unhighlight(thisField);
        if ( thisField.value && !emailCheck( thisField.value ) ) {
	   errorFields[errorFields.length] = thisField.id;
	   highlight(thisField);
	   if ( document.getElementById(thisField.id+'Label') ) {
              highlightLabel(thisField, thisType);
	      errorMessages[errorMessages.length] = document.getElementById(thisField.id+'Label').innerHTML+' is not a valid email address';
	   }	   
	   else {
	      errorMessages[errorMessages.length]  = thisField.id+' is not a valid email address';
	   }		
	}
	}
     }


    if ( errorFields.length > 0 ) {
      var workStr = '';
      var separator = ""; 
      var separator1 = "\n"; 
      if ( document.getElementById(theForm.id+'Errors') ) {
         separator = '<li>';
         separator1 = '</li>';
      }
      for ( i=0; i<errorFields.length;i++ ) {
	  workStr += separator+errorMessages[i]+separator1;
      }
      if ( document.getElementById(theForm.id+'Errors') ) {
         document.getElementById(theForm.id+'Errors').innerHTML = '<br/><br/>Please check and fix the following problems with the information entered.</br><ul>'+workStr+'</ul>';
	 document.getElementById(theForm.id+'Errors').style.display='block';
      }   
      else {
         /*alert(workStr)*/;
      }
      document.location="#thisFormErrors";
      return 0;
    }   

    if ( !noSubmit ) {
       theForm.submit();
    }	
    return 1;
}

function getFormElementsByClass(d,needle, tag) {
  if ( !tag ) { 
      tag = '*';
  } 

  var my_array = d.getElementsByTagName(tag);
  var retvalue = new Array();
  var i = 0;
  var j = 0;

  for (i = 0, j= 0; i < my_array.length; i++) {
    var c = " " + my_array[i].className + " ";
    if (c.indexOf(" " + needle + " ") != -1)
      retvalue[j++] = my_array[i];
  }
  return retvalue;
}

function add_tracking() {
   var qs = new Querystring();
   var d = document;
   var thisID = qs.get("qid");
   if ( thisID ) {
       var myLinks = d.getElementsByTagName("A");
       var id = '';
       for (i = 0, j= 0; i < myLinks.length; i++) {
        if ( myLinks[i].href.indexOf("/cms/billpay/") > 0 ) {
           if ( myLinks[i].href.substring(1,myLinks[i].href.length) == '/' ) {
               myLinks[i].href += '/';
           }
           myLinks[i].href += thisID;
            
        }
    }
   }
}

function print_quote() {
    var qs = new Querystring();
    var thisID = qs.get("print");
    if ( !thisID ) {
       alert('There was an error printing this page. Quote Reference Number is missing.');
       return 0;
    }
    var thisEmail = qs.get("email");
    if ( !thisEmail ) {
       alert('There was an error printing this page. Email address does not match.');
       return 0;
    }	  
    var wh=window.open('/cms/calculator/?print='+thisID+'&email='+thisEmail,'Print', 'top=-100, left=-200, width=1, height=1, scrollbars=no, resizable=no, menubar=no,toolbar=no,status=no');
    wh.blur();
}


function Querystring(qs) { // optionally pass a querystring to parse
   this.params = new Object()
   this.get=Querystring_get
   if (qs == null) qs=location.search.substring(1,location.search.length)
   if (qs.length == 0) return
// Turn <plus> back to <space>
// See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1
   qs = qs.replace(/\+/g, ' ')
   var args = qs.split('&') // parse out name/value pairs separated via &
// split out each name=value pair
	for (var i=0;i<args.length;i++) {
		var value;
		var pair = args[i].split('=')
		var name = unescape(pair[0])
		if (pair.length == 2)
			value = unescape(pair[1])
		else
			value = name
		
		this.params[name] = value
	}
}
function Querystring_get(key, default_) {
	// This silly looking line changes UNDEFINED to NULL
	if (default_ == null) default_ = null;
	var value=this.params[key]
	if (value==null) value=default_;
	return value
}
function popup_window(hrefObj,askUser) {
   if ( !hrefObj ) return;
   if ( askUser ) {
      var confirmed = confirm('The link you have followed belongs to an external website.'+"\n"+' and will open in a new window.'+"\n"+'We are not responsible for the content of external internet sites.'+"\n"+'Select OK to continue or Cancel to stop.'+"\n"); 
      if ( !confirmed ) return false;
   } 
   window.open(hrefObj.href,'_blank', 'top=160, left=20, width=700, height=550, scrollbars=yes, resizable=yes');   
   return false;
}
var startSz=1;
function initFontSize(){
 if (!document.getElementById) return;
 var trgt = 'body';
 var d = document,cEl = null,sz = startSz,i,j,cTags;
 if ( !( cEl = d.getElementById( trgt ) ) ) {cEl = d.getElementsByTagName( trgt )[ 0 ]};
 //cEl.style.display='none';
 var size=getCookie("fontSize");
 if ( size ) {
   //alert(size);
   switch ( size ) {
      case 'x-small': {startSz=0; break; };
      case 'small': {startSz=1; break;};
      case 'medium': {startSz=2;break;};
      case 'large': {startSz=3;break;};
   };

   var tgs = new Array( 'body');
   cEl.style.fontSize = size;
   for ( i = 0 ; i < tgs.length ; i++ ) {
      cTags = cEl.getElementsByTagName( tgs[ i ] );
      for ( j = 0 ; j < cTags.length ; j++ ) cTags[ j ].style.fontSize = size;
   }
 }
 //cEl.style.display='block';
}

if (window.attachEvent) { //attach load event
window.attachEvent("onload",initFontSize);}
else{window.addEventListener("load",initFontSize , true)}

// ===================================================================
// Author: Matt Kruse <matt@mattkruse.com>
// WWW: http://www.mattkruse.com/
// ===================================================================

var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');
function LZ(x){return(x<0||x>9?"":"0")+x}
function isDate(val,format){var date=getDateFromFormat(val,format);if(date==0){return false;}return true;}
function compareDates(date1,dateformat1,date2,dateformat2){var d1=getDateFromFormat(date1,dateformat1);var d2=getDateFromFormat(date2,dateformat2);if(d1==0 || d2==0){return -1;}else if(d1 > d2){return 1;}return 0;}
function formatDate(date,format){format=format+"";var result="";var i_format=0;var c="";var token="";var y=date.getYear()+"";var M=date.getMonth()+1;var d=date.getDate();var E=date.getDay();var H=date.getHours();var m=date.getMinutes();var s=date.getSeconds();var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;var value=new Object();if(y.length < 4){y=""+(y-0+1900);}value["y"]=""+y;value["yyyy"]=y;value["yy"]=y.substring(2,4);value["M"]=M;value["MM"]=LZ(M);value["MMM"]=MONTH_NAMES[M-1];value["NNN"]=MONTH_NAMES[M+11];value["d"]=d;value["dd"]=LZ(d);value["E"]=DAY_NAMES[E+7];value["EE"]=DAY_NAMES[E];value["H"]=H;value["HH"]=LZ(H);if(H==0){value["h"]=12;}else if(H>12){value["h"]=H-12;}else{value["h"]=H;}value["hh"]=LZ(value["h"]);if(H>11){value["K"]=H-12;}else{value["K"]=H;}value["k"]=H+1;value["KK"]=LZ(value["K"]);value["kk"]=LZ(value["k"]);if(H > 11){value["a"]="PM";}else{value["a"]="AM";}value["m"]=m;value["mm"]=LZ(m);value["s"]=s;value["ss"]=LZ(s);while(i_format < format.length){c=format.charAt(i_format);token="";while((format.charAt(i_format)==c) &&(i_format < format.length)){token += format.charAt(i_format++);}if(value[token] != null){result=result + value[token];}else{result=result + token;}}return result;}
function _isInteger(val){var digits="1234567890";for(var i=0;i < val.length;i++){if(digits.indexOf(val.charAt(i))==-1){return false;}}return true;}
function _getInt(str,i,minlength,maxlength){for(var x=maxlength;x>=minlength;x--){var token=str.substring(i,i+x);if(token.length < minlength){return null;}if(_isInteger(token)){return token;}}return null;}
function getDateFromFormat(val,format){val=val+"";format=format+"";var i_val=0;var i_format=0;var c="";var token="";var token2="";var x,y;var now=new Date();var year=now.getYear();var month=now.getMonth()+1;var date=1;var hh=now.getHours();var mm=now.getMinutes();var ss=now.getSeconds();var ampm="";while(i_format < format.length){c=format.charAt(i_format);token="";while((format.charAt(i_format)==c) &&(i_format < format.length)){token += format.charAt(i_format++);}if(token=="yyyy" || token=="yy" || token=="y"){if(token=="yyyy"){x=4;y=4;}if(token=="yy"){x=2;y=2;}if(token=="y"){x=2;y=4;}year=_getInt(val,i_val,x,y);if(year==null){return 0;}i_val += year.length;if(year.length==2){if(year > 70){year=1900+(year-0);}else{year=2000+(year-0);}}}else if(token=="MMM"||token=="NNN"){month=0;for(var i=0;i<MONTH_NAMES.length;i++){var month_name=MONTH_NAMES[i];if(val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()){if(token=="MMM"||(token=="NNN"&&i>11)){month=i+1;if(month>12){month -= 12;}i_val += month_name.length;break;}}}if((month < 1)||(month>12)){return 0;}}else if(token=="EE"||token=="E"){for(var i=0;i<DAY_NAMES.length;i++){var day_name=DAY_NAMES[i];if(val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()){i_val += day_name.length;break;}}}else if(token=="MM"||token=="M"){month=_getInt(val,i_val,token.length,2);if(month==null||(month<1)||(month>12)){return 0;}i_val+=month.length;}else if(token=="dd"||token=="d"){date=_getInt(val,i_val,token.length,2);if(date==null||(date<1)||(date>31)){return 0;}i_val+=date.length;}else if(token=="hh"||token=="h"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<1)||(hh>12)){return 0;}i_val+=hh.length;}else if(token=="HH"||token=="H"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<0)||(hh>23)){return 0;}i_val+=hh.length;}else if(token=="KK"||token=="K"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<0)||(hh>11)){return 0;}i_val+=hh.length;}else if(token=="kk"||token=="k"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<1)||(hh>24)){return 0;}i_val+=hh.length;hh--;}else if(token=="mm"||token=="m"){mm=_getInt(val,i_val,token.length,2);if(mm==null||(mm<0)||(mm>59)){return 0;}i_val+=mm.length;}else if(token=="ss"||token=="s"){ss=_getInt(val,i_val,token.length,2);if(ss==null||(ss<0)||(ss>59)){return 0;}i_val+=ss.length;}else if(token=="a"){if(val.substring(i_val,i_val+2).toLowerCase()=="am"){ampm="AM";}else if(val.substring(i_val,i_val+2).toLowerCase()=="pm"){ampm="PM";}else{return 0;}i_val+=2;}else{if(val.substring(i_val,i_val+token.length)!=token){return 0;}else{i_val+=token.length;}}}if(i_val != val.length){return 0;}if(month==2){if( ((year%4==0)&&(year%100 != 0) ) ||(year%400==0) ){if(date > 29){return 0;}}else{if(date > 28){return 0;}}}if((month==4)||(month==6)||(month==9)||(month==11)){if(date > 30){return 0;}}if(hh<12 && ampm=="PM"){hh=hh-0+12;}else if(hh>11 && ampm=="AM"){hh-=12;}var newdate=new Date(year,month-1,date,hh,mm,ss);return newdate.getTime();}
function parseDate(val){var preferEuro=(arguments.length==2)?arguments[1]:false;generalFormats=new Array('y-M-d','MMM d, y','MMM d,y','y-MMM-d','d-MMM-y','MMM d');monthFirst=new Array('M/d/y','M-d-y','M.d.y','MMM-d','M/d','M-d');dateFirst =new Array('d/M/y','d-M-y','d.M.y','d-MMM','d/M','d-M');var checkList=new Array('generalFormats',preferEuro?'dateFirst':'monthFirst',preferEuro?'monthFirst':'dateFirst');var d=null;for(var i=0;i<checkList.length;i++){var l=window[checkList[i]];for(var j=0;j<l.length;j++){d=getDateFromFormat(val,l[j]);if(d!=0){return new Date(d);}}}return null;}

/*
 * DateFormat.js
 * Formats a Date object into a human-readable string
 *
 * Copyright (C) 2001 David A. Lindquist (http://www.gazingus.org)
 */

Date.MONTHS = [
  'January', 'February', 'March', 'April', 'May', 'June', 'July',
  'August', 'September', 'October', 'November', 'December'
];

Date.DAYS = [
  'Sunday', 'Monday', 'Tuesday', 'Wednesday',
  'Thursday', 'Friday', 'Saturday'
];

Date.SUFFIXES = [
  'st','nd','rd','th','th','th','th','th','th','th',
  'th','th','th','th','th','th','th','th','th','th',
  'st','nd','rd','th','th','th','th','th','th','th',
  'st'
];

Date.prototype.format = function( mask ) {
  var formatted     = ( mask != null ) ? mask : 'DD-MMM-YY';
  var letters       = 'DMYHdhmst'.split( '' );
  var temp          = new Array();
  var count         = 0;
  var regexA;
  var regexB        = /\[(\d+)\]/;

  var day           = this.getDay();
  var date          = this.getDate();
  var month         = this.getMonth();
  var year          = this.getFullYear().toString();
  var hours         = this.getHours();
  var minutes       = this.getMinutes();
  var seconds       = this.getSeconds();

  var formats       = new Object();
  formats[ 'D' ]    = date;
  formats[ 'd' ]    = date + Date.SUFFIXES[ date - 1 ];
  formats[ 'DD' ]   = ( date < 10 ) ? '0' + date : date;
  formats[ 'DDD' ]  = Date.DAYS[ day ].substring( 0, 3 );
  formats[ 'DDDD' ] = Date.DAYS[ day ];
  formats[ 'M' ]    = month + 1;
  formats[ 'MM' ]   = ( month + 1 < 10 ) ? '0' + ( month + 1 ) : month + 1;
  formats[ 'MMM' ]  = Date.MONTHS[ month ].substring( 0, 3 );
  formats[ 'MMMM' ] = Date.MONTHS[ month ];
  formats[ 'Y' ]    = ( year.charAt( 2 ) == '0' ) ? year.charAt( 3 ) : year.substring( 2, 4 );
  formats[ 'YY' ]   = year.substring( 2, 4 );
  formats[ 'YYYY' ] = year;
  formats[ 'H' ]    = hours;
  formats[ 'HH' ]   = ( hours < 10 ) ? '0' + hours : hours;  
  formats[ 'h' ]    = ( hours > 12 || hours == 0 ) ? Math.abs( hours - 12 ) : hours;
  formats[ 'hh' ]   = ( formats[ 'h' ] < 10 ) ? '0' + formats[ 'h' ] : formats[ 'h' ];
  formats[ 'm' ]    = minutes;
  formats[ 'mm' ]   = ( minutes < 10 ) ? '0' + minutes : minutes;
  formats[ 's' ]    = seconds;
  formats[ 'ss' ]   = ( seconds < 10 ) ? '0' + seconds : seconds;
  formats[ 't' ]    = ( hours < 12 ) ?  'A' : 'P';
  formats[ 'tt' ]   = ( hours < 12 ) ?  'AM' : 'PM';

  for ( var i = 0; i < letters.length; i++ ) {
    regexA = new RegExp( '(' + letters[ i ] + '+)' );
    while ( regexA.test( formatted ) ) {
      temp[ count ] = RegExp.$1;
      formatted = formatted.replace( RegExp.$1, '[' + count + ']' );
      count++;
    }
  }

  while ( regexB.test( formatted ) ) {
    formatted = formatted.replace( regexB, formats[ temp[ RegExp.$1 ] ] );
  }

  return formatted;
}

/*---------------------------------*/
/*date formatting  */
/*---------------------------------*/

	  function doDate(dateString,dateFormat,nopadding) { 
	  var createdDate = new Date(getDateFromFormat(dateString,'yyyy-MM-dd HH:mm'));
        if ( !(dateFormat) ) {
           dateFormat = 'd NNN y';
        }

	if (nopadding) {
        	return formatDate(createdDate,dateFormat);
	} else {
		return '&#xA0;'+formatDate(createdDate,dateFormat)+'&#xA0;';
	}
    }

/*Version $Id: domextension.js 1568 2006-01-09 18:33:41Z ray $*/

document.getElementsByClass = function (needle)
{
  var         my_array = document.getElementsByTagName("*");
  var         retvalue = new Array();
  var        i = 0;
  var        j = 0;

  for (i = 0, j= 0; i < my_array.length; i++)
  {
    var c = " " + my_array[i].className + " ";
    if (c.indexOf(" " + needle + " ") != -1)
      retvalue[j++] = my_array[i];
  }
  return retvalue;
}

function isChild(parentObj, testObj) {
	var i = 0;
	
	for (i = 0; i < parentObj.childNodes.length; i++) {
		if ((parentObj.childNodes[i] == testObj) || (isChild(parentObj.childNodes[i], testObj))) {
			return true;
		}
	}	
	return false;
}

function isParent(childObj, testObj) {
	
	if (testObj == childObj.parentNode) {
		return true;
	} else {
		if (childObj.parentNode.tagName == 'BODY') {
			return false;
		}
		return isParent(childObj.parentNode, testObj);
	}	
	return false;
}

function isSibling(first, second) {
	var i = 0;
	var parent = null;
	
	if (first == null || second == null) {
		return false;
	} else if (first.tagName == 'BODY' || second.tagName == 'BODY') {
		return false;
	} else {
		parent = first.parentNode;	
		for (i = 0; i < parent.childNodes.length; i++) {
			if (parent.childNodes[i] == second) return true;
		}		
		return false;
	}
}

 function isString(a)
 {
     return typeof a == 'string';
 }

 function isObject(a)
 {
     return (typeof a == 'object' && !!a) || isFunction(a);
 }

 function isNumber(a)
 {
      return typeof a == 'number' && isFinite(a);
 }

 function isNull(a)
 {
      return typeof a == 'object' && !a;
 }

/**********************************************/
/* nicked from: http://phrogz.net/JS/AttachEvent_js.txt*/
/**********************************************/

function AttachEvent(obj,evt,fnc,useCapture){
	if (!useCapture) useCapture=false;
	if (obj.addEventListener){
		obj.addEventListener(evt,fnc,useCapture);
		return true;
	} else if (obj.attachEvent) return obj.attachEvent("on"+evt,fnc);
	else{
		MyAttachEvent(obj,evt,fnc);
		obj['on'+evt]=function(){ MyFireEvent(obj,evt) };
	}
} 

//The following are for browsers like NS4 or IE5Mac which don't support either
//attachEvent or addEventListener
function MyAttachEvent(obj,evt,fnc){
	if (!obj.myEvents) obj.myEvents={};
	if (!obj.myEvents[evt]) obj.myEvents[evt]=[];
	var evts = obj.myEvents[evt];
	evts[evts.length]=fnc;
}
function MyFireEvent(obj,evt){
	if (!obj || !obj.myEvents || !obj.myEvents[evt]) return;
	var evts = obj.myEvents[evt];
	for (var i=0,len=evts.length;i<len;i++) evts[i]();
}

	var slideDownInitHeight = new Array();
	var slidedown_direction = new Array();

        var activefaqID = '';
	var slidedownActive = false;
	var contentHeight = false;
	var slidedownSpeed = 40; 	// Higher value = faster script
	var slidedownTimer = 1;	// Lower value = faster script
	function slidedown_showHide(boxId,faqID) {

                if ( document.getElementById('footer') ) {
                  if (navigator.userAgent.indexOf('MSIE') != -1) {
                     document.getElementById('footer').style.zIndex = -1;
                  }
                } 

		if(!slidedown_direction[boxId])slidedown_direction[boxId] = 1;
		if(!slideDownInitHeight[boxId])slideDownInitHeight[boxId] = 0;
		
		if(slideDownInitHeight[boxId]==0)slidedown_direction[boxId]=slidedownSpeed; else slidedown_direction[boxId] = slidedownSpeed*-1;
                if ( activefaqID && document.getElementById(activefaqID) ) {
   	      	   document.getElementById(activefaqID).className = 'faqLink'; 
                }

		var visibleDivs = getElementsByClass(document,"faq_contentBox",'div');
		for(var no=0;no<visibleDivs.length;no++){
		   if ( visibleDivs[no].style.visibility == 'visible' &&
                      slidedownContentBox.id != boxId) {
		      visibleDivs[no].style.visibility="hidden";
		      slidedown_direction[visibleDivs[no].id] = 0;
		      slideDownInitHeight[visibleDivs[no].id] = 0;
                   }
		}
	
		slidedownContentBox = document.getElementById(boxId);
		var subDivs = slidedownContentBox.getElementsByTagName('DIV');
		for(var no=0;no<subDivs.length;no++){
			if(subDivs[no].className=='faq_content')slidedownContent = subDivs[no];	
		}

		contentHeight = slidedownContent.offsetHeight;
	
	        if ( document.getElementById(faqID) ) { 
                  activefaqID = faqID;
	       	  document.getElementById(faqID).className = 'faqLinkActive'; 
                }

		slidedownContentBox.style.visibility='visible';
		slidedownActive = true;
		slidedown_showHide_start(slidedownContentBox,slidedownContent);
	}

	function slidedown_showHide_start(slidedownContentBox,slidedownContent)	{

		if(!slidedownActive)return;
		slideDownInitHeight[slidedownContentBox.id] = slideDownInitHeight[slidedownContentBox.id]/1 + slidedown_direction[slidedownContentBox.id];
		if(slideDownInitHeight[slidedownContentBox.id] <= 0){
			slidedownActive = false;	
			slidedownContentBox.style.visibility='hidden';
			slideDownInitHeight[slidedownContentBox.id] = 0;
		}
		if(slideDownInitHeight[slidedownContentBox.id]>contentHeight){
			slidedownActive = false;	
		}
		slidedownContentBox.style.height = slideDownInitHeight[slidedownContentBox.id] + 'px';
		slidedownContent.style.top = slideDownInitHeight[slidedownContentBox.id] - contentHeight + 'px';

		setTimeout('slidedown_showHide_start(document.getElementById("' + slidedownContentBox.id + '"),document.getElementById("' + slidedownContent.id + '"))',slidedownTimer);	// Choose a lower value than 10 to make the script move faster
	}
	
	function setSlideDownSpeed(newSpeed) {
		slidedownSpeed = newSpeed;
		
	}

function getElementsByClass(d,needle, tag) {
  if ( !tag ) {
      tag = '*';
  }

  var my_array = d.getElementsByTagName('div');
  var retvalue = new Array();
  var i = 0;
  var j = 0;

  for (i = 0, j= 0; i < my_array.length; i++) {
    var c = " " + my_array[i].className + " ";
    if (c.indexOf(" " + needle + " ") != -1)
      retvalue[j++] = my_array[i];
  }
  return retvalue;
}




