//***********************************************
// VLS 20/12/2004 - Gestion d'une fenêtre PopUp
// VLS 01/04/2011 - Ajout des fonctions findPosX et findPosY
// SDX 13/04/2011 - Modification de la taille de l'iframe pour ne pas voir la page derrière entre la bordure du div englobant et l'iframe
//***********************************************
var NavIE5=(document.getElementById && document.all)? true : false;
var bMoveOK = false;
var offsetX = 0;
var offsetY = 0;
var heightPage = 0;
var widthPage = 0;
var curPopup = null;
var tMesPopup = new Array();
var OffsetCtrl = 5;     // Offset par rapport au contrôle
var OffsetWin = 5;      // Offset par rapport à la fenêtre

//f: Fonctions servant à sauvegarder les anciennes fonctions
function OnMouseUpSave(){return}
function OnMouseMoveSave(){return}

// Association des évènements au document
if(document.onmouseup)
    OnMouseUpSave = document.onmouseup;
document.onmouseup = stopdep;
if(document.onmousemove)
    OnMouseMoveSave = document.onmousemove;
document.onmousemove = movepopup;

//f: Déplacement de la fenêtre en même temps que la souris
// A priori ne sert plus vraiment, mais on sais jamais...
function movepopup(evt)
{
	if(bMoveOK && (offsetX > 0) && (offsetY > 0) && (curPopup != null))
	{
        // Récupération de la position de la souris
		var x = ((NavIE5) ? window.event.clientX + document.body.scrollLeft : evt.pageX);
		var y = ((NavIE5) ? window.event.clientY + document.body.scrollTop : evt.pageY);

        // Déplacement de la fenêtre courante
		curPopup.style.left = x - offsetX + 'px';
		curPopup.style.top = y - offsetY + 'px';
	}

    // Appel éventuel de l'ancien gestionnaire d'évènement
    OnMouseMoveSave(evt);
}

//f: Déplacement de la fenêtre en même temps que la souris
//pe: offX : position de la souris dans la fenêtre en X
//pe: offY : position de la souris dans la fenêtre en Y
function movepopupfromfille(offX, offY)
{
	if(bMoveOK && (offsetX > 0) && (offsetY > 0) && (curPopup != null))
	{
        // Future position
        var leftPos = parseInt(curPopup.style.left, 10) + (offX - offsetX);
        var topPos = parseInt(curPopup.style.top, 10) + (offY - offsetY);

        // On vérifie que l'on ne sort pas de la fenêtre sinon on arrête
        if((topPos < OffsetWin) || (leftPos < OffsetWin) ||
           ((parseInt(curPopup.style.height, 10) + topPos) > (heightPage - OffsetWin)) ||
           ((parseInt(curPopup.style.width, 10) + leftPos) > (widthPage - OffsetWin)))
        {
            arretdep();
            return;
        }

        // Déplacement de la fenêtre courante
		curPopup.style.left = leftPos + 'px';
		curPopup.style.top = topPos + 'px';
	}
}

//f: Début du déplacement de la fenêtre
//pe: p_idPopup : Nom du div principal de la fenêtre
//pe: offX : position de la souris dans la fenêtre en X
//pe: offY : position de la souris dans la fenêtre en Y
function startdep(p_idPopup, offX, offY)
{
    // Stockage de la fenêtre courante pour savoir laquelle déplacer
	curPopup = document.getElementById(p_idPopup);

    // Sauvegarde de l'offset
    offsetX = offX;
    offsetY = offY;

    // Sauvegarde des dimensions de la page
    heightPage = ((NavIE5) ? document.body.scrollHeight : document.height);
    widthPage = ((NavIE5) ? document.body.scrollWidth : document.width);

	bMoveOK = true;
}

// Fin du déplacement de la fenêtre
function stopdep()
{
    // Réinitialisation des variables pour indiquer la fin du déplacement
    arretdep();

    // Appel éventuel de l'ancien gestionnaire d'évènement
    OnMouseUpSave();
}

// Fin du déplacement de la fenêtre
function arretdep()
{
	bMoveOK = false;
	offsetX = 0;
	offsetY = 0;
    curPopup = null;
}

