/* --- BoxOver ---/* --- v 2.0 16th April 2006By Oliver Bryant with help of Matthew Tagghttp://boxover.swazz.org */var loadBoxOver = true;if (typeof document.attachEvent!='undefined') {   document.attachEvent('onmousemove',moveMouse);   document.attachEvent('onclick',checkMove); }else {   document.addEventListener('mousemove',moveMouse,false);   document.addEventListener('click',checkMove,false);}var displayBox = true;var boMainDiv='';var boDialDiv='';var boHeaderDiv='';var boBodyDiv='';var boHeaderDiv1='';var boHeaderDiv2='';var boHeaderDiv3='';var boHeaderDiv4='';var boHeaderDiv5='';var boFooterDiv1='';var boFooterDiv2='';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;var iterElem,boCurrentBoxElement,boPreviousBoxElement, totalScrollLeft, totalScrollTop, width, height ;var boCurrentElement = new Object();var boPreviousElement = new Object();boPreviousElement.id = '';boCurrentElement.id = '';var ini=false;var ID=null;var ah=false;var ab=false;// Initialisation de la DIV principale ---------------------------------------------------------------function boxOverInit() {	//addDebug("boxOverInit()");	if(boMainDiv != '')	{		//addDebug("boxOverInit() - removeChild(boMainDiv)");		document.body.removeChild(boMainDiv);		boMainDiv = '';		boHeaderDiv='';		boBodyDiv='';		boDialDiv='';		boHeaderDiv1='';		boHeaderDiv2='';		boHeaderDiv3='';		boHeaderDiv4='';		boHeaderDiv5='';		boFooterDiv1='';		boFooterDiv2='';        ox=10;		oy=10;		lockX=0;		lockY=0;		boxOpen = false;	}			//------------------------------------------------------	//	<div>									boMainDiv	//		<div class="dialog">				boDialDiv	//			<div class="hd">				boHeaderDiv1	//				<div class="c"></div>		boHeaderDiv2	//			</div>	//			<div class="bd">				boHeaderDiv3	//				<div class="c">				boHeaderDiv4	//					<div class="s">			boHeaderDiv5	//											boHeaderDiv	//											boBodyDiv	//					</div>	//				</div>	//			</div>	//			<div class="ft">				boFooterDiv1	//				<div class="c"></div>		boFooterDiv2	//			</div>	//		</div>	//	</div>	//------------------------------------------------------	//-- Class = "dialog" ----------------------------------	boMainDiv					= document.createElement("div");	var ret						= createDialDiv('');	boMainDiv.style.position	= "absolute";	boMainDiv.style.visibility	= 'hidden';	boMainDiv.style.zIndex		= "999";	boMainDiv.style.top			= '0px';	boMainDiv.style.left		= '0px';	document.body.appendChild(boMainDiv);}function createDialDiv(currNode) {	boDialDiv					= document.createElement("div");	boDialDiv.className			= "dialog";	boDialDiv.style.width		= '160px';	if(currNode)	{		boDialDiv.style.width	= currNode.boxWidth+'px';	}	//addDebug("boDialDiv.style.width="+boDialDiv.style.width);	boMainDiv.appendChild(boDialDiv);	boHeaderDiv1				= document.createElement("div");	boHeaderDiv1.className		= "hd";	boHeaderDiv2				= document.createElement("div");	boHeaderDiv2.className		= "c";	boHeaderDiv1.appendChild(boHeaderDiv2);	boDialDiv.appendChild(boHeaderDiv1);	boHeaderDiv3				= document.createElement("div");	boHeaderDiv3.className		= "bd";	boHeaderDiv4				= document.createElement("div");	boHeaderDiv4.className		= "c";	boHeaderDiv					= document.createElement("div");	boBodyDiv					= document.createElement("div");	boHeaderDiv4.appendChild(boHeaderDiv);	boHeaderDiv4.appendChild(boBodyDiv);	boHeaderDiv3.appendChild(boHeaderDiv4);	boDialDiv.appendChild(boHeaderDiv3);	boFooterDiv1				= document.createElement("div");	boFooterDiv1.className		= "ft";	boFooterDiv2				= document.createElement("div");	boFooterDiv2.className		= "c";	boFooterDiv1.appendChild(boFooterDiv2);	boDialDiv.appendChild(boFooterDiv1);	return false;}//-- Définition du style de l'en-tête de la boite -----------------------------------------------------------------function defBOHeaderStyle() {	//addDebug("defBOHeaderStyle");//	boHeaderDiv.innerHTML='<img style="vertical-align:middle" src="/glob/img/ico/info.gif">&nbsp;&nbsp;'+boHeaderDiv.innerHTML;	boHeaderDiv.style.fontWeight='bold';	boHeaderDiv.style.width='150px';	boHeaderDiv.style.fontFamily='arial';//	boHeaderDiv.style.border='1px solid #9a3535';	boHeaderDiv.style.padding='0px';	boHeaderDiv.style.fontSize='11px';//	boHeaderDiv.style.color='#4B7A98';	boHeaderDiv.style.background='#FFAAAA';	boHeaderDiv.style.filter='alpha(opacity=85)'; // IE	boHeaderDiv.style.opacity='0.85'; // FF}//-- Définition du style du corps de la boite -----------------------------------------------------------------function defBOBodyStyle() {	boBodyDiv.style.borderBottom='1px solid #9a3535';	boBodyDiv.style.borderLeft='1px solid #9a3535';	boBodyDiv.style.borderRight='1px solid #9a3535';	boBodyDiv.style.width='150px';	boBodyDiv.style.fontFamily='arial';	boBodyDiv.style.fontSize='11px';	boBodyDiv.style.padding='3px';//	boBodyDiv.style.color='#1B4966';	boBodyDiv.style.background='#E0BDBD';	boBodyDiv.style.filter='alpha(opacity=85)'; // IE	boBodyDiv.style.opacity='0.85'; // FF}//-- Est ce que le "title" doit être transformé ? ------------------------------------------------------------function 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;}//-- Recherche des éléments dont le "title" doit être transformé ---------------------------------------------function scanBO(curNode) {//	addDebug("scanBO - curNode="+curNode+", id="+curNode.id+", curNode.title="+curNode.title);	if (curNode.boxOverTitle) {        curNode.title = curNode.boxOverTitle;	}	if (checkElemBO(curNode.title)) {		curNode.boHDR=getParam('header',curNode.title);		curNode.boBDY=getParam('body',curNode.title);		curNode.boCSSBDY=getParam('cssbody',curNode.title);		curNode.boCSSHDR=(getParam('cssheader',curNode.title)!='')?getParam('cssheader',curNode.title):false;		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.boxWidth=(getParam('boxwidth',curNode.title)!='')?getParam('boxwidth',curNode.title):160;		//addDebug("scanBO - curNode.boxWidth="+curNode.boxWidth);		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.boxOverTitle=curNode.title;		curNode.title='';		curNode.hasbox=1;           // L'élement est doté d'une boite	}	else		curNode.hasbox=2;}function 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 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;}function applyStyles(currNode) {	if(boMainDiv == '')     boxOverInit();		boMainDiv.removeChild(boDialDiv);//	if(ab)//		boMainDiv.removeChild(boBodyDiv);//	if (ah)//		boMainDiv.removeChild(boHeaderDiv);	var ret					= createDialDiv(currNode);	boCurrentBoxElement.boCSSBDY ? boBodyDiv.className		= boCurrentBoxElement.boCSSBDY : defBOBodyStyle();//	boCurrentBoxElement.boCSSHDR ? boHeaderDiv.className	= boCurrentBoxElement.boCSSHDR : defBOHeaderStyle();	boCurrentBoxElement.boCSSHDR ? boHeaderDiv.innerHTML	= boCurrentBoxElement.boHDR : boHeaderDiv.innerHTML	= '';	boBodyDiv.innerHTML										= boCurrentBoxElement.boBDY;	boMainDiv.appendChild(boDialDiv);/*	ah=false;	ab=false;	if (boCurrentBoxElement.boHDR!='') {				boMainDiv.appendChild(boHeaderDiv);		ah=true;	}		if (boCurrentBoxElement.boBDY!=''){		boMainDiv.appendChild(boBodyDiv);		ab=true;	}	*/}// 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];}//-- Fonction qui déclenche l'élaboration de la boite et son affichage -------------------------------------function moveMouse(e) {   //boxMove=true;	e?evt=e:evt=event;	boCurrentElement=evt.srcElement?evt.srcElement:evt.target;	if(boCurrentElement.id)		// 20080110//		if(boPreviousElement != null)			if(boCurrentElement.id!=boPreviousElement.id)			{				boCurrentElement.hasbox = 0;			/*	if((isChild(boCurrentElement,boHeaderDiv))&&(isChild(boCurrentElement,boBodyDiv)))				{					boCurrentElement.removeChild(boBodyDiv);					boCurrentElement.removeChild(boHeaderDiv);				} */				if(isChild(boCurrentElement,boDialDiv))				{					boCurrentElement.removeChild(boDialDiv);				}			}	//addDebug("moveMouse - boCurrentElement.id="+boCurrentElement.id+" - boCurrentElement.nodeName="+boCurrentElement.nodeName);	if(boCurrentElement.nodeName=="OPTION")    // Cas du survol des lignes <option> d'un SELECT !!!	{	/*	if((isChild(boPreviousElement,boHeaderDiv))&&(isChild(boPreviousElement,boBodyDiv)))		{			boPreviousElement.removeChild(boBodyDiv);			boPreviousElement.removeChild(boHeaderDiv);		}*/		if(isChild(boCurrentElement,boDialDiv))		{			boCurrentElement.removeChild(boDialDiv);		}	}	else	{		if (!boCurrentElement.hasbox) {		   // Note we need to scan up DOM here, some elements like TR don't get triggered as srcElement		   iElem=boCurrentElement;		   while ((iElem.parentNode) && (!iElem.hasbox)) {		      scanBO(iElem);		      iElem=iElem.parentNode;		   }		}		if((boCurrentElement!=boPreviousElement)//		&&(!isChild(boCurrentElement,boHeaderDiv))&&(!isChild(boCurrentElement,boBodyDiv))){		&&(!isChild(boCurrentElement,boDialDiv))){		   if (!boCurrentElement.boxItem) {				iterElem=boCurrentElement;				while ((iterElem.hasbox==2)&&(iterElem.parentNode))						iterElem=iterElem.parentNode;				boCurrentElement.boxItem=iterElem;			}			iterElem					= boCurrentElement.boxItem;			if (boCurrentElement.boxItem&&(boCurrentElement.boxItem.hasbox==1))			{				//addDebug("moveMouse - boCurrentElement="+boCurrentElement+", boxItem hasbox = 1 !");				// 20080110				boPreviousBoxElement	= boCurrentBoxElement;				boCurrentBoxElement		= iterElem;				if (boCurrentBoxElement!=boPreviousBoxElement) {					//addDebug("moveMouse - boCurrentElement="+boCurrentElement+", application du style à boxItem !");					applyStyles(boCurrentElement);					if (!boCurrentBoxElement.requireclick)						if (boCurrentBoxElement.fade) {							if (ID!=null)								clearTimeout(ID);							(displayBox) ? ID = setTimeout("fadeIn("+boCurrentBoxElement.fadespeed+")",boCurrentBoxElement.delay)										 : ID = null;						}						else {							if (ID!=null)								clearTimeout(ID);							COL			= 1;							(displayBox) ? ID = setTimeout("boMainDiv.style.visibility='visible';ID=null;",boCurrentBoxElement.delay)										 : ID = null;						}					if (boCurrentBoxElement.IEbugfix) {hideSelects();}					fixposx				=!isNaN(boCurrentBoxElement.fixX)?Left(boCurrentBoxElement)+boCurrentBoxElement.fixX:boCurrentBoxElement.absX;					fixposy				=!isNaN(boCurrentBoxElement.fixY)?Top(boCurrentBoxElement)+boCurrentBoxElement.fixY:boCurrentBoxElement.absY;					lockX				= 0;					lockY				= 0;					boxMove				= true;					ox					= boCurrentBoxElement.offX?boCurrentBoxElement.offX:10;					oy					= boCurrentBoxElement.offY?boCurrentBoxElement.offY:10;				}			}			else			//if(!isChild(boCurrentElement,boHeaderDiv) && !isChild(boCurrentElement,boBodyDiv) && (boxMove))	{			if(!isChild(boCurrentElement,boDialDiv) && (boxMove))	{				// The conditional here fixes flickering between tables cells.				if ((!isChild(boCurrentBoxElement,boCurrentElement)) || (boCurrentElement.tagName!='TABLE')) {	   				boCurrentBoxElement=null;	   				fadeOut();	   				showSelects();				}			}		}		else	//	if(((isChild(boCurrentElement,boHeaderDiv) || isChild(boCurrentElement,boBodyDiv))&&(boxMove))) {		if((isChild(boCurrentElement,boDialDiv))&&(boxMove)) {			totalScrollLeft=0;			totalScrollTop=0;			iterElem=boCurrentElement;			while(iterElem) {				if(!isNaN(parseInt(iterElem.scrollTop)))					totalScrollTop+=parseInt(iterElem.scrollTop);				if(!isNaN(parseInt(iterElem.scrollLeft)))					totalScrollLeft+=parseInt(iterElem.scrollLeft);				iterElem=iterElem.parentNode;			}			if (boCurrentBoxElement!=null) {				boxLeft=Left(boCurrentBoxElement)-totalScrollLeft;				boxRight=parseInt(Left(boCurrentBoxElement)+boCurrentBoxElement.offsetWidth)-totalScrollLeft;				boxTop=Top(boCurrentBoxElement)-totalScrollTop;				boxBottom=parseInt(Top(boCurrentBoxElement)+boCurrentBoxElement.offsetHeight)-totalScrollTop;				doCheck();			}		}		if (boxMove&&boCurrentBoxElement) {			// 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 ((boCurrentBoxElement)&&(boCurrentBoxElement.windowLock)) {				mouseY < -oy?lockY=-mouseY-oy:lockY=0;				mouseX < -ox?lockX=-mouseX-ox:lockX=0;				mouseY > (SHW()[1]-boMainDiv.offsetHeight-oy)	? lockY = -mouseY+SHW()[1]-boMainDiv.offsetHeight-oy	: lockY=lockY;				mouseX > (SHW()[0]-boBodyDiv.offsetWidth-24-ox)	? lockX = -mouseX+SHW()[0]-boBodyDiv.offsetWidth-ox-24	: lockX=lockX;			}			boMainDiv.style.left=((fixposx)||(fixposx==0))?fixposx+"px":bodyScrollLet+mouseX+ox+lockX+"px";			boMainDiv.style.top=((fixposy)||(fixposy==0))?fixposy+"px":bodyScrollTop+mouseY+oy+lockY+"px";		}	}		boPreviousElement=boCurrentElement;}function doCheck() {		if (   (mouseX < boxLeft)    ||     (mouseX >boxRight)     || (mouseY < boxTop) || (mouseY > boxBottom)) {		if (!boCurrentBoxElement.requireclick)			fadeOut();		if (boCurrentBoxElement.IEbugfix) {showSelects();}		boCurrentBoxElement=null;	}}function pauseBox(e) {   e?evt=e:evt=event;	boxMove=false;	evt.cancelBubble=true;}function showHideBox(e) {	boMainDiv.style.visibility=(boMainDiv.style.visibility!='visible')?'visible':'hidden';}function hideBox(e) {	boMainDiv.style.visibility='hidden';}var COL=0;var stopfade=false;function fadeIn(fs) {		ID=null;		COL=0;		boMainDiv.style.visibility='visible';		fadeIn2(fs);}function fadeIn2(fs) {		COL=COL+fs;		COL=(COL>1)?1:COL;		boMainDiv.style.filter='alpha(opacity='+parseInt(100*COL)+')';		boMainDiv.style.opacity=COL;		if (COL<1)		 setTimeout("fadeIn2("+fs+")",20);		}function fadeOut() {	if(boMainDiv != '')		boMainDiv.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,boMainDiv))) {		fadeOut();		if (boCurrentBoxElement&&boCurrentBoxElement.IEbugfix) {showSelects();}		boxMove=true;		boCurrentBoxElement=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';   }}