/****************************************************************************************************************
* Script de gestion dynamique de l'ihm popup
*
* Auteur : Sébastien Roux
* Date   : 28 nov. 2007
*
****************************************************************************************************************/


//***************************************************************************************************************
// Variables générales et inclusions

var IsIE, IsGecko;

var lstPopup=new Array();

var openedPopup=new Array();
var idPopupMov=false;
var mouseX=0;
var mouseY=0;
var posCX=0;
var posCY=0;
var docW=0;
var docH=0;

var tFLoad;


//***************************************************************************************************************
// Initialisations

HTMLAgent=navigator.userAgent.toLowerCase();
IsIE     =((HTMLAgent.indexOf("msie")!=-1) && (HTMLAgent.indexOf("opera")==-1));
IsGecko  =(navigator.product=="Gecko");

if (IsIE) {
	attachEvent ("onresize", recalculPosOpened);
	attachEvent ("onscroll", recalculPosOpened);

	document.attachEvent ("onmousemove", saveMousePos);
} else {
	addEventListener ("resize", recalculPosOpened, true);
	addEventListener ("scroll", recalculPosOpened, true);

	addEventListener ("mousemove", saveMousePos, true);
}


//***************************************************************************************************************
// Fonctions publics

//---------------------------------------------------------------------------------------------------------------
// Ouverture du popup, l'IFrame nommé IFId prendra le focus

function OpenPopup (id) {
	calculPos (id, true);

	document.getElementById(id).style.zIndex="100";
	document.getElementById(id).style.visibility="visible";

	document.getElementById("IF"+id).contentWindow.focus();

	openedPopup[id]=true;
}

//---------------------------------------------------------------------------------------------------------------
// Fermeture du popup

function ClosePopup (id) {
	document.getElementById(id).style.visibility="hidden";
	document.getElementById(id).style.zIndex="0";

	openedPopup[id]=false;
}

//---------------------------------------------------------------------------------------------------------------
// Changement d'état du popup (Ouvert/fermé)

function SwitchPopup (id) {
	if (document.getElementById(id).style.visibility=="hidden")
		OpenPopup (id);
	else
		ClosePopup (id);
}

//---------------------------------------------------------------------------------------------------------------
// Changement de l'url du pop

function ChangePopupUrl (id, newUrl) {
	if (!document.getElementById("IF"+id)) return false;

	document.getElementById("IF"+id).src=newUrl;
	document.getElementById("IF"+id).contentWindow.focus();
}


//***************************************************************************************************************
// Fonctions internes de fonctionnement

//---------------------------------------------------------------------------------------------------------------
// Enregistrement de la position de la souris

function saveMousePos (evenement) {
	if (IsIE) {
		mouseX=window.event.clientX;
		mouseY=window.event.clientY;
	} else {
		mouseX=evenement.pageX;
		mouseY=evenement.pageY;
	}
}

//---------------------------------------------------------------------------------------------------------------
// Positionnement du popup en fonction des bordures

function setPosPopup (id) {
	var PopupDiv=document.getElementById(id);

	if ((lstPopup[id]["x"] + PopupDiv.offsetWidth) > (docW + document.body.scrollLeft - 21))
		lstPopup[id]["x"]=(docW + document.body.scrollLeft) - PopupDiv.offsetWidth - 21; // 21=épaisseur de l'ascenseur
	if (lstPopup[id]["x"]<document.body.scrollLeft)
		lstPopup[id]["x"]=document.body.scrollLeft;

	if ((lstPopup[id]["y"] + PopupDiv.offsetHeight) > (docH + document.body.scrollTop - 21))
		lstPopup[id]["y"]=(docH + document.body.scrollTop) - PopupDiv.offsetHeight - 21; // 21=épaisseur de l'ascenseur
	if (lstPopup[id]["y"]<document.body.scrollTop)
		lstPopup[id]["y"]=document.body.scrollTop;

	PopupDiv.style.left=lstPopup[id]["x"];
	PopupDiv.style.top=lstPopup[id]["y"];
}

