/* NOTE - THIS FILE HAS BEEN MODIFIED FROM THE ORIGINAL - DO NOT UPGRADE! */
/* --- BoxOver ---
/* --- v 2.1 17th June 2006
By Oliver Bryant with help of Matthew Tagg
http://boxover.swazz.org */

if (typeof document.attachEvent!='undefined') {
   window.attachEvent('onload',bxo_init);
   document.attachEvent('onmousemove',bxo_moveMouse);
   document.attachEvent('onclick',bxo_checkMove); }
else {
   window.addEventListener('load',bxo_init,false);
   document.addEventListener('mousemove',bxo_moveMouse,false);
   document.addEventListener('click',bxo_checkMove,false);
}

var bxo_oDv=document.createElement("div");
var bxo_dvHdr=document.createElement("div");
var bxo_dvBdy=document.createElement("div");
var bxo_windowlock,bxo_boxMove,bxo_fixposx,bxo_fixposy,bxo_lockX,bxo_lockY,bxo_fixx,bxo_fixy,bxo_ox,bxo_oy,bxo_boxLeft,bxo_boxRight,bxo_boxTop,bxo_boxBottom,bxo_evt,bxo_mouseX,bxo_mouseY,bxo_boxOpen,bxo_totalScrollTop,bxo_totalScrollLeft;
bxo_boxOpen=false;
bxo_ox=10;
bxo_oy=10;
bxo_lockX=0;
bxo_lockY=0;

function bxo_init() {
	bxo_oDv.appendChild(bxo_dvHdr);
	bxo_oDv.appendChild(bxo_dvBdy);
	bxo_oDv.style.position="absolute";
	bxo_oDv.style.visibility='hidden';
	document.body.appendChild(bxo_oDv);	
}

function bxo_defHdrStyle() {
	bxo_dvHdr.innerHTML='<img  style="vertical-align:middle"  src="info.gif">&nbsp;&nbsp;'+bxo_dvHdr.innerHTML;
	bxo_dvHdr.style.fontWeight='bold';
	bxo_dvHdr.style.bxo_width='150px';
	bxo_dvHdr.style.fontFamily='arial';
	bxo_dvHdr.style.border='1px solid #A5CFE9';
	bxo_dvHdr.style.padding='3';
	bxo_dvHdr.style.fontSize='11';
	bxo_dvHdr.style.color='#4B7A98';
	bxo_dvHdr.style.background='#D5EBF9';
	bxo_dvHdr.style.filter='alpha(opacity=85)'; // IE
	bxo_dvHdr.style.opacity='0.85'; // FF
}

function bxo_defBdyStyle() {
	bxo_dvBdy.style.borderBottom='1px solid #A5CFE9';
	bxo_dvBdy.style.borderLeft='1px solid #A5CFE9';
	bxo_dvBdy.style.borderRight='1px solid #A5CFE9';
	bxo_dvBdy.style.bxo_width='150px';
	bxo_dvBdy.style.fontFamily='arial';
	bxo_dvBdy.style.fontSize='11';
	bxo_dvBdy.style.padding='3';
	bxo_dvBdy.style.color='#1B4966';
	bxo_dvBdy.style.background='#FFFFFF';
	bxo_dvBdy.style.filter='alpha(opacity=85)'; // IE
	bxo_dvBdy.style.opacity='0.85'; // FF
}

function bxo_checkElemBO(txt) {
if (!txt || typeof(txt) != 'string') return false;
if ((txt.indexOf('header')>-1)&&(txt.indexOf('body')>-1)&&(txt.indexOf('[')>-1)&&(txt.indexOf('[')>-1)) 
   return true;
else
   return false;
}

