/**  * in_select_custom
     * @author      Plou Clément (cplou@inouit.com)
     * @version     1.1
     * @param       int checkboxWidth largeur de la checkbox, int checkboxHeight hauteur de la checkbox, int radioWidth largeur du bouton radio, int radioHeight hauteur du bouton radio, int selectWidth largeur de la liste déroulante, int selectHeight hauteur de la liste déroulante, int selectWPadding padding-right de la liste déroulante, int selectHPadding padding-top/bottom de la liste déroulante, int listWidth largeur de la liste déroulé, String elemClass class à ajouter à l'élément ciblé
*/

(function ($){
    jQuery.fn.styleIt = function(options) {
        /* Options par defaults du plugin */
        jQuery.fn.styleIt.defaults = {
            checkboxWidth   : 26,
            checkboxHeight  : 26,
            radioWidth      : 25,
            radioHeight     : 25,
            selectWidth     : 238,
            selectWPadding  : 10,
            selectHeight    : 25,
            selectHPadding  : 3,
            listWidth       : 238,
            elemClass       : 'Styled'
        };
        var opts = jQuery.extend({}, jQuery.fn.styleIt.defaults, options);
        //initialisation pour chaque élément
        return this.each(function() {

            var elemStyled = jQuery(this)
            var checkboxWidth   = opts.checkboxWidth;
            var checkboxHeight  = opts.checkboxHeight;
            var radioWidth      = opts.radioWidth;
            var radioHeight     = opts.radioHeight;
            var selectWidth     = opts.selectWidth;
            var selectWPadding  = opts.selectWPadding;
            var selectHeight    = opts.selectHeight;
            var selectHPadding  = opts.selectHPadding;
            var ulWidth         = opts.listWidth
            var elemClass       = opts.elemClass;

            var currentId = (new Date).getTime();

            var Custom = {
                init: function() {
                        elemStyled.each(function(){
                        var elem = jQuery(this);
                        var id = elem.attr('id');
                        var span,jSpan;
                        var ul,jUl,li,jLi;
                        var option;
                        var position = '0 0';

                        if(!id) {
                            currentId ++;
                            elem.attr('id','styled_'+currentId);
                        }
                        id = elem.attr('id');

                        switch(elem.attr('nodeName')) {
                            case 'INPUT': {
                                elem.css({'position' : 'absolute', 'left' : '-9999px'});
                                elem.addClass('styled');
                                span = document.createElement('span');
                                jSpan = jQuery(span);
                                jSpan.html('&nbsp;');
                                jSpan.attr('id','span_'+id);
                                jSpan.attr('checked',false);
                                jSpan.addClass(elem.attr('class'));
                                jSpan.addClass(elem.attr('type')+'Styled');
                                jSpan.addClass(elemClass);

                                if(elem.attr('type') == 'checkbox') {
                                    if(elem.attr('checked'))
                                        position = '0 -' + (checkboxHeight*2) + 'px';
                                    jSpan.css({width:checkboxWidth+'px',height:checkboxHeight+'px',backgroundPosition:position});
                                } else if(elem.attr('type') == 'radio') {
                                    if(elem.attr('checked'))
                                        position = '0 -' + (radioHeight*2) + 'px';
                                    jSpan.css({width:radioWidth+'px',height:radioHeight+'px',backgroundPosition:position});
                                }

                                elem.change(Custom.clear);
                                if(!elem.attr('disabled')) {
                                    jSpan.mousedown(Custom.pushed);
                                    jSpan.mouseup(Custom.check);
                                } else {
                                    jSpan.addClass('disabled');
                                }

                                elem.after(span);
                            }break;

                            case 'SELECT': {
                                elem.css({'position' : 'absolute', 'left' : '-9999px', 'opacity' : '0', 'filter' : 'alpha(opacity=0)', 'z-index' : '5'});
                                span = document.createElement('span');
                                jSpan = jQuery(span);
                                jSpan.attr('id','span_'+id);
                                jSpan.addClass(elem.attr('class'));
                                jSpan.addClass(elem.attr('type')+'Styled');
                                jSpan.addClass(elemClass);
                                jSpan.css({width:(selectWidth-(2*selectWPadding))+'px',height:(selectHeight-2*selectHPadding)+'px',padding:selectHPadding+'px '+selectWPadding+'px'});
                                jSpan.click(Custom.pushed);

                                ul = document.createElement('ul');
                                jUl = jQuery(ul);
                                jUl.attr('id','ul_'+id);
                                jUl.addClass('ulStyled');
                                jUl.css({width:(ulWidth)+'px',padding:selectHPadding+'px '+selectWPadding+'px'});

                                option = elem.children('option');
                                for(i = 0; i < option.length ; i++) {
                                    li = document.createElement('li');
                                    jLi = jQuery(li);
                                    jLi.attr('id',jQuery(option[i]).attr('id'));
                                    jLi.attr('class',jQuery(option[i]).attr('class'));
                                    jLi.attr('position',i);
                                    if(jQuery(option[i]).attr('selected')) {
                                        jSpan.html(jQuery(option[i]).html());
                                        //jLi.attr('selected',jQuery(option[i]).attr('selected'));
                                    }
                                    jLi.html(jQuery(option[i]).html());
                                    jLi.click(Custom.choose);

                                    jUl.append(li);
                                }

                                elem.after(span);
                                jSpan.after(ul);

                                //elem.parent().mouseleave(Custom.leave);
                                /*elem.parent().hover(
                                    function(){
                                    
                                    },
                                    function(){
                                        Custom.leave;
                                    }
                                );*/
                            }break;
                        }
                    })
                },
                pushed: function() {
                    var elem = jQuery(this).prev();
                    var height = 0;

                    switch(elem.attr('nodeName')) {
                        case 'INPUT': {
                            if(elem.attr('checked')) {

                                if(elem.attr('type') == 'checkbox') {
                                    height = checkboxHeight * 3;
                                    jQuery(this).attr('checked',false);
                                } else {
                                    height = radioHeight * 3;
                                }
                            } else {
                                if(elem.attr('type') == 'checkbox') {
                                    height = checkboxHeight;
                                    jQuery(this).attr('checked',true);
                                } else {
                                    height = radioHeight;
                                }
                            }

                            jQuery(this).css('backgroundPosition','0 -'+height+'px');
                        }break;

                        case 'SELECT': {
                            var jUl = jQuery(this).next('ul');
                            if(jUl.css('display') == 'none') {
                                jUl.show();
                            } else {
                                jUl.hide();
                            }
                        }break;
                    }
                },
                check: function() {
                    var elem = jQuery(this).prev('input');
                    var height = 0;

                    if(elem.attr('checked')) {
                        if(elem.attr('type') == 'checkbox') {
                            elem.attr('checked',false);
                            jQuery(this).css('backgroundPosition','0 0');
                            jQuery(this).attr('checked',false);
                            elem.trigger('change');
                        }
                    } else {
                        elem.attr('checked',true);
                        if(elem.attr('type') == 'checkbox') {
                            height = checkboxHeight * 2;
                        } else {
                            height = radioHeight * 2;
                        }
                        jQuery(this).css('backgroundPosition','0 -'+height+'px');
                        jQuery(this).attr('checked',true);
                        elem.trigger('change');
                    }
                },
                clear: function() {
                    jQuery('.styled').each(function() {
                        var elem = jQuery(this);

                        switch(elem.attr('nodeName')) {
                            case 'INPUT': {
                                var height = 0;

                                if(elem.attr('checked')) {
                                    if(elem.attr('type') == 'checkbox') {
                                        height = checkboxHeight * 2;
                                    } else {
                                        height = radioHeight * 2;
                                    }
                                }

                                elem.next('span').css('backgroundPosition','0 -'+height+'px');
                            }break;

                            case 'SELECT': {
                                var select = jQuery(this);
                                var jSpan = select.next('span');
                                var select = jSpan.prev('select')
                                var option = select.children('option:selected');
                                jSpan.html(option.html());
                            }break;
                        }
                    });
                },
                leave: function() {
                    var elem = jQuery(this).children('ul');
                    elem.hide();
                },
                choose: function() {
                    var jLi = jQuery(this);
                    var jUl = jLi.parent();
                    var select = document.getElementById(jUl.attr('id').replace('ul_',''));
                    select.selectedIndex = jLi.attr('position');

                    var jSpan = jUl.prev('span');
                    var elem = jSpan.prev('select')
                    var option = elem.children('option');
                    for(i = 0; i < option.length ; i++) {
                        if(jQuery(option[i]).attr('selected')) {
                            jSpan.html(jQuery(option[i]).html());
                            elem.trigger('change');
                        }
                    }

                    jUl.hide();
                    if(select.onchange)
                        select.onchange();
                }
            }
            jQuery(document).ready(Custom.init);
            jQuery(document).mouseup(Custom.clear);
        });
    };
})(jQuery);



