// UtilsVersion=7.20

var dtpSrvDatasUrl="http://www.extradpt.com/Datas/";

function DoSelLanguage(xParam) {
	xParam=xParam.toUpperCase();
	var stx;
	var j;
	// Paramètre pour la librairie (gestion propre de la ligne)
	var st=document.location.href;
	var i=st.indexOf('#');
	if (i >= 0) {st=st.substr(0,i-1);}
	if (st.substr(st.length-1,1)=='/') {
		st+='Default.asp?Lng='+xParam;
		}
	else {
		if (st.indexOf('?')>=0) {
			i=st.indexOf('?Lng=');
			if (i >= 0) {
				j=st.indexOf('&');
				if (j >= 0) {stx=st.substr(0,i)+'?Lng='+xParam+st.substr(j);}
				else {stx=st.substr(0,i)+'?Lng='+xParam;}
				st=stx;
				}
			else {	
				i=st.indexOf('&Lng=');
				if (i >= 0) {
					stx=st.substr(i+1);
					j=stx.indexOf('&');
					if (j>=0) {st=st.substr(0,i)+'&Lng='+xParam+stx.substr(j);}
					else {st=st.substr(0,i)+'&Lng='+xParam;}	
					}
				else {
					st+='&Lng='+xParam;
					}
				}	
			}
		else {
			st+='?Lng='+xParam;
			}
		}
	// Maintenant gestion des noms de pages
	i=st.indexOf('?');
	stx=st.substr(0,i);
	st=st.substr(i);
	var stk;
	i=stx.lastIndexOf('/')+1;
	if (i) {stk=stx.substr(i); stx=stx.substr(0,i);} else {stk=stx; stx='';}
	i=stk.indexOf('.');
	j=stk.toLowerCase().lastIndexOf('_uk'); if (j < 0) j=i;
	switch (xParam) {
		case 'F' : case 'FR' :
			stk=stk.substr(0,j)+stk.substr(i);
			break;
		case 'UK' : case 'EN' :
			stk=stk.substr(0,j)+'_uk'+stk.substr(i);
			break;
		case 'DE' :
			stk=stk.substr(0,j)+'_de'+stk.substr(i);
			break;
		case 'ES' :
			stk=stk.substr(0,j)+'_es'+stk.substr(i);
			break;
		case 'IT' :
			stk=stk.substr(0,j)+'_it'+stk.substr(i);
			break;
		case 'NL' :
			stk=stk.substr(0,j)+'_nl'+stk.substr(i);
			break;
		case 'PT' :
			stk=stk.substr(0,j)+'_pt'+stk.substr(i);
			break;
		}
	st=stx+stk+st;
	//
	document.location = st;
}

function ATparseQuery ( query ) {
   var Params = new Object ();
   if ( ! query ) return Params; // return empty object
   var Pairs = query.split('&'); // /[;&]/);
   for ( var i = 0; i < Pairs.length; i++ ) {
      var KeyVal = Pairs[i].split('=');
      if ((KeyVal) && (KeyVal.length == 2)) {
		  var key = unescape( KeyVal[0] );
		  var val = unescape( KeyVal[1] );
		  val = val.replace(/\+/g, ' ');
		  Params[key] = val;
		}
   }
   return Params;
}
	
function ATaddEvent(obj, evType, fn){
// Exemple d'appel: ATaddEvent(window, 'load', AddIdx );
	if(typeof(obj) === 'string') obj = document.getElementById(obj);
	if(obj == null)return false;
	if (obj.addEventListener){
		obj.addEventListener(evType, fn, false);
		return true;
	} else if (obj.attachEvent){
		try{
		var r = obj.attachEvent("on"+evType, fn);
		}catch(e){}
		return r;
	} else {
		return false;
	}
}

