/*
 * layout.js
 *
 * Fonctions pour mise en page
 *
 * @(#) $Id: layout.js,v 1.2 2009/11/08 18:21:30 amalacchina Exp $
 *
 */

var fen1,fen2,fen3,fen4,fen5,fen6,fen7,fen8,fen9,fen10,fen11,fen12;
function fenetres_au_dessus(){
if ((window.fen0) && (!fen0.closed)) fen0.focus();
if ((window.fen1) && (!fen1.closed)) fen1.focus();
if ((window.fen2) && (!fen2.closed)) fen2.focus();
if ((window.fen3) && (!fen3.closed)) fen3.focus();
if ((window.fen4) && (!fen4.closed)) fen4.focus();
if ((window.fen5) && (!fen5.closed)) fen5.focus();
if ((window.fen6) && (!fen6.closed)) fen6.focus();
if ((window.fen7) && (!fen7.closed)) fen7.focus();
if ((window.fen8) && (!fen8.closed)) fen8.focus();
if ((window.fen9) && (!fen9.closed)) fen9.focus();
if ((window.fen10) && (!fen10.closed)) fen10.focus();
if ((window.fen11) && (!fen11.closed)) fen11.focus();
if ((window.fen12) && (!fen12.closed)) fen12.focus();
}
function fermer_les_fenetres(){
if ((window.fen0) && (!fen0.closed)) fen0.close();
if ((window.fen1) && (!fen1.closed)) fen1.close();
if ((window.fen2) && (!fen2.closed)) fen2.close();
if ((window.fen3) && (!fen3.closed)) fen3.close();
if ((window.fen4) && (!fen4.closed)) fen4.close();
if ((window.fen5) && (!fen5.closed)) fen5.close();
if ((window.fen6) && (!fen6.closed)) fen6.close();
if ((window.fen7) && (!fen7.closed)) fen7.close();
if ((window.fen8) && (!fen8.closed)) fen8.close();
if ((window.fen9) && (!fen9.closed)) fen9.close();
if ((window.fen10) && (!fen10.closed)) fen10.close();
if ((window.fen11) && (!fen11.closed)) fen11.close();
if ((window.fen12) && (!fen12.closed)) fen12.close();
}

// fonctions php -> javascript

function if_then_else(condition, val_true, val_false)
{
    if (condition) return val_true; else return val_false;
}

// somme
function sum(val1, val2)
{
    // convertir les textes en decimaux
    val1 = CharToFloat(val1);
    val2 = CharToFloat(val2);
    // somme
    var val3 = val1 + val2;
    // convertir la somme en chaine
    val3 = val3 + "";
    // remplacer le point par une virgule
    val3 = val3.replace(".", ",");
    return val3;
}

// convertir un char en float
function CharToFloat(Valchar, Ne_pas_initialiser_valeur)
{
    Valchar = Valchar + ""
    if (Valchar.indexOf(",") >= 0)
        Valchar = Valchar.replace(",", ".");
    if (Valchar.indexOf("%2C") >= 0)
        Valchar = Valchar.replace("%2C", ".");
    while (Valchar.indexOf(" ") >= 0)
        Valchar = Valchar.replace(" ", "");
    while (Valchar.indexOf("%20") >= 0)
        Valchar = Valchar.replace("%20", "");
    while (Valchar.indexOf("&nbsp;") >= 0)
        Valchar = Valchar.replace("&nbsp;", "");
    var Valfloat = parseFloat(Valchar);
    if (Ne_pas_initialiser_valeur) return Valfloat;
    if (isNaN(Valfloat)) Valfloat = 0;
    return Valfloat;
}
// arrondi avec reformatage
// affichage systematique de 2 decimals sauf
// si Ne_pas_Forcer_zero vaut 1
function round(number, X, Ne_pas_Forcer_zero)
{
    number = CharToFloat(number);
    X = (!X ? 2 : X);
    var Y = Math.round(number * Math.pow(10, X)) / Math.pow(10, X);
    Y = Y + "";
    Y = Y.replace(".", ",");
    // deux chiffres après la virgule
    if (Y.indexOf(",") > 0) {
        var p = Y.indexOf(",");
        var decimal = Y.substring(p+1);
        var entier = Y.substring(0,p);
        var j = entier.length;
        while (decimal.length < X && !Ne_pas_Forcer_zero) decimal = decimal + "0";
        Y = "";
        while (j > 3) {
            Y = " " + entier.substring(j - 3,j) + Y;
            j -= 3;
        }
        if (j > 0) Y = entier.substring(0,j) + Y;
        Y = Y + "," + decimal;
    }
    else {
        var entier = Y;
        var j = entier.length;
        Y = "";
        while (j > 3) {
            Y = " " + entier.substring(j - 3,j) + Y;
            j -= 3;
        }
        if (j > 0) Y = entier.substring(0,j) + Y;
        if (Ne_pas_Forcer_zero) return Y;
        Y = Y +",00";
    }
    return Y;
}

