 /*
----------------------------------------------------------------------------
 Author:       Marc-Antoine Latour
 Copyright (c) - 2002, Strategia

 Description
 ----------------------------------------------------------------------------
   - Browser API Return element,style attribute, Hide and show element
     based on the browser type. if not possible return null or dont hide or show
 ----------------------------------------------------------------------------
 History
 ----------------------------------------------------------------------------
  Date         User                Description
 ----------------------------------------------------------------------------
  2002/05/19   Marc-Antoine        Creation
  2002/05/31   Marc-Antoine        Ajout de fonction BrowserFamily,realHeight,
  								   realWidth
  2002/07/21   Marc-Antoine		   Amélioration du code
 ----------------------------------------------------------------------------
*/

	function BrowserID() { // Check DOM Browser
		if(parseInt(navigator.appVersion) >= 4)
			return (document.getElementById)? "DOM" : (document.layers)? "NN" : "IE";
		return "";
	}
	function BrowserFamily(){ //Check Family Browser
		return (navigator.appName=="Netscape") ? "NN" : "IE";
 	}

	function GetElement(objTarget) { // Retourne Element chercher selon le browser sinon Null
		var myObj;
		var Root         = this;
		var BrowType     = Root.BrowserID();
		var BrowFamily   = Root.BrowserFamily();
		var strAllAccess = (BrowType == "IE")? "all." : "";
		
		if(typeof objTarget == "string") {
			if (objTarget.indexOf("/") > -1){
				try { var objWindow = eval(objTarget.split("/")[0]) }
				catch (er) { return null }
				objTarget = objTarget.split("/")[1]
			}else
				var objWindow = self;
			myObj = (BrowType == "DOM")? eval(objWindow.document.getElementById(objTarget)):
										 eval("objWindow.document." + strAllAccess + objTarget);
		} else {
			myObj = objTarget;
		}
		
		// Sous methode visible et hidden
		if (myObj != null){
			myObj.Show = function Show() { Root.Style(objTarget).display = "block"; }
			myObj.Hide = function Hide() { Root.Style(objTarget).display = "none";  }
			
			//myObj.scroll = function scroll(){ scrollTo(0,myObj.offsetTop)	}
			//retourne la hauteur et la largeur selon le browser
			myObj.realHeight = (BrowFamily == "NN")? myObj.innerHeight-16 : myObj.offsetHeight-20;
			myObj.realWidth = (BrowFamily == "NN")? myObj.innerWidth-16 : myObj.offsetWidth-20;
			myObj.X = (BrowFamily == "NN")? myObj.outerHeight : myObj.offsetParent.offsetLeft - document.body.scrollLeft + myObj.offsetLeft; 
			myObj.Y = (BrowFamily == "NN")? myObj.outerWidth : myObj.offsetParent.offsetTop + myObj.offsetTop - document.body.scrollTop;
			
			myObj.ShowPopPup = function ShowPopPup( sHtml, iWidth, iHeight) { 
				var oPopup = window.createPopup();
				var oPopupBody = oPopup.document.body;
				oPopupBody.style.backgroundColor = "white";
				oPopupBody.style.border = "solid #336699 2px";
				oPopupBody.innerHTML = sHtml;
				oPopup.show(myObj.X + 50, myObj.Y, iWidth + 40, iHeight + 35, document.body);
			}
		}
		return myObj
	}
	
	function GetElements(objTarget) { // Retourne Collection Element chercher selon le browser sinon Null
		return (typeof objTarget == "object") ? objTarget : 
			   (this.BrowserID() == "DOM")? document.getElementsByName(objTarget) : null;
	}
	
	function GetStyleObject(objTarget) { // Retourne attribut style
		return (this.BrowserID() != "NN")? this.Element(objTarget).style : this.Element(objTarget)
	}
	
	function addListener(objTarget, strEventType, fnListener) {
        
        if (this.BrowserFamily() == "IE") 
        {
            objTarget.attachEvent(strEventType, fnListener)
        }
        else
        {
            switch(strEventType)
            {
                case "onload" :
                    strEventType = "load";
                    break;
                case "onresize" :
                    strEventType = "resize";
                    break;
                case "onscroll" :
                    strEventType = "scroll";
                    break;
                case "onpropertychange" :
                    strEventType = "DOMAttrModified";
                    break;
            }
            objTarget.addEventListener(strEventType , fnListener, false) //Event like IE by Bubling
        }
    }
    
    function eventY(e){
        return (window.event) ? window.event.y  : e.clientY;
    }
     
    function eventX(e){
        return (window.event) ? window.event.x  : e.clientX;
    } 
function BrowserAPI() {
	this.BrowserFamily	= BrowserFamily;
	this.BrowserID 		= BrowserID;
	this.Element   		= GetElement;
	this.Elements  		= GetElements;
	this.Style     		= GetStyleObject;
    this.addListener    = addListener;
    this.eventY    = eventY;
    this.eventX    = eventX;
}

// initialization de l'objet API.
var Browser = new BrowserAPI();