//f: Affichage de la fenêtre
//pe: p_idPopup : Nom du div principal de la fenêtre
//pe: p_idCtrl : Nom du contrôle à partir duquel positionner la fenêtre
//pe: p_sAlign : Alignement par rapport au contrôle
// top, bottom, left ou right -> autour du contrôle
// none -> en haut à gauche du contrôle
function showpopup(p_idPopup, p_idCtrl, p_sAlign)
{
	var MaPopUp = document.getElementById(p_idPopup);

    // Détermination de la position du contrôle appelant
	Ctrl = document.getElementById(p_idCtrl);
	// VLS 01/04/2011 - Changement de technique pour récupérer la position du contrôle
	var	PosLeftCtrl = findPosX(Ctrl);
	var	PosTopCtrl = findPosY(Ctrl);
    var WidthCtrl = Ctrl.offsetWidth;
    var HeightCtrl = Ctrl.offsetHeight;

    // Récupération de la taille de la popup
    var iWidthPopup = tMesPopup[p_idPopup]['WidthPopup'];
    var iHeightPopup = tMesPopup[p_idPopup]['HeightPopup'];

    MaPopUp.style.width = iWidthPopup + 'px';
    MaPopUp.style.height = iHeightPopup + 'px';

    // Dimensionnement de l'IFrame
    var sNomVarIFrame = tMesPopup[p_idPopup]['IFrameName'];
	IFrame = document.getElementById(sNomVarIFrame);
    if(IFrame)
    {
        IFrame.style.height = iHeightPopup + 'px';
        IFrame.style.width = iWidthPopup + 'px';
    }

    // Positionnement de la popup
    var v_isTop = (p_sAlign.toLowerCase().indexOf('top')==-1?false:true);
    var v_isBottom = (p_sAlign.toLowerCase().indexOf('bottom')==-1?false:true);
    var v_isLeft = (p_sAlign.toLowerCase().indexOf('left')==-1?false:true);
    var v_isRight = (p_sAlign.toLowerCase().indexOf('right')==-1?false:true);    
    
    if(v_isTop) {
        MaPopUp.style.top = PosTopCtrl - iHeightPopup - OffsetCtrl + 'px';
    }
    else if(v_isBottom) {
        MaPopUp.style.top = PosTopCtrl + HeightCtrl + OffsetCtrl + 'px';
    }
    else {
        MaPopUp.style.top = PosTopCtrl + 'px';
    }

    if(v_isLeft) {
        MaPopUp.style.left = PosLeftCtrl - iWidthPopup - OffsetCtrl + 'px';
    }
    else if(v_isRight) {
        MaPopUp.style.left = PosLeftCtrl + WidthCtrl + OffsetCtrl + 'px';
    }
    else {
        MaPopUp.style.left = PosLeftCtrl + 'px';
    }
    
//    if((p_sAlign == 'top') || (p_sAlign == 'bottom'))
//    {
//        MaPopUp.style.left = ((PosLeftCtrl + (WidthCtrl / 2)) - (iWidthPopup / 2)) + 'px';
//        if(p_sAlign == 'top')
//            MaPopUp.style.top = PosTopCtrl - iHeightPopup - OffsetCtrl + 'px';
//        else
//            MaPopUp.style.top = PosTopCtrl + HeightCtrl + OffsetCtrl + 'px';
//    }
//    else if((p_sAlign == 'left') || (p_sAlign == 'right'))
//    {
//        MaPopUp.style.top = ((PosTopCtrl + (HeightCtrl / 2)) - (iHeightPopup / 2)) + 'px';
//        if(p_sAlign == 'left')
//            MaPopUp.style.left = PosLeftCtrl - iWidthPopup - OffsetCtrl + 'px';
//        else
//            MaPopUp.style.left = PosLeftCtrl + WidthCtrl + OffsetCtrl + 'px';
//    }
//    else
//    {
//        MaPopUp.style.left = PosLeftCtrl + 'px';
//        MaPopUp.style.top = PosTopCtrl + 'px';
//    }

    // Affichage de la Popup
    MaPopUp.style.visibility = 'visible';
    MaPopUp.style.display = 'block';
}

//f: Détermination de la position horizontale d'un contrôle dans la page
function findPosX(obj)
{
    var curleft = 0;
    if (document.getElementById || document.all)
    {
         while (obj.offsetParent)
         {
              curleft += obj.offsetLeft
              obj = obj.offsetParent;
         }
    }
    else if (document.layers)
         curleft += obj.x;
    return curleft;
}

//f: Détermination de la position verticale d'un contrôle dans la page
function findPosY(obj)
{
    var curtop = 0;
    if (document.getElementById || document.all)
    {
         while (obj.offsetParent)
         {
              curtop += obj.offsetTop
              obj = obj.offsetParent;
         }
    }
    else if (document.layers)
         curtop += obj.y;
    return curtop;
}

//f: Fermeture de la fenêtre
//pe: p_idPopup : Nom du div principal de la fenêtre
function hidepopup(p_idPopup)
{
   // VLS 14/11/2006 - Pb avec IE7 qui désactive ce qui est sous la Pop-Up
   // En plus du visibility il faut positionner le display...
	var MaPopUp = document.getElementById(p_idPopup);
   MaPopUp.style.display = 'none';
   MaPopUp.style.visibility = 'hidden';
}

