<!--		20/12/2009   macros.js   //--> 
// confirm('start of macros') 
// Base Library - not dependent on any other library 

function is() { 
/************************************************************************* 
function to test browser variables in real time 
*************************************************************************/ 
//syntax: is.property 
//this.userAgent	=	navigator.userAgent; 
//this.appVersion 	=	navigator.appVersion; 
this.platform 		=	navigator.platform; 
this.ver		=	navigator.appVersion; 
this.ua		=	navigator.userAgent.toLowerCase(); 
this.browser 	=	this.ua;if (this.ua.indexOf("(") >=0){this.browser=this.ua.substring(0,this.ua.indexOf("("));} 
this.browVer 	=	this.ua;if (this.ua.indexOf("(") >=0){this.browVer=this.ua.substring(this.ua.indexOf("(")+1,this.ua.indexOf(")"));} 
this.major		=	parseInt(navigator.appVersion); 
this.minor		=	parseFloat(navigator.appVersion); 
this.w3c		=	(document.getElementById)?true:false;
//this.w3c		=	(this.major>=5); 
this.ns		=	(this.ua.indexOf('mozilla')!=-1)&&(this.ua.indexOf('spoofer')==-1)&&(this.ua.indexOf('compatible')==-1)&&(this.major<5); 
this.ns2		=	(this.ns && (this.major==2)); 
this.ns3		=	(this.ns && (this.major==3)); 
//this.ns4		=	(this.ns && (this.major==4)); 
//this.ns4		=	(document.layers && !this.w3c)			 
this.ns4		=	(document.layers)?true:false;			 
this.ns4b		=	(this.ns4 && (this.minor<=4.04)); 
this.ns6		=	(this.w3c && (this.major>=5)) 
this.ie		=	(this.ua.indexOf('msie')!=-1); 
this.ie3		=	(this.ie&&(this.major<4)); 
this.ie4		=	(document.all)&&(this.major==4)&&(!this.w3c)?true:false; 
//this.ie4		=	(this.ie&&!this.w3c&&(this.major==4)); 
//this.ie4		=	(this.ie&&(this.major==4)&&!this.w3c)); 
this.ie4b		=	(this.ie&&this.ua.indexOf('msie 5.0')!=-1&&this.ua.indexOf('mac')==-1); 
this.ie5		=	(this.ie&&(this.ua.indexOf('msie 5')!=-1)); 
this.ie6		=	(this.ie&&(this.ua.indexOf('msie 6')!=-1)); 
this.mac		=	(navigator.platform=="MacPPC") 
//this.mac		=	(this.ua.indexOf('mac')!=-1); 
this.win		=	(navigator.platform=="Win32") 
this.screenRw 	=	screen.width; 
this.screenRh 	=	screen.height; 

//following functions evaluate after body loads  
//syntax: is.function() - must be called from body 
this.querystring 	=	querystring;  
this.screenAw		=	screenAw; 
this.screenAh		=	screenAh; 
this.screenIw		=	screenIw;  
this.screenIh		=	screenIh;  
this.screenCw		=	screenCw;  
this.screenCh		=	screenCh;  
this.topUrl 		=	topUrl;  
this.selfUrl 		=	selfUrl;  
this.year 			=	currentYear; 
this.loaded 		=	imgLoadCheckImg;

/* 
confirm("this.ua="+is.ua 
+"\nthis.ver="+is.ver 
+"\nthis.platform="+is.platform 
+"\nthis.minor="+(is.minor) 
+"\nthis.major="+(is.major) 
+"\nthis.ns="+(is.ns) 
+"\nthis.ns4="+(is.ns4) 
+"\nthis.ie="+(is.ie) 
+"\nthis.ie4="+(is.ie4) 
+"\nthis.ie4b="+(is.ie4b) 
+"\nthis.ie5="+(is.ie5) 
+"\nthis.ie6="+(is.ie6) 
+"\nthis.w3c="+(is.w3c)); 
*/ 
} 

var is=new is(); 
 
function imgLoadCheckImg(){
/******************************************************************************
Syntax: imgLoadCheckImg($img)
******************************************************************************/
	var $loaded = false; 
	if(arguments[0]){
		var v = new Image(); 
		v.src = arguments[0]; 
		if(v.complete){$loaded = true;}
		if(!$loaded){$timer=setTimeout('imgLoadCheckImg(\''+v.src+'\')',400);}
		}
	//confirm('imgLoadCheckImg'+arguments[0]+'='+$loaded+'\n$img='+arguments[0]+'\n$recnum='+arguments[1]+'\nv.src='+v.src);
	return($loaded);
	}

/************************************************************************* 
functions to test browser variables in real time - must be called from body 
*************************************************************************/ 
function screenAw(){ 
	var Aw=0; 
	if(is.ns4){Aw=screen.width-10;} 
	else{if(is.ie4||is.w3c){Aw=screen.availWidth;}} 
	return(Aw); 
	} 

