/*
 * Detecte le navigateur
 */
function getNav() {
	var nav = navigator.appName;
	if (nav == 'Netscape') { return 'ns'; } 
	else { return 'ie'; }
}

function GetId(id) {
  if(document.getElementById(id)) { return document.getElementById(id); } 
  else { return false; }
}

/* Masque un div */
function hide(div) {
	if(!GetId(div)) { return false; }
	if(GetId(div).style.display) {
  	GetId(div).style.display = 'none';
  } else if(GetId(div).style.visibility) {
		GetId(div).style.visibility = 'hidden';  	
  }
}

/* Affiche un div */
function show(div, typeDisplay) {
	if(!GetId(div)) { return false; }
	
	if(typeDisplay) { var disp = 'inline'; }
	else { var disp = 'block'; }

	if(GetId(div).style.display) {
  	GetId(div).style.display = disp;
  } else if(GetId(div).style.visibility) {
		GetId(div).style.visibility = 'visible';  	
  }
}

/*
function showLayer(div, typeDisplay) {
	if(!GetId(div)) { return false; }
	
	if(typeDisplay) { var disp = 'inline'; }
	else { var disp = 'bloc';
	
	if(GetId(div).style.display == '') {
		GetId(div).style.display = 'none';
	}
  GetId(div).style.display = disp;
}


function hideLayer(div, typeDisplay) {
	if(!GetId(div)) { return false; }
	
	if(GetId(div).style.display == '') {
		GetId(div).style.display = 'bloc';
	}
  GetId(div).style.display = 'none';
}
*/

/* Recupere la hauteur et la largeur d'un div */
function getDivDimension(div) {
	if(GetId(div)) {
	  var dim = new Array();
	  dim['x'] = GetId(div).offsetWidth;    // Largeur Bulle
	  dim['y'] = GetId(div).offsetHeight;   // Hauteur Bulle
	  return dim;
	}
}