// arrondi standard sans reformatage (pour calcul)
// ne pas remplacer le point par une virgule
function round_dec(number, X)
{
    number = CharToFloat(number);
    X = (!X ? 2 : X);
    var Y = Math.round(number * Math.pow(10, X)) / Math.pow(10, X);
    return Y;
}

// rechercher une chaine dans un texte
function ereg(pattern, str)
{
    var reg = new RegExp(pattern);
    if (reg.test(str)) return true;
    if (reg.test(unescape(str))) return true;
    return false;
}

// fonctions utilitaires
function function_exists(function_name)
{
    var f;
    try {
        eval('f='+function_name);
        if (typeof(f)=="function") {
            return true;
        }
    }
    catch (ex) {
        return false;
    }
    return false;
}

function id2element(id) {
    if (document.getElementById)
        return document.getElementById(id);
    if (document.all)
        return eval("document.all." + id);
    return null;
}

function getSafeFicheValue(value, Initialiser_valeur)
{
    if (!value) return value;
    // est-ce un nombre ?
    var value2 = CharToFloat(value, !Initialiser_valeur);
    if (isNaN(value2) == false) return value2;
    return value;
}

function getFicheValue(field_name, form_name)
{
    var obj = id2element("lib_"+field_name);
    if (obj) return getSafeFicheValue(obj.innerHTML);
    if (form_name > '')
         var fiche = eval("document."+form_name+"."+field_name);
    else var fiche = eval("document.form_validation."+field_name);
    if (!fiche) return null;
    if (!fiche.value && !fiche.type) {
        for(var i = 0; i < fiche.length; i++) {
            if (fiche[i].checked) return fiche[i].value;
        }
    }
    else {
        if (fiche.type=='checkbox') {
            if (fiche.checked) return fiche.value;
            return null;
        }
        return getSafeFicheValue(fiche.value);
    }
    return null;
}

function setFicheValue(form_name, field_name, value)
{
    var obj = id2element("lib_"+field_name);
    if (obj) obj.innerHTML = value;

    var fiche = eval("document."+form_name+"."+field_name);
    if (!fiche) return;
    if (!fiche.value && !fiche.type) {
        for(var i = 0; i < fiche.length; i++) {
            fiche[i].checked = (fiche[i].value == value);
        }
    }
    else {
        if (fiche.type=='checkbox') {
            fiche.checked = (fiche.value == value);
        }
        else
            fiche.value = value;
    }
}

function set_label_button(button_id, label)
{
    var button = id2element(button_id);
    if (button) button.value = label;
}

function set_label_field(label_id, txt, type_label)
{
    var label = id2element(type_label+'_'+label_id);
    if (label) label.innerHTML = txt;
    return true;
}

function set_visible_button(button_id, flag)
{
    var button = id2element(button_id);
    if (!button) return;
    if (flag) {
        button.style.display = "";
    } else {
        button.style.display = "none";
    }
}

// fonctions pour mettre à jour le layout

function display_fiche(fname, style)
{
    // cellules a,b,c,d
    var a = id2element('div_'+fname+'a');
    var b = id2element('div_'+fname+'b');
    var c = id2element('div_'+fname+'c');
    var d = id2element('div_'+fname+'d');
    if (a) a.style.display = style;
    if (b) b.style.display = style;
    if (c) c.style.display = style;
    if (d) d.style.display = style;

    // décorations e,f,g,h,i,j
    var e = id2element('div_'+fname+'e');
    if (e) {
        e.style.display = style;
        var f = id2element('div_'+fname+'f');
        if (f) {
            f.style.display = style;
            var g = id2element('div_'+fname+'g');
            if (g) {
                g.style.display = style;
                var h = id2element('div_'+fname+'h');
                if (h) {
                    h.style.display = style;
                    var i = id2element('div_'+fname+'i');
                    if (i) {
                        i.style.display = style;
                        var j = id2element('div_'+fname+'j');
                        if (j) {
                            j.style.display = style;
                        }
                    }
                }
            }
        }
    }

    // maj du groupe
    if (function_exists('show_'+fname))
        eval('show_'+fname+'()');
}

