// JavaScript Document

/* Fonction JQuery "générales" */

(function ($) {
    $.fn.extend({
        center: function () {
            return this.each(function () {
                var top = ($(window).height() - $(this).outerHeight()) / 2;
                var left = ($(window).width() - $(this).outerWidth()) / 2;
                $(this).css({position: 'absolute', margin: 0, top: (top > 0 ? top : 0) + 'px', left: (left > 0 ? left : 0) + 'px'});
            });
        }
    });
})(jQuery);

jQuery.fn.are = function (selector) {
    return !!selector && this.filter(selector).length == this.length;
};

$.urlParam = function (name) {
    var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
    if (results == null) {
        return null;
    }
    else {
        return results[1] || 0;
    }
};

/**
 *
 * Efface tous les champs d'un élément
 *
 * @param id
 */
function clear_form_elements(id) {
    var $id = $('#' + id);
    $id.find('input, textarea, select').val('');
    var caseschk = $id.find(':checkbox'); // On récupère les cases à cocher de la zone à contrôler
    caseschk.each(function () {
        $(this).attr('checked', false);
    });

    var casesrad = $id.find(':checkbox'); // On récupère les cases à cocher de la zone à contrôler
    casesrad.each(function () {
        $(this).attr('checked', false);
    });
}

/**
 *
 * Mise en lecture seule d'un ou plusieurs champs
 *
 * @param id
 * @param external
 */
function readonly_id(id, external) {
    if (id != undefined) {
        if (id != '') {
            if (external == undefined) {
                external = false;
            }

            var tab_id = id.split('-');
            $.each(tab_id, function (index, value) {
                var $value;
                if (external == false) {
                    $value = $('#' + value);
                }
                else {
                    $value = window.opener.$('#' + value);
                }
                if ($value.length != 0) {
                    if ($value.is('input[type=button]')) {
                        $value.attr('disabled', true);
                        $value.attr('class', 'bton_fmarr_dis');
                    }
                    if ($value.is('input, textarea')) {
                        $value.attr('readonly', 'readonly');
                    }
                    if ($value.is('select')) {
                        $value.attr('disabled', true);
                    }
                    if ($value.is('input:checkbox')) {
                        $value.attr('disabled', true);
                    }
                    if ($value.is('input:radio')) {
                        $value.attr('disabled', true);
                    }
                }
            });
        }
    }
}

/**
 * Met tous les champs en lecture seule
 */
function readonly_all() {
    $('input, textarea').attr('readonly', 'readonly');
    $('select').attr('disabled', true);
    $('input:checkbox').attr('disabled', true);
    $('input:radio').attr('disabled', true);
    $("#oblig").hide();
    var existoblig ;
    $("img").each(function () {
        var source = $(this).src;
        if (source != undefined) {
            // Test sur icône "obligatoire"
            existoblig = source.indexOf("oblig.png", 0);
            var newsrc = source.substring(0, existoblig) + "none.gif";
            if (existoblig != -1) {
                $(this).attr('src',newsrc);
                $(this).alt = "";
            }
            // Test sur icône "calendrier"
            existoblig = source.indexOf("calendar.png", 0);
            if (existoblig != -1) {
                $(this).attr('src',newsrc);
                $(this).alt = "";
            }
            // Test sur icône "annuler"
            existoblig = source.indexOf("raz.png", 0);
            if (existoblig != -1) {
                $(this).attr('src',newsrc);
                $(this).alt = "";
            }
            // Test sur icône "envoi mail"
            existoblig = source.indexOf("mail.png", 0);
            if (existoblig != -1) {
                $(this).attr('src',newsrc);
                $(this).alt = "";
            }
            // Test sur icône "aide"
            existoblig = source.indexOf("help.png", 0);
            if (existoblig != -1) {
                $(this).attr('src',newsrc);
                $(this).alt = "";
            }
        }
    });
}

/**
 *
 * Met tous les champs en lecture seule dans un ID
 *
 * @param id
 */
function readonly_all_id(id) {
    var $id = $('#' + id);
    $id.find('input, textarea').attr('readonly', 'readonly');
    $id.find('select').attr('disabled', true);
    $id.find('input:checkbox').attr('disabled', true);
    $id.find('input:radio').attr('disabled', true);
}


/**
 * Rend tous les champs accessibles
 */
function readok_all() {
    $('input, textarea').removeAttr('readonly');
    $('select').removeAttr('disabled');
    $('input:checkbox').removeAttr('disabled');
    $('input:radio').removeAttr('disabled');
}

/**
 *
 * Rend certains champs accessibles
 *
 * @param id
 * @param external
 */