function screenAh(){ 
	var Ah=0; 
	if(is.ns4){Ah=screen.height-10;} 
	else{if(is.ie4||is.w3c){Ah=screen.availHeight;}} 
	return(Ah); 
	}

function screenIw(){ 
	var Iw=document.body.offsetWidth;
	if(is.ns4){Iw=self.innerWidth-10;} 
	else{if(is.ie4){Iw=document.body.offsetWidth-10;}} 
	return(Iw); 
	}

function screenIh(){ 
	var Ih=document.body.offsetHeight;
	if(is.ns4){Ih=self.innerHeight-10;} 
	else{if(is.ie4){Ih=document.body.offsetHeight-10;}}
	return(Ih); 
	}

function screenCw(){ 
	var Cw=document.body.clientWidth;
	if(is.ns4){Cw=self.innerWidth-10;} 
	else{if(is.ie4){Cw=document.body.offsetWidth-10;}} 
	return(Cw); 
	}

function screenCh(){ 
	var Ch=document.body.clientHeight;
	if(is.ns4){Ch=self.innerHeight-10;} 
	else{if(is.ie4){Ch=document.body.offsetHeight-10;}}
	return(Ch); 
	}



function request(){ 
/*************************************************************************/ 
this.querystring=querystring;  
this.topUrl=	topUrl;  
this.selfUrl=	selfUrl;  
} 
var request	=	new request(); 
 
 
function find_ns_object(){ 
/************************************************************************* 
	recursive functions to find_ns_object('tag','tagname',[target_window]) 	 
	returns full_path_to_obj=$retPath 
*************************************************************************/ 
	$xl=new Array(); 
	$chaindepth=new Array(); 
   	$tagname=arguments[0]; 
   	$name=arguments[1]; 
	$tempPath='document';if(arguments[2]){$tempPath=arguments[2]+'.document';} 
	//confirm('find_ns_object\n$chaindepth.length='+$chaindepth.length+'\n$tempPath='+$tempPath+'\n$tagname='+$tagname+'\n$name='+$name); 
	$retPath='' 
	srchnode($tagname,$name,$tempPath); 
	//confirm('find_ns_object/exit:\n$retPath=' + $retPath);  
	return($retPath); 
	} 
 
function srchnode($tagname,$name,$tempPath){ 
	$chaindepth[$chaindepth.length]=$chaindepth.length; 
 	$domnode=''; 
	$retPath=''; 
	var i=0; 
	//confirm('srchnode\n$chaindepth.length='+$chaindepth.length+'\n$tempPath='+$tempPath+'\n$tagname='+$tagname+'\n$name='+$name); 
	//confirm('srchnode/'+$chaindepth.length+' for:\n'+$tempPath+'.'+$tagname+'='+$name+'\n'+aList($tempPath+'.'+$tagname)); 
	var j	=eval($tempPath+'.'+$tagname+'.length'); 
	//confirm('srchnode/'+$chaindepth.length+' for:\n'+$tagname+'=='+ arguments[1]+'\n'+aList($tempPath+'.'+$tagname)); 
	if(j>0){for(var i=0;i<j;i++){ 
		$domnode=eval($tempPath+'.'+$tagname+'['+i+'].name'); 
		if($domnode!=''){$retPath=$tempPath+'.'+$tagname+'.'+$domnode;} 
		if($domnode==$name){break;} 
		//confirm ('srchnode\n'+$tempPath+'.'+$tagname+'['+i+'].name='+$domnode); 
		}} 
	if($retPath==''){$xl[$chaindepth.length]=new srchlayer($tagname,$name,$tempPath);} 
	//confirm('srchnode/'+$chaindepth.length+'/exit:\n'+$tempPath+'.'+$tagname+'['+i+'].name=' + $retPath); 
	return($retPath); 
	} 
 
function srchlayer($tagname,$name,$tempPath){ 
	$retPath=''; 
	$chaindepth[$chaindepth.length]=$chaindepth.length; 
	docObj=eval(arguments[2]); 
	var k0=$chaindepth.length; 
	var kn=$chaindepth.length+docObj.layers.length; 
	//confirm('srchlayer/'+$chaindepth.length+ '\n' + $tempPath + '.layers.length=' + docObj.layers.length+ '\niterations while: '+k0+'<'+kn+':\n'+ aList('docObj.layers'));  
 	if(kn>k0){for (var k=k0;k<kn;k++){ 
		$tPath=$tempPath + '.layers['+(k-k0)+'].document'; 
		//confirm('srchlayer/'+$chaindepth.length+'/iteration:'+ k 
			//+ '\n' + arguments[2] + '.layers.length=' + docObj.layers.length 
			//+ '\n' + arguments[2] + '.layers.['+(k-k0)+'].name=' + docObj.layers[(k-k0)].name); 
		$xl[$chaindepth.length]=new srchnode($tagname,$name,$tPath); 
		if($retPath!=''){break;} 
		//confirm('srchlayer/'+$chaindepth.length+'/iteration:'+k+ '\n' + arguments[2] + '.layers.length=' + docObj.layers.length+ '\n$retPath='+$retPath); 
    		}} 
	return($retPath); 
	} 
 
 
