/* French initialisation for the jQuery UI date picker plugin. */
/* Written by Keith Wood (kbwood{at}iinet.com.au) and Stéphane Nahmani (sholby@sholby.net). */
jQuery(function($){
    $.datepicker.regional['fr'] = {
        closeText: 'Fermer',
        prevText: '&#x3c;Préc',
        nextText: 'Suiv&#x3e;',
        currentText: 'Courant',
        monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
        'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
        monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
        'Jul','Aoû','Sep','Oct','Nov','Déc'],
        dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
        dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
        dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
        weekHeader: 'Sm',
        dateFormat: 'dd/mm/yy',
        firstDay: 1,
        isRTL: false,
        showMonthAfterYear: false,
        yearSuffix: ''
    };
    $.datepicker.setDefaults($.datepicker.regional['fr']);
});

//
// un ensemble de routine utilisée par les fsWidgets
//

//découpe la chaine passée en paramètre et la retourne sous forme de mac address aa:ce:45:00:30
function  fsValidatorMacAddress(chaine){
    chaine = chaine.replace(/[^\w]*[\_]*/gi,""); //enlève les caractes non alphanum et "_"
    chaine = chaine.replace(/[g-zG-Z]*/gi,"");//enlève les > f/F
    chaine = chaine.substr(0,12);
    var length = chaine.length;
    var newString = "";
    for (x = 0; x < length; x++) {
        if(x%2 == 0 && x > 0){
            newString+= ':';
        }
        newString += chaine.substr(x,1);
    }
    return newString;
}

function fsWidgetFormDoctrineChoiceAutre(id_source, valeur, id_dest){
    // console.log('ici'+id_source+'--'+valeur+'--'+id_dest);
    if(jQuery('#'+id_source).val() == valeur){
        jQuery('#'+id_dest).show();
    } else{
        jQuery('#'+id_dest).hide();
    }
}


// met a jour une destination définie par "selector" en fonction d'une liste déroulante
function fsWidgetFormDoctrineSelectUpdate(src,selector,url,isLoad,checkEmpty) {
    var destination = jQuery(eval("jQuery(src)"+selector));
    if(isLoad == 1){ //appel au chargement
        if(checkEmpty==1){  //on doit verifier que le champ est vide pour le remplir
            if(jQuery(destination).val() != '') return;
        }
    }
    jQuery.post(url, {
        id: jQuery(src).val()
    },function(data){
        jQuery(destination).val(data);
    });
}


// fsWidgetFormInputPlusMoins : ajoute n à la valeur d'un input
function InputPlusMoins(input_id, n, nmin, nmax) {

    var quantite = jQuery('#'+input_id).val();
    if(isNaN(quantite)) quantite = 0;

    quantite = parseInt(quantite)+n;
    quantite=Math.max(nmin,quantite);
    quantite=Math.min(nmax,quantite);
    jQuery('#'+input_id).val(quantite);
    return false;
}

/**
 *Les fonctions relatives aux filtres avancés fsActions
 **/

function fsInitFilter(mode){
    /**s'il y a des form en mode "advanced" on ajoute le bouton**/
    if(jQuery('.advanced').length == 0){
        jQuery('#advancedFilterLink').hide();
    }
    toggleFilter(mode == 'simple');
}

function toggleAjax(url,module){
    jQuery.get(url, {
        module : module
    }, function(data){
        toggleFilter(data == 'simple');
    });
}

function toggleFilter(mode){
    if(mode){
        jQuery(".advanced").parent('td').parent('tr').show();
        jQuery("#advancedFilterLink").html('<img src="/fsWidgetsPlugin/images/toggle/collapseall.png" alt="filtre simple" title="filtre simple"/>');
    }else{
        jQuery(".advanced").parent('td').parent('tr').hide();
        jQuery("#advancedFilterLink").html('<img src="/fsWidgetsPlugin/images/toggle/expandall.png" alt="filtre avancé" title="filtre avancé"/>');
    }
}