function readok_id(id, external) {
    if (id != undefined) {
        if (id != '') {
            if (external == undefined) {
                external = false;
            }

            var tab_id = id.split('-');
            $.each(tab_id, function (index, value) {
                var $value;
                if (external == false) {
                    $value = $('#' + value);
                }
                else {
                    $value = window.opener.$('#' + value);
                }
                if ($value.length != 0) {
                    if ($value.is('input[type=button]')) {
                        $value.removeAttr("disabled");
                        $value.attr('class', 'bton_std');
                    }
                    if ($value.is('input, textarea')) {
                        $value.removeAttr('readonly');
                    }
                    if ($value.is('select')) {
                        $value.removeAttr('disabled');
                    }
                    if ($value.is('input:checkbox')) {
                        $value.removeAttr('disabled');
                    }
                    if ($value.is('input:radio')) {
                        $value.removeAttr('disabled');
                    }
                }
            });
        }
    }
}

/**
 *
 * Met tous les champs en lecture ok dans un ID
 *
 * @param id
 */
function readok_all_id(id) {
    var $id = $('#' + id);
    $id.find('input, textarea').removeAttr('readonly');
    $id.find('select').removeAttr('disabled');
    $id.find('input:checkbox').removeAttr('disabled');
    $id.find('input:radio').removeAttr('disabled');
}

/**
 *
 * Sélectionne tout le contenu d'un champ
 *
 * @param id
 */
function select_all_id(id) {
    $('#' + id + ' option').prop('selected', 'selected');
}

/**
 *
 * Pose le focus sur le premier champ actif d'un formulaire
 *
 * @constructor
 */
function Focus_first() {
    $(":input:enabled:visible:not([readonly]):first").focus();
}

/**
 * Initialisation du body des pages
 */
function init_Body() {
    var $body = $('body');
    $body.addClass('base');
    $body.append('<div class="waitajaxOverlay" id="waitajaxOverlay"></div>');
    var dispHeight = $(document).height();
    var dispWidth = $(document).width();
    $('.waitajaxOverlay').css('height', dispHeight).css('width', dispWidth);
    $body.append('<div class="waitajax" id="waitajax"></div>');
    var $menup = $('#menup');
    if ($menup.length > 0) {
        $menup.superfish({
            speed: 'fast',
            onInit: function () {
                $(this).find('ul').css('display', 'none');
            }
        });
        var hauteur_mnu = $menup.height();
        $menup.css("margin-left", "5px");
        $('#barre_menu').height(hauteur_mnu);
    }
    if ($('#imprim').length > 0)
        init_new_fen('imprim', 'impression', 'click');
    if ($('#formr').length > 0) {
        init_lst_reload();
        clear_simple_rech();
        init_lst_valid();
        init_lst_validcompl();
    }
    init_all_rech_compl();
    init_fensaisie('lnkext_cal', (screen.width - 20), (screen.height - 20));
    init_fensaisie('lnkext_fact', (screen.width - 20), (screen.height - 20));
}

/**
 * Initialisation des affichages à onglets sur un ID
 *
 * @param idonglets
 */
function init_Tabs(idonglets) {
    var $ntab = '';

    if ($('#' + idonglets).length > 0) {
        if ($('#ntab').length > 0) {
            $ntab = $('#ntab').val();
        }

        if ($ntab == '') {
            $('#' + idonglets).tabs({
                activate: function (event, ui) {
                    if ($('#ntab').length > 0) {
                        $('#ntab').val($('#' + idonglets).tabs('option', 'active'));
                    }
                    //alert($( '#'+idonglets ).tabs('option','active'));
                }
            });
        }
        else {
            $('#' + idonglets).tabs({
                active: $ntab,
                activate: function (event, ui) {
                    if ($('#ntab').length > 0) {
                        $('#ntab').val($('#' + idonglets).tabs('option', 'active'));
                    }
                    //alert($( '#'+idonglets ).tabs('option','active'));
                }
            });
        }
    }
}

/**
 *
 * Ajout d'une fonction sur clic d'un ID
 *
 * @param idclick
 * @param func
 * @param prm
 */
function add_func_click(idclick, func, prm) {
    $("#" + idclick).click(function () {
        if (func != "") {
            switch (func) {
                case "sclose" :
                    if (prm != "") {
                        self.close(prm);
                    }
                    else {
                        self.close();
                    }
                    break;
                case "loc" :
                    break;
                default :
                    break;
            }

        }
    });
}

/**
 *
 * Fonction de submission automatique d'un formulaire
 *
 * @param id
 * @param action
 * @param idform
 */