function docTagnameById() { 
/****************************************************************** 
Syntax: docTagnameById('tag','id',[target_window]) 
Cross-Browser Dom search & retrieve by id="" or name="" 
******************************************************************/ 
	$docpath=''; 
	$tempPath='document';if(arguments[2]){$tempPath=arguments[2]+'.document';} 
	if (document.getElementById || document.all || document.layers){ 
		if (document.layers){$docpath=(find_ns_object(arguments[0],arguments[1],arguments[2]));} 
		else{if(document.getElementById){$docpath=$tempPath+'.'+document.getElementById(arguments[1]).id;} 
		else{if(document.all){$docpath=$tempPath+'.all.'+arguments[1];} 
		}}} 
	//confirm('docTagnameById:\narguments[0]='+arguments[0]+'\narguments[1]='+arguments[1]+'\n$docpath='+$docpath); 
	return $docpath; 
	} 
 
 
function getDocObjById() { 
/****************************************************************** 
Syntax: getDocObjById('id',[target_window]) 
Cross-Browser Dom search & retrieve by id="" or name="" 
******************************************************************/ 
	$docpath=''; 
	if (document.layers){$docpath=(find_ns_object('layer',arguments[0],arguments[1]));} 
	else{ 
		$tempPath='document';if(arguments[1]){$tempPath=arguments[1]+'.document';} 
		else{if(document.getElementById){$docpath=$tempPath+'.'+document.getElementById(arguments[1]).id;} 
		else{if(document.all){$docpath=$tempPath+'.all["'+arguments[0]+'"]';} 
		}}} 
	//confirm('getDocObjById:\n$docpath='+$docpath); 
	//confirm('getDocObjById:\narguments[0]='+arguments[0]+'\narguments[1]='+arguments[1]+'\n$docpath='+$docpath); 
	return eval($docpath); 
	} 
 
 
 
function querystring(){ 
/****************************************************************** 
Function to extract query_str matching query_key_value from location.href  		 
Syntax: querystring(query_key,[target_window])			 
Last Edit 20/12/2009 						 
******************************************************************/ 
var $key=arguments[0]+'='; 
var rA=new Array; 
var $qarray=new Array; 
var $str='';
var $locstr=window.location.href; 
if(arguments[1]){$locstr=eval(arguments[1] + '.window.location.href');} 
//confirm(selfUrl()+'/querystring/Line252:\narguments[0]='+arguments[0]+'\narguments[1]='+arguments[1]+'\n$locstr='+$locstr); 
if ($locstr.length>0){ 
	// replace backslashes with forward slashes 
	$locstr = $locstr.replace(/\%5C/gi,"/"); 
	$locstr=unescape($locstr); 
	rA=$locstr.split('?');
	if (rA[1]){ 
		rA=rA[1].split('&');
		//confirm(selfUrl()+'/querystring/Line260:\narguments[0]='+arguments[0]+'\narguments[1]='+arguments[1]+'\n$locstr='+$locstr+'\nrA='+rA); 
		for(x=0; x<rA.length; x++){ 
			$qarray[x]=rA[x].split('=');
			//($str.indexOf($key)==-1)?$str='':$str=$str.substring($str.indexOf($key)+$key.length,$str.length); 
			//($str.indexOf("&")==-1)?$str=$str:$str=$str.substring(0,$str.indexOf("&")); 
			if($qarray[x][0]==arguments[0]){$str=$qarray[x][1];}
			if($qarray[x][0]==arguments[0]){break;}
			}
		} 
	} 
	//confirm(selfUrl()+'/querystring/Line269:\narguments[0]='+arguments[0]+'\narguments[1]='+arguments[1]+'\n$str='+$str); 
	//confirm(selfUrl()+'/querystring/Line269:\narguments[0]='+arguments[0]+'\narguments[1]='+arguments[1]+'\n$key='+ $key+'\n$str='+$str+'\nrA='+rA+'\n$qarray='+$qarray); 
return($str); 
}  
 
 
function parseQuery(){ 
/************************************************************************/ 
	var $str=''; 
	var squery=''; 
	var rA=arguments[0].split('+'); 
	for(x=0; x<rA.length; x++){ 
		if(x>0){squery=squery+'|';} 
		$str=rA[x].toLowerCase(); 
		//if($str.charAt($str.length-1)=='s'){$str=$str.substring(0,$str.length-1);} 
		if($str=='yesterday'){$str=(nowDates(-1));} 
		if($str=='today'){$str=(nowDates());} 
		if($str=='tomorrow'){$str=(nowDates(1));} 
		squery+=$str; 
		} 
	//confirm(selfUrl()+':parseQuery\narguments[0]='+arguments[0]+ '\nrA='+ rA+'\nsquery='+ squery); 
	return(squery); 
	} 
 
 
