/* VARONE: ouvre un div sur la page, simule un popup
Doit avoir accès au fct ajax (dans functions.js)
pUrl: l'url a charger via ajax
*/
var iNbScriptToLoadInPopup = 0 ;
var  xmlPopup ;
var divPopupContent;
var divPopupContainer=null;

function divPopup(pUrl)
{
	openDivPopup(pUrl, false, false);
}

function divPopupImage(pUrl)
{
	openDivPopup(pUrl, false, true);
}

function imitDivPopup(pDiv, pisIE)
{
	if(pisIE && navigator.appName.indexOf('Microsoft')!=-1)
		openDivPopup(pDiv, true);	
	else if(!pisIE && !(navigator.appName.indexOf('Microsoft')!=-1))
		openDivPopup(pDiv, true);	
}


function openDivPopup(pUrl, pbIsImitation, pbImage)
{
	/*Variables initialisation*/
	var marginTop = 50; //Espace au sommet
	var resizingTimer = 10; //Vitesse du rafraichissement lors de scroll et resize du browser
	var opacity = 40;  //Pourcent de l'opacité
	var opacityTimer = 1; //Vitesse de l'opacité
	var opacityStep = 20; //Incrementation de l'opacite toutes les opacityTimer milliseconde 
	var classBgDivPopup = "bgDivPopup"; //Class pour définir la couleur de fonds des popups
	var opaqBgColor = "#000065"; //Class pour définir la couleur de fonds des popups
	
	/*DIV CONTAINER*/
	divPopupContainer = document.createElement("div");
	document.body.appendChild(divPopupContainer);
	divPopupContainer.id = "popupContainer";
	divPopupContainer.style.position="absolute"; 
	divPopupContainer.style.top = divPopupContainer.style.left="0px";
	//divPopupContainer.style.width= document.body.offsetWidth + "px";Pas de largeur au container, prends la largeur nécessaire
	divPopupContainer.style.height="100%"; //Hauteur à 100% comme ca j'ai la hauteur de la fenetre visible avec le offsetHeight
	divPopupContainer.style.zIndex= 2000;
	
	
	/*DIV OPACITY*/
	var divPopupOpaq = document.createElement("div");
	divPopupContainer.appendChild(divPopupOpaq);
	divPopupOpaq.id = "popupOpaq";
	divPopupOpaq.style.position="relative"; 
	divPopupOpaq.style.backgroundColor=opaqBgColor;
	divPopupOpaq.style.width = document.body.offsetWidth + "px";
	if(document.body.offsetHeight>document.body.parentNode.clientHeight)
		divPopupOpaq.style.height = document.body.offsetHeight + "px";
	else
		divPopupOpaq.style.height = document.body.parentNode.clientHeight + "px";
		
	/*Fermeture sur le click de div opaq
	if(divPopupOpaq.attachEvent)
		divPopupOpaq.attachEvent("onclick", function(event){document.body.removeChild(divPopupContainer);return true;});
    else if(divPopupOpaq.addEventListener)
    	divPopupOpaq.addEventListener("click", function(event){document.body.removeChild(divPopupContainer);return true;}, true);
	*/
	
    var iOpacity = 0;
	window.setOpacity = function()
	{
		if(iOpacity<opacity)
		{
			iOpacity += opacityStep;
			divPopupOpaq.style.filter = "alpha(opacity=" + iOpacity + ")"; 
			divPopupOpaq.style.opacity = iOpacity/100;
			divPopupOpaq.style.MozOpacity = iOpacity/100;
			setTimeout("setOpacity()", opacityTimer);
		}
	}
	setOpacity();

	/* DIV CONTENT */ 
	//Si c'est une imitation, le param pUrl est un id de div, je le recupere et traite ses propriete
	if(pbIsImitation)
	{
		divPopupContent = document.getElementById(pUrl);
		divPopupContent = divPopupContent.parentNode.removeChild(document.getElementById(pUrl));
		divPopupContainer.appendChild(divPopupContent);
		divPopupContent.style.width = divPopupContent.offsetWidth + "px";
		divPopupContent.style.zIndex= divPopupContainer.style.zIndex+1; //1001;
		divPopupOpaq.style.height = parseInt(divPopupOpaq.style.height) +  divPopupContent.offsetHeight  + "px";
	}
	else //Sinon je creer le div
	{
		divPopupContent = document.createElement("div");
		divPopupContainer.appendChild(divPopupContent);
		divPopupContent.id = "popupContent";
		divPopupContent.innerHTML = getAjaxWait(); //Met l'image d'attente
	}
	
	//Propriete commune au divPopupContent pour imitation ou pas
	divPopupContent.style.position="absolute"; 
	divPopupContent.className = classBgDivPopup;
	
	//Initialistation de la position
	window.initPopupPosition = function()
	{
		divPopupContent.style.left= getPopupCenteredPercentage(divPopupOpaq.offsetWidth, divPopupContent.offsetWidth);
		
		if (pbImage)
			divPopupContent.style.top =  getPopupVerticalCenteredPx(document.body.parentNode.clientHeight, divPopupContent.offsetHeight);
		else
		{
			var posY = getPopupPosY() + marginTop; //marge de marginTop
			divPopupContent.style.top = posY + "px";
		}
		//Recalcul la hauteur du divPopupOpaq
		if((posY + divPopupContent.offsetHeight)>parseInt(divPopupOpaq.style.height))
			divPopupOpaq.style.height = posY + divPopupContent.offsetHeight + "px";
	};
	initPopupPosition();

	
	// je charge une image
	if (pbImage)
	{
		loadImage(pUrl) ;
	}
	else //Si c'est pas une imitation, je charge l'url en ajax
		if(!pbIsImitation)
		{
			//Appeler en ajax
			var xhr = getAjaxRequest();
			
			xhr.onreadystatechange=function()
			{
			   	if(xhr.readyState == 4)
					if(xhr.status == 200)
				    {
				    	//Charge le contenu et adapte les tailles
				    	//alert (" response : " + xhr.responseText) ;
				    	 xmlPopup = xhr.responseXML;
				    	//divPopupContent.innerHTML = xhr.responseText;
				    	
				    	
				    	//Ajout des scripts dans le header
				    	var nodes = xmlPopup.getElementsByTagName('script')[0];
				    	if(nodes.childNodes.length>0)
				    	{
				    		//recup du head et des script deja mis
				    		var head = document.getElementsByTagName("head")[0];
				    		var aCurScript = head.getElementsByTagName("script");
				    		var sCurScript = ""; //Creation d'une chaine avec les scripts deja present
				    		for(i=0;i<aCurScript.length;i++)
				    			if(aCurScript[i].src!="")
				    				sCurScript += aCurScript[i].src + ";";
				    			
				    		//Ajout des script dans le header
				    		var aAppendedScript = new Array();
				    		iNbScriptToLoadInPopup = 0 ;
				    		
				    		for(i=0; i<nodes.childNodes.length;i++)
				    		{
				    			if(nodes.childNodes[i].firstChild)
				    			{
					    			var newSrc = nodes.childNodes[i].firstChild.nodeValue;
					    			if(sCurScript.indexOf(newSrc)<0) //Si le script exist pas deja, je le creer
					    			{
					    				++iNbScriptToLoadInPopup ;
					    				aAppendedScript[aAppendedScript.length] = document.createElement("script");
						    			var idx = aAppendedScript.length-1;
						    			aAppendedScript[idx].type = "text/javascript";
						    			aAppendedScript[idx].src = newSrc;
										head.appendChild(aAppendedScript[idx]);
										//aAppendedScript[aAppendedScript.length] = newScript;
										sCurScript += newSrc + ";";
										//alert ("new script : " + newSrc ) ;
										
										aAppendedScript[idx].onload = function (){--iNbScriptToLoadInPopup;};
										aAppendedScript[idx].onreadystatechange = function (){if (this.readyState == "loaded" || this.readyState == "complete"){--iNbScriptToLoadInPopup;this.onreadystatechange=null;}};//Remet le onreadystatechange à null pour pas que ca passe de fois, si 1 fois loaded et 1 fois complete (mais pas toujour le cas) 
					    			}
				    			}
				    		}
				    	}
				    	
				    	Waitcomplete("iNbScriptToLoadInPopup==0", "loadScriptOnLoad()", 20)	;
			        }
			}
		
			xhr.open("get", pUrl, true);
			xhr.send(null);
		}
	
	//Resize de la popup
	window.resizePopup = function()
	{
		//Si plus de popup, je me casse
		if(divPopupContainer==null)
			return;
			
			
		//Resize le div opaq (en largeur uniquement), si la taille a changer
		var newWidth = document.body.offsetWidth + "px";
		if(newWidth != divPopupOpaq.style.width)
		{
			divPopupOpaq.style.width = newWidth;
			divPopupContent.style.left= getPopupCenteredPercentage(divPopupOpaq.offsetWidth, divPopupContent.offsetWidth);
		}
		divPopupOpaq.style.left= 0 + getPopupPosX() + "px";
			
		
		if (!pbImage)
		{
			var newPos = getPopupPosY() + marginTop;
			if(newPos<parseInt(divPopupContent.style.top) ||  (divPopupContent.offsetHeight+marginTop)<parseInt(divPopupContainer.offsetHeight))
				divPopupContent.style.top= newPos + "px";	
		}
		else
		{
			divPopupContent.style.top = getPopupVerticalCenteredPx(document.body.parentNode.clientHeight, divPopupContent.offsetHeight)  ;
		}
		
		//Recheck toutes les resizingTimer milliseconde		
		setTimeout("resizePopup()", resizingTimer);	
	};
	
	resizePopup();
}