/**  * in_sum_form
     * @author      Plou Clément (cplou@inouit.com)
     * @version     1.0
     * @param boolean label affiche le label, boolean value affiche la valeur, string override affiche la chaîne de caractère
     *
     * Plugin jQuery permettant de gérer dans un bloc (.sumBox) une liste (.sumList) de liens résumant un formulaire.
     * L'implémentation de ce plugin nécessite la présente dans le formulaire des deux bloc cité précedemment.
     *
     * <form>
     *
     *    // ...
     *
     *    <div class="sumBox">
     *       <a href="#" class="deleteAll" onclick="return false;">Supprimer tous les critères</a>
     *        <div class="sumList">
     *        </div>
     *     </div>
     *</form>
     *
     *
     * - Trois paramètres peuvent être modifiés, soit pour tous les appels de addToSum soit au cas par cas.
     *
     * //Affiche le label mais pas la valeur pour tout les input:checkbox
     * jQuery('input:checkbox').addToSum({
     *    label : 1, (1 par defaut)
     *    value : 1, (1 par defaut)
     * override : 'Nouveau Label' ('' vide par defaut)
     * });
     *
     *
     *
     * To Do :
     *
     * - Gestion des champs de calendrier
     *
     *
     */

(function ($){
    jQuery.fn.addToSum = function(options) {

        /* Options par defaults du plugin */
        jQuery.fn.addToSum.defaults = {
            label : 1,     /* Affichage du label de l'entré du formulaire dans l'élément de la liste */
            value : 1,     /* Affichage de la valeur de l'entré du formulaire dans l'élément de la liste */
            override : ''  /* Remplace le label et la valeur */
        };

        var opts = jQuery.extend({}, jQuery.fn.addToSum.defaults, options);
        var currentId = (new Date).getTime();
        var elem, idElem, parentForm, sumList, type, listedLabel, listElem;
        var label = value = "";
        //ajoute un écouteur de l'événement click sur de bouton de remise à zero
        clearAll(jQuery('.sumBox .deleteAll'));

        //initialisation pour chaque élément
        return this.each(function() {
            enableLabel = opts.label;
            enableValue = opts.value;
            enableOverride = opts.override;
            elem = jQuery(this)

            if (elem.attr('id') != ""){
                idElem = elem.attr('id')
            }
            else {
                currentId ++;
                elem.attr('id',currentId);
                idElem = currentId;
            }
            parentForm = elem.parents('form');
            sumList = parentForm.children('.sumBox').children('.sumList');
            type = elem.attr('nodeName');
            listedLabel = getListedLabel(elem,enableLabel,enableValue,enableOverride)

            //gestion du bouton radio par defaut
            if ( elem.attr('type') == 'radio' && elem.attr('checked') == true){
                defaultRadio = ' default';
                elem.addClass('default');
            }
            else {defaultRadio = '';}

            elem.addClass('inSum');

            // Ajout des éléments de la liste des critères séléctionnés
            sumList.append('<a href="#" class="' + idElem + defaultRadio + '" onclick="return false;" style="display: none; ">' + listedLabel + '</a>');
            //ajoute un écouteur de l'événement "change" sur chaque element
            elem.change(onChange(elem));
            //ajoute un écouteur de l'événement "click" sur chaque element de la liste
            clearOne();
        });
    };


    /* Fonction qui récupère le label et la valeur d'un element en fonction des paramètres du plugin */
    function getListedLabel(elem,label,value,override){
        var idElem = elem.attr('id');
        var type = elem.attr('nodeName');
        var listedLabel = "";

        if (label == 1){
            if (jQuery('label[for=' + idElem + ']').html() != null){
                listedLabel += jQuery('label[for=' + idElem + ']').html();
                //alert('label[for=' + idElem + '] == ' + jQuery('label[for=' + idElem + ']').html());
            }
        }

        if (value == 1){
            switch(type) {

                case 'INPUT': {
                      listedLabel += elem.attr('value');
                }break;

                case 'SELECT': {
                    listedLabel += elem.children('option:selected').html();
                }break;

            }
        }

        if (label == 1 || value == 1 && listedLabel == ""){
            listedLabel = idElem;
        }

        if (override != ''){
            listedLabel = override;
        }

        return listedLabel;
    }

    /* Action à chaque modification des entrées du formulaire */
    function onChange(elem){
        var idElem = elem.attr('id');
        var type = elem.attr('nodeName');

        switch(type) {

            case 'INPUT': {
                if(elem.attr('type') == 'checkbox') {
                    //alert('checkbox');
                    elem.change( function(){
                        //alert('change');
                        if(elem.attr('checked') == true){
                            //alert('on');
                            jQuery('.' +  idElem).show();
                        }
                        else {
                            jQuery('.sumList .' +  idElem).hide();
                        }
                    }
                    )
                } else if(elem.attr('type') == 'radio') {
                    //alert('radio');
                    elem.change( function(){
                        //alert('change');
                        if(elem.attr('checked') == true){
                            //alert('on');
                            jQuery('input:radio[name=' + jQuery('#' +  idElem).attr('name') + ']').each(function(){
                              if(jQuery(this).attr('id')){
                               jQuery('.sumList .' + jQuery(this).attr('id')).hide();
                             }
                            });
                            jQuery('.sumList .' +  idElem).show();

                        }
                        else {
                            jQuery('.sumList .' +  idElem).hide();
                        }
                    });
                }
            }break;

            case 'SELECT': {
              //alert('select');
              elem.change( function(){
                  if(elem.children('option:selected').html() != "&nbsp;" && elem.children('option:selected').html() != ""){
                      idSelect = elem.attr('id');
                      jQuery('.sumList a.' +  idSelect).empty();
                      jQuery('.sumList a.' +  idSelect).append(elem.children('option:selected').html());
                      jQuery('.sumList a.' +  idSelect).show();
                      jQuery(document).trigger("mouseup");
                  }
                  else {
                      idSelect = elem.attr('id');
                      jQuery('.sumList a.' +  idSelect).hide();
                      jQuery('.sumList a.' +  idSelect).empty();
                      jQuery(document).trigger("mouseup");
                  }

                }
              )
            }break;
        }
    }

    /* Réinitialisation du champs du formulaire lors du click sur un élément de la liste */
    function clearOne(){
        jQuery('.sumBox .sumList a').click(function(){
            idElem = jQuery(this).attr('class');
            jQuery(this).not('.default').hide();
            jQuery('#' +  idElem).not('.default').attr('checked',false);

            if(jQuery('#' + idElem).attr('type') == 'radio'){
                jQuery('input:radio[name=' + jQuery('#' +  idElem).attr('name') + ']').each(function(){
                    jQuery('.sumList .' +  jQuery(this).attr('id')).hide();
                });
                jQuery('.default').attr('checked',true);
                jQuery('.default').trigger('change');
            }

            jQuery(' #' +  idElem + 'option:selected').not('option:first-child').removeAttr('selected');
            jQuery('#' +  idElem + ' option:first-child').attr('selected','selected');

            jQuery('#' +  idElem).not('.default').trigger('change');

        });
    }

    /* Réinitialisation de tout le formulaire */
    function clearAll(deleteAll){
        deleteAll.click(function(){
            //alert('clear');
            var parentForm = deleteAll.parents('form')
            var sumList = parentForm.children('.sumBox').children('.sumList');

            sumList.children('a').not('.default').hide();
            sumList.children('.default').show();

            parentForm.find('input.inSum:checkbox').attr("checked",false);
            parentForm.find('input.inSum:checkbox').trigger('change');

            parentForm.find('input.inSum:radio').not('.default').attr("checked",false);
            parentForm.find('input.inSum:radio.default').attr("checked","true");
            parentForm.find('input.inSum:radio').trigger('change');

            parentForm.find('select.inSum option:selected').not('option:first-child').removeAttr('selected');
            parentForm.find('select.inSum option:first-child').attr('selected','selected');
            parentForm.find('select.inSum').trigger('change');

            parentForm.find('input.inSum').attr('value','');
        });
    }




})(jQuery);