function addslashes(ch) {
	ch = ch.replace(/\\/g,"\\\\")
	ch = ch.replace(/\'/g,"\\'")
	ch = ch.replace(/\"/g,"\\\"")
	return ch
}

// Affiche ou masque un calque selon l etat du display
function hideShow(lay) {
  var obj = GetId(lay);
  if(obj.style.display == "none") { show(lay); }
  else { hide(lay); }
}
/*
function visible(div) {
  document.getElementById(div).style.visibility = 'visible';
}
function invisible(div) {
  document.getElementById(div).style.visibility = 'hidden';
}
*/

/* Front et Iphone */
function log_demo() {
	document.getElementById('id_code_soc').value = 'demo';
	document.getElementById('id_login').value = 'demo';
	document.getElementById('id_pass').value = 'demo';

	document.forms['form_valid_ident'].submit();
}

/* Front et Iphone */
function log_mem_demo() {
	document.getElementById('cli_code_soc').value = 'demo';
	document.getElementById('cli_login').value = 'wansys';
	document.getElementById('cli_pass').value = 'wansys';

	document.forms['mem_ident'].submit();
}

function validMemIdent(f) {
	var code_soc = f.elements['cli_code_soc'];
	var login = f.elements['cli_login'];
	var pass = f.elements['cli_pass'];
	
	if(code_soc.value == '') {
		alert('Vous devez renseigner le code société');
		return false;
	}
	if(login.value == '') {
		alert('Vous devez saisir votre identifiant');
		return false;
	}
	if(pass.value == '') {
		alert('Vous devez saisir votre mot de passe');
		return false;
	}
}

/* Retourne la largeur d'un div */
function getDivWidth(obj) {
	if(obj.offsetWidth) { var w = obj.offsetWidth; }
	else if(obj.clientWidth) { var w = obj.clientWidth; }
	return w;
}
/* Retourne la hauteur d'un div */
function getDivHeight(obj) {
	if(obj.offsetHeight) { var h = obj.offsetHeight; }
	else if(obj.clientHeight) { var h = obj.clientHeight; }
	return h;	
}
function show_bloc(lay) {
	if(document.getElementById(lay)) {
		document.getElementById(lay).style.display = 'block';
	}
}

// Vide un champs de sa valeur
function empty_field(div, val) {
  if(val) {
    GetId(div).value = val;
    GetId(div).innerHTML = val;
  } else {
    GetId(div).value = '';
    GetId(div).innerHTML = '';
  }
}

function ajaxLoadFromBox_1N(obj, ajLink, lyr) {
	if(obj.checked) {
		bdAjax(ajLink, '2', lyr);
	} else {
		empty_field(lyr);
	}
}


// Charge un lien ajax si la box est cochée
function AjaxLoadFromBox(box, div, aj_link, wanted) {
	if(wanted) {
		if(wanted == 'F') {
			var eq = false;
		} else {
			var eq = true;
		}
	} else {
		var eq = true;
	}
	if(box.checked == eq) { bdAjax(aj_link, '2', div); }
	else { GetId(div).innerHTML = ''; }
}

// Creer un element
function make_element(eType, eId, eStyle, eParent, eContent) {
	if(!GetId(eId)) {
		var elem = document.createElement(eType);
		elem.setAttribute('id', eId);
		elem.setAttribute('style', eStyle);
		if(eContent) {
			elem.innerHTML = eContent;
		}
		GetId(eParent).appendChild(elem);
	}
}

// Supprime une ligne ajouter un groupe utilisateur au rendez-vous 
function delete_element(eId) {
	if(GetId(eId)) {
		var obj2 = GetId(eId);
		var parents = obj2.parentNode;
		
		parents.removeChild(obj2);
	}
}

/* Donne le focus a un element */
function give_focus(div) {
	GetId(div).focus();
}


/* Recupere la valeur du radio choisi */
function radio_get_value(fName) {
	var id_value = false;
	var inp = document.getElementsByTagName('input');
	for(i = 0; i < inp.length; i++) {
		if(inp[i].name == fName && inp[i].checked) {
			id_value = inp[i].value;
			break;
		}
	}
	return id_value;
}


/* Recupere la ou les valeur du champ */
function fields_get_value(fType, fName) {
	var entries = new Array();
	var elem = document.getElementsByTagName(fType);
	for(i = 0; i < elem.length; i++) {
		if(elem[i].name == fName) {
			entries.push(elem[i].value);
		}
	}
	return entries;
}

function serialize (mixed_value) {
    // Returns a string representation of variable (which can later be unserialized)  
    // 
    // version: 1006.1915
    // discuss at: http://phpjs.org/functions/serialize    // +   original by: Arpad Ray (mailto:arpad@php.net)
    // +   improved by: Dino
    // +   bugfixed by: Andrej Pavlovic
    // +   bugfixed by: Garagoth
    // +      input by: DtTvB (http://dt.in.th/2008-09-16.string-length-in-bytes.html)    // +   bugfixed by: Russell Walker (http://www.nbill.co.uk/)
    // +   bugfixed by: Jamie Beck (http://www.terabit.ca/)
    // +      input by: Martin (http://www.erlenwiese.de/)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: utf8_encode    // %          note: We feel the main purpose of this function should be to ease the transport of data between php & js
    // %          note: Aiming for PHP-compatibility, we have to translate objects to arrays
    // *     example 1: serialize(['Kevin', 'van', 'Zonneveld']);
    // *     returns 1: 'a:3:{i:0;s:5:"Kevin";i:1;s:3:"van";i:2;s:9:"Zonneveld";}'
    // *     example 2: serialize({firstName: 'Kevin', midName: 'van', surName: 'Zonneveld'});    // *     returns 2: 'a:3:{s:9:"firstName";s:5:"Kevin";s:7:"midName";s:3:"van";s:7:"surName";s:9:"Zonneveld";}'
    var _getType = function (inp) {
        var type = typeof inp, match;
        var key;
        if (type == 'object' && !inp) {            return 'null';
        }
        if (type == "object") {
            if (!inp.constructor) {
                return 'object';            }
            var cons = inp.constructor.toString();
            match = cons.match(/(\w+)\(/);
            if (match) {
                cons = match[1].toLowerCase();            }
            var types = ["boolean", "number", "string", "array"];
            for (key in types) {
                if (cons == types[key]) {
                    type = types[key];                    break;
                }
            }
        }
        return type;    };
    var type = _getType(mixed_value);
    var val, ktype = '';
    
    switch (type) {        case "function": 
            val = ""; 
            break;
        case "boolean":
            val = "b:" + (mixed_value ? "1" : "0");            break;
        case "number":
            val = (Math.round(mixed_value) == mixed_value ? "i" : "d") + ":" + mixed_value;
            break;
        case "string":            mixed_value = this.utf8_encode(mixed_value);
            val = "s:" + encodeURIComponent(mixed_value).replace(/%../g, 'x').length + ":\"" + mixed_value + "\"";
            break;
        case "array":
        case "object":            val = "a";
            /*
            if (type == "object") {
                var objname = mixed_value.constructor.toString().match(/(\w+)\(\)/);
                if (objname == undefined) {                    return;
                }
                objname[1] = this.serialize(objname[1]);
                val = "O" + objname[1].substring(1, objname[1].length - 1);
            }            */
            var count = 0;
            var vals = "";
            var okey;
            var key;            for (key in mixed_value) {
                ktype = _getType(mixed_value[key]);
                if (ktype == "function") { 
                    continue; 
                }                
                okey = (key.match(/^[0-9]+$/) ? parseInt(key, 10) : key);
                vals += this.serialize(okey) +
                        this.serialize(mixed_value[key]);
                count++;            }
            val += ":" + count + ":{" + vals + "}";
            break;
        case "undefined": // Fall-through
        default: // if the JS object has a property which contains a null value, the string cannot be unserialized by PHP            val = "N";
            break;
    }
    if (type != "object" && type != "array") {
        val += ";";    }
    return val;
}	

function utf8_encode ( argString ) {
    // Encodes an ISO-8859-1 string to UTF-8  
    // 
    // version: 1006.1915
    // discuss at: http://phpjs.org/functions/utf8_encode    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: sowberry
    // +    tweaked by: Jack
    // +   bugfixed by: Onno Marsman    // +   improved by: Yves Sucaet
    // +   bugfixed by: Onno Marsman
    // +   bugfixed by: Ulrich
    // *     example 1: utf8_encode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'    var string = (argString+''); // .replace(/\r\n/g, "\n").replace(/\r/g, "\n");
 
    var utftext = "";
    var start, end;
    var stringl = 0; 
    start = end = 0;
    stringl = string.length;
    for (var n = 0; n < stringl; n++) {
        var c1 = string.charCodeAt(n);        var enc = null;
 
        if (c1 < 128) {
            end++;
        } else if (c1 > 127 && c1 < 2048) {            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
        } else {
            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
        }
        if (enc !== null) {            if (end > start) {
                utftext += string.substring(start, end);
            }
            utftext += enc;
            start = end = n+1;        }
    }
 
    if (end > start) {
        utftext += string.substring(start, string.length);    }
 
    return utftext;
}

function serializeArray(a)
{
	var serializedString = '';
	var arrayLength = 0;
	for(var aKey in a)
	{
		//key definition
		if(aKey * 1 == aKey) //is_numeric?
		{
			//integer keys look like i:key
			serializedString += 'i:' + aKey + ';';	
		}
		else
		{
			//string keys look like s:key_length:key;
			serializedString += 's:' + aKey.length + ':"' + aKey + '";';
		}
		
		//value definition
		if(a[aKey] * 1 == a[aKey])
		{
			//integer value look like i:value
			serializedString += 'i:' + a[aKey] + ';';	
		}
		else if(typeof(a[aKey]) == "string")
		{
			//string value look like s:key_length:value;
			serializedString += 's:' + a[aKey].length + ':"' + a[aKey] + '";';
		}
		else if(a[aKey] instanceof Array)
		{
			serializedString += serializeArray(a[aKey]);
		}
		arrayLength++;
	}
	serializedString = 'a:' + arrayLength + ':{' + serializedString + '}';
	
	return serializedString;
}

function is_field_exist(objFrm, fName) {
	return (objFrm.elements[fName] && objFrm.elements[fName].value != '' && objFrm.elements[fName].value != 0) ? true : false;
}



// Test pour savoir si on a passé un nom de formulaire (depuis un lien) ou un objet (depuis un input)
function testObjetFrm(objFrm) {
	if(document.forms[objFrm]) {
		objFrm = document.forms[objFrm];
	}
	return objFrm;
}


function urlEncodeArrayFieldValue(objFrm, fName) {
	return serializeArray(arrayGetValue(objFrm, fName));
}

// Retourne un tableau contenant les valeurs checkés d'un champs de type checkbox
function arrayGetCheckedValue(objFrm, fName) {
	var objFrm = testObjetFrm(objFrm);
	var EntryArray = new Array();	
	var counter = 0;
	
	for(i = 0; i < objFrm.elements.length; i++) {
		if(objFrm.elements[i].name == fName+'[]' && objFrm.elements[i].checked) {
			EntryArray[counter] = objFrm.elements[i].value;
			counter++;
		}
	}
	if(counter == 0) { EntryArray = ''; }
	
	return EntryArray;
}


// Recupere les valeurs d un input tableau
function arrayGetValue(objFrm, fName) {
	var objFrm = testObjetFrm(objFrm);
	var EntryArray = new Array();	
	var n = 0;
	
	for(i = 0; i < objFrm.elements.length; i++) {
		if(objFrm.elements[i].name == fName+'[]') {
			EntryArray[n] = objFrm.elements[i].value;
			n++;
		}
	}
	return EntryArray;
}



// Charge une url ajax en y ajoutant un parametre tableau serialisé
function loadAjaxWithCheckedArrayValue(objFrm, fName, ajLink, lyr, paramUrl) {
	var arrUrl = arrayGetCheckedValue(objFrm, fName);
	var lnk_compl = '';
	if(arrUrl) {
		lnk_compl = '&'+paramUrl+'='+serializeArray(arrUrl);
	}
	bdAjax(ajLink+lnk_compl, 2, lyr);
}

// Charge une url ajax en y ajoutant un parametre tableau serialisé
function loadAjaxWithArrayValue(objFrm, fName, ajLink, lyr, paramUrl) {
	var arrUrl = arrayGetValue(objFrm, fName);
	var lnk_compl = '';
	if(arrUrl) {
		lnk_compl = '&'+paramUrl+'='+serializeArray(arrUrl);
	}
	bdAjax(ajLink+lnk_compl, '', lyr);
}

function delete_error(divName) {
	delete_element('err'+divName);
}


function make_error(err, divName) {
	make_element('div', 'err'+divName, 'font-family:arial;font-size:11px;text-align:center;color:red;', divName, err);
}

// Fonction de stockage des scripts à charger 
FuncOL = new Array(); 
function StkFunc(Obj) { 
    FuncOL[FuncOL.length] = Obj; 
} 
     
// Execution des scripts au chargement de la page 
window.onload = function() { 
    for(i=0; i<FuncOL.length; i++) 
        {FuncOL[i]();} 
}