function selfUrl(){ 
/************************************************************************ 
function to extract self.html name from window.location.href 		
strip all text b4 /, trim all after ?   
************************************************************************/ 
with (this.location) { 
	//confirm('Line322\npos1 = '+href.lastIndexOf("/")+1+'\npos2 = '+href.indexOf("?")+'\npos3 = '+href.length+'\npos4 = '+(href.indexOf('?')?href.length:href.indexOf('?')));
	return(href.substring(href.lastIndexOf("/")+1,(href.indexOf('?')?href.length:href.indexOf('?')))); 
	}} 


function topUrl(){ 
/************************************************************************ 
function to extract self.html name from window.location.href 		
strip all text b4 /, trim all after ?   
************************************************************************/ 
with (parent.location) { 
	return(href.substring(href.lastIndexOf("/")+1,(href.indexOf('?')?href.length:href.indexOf('?')))); 
	}} 


function self_url(){ 
/************************************************************************ 
obsolete
function to extract self.html name from window.location.href 		
strip all text b4 /, trim all after ?   
************************************************************************/ 
	return(xtractUrl(window.location.href)); 
	} 
 
 

function top_url(){ 
/************************************************************************/ 
/* function to extract html name from top.location.href 			*/ 
/* strip all text b4 /, trim all after ?                			*/ 
/************************************************************************/ 
	var $str=window.location.href; 
	if(parent.window.location.href){$str=parent.window.location.href;} 
	return(xtractUrl($str)); 
	} 
 
 
function xtractUrlQ(){ 
/************************************************************************ 
extract file name+qrystr from arguments[0]  
strip b4 "/"       
************************************************************************/ 
	var $str=unescape(arguments[0].replace(/\%5C/gi,"/")); 
	$str=$str.substring($str.lastIndexOf("/")+1,$str.length); 
	//confirm('xtractUrlQ:\narguments[0]='+arguments[0]+'\nreturn='+$str); 
	return($str); 
	} 
 
function xtractUrl(){ 
/************************************************************************ 
extract file name from arguments[0]  
trim b4 "/" after "?"      
************************************************************************/ 
	var $str=xtractUrlQ(arguments[0]); 
	if ($str.indexOf('?')!=-1){$str=$str.substring(0,$str.indexOf('?'));} 
	return($str); 
	} 
 

function base_url(){ 
/************************************************************************ 
extract dns name from url  				 
strip all text after last "/" 	                					 
************************************************************************/ 
with (this.location) { 
	return(href.substring(0,href.lastIndexOf("/")+1)); 
	}} 
 

function file_root(){ 
/************************************************************************ 
function to extract filename_root (without .ext) from window.location.href 		 
strip up to last "/" - trim from "."                   			 
************************************************************************/ 
	return(selfUrl().split('.')[0]);
	//var $str=xtractUrl(location.href); 
	//return($str.substring(0,$str.indexOf("."))); 
	} 
 
 
function replaces(){ 
/************************************************************************/ 
/* function to replace all instances of substring in string             */ 
/* function replaces(instring,char,subst)						*/ 
/************************************************************************/ 
	var $str = arguments[0]; 
	var $str1 = arguments[1]; 
	var $str2 = arguments[2]; 
	var $match = /$str1/gi; 
	$str = $str.replace($match,$str2); 
	//confirm(selfUrl()+'/macro:replaces\n'+$str); 
	return($str); 
	} 
 
 
 function trim() {
/************************************************************************ 
function trim(stringToTrim) 
************************************************************************/ 
	return arguments[0].replace(/^\s+|\s+$/g,"");
	}

 
function linkObject (){ 
/************************************************************************ 
function linkObject (name,defaultlink) 
Search querystring for arguments[0]=value					 
************************************************************************/ 
	this.name=arguments[0]; 
	this.link=querystring(arguments[0],arguments[1]); 
	//confirm(selfUrl()+'/linkObject/Line 338\n'+this.name+'='+this.link+'='+this.link); 
	if (this.link==""){if (arguments[1]){this.link=arguments[1];}} 
	} 
 
 
function linktopObject (){ 
/************************************************************************ 
	function linkParentObject (name,defaultlink)				 
************************************************************************/ 
	this.name=arguments[0]; 
	this.link=querystring(arguments[0],'top'); 
	//this.link=is.top.querystring(arguments[0]); 
	if (this.link==""){this.link=arguments[1];} 
	//confirm(selfUrl()+'/linktopObject/Line423\nthis.name='+this.name+'\nthis.link='+this.link); 
	} 
 
 
function linkBack(){ 
/**** Set Next, From links **********************************************/ 
	linkObject[0]	=new linkObject('from','index.htm'); 
	var aScript		=unescape(linkObject[0].link); 
	var aScript		=ftarget+'.location.href="'+aScript+'"'; 
     	//confirm(aScript); 
	with (document){ eval(aScript);} 
	} 
 
 