/**  * in_hover_img
     * @author      Inouit (contact@inouit.com)
     * @version     1.0
     * @param       String on chaine de fin de l'attribut src lors de l'événement hover, String off chaine de fin de l'attribut src lorsque la souris n'est pas sur l'image
     *
     *
     *
     */
(function ($){
    jQuery.fn.hoverImg = function(options) {
         /* Options par defaults du plugin */
        jQuery.fn.emptyMe.defaults = {
            on : '_on',     /* Affichage de le text de l'entré du formulaire qui sera supprimé au clique */
            off : '_off',     /* Affichage de le text de l'entré du formulaire qui sera supprimé au clique */
        };
        var opts = jQuery.extend({}, jQuery.fn.hoverImg.defaults, options);

        //initialisation pour chaque élément (le return permet de ne pas couper l'enchainement des événements jQuery)
        return this.each(function() {
            jQuery(this).hover(hoverIn,hoverOut);
        });


        /* Fonctions du plugin */
        function hoverIn(){
            var srcName = jQuery(this).attr('src');
            srcName = srcName.replace(opts.off,opts.on);
            jQuery(this).attr('src',srcName);
        }

        function hoverOut(){
            var srcName = jQuery(this).attr('src');
            srcName = srcName.replace(opts.on,opts.off);
            jQuery(this).attr('src',srcName);
        }
    }
})(jQuery);