function ATremoveEvent(obj, evType, fn, useCapture){
	if(typeof(obj) === 'string') obj = document.getElementById(obj);
	if(obj == null)return false;
	if (obj.removeEventListener){	
		try {
			obj.removeEventListener(evType, fn, useCapture);
		} catch(e) { /*alert("Handler could not be removed"); return false;*/ }
		return true;
	} else if (obj.detachEvent){
		try {
			var r = obj.detachEvent("on"+evType, fn);
		} catch(e) { /*alert("Handler could not be removed"); return false;*/ }
		return r;
	} else {
		try {
			obj["on" + evname] = null;
		} catch(e) { alert("Handler could not be removed"); return false;}
	}
}

function ATcancelEvent(e) {
	if (!e) e=window.event;
	if(e.stopPropagation) e.stopPropagation();
	if(e.preventDefault) e.preventDefault();
	e.cancelBubble = true;
	e.cancel = true;
	e.returnValue = false;
	return false;
}


/************************************************************************************/
// Ancienne version définitivement Remplacée par la nouvelle...
function loadXMLDoc(url,RetFunction,CursorWait) {
	if (typeof(RetFunction)==='string')	{ // ce qui devrait TOUJOURS être le cas
		return loadHttpX(url,(RetFunction.indexOf('(')<0)? RetFunction+'(req)': ((RetFunction.indexOf('()')>0)?RetFunction.replace('()','(req)'):RetFunction.replace('(','(req,')),CursorWait);
		}
	else {
		return loadHttpX(url,RetFunction,CursorWait);
		}
}

// Nouvelle Version: RetFunction doit prend en parametre le retour, en appelant req.responseText !!!! ..
function loadHttpX(url,RetFunction,CursorWait) {
	// reqDone = 0;
	var req = null;
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
    	try {
			req = new XMLHttpRequest();
        } catch(e) {
			req = null;
        }
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
       	try {
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req = null;
        	}
		}
    }
	if (req) {
		req.onreadystatechange=function() {
				if (req.readyState == 4) {
					if (req.status == 200) { 	// only if "OK"
						if (CursorWait) document.body.style.cursor='default';
						if (RetFunction) eval(RetFunction);
						req=null; // Liberation ?
					} else {
						if (CursorWait) alert("Problem with XML data retrieving:\n" + req.statusText);
					}
					// reqDone=1;
				}
			}
		req.open("GET", url, true); // Asychrone...
		req.send("");
		if (CursorWait) document.body.style.cursor='wait';
	}
	else {
		// reqDone=1;
		alert('Pb création objet');
		}
}