function visible_fiche(fname)
{
    var a = id2element('div_'+fname+'a');
    if (!a) return false;
    return (a.style.display == "");
}

function set_visible_fiche(fname, flag)
{
    if (flag) {
        display_fiche(fname, "");
    } else {
        display_fiche(fname, "none");
    }
}

// affichage de l'étoile pour champ obligatoire
function set_visible_asterisk(fname,flag)
{
    var a = id2element(fname);
    if (a) {
        if (flag==0) {
            (a.style.display = "none");
        } else {
            (a.style.display ="");
        }
    }
}

/*
*  Rendre visible ou pas la liste des devis sur l'écran d'accueil
*
*/
function set_visible_liste_devis(fname,text)
{
    var a = id2element(fname);
    var b = id2element("symbole_affichage_"+fname);
    if (b.value =="(+)") {
        a.style.display ="";
        b.innerHTML=text+" (-)";
        b.value="(-)";
    }
    else {
        a.style.display = "none";
        b.innerHTML = text+" (+)";
        b.value="(+)";
    }
}

function show_groupe(t,p)
{
    if (!p) p = "";
    var id = 'div_'+p+'fiche_'+t[0]+'a';
    var cond = (id2element(id).style.display == "none");
    for(var i = 1; i < t.length; i++) {
        id = 'div_'+p+'fiche_'+t[i]+'a';
        if (id2element(id))
            cond = (cond && (id2element(id).style.display == "none"));
    }
    for(var i = 0; i < t.length; i++) {
        id = 'div_'+p+'groupe_'+t[0]+ String.fromCharCode(97 + i)
        if (id2element(id))
            id2element(id).style.display = (cond == true) ? "none" : "";
    }
}

// redimensionnement auto des popups

function getRefToDivMod( divID, oDoc ) {
    if( !oDoc ) { oDoc = document; }
    if( document.layers ) {
        if( oDoc.layers[divID] ) { return oDoc.layers[divID]; } else {
            for( var x = 0, y; !y && x < oDoc.layers.length; x++ ) {
                y = getRefToDivNest(divID,oDoc.layers[x].document); }
            return y; } }
    if( document.getElementById ) { return oDoc.getElementById(divID); }
    if( document.all ) { return oDoc.all[divID]; }
    return document[divID];
}

function autoResize() {
    var idOfDiv = "myPopupID";
    var oH = getRefToDivMod( idOfDiv ); if( !oH ) { return false; }
    var oW = oH.clip ? oH.clip.width : oH.offsetWidth;
    var oH = oH.clip ? oH.clip.height : oH.offsetHeight; if( !oH ) { return false; }
    var x = window;
    x.resizeTo( oW + 200, oH + 200 );
    var myW = 0, myH = 0, d = x.document.documentElement, b = x.document.body;
    if( x.innerWidth ) { myW = x.innerWidth; myH = x.innerHeight; }
    else if( d && d.clientWidth ) { myW = d.clientWidth; myH = d.clientHeight; }
    else if( b && b.clientWidth ) { myW = b.clientWidth; myH = b.clientHeight; }
    if( window.opera && !document.childNodes ) { myW += 16; }
    var scH = screen.availHeight ? screen.availHeight : screen.height;
    var w = 1 + oW + ( ( oW + 200 ) - myW );
    var h = oH + ( (oH + 200 ) - myH );
    if (scH > h) { x.resizeTo(w , h); }
    else {
        if (!document.all  || window.opera) w += 16;
        x.resizeTo(w, scH - 200);
    }
    return true;
}