function bxo_scanBO(curNode) {
	  if (bxo_checkElemBO(curNode.title)) {
         curNode.boHDR=bxo_getParam('header',curNode.title);
         curNode.boBDY=bxo_getParam('body',curNode.title);
			curNode.boCSSBDY=bxo_getParam('cssbody',curNode.title);			
			curNode.boCSSHDR=bxo_getParam('cssheader',curNode.title);
			curNode.IEbugfix=(bxo_getParam('hideselects',curNode.title)=='on')?true:false;
			curNode.fixX=parseInt(bxo_getParam('fixedrelx',curNode.title));
			curNode.fixY=parseInt(bxo_getParam('fixedrely',curNode.title));
			curNode.absX=parseInt(bxo_getParam('fixedabsx',curNode.title));
			curNode.absY=parseInt(bxo_getParam('fixedabsy',curNode.title));
			curNode.offY=(bxo_getParam('offsety',curNode.title)!='')?parseInt(bxo_getParam('offsety',curNode.title)):10;
			curNode.offX=(bxo_getParam('offsetx',curNode.title)!='')?parseInt(bxo_getParam('offsetx',curNode.title)):10;
			curNode.fade=(bxo_getParam('fade',curNode.title)=='on')?true:false;
			curNode.fadespeed=(bxo_getParam('fadespeed',curNode.title)!='')?bxo_getParam('fadespeed',curNode.title):0.04;
			curNode.delay=(bxo_getParam('delay',curNode.title)!='')?parseInt(bxo_getParam('delay',curNode.title)):0;
			if (bxo_getParam('requireclick',curNode.title)=='on') {
				curNode.requireclick=true;
				document.all?curNode.attachEvent('onclick',bxo_showHideBox):curNode.addEventListener('click',bxo_showHideBox,false);
				document.all?curNode.attachEvent('onmouseover',bxo_hideBox):curNode.addEventListener('mouseover',bxo_hideBox,false);
			}
			else {// Note : if requireclick is on the stop clicks are ignored   			
   			if (bxo_getParam('doubleclickstop',curNode.title)!='off') {
   				document.all?curNode.attachEvent('ondblclick',bxo_pauseBox):curNode.addEventListener('dblclick',bxo_pauseBox,false);
   			}	
   			if (bxo_getParam('singleclickstop',curNode.title)=='on') {
   				document.all?curNode.attachEvent('onclick',bxo_pauseBox):curNode.addEventListener('click',bxo_pauseBox,false);
   			}
   		}
			curNode.windowLock=bxo_getParam('bxo_windowlock',curNode.title).toLowerCase()=='off'?false:true;
			curNode.title='';
			curNode.hasbox=1;
	   }
	   else
	      curNode.hasbox=2;   
}


function bxo_getParam(param,list) {
	var reg = new RegExp('([^a-zA-Z]' + param + '|^' + param + ')\\s*=\\s*\\[\\s*(((\\[\\[)|(\\]\\])|([^\\]\\[]))*)\\s*\\]');
	var res = reg.exec(list);
	var returnvar;
	if(res)
		return res[2].replace('[[','[').replace(']]',']');
	else
		return '';
}

function bxo_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 bxo_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 bxo_ah,bxo_ab;
function bxo_applyStyles() {
	if(bxo_ab)
		bxo_oDv.removeChild(bxo_dvBdy);
	if (bxo_ah)
		bxo_oDv.removeChild(bxo_dvHdr);
	bxo_dvHdr=document.createElement("div");
	bxo_dvBdy=document.createElement("div");
	bxo_CBE.boCSSBDY?bxo_dvBdy.className=bxo_CBE.boCSSBDY:bxo_defBdyStyle();
	bxo_CBE.boCSSHDR?bxo_dvHdr.className=bxo_CBE.boCSSHDR:bxo_defHdrStyle();
	bxo_dvHdr.innerHTML=bxo_CBE.boHDR;
	bxo_dvBdy.innerHTML=bxo_CBE.boBDY;
	bxo_ah=false;
	bxo_ab=false;
	if (bxo_CBE.boHDR!='') {		
		bxo_oDv.appendChild(bxo_dvHdr);
		bxo_ah=true;
	}	
	if (bxo_CBE.boBDY!=''){
		bxo_oDv.appendChild(bxo_dvBdy);
		bxo_ab=true;
	}	
}

