// JavaScript Document

function time() {
    return Math.floor(new Date()
            .getTime() / 1000);
}


/* 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 casesrad;
    var caseschk;
    var $id = $('#' + id);
    $id.find('input, textarea, select').val('');
    caseschk = $id.find(':checkbox'); // On récupère les cases à cocher de la zone à contrôler
    caseschk.each(function () {
        $(this).attr('checked', false);
    });

    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) {
    var tab_id;
    if (id != undefined) {
        if (id != '') {
            if (external == undefined) {
                external = false;
            }

            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() {
    var existoblig;
    $('input, textarea').attr('readonly', 'readonly');
    $('select').attr('disabled', true);
    $('input:checkbox').attr('disabled', true);
    $('input:radio').attr('disabled', true);
    $("#oblig").hide();
    $("img").each(function () {
        var newsrc;
        var source = $(this).src;
        if (source != undefined) {
            // Test sur icône "obligatoire"
            existoblig = source.indexOf("oblig.png", 0);
            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) {
    var tab_id;
    if (id != undefined) {
        if (id != '') {
            if (external == undefined) {
                external = false;
            }

            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 hauteur_mnu;
    var $menup;
    var $body = $('body');
    $body.addClass('base');
    $body.append('<div class="waitajaxOverlay" id="waitajaxOverlay"></div>');
    $menup = $('#menup');
    if ($menup.length > 0) {
        $menup.superfish({
            speed: 'fast',
            onInit: function () {
                $(this).find('ul').css('display', 'none');
            }
        });
        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;
    var $numtab = '';
    var $id_onglets;
    $id_onglets = $('#' + idonglets);
    $ntab = $('#ntab');

    if ($id_onglets.length > 0) {
        if ($ntab.length > 0) {
            $numtab = $ntab.val();
        }

        if ($numtab == '') {
            $id_onglets.tabs({
                activate: function (event, ui) {
                    if ($ntab.length > 0) {
                        $ntab.val($id_onglets.tabs('option', 'active'));
                    }
                    //alert($( '#'+idonglets ).tabs('option','active'));
                }
            });
        }
        else {
            $id_onglets.tabs({
                active: $numtab,
                activate: function (event, ui) {
                    if ($ntab.length > 0) {
                        $ntab.val($id_onglets.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) {
    var $id;
    if (action == undefined) {
        action = 'change';
    }

    $id = $('#' + id);
    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) {
    var $id;
    if (action == undefined) {
        action = 'change';
    }

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

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

    $id = $('#' + id);
    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 == '') || (url == undefined)) {
                    window.location.href = $(this).val();
                }
                else {
                    window.location.href = url;
                }
            });
            break;
        case 'click' :
            $id.click(function () {
                if ((url == '') || (url == undefined)) {
                    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 dialog;
            var urlfpop;
            var name;
            var urlwpop;
            var fenprm;
            var centeredX;
            var centeredY;
            var hauteur;
            var largeur;
            var urlpop;
            var url = $(this).attr('lnk');
            if (url != undefined) {
                if (url != '') {
                    window.location.href = url;
                }
            }
            else {
                urlpop = $(this).attr('lnkpop');
                largeur = 0;
                hauteur = 0;
                centeredY = 0;
                centeredX = 0;
                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 {
                    urlwpop = $(this).attr('lnkwpop');
                    if (urlwpop != undefined) {
                        if ((urlwpop != '') && (messwarn != '')) {
                            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;

                             dialog = 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 {
                        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) {
    var $id;
    if (action == undefined) {
        action = 'change';
    }

    $id = $('#' + id);
    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 n, prec, sep, dec, s, toFixedFix;
    var $id = $('#' + id);
    var val_champ = $id.text();
    val_champ = val_champ.replace(/[^0-9+\-Ee.]/g, '');
    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) {
    var $id;
    if (action == undefined) {
        action = 'change';
    }
    $id = $('#' + id);
    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 newval;
    var expr;
    var $id = $('#' + id);
    var val_champ = $id.val();
    val_champ = val_champ.replace(",", ".");
    newval = 0;
    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) {
    var $id;
    if ((action == undefined) || (action == '')) {
        action = 'change';
    }
    $id = $('#' + id);
    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) {

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

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

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

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

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

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

    $id = $('#' + id);
    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) {
    var currclass;
    var $id = $('#' + id);
    var $idcible = $('#' + idcible);

    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 != '') {
        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) {
    var $id;
    if (newclass == undefined) {
        newclass = '';
    }

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

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

    $id = $('#' + id);
    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) {
    var currclass;
    var $idcible = $('#' + idcible);

    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 != '') {
        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) {
    var $id;
    if (newclass == undefined) {
        newclass = '';
    }

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

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

    $id = $('#' + id);
    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 i;
    var start = new Date().getTime();
    for (i = 0; i < 1e7; i++) {
        if ((new Date().getTime() - start) > tpssec) {
            break;
        }
    }
}
