
/*************************************************************
Fonctions pour récupérer les coordonnées de la souris en
variables globales + Evenements
*************************************************************/
domok = document.getElementById;

//position de la souris
var xMouse ,yMouse;
var overflowx, overflowy;
var elem,previouselem,previouselemstylebg,previouspopup, lastPPx, lastPPy, lastPPcoord = false;

var isNS = (navigator.appName.substring(0,3) == "Net");

function AffichePopupBasDroitEcran(e)
{
    var taillePopup = e.srcElement != null ? e.srcElement.offsetLeft : e.target.offsetLeft;   
    taillePopup = taillePopup/2;
        
	xMouse = isNS ? e.pageX : event.x+document.documentElement.scrollLeft;	
	yMouse = isNS ? e.pageY : event.y+document.documentElement.scrollTop;	
	
	if (!isNS)
	{
	    if (xMouse + taillePopup > window.screen.width)
	    {
	        xMouse = xMouse - taillePopup;
	    }	
    	
	    if (yMouse + taillePopup > window.screen.height)
	    {
	        yMouse = yMouse - taillePopup;
	    }
	}	
}

function get_mouse(e)
{	     
    xMouse = 0 ;
    yMouse = 0 ;

    if (isNS && e)
    {
        xMouse = e.pageX ;
        yMouse = e.pageY ;
    }
    else if (document.body && document.documentElement)
    {
     xMouse =  event.x+document.body.scrollLeft + document.documentElement.scrollLeft;	
     yMouse =  event.y+document.body.scrollTop + document.documentElement.scrollTop ; 
    }
}
 
if (domok)
{ 
	if(isNS)
	{
		document.captureEvents(Event.MOUSEDOWN);
		document.captureEvents(Event.MOUSEUP);
		document.captureEvents(Event.MOUSEMOVE);
	}
	document.onmousedown = get_mouse;
}


if (document.addEventListener)
{
    document.addEventListener('click',_PPcloseDocument, true);
}
else
{
    document.attachEvent('onclick',_PPcloseDocument);
}
    
    /*if(navigator.appName.substring(0,3) == "Net")
	document.captureEvents(Event.MOUSEMOVE);
document.onmousemove = get_mouse;*/

// Cette fonction permet de fermer la dernière popup ouverte en cliquant sur la page
// ATTENTION : un clic sur un lien ou une dropdownlist ne doit pas fermer la popup
function _PPcloseDocument(e)
{   
   /* SCO5-5731 : Test ajouté (e.value == null) suite à la fusion du CDTV2. Si impact enlevé le test et déclaré les fichiers JS du cahier de texte
                     dans les pages du cahier de texte et non dans la master page default.
    */
    
   if(e.value == null)
   {
        return;
   }
   
   if (window.Event)  
        elem = e.target.tagName;
   else  
        elem = window.event.srcElement.tagName;
        
   if (dontClose)
   {
        dontClose=false;
        return;
   }
   
   if (elem == "SELECT" || elem == "OPTION" || elem == "INPUT") return; 
    
   if (previouspopup != null)
   {
      var objet = document.getElementById(previouspopup);
                  
      if (! sourisOnObjet(objet))
          _PPcloseLast() ;  
    }
}

/*************************************************************
Etat du curseur
*************************************************************/

function changeCurseurWaiting()
{
    // Suite a la decouverte d'un conflit entre la FreeTextBox et le controle SelectionUtilisateurs, 
    // il s'avere qu'il faut desactiver cette fonction, qui fait freezer explorer.
    // De plus, cette fonction permet de generer aleatoirement un postback sur le controle SelectionGroupesClasses
    
    // window.document.body.style.cursor = "wait";
}

function changeCurseurDefault()
{
    // Suite a la decouverte d'un conflit entre la FreeTextBox et le controle SelectionUtilisateurs, 
    // il s'avere qu'il faut desactiver cette fonction, qui fait freezer explorer.
    // De plus, cette fonction permet de generer aleatoirement un postback sur le controle SelectionGroupesClasses
    
    // window.document.body.style.cursor = "default";
}

/*************************************************************
Fonctions de drag & drop
*************************************************************/

var diffX, diffY;
var dragging;
var dragElem;

function _PPdragStart(e)
{
	var fobj = isNS ? e.target : event.srcElement;
	if (fobj.tagName == 'INPUT' || fobj.tagName == 'SELECT' || fobj.tagName == 'OPTION') return;
	
	xMouse = isNS ? e.pageX : event.x+document.body.scrollLeft;
	yMouse = isNS ? e.pageY : event.y+document.body.scrollTop;
	
	dragging = true;
	    
	document.onmouseup = new Function("dragging=false");
	document.onmousemove=_PPdrag;
	   
	window.lastX = xMouse;
	window.lastY = yMouse;
}