/**
 * utilisé par fsWidgetFormDate
 * vide un champ date de son contenu
 */
function fsWFDClear(targetId){
    var baseId=targetId.replace("_jquery_control","");
    jQuery(targetId).datepicker('setDate',null);
    jQuery(baseId +"_day").val('');
    jQuery(baseId +"_month").val('');
    jQuery(baseId +"_year").val('');
    return false;
}
/**
 * utilisé par fsWidgetFormDate
 * met la date du jour
 */
function fsWFDToday(targetId){
    var baseId=targetId.replace("_jquery_control","");
    jQuery(targetId).datepicker('setDate','+0');
    fsWFDUpdateSelects(targetId,baseId +"_day",baseId +"_month",baseId +"_year");
    return false;
}

/**
 * fsWidgetFormDate
 * targetId = l'id de l'input affiché
 * dayId = l'id de la liste déroulante "jour" cachée
 * monthId = l'id de la liste déroulante "mois" cachée
 * YearId = l'id de la liste déroulante "année" cachée
 */
function fsWFDSetup(targetId,culture,dateFormat,daysInMonth){

    var baseId=targetId.replace("_jquery_control","");
    var dayId = baseId +"_day";
    var monthId = baseId +"_month";
    var YearId = baseId +"_year";
    jQuery(targetId).datepicker("option", 'onSelect',function(dateText, inst) {
        fsWFDUpdateSelects(targetId,dayId,monthId,YearId);
    });
    jQuery(targetId).datepicker("option", jQuery.datepicker.regional[culture]);
    jQuery(targetId).datepicker( "option", "dateFormat", dateFormat);
    fsWFDLoadInitialData(targetId,dayId,monthId,YearId);
    jQuery(dayId+','+monthId+','+YearId).change(function(){
        fsWFDcheckSelectDays(dayId,monthId,daysInMonth);
    });
}

/*
 * Remplis les valeurs initiales des inputs dans notre widget
 */
function fsWFDLoadInitialData(targetId,dayId,monthId,YearId){
    if(jQuery(dayId).val() && jQuery(monthId).val() && jQuery(YearId).val()){
        var day 	= jQuery(dayId).val();
        var month 	= jQuery(monthId).val();
        var year	=  jQuery(YearId).val();
        if(day.length==1) day = "0"+day;
        if(month.length==1) month = "0"+month;

        jQuery(targetId).val(day + "/" + month + "/" + year);
    }else{
        fsWFDUpdateSelects(targetId,dayId,monthId,YearId);
    }
}

/*
 * Selectionne les bonnes valeurs dans les listes déroulantes
 */
function fsWFDUpdateSelects(targetId,dayId,monthId,YearId){
    var date = jQuery(targetId).val();
        
    var jour = date.substring(0,2);
    if(jour < 10)  jour = jour.substring(1);//les vakeurs symfony sont 8,9,10,11 et non 08,09,10,11
        
    var mois = date.substring(3, 5);
    if(mois < 10)  mois = mois.substring(1); //les vakeurs symfony sont 8,9,10,11 et non 08,09,10,11
        
    jQuery(dayId).val(jour);
    jQuery(monthId).val(mois);
    jQuery(YearId).val(date.substring(6));
}

/*
 * Selectionne les bonnes valeurs dans les listes déroulantes
 */
function fsWFTimeUpdateSelects(time, hoursId, minutesId, secondId){
    //var time = jQuery(targetId).val();

    if (!time)
        return ;

    jQuery('#' + hoursId).val(time.getHours().toString());
    jQuery('#' + minutesId).val(time.getMinutes().toString());

    if (secondId)
        jQuery(secondId).val(time.getSeconds().toString());
}

/*
 * si vide on met les listes a zero
 * inutilisé ?
 */