var bxo_CSE,bxo_iterElem,bxo_LSE,bxo_CBE,bxo_LBE, bxo_totalScrollLeft, bxo_totalScrollTop, bxo_width, bxo_height ;
var bxo_ini=false;

// Customised function for inner window dimension
function bxo_SHW() {
   if (document.body && (document.body.clientWidth !=0)) {
      bxo_width=document.body.clientWidth;
      bxo_height=document.body.clientHeight;
   }
   if (document.documentElement && (document.documentElement.clientWidth!=0) && (document.body.clientWidth + 20 >= document.documentElement.clientWidth)) {
      bxo_width=document.documentElement.clientWidth;   
      bxo_height=document.documentElement.clientHeight;   
   }   
   return [bxo_width,bxo_height];
}


var bxo_fadetimer=null;
function bxo_moveMouse(e) {
   //bxo_boxMove=true;
	e?bxo_evt=e:bxo_evt=event;
	
	bxo_CSE=bxo_evt.target?bxo_evt.target:bxo_evt.srcElement;
	
	if (!bxo_CSE.hasbox) {
	   // Note we need to scan up DOM here, some elements like TR don't get triggered as srcElement
	   iElem=bxo_CSE;
	   while ((iElem.parentNode) && (!iElem.hasbox)) {
	      bxo_scanBO(iElem);
	      iElem=iElem.parentNode;
	   }	   
	}
	
	if ((bxo_CSE!=bxo_LSE)&&(!bxo_isChild(bxo_CSE,bxo_dvHdr))&&(!bxo_isChild(bxo_CSE,bxo_dvBdy))){		
	   if (!bxo_CSE.boxItem) {
			bxo_iterElem=bxo_CSE;
			while ((bxo_iterElem.hasbox==2)&&(bxo_iterElem.parentNode))
					bxo_iterElem=bxo_iterElem.parentNode; 
			bxo_CSE.boxItem=bxo_iterElem;
			}
		bxo_iterElem=bxo_CSE.boxItem;
		if (bxo_CSE.boxItem&&(bxo_CSE.boxItem.hasbox==1))  {
			bxo_LBE=bxo_CBE;
			bxo_CBE=bxo_iterElem;
			if (bxo_CBE!=bxo_LBE) {
				bxo_applyStyles();
				if (!bxo_CBE.requireclick)
					if (bxo_CBE.fade) {
						if (bxo_fadetimer!=null)
							clearTimeout(bxo_fadetimer);
						bxo_fadetimer=setTimeout("bxo_fadeIn("+bxo_CBE.fadespeed+")",bxo_CBE.delay);
					}
					else {
						if (bxo_fadetimer!=null)
							clearTimeout(bxo_fadetimer);
						bxo_fadetimer=setTimeout("bxo_oDv.style.visibility='visible';bxo_COL=1;bxo_fadetimer=null;",bxo_CBE.delay);
					}
				if (bxo_CBE.IEbugfix) {bxo_hideSelects();} 
				bxo_fixposx=!isNaN(bxo_CBE.fixX)?bxo_Left(bxo_CBE)+bxo_CBE.fixX:bxo_CBE.absX;
				bxo_fixposy=!isNaN(bxo_CBE.fixY)?bxo_Top(bxo_CBE)+bxo_CBE.fixY:bxo_CBE.absY;			
				bxo_lockX=0;
				bxo_lockY=0;
				bxo_boxMove=true;
				bxo_ox=bxo_CBE.offX?bxo_CBE.offX:10;
				bxo_oy=bxo_CBE.offY?bxo_CBE.offY:10;
			}
		}
		else if (!bxo_isChild(bxo_CSE,bxo_dvHdr) && !bxo_isChild(bxo_CSE,bxo_dvBdy) && (bxo_boxMove))	{
			// The conditional here fixes flickering between tables cells.
			if (bxo_CBE && ((!bxo_isChild(bxo_CBE,bxo_CSE)) || (bxo_CSE.tagName!='TABLE'))) {
			if (bxo_CBE.fade) {
				if (bxo_fadetimer!=null)
					clearTimeout(bxo_fadetimer);
				bxo_fadetimer=setTimeout("bxo_fadeOut("+bxo_CBE.fadespeed+")",bxo_CBE.delay);
			}
			else {
				if (bxo_fadetimer!=null)
					clearTimeout(bxo_fadetimer);
				bxo_fadetimer=setTimeout("bxo_oDv.style.visibility='hidden';bxo_COL=0;bxo_fadetimer=null;",bxo_CBE.delay);
			}
   			bxo_showSelects();
   			bxo_CBE=null;
			}
		}
		bxo_LSE=bxo_CSE;
	}
	else if (((bxo_isChild(bxo_CSE,bxo_dvHdr) || bxo_isChild(bxo_CSE,bxo_dvBdy))&&(bxo_boxMove))) {
		bxo_totalScrollLeft=0;
		bxo_totalScrollTop=0;
		
		bxo_iterElem=bxo_CSE;
		while(bxo_iterElem) {
			if(!isNaN(parseInt(bxo_iterElem.scrollTop)))
				bxo_totalScrollTop+=parseInt(bxo_iterElem.scrollTop);
			if(!isNaN(parseInt(bxo_iterElem.scrollLeft)))
				bxo_totalScrollLeft+=parseInt(bxo_iterElem.scrollLeft);
			bxo_iterElem=bxo_iterElem.parentNode;			
		}
		if (bxo_CBE!=null) {
			bxo_boxLeft=bxo_Left(bxo_CBE)-bxo_totalScrollLeft;
			bxo_boxRight=parseInt(bxo_Left(bxo_CBE)+bxo_CBE.offsetWidth)-bxo_totalScrollLeft;
			bxo_boxTop=bxo_Top(bxo_CBE)-bxo_totalScrollTop;
			bxo_boxBottom=parseInt(bxo_Top(bxo_CBE)+bxo_CBE.offsetHeight)-bxo_totalScrollTop;
			bxo_doCheck();
		}
	}
	
	if (bxo_boxMove&&bxo_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;
		bxo_mouseX=bxo_evt.pageX?bxo_evt.pageX-bodyScrollLet:bxo_evt.clientX-document.body.clientLeft;
		bxo_mouseY=bxo_evt.pageY?bxo_evt.pageY-bodyScrollTop:bxo_evt.clientY-document.body.clientTop;
		if ((bxo_CBE)&&(bxo_CBE.windowLock)) {
			bxo_mouseY < -bxo_oy?bxo_lockY=-bxo_mouseY-bxo_oy:bxo_lockY=0;
			bxo_mouseX < -bxo_ox?bxo_lockX=-bxo_mouseX-bxo_ox:bxo_lockX=0;
			bxo_mouseY > (bxo_SHW()[1]-bxo_oDv.offsetHeight-bxo_oy)?bxo_lockY=-bxo_mouseY+bxo_SHW()[1]-bxo_oDv.offsetHeight-bxo_oy:bxo_lockY=bxo_lockY;
			bxo_mouseX > (bxo_SHW()[0]-bxo_dvBdy.offsetWidth-bxo_ox)?bxo_lockX=-bxo_mouseX-bxo_ox+bxo_SHW()[0]-bxo_dvBdy.offsetWidth:bxo_lockX=bxo_lockX;			
		}
		bxo_oDv.style.left=((bxo_fixposx)||(bxo_fixposx==0))?bxo_fixposx:bodyScrollLet+bxo_mouseX+bxo_ox+bxo_lockX+"px";
		bxo_oDv.style.top=((bxo_fixposy)||(bxo_fixposy==0))?bxo_fixposy:bodyScrollTop+bxo_mouseY+bxo_oy+bxo_lockY+"px";		
		
	}
}