function init_autosubmit(id, action, idform) {
    if (action == undefined) {
        action = 'change';
    }

    switch (action) {
        case 'change' :
            $('#' + id).change(function () {
                $('#' + idform).submit();
            });
            break;
        case 'click' :
            $('#' + id).click(function () {
                $('#' + idform).submit();
            });
            break;
        default :
            break;
    }
}

/**
 * Fonction de changement automatique d'une url
 *
 * @param id id à surveiller @type string
 * @param action 'change' ou 'click' @type string
 * @param url @type string
 * @param intype @type string on "prend" l'url dans le type
 */
function init_autohref(id, action, url, intype) {
    if (action == undefined) {
        action = 'change';
    }

    if (intype == undefined) {
        intype = false;
    }

    if (url == undefined) {
        url = '';
    }

    if (intype == true) {
        // On récupère l'URL
        url = $('#' + id).attr('title');
        if ((url == '') || (url == undefined)) {
            url = $('#' + id).attr('lnk');
        }
    }
    else {
        if (url == '') {
            // On récupère l'URL
            url = $('#' + id).href;
        }
    }

    switch (action) {
        case 'change' :
            $('#' + id).change(function () {
                if (url == '') {
                    window.location.href = $(this).val();
                }
                else {
                    window.location.href = url;
                }
            });
            break;
        case 'click' :
            $('#' + id).click(function () {
                if (url == '') {
                    window.location.href = $(this).val();
                }
                else {
                    window.location.href = url;
                }
            });
            break;
        default :
            break;
    }
}

/**
 * Fonction de changement automatique d'une url sur une image (en partant d'une classe particulière
 *
 * @param classe
 * @param messwarn
 */

function init_autohref_classe(classe, messwarn) {
    if (messwarn == undefined) {
        messwarn = '';
    }

    if (classe != '') {
        $('.' + classe).click(function () {
            var url = $(this).attr('lnk');
            if (url != undefined) {
                if (url != '') {
                    window.location.href = url;
                }
            }
            else {
                var urlpop = $(this).attr('lnkpop');
                var largeur = 0;
                var hauteur = 0;
                var centeredY = 0;
                var centeredX = 0;
                var fenprm = '';
                if (urlpop != undefined) {
                    if (urlpop != '') {
                        largeur = parseInt($(this).attr('largeur'));
                        if (largeur == 0) {
                            largeur = $(window).width();
                        }
                        hauteur = parseInt($(this).attr('hauteur'));
                        if (hauteur == 0) {
                            hauteur = $(window).height();
                        }

                        fenprm = 'height=' + hauteur +
                            ',width=' + largeur +
                            ',toolbar=0' +
                            ',scrollbars=1' +
                            ',status=0' +
                            ',resizable=0' +
                            ',location=0' +
                            ',menuBar=0';

                        centeredY = (screen.height - hauteur) / 2;
                        centeredX = (screen.width - largeur) / 2;

                        window.open(urlpop, $(this).attr('name'), fenprm + ',left=' + centeredX + ',top=' + centeredY).focus();
                    }
                }
                else {
                    var urlwpop = $(this).attr('lnkwpop');
                    if (urlwpop != undefined) {
                        if ((urlwpop != '') && (messwarn != '')) {
                            var name = $(this).attr('name');

                            largeur = parseInt($(this).attr('largeur'));
                            if (largeur == 0) {
                                largeur = screen.width;
                            }
                            hauteur = parseInt($(this).attr('hauteur'));
                            if (hauteur == 0) {
                                hauteur = screen.height;
                            }

                            fenprm = 'height=' + hauteur +
                                ',width=' + largeur +
                                ',toolbar=0' +
                                ',scrollbars=1' +
                                ',status=0' +
                                ',resizable=0' +
                                ',location=0' +
                                ',menuBar=0';

                            centeredY = (screen.height - hauteur) / 2;
                            centeredX = (screen.width - largeur) / 2;

                            new Messi('Merci de confirmer',
                                {title: 'Confirmer',
                                    buttons: [{id: 0, label: 'Confirmer', val: 'Y'},
                                        {id: 1, label: 'Annuler', val: 'N'}],
                                    callback: function(val) {
                                        if (val == 'Y') {
                                            window.open(urlwpop, name, fenprm + ',left=' + centeredX + ',top=' + centeredY).focus();
                                        }
                                        else {
                                            return false;
                                        }
                                    }
                                });
                        }
                    }
                    else {
                        var urlfpop = $(this).attr('namefn');
                        if (urlfpop != undefined) {
                            if (urlfpop != '') {
                                eval(urlfpop);
                            }
                        }
                    }
                }
            }
        });
    }
}

