	var oAjaxPool = new Array();
	var liCurrentAjax = -1;
	
	
	/**
	 * Raccourci pour faire un document.getElementById()
	 * @param psDomID
	 * @returns
	 */
	function $(psDomID) {
		return document.getElementById(psDomID);
	}

	/**
	 * Renvoie la taille de la surface utile de la fenetre en fonction du navigateur
	 */
	function getScreenSizes() {
		
		var loScreenSizes = {
			width: 	window.innerWidth || document.documentElement.clientWidth || document.body.offsetWidth,
			height: window.innerHeight || document.documentElement.clientHeight || document.body.offsetHeight
		}
		
		return loScreenSizes;
	}
	
	
	/**
	 * Ouvre un popin et charge son contenu avec Ajax
	 * @param $piWidth
	 * @param $psContentUrl
	 */
	function openPopin(piWidth, psContentUrl, psPopinName)
	{
		var oDivBack = document.createElement('DIV');
		oDivBack.className = "backPopin";
		oDivBack.id = psPopinName;
		
		var oDiv = document.createElement('DIV');
		oDiv.className = "popin";
		oDiv.style.width = piWidth + 'px';
		oDiv.style.left = ((getScreenSizes().width - piWidth) / 2) + 'px';
		oDiv.style.top = "20px";
		
		var oCloseBar = document.createElement('SPAN');
		oCloseBar.className = "closeBar";
		oCloseBar.innerHTML = "<input type=\"button\" value=\"Fermer\" OnClick=\"deleteDomObject($('" + psPopinName + "'));\" /><div class=\"Clearer\" ></div>";
		
		var oContent = document.createElement('DIV');
		oContent.style.width = "100%";
		oContent.innerHTML = "<center>Chargement en cours<br /><img src='images/ajax-loader-big.gif' /></center>";
		
		oDiv.appendChild(oCloseBar);
		oDiv.appendChild(oContent);
		
		oDivBack.appendChild(oDiv);
		document.getElementsByTagName('body')[0].appendChild(oDivBack);
		
		getContentFromAjax(psContentUrl, oContent);
	}
	
	/**
	 * Renvoi un objet de type XHttp
	 * @returns
	 */
	function getXMLHTTP(){
		
		var xhr = null;
		if(window.XMLHttpRequest)
			xhr = new XMLHttpRequest();
		
		else if(window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					xhr = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e1) {
					xhr = null;
				}
			}
		}
		else {
			alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
		}
		return xhr;
	}
	
	/**
	 * Charge une URL en Ajax et utilise la reponse pour remplacer le innerHTML de l'objet passé en argument
	 * @param valeur
	 */
	function getContentFromAjax(psUrl, poObjet){
		
		if(oAjaxPool.lenght == 0 || liCurrentAjax == -1 || oAjaxPool[liCurrentAjax].readyState != 0) {
			oAjaxPool.push(getXMLHTTP());
			liCurrentAjax++;
		}
		
		var _xHttp = oAjaxPool[liCurrentAjax];
		
		if(_xHttp){
			_xHttp.open("GET", psUrl, true);
			_xHttp.xHttpDestiObject = poObjet;
			_xHttp.onreadystatechange = function() {
				if(_xHttp.readyState == 4 && _xHttp.responseText) {							
					if(this.xHttpDestiObject !== null) {
						this.xHttpDestiObject.innerHTML = _xHttp.responseText;
						this.xHttpDestiObject = null;
					}
				}
			};
			_xHttp.send(null)
		}
	}
	
	
	/**
	 * Supprime tous les nodes enfants d'un node donne
	 * @param poObject
	 */
	function deleteChildren(poObject)
	{
		while(poObject.firstChild) {
			poObject.removeChild(poObject.firstChild);
		}
	}
	
	/**
	 * Supprimer proprement un objet Dom
	 * @param poObject
	 */
	function deleteDomObject(poObject)
	{
		deleteChildren(poObject);
		poObject.parentNode.removeChild(poObject);
	}
	
	/**
	 * Permet de simuler le fonctionnement d'un tabPan
	 * @param piTabId
	 */
	function SwitchTab(piTabId, psTabName)
	{
		var iNbTab = 1;
		
		while(document.getElementById('tab' + psTabName + iNbTab) && document.getElementById('tabContent' + psTabName + iNbTab)) {
			iNbTab++;
		}
		
		for(var iCpt = 1; iCpt < iNbTab; iCpt++) {
			document.getElementById('tab' + psTabName + iCpt).className = '';
			document.getElementById('tabContent' + psTabName + iCpt).style.display = 'none';
		}
		
		document.getElementById('tab' + psTabName + piTabId).className = 'Active';
		document.getElementById('tabContent' + psTabName + piTabId).style.display = 'block';		
	}
	
	/**
	 * Retourne les positions réelles d'un objet
	 * @param oObj
	 */
	function getPosition(oObj) 
	{
		var iTop = 0;
		var iLeft = 0;
		
		while (oObj && oObj.tagName != 'BODY') {
			iTop += oObj.offsetTop;
			iLeft += oObj.offsetLeft;
			oObj = oObj.offsetParent;
		}
		
		return {'top' : iTop, 'left': iLeft};
	}
	
	
	function ShowWidgetProduct(sCode, oParent)
	{
		var oPos = getPosition(oParent);
		var oWidget = document.createElement('DIV');
		oWidget.id = 'Widget_' + sCode;
		oWidget.className = 'WidgetProductDetails';
		
		oWidget.style.top = oPos.top + 30 + 'px';
		oWidget.style.left = oPos.left;
		oWidget.style.display = 'block';
		
		oWidget.innerHTML = "Chargement en cours...";

		document.getElementsByTagName('BODY')[0].appendChild(oWidget);
		
		getContentFromAjax('index.php?pag=ajax_ProductSnipEye&pId=' + sCode, document.getElementById('Widget_' + sCode));
	}
	
	function ShowWidgetFab(sCode, oParent)
	{
		var oPos = getPosition(oParent);
		var oWidget = document.createElement('DIV');
		oWidget.id = 'Widget_' + sCode;
		oWidget.className = 'WidgetProductDetails';
		
		oWidget.style.top = oPos.top + 30 + 'px';
		oWidget.style.left = oPos.left;
		oWidget.style.display = 'block';
		
		oWidget.innerHTML = "Chargement en cours...";

		document.getElementsByTagName('BODY')[0].appendChild(oWidget);
		
		getContentFromAjax('index.php?pag=ajax_ManufacturerSnipEye&fId=' + sCode, document.getElementById('Widget_' + sCode));
	}
	
	function HideWidget(sCode) {
		deleteDomObject(document.getElementById('Widget_' + sCode));
	}
	
	
