/************************************ VARIABLES GLOBALES ***********************************************/

// Variable utilisée pour transmettre l'URL d'où vient l'internaute lors d'une demande par formulaire
var currentUrl;

// Variables utilisées pour le positionnement de la DIV d'erreur
var currTop;
var currLeft;
var currWidth;
var currHeight;

// Hauteur et largeur de la DIV
var errorWidth = 400;
var errorHeight = 200;

// Détection du navigateur client
var detect = navigator.userAgent.toLowerCase();
var OS,browser,version,thestring;

if (checkIt('konqueror'))
{
	browser = "Konqueror";
	OS = "Linux";
}
else if (checkIt('safari')) browser = "Safari";
else if (checkIt('omniweb')) browser = "OmniWeb";
else if (checkIt('opera')) browser = "Opera";
else if (checkIt('webtv')) browser = "WebTV";
else if (checkIt('icab')) browser = "iCab";
else if (checkIt('msie')) browser = "Internet Explorer";
else if (!checkIt('compatible'))
{
	browser = "Netscape Navigator";
	version = detect.charAt(8);
}
else browser = "An unknown browser";

if (!version) version = detect.charAt(place + thestring.length);

if (!OS)
{
	if (checkIt('linux')) OS = "Linux";
	else if (checkIt('x11')) OS = "Unix";
	else if (checkIt('mac')) OS = "Mac";
	else if (checkIt('win')) OS = "Windows";
	else OS = "an unknown operating system";
}

/************************************ FONCTIONS COMMUNES ***********************************************/
/**
 * Equivalent de trim en javascript
 */
String.prototype.trim = function() 
{
    a = this.replace(/^\s+/, '');
    return a.replace(/\s+$/, '');
};

/**
 * Fonction ajoutant dynamiquement un lien vers une feuille de style CSS spécifique à IE 7
 * TODO : décommenter le contrôle de version pour IE7
 */
function ieCSS(cssPath) 
{
	if (browser == "Internet Explorer" && version == 7)
	{
		document.write('<link rel="stylesheet" type="text/css" href="'+cssPath+'/ie7.css" \/>');
	}
}

/**
 * Vérification du navigateur
 */
function checkIt(string)
{
	place = detect.indexOf(string) + 1;
	thestring = string;
	return place;
}

/**
 * Renvoie la largeur de la fenêtre courante (body ou popup)
 */
function windowWidth()
{
    if (window.innerWidth)
        return window.innerWidth;
    else if (document.body && document.body.offsetWidth)
        return document.body.offsetWidth;
    else
        return 0;
}

/**
 * Renvoie la heuteur de la fenêtre courante (body ou popup)
 */
function windowHeight()
{
    if (window.innerHeight)
        return window.innerHeight  ;
    else if (document.body && document.body.offsetHeight)
        return document.body.offsetHeight;
    else
        return 0;
}

/**
 * Masque un élément dont l'ID est donné en paramètre
 */
function hideDiv(divId)
{
    var divObj = document.getElementById(divId);
    if (divObj == undefined)
        return;
    divObj.style.display = "none";
}

/**
 * Affiche un élément dont l'ID est donné en paramètre
 */
function showDiv(divId)
{
    var divObj = document.getElementById(divId);
    if (divObj == undefined)
        return;
    divObj.style.display = "block";
}

/**
 * Affiche ou masque un élément dont l'ID est donné en paramètre selon son état
 */
function showHideDiv(linkObj,divId,shownClass,hiddenClass)
{
    var divObj = document.getElementById(divId);
    if (divObj == undefined)
    {
        return;
    }
	if (shownClass == undefined)
	{
		shownClass = 'moreDetailShown';
	}
	if (hiddenClass == undefined)
	{
		hiddenClass = 'moreDetail';
	}
    if (divObj.style.display == "none")
    {
        divObj.style.display = "block";
		linkObj.className = shownClass;
    }
    else
    {
        divObj.style.display = "none";
		linkObj.className = hiddenClass;
    }
}

/**
 * Renvoie la position en Y d'un élément sur l'écran
 */