function linkNext(){ 
/************************************************************************/ 
/*    function linkNext(querystr,target)                           	*/ 
/*    Send argument[0]=query_str to target             			*/ 
/*    no link stops execution                               		*/ 
/************************************************************************/ 
 	linkObject[0]		=new linkObject(arguments[0],'');  
	linkObject[1]		=new linkObject('from',''); 
	if (linkObject[0].link !=''){ 
		ftarget 		='self';if(arguments[1]){ftarget=arguments[1];}  
		var aScript		=linkObject[0].link; 
		if (linkObject[1].link !=''){aScript=aScript+'?from='+linkObject[1].link;} 
		var aScript	=ftarget+'.location.replace("'+aScript+'")'; 
		confirm((is.selfUrl()) + '.linkNext.aScript=' + aScript); 
		with (document){eval(aScript);} 
		} 
	} 
 
 
function linkUrl(){ 
/************************************************************************ 
function linkUrl(link.htm,target)                           	 
Send literal argument[0]=value.htm to new window 
************************************************************************/ 
   	nextPage=arguments[0]; 
	ftarget='top';if(arguments[1]){ftarget="_" + arguments[1];} 
	//confirm(topUrl()+'.'+selfUrl()+'.linkUrl:'+'\nnextPage='+nextPage+'\nftarget=' +ftarget); 
	var newpage=window.open(nextPage,ftarget); 
	newpage.focus(); 
	} 
 
 
function rLink() { 
/************************************************************************	 
	Link from rRadio Button   							 
	Send form element to target(argument[1])		 
	usage: <input name="main" type="radio" value="ranpro.htm" onClick='rLink(this.form.elements[n-1]);' />	 
*************************************************************************/ 
	arguments[0].checked=true;          
	ftarget='top';if(arguments[1]){ftarget=arguments[1];} 
   	ftarget=ftarget+'.document.location.href'; 
   	nextPage=arguments[0].value; 
	//confirm('rLink:\n' + ftarget + '="' + nextPage + '"'); 
   	if (nextPage !='') { 
		eval(ftarget + '="' + nextPage + '";'); 
		} 
	} 
 
 
function popUp(){     
/************************************************************************ 
	generic for loading any htm into pw 
	usage: <a href="#" onclick="popUp('install.htm');return true;">Click to see Popup</a> 
************************************************************************/ 
	now=new Date(); 
	eval("W"+now.getTime()+"=window.open('"+$uri+"','_blank');"); 
	//var pu=window.open(arguments[0],'_blank'); 
	//pu.focus(); 
	} 
 
 
function breakFrames(){ 
if (top.location==self.location){ 
	self.moveTo(0,0); 
	if(!document.layers){ 
		var maxw=0; 
		//confirm('Available screen='+is.screenAw()+' x '+is.screenAh()); 
		maxw=parseInt(is.screenAw());
		//if(maxw >(1024)){maxw=parseInt(1024);} 
		maxh=parseInt(is.screenAh());
		if(maxw >(1024)){maxw=parseInt(maxh*(1.5));} 
		self.resizeTo(maxw,maxh);} 
	} 
/************************************************************************ 
function breakFrames0() {if (top.location!=self.location){top.location.href=self.document.location.href;}} 
function breakFrames1() {if (self.parent.frames.length!=0){self.location.replace(self.document.location.href);}} 
function breakFrames2() {if (self.parent.frames.length!=0){self.parent.location=document.location;}} 
function breakFrames3() {if (top.location!=location){top.location.href=location.href;}} 
function breakFrames4() {if (self.parent.frames.length!=0){self.parent.location.replace(document.location.href);}} 
************************************************************************/ 
} 
 
 
function inframe(){inFrame(arguments[0],arguments[1],arguments[2]);} 
function inFrame(){ 
/************************************************************************ 
load parent frame from sub-frame  
inFrame(parent.htm?main=frame.htm)
************************************************************************/ 
	dlim='?'; 
	newtop=arguments[0]; 
	if(newtop.indexOf(dlim)!=-1){ 
 		newtop=arguments[0].substring(0,arguments[0].indexOf(dlim)); 
		dlim='&'; 
		} 
	$str=''; 
 	oldtop=topUrl(); 
	currw =selfUrl(); 
 	//confirm(self_url()+'/inFrame/Line532:\nnewtop='+newtop+'\noldtop='+oldtop+'\ncurrw='+currw);
	if(oldtop.indexOf(newtop)==-1){ 
		var $str= arguments[0]; 
		//if(is.querystring('from')!=''){$str=$str+dlim+'from='+ is.querystring('from');} 
		//confirm(selfUrl() + '/inframe:\n' + 'arguments[0]=' + arguments[0] + '\noldtop=' + oldtop + '\ncurrw=' + currw + '\nnewtop=' + newtop + '\nreturns '  + str); 
 		//eval($str); 
		if(currw==oldtop){location.replace($str);} 
		else{top.location.replace($str);} 
		} 
	} 
 
 