//****************************************************
function SetInnerHtmlObj(objX, stVal, doAppend) {
	if(objX == null)return false;
	if (document.all) {
		// Rajouter "Defer" sur les balises scripts, et <br> caché devant <style ou autres <link ? !
		stVal=stVal.replace(/[<]style/gi,'\r\n<div style="display:none"><br/></div><style');
		stVal=stVal.replace(/[<]link /gi,'\r\n<div style="display:none"><br/></div><link ');
		stVal=stVal.replace(/[<]script /gi,'<div style="display:none"><br/></div><'+'script defer="defer" ')+'\r\n';
		try  {
			if (doAppend) {objX.innerHTML += stVal;}
			else {objX.innerHTML=stVal;}
		}catch(e) { // Erreur IE... Essaie le innerText (textarea par exemple)
			if (doAppend) { objX.innerText += stVal;}
			else {objX.innerText=stVal;}
			}
		// objX.innerHTML+='<br/><textarea rows=20 cols=100>'+stVal+'</textarea>';
		/*// Version IE propre!!??
		var xdiv = document.createElement("div");
		xdiv.innerHTML = stVal.replace(/[<]script /gi,'<'+'script defer="defer" ');
		objX.appendChild(xdiv);*/
		}
	else {
		var stScript='';
		if (navigator.userAgent.indexOf('WebKit') >=0) { // Verification des balises script !!! BUG WEBKIT Chrome+Safari
			for (;;) {
				var i=stVal.indexOf('<'+'script');
				if (i < 0) break;
				var i1=stVal.indexOf('>',i);
				var j=stVal.indexOf('<'+'/script');
				var j1=stVal.indexOf('>',j);
				stScript += stVal.substring(i1+1,j);
				stVal = stVal.substring(0,i) + stVal.substring(j1+1);
				}
			}
		var rng = document.createRange();
		rng.setStartBefore(objX);
		var htmlFrag = rng.createContextualFragment(stVal);
		if (!doAppend) {
			while (objX.hasChildNodes())
				objX.removeChild(objX.lastChild);
			}	
		objX.appendChild(htmlFrag);
		if (stScript != '') {
			var stS = document.createElement('script'); stS.type='text/javascript'; stS.async=true;
			stS.innerHTML='//<!--\r\n'+stScript+'\r\n//-->'; 
			objX.appendChild(stS);
			}
		}
}
//****************************************************
function SetInnerHtml(objX_or_Id_or_Name, stVal, doAppend) {
	if(typeof(objX_or_Id_or_Name) === 'string') {
		if (document.getElementById(objX_or_Id_or_Name)) {
			return SetInnerHtmlObj(document.getElementById(objX_or_Id_or_Name), stVal, doAppend);
			}
		else  {
			if (document.getElementsByName(objX_or_Id_or_Name).length) {
				return SetInnerHtmlObj(document.getElementsByName(objX_or_Id_or_Name)[0], stVal, doAppend);
				}
			}
		}
	else {
		return SetInnerHtmlObj(objX_or_Id_or_Name, stVal, doAppend);
		}
}
//****************************************************

function XTrim(st) {
	var j=-1;
	//alert("'"+st+"'"); alert(st.length);
	for (var i=0; i < st.length; i++) {
		if (st.substr(i,1) != ' ') break;
		j=i;
		}
	if (j >= 0) st=st.substr(j+1);	
	j=-1;
	for (var i = st.length -1; i >= 0; i--) {
		if (st.substr(i,1) != ' ') break;
		j=i;
		}
	if (j >= 0) {
		if (j==0) {st='';}
		else {
			st=st.substr(0,j);
			}
		}
	return st;	
}

//***********************************************************
function TriSelectValues(objX_or_Id) {
	// Trie une liste (select) suivant ses "valeurs" (le option value), sous forme numérique !!
	var Ob=(typeof(objX_or_Id) === 'string')?document.getElementById(objX_or_Id):objX_or_Id;
	var l=Ob.length-1;
	var i, j, k, ix, v, vt;
	for (i=0; i < l; i++) {
		ix=0; k=parseInt(Ob.options[i].value);
		for (j=i+1; j <= l; j++) {
			if (parseInt(Ob.options[j].value) < k) {
				k = Ob.options[j].value; ix=j;
				}
			}
		if (ix) {
			v=Ob.options[i].value; Ob.options[i].value=k; Ob.options[ix].value=v;
			vt=Ob.options[i].text; Ob.options[i].text=Ob.options[ix].text; Ob.options[ix].text=vt;
			}	
		}
}

//***********************************************************
function TriSelectTexts(objX_or_Id) {
	// Trie une liste (select) suivant ses "textes" visibles
	var Ob=(typeof(objX_or_Id) === 'string')?document.getElementById(objX_or_Id):objX_or_Id;
	var lx=Ob.length-1;
	var i, j, k, ix, v, vt;
	for (i=0; i < lx; i++) {
		ix=0; k=Ob.options[i].text;
		for (j=i+1; j <= lx; j++) {
			if (Ob.options[j].text < k) {
				k = Ob.options[j].text; ix=j;
				}
			}
		if (ix) {
			v=Ob.options[i].value; Ob.options[i].value=Ob.options[ix].value; Ob.options[ix].value=v;
			vt=Ob.options[i].text; Ob.options[i].text=k; Ob.options[ix].text=vt;
			}	
		}
}