/**  * in_emptyme
     * @author      Inouit (contact@inouit.com)
     * @version     1.0
     * @param       String value indique la valeur par defaut du champs
     *
     *
     *
     */
(function ($){
    jQuery.fn.emptyMe = function(options) {
        /* Options par defaults du plugin */
        jQuery.fn.emptyMe.defaults = {
            value : '',     /* Affichage de le text de l'entré du formulaire qui sera supprimé au clique */
        };
        var opts = jQuery.extend({}, jQuery.fn.emptyMe.defaults, options);
        //initialisation pour chaque élément (le return permet de ne pas couper l'enchainement des événements jQuery)
        return this.each(function() {
          if (opts.value != ''){
              jQuery(this).val(opts.value);
          }
          else {
              opts.value = jQuery(this).val();
          }
              jQuery(this).addClass('empty');
              jQuery(this).focus(emptyIt);
              jQuery(this).blur(fullIt);
        });


        /* Fonctions du plugin */
        function emptyIt(){
            if (jQuery(this).val() != '' && jQuery(this).val() == opts.value){
                jQuery(this).val('');
                jQuery(this).removeClass('empty');
            }
        }

        function fullIt(){
            if(jQuery(this).val()==''){
                jQuery(this).val(opts.value);
                jQuery(this).addClass('empty');
            }
        }
    }
})(jQuery);



//extension de Jquery pour trouver les positions d'un élément.
jQuery.fn.extend({
  findPos : function() {
       var obj = jQuery(this).get(0);
       var curleft = obj.offsetLeft || 0;
       var curtop = obj.offsetTop || 0;
       while (obj = obj.offsetParent) {
     curleft += obj.offsetLeft
         curtop += obj.offsetTop
       }
       return {x:curleft,y:curtop};
  }
});