function goBack(){  
/************************************************************************/ 
	//confirm('topfrom='+is.querystring('from','top')+'\nfrom='+is.querystring('from')); 
	if (arguments[0]=='top'&&is.querystring('from','top') !=''){ 
	top.location.href=is.querystring('from','top'); 
	}else{ 
		if (is.querystring('from')!=''){self.location.href=is.querystring('from'); 
		}else{ 
			if(history.length>0){ 
				if(is.ns){ 
					if (top.frames.length!=0){top.frames.history.back(0);} 
					else{history.back(0);} 
				}else{history.back(0);} 
			}else{window.close();} 
			} 
		} 
	} 
 
 
function printDate(){ 
/************************************************************************ 
	procedure to return string - current day & month     			 
	Syntax printDate()                                    			 
************************************************************************/ 
	today=new Date; 
	weekDayName=new Array ("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"); 
	monthName=new Array ("January","February","March","April","May","June","July","August","September","October","November","December"); 
	return(weekDayName[today.getDay()]+ " " + monthName[today.getMonth()] + " " + today.getDate()); 
	} 
 
 
 
function currentYear(){ 
/***********************************************************************/ 
	today 	=new Date(); 
	year 		=today.getYear();year <=1900 ? year +=1900 : 0; 
	return year; 
	} 
 
 
function nowDate(){ 
/***********************************************************************/ 
	today 	=new Date(); 
	weekDay 	=new Array ("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"); 
	this_month 	=new Array ("January","February","March","April","May","June","July","August","September","October","November","December"); 
	return(weekDay[today.getDay()]+"&nbsp;"+this_month[today.getMonth()]+"&nbsp;"+today.getDate()+"&nbsp;"+currentYear()); 
	} 
 
 
function nowDateT(){ 
/***********************************************************************/ 
	today 	=new Date(); 
	time 		=today.getHours(); 
	if (time >=12){ 
		if (time > 12){time -=12;} 
		today.getMinutes() < 10 ? time=time+":0"+today.getMinutes()+"&nbsp;pm" : time=time+":"+today.getMinutes()+"&nbsp;pm"; 
	}else{ 
		today.getMinutes() < 10 ? time=time+":0"+today.getMinutes()+"&nbsp;am" : time=time+":"+today.getMinutes()+"&nbsp;am"; 
		} 
	return(nowDate()+" "+time); 
	} 
 
   
 function daysUntil(){ 
/************************************************************************ 
Syntax daysUntil("August 17, 2001")                                    			 
************************************************************************/ 
	now=new Date(); 
	eventDate=new Date(arguments[0]); 
	msPerDay=24 * 60 * 60 * 1000 ; 
	daysRemaining=(eventDate.getTime() - now.getTime()) / msPerDay; 
	daysRemaining=Math.round(daysRemaining); 
	return(daysRemaining); 
	} 
 
 
function nowDates(){ 
/************************************************************************ 
Syntax nowDates(no_of_days)                                    			 
function to calculate date=today + no_of_days   					 
************************************************************************/ 
	days		=0;if(arguments[0]){days=eval(arguments[0]);} 
	startDay	=days;if(days > 0){startDay=1;} 
	str	='' 
	today		=new Date(); 
	for (var i=startDay; i<(days+1); i++) { 
		n=new Date(); 
		if($str!=''){$str=$str+'|';} 
		//confirm('nowDates: startDate='+startDay+' i='+i+' '+str); 
		n.setDate(today.getDate()+i); 
		nday=n.getDate(); 
		nmonth=n.getMonth()+1; 
		nyear=n.getYear(); 
		if(nday<=9){nday='0'+nday;} 
		if(nmonth <=9){nmonth='0'+nmonth;} 
		nyear <=1900 ? nyear +=1900 : 0; 
		$str=$str+nday+"/"+nmonth+"/"+nyear 
		//confirm($str); 
		} 
	return($str); 
	} 
 
 
function writeDays(){ 
/************************************************************************ 
calculate between two dates 
************************************************************************/ 
	msPerDay=24 * 60 * 60 * 1000; // Number of milliseconds per day 
	today=new Date(); 
	endYear=new Date("December 31, 1999"); // Set day and month 
	endYear.setYear(today.getYear()); // Set year to this year 
	daysLeft=(endYear.getTime() - today.getTime()) / msPerDay; 
	daysLeft=Math.round(daysLeft); 
	//confirm(daysLeft+' days left in the year'); 
	} 
 
 
function bookMark(){ 
/************************************************************************ 
create bookmark in ie4	 
************************************************************************/ 
if(!document.layers){ 
	var su=window.location.href; 
	var tu=topUrl(); 
	//confirm('su=' + su + '  tu=' + tu); 
  	if (window.external){window.external.AddFavorite(su,tu);} 
  	}} 
 
 