function bxo_doCheck() {	
	if (   (bxo_mouseX < bxo_boxLeft)    ||     (bxo_mouseX >bxo_boxRight)     || (bxo_mouseY < bxo_boxTop) || (bxo_mouseY > bxo_boxBottom)) {
		if (!bxo_CBE.requireclick)
		{
			if (bxo_fadetimer!=null)
				clearTimeout(bxo_fadetimer);
			bxo_fadetimer=setTimeout("bxo_fadeOut("+bxo_CBE.fadespeed+")",bxo_CBE.delay);
		}
		if (bxo_CBE.IEbugfix) {bxo_showSelects();}
		bxo_CBE=null;
	}
}

function bxo_pauseBox(e) {
   e?bxo_evt=e:bxo_evt=event;
	bxo_boxMove=false;
	bxo_evt.cancelBubble=true;
}

function bxo_showHideBox(e) {
	bxo_oDv.style.visibility=(bxo_oDv.style.visibility!='visible')?'visible':'hidden';
}

function bxo_hideBox(e) {
	bxo_oDv.style.visibility='hidden';
	bxo_COL=0;
}

var bxo_COL=0;
var bxo_stopfade=false;
function bxo_fadeIn(fs) {
	if (bxo_fadetimer!=null)
		clearTimeout(bxo_fadetimer);
	bxo_fadetimer=null;
	bxo_oDv.style.visibility='visible';
	bxo_fadeIn2(fs);
}