/**
 *
 * Ajout d'une fonction de retour automatique (sur clic ou changement)
 *
 * @param id
 * @param action
 */
function init_back(id, action) {
    if (action == undefined) {
        action = 'change';
    }
    switch (action) {
        case 'change' :
            $('#' + id).change(function () {
                parent.history.back();
                return false;
            });
            break;
        case 'click' :
            $('#' + id).click(function () {
                parent.history.back();
                return false;
            });
            break;
        default :
            break;
    }
}

/**
 *
 * Formatage d'un nombre contenu dans un ID
 *
 * @param id
 * @param nb_dec
 * @param car_dec
 * @param car_sep
 */
function number_format(id, nb_dec, car_dec, car_sep) {
    var $id = $('#' + id);
    var val_champ = $id.text();
    val_champ = val_champ.replace(/[^0-9+\-Ee.]/g, '');
    var n = !isFinite(+val_champ) ? 0 : +val_champ,
        prec = !isFinite(+nb_dec) ? 0 : Math.abs(nb_dec),
        sep = (typeof car_sep === 'undefined') ? ',' : car_sep,
        dec = (typeof car_dec === 'undefined') ? '.' : car_dec,
        s = '',
        toFixedFix = function (n, prec) {
            var k = Math.pow(10, prec);
            return '' + (Math.round(n * k) / k)
                .toFixed(prec);
        };
    // Fix for IE parseFloat(0.55).toFixed(0) = 0;
    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n))
        .split('.');
    if (s[0].length > 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
    }
    if ((s[1] || '')
        .length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1)
            .join('0');
    }
    $id.text(s + '');
}


/**
 *
 * Fonction de formatage monétaire automatique
 *
 * @param id
 * @param nb_dec
 * @param car_dec
 * @param car_sep
 * @param action
 */
function init_number_format(id, nb_dec, car_dec, car_sep,action) {
    if (action == undefined) {
        action = 'change';
    }
    switch (action) {
        case 'change' :
            $('#' + id).change(function () {
                number_format(id, nb_dec, car_dec, car_sep);
            });
            break;
        case 'click' :
            $('#' + id).click(function () {
                number_format(id, nb_dec, car_dec, car_sep);
            });
            break;
        default :
            break;
    }
}

/**
 *
 * Formatage décimal du contenu d'un ID
 *
 * @param id
 * @param nbdeci
 */
function fdeci(id, nbdeci) {
    var $id = $('#' + id);
    var val_champ = $id.val();
    var newval = 0;
    var expr = new RegExp("^[\+\-]?[0-9]+(\.[0-9]{0,})?$", "gi");
    //var expr = new RegExp("^[0-9]*$","gi");
    if (expr.test(val_champ)) {
        if (val_champ != '') {
            newval = parseFloat(val_champ);
        }
    }
    newval = newval.toFixed(parseInt(nbdeci));
    $id.val(newval);
}

/**
 *
 * Fonction de formatage automatique à 'nbdeci' chiffres après la virgule
 *
 * @param id
 * @param nbdeci
 * @param action
 */
function init_fdeci(id, nbdeci, action) {
    if ((action == undefined) || (action == '')) {
        action = 'change';
    }
    switch (action) {
        case 'change' :
            $('#' + id).change(function () {
                fdeci(id, nbdeci);
            });
            break;
        case 'click' :
            $('#' + id).click(function () {
                fdeci(id, nbdeci);
            });
            break;
        default :
            break;
    }
}

/**
 * Fonction de mise à zéro d'un champ
 *
 * @param id id à surveiller @type string
 * @param idcible id (ou liste, séparée par '-') à mettre à zéro @type string
 * @param action 'change' ou 'click' @type string
 */
function init_autoraz(id, idcible, action) {

    if (idcible != undefined) {
        if (idcible != '') {
            if (action == undefined) {
                action = 'change';
            }

            switch (action) {
                case 'change' :
                    $('#' + id).change(function () {
                        var tab_id = idcible.split('-');
                        $.each(tab_id, function (index, value) {
                            if ($('#' + value).length != 0) {
                                $('#' + value).val('');
                            }
                        });
                    });
                    break;
                case 'click' :
                    $('#' + id).click(function () {
                        var tab_id = idcible.split('-');
                        $.each(tab_id, function (index, value) {
                            if ($('#' + value).length != 0) {
                                $('#' + value).val('');
                            }
                        });
                    });
                    break;
                default :
                    break;
            }
        }
    }
}