function prntPage() { 
/************************************************************************/ 
//pr=(window.print)?1:0;// NS4, IE5 
	if (window.print) 	{window.print();} 
	else if (is.mac) 	{confirm("Press 'Cmd+p' on your keyboard to print");} 
	else if (is.ie4) 	{vbPrintPage();} 
	else 			{confirm("Press 'Ctrl+p' on your keyboard to print")} 
	} 
function vbprintPage() { 
if ((is.ie4) && !(is.mac)){ 
document.writeln('<OBJECT ID="WB" WIDTH="0" HEIGHT="0" CLASSID="clsid:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>' 
  		+	'<' + 'SCRIPT LANGUAGE="VBScript">' 
		+	'Sub window_onunload' 
		+	'  On Error Resume Next' 
		+	'  Set WB=nothing' 
		+	'End Sub' 
		+	'Sub vbPrintPage' 
		+	'  OLECMDID_PRINT=6' 
		+	'  OLECMDEXECOPT_DONTPROMPTUSER=2' 
		+	'  OLECMDEXECOPT_PROMPTUSER=1' 
		+	'  On Error Resume Next' 
		+	'  WB.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER' 
		+	'End Sub' 
		+	'<' + '/SCRIPT>'); 
		} 
	} 
 
function showItem(){ 
/******************************************************************************** 
Syntax: showItem (id[,id2,id3,etc])						 
Purpose: toggle display of <span> & <div> id's in argument[0]						 
********************************************************************************/ 
	//confirm('arguments[0]='+arguments[0]+'\n'+aList("arguments")); 
	for(sn=0;sn<arguments.length;sn++){ 
		var objToDisplay=document.getElementById(arguments[sn]); 
		objToDisplay.style.display=(objToDisplay.style.display=='none')?'':'none'; 
		//confirm('arguments[sn]='+arguments[sn]+'\nobjToDisplay.style.display='+objToDisplay.style.display); 
		//objToDisplay.style.title='Click to toggle display on and off'; 
		//visibility preserves positioning: 
		//objToDisplay.style.visibility=(objToDisplay.style.visibility=='hidden')?'visible':'hidden'; 
		} 
	} 
 
function showItemOn(){ 
/******************************************************************************** 
Syntax: showItem (id[,id2,id3,etc])						 
Purpose: toggle display of <span> & <div> id's in argument[0]						 
********************************************************************************/ 
	for(sn=0;sn<arguments.length;sn++){ 
		var objToDisplay=document.getElementById(arguments[sn]); 
		objToDisplay.style.display=''; 
		} 
	} 
 
function showItemOff(){ 
/******************************************************************************** 
Syntax: showItem (id[,id2,id3,etc])						 
Purpose: toggle display of <span> & <div> id's in argument[0]						 
********************************************************************************/ 
	for(sn=0;sn<arguments.length;sn++){ 
		var objToDisplay=document.getElementById(arguments[sn]); 
		objToDisplay.style.display='none'; 
		} 
	} 
 
function showPageDivs(){ 
/******************************************************************************** 
Syntax: showPageDivs()						 
Purpose: toggle display of all <div>'s with id						 
********************************************************************************/ 
	str = 'showItemOn'; 
	var records=document.getElementsByTagName("div"); 
	var $database = new Array(); 
	for (i=0;i<records.length;i++){ 
		if(records[i].id.length>0){ 
			//$str = records[i].id; //+'';//convert to string! 
			$database[$database.length]=records[i].id+''; 	 
			} 
		} 
	var objToDisplay=document.getElementById($database[0]); 
//	confirm('selfUrl='+selfUrl()+'\nnn.link='+nn.link+'\n$database[0]='+$database[0]+'\nobjToDisplay.style.display='+objToDisplay.style.display); 
	str = (objToDisplay.style.display=='none')?'showItemOn':'showItemOff';
	str+= '('; 
	for (sn=0;sn<$database.length; sn++ ){ 
		str+='"'+$database[sn]+'"'; 
		if(sn<$database.length-1){str+=', ';} 
		} 
	str+=');'
//	confirm('selfUrl='+selfUrl()+'\nnn.link='+nn.link+'\n$database[0]='+$database[0]+'\nstr='+str); 
	return(str); 
	} 
 
 
function displayJs () { 
/******************************************************************************** 
Syntax: displayJs (docObj,dosname)						 
Purpose: display dosname.js to argument[0]						 
********************************************************************************/ 
	aScript='<script src="'+jsRoot+arguments[1]+'.js" type="text/javaScript" language="javascript"><\/script>' 
	arguments[0].writeln(aScript); 
	return; 
	} 
 