function bxo_fadeIn2(fs) {
	bxo_COL=bxo_COL+fs;
	bxo_COL=(bxo_COL>1)?1:bxo_COL;
	bxo_oDv.style.filter='alpha(opacity='+parseInt(100*bxo_COL)+')';
	bxo_oDv.style.opacity=bxo_COL;
	if (bxo_COL<1)
	{
		if (bxo_fadetimer!=null)
			clearTimeout(bxo_fadetimer);
		bxo_fadetimer=setTimeout("bxo_fadeIn2("+fs+")",20);
	}
}

function bxo_fadeOut(fs) {
	if (bxo_fadetimer!=null)
		clearTimeout(bxo_fadetimer);
	bxo_fadetimer=null;
	bxo_fadeOut2(fs);
}

function bxo_fadeOut2(fs) {
	bxo_COL=bxo_COL-fs;
	bxo_COL=(bxo_COL<0)?0:bxo_COL;
	bxo_oDv.style.filter='alpha(opacity='+parseInt(100*bxo_COL)+')';
	bxo_oDv.style.opacity=bxo_COL;
	if (bxo_COL>0)
	{
		if (bxo_fadetimer!=null)
			clearTimeout(bxo_fadetimer);
		bxo_fadetimer=setTimeout("bxo_fadeOut2("+fs+")",20);
	}
	else
	{
		bxo_oDv.style.visibility='hidden';
	}
}

function bxo_isChild(s,d) {
	while(s) {
		if (s==d) 
			return true;
		s=s.parentNode;
	}
	return false;
}

var bxo_cSrc;
function bxo_checkMove(e) {
	e?bxo_evt=e:bxo_evt=event;
	bxo_cSrc=bxo_evt.target?bxo_evt.target:bxo_evt.srcElement;
	if ((!bxo_boxMove)&&(!bxo_isChild(bxo_cSrc,bxo_oDv))) {
		bxo_fadeOut();
		if (bxo_CBE&&bxo_CBE.IEbugfix) {bxo_showSelects();}
		bxo_boxMove=true;
		bxo_CBE=null;
	}
}

function bxo_showSelects(){
   var elements = document.getElementsByTagName("select");
   for (i=0;i< elements.length;i++){
      elements[i].style.visibility='visible';
   }
}

function bxo_hideSelects(){
   var elements = document.getElementsByTagName("select");
   for (i=0;i< elements.length;i++){
   elements[i].style.visibility='hidden';
   }
}
