/* --- BoxOver ---\
/* --- v 1.9 12 December 2005\
By Oliver Bryant with help of Matthew Tagg\
http://boxover.swazz.org */\
\
if (typeof document.attachEvent!='undefined') \{\
   window.attachEvent('onload',init);\
   document.attachEvent('onmousemove',moveMouse);\
   document.attachEvent('onclick',checkMove); \}\
else \{\
   window.addEventListener('load',init,false);\
   document.addEventListener('mousemove',moveMouse,false);\
   document.addEventListener('click',checkMove,false);\
\}\
\
var oDv=document.createElement("div");\
var dvHdr=document.createElement("div");\
var dvBdy=document.createElement("div");\
var windowlock,boxMove,fixposx,fixposy,lockX,lockY,fixx,fixy,ox,oy,boxLeft,boxRight,boxTop,boxBottom,evt,mouseX,mouseY,boxOpen,totalScrollTop,totalScrollLeft;\
boxOpen=false;\
ox=10;\
oy=10;\
lockX=0;\
lockY=0;\
\
function init() \{\
	oDv.appendChild(dvHdr);\
	oDv.appendChild(dvBdy);\
	oDv.style.position="absolute";\
	oDv.style.visibility='hidden';\
	document.body.appendChild(oDv);	\
\}\
\
function defHdrStyle() \{\
	dvHdr.innerHTML='<img  style="vertical-align:middle"  src="info.gif">&nbsp;&nbsp;'+dvHdr.innerHTML;\
	dvHdr.style.fontWeight='bold';\
	dvHdr.style.width='150px';\
	dvHdr.style.fontFamily='arial';\
	dvHdr.style.border='1px solid #A5CFE9';\
	dvHdr.style.padding='3';\
	dvHdr.style.fontSize='11';\
	dvHdr.style.color='#4B7A98';\
	dvHdr.style.background='#D5EBF9';\
	dvHdr.style.filter='alpha(opacity=85)'; // IE\
	dvHdr.style.opacity='0.85'; // Firefox\
\}\
\
function defBdyStyle() \{\
	dvBdy.style.borderBottom='1px solid #A5CFE9';\
	dvBdy.style.borderLeft='1px solid #A5CFE9';\
	dvBdy.style.borderRight='1px solid #A5CFE9';\
	dvBdy.style.width='150px';\
	dvBdy.style.fontFamily='arial';\
	dvBdy.style.fontSize='11';\
	dvBdy.style.padding='3';\
	dvBdy.style.color='#1B4966';\
	dvBdy.style.background='#FFFFFF';\
	dvBdy.style.filter='alpha(opacity=85)'; // IE\
	dvBdy.style.opacity='0.85'; // Firefox\
\}\
\
var cnt=0;\
\
function checkElemBO(txt) \{\
   if ((txt.indexOf('header')>-1)&(txt.indexOf('body')>-1)&(txt.indexOf('[')>-1)&(txt.indexOf('[')>-1))\
      return true;\
   else\
      return false;\
\}\
\
function scanDOM(curNode) \{\
	cnt++;\
	while(curNode)	\{\
		if (curNode.title) \{\
		  if (checkElemBO(curNode.title)) \{\
   			curNode.boHDR=getParam('(?:[^a-zA-Z]header|^header)',curNode.title);\
   			curNode.boBDY=getParam('(?:[^a-zA-Z]body|^body)',curNode.title);\
   			curNode.boCSSBDY=getParam('cssbody',curNode.title);			\
   			curNode.boCSSHDR=getParam('cssheader',curNode.title);\
   			curNode.IEbugfix=(getParam('hideselects',curNode.title)=='on')?true:false;\
   			curNode.fixX=parseInt(getParam('fixedrelx',curNode.title));\
   			curNode.fixY=parseInt(getParam('fixedrely',curNode.title));\
   			curNode.absX=parseInt(getParam('fixedabsx',curNode.title));\
   			curNode.absY=parseInt(getParam('fixedabsy',curNode.title));\
   			curNode.offY=(getParam('offsety',curNode.title)!='')?parseInt(getParam('offsety',curNode.title)):10;\
   			curNode.offX=(getParam('offsetx',curNode.title)!='')?parseInt(getParam('offsetx',curNode.title)):10;\
   			curNode.fade=(getParam('fade',curNode.title)=='on')?true:false;\
   			curNode.fadespeed=(getParam('fadespeed',curNode.title)!='')?getParam('fadespeed',curNode.title):0.04;\
   			curNode.delay=(getParam('delay',curNode.title)!='')?parseInt(getParam('delay',curNode.title)):0;\
   			if (getParam('requireclick',curNode.title)=='on') \{\
   				curNode.requireclick=true;\
   				document.all?curNode.attachEvent('onclick',showHideBox):curNode.addEventListener('click',showHideBox,false);\
   				document.all?curNode.attachEvent('onmouseover',hideBox):curNode.addEventListener('mouseover',hideBox,false);\
   			\}\
   			else \{// Note : if requireclick is on the stop clicks are ignored   			\
	   			if (getParam('doubleclickstop',curNode.title)!='off') \{\
	   				document.all?curNode.attachEvent('ondblclick',pauseBox):curNode.addEventListener('dblclick',pauseBox,false);\
	   			\}	\
	   			if (getParam('singleclickstop',curNode.title)=='on') \{\
	   				document.all?curNode.attachEvent('onclick',pauseBox):curNode.addEventListener('click',pauseBox,false);\
	   			\}\
	   		\}\
   			curNode.windowLock=getParam('windowlock',curNode.title).toLowerCase()=='off'?false:true;\
   			curNode.title='';\
   			curNode.hasbox='true';\
   	   \}\
		\}\
		scanDOM(curNode.firstChild);\
		curNode=curNode.nextSibling;\
	\}\
\}\
\
function getParam(param,list) \{\
	var reg = new RegExp(param+'\\\\s*=\\\\s*\\\\[\\\\s*(((\\\\[\\\\[)|(\\\\]\\\\])|([^\\\\]\\\\[]))*)\\\\s*\\\\]');\
	var res = reg.exec(list);\
	var returnvar;\
	if(res)\
		return res[1].replace('[[','[').replace(']]',']');\
	else\
		return '';\
\}\
\
function Left(elem)\{	\
	var x=0;\
	if (elem.calcLeft)\
		return elem.calcLeft;\
	var oElem=elem;\
	while(elem)\{\
		 if ((elem.currentStyle)&& (!isNaN(parseInt(elem.currentStyle.borderLeftWidth)))&&(x!=0))\
		 	x+=parseInt(elem.currentStyle.borderLeftWidth);\
		 x+=elem.offsetLeft;\
		 elem=elem.offsetParent;\
	  \} \
	oElem.calcLeft=x;\
	return x;\
	\}\