//***********************************************
function DoAddOption(objX_or_Id, iValue, stTxt) { 
	// Rajoute <option value='iValue'>stTxt</option>, en fin de liste...
	try {
		var Ob=(typeof(objX_or_Id) === 'string')?document.getElementById(objX_or_Id):objX_or_Id;
		var oOpt=document.createElement('OPTION');
		oOpt.value=''+iValue;
		if (IEVersion==0) oOpt.innerHTML=stTxt; else oOpt.text=stTxt.replace('&nbsp;',' ');
		Ob.add(oOpt, oOpt.length); 
	} catch (e) { 
		/*alert('ERREUR ('+i+'): "'+Ob.name+'",'+iValue+','+stTxt);*/
	}
}

//***********************************************
function DoDelOption(objX_or_Id, iOption, iValue) {
	// Si on spécifie une valeur >= 0 pour iOption, on détruit direct. Sinon on recherche iValue.
	try {
		var Ob=(typeof(objX_or_Id) === 'string')?document.getElementById(objX_or_Id):objX_or_Id;
		if (iOption >= 0) {
			Ob.options[iOption]=null; 
			}
		else {
			for (var i=Ob.length-1; i >=0; i--) {
				if (Ob.options[i].value==iValue) {
					Ob.options[i]=null;
					return;
					}
				}
			}
	} catch (e) {}	
}


//***********************************************
function DoDelOptionListe(objX_or_Id, stValueList) {
	// Liste de valeurs séparées par des virgules (PAS d'espaces)...
	try {
		var Ob=(typeof(objX_or_Id) === 'string')?document.getElementById(objX_or_Id):objX_or_Id;
		var st=','+stValueList+',';
		for (var i=Oblength-1; i >=0; i--) {
			if (st.indexOf(','+Ob.options[i].value+',')>=0) {
				Ob.options[i]=null;
				}
			}
	} catch (e) {}	
}
//***********************************************
	
function SelXVal(objX_or_Id,ival) {
	NoGoToCat=true;
	try {
		var Ob=(typeof(objX_or_Id) === 'string')?document.getElementById(objX_or_Id):objX_or_Id;
		for (var i=Ob.options.length-1; i>=0; i--) {
			if (Ob.options[i].value==ival) {
				Ob.selectedIndex=i;
				//Ob.options[i].selected=true;
				break;
				}
			}
	} catch (e) {}
	NoGoToCat=false;
}

var NoGoToCat=false;

function GoToCat(idxCat,XObjName) {
	if (NoGoToCat) return;
	var st=''+idxCat;
	if (st.indexOf('.a')>=0) {
		window.location.replace(idxCat);
		}
	else {
		var stx=(st.indexOf('.') > 0) ? st.substr(st.indexOf('.')):st;
		window.location.replace('categories.asp?CatPdtIdx='+st+((XObjName)?'&'+XObjName+'='+st:''));
		//var i=st.indexOf('.');
		//window.location.replace('categories.asp?CatPdtIdx='+st.substr(i+1));
		}
}

// Bloc de gestion du curseur d'attente.. Essaie d'eviter les blocages en mode attente !
var ATTimerFinAtt;
function ATKeepCursWait() {if (ATTimerFinAtt) clearTimeout(ATTimerFinAtt);ATTimerFinAtt=null;}
function ATBackCursDef() {if (ATTimerFinAtt){clearTimeout(ATTimerFinAtt);ATTimerFinAtt=null;document.body.style.cursor='default';}}
function ATFinAtt() {
document.body.style.cursor='wait'; if (ATTimerFinAtt) clearTimeout(ATTimerFinAtt);
ATTimerFinAtt=setTimeout('ATBackCursDef()',1000);
}
ATaddEvent(window, 'beforeunload', ATFinAtt);
ATaddEvent(window, 'unload', ATKeepCursWait);
// au besoin, enlever avec ATremoveEvent(window, 'beforeunload', ATFinAtt,false);