//---------------------------------------------------------------------------------------------------------------
// Calcul du positionnement du popup

function calculPos (id, isReset) {
	var PopupDiv=document.getElementById(id);

	if (IsIE) {
		docW=document.body.offsetWidth;
		docH=document.body.offsetHeight;
	} else {
		docW=innerWidth;
		docH=innerHeight;
	}

	if (lstPopup[id]["onCursor"]) {

		if (lstPopup[id]["x"]==null || isReset) {
			switch (lstPopup[id]["h"]) {
				case 'left' :
					lstPopup[id]["x"]=mouseX-PopupDiv.offsetWidth;
					break;
				case 'right' :
					lstPopup[id]["x"]=mouseX;
					break;
				default :
					lstPopup[id]["x"]=mouseX-(PopupDiv.offsetWidth/2);
			}
		}

		if (lstPopup[id]["y"]==null || isReset) {
			switch (lstPopup[id]["v"]) {
				case 'top' :
					lstPopup[id]["y"]=mouseY-PopupDiv.offsetHeight;
					break;
				case 'bottom' :
					lstPopup[id]["y"]=mouseY;
					break;
				default :
					lstPopup[id]["y"]=mouseY-(PopupDiv.offsetHeight/2);
			}
		}

	} else {

		if (lstPopup[id]["x"]==null || isReset) {
			switch (lstPopup[id]["h"]) {
				case 'left' :
					lstPopup[id]["x"]=0 + document.body.scrollLeft;
					break;
				case 'right' :
					lstPopup[id]["x"]=docW-PopupDiv.offsetWidth + document.body.scrollLeft - 21; // 21=épaisseur de l'ascenseur
					break;
				default :
					lstPopup[id]["x"]=(docW/2)-(PopupDiv.offsetWidth/2) + document.body.scrollLeft;
			}
		}

		if (lstPopup[id]["y"]==null || isReset) {
			switch (lstPopup[id]["v"]) {
				case 'top' :
					lstPopup[id]["y"]=0 + document.body.scrollTop;
					break;
				case 'bottom' :
					lstPopup[id]["y"]=docHPopupDiv.offsetHeight + document.body.scrollTop - 21; // 21=épaisseur de l'ascenseur
					break;
				default :
					lstPopup[id]["y"]=(docH/2)-(PopupDiv.offsetHeight/2) + document.body.scrollTop;
			}
		}

	}

	setPosPopup (id);
}

//---------------------------------------------------------------------------------------------------------------
// Recalcul des positionnement de tous les popups ouverts

function recalculPosOpened () {
	for (var idDiv in openedPopup)
		if (openedPopup[idDiv])
			calculPos (idDiv, false);
}

//---------------------------------------------------------------------------------------------------------------
// Démarrage d'un déplacement de popup

function startMovePopup (id) {
	var PopupDiv=document.getElementById(id);

	idPopupMov=id;

	posCX=mouseX-PopupDiv.offsetLeft;
	posCY=mouseY-PopupDiv.offsetTop;

	if (IsIE) {
		document.attachEvent ("onmousemove", movePopup);
		document.attachEvent ("onmouseup", endMovePopup);
	} else {
		addEventListener ("mousemove", movePopup, true);
		addEventListener ("mouseup", endMovePopup, true);
	}
}

//---------------------------------------------------------------------------------------------------------------
// Déplacement de popup

function movePopup (evenement) {
	if (!idPopupMov) return null;

	var PopupDiv=document.getElementById(idPopupMov);

	lstPopup[idPopupMov]["x"]=mouseX-posCX;
	lstPopup[idPopupMov]["y"]=mouseY-posCY;

	setPosPopup (idPopupMov);
}

//---------------------------------------------------------------------------------------------------------------
// Fin d'un déplacement de popup

function endMovePopup (evenement) {
	movePopup (evenement);

	idPopupMov=false;
}