//renvoi la position en hauteur du control selon la hauteur de la scroll
function getPopupPosY()
{
	var body = (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body;
	var ns = (navigator.appName.indexOf("Netscape") != -1) || window.opera;
	return ns ? pageYOffset : body.scrollTop;
}

//renvoi la position en largeur du control selon la largeur de la scroll
function getPopupPosX()
{
	var body = (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body;
	var ns = (navigator.appName.indexOf("Netscape") != -1) || window.opera;
	return ns ? pageXOffset : body.scrollLeft;
}

//Calcul le pourcent à mettre à la propriété left (left:20%) pour que le contenu soit centré
function getPopupCenteredPercentage(pOpaqWidth, pContentWidth)
{
	return parseInt((pOpaqWidth/2 - pContentWidth/2) * 100/pOpaqWidth)+"%";
	// return parseInt((pOpaqWidth/2 - pContentWidth/2)) + "px" ;
}

function getPopupVerticalCenteredPx(pWindowHeight, pImageHeight)
{
	return parseInt((pWindowHeight/2 - pImageHeight/2) + getPopupPosY()) +"px";
}


//Function pour fermer la popup
function divPopupClose()
{
	if(divPopupContainer!=null)
	{
		document.body.removeChild(divPopupContainer);
		divPopupContainer = null;	
	}
}

function Waitcomplete(condition, fct_after, ms)
{
	//alert (iNbScriptToLoadInPopup) ;
	if (eval(condition))
 	  	eval(fct_after) ;
  	else
    	setTimeout("Waitcomplete('" + condition + "', '" + fct_after + "', " + ms+ ")", ms);
}
		
function loadScriptOnLoad()
{
	//Contenu HTML
	nodes = xmlPopup.getElementsByTagName('html')[0]; 
	divPopupContent.innerHTML = nodes.firstChild.nodeValue;
	//alert("html : " +  divPopupContent.innerHTML) ;
	
	//Fixe la taille du divPopupContent une fois le html en place
	divPopupContent.style.width = divPopupContent.offsetWidth + "px";
	
	//Ajout du script a execute si il y en a un
	nodes = xmlPopup.getElementsByTagName('onload')[0]; 

	var loadScript = document.createElement("script");
	loadScript.type = "text/javascript";
	loadScript.text = nodes.firstChild.nodeValue;
	//alert (loadScript.text) ;
	
	divPopupContainer.appendChild(loadScript);

	//Initialise la position de la popup
	initPopupPosition();	
}

function loadImage(pUrl)
{
	//Contenu HTML
	oImage = new Image();
	
	//oImage.onreadystatechange = function(){alert(this.readyState);} 
	oImage.onload= function()
	{
		var size;
		var largeur = oImage.width ;
		var hauteur = oImage.height ;
		
		
		if (largeur > 900)
		{
			divPopupContent.style.width = 900 + "px";;
			divPopupContent.style.overflow = "auto" ;
		}
		else
			divPopupContent.style.width = largeur + "px";
			
		if (hauteur > 500)
		{
			divPopupContent.style.height = 500 + "px";;
			divPopupContent.style.overflow = "auto" ;
		}
		else
			divPopupContent.style.height = hauteur + "px";

		
		divPopupContent.style.border='1px solid #ffffff' ;
		divPopupContent.innerHTML = '<img style="cursor:pointer;" onclick="divPopupClose()" src="'+ pUrl + '" />';
		
		//Initialise la position de la popup
		initPopupPosition();	
		resizePopup();
	
	}
	
	oImage.src = pUrl ;
	
}