function init_display_id(id, idpop, centre, action) {
    if (centre == undefined) {
        centre = true;
    }

    if (action == undefined) {
        action = 'change';
    }

    switch (action) {
        case 'change' :
            $('#' + id).change(function () {
                if (centre == true) {
                    $('#' + idpop).center();
                }
                $('#' + idpop).show();
            });
            break;
        case 'click' :
            $('#' + id).click(function () {
                if (centre == true) {
                    $('#' + idpop).center();
                }
                $('#' + idpop).show();
            });
            break;
        default :
            break;
    }
}

function init_hide_id(id, idpop, action) {
    if (action == undefined) {
        action = 'change';
    }

    switch (action) {
        case 'change' :
            $('#' + id).change(function () {
                $('#' + idpop).hide();
            });
            break;
        case 'click' :
            $('#' + id).click(function () {
                $('#' + idpop).hide();
            });
            break;
        default :
            break;
    }

}

/**
 *
 * Rend un idcible modifiable sur changement ou click d'un id
 *
 * @param id
 * @param idcible
 * @param newclass
 * @param goto
 */

function make_writeok(id, idcible, newclass, goto) {
    if ($('#' + idcible).length != 0) {
        if ($('#' + idcible).is('input, textarea')) {
            $('#' + idcible).attr('readonly', false);
        }
        if ($('#' + idcible).is('select')) {
            $('#' + idcible).attr('disabled', false);
        }
        if ($('#' + idcible).is('input:checkbox')) {
            $('#' + idcible).attr('disabled', false);
        }
    }
    if (newclass != '') {
        var currclass = $('#' + id).attr('class');
        $('#' + id).removeClass(currclass);
        $('#' + id).addClass(newclass);
    }
    if (goto == true) {
        $('#' + idcible).focus();
    }

}

/**
 *
 * Rend un idcible modifiable sur changement ou click d'un id
 *
 * @param id
 * @param idcible
 * @param newclass
 * @param action
 * @param goto
 */
function init_writeok(id, idcible, newclass, action, goto) {
    if (newclass == undefined) {
        newclass = '';
    }

    if (action == undefined) {
        action = 'click';
    }

    if (goto == undefined) {
        goto = true;
    }

    switch (action) {
        case 'change' :
            $('#' + id).change(function () {
                make_writeok(id, idcible, newclass, goto);
            });
            break;
        case 'click' :
            $('#' + id).click(function () {
                make_writeok(id, idcible, newclass, goto);
            });
            break;
        default :
            break;
    }
}

/**
 *
 * Rend un idcible non modifiable sur changement ou click d'un id
 *
 * @param id
 * @param idcible
 * @param newclass
 * @param goto
 */

function make_nowrite(id, idcible, newclass, goto) {
    if ($('#' + idcible).length != 0) {
        if ($('#' + idcible).is('input, textarea')) {
            $('#' + idcible).attr('readonly', true);
        }
        if ($('#' + idcible).is('select')) {
            $('#' + idcible).attr('disabled', true);
        }
        if ($('#' + idcible).is('input:checkbox')) {
            $('#' + idcible).attr('disabled', true);
        }
    }
    if (newclass != '') {
        var currclass = $('#' + idcible).attr('class');
        $('#' + idcible).removeClass(currclass);
        $('#' + idcible).addClass(newclass);
    }
    if (goto == true) {
        $('#' + idcible).focus();
    }

}

/**
 *
 * Rend un idcible non modifiable sur changement ou click d'un id
 *
 * @param id
 * @param idcible
 * @param newclass
 * @param action
 * @param goto
 */

function init_nowrite(id, idcible, newclass, action, goto) {
    if (newclass == undefined) {
        newclass = '';
    }

    if (action == undefined) {
        action = 'blur';
    }

    if (goto == undefined) {
        goto = false;
    }

    switch (action) {
        case 'blur' :
            $('#' + id).blur(function () {
                make_nowrite(id, idcible, newclass, goto);
            });
            break;
        case 'change' :
            $('#' + id).change(function () {
                make_nowrite(id, idcible, newclass, goto);
            });
            break;
        case 'click' :
            $('#' + id).click(function () {
                make_nowrite(id, idcible, newclass, goto);
            });
            break;
    }
}

/**
 *
 * Suppression des espaces en début en fin de chaîne
 *
 * @param texte
 * @returns {*|XML|string|void}
 */
function trimall(texte) {
    return texte.replace(/(^\s*)|(\s*$)/g, "");
}


/**
 *
 * Attente de tpssec millisecondes
 *
 * @param tpssec
 */
function sleep(tpssec) {
    var start = new Date().getTime();
    for (var i = 0; i < 1e7; i++) {
        if ((new Date().getTime() - start) > tpssec){
            break;
        }
    }
}