function _PPdrag(e)
{
    var lObj = document.getElementById(dragElem);
    var leStyle = lObj.style;
     
	if(!isNS)
	{
		var bouton =  event.button;
		if (!dragging || bouton == 0) return;
	}
	else
	{
		if (!dragging) return;
	}

	xMouse = isNS ? e.pageX : event.x+document.body.scrollLeft;
	yMouse = isNS ? e.pageY : event.y+document.body.scrollTop;
	
	diffX = xMouse - window.lastX;
	diffY = yMouse - window.lastY;
	
	window.lastX = xMouse;
	window.lastY = yMouse;

	largeur = lObj.offsetWidth;
    
	goodLeft = lObj.offsetLeft;
	goodTop = lObj.offsetTop;

	leStyle.left = checkLeft(goodLeft + diffX,largeur) +"px";
	leStyle.top = goodTop + diffY +"px";	
			
    iframe.style.left=leStyle.left;
    iframe.style.top=leStyle.top;

    iframe.style.width = lObj.offsetWidth;
    iframe.style.height= lObj.offsetHeight;
	
	return false;
}

/*************************************************************
Fonctions spatiales
*************************************************************/

function sourisOnObjet(objet)
{
 if ( (xMouse <= getLeft(objet)) || (xMouse >= (getLeft(objet) + getWidth(objet)) ) || (yMouse <= getTop(objet)) || (yMouse >= (getTop(objet) + getHeight(objet))) )
    return false ;
     
 return true ;  
}

function checkLeft(leftTmp, largeur)
{
	if(leftTmp<0)
		leftTmp=0;
	else if (leftTmp + largeur + 15 > document.body.clientWidth) 
	{
		leftTmp = document.body.clientWidth - largeur - 15;
	}
	
	return leftTmp;
}


//Fonction permettant de connaître la position d'un objet
//par rapport au bord gauche de la page.
//Cet objet peut être à l'intérieur d'un autre objet.
function getLeft(MyObject)
{
    if (MyObject.offsetParent)
        return (MyObject.offsetLeft + getLeft(MyObject.offsetParent));
    else
        return (MyObject.offsetLeft);
}

    
//Fonction permettant de connaître la position d'un objet
//par rapport au bord haut de la page.
//Cet objet peut être à l'intérieur d'un autre objet.
function getTop(MyObject)
{
    if (MyObject.offsetParent)
        return (MyObject.offsetTop + getTop(MyObject.offsetParent));
    else
        return (MyObject.offsetTop);
}
  
function getWidth(MyObject)   
{
        return (MyObject.offsetWidth);
}

function getHeight(MyObject)   
{
        return (MyObject.offsetHeight);
}

/*************************************************************
Fonctions de fermeture
*************************************************************/

function _PPcloseLast()
{ 
    clearTimeoutDroits() ;
	_PPaffiche(previouspopup,previouselem);
}

function _PPcloseLast_Ajax()
{
    _PPaffiche_Ajax(previouspopup,previouselem, null );
}

/*************************************************************
Fonctions de remplacement
*************************************************************/

function _PPreplace(_PPpopupID)
{
	var lastopened = previouselem;
	_PPcloseLast();
	
	lastPPcoord=true;
	_PPaffiche(_PPpopupID,lastopened);
}

/*************************************************************
Fonctions d'affichage
*************************************************************/

var dontClose = false;
var iframe = null;

function _PPaffiche(_PPpopupID,_PPopenerID)
{
    dontClose = true;
    _PPaffiche2(_PPpopupID,_PPopenerID, false) ;

    if (_PPpopupID) 
        initCoordonnees(_PPpopupID,20,20) ;
}

function _PPafficheModal(_PPpopupID,_PPopenerID)
{
    dontClose = true;
    _PPaffiche2(_PPpopupID,_PPopenerID, true) ;

    if (_PPpopupID) 
        initCoordonnees(_PPpopupID,20,20) ;
}


function _PPafficheOri(_PPpopupID,_PPopenerID)
{
    dontClose = true;
    _PPaffiche2(_PPpopupID,_PPopenerID, false) ;

    if (_PPpopupID) 
        initCoordonnees(_PPpopupID,-50,60) ;
}

function _PPaffiche_Ajax_Atlas_Extender(_PPpopupID,_PPopenerID, divToAlign, inModalPopup)
{
     dontClose = false;
    _PPaffiche2(_PPpopupID,_PPopenerID, inModalPopup) ;     
    initCoordonneesAjax(_PPpopupID,_PPopenerID, divToAlign, inModalPopup ) ; 
}

function _PPaffiche_Ajax(_PPpopupID,_PPopenerID, divToAlign) 
{  
   _PPaffiche_Ajax_Atlas_Extender(_PPpopupID,_PPopenerID, divToAlign, false)
}

