// Remplace toutes les occurences d'une chaine
function str_replace(str, search, repl) {
	while (str.indexOf(search) != -1){
		str = str.replace(search, repl);
	}
	return str;
}

// Remplace les caractères accentués
function enlever_accents(str) {
	var norm = new Array('À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï', 'Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß', 'à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ', 'ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','ý','þ','ÿ');
	var spec = new Array('A','A','A','A','A','A','A','C','E','E','E','E','I','I','I','I', 'D','N','O','O','O','0','O','O','U','U','U','U','Y','b','s', 'a','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','d','n', 'o','o','o','o','o','o','u','u','u','u','y','y','b','y');
	for (var i = 0; i < spec.length; i++)
	str = replaceAll(str, norm[i], spec[i]);
	return str;
}

function strpos (haystack, needle, offset) {
    // Finds position of first occurrence of a string within another 
    //
    // version: 909.322
    // discuss at: http://phpjs.org/functions/strpos
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Onno Marsman   
    // +   bugfixed by: Daniel Esteban
    // *     example 1: strpos('Kevin van Zonneveld', 'e', 5);
    // *     returns 1: 14
    var i = (haystack+'').indexOf(needle, (offset ? offset : 0));
    return i === -1 ? false : i;
}

function getById(sElement){
	return document.getElementById(sElement);
}

var aXhr = {};
function send_ajax(sUrl, aChamps, sCode, iId){
	//si on passe un id, on récupère l'objet Ajax dans le tableau
	if (iId){
		oXhr = aXhr[iId];
	}
	//sinon, on en instancie un nouveau temporairement
	else{
		oXhr = false;
	}
	
	//si l'objet n'est pas encore défini
	if (!oXhr){
		if(window.XMLHttpRequest || window.ActiveXObject){
			if(window.XMLHttpRequest){
				oXhr = new XMLHttpRequest();
			}
			//Internet Explorer < 7.0
			else{
				try{
					oXhr = new ActiveXObject("Msxml2.XMLHTTP");
				}
				catch(e){
					oXhr = new ActiveXObject("Microsoft.XMLHTTP");
				}
			}
		}
	}
	
	//si on a toujours une requête en cours d'éxécution, on l'annule pour ne pas qu'elle interfère avec la nouvelle (c'est là où l'id a son importance)
	if (oXhr.readyState != 4 && oXhr.readyState != 0){
		oXhr.abort();
	}
	
	//lorsque l'objet xhr a été exécuté
	oXhr.onreadystatechange = function(){
        if(oXhr.readyState == 4 && (oXhr.status == 200 || oXhr.status == 0)) {
        	sResultat = oXhr.responseText;
        	eval(sCode);
        }
	}
	
	//on rentre les paramètres de la requête AJAX
	oXhr.open("POST", '/ajax/ajax_'+sUrl, true);
	
	//vu que c'est une requête POST, on envoie le header
	oXhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	
	//on définit les variables qui seront envoyées en POST
	sChamps = '';
	for (key in aChamps){
		if (sChamps){
			sChamps += '&';
		}
		sChamps += key+'='+urlencode(aChamps[key]);
	}
	
	//et on envoie la requête
	oXhr.send(sChamps);
}

function urlencode (str){
    // URL-encodes string 
    //
    // version: 910.813
    // discuss at: http://phpjs.org/functions/urlencode
    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: AJ
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: travc
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Lars Fischer
    // +      input by: Ratheous
    // +      reimplemented by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Joris
    // %          note 1: This reflects PHP 5.3/6.0+ behavior
    // *     example 1: urlencode('Kevin van Zonneveld!');
    // *     returns 1: 'Kevin+van+Zonneveld%21'
    // *     example 2: urlencode('http://kevin.vanzonneveld.net/');
    // *     returns 2: 'http%3A%2F%2Fkevin.vanzonneveld.net%2F'
    // *     example 3: urlencode('http://www.google.nl/search?q=php.js&;ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a');
    // *     returns 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a'
    var hexStr = function (dec) {
        return '%' + (dec < 16 ? '0' : '') + dec.toString(16).toUpperCase();
    };
 
    var ret = '',
            unreserved = /[\w.-]/; // A-Za-z0-9_.- // Tilde is not here for historical reasons; to preserve it, use rawurlencode instead
    str = (str+'').toString();
 
    for (var i = 0, dl = str.length; i < dl; i++) {
        var ch = str.charAt(i);
        if (unreserved.test(ch)) {
            ret += ch;
        }
        else {
            var code = str.charCodeAt(i);
            if (0xD800 <= code && code <= 0xDBFF) { // High surrogate (could change last hex to 0xDB7F to treat high private surrogates as single characters); https://developer.mozilla.org/index.php?title=en/Core_JavaScript_1.5_Reference/Global_Objects/String/charCodeAt
                ret += ((code - 0xD800) * 0x400) + (str.charCodeAt(i+1) - 0xDC00) + 0x10000;
                i++; // skip the next one as we just retrieved it as a low surrogate
            }
            // We never come across a low surrogate because we skip them, unless invalid
            // Reserved assumed to be in UTF-8, as in PHP
            else if (code === 32) {
                ret += '+'; // %20 in rawurlencode
            }
            else if (code < 128) { // 1 byte
                ret += hexStr(code);
            }
            else if (code >= 128 && code < 2048) { // 2 bytes
                ret += hexStr((code >> 6) | 0xC0);
                ret += hexStr((code & 0x3F) | 0x80);
            }
            else if (code >= 2048) { // 3 bytes (code < 65536)
                ret += hexStr((code >> 12) | 0xE0);
                ret += hexStr(((code >> 6) & 0x3F) | 0x80);
                ret += hexStr((code & 0x3F) | 0x80);
            }
        }
    }
    return ret;
}

function panelConnec(sId)  {
	var dId=document.getElementById(sId);
	
	if(dId.style.display=="none") {
		dId.style.display="block";
	}
	else {
		dId.style.display="none";
	}
}

function test_cmd_lvr_idem(){
	if (document.getElementById('checkbox_cmd_lvr_idem').checked){
		document.getElementById('table_cmd_lvr').style.display = 'none';
	}
	else{
		document.getElementById('table_cmd_lvr').style.display = 'block';
	}
}

function ajout_panier(){
	getById('header_nombre_articles').innerHTML = parseInt(getById('header_nombre_articles').innerHTML) + 1;
}

function redirect(sUrl){
	document.location.replace(sUrl);
}