function openPerfectPopup(oW,oTitle,oContent) {
    var oH = getRefToDivMod( 'myPopupID', x.document ); if( !oH ) { return false; }
    var oH = oH.clip ? oH.clip.height : oH.offsetHeight; if( !oH ) { return false; }
    x.resizeTo( oW + 200, oH + 200 );
    var myW = 0, myH = 0, d = x.document.documentElement, b = x.document.body;
    if( x.innerWidth ) { myW = x.innerWidth; myH = x.innerHeight; }
    else if( d && d.clientWidth ) { myW = d.clientWidth; myH = d.clientHeight; }
    else if( b && b.clientWidth ) { myW = b.clientWidth; myH = b.clientHeight; }
    if( window.opera && !document.childNodes ) { myW += 16; }
    x.resizeTo( oW + ( ( oW + 200 ) - myW ), oH + ( (oH + 200 ) - myH ) );
    if( x.focus ) { x.focus(); }
    return false;
}
function point2virgule(value)
{
    value = value + "";
    if (value.indexOf(".") >= 0)
        value = value.replace(".", ",");
    return value;
}
function virgule2point(value)
{
    value = value + "";
    if (value.indexOf(",") >= 0)
        value = value.replace(",", ".");
    if (value.indexOf("&nbsp;") >= 0)
        value = value.replace("&nbsp;", "");
    if (value.indexOf(" ") >= 0)
        value = value.replace(" ", "");
    return value;
}

var iframe_open_instances = 0;

function iframe_open(url) {
    iframe_open_instances++;
    var iframe = document.createElement("IFRAME");
    iframe.src = url;
    iframe.id = "ifo" + iframe_open_instances;
    iframe.style.border="none";
    iframe.style.width="0px";
    iframe.style.height="0px";
    iframe.style.visbility="hidden";
    document.body.appendChild(iframe);
    iframe.onload = function() {
        var response = iframe.contentDocument.body.innerHTML;
        var agent = navigator.userAgent.toLowerCase();
        var is_firefox = (agent.indexOf('firefox') != -1);
        if (!is_firefox)
            document.body.removeChild(iframe);
    };
}

function remote_change(obj,prefixe,url_remote_change,type_data)
{
    try
    {
        // recherche du code ecran
        var objForm = obj.form;
        var code_ecran = eval("objForm." + prefixe + "code_ecran.value");
        // recherche du nom du champ
        var name = obj.name.substring(prefixe.length);
        // recherche de la valeur du champ
        if (obj.value || obj.value == '') {
            if (obj.type=='checkbox') {
                if (obj.checked) {
                    var value = obj.value;
                }
                else {
                    var value = null;
                }
            } else {
                if (type_data == 'decimal') {
                    $res = eval_calcul(obj.value,prefixe);
                    if (!$res[0]) return false;   // on ajoute la fonction eval_calcul() sur la value de l'input
                    else var value = res[1];
                }
                else var value = obj.value;
            }
        }
        else {
            for(var i = 0; i < obj.length; i++) {
                if (obj[i].checked)  {
                    var value = obj[i].value;
                    break;
                }
            }
        }
        // construction de l'url
        var d = new Date();
        var tc = d.getTime();
        var url = url_remote_change + '?code_ecran=' + code_ecran;
        url = url + '&name=' + name;
        url = url + '&value=' + escape(value);
        url = url + '&tc=' + tc;
        iframe_open(url);
        return true;
    }
    catch (ex)
    {
        return false;
    }
}