\
function Top(elem)\{\
	 var x=0;\
	 if (elem.calcTop)\
	 	return elem.calcTop;\
	 var oElem=elem;\
	 while(elem)\{		\
	 	 if ((elem.currentStyle)&& (!isNaN(parseInt(elem.currentStyle.borderTopWidth)))&&(x!=0))\
		 	x+=parseInt(elem.currentStyle.borderTopWidth); \
		 x+=elem.offsetTop;\
	         elem=elem.offsetParent;\
 	 \} \
 	 oElem.calcTop=x;\
 	 return x;\
 	 \
\}\
\
var ah,ab;\
function applyStyles() \{\
	if(ab)\
		oDv.removeChild(dvBdy);\
	if (ah)\
		oDv.removeChild(dvHdr);\
	dvHdr=document.createElement("div");\
	dvBdy=document.createElement("div");\
	CBE.boCSSBDY?dvBdy.className=CBE.boCSSBDY:defBdyStyle();\
	CBE.boCSSHDR?dvHdr.className=CBE.boCSSHDR:defHdrStyle();\
	dvHdr.innerHTML=CBE.boHDR;\
	dvBdy.innerHTML=CBE.boBDY;\
	ah=false;\
	ab=false;\
	if (CBE.boHDR!='') \{		\
		oDv.appendChild(dvHdr);\
		ah=true;\
	\}	\
	if (CBE.boBDY!='')\{\
		oDv.appendChild(dvBdy);\
		ab=true;\
	\}	\
\}\
\
var CSE,iterElem,LSE,CBE,LBE, totalScrollLeft, totalScrollTop, width, height ;\
var ini=false;\
\
// Customised function for inner window dimension\
function SHW() \{\
   if (document.body && (document.body.clientWidth !=0)) \{\
      width=document.body.clientWidth;\
      height=document.body.clientHeight;\
   \}\
   if (document.documentElement && (document.documentElement.clientWidth!=0) && (document.body.clientWidth + 20 >= document.documentElement.clientWidth)) \{\
      width=document.documentElement.clientWidth;   \
      height=document.documentElement.clientHeight;   \
   \}   \
   return [width,height];\
\}\
\
\
var ID=null;\
function moveMouse(e) \{\
   if (!ini) \{      \
      scanDOM(document.body.firstChild);\
      ini=true;\
   \}\
	e?evt=e:evt=event;	\
	//evt=event;\
		\
	CSE=evt.target?evt.target:evt.srcElement;\
	if ((CSE!=LSE)&&(!isChild(CSE,dvHdr))&&(!isChild(CSE,dvBdy)))\{\
		\
		if (!CSE.boxItem) \{\
			iterElem=CSE;\
			while ((!iterElem.hasbox)&&(iterElem.parentNode))\
					iterElem=iterElem.parentNode; \
			CSE.boxItem=iterElem;\
			\}\
		iterElem=CSE.boxItem;\
		if (CSE.boxItem.title)\
		  if (checkElemBO(CSE.boxItem.title)) \{		      \
		      ini=false;\
		   \}\
		if (CSE.boxItem&&CSE.boxItem.hasbox)  \{\
			LBE=CBE;\
			CBE=iterElem;\
			if (CBE!=LBE) \{\
				applyStyles();\
				if (!CBE.requireclick)\
					if (CBE.fade) \{\
						if (ID!=null)\
							clearTimeout(ID);\
						ID=setTimeout("fadeIn("+CBE.fadespeed+")",CBE.delay);\
					\}\
					else \{\
						if (ID!=null)\
							clearTimeout(ID);\
						COL=1;\
						ID=setTimeout("oDv.style.visibility='visible';ID=null;",CBE.delay);						\
					\}\
				if (CBE.IEbugfix) \{hideSelects();\} \
				fixposx=!isNaN(CBE.fixX)?Left(CBE)+CBE.fixX:CBE.absX;\
				fixposy=!isNaN(CBE.fixY)?Top(CBE)+CBE.fixY:CBE.absY;			\
				lockX=0;\
				lockY=0;\
				boxMove=true;\
				ox=CBE.offX?CBE.offX:10;\
				oy=CBE.offY?CBE.offY:10;\
			\}\
		\}\
		else if (!isChild(CSE,dvHdr) && !isChild(CSE,dvBdy) && (boxMove))	\{\
			// The conditional here fixes flickering between tables cells.\
			if ((!isChild(CBE,CSE)) || (CSE.tagName!='TABLE')) \{   			\
   			CBE=null;\
   			fadeOut();\
   			showSelects();\
			\}\
		\}\
		LSE=CSE;\
	\}\
	else if (((isChild(CSE,dvHdr) || isChild(CSE,dvBdy))&&(boxMove))) \{\
		totalScrollLeft=0;\
		totalScrollTop=0;\
		\
		iterElem=CSE;\
		while(iterElem) \{\
			if(!isNaN(parseInt(iterElem.scrollTop)))\
				totalScrollTop+=parseInt(iterElem.scrollTop);\
			if(!isNaN(parseInt(iterElem.scrollLeft)))\
				totalScrollLeft+=parseInt(iterElem.scrollLeft);\
			iterElem=iterElem.parentNode;			\
		\}\
		if (CBE!=null) \{\
			boxLeft=Left(CBE)-totalScrollLeft;\
			boxRight=parseInt(Left(CBE)+CBE.offsetWidth)-totalScrollLeft;\
			boxTop=Top(CBE)-totalScrollTop;\
			boxBottom=parseInt(Top(CBE)+CBE.offsetHeight)-totalScrollTop;\
			doCheck();\
		\}\
	\}\
	\
	if (boxMove&&CBE) \{\
		// This added to alleviate bug in IE6 w.r.t DOCTYPE\
		bodyScrollTop=document.documentElement&&document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop;\
		bodyScrollLet=document.documentElement&&document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft;\
		mouseX=evt.pageX?evt.pageX-bodyScrollLet:evt.clientX-document.body.clientLeft;\
		mouseY=evt.pageY?evt.pageY-bodyScrollTop:evt.clientY-document.body.clientTop;\
		if ((CBE)&&(CBE.windowLock)) \{\
			mouseY < -oy?lockY=-mouseY-oy:lockY=0;\
			mouseX < -ox?lockX=-mouseX-ox:lockX=0;\
			mouseY > (SHW()[1]-oDv.offsetHeight-oy)?lockY=-mouseY+SHW()[1]-oDv.offsetHeight-oy:lockY=lockY;\
			mouseX > (SHW()[0]-dvBdy.offsetWidth-ox)?lockX=-mouseX-ox+SHW()[0]-dvBdy.offsetWidth:lockX=lockX;			\
		\}\
		oDv.style.left=((fixposx)||(fixposx==0))?fixposx:bodyScrollLet+mouseX+ox+lockX+"px";\
		oDv.style.top=((fixposy)||(fixposy==0))?fixposy:bodyScrollTop+mouseY+oy+lockY+"px";		\
		\
	\}\
\}\
\
function doCheck() \{	\
	if (   (mouseX < boxLeft)    ||     (mouseX >boxRight)     || (mouseY < boxTop) || (mouseY > boxBottom)) \{\
		if (!CBE.requireclick)\
			fadeOut();\
		if (CBE.IEbugfix) \{showSelects();\}\
		CBE=null;\
	\}\
\}\
\
function pauseBox(e) \{\
   e?evt=e:evt=event;\
	boxMove=false;\
	evt.cancelBubble=true;\
\}\
\
function showHideBox(e) \{\
	oDv.style.visibility=(oDv.style.visibility!='visible')?'visible':'hidden';\
\}\
\
function hideBox(e) \{\
	oDv.style.visibility='hidden';\
\}\
\
var COL=0;\
var stopfade=false;\
function fadeIn(fs) \{\
		ID=null;\
		COL=0;\
		oDv.style.visibility='visible';\
		fadeIn2(fs);\
\}\
\
function fadeIn2(fs) \{\
		COL=COL+fs;\
		COL=(COL>1)?1:COL;\
		oDv.style.filter='alpha(opacity='+parseInt(100*COL)+')';\
		oDv.style.opacity=COL;\
		if (COL<1)\
		 setTimeout("fadeIn2("+fs+")",20);		\
\}\
\
\
function fadeOut() \{\
	oDv.style.visibility='hidden';\
	\
\}\
\
function isChild(s,d) \{\
	while(s) \{\
		if (s==d) \
			return true;\
		s=s.parentNode;\
	\}\
	return false;\
\}\
\
var cSrc;\
function checkMove(e) \{\
	e?evt=e:evt=event;\
	cSrc=evt.target?evt.target:evt.srcElement;\
	if ((!boxMove)&&(!isChild(cSrc,oDv))) \{\
		fadeOut();\
		if (CBE&&CBE.IEbugfix) \{showSelects();\}\
		boxMove=true;\
		CBE=null;\
	\}\
\}\
\
function showSelects()\{\
   var elements = document.getElementsByTagName("select");\
   for (i=0;i< elements.length;i++)\{\
      elements[i].style.visibility='visible';\
   \}\
\}\
\
function hideSelects()\{\
   var elements = document.getElementsByTagName("select");\
   for (i=0;i< elements.length;i++)\{\
   elements[i].style.visibility='hidden';\
   \}\
\}}