function getOffsetTop(elm) 
{
	var mOffsetTop = elm.offsetTop;
	var mOffsetParent = elm.offsetParent;
	var parents_up = 20;
	
	while(parents_up > 0 && mOffsetParent.offsetParent) 
	{
		mOffsetTop += mOffsetParent.offsetTop;
		mOffsetParent = mOffsetParent.offsetParent;
		parents_up--;
	}
	
	return mOffsetTop;
}

/**
 * Renvoie la position en X d'un élément sur l'écran
 */
function getOffsetLeft(elm) 
{
	var mOffsetLeft = elm.offsetLeft;
	var mOffsetParent = elm.offsetParent;
	var parents_up = 20;
	
	while(parents_up > 0 && mOffsetParent.offsetParent) 
	{
		mOffsetLeft += mOffsetParent.offsetLeft;
		mOffsetParent = mOffsetParent.offsetParent;
		parents_up--;
	}
	
	return mOffsetLeft;
}

/**
 * Affiche ou masque
 */
function showHideSelects(vis,elts)
{
    if (elts == undefined)
        elts = document.body.childNodes;
    for (var i=0; i < elts.length; i++)
    {
        if (elts[i].nodeName == "SELECT")
        {
            var top = getOffsetTop(elts[i]);
            var left = getOffsetLeft(elts[i]);
            //alert("Top = "+currTop+" ; Left = "+currLeft + "\n MyTop = "+top +" ; MyLeft = "+left +" \nMyLeft - MyWidth = "+(left+elts[i].offsetWidth)+" ; MyTop + MyHeight = "+(top+elts[i].offsetHeight));
            if (vis == "visible" || 
                (top + elts[i].offsetHeight >= currTop && 
                top <= currTop + errorHeight &&
                left + elts[i].offsetWidth > currLeft && 
                left <= currLeft + errorWidth))
            {
                elts[i].style.visibility = vis;
            }
        }
        var subElts = elts[i].childNodes;
        if (subElts != undefined && subElts.length > 0)
        {
            showHideSelects(vis,subElts);
        }
    }
}

/**
 * Positionne une div d'erreur au centre de l'écran les variables globales contenant la hauteur / largeur / X / Y de la 
 * div en question devant préalablement avoir été initialisées via setFloatingDiv
 */
function setFloatingDiv(divId)
{
    var divObj = document.getElementById(divId);
    if (divId == undefined)
        return;
    var totalWidth = windowWidth();
    var totalHeight = windowHeight();
    currLeft = Math.max(0,Math.floor((totalWidth - errorWidth)/2));
    currTop = Math.max(0,Math.floor((totalHeight - errorHeight)/2));
    divObj.style.position = "absolute";
    divObj.style.top = currTop + "px";
    divObj.style.left = currLeft + "px";
    currLeft = getOffsetLeft(divObj);
    currTop = getOffsetTop(divObj);
    currWidth = divObj.offsetWidth;
    currHeight = divObj.offsetHeight;
}

/**
 * Fonction d'ouverture de fenêtre avec options
 */
function winOpen(url,options,myWidth,myHeight,myLeft,myTop)
{
	// Largeur et hauteur par défaut
	if (myWidth == undefined)
	{
		myWidth = 2*windowWidth()/3;
		if (myWidth < 300)
			myWidth = 300;
	}
	if (myHeight == undefined)
	{
		myHeight = 5*screen.availHeight/6;
		if (myHeight < 200)
			myHeight = 200;
	}
	// Abscisse et ordonnée par défaut
	if (myLeft == undefined)
	{
		myLeft = windowWidth()/6;
	}
	if (myTop == undefined)
	{
		myTop = screen.availHeight/12;
	}
	// Options par défaut
	if (options == undefined)
	{
		options = "left="+myLeft+",top="+myTop+",width="+myWidth+", height="+myHeight+",resizable=yes,status=no,scrollbars=yes";
	}
	
	// Ouverture proprement dite
	window.open(url,"Popup",options);
}

function setCurrentUrl(url)
{
	currentUrl = url;
}
function getCurrentUrl()
{
	return currentUrl;
}