function jquery_remote_change(obj, prefixe, url_jquery_remote_change, type_data, precision, ne_pas_forcer, script_complementaire) {
    try
    {
        var tmpname = obj.name.substring(0,prefixe.length + 5);
        if (tmpname == prefixe + 'tmpcb') { // cas particulier des COMBO EXTJS
            var obj2 = jQuery('form[name="' + obj.form.name + '"] input[name="' + obj.id.substring(1) + '"]');
            obj = obj2[0];
        }
        // recherche du code_ecran
        var code_ecran = jQuery('form[name="' + obj.form.name + '"] input[name="' + prefixe + 'code_ecran"]').val();
        // déterminatino du type_d'ecran
        var ecran_fiche = code_ecran.substring(prefixe.length + 3) == "031";
        // recherche du nom du champ
        var name = obj.name.substring(prefixe.length);
        // recherche du type de objet
        var type = obj.type;
        // 2 selecteurs gérés "input" et "select"
        var type_selecteur = (type == "text" || type == "hidden") ? "input" : "select";
        // recherche de la cle
        if (ecran_fiche) {
            var cle_enregistrement = jQuery('form ' + type_selecteur + '[name="' + prefixe + '"prim0]"').val();
        }
        else {
            var cle_enregistrement = name.substring(0,name.indexOf("_",0));
        }
        // Mise à jour de la valeur du champ avant transmission
        if (type_data == 'decimal') {
            res = eval_calcul(obj.value,prefixe);
            var value = res[1];
            jQuery(obj).val(value);
            if (!res[0]) return false;   // on ajoute la fonction eval_calcul() sur la value de l'input
        }
        if (obj.value || obj.value == '') {
            if (obj.type=='checkbox' && !obj.checked) {
                var value = null;
            }
            else {
                var value = obj.value;
            }
        }
        else {
            for(var i = 0; i < obj.length; i++) {
                if (obj[i].checked)  {
                    var value = obj[i].value;
                    break;
                }
            }
        }
        // recuperation du traitement d'extraction Excel
        var code1 = jQuery('#' + prefixe + 'code_1').val();
        var code2 = jQuery('#' + prefixe + 'code_2').val();
        var code3 = jQuery('#' + prefixe + 'code_3').val();
        // lancer le script complementaire avant le post
        if (script_complementaire > '') eval(script_complementaire);
        // preperation url à appeler
        if (url_jquery_remote_change == '') var url_jquery_remote_change = '/jquery/jquery_remote_change.php';
        // transmission du triplet (code_ecran, name, value)
        jQuery.post(url_jquery_remote_change,{code_ecran:code_ecran,name:name,value:value,code_1:code1,code_2:code2,code_3:code3},function(resultat_html){
            var maj_valeur = resultat_html.split("|");
            // maj_valeur[0] : OK ou KO
            // maj_valeur[1] : Nouvelle valeur qui remplace la precedente
            // maj_valeur[2] : Message d'erreur ou d'info
            // maj_valeur[3] : Javascript à executer en complément
            switch (type_data) {
            case "decimal":
                if (maj_valeur[0] == "OK") {
                    res = eval_calcul(maj_valeur[1],prefixe);
                    new_value = res[1];
                }
                else new_value = maj_valeur[1];
                jQuery('form ' + type_selecteur + '[name="' + prefixe + name + '"]').val(round(CharToFloat(new_value,false),precision,ne_pas_forcer));
                if (jQuery("#html_message_error").text() > '') leave;
            break;
            case "entier":
                if (type == 'checkbox') {
                    jQuery('form ' + type_selecteur + '[name="' + prefixe + name + '"]').attr("checked",value == maj_valeur[1]);
                }
                else {

                    jQuery('form ' + type_selecteur + '[name="' + prefixe + name + '"]').val(maj_valeur[1]);
                }
            break;
            default:
                jQuery('form ' + type_selecteur + '[name="' + prefixe + name + '"]').val(maj_valeur[1]);
            }
            if (maj_valeur[0] == 'OK') {
                // afficher un message d'info s'il existe
                jQuery('#' + prefixe + 'html_message_info').text(maj_valeur[2]);
                jQuery('#' + prefixe + 'html_message_error').text('');
            }
            else {
                // afficher un message d'erreur s'il existe
                jQuery('#' + prefixe + 'html_message_info').text('');
                jQuery('#' + prefixe + 'html_message_error').text(maj_valeur[2]);
            };
            if (typeof maj_valeur[3] != "undefined") {
                eval(maj_valeur[3]);
            }
        });
    }
    catch (ex)
    {
        return false;
    }
}


function jquery_post(code_ecran,name,value,prefixe,type,url_jquery_remote_change,type_data,precision,ne_pas_forcer) {
    try
    {
        // transmission du triplet (code_ecran,name,value)
        jQuery.post(url_jquery_remote_change,{code_ecran:code_ecran,name:name,value:value},function(resultat_html){
            var maj_valeur = resultat_html.split("|");
            // maj_valeur[0] : OK ou KO
            // maj_valeur[1] : Nouvelle valeur qui remplace la precedente
            // maj_valeur[2] : Message d'erreur ou d'info
            // maj_valeur[3] : Javascript à executer en complément
            switch (type_data) {
            case "decimal":
                jQuery("form input[name=" + prefixe + name + '"]').val(round(CharToFloat(eval_calcul(maj_valeur[1],prefixe),false),precision,ne_pas_forcer));
                if (jQuery("#html_message_error").text() > '') leave;
            break;
            case "integer":
                if (type == 'checkbox') {
                    jQuery("form input[name=" + prefixe + name + '"]').attr("checked",value == maj_valeur[1]);
                }
                else {
                    jQuery("form input[name=" + prefixe + name + '"]').val(maj_valeur[1]);
                }
            break;
            default:
                jQuery("form input[name=" + prefixe + name + '"]').val(maj_valeur[1]);
            }
            if (maj_valeur[0] == 'OK') {
                // afficher un message d'info s'il existe
                jQuery('#' + prefixe + 'html_message_info').text(maj_valeur[2]);
                jQuery('#' + prefixe + 'html_message_error').text('');
            }
            else {
                // afficher un message d'erreur s'il existe
                jQuery('#' + prefixe + 'html_message_info').text('');
                jQuery('#' + prefixe + 'html_message_error').text(maj_valeur[2]);
            };
            if (typeof resultat[3] != "undefined") {
                eval(resultat[3]);
            }
        });
        return true;
    }
    catch (ex)
    {
        return false;
    }
}