function fsWFDcheckClose(targetId,dayId,monthId,YearId){
    alert('becareful fsWFDcheckClose');
    var date = jQuery(targetId).val();
    if(date==""){
        jQuery(dayId).val(0);
        jQuery(monthId).val(0);
        jQuery(YearId).val(0);
    }
}
/**
 * Cette fonction est appelee au onchange des listes cachées
 * Si on choisi 30 fevrier, selectionne 28
 */
function fsWFDcheckSelectDays(dayId,monthId,daysInMonth2)
{
    var daysInMonth = (32 - new Date(jQuery(dayId).val(), jQuery(monthId).val() - 1, 32).getDate());
    jQuery(dayId).find('option').attr("disabled", "");
    jQuery(dayId).find('option:gt("+ ('+daysInMonth2+') +")').attr("disabled", "disabled");
        
    if (jQuery(dayId).val() > daysInMonth)
        jQuery(dayId).val(daysInMonth);
}

/**
 * analyse un champ avec une legende inline et enleve la legende
 */
function fsWidgetFormInputLegendeSubmit(id) {
    noeud=jQuery('#'+id);
    if(noeud.val()==noeud.attr('alt')){
        noeud.val('');
    }
    return true;
}

/**
 * appelle un ajax et remplis la target du contenu
 * @see http://wiki.fazae.com/index.php/FsAjax
 */
function fsAjaxLoad(url,target){
    var monDialog = '';
    if(jQuery('.fsAjaxLoadDialog').length > 0)
        monDialog = jQuery('.fsAjaxLoadDialog');
    else
        monDialog = jQuery('<div class="fsAjaxLoadDialog">Traitement en cours...<div>');
    jQuery(monDialog).dialog({
        modal:true,
        autoOpen:false
    });
    jQuery(monDialog).dialog('open');

    jQuery.ajax({ //debut de l'ajax'
        url: url,
        context: target, //la cible dont l'html sera remplacé si succès
        dataType: "json", //on parse directement le retour pour avoir un objet json dans data
        success: function(data){

            jQuery('.fsAjaxLoadDialog').dialog('close'); //fermeture du message

            if(data.statut == 'OK')
                jQuery(this).html(data.data); //c'est bon, on remplace l'html de la cible
            if(data.statut == 'ERROR')
                alert(data.errormsg); // cas de l'erreur
            if(data.statut == 'REDIRECT')
                document.location = data.redirecturl; //redirection
        }
    });
}

//méthode récursive qui remplace les liens de classe "classe" par leur destination.
//le replaceTag est inséré pendant le chartement
function fsAjaxAutoLoad(classe,replaceTag){
    var link = jQuery('a.'+classe+':first');
    if(link.length == 0)
        return false;
    var replaceTagNode = jQuery(replaceTag).addClass('fsAjaxAutoLoad');
    jQuery(link).after(replaceTagNode);
    jQuery.ajax({
        url : link.attr('href'),
        context: link,
        success: function(data){
            jQuery(".fsAjaxAutoLoad").remove();
            jQuery(this).replaceWith(data);
            fsAjaxAutoLoad(classe, replaceTag);
        }
    });
    return true;
}

/*
 * converti une url de vidéo en code embed
 * formats supportés : youtube, dailymotion, vimeo
 * source : le contenu à analyser pour extraire le code embed
 * container : le selecteur jQuery pour le conteneur du code embed
 * help : le selecteur jQuery pour le conteneur de l'aide qui sera affichée si aucun format ne correspond à la source
 * width/height : les dimensions de l'embed
 *
 * @TODO comment parser un texte qui contient plusieurs lien ?
 * si on veut paramétrer des options, spécifiques à chaque lecteur ?
 * on est obligé d'avoir un bloc d'aide ?
 * DRY : mettre les formats dans un tableau et faire une boucle pour enlever les bloc de tests copiés collés
 */