function selfHilite(){ 
/******************************************************************************** 
Syntax: selfHilite (id[,id2,id3,etc])						 
Purpose: toggle display of <span> & <div> id's in argument[0] 
<style>a.on {} </style>is required on page					 
********************************************************************************/ 
	if (document.getElementById){ 
	var adivs=document.getElementsByTagName("a"); 
	for (i=0;i<adivs.length;i++){ 
		var obj=adivs[i];  
		obj.className="off";
		var $str=adivs[i]+''; 	//convert to string! 
		if($str.indexOf(topUrl())!=-1) obj.className="on"; 
		else {
			if($str.indexOf(selfUrl())!=-1) obj.className="on"; 
			else {
				//confirm('selfHilite:\n$str='+$str+'\ntopUrl='+topUrl()+'\nselfUrl='+selfUrl()+'\ndocument.title='+trim(document.title)); 
				if($str.indexOf(trim(document.title))!=-1){
					obj.className="on";  
					}
				}
			} 
		}
	}}
 
  
function aList(){ 
/****************************************************************************** 
function aList('arrayname','method')							 
	debugmessage displayed within confirm() 
	lists all elements of an array								 
*******************************************************************************/ 
	var nn=eval(arguments[0]+'.length'); 
	var nm='';if(arguments[1]){nm='.'+arguments[1];} 
	var $str=arguments[0]+'.length='+nn; 
	for (ni=0; ni<nn; ni++ ){ 
		$str=$str+'\n    '+arguments[0]+'['+ni+']='+eval(arguments[0]+'['+ni+']'+nm); 
		} 
	return($str); 
	} 


 function urlencode( str ) {
 /******************************************************************************/ 
   // http://kevin.vanzonneveld.net
    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: AJ
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: travc
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Lars Fischer
    // %          note 1: info on what encoding functions to use from: http://xkr.us/articles/javascript/encode-compare/
    // *     example 1: urlencode('Kevin van Zonneveld!');
    // *     returns 1: 'Kevin+van+Zonneveld%21'
    // *     example 2: urlencode('http://kevin.vanzonneveld.net/');
    // *     returns 2: 'http%3A%2F%2Fkevin.vanzonneveld.net%2F'
    // *     example 3: urlencode('http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a');
    // *     returns 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a'
/*******************************************************************************/ 
    var histogram = {}, unicodeStr='', hexEscStr='';
    var ret = (str+'').toString();
    
    var replacer = function(search, replace, str) {
        var tmp_arr = [];
        tmp_arr = str.split(search);
        return tmp_arr.join(replace);
    };
    
    // The histogram is identical to the one in urldecode.
    histogram[" "]   = '%20';
    histogram["'"]   = '%27';
    histogram['(']   = '%28';
    histogram[')']   = '%29';
    histogram['*']   = '%2A';
    histogram['~']   = '%7E';
    histogram['!']   = '%21';
   // histogram['%20'] = '+';
    histogram['\u00DC'] = '%DC';
    histogram['\u00FC'] = '%FC';
    histogram['\u00C4'] = '%D4';
    histogram['\u00E4'] = '%E4';
    histogram['\u00D6'] = '%D6';
    histogram['\u00F6'] = '%F6';
    histogram['\u00DF'] = '%DF';
    histogram['\u20AC'] = '%80';
    histogram['\u0081'] = '%81';
    histogram['\u201A'] = '%82';
    histogram['\u0192'] = '%83';
    histogram['\u201E'] = '%84';
    histogram['\u2026'] = '%85';
    histogram['\u2020'] = '%86';
    histogram['\u2021'] = '%87';
    histogram['\u02C6'] = '%88';
    histogram['\u2030'] = '%89';
    histogram['\u0160'] = '%8A';
    histogram['\u2039'] = '%8B';
    histogram['\u0152'] = '%8C';
    histogram['\u008D'] = '%8D';
    histogram['\u017D'] = '%8E';
    histogram['\u008F'] = '%8F';
    histogram['\u0090'] = '%90';
    histogram['\u2018'] = '%91';
    histogram['\u2019'] = '%92';
    histogram['\u201C'] = '%93';
    histogram['\u201D'] = '%94';
    histogram['\u2022'] = '%95';
    histogram['\u2013'] = '%96';
    histogram['\u2014'] = '%97';
    histogram['\u02DC'] = '%98';
    histogram['\u2122'] = '%99';
    histogram['\u0161'] = '%9A';
    histogram['\u203A'] = '%9B';
    histogram['\u0153'] = '%9C';
    histogram['\u009D'] = '%9D';
    histogram['\u017E'] = '%9E';
    histogram['\u0178'] = '%9F';
    
    // Begin with encodeURIComponent, which most resembles PHP's encoding functions
    ret = encodeURIComponent(ret);
 
    for (unicodeStr in histogram) {
        hexEscStr = histogram[unicodeStr];
        ret = replacer(unicodeStr, hexEscStr, ret); // Custom replace. No regexing
    }
    
    // Uppercase for full PHP compatibility
    return ret.replace(/(\%([a-z0-9]{2}))/g, function(full, m1, m2) {
        return "%"+m2.toUpperCase();
    });
}
//confirm('end of macros'); 