function remote_total(obj,prefixe,url_remote_total)
{
    try
    {
        // recherche du code ecran
        var code_ecran = eval("obj.form." + prefixe + "code_ecran.value");
        // construction de l'url
        var d = new Date();
        var tc = d.getTime();
        var url = url_remote_total + '?code_ecran=' + code_ecran;
        url = url + '&rechm_array=' + arraySerialize(rechmArray);
        url = url + '&tc=' + tc;
        jQuery.getScript(url);
        return true;
    }
    catch (ex)
    {
        return false;
    }
}

function griser_page()
{
  var obj = id2element("thepage");
  if (obj) {
    if (window.opera) {
        // fond blanc
        obj.style.visibility = "hidden";
    }
    else {
        // effet de transparence pour IE et Firefox
        obj.style.opacity = 0.4;
        obj.style.filter = "alpha(opacity=40)";
    }
  }
}

// --------------------
// Helpers pour layout
// --------------------

// positions des scrollbars
function getScrollXY()
{
	var scrOfX = 0, scrOfY = 0;
	if( typeof( window.pageYOffset ) == 'number' ) {
		scrOfY = window.pageYOffset;
		scrOfX = window.pageXOffset;
	} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
		scrOfY = document.body.scrollTop;
		scrOfX = document.body.scrollLeft;
	} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
		scrOfY = document.documentElement.scrollTop;
		scrOfX = document.documentElement.scrollLeft;
	}
	return [ scrOfX, scrOfY ];
}
function date(date_du_jour){
    var olddt = date_du_jour;
    if (date_du_jour == 'Y-m-d' || date_du_jour == 'd/m/Y') {
        dt= new Date();
    }
    else {
        var dt=date_du_jour;
    }
    var Y=dt.getFullYear();
    var M=dt.getMonth()+1;
    if (M<10) {M="0"+M;}
    var D=dt.getDate();
    if (D<10) {D="0"+D;}
    if (olddt.indexOf("-") >= 0)
         return Y+"-"+M+"-"+D;
    else return D+"/"+M+"/"+Y;
}

//Fonction permettant d'effectuer une pause de x millisecondes
function sleep(time) {

    d=new Date();
    diff=0;
    while(diff < time){
        n=new Date();
        diff=n-d;
    }
}

//Fonction qui met à jour le total d'une colonne
function maj_total_colonne(numero,resultat,id_nom_champ) {
    if (typeof resultat[numero] != "undefined") jQuery("#" + id_nom_champ).text(resultat[numero]);
}

function isformatDate(dtStr) {
    var pos1=dtStr.indexOf("/");
    var pos2=dtStr.indexOf("/",pos1+1);
    return (pos1 == 2 && pos2 == 5 && dtStr.length < 11);
}

/* Fonction pour evaluer les formules de Calcule dans l'input */
function eval_calcul(formule,prefixe)
{
    var Valchar = formule + ""
    if (Valchar.indexOf(",") >= 0)
        Valchar = Valchar.replace(",", ".");
    if (Valchar.indexOf("%2C") >= 0)
        Valchar = Valchar.replace("%2C", ".");
    while (Valchar.indexOf(" ") >= 0)
        Valchar = Valchar.replace(" ", "");
    while (Valchar.indexOf("%20") >= 0)
        Valchar = Valchar.replace("%20", "");
    while (Valchar.indexOf("&nbsp;") >= 0)
        Valchar = Valchar.replace("&nbsp;", "");
    var reg = new RegExp(/[^\d\+\-\*\/\s\.\,\(\)]/);
    var sortie = new Array()
    if(reg.test(Valchar))
    {
        jQuery("#" + prefixe + "html_message_error").text("La saisie '" + formule + "' est incorrecte !")
        sortie[0] = false;
        sortie[1] = 0;
    }
    else
    {
        jQuery("#" + prefixe + "html_message_error").text("")
        sortie[0] = true;
        sortie[1] = eval(Valchar);
    }
    return sortie;
}