function fsWidgetFormInputVideoUrl(source,container,help, width, height){
    fsWidgetFormInputVideoUrlHideAll(container,help);
    var youtube_html = '<iframe width="'+width+'" height="'+height+'" src="http://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe>';
    var youtube_reg = /http:\/\/(www\.)?youtube.com\/watch\?v\=([^&#]*)/;

    var vimeo_html = '<iframe src="http://player.vimeo.com/video/$1" width="'+width+'" height="'+height+'" frameborder="0"></iframe>';
    var vimeo_reg = /http:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/;

    var dailymotion_html = '<iframe frameborder="0" width="'+width+'" height="'+height+'" src="http://www.dailymotion.com/embed/video/$1"></iframe>';
    var dailymotion_reg = /http:\/\/(www\.)?dailymotion.com\/video\/(.*)_/;
    
    var html = "";
    
    //dev help : pour voir les résultats du match et savoir quel indice du tableau prendre
    //console.log(results)
    //penser à ouvrir firebug !

    //youtube
    results = source.match(youtube_reg);
    if(results)
        html = youtube_html.replace('$1', results[2]);
    //vimeo
    results = source.match(vimeo_reg);
    if(results)
        html = vimeo_html.replace('$1', results[2]);
    //dailymotion
    results = source.match(dailymotion_reg);
    if(results)
        html = dailymotion_html.replace('$1', results[2]);

    if(html == ''){
        fsWidgetFormInputVideoUrlShowHelp(container,help);
    }
    else{
        fsWidgetFormInputVideoUrlShowVideo(container,help);
    }
    jQuery(container).html(html);

}

function fsWidgetFormInputVideoUrlHideAll(container,help){
    jQuery(container+','+help).hide();
}
function fsWidgetFormInputVideoUrlShowVideo(container, help){
    jQuery(help).hide();
    jQuery(container).show();
}
function fsWidgetFormInputVideoUrlShowHelp(container, help){
    jQuery(container).hide();
    jQuery(help).show();
}

jQuery(function(){
    if (typeof console == "undefined" || typeof console.log == "undefined") var console = {
        log: function() {}
    }; 
    //fonctions ajax
    //var fsfAjoutContainer = jQuery('#fsfNewContainer');

    jQuery('.fsfNew').live('click',function(event){
        event.preventDefault();
        var url = jQuery(this).attr('href');
        jQuery.ajax({
            url: url,
            context: jQuery(this),
            success: function(data){
                html = fsfPrepareRowForm(data);
                var template = jQuery('#fsfEmbededItemTemplate').val();
                html = template.replace("{index_item}", html);
                var container = jQuery(this).prev(".fsfList:first");
                jQuery(container).append(html);
                jQuery('.fsfList .fsfEmbededItem:last').trigger('fsfNewSuccess',[data]);
            }
        });
    });

    //    //submit form ajout
    //    jQuery('#fsfNewContainer form').live('submit',function(event){
    //        event.preventDefault();
    //        jQuery(this).ajaxSubmit({
    //            iframe: true,
    //            success: fsfSubmitSuccess
    //        });
    //    });

    //annuler un ajout
    jQuery('.fsfNewCancel').live('click',function(event){
        event.preventDefault();
        jQuery("a.fsfNew").show();
        jQuery(this).parents('.fsfEmbededItem').remove();
    });


    //editer un objet
    jQuery('.fsfItemEdit').live('click',function(event){
        event.preventDefault();
        var url = jQuery(this).attr('href');
        jQuery.ajax({
            url: url,
            cache: false,
            context: jQuery(jQuery(this).parents('.fsfEmbededItem')),
            success: function(data){
                jQuery(this).html(fsfPrepareRowForm(data));
                jQuery(this).trigger('fsfEditSuccess',[data]);
            }
        });
    });

    //submit edition d'un suivi
    jQuery('.fsfEmbededItem form').live('submit',function(event){
        event.preventDefault();
        jQuery(this).ajaxSubmit({
            iframe: true,
            success: fsfSubmitSuccess
        });
    });

    if(jQuery('#fsfSafeSubmit').length >0){
        jQuery('form').live('submit',function(){
            //si le form submit est un embed, on laisse couler
            if(jQuery(this).hasClass('fsfEmbeded')){
                return true;
            }else{
                //c'est un form classique, on regarde si des embed sont ouverts
                if(jQuery('.fsfEmbededItem form').length > 0){
                    jQuery("#fsfSafeSubmitDialog").dialog({
                        modal: true,
                        width: 'auto',
                        buttons: {
                            Ok: function() {
                                jQuery(this).dialog( "close" );
                            }
                        }
                    });
                    return false;
                }else{
                    return true;
                }
            }
        });
    }

    //traitement callback du form edition
    function fsfSubmitSuccess(responseText, statusText, xhr, form)  {
        if(typeof(form) == 'undefined')
            form = xhr;
        if(responseText.substr(0,2) == 'OK'){
            var url = responseText.substr(3);
            jQuery.ajax({
                url : url,
                success: function(data){
                    //var template = jQuery('#fsfEmbededItemTemplate').val();
                    // var html = template.replace("{index_item}", data);
                    jQuery(form).parents('.fsfEmbededItem').html(data).trigger('fsfSubmitSuccess',[data]);
                    fsFlashNotify('notice','Information');
                }
            });
        }else{
            jQuery(form).parents('.fsfEmbededItem').html(fsfPrepareRowForm(responseText)).trigger('fsfSubmitError',[responseText]);
        }
        fsFlashNotify('error','Erreur');
    }

    function fsfPrepareRowForm(html){
        var template = jQuery('#fsfEmbededEditTemplate').val();
        html = template.replace("{form}", html);
        return html;
    }

    //annuler une modification
    jQuery('.fsfCancel').live('click',function(event){
        event.preventDefault();
        var url = jQuery(this).attr('href');
        jQuery.ajax({
            url: url,
            cache: false,
            context : jQuery(this).parents('.fsfEmbededItem'),
            success: function(data){
                jQuery(this).html(data);
                jQuery(this).trigger('fsfCancelSuccess',[data]);
            }
        });
    });

    //supprimer un objet existant
    jQuery('.fsfDelete').live('click',function(event){
        event.preventDefault();
        var url = jQuery(this).attr('href');
        var contexte =  jQuery(this).parents('.fsfEmbededItem');
        jQuery("#fsfDeleteDialog").dialog({
            modal: true,
            buttons: {
                "Supprimer": function() {
                    jQuery(this ).dialog( "close" );
                    jQuery.ajax({
                        url: url,
                        context: contexte,
                        dataType: "json",
                        success: function(data){
                            if(data.statut == 'OK')
                                jQuery(this).remove();
                            if(data.statut == 'ERROR')
                                jQuery("#fsfDeleteDialogError").dialog();
                            jQuery(this).trigger('fsfDeleteSuccess',[data]);
                        }
                    });
                },
                "Annuler": function() {
                    jQuery(this).dialog( "close" );
                }
            }
        });
    });


    //Toggle fs
    jQuery('a.fsToggle').each(function(){
        var target = jQuery(jQuery(this).attr('rel'));
        if(target.length == 1){
            if(jQuery(target).hasClass('fsToggleHide')){
                jQuery(target).hide();

            }
        }
    });
    jQuery('a.fsToggle').live('click',function(event){
        event.preventDefault();
        var target = jQuery(jQuery(this).attr('rel'));
        if(target.length == 0)
            return false;
        if(jQuery(target).is(':visible')){
            jQuery(this).removeClass('fsToggleBtnOn').addClass('fsToggleBtnOff');
            jQuery(target).slideUp().removeClass('fsToggleTargetVisible').addClass('fsToggleTargetHidden');
        }else{
            jQuery(this).removeClass('fsToggleBtnOff').addClass('fsToggleBtnOn');
            jQuery(target).slideDown().removeClass('fsToggleTargetHidden').addClass('fsToggleTargetVisible');
        }
        return false;
    });
    
    
    //fsInputDefaultToggle
    jQuery("input.fsInputDefaultToggle:text, textarea.fsInputDefaultToggle, input.fsInputDefaultToggle:password").each(function(){
        if(this.value == ''){
            jQuery(this).addClass('fsInputIsDefault');
            this.value = this.title;
        }else{
            if(this.value == this.title)
                jQuery(this).addClass('fsInputIsDefault');
        }
    });
    jQuery("input.fsInputDefaultToggle:text, textarea.fsInputDefaultToggle, input.fsInputDefaultToggle:password").focus(function(){
        if(this.value == this.title){
            jQuery(this).removeClass('fsInputIsDefault');
            this.value = '';
        }
    });
    jQuery("input.fsInputDefaultToggle:text, textarea.fsInputDefaultToggle, input:password").blur(function(){
        if(this.value == ''){
            jQuery(this).addClass('fsInputIsDefault');
            this.value = this.title;
        }
    });
    jQuery("input:image, input:button, input:submit").click(function(){
        jQuery(this.form.elements).each(function(){
            if(this.type =='text' || this.type =='textarea' || this.type =='password' ){
                if(this.value == this.title && this.title != ''){
                    this.value='';
                }
            }
        });
    });
    
    
});

function fsFlashNotify(theme,title){
    jQuery('#flash_'+theme+'_blockquote').each(function(){
        var opts = {
            pnotify_hide: true,
            pnotify_delay: 5000,
            pnotify_animation: "slide",
            pnotify_title: title,
            pnotify_text: jQuery(this).html(),
            pnotify_insert_brs: false
        };
        if (theme=='error') {
            opts.pnotify_type = "error";
            opts.pnotify_hide = false;
        }
        if (theme=='sticky') {
            opts.pnotify_hide = false;
        }
        jQuery.pnotify(opts);
    });
    jQuery('#flash_'+theme+'_content').remove();
}


/**
 * autocomplete cp-ville
 * TODO gerer le cas ou on affiche le champ dans un span
 */
function fswCpVille(cp,ville,url){
    jQuery(cp).autocomplete({
        source: url,
        minLength: 2,
        select: function(event, ui) {
            jQuery(cp).val(ui.item.cp);
            jQuery(ville).val(ui.item.ville);
            jQuery(cp).trigger('fswCpVilleSelect',[ui]);
            return false;
        },
        close: function(event, ui) {
            var code_postal_value = jQuery(cp).val();
            if (code_postal_value.length != 5)
                jQuery(cp).val('');
            jQuery(cp).trigger('fswCpVilleClose',[ui]);
        }
    });
}

    
/**
* charge les conteneurs de classe "classe" avec un appel ajax de "url"
* utilise l'attribut data-id des conteneurs pour construire la chaine ids à poster
* utiliser l'attribut id de la forme "classe"+VALEUR_ID pour remplir le conteneur au retour de l'appel
*/
function fsAjaxLoadMulti(selecteur,url){
        
    var sep = "";
    var ids = "";
        
    jQuery(selecteur).each(function(){
        ids += sep+jQuery(this).attr('id');
        sep = ",";
    });        
    jQuery('body').trigger('fsAjaxLoadsStart',[ids]);
    jQuery.ajax({
        type: "POST",
        url: url,
        data: "ids="+ids,
        dataType: "json",
        success: function(data){
            jQuery('body').trigger('fsAjaxLoadsSuccess',[data]);
            jQuery.each(data, function(key, val) {
                jQuery('#'+key).html(val);
            });
        },
        error: function(erreurXMLHttpRequest){
            jQuery('body').trigger('fsAjaxLoadsError',[erreurXMLHttpRequest]);
                
        }
    });
}