function _PPaffiche2(_PPpopupID,_PPopenerID, inModalPopup )
{   
    
    /***** On ferme le calendrier s'il est ouvert *******/
    if (self.scwHideOtherPopup) scwHideOtherPopup() ;
        
    /* recuperation de l'iframe pour corriger le bug d'IE avec les DDL*/

    if (iframe == null)
        iframe=document.getElementById('ieframe');

	if (previouselem != null)
		changeBgColor(previouselem, previouselemstylebg);
	
	if (previouspopup != null)
	{
	    iframe.style.display = "none";
		document.getElementById(previouspopup).style.display = "none";
	}
	
	if(_PPopenerID == previouselem)
	{
		previouselem = null;
		previouspopup= null;
		return;
	}
	
	if (! inModalPopup)
        document.getElementById(_PPpopupID).onmousedown = _PPdragStart;
        
    dragElem=_PPpopupID;
    iframe.style.display = "block";
    document.getElementById(_PPpopupID).style.display = "block";

    if ( document.getElementById(_PPopenerID) != null)
	{
	    previouselemstylebg = document.getElementById(_PPopenerID).style.backgroundColor;
	    changeBgColor(_PPopenerID, "#dddddd");
	}
	
	previouselem = _PPopenerID;
	previouspopup = _PPpopupID;
}

/*************************************************************
Fonctions d'initialisation de coordonnées
*************************************************************/

function initCoordonnees(_PPpopupID,overFlowX,overFlowY) 
{
    var lObj = document.getElementById(_PPpopupID);
    var leStyle = lObj.style;
    
    largeur = lObj.offsetWidth;
    
    lObj.Visible = true;
	
	if (lastPPcoord)
	{
		xMouse = lastPPx
		yMouse = lastPPy
		lastPPcoord = false;
	}
	else
	{     
		lastPPx = xMouse ;
		lastPPy = yMouse ;
   	}
   	
	if (xMouse)
	{
	    leStyle.left= checkLeft(xMouse - largeur/2, largeur) + overFlowX+"px";
	    leStyle.top = yMouse                        + overFlowY+ "px"            ;

        iframe.style.left=leStyle.left;
        iframe.style.top=leStyle.top;
        
        iframe.style.width = lObj.offsetWidth;
        iframe.style.height = lObj.offsetHeight;
    }
}

function initCoordonneesAjax(_PPpopupID,_PPopenerID, divToAlign, inModalPopup ) 
{
    var lObj = document.getElementById(_PPpopupID);
    var leStyle = lObj.style;

    largeur = lObj.offsetWidth;
		
	if (lastPPcoord)
	{
		xMouse = lastPPx
		yMouse = lastPPy
		lastPPcoord = false;
	}
	else
	{     
		lastPPx = xMouse ;
		lastPPy = yMouse ;
   	}
	
	if (! inModalPopup && divToAlign != null) // Coordonnées d'affichage normal sur une page
	{
	    if (document.documentElement.dir != "rtl")
	    {
	        normal = getLeft(document.getElementById(divToAlign)) +  getWidth(document.getElementById(divToAlign)) + 4 ;
	    }
	    else
	    {
	        normal = getLeft(document.getElementById(divToAlign)) -  getWidth(document.getElementById(_PPpopupID)) - 4 ;
	    }
	    if ((normal + lObj.offsetWidth) > (document.body.clientWidth -15) ) // cas particulier où la palette depasse de la fenetre du navigateur vers la droite...
	    {
	        leStyle.left = document.body.clientWidth - lObj.offsetWidth - 15 + "px";
	    }
	    else // cas normal où la palette NE depasse PAS de la fenetre du navigateur vers la droite...
	    {
	        leStyle.left = normal + "px";
	    }
	    leStyle.top = getTop (document.getElementById(divToAlign)) + "px" ;
    	
	    iframe.style.left=leStyle.left;
        iframe.style.top=leStyle.top;
        
        iframe.style.width = lObj.offsetWidth;
        iframe.style.height = lObj.offsetHeight;
    }
    else // Coordonnées d'affichage du controle Atlas se trouvant dans une ModalPopup
     {
     }
}  

/*************************************************************
Fonctions utiles
*************************************************************/

function trim(str)
{
    return str.replace(/^\s*|\s*$/g,"");
}

function changeBgColor(elemID, bg)
{
	while(document.getElementById(elemID))
	{
		document.getElementById(elemID).style.backgroundColor=bg;
		document.getElementById(elemID).id += "|";
	}
	
	while(document.getElementById(elemID+"|"))
	{
		document.getElementById(elemID+"|").id = elemID;
	}
}

function changeinnerHTML(elemID, html)
{
	while(document.getElementById(elemID))
	{
		document.getElementById(elemID).innerHTML=html;
		document.getElementById(elemID).id += "|";
	}
	
	while(document.getElementById(elemID+"|"))
	{
		document.getElementById(elemID+"|").id = elemID;
	}
}

// ON ATTACHE DES EVENEMENTS AU DOCUMENT 

if (document.layers) 
document.captureEvents(Event.MOUSEMOVE); 
if (document.layers || document.all) 
document.onmousemove = get_mouse; 
if (document.addEventListener) 
document.addEventListener('mousemove', get_mouse, true); 