/* Fonction pour creer des calendriers */
function ext_form_datefield(object_name,allowblank,onchange,date_format,default_value,min_value,max_value,anchor) {
    var string_calendar = "var " + object_name + " = new Ext.form.DateField({";
    string_calendar += "format:'d/m/Y',allowBlank:'" + allowblank  + "',";
    string_calendar += "applyTo:'"    + object_name + "'";
    if (typeof date_format != "undefined")   string_calendar += ",format:'" + date_format + "'";
    if (typeof default_value != "undefined") string_calendar += ",value:'" + default_value + "'";
    if (typeof min_value != "undefined")     string_calendar += ",minValue:'" + min_value + "'";
    if (typeof max_value != "undefined")     string_calendar += ",maxValue:'" + max_value + "'";
    if (typeof anchor != "undefined")        string_calendar += ",anchor: '" + addslashes(anchor) + "'";
    if (typeof onchange != "undefined") {
        string_calendar += ",listeners: {";
        string_calendar += "'select': function fn(field_obj, new_value, old_value) {";
        string_calendar += onchange;
        string_calendar += "}";
        string_calendar += "}";
    }
    string_calendar += "});";
    eval(string_calendar);
}

/* Fonction pour creer les combos avec recherche rapide par saisie des premiers caracteres */
function ext_form_combobox(object_name,minlistwidth,store,emptytext,selectonfocus,onchange,applyto,transform,width) {
    var string_combo  = "var " + object_name + " = new Ext.form.ComboBox({";
    string_combo += "typeAhead: true,triggerAction: 'all',forceSelection: true,valueField: 'value'";
    if (typeof store != "undefined")         string_combo += ",store: " + addslashes(store);
    if (typeof emptytext != "undefined")     string_combo += ",emptyText: '" + addslashes(emptytext) + "'";
    if (typeof selectonfocus != "undefined") string_combo += ",selectOnFocus: " + selectonfocus;
    if (typeof applyto != "undefined")       string_combo += ",applyTo: '" + applyto + "'";
    if (typeof minlistwidth != "undefined")  string_combo += ",minListWidth: " + minlistwidth;
    if (typeof transform != "undefined")     string_combo += ",transform: '" + transform + "'";
    if (typeof width != "undefined")         string_combo += ",width: '" + width + "'";
    if (typeof onchange != "undefined") {
        string_combo += ", listeners: {";
        string_combo += "'select': function fn(combo_obj, combo_record, combo_index) {";
        string_combo += onchange;
        string_combo += "}";
        string_combo += "}";
    }
    string_combo += "});";
    eval(string_combo);
}

function function_onblur_date(d) {
    d = d.replace(/[^0-9]/g,'');
    var n = d;
    if (d.length>=2) n = d.substr(0,2)+'/'+d.substr(2,2);
    if (d.length>=4) n+= '/'+d.substr(4,4);
    return n;
}

function ControleSaisieDate(e) {
    var keynum;
    if(window.event) keynum = e.keyCode;
    else
    if(e.which) keynum = e.which;
    return((keynum>34 && keynum<58)||(keynum>95 && keynum<106)||keynum==8||keynum==9);
}

function MasqueSaisieDate(obj, e) {
    var ch;
    var ch_gauche, ch_droite;
    var keynum;
    if(window.event) keynum = e.keyCode;
    else
    if(e.which) keynum = e.which;
    if (((keynum > 47) && (keynum < 58))||((keynum > 95) && (keynum < 106))){
        ch = obj.value;
        ch.toString();
        if ( ( (ch.slice(2,3)) != ('/') ) && (ch.length >= 2) ) {
            ch_gauche = ch.slice(0,2);
            ch_droite = ch.slice(2);
            obj.value = ch_gauche + '/' + ch_droite;
        }
        if ( ( (ch.slice(5,6)) != ('/') ) && (ch.length >= 5) ) {
            ch_gauche = ch.slice(0,5);
            ch_droite = ch.slice(5);
            obj.value = ch_gauche + '/' + ch_droite;
        }
        if (ch.length == 10) obj.blur();
    }
    return;
}

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