/**
 * function confirm_delete(intitule, url)
 *
 * Demande de validation de la suppression d'un élément (offre d'emploi, critère ou candidature)
 *
 * @param   intitule    string      intitulé de l'élément
 * @param   url         string      url de redirection pour la suppression
 */
function confirm_delete(intitule, url)
{
    if(confirm("Etes-vous sûr de vouloir supprimer \""+intitule+"\" ?"))
    {
        window.location = url;
        return true;
    }
    else
    {
        return false;
    }
}


/**
 * function get_metier_box(id_rubrique, lang)
 *
 * Change le métier de la liste déroulante & de la mini box (page d'accueil d'emploi)
 *
 * @param   id_rubrique    id      id de la rubrique à afficher
 * @param   lang           string  langue courante
 */
function get_metier_box(id_rubrique, lang, url_rubrique)
{
    var timestamp = Date.parse(new Date());
    
    $.ajax({ url: "spip.php?page=load_metier_box",
        type:"get",           
        dataType:"html",
        data: "&id_rubrique="+id_rubrique+'&lang='+lang+'&hash='+timestamp,
        success:function(msg){ 
            $("#video").html(msg);
        } 
    });
    
    $('select#liste_metier').each(function(){
        $(this).children('[@selected]').attr('selected', '');
        $(this).children('[@value=/'+url_rubrique+']').attr('selected', 'selected');
    });
}


/**
 * function count_error(lang, i)
 *
 * Récupère le nombre d'erreurs déjà comptabilisées
 *
 * @param   lang        string      langue courante
 * @param   i           string      1 ou -1;
 * @return  counter     int         nombre d'erreurs
 */
function count_error(lang, i)
{
    var post_erreur = $('div#total_erreur').html();
    
    if(typeof(this.counter) == 'undefined' && post_erreur == null)
    {
        this.counter = 0;
    }
    else if(post_erreur != null)
    {
        post_erreur = post_erreur.split(' ');
        
        var pos = (lang == 'en') ? 3 : 4;
        this.counter = post_erreur[pos];
    }
    
    this.counter = parseInt(this.counter)+parseInt(i);
    
    return this.counter;
}


/**
 * function get_action(action, no_count, lang, label, name, msg_field, input, total_error, type)
 *
 * Affiche ou supprime une erreur en fonction de la valeur d'un champ
 *
 * @param   action      int     type d'action
 * @param   no_count    int     est ce qu'on incrémente le nombre d'erreurs ?
 * @param   lang        string  langue courante
 * @param   label       string  label du champ
 * @param   name        string  nom du champ
 * @param   msg_field   string  message à afficher ou supprimer
 * @param   input       string  champ input
 * @param   total_error int     nombre total d'erreur
 * @param   type        string  type de champ
 */
function get_action(action, no_count, lang, label, name, msg_field, input, total_error, type)
{
    if(1 == action) // on rajoute une erreur
    {
        // si une erreur était déjà présente à côté du champ, on n'incrémente pas le nb d'erreurs
        error = (no_count == 1) ? count_error(lang, 0) : count_error(lang, 1); 
        $('div#total_erreur').remove(); // on supprime le message affichant le total des erreurs
        $('div#post_erreur').remove(); // on supprime le message affichant l'erreur de post

        $(label).addClass('warning');   // on ajoute la class 'warning' au libellé
        
        // on ajoute le message d'erreur à coté du champ
        ('cp' == name) ? $('input#ville').after(msg_field) : (('civilite' == name) ? $('input#mr').after(msg_field) : $(input).after(msg_field));
       
        msg = get_message('total', lang, '', '', error);
        $(total_error).prepend(msg);    // on réaffiche le message en haut du form
    }
    else if(2 == action) // on supprime l'erreur
    {
        error = count_error(lang, -1);  // erreur -1 au compteur
        $('div#total_erreur').remove(); // on supprime le message affichant le total des erreurs
        
        if(error != 0)  // si on a encore des erreurs
        {
            msg = get_message('total', lang, '', '', error);
            $(total_error).prepend(msg);
        }
        
        $(label).removeClass('warning');    // on supprime la class 'warning' du libellé
        $('span#'+type+'_'+name).remove();  // on supprime le message d'erreur à coté du champ
    }
}

/**
 * function get_message(type, lang, name, label_value, error)
 *
 * Affiche le message d'erreur
 *
 * @param   type        string  type d'action
 * @param   label_value string  libellé du champ
 * @param   name        string  nom du champ
 * @param   error       int     nombre d'erreurs à afficher
 */
function get_message(type, lang, name, label_value, error)
{
    var msg_field = '';
    
    switch(type)
    {
        case 'require' :
            msg_field = ('en' == lang) ? '<span id="js_require_'+name+'" class="warning">Please enter the field &laquo; '+label_value+' &raquo;</span>' : '<span id="js_require_'+name+'" class="warning">Veuillez saisir le champ &laquo; '+label_value+' &raquo;</span>';
            break;
        
        case 'numeric' :
            msg_field = ('en' == lang) ? '<span id="js_numeric_'+name+'" class="warning">Field &laquo; '+label_value+' &raquo; must be a numeric</span>' : '<span id="js_numeric_'+name+'" class="warning">Le champ &laquo; '+label_value+' &raquo; doit être un numérique</span>';
            break;
        
        case 'email' :
            msg_field = ('en' == lang) ? '<span id="js_email_'+name+'" class="warning">Field &laquo; '+label_value+' &raquo; must be an email</span>' : '<span id="js_email_'+name+'" class="warning">Le champ &laquo; '+label_value+' &raquo; doit être un email</span>';
            break;
        
        case 'total' :
            msg_field = ('en' == lang) ? '<div id="total_erreur">There are &laquo; '+error+' &raquo; error(s)</div>' : '<div id="total_erreur">Il y a &laquo; '+error+' &raquo; information(s) manquantes ou incorrectes</div>'
            break;
    }
    
    return msg_field;
}

/**
* function changePage(page, post)
*/
function changePage(param)
{
	$.ajax({ url: "?exec=ajax_load_stats",
		type:"post",
		dataType:"html",
		data: param,
		success:function(retour){
			$('#bloc_stats').html(retour);
		}
	});
}

$(document).ready(function() {
    
    // rechargement de la liste déroulante des métiers en fonction de la famille de métier sélectionnée - côté BACK
    $('select[@name^="famille_"]').change(function() {
        var name = $(this).attr('id');
        var lang = name.replace('famille_', '');
        
        $("select#"+name+" option:selected").each(function () {
            $.ajax({ url: "?exec=ajax_load_metier",
                type:"get",
                dataType:"html",
                data: "id="+$(this).attr('value'),
                success:function(metier){
                    $('select#metier_'+lang).html(metier);
                }
            });
        });
    });
    
    // rechargement de la liste déroulante des métiers en fonction de la famille de métier sélectionnée - côté FRONT
    $('select#famille').change(function() {
        $("select#famille option:selected").each(function () {
            $.ajax({ url: "spip.php?page=load_metier",
                type:"get",
                dataType:"html",
                data: "id_rubrique="+$(this).attr('value'),
                success:function(metier){
                    $('select#metier').html(metier);
					document.getElementById('metier').value = 0;
                }
            });
        });
    });
    
    
    var tab = new Array();
    
    $("[@class^='js_']").each(function(i) {
        tab[i] = new Array();
        tab[i]['id'] = $(this).attr('id');
        tab[i]['class'] = $(this).attr('class');
        tab[i]['name'] = $(this).attr('name');
        tab[i]['label'] = $('label[@for^="'+tab[i]['name']+'"]');
        tab[i]['input'] = $('#'+tab[i]['name']);
    });
    
    var is_checked = 0;
    
    $('input[@name="civilite"]').click(function() {
        is_checked = 1;
        
        var lang = $('div#get_lang').html();                            // langue courante
        var total_error = $('div#candidature');                         // nombre d'erreur
        var name = $(this).attr('name');                                // nom du champ
        var label = $('label[@for^="'+name+'"]');                       // label du champ
        var input = $('#'+name);                                        // champ input
        var label_value = $(label).html();                              // titre du label
        var msg_field = get_message('require', lang, name, label_value);// message à afficher
        var isset_warning = $('span#js_require_'+name).html();          // une alerte existe déjà sur le champ ?
        
        if(isset_warning != null)
        {
            get_action(2, 0, lang, label, name, msg_field, input, total_error, 'js_require');
        }
    });
    
    // gestion des champ obligatoires pour le formulaire de candidature
    $("[@class^='js_']").blur(function() {
        
        var action = '';                                // init le type d'action
        var msg_field = '';                             // message d'erreur à retourner
        var error = '';                                 // nombre total d'erreurs
        var lang = $('div#get_lang').html();            // langue courante
        var total_error = $('div#candidature');         // nombre d'erreur
        var this_id = $(this).attr('id');
        
        for (var n = 0; n<tab.length; n++)
        {
            if(tab[n]['id'] == this_id)
            {
                var here = n;
            }
        }
        
        // on boucle pour sélectionner
        for(var m = 0; m<=here; m++)
        {
			if(m == here){
				var id = tab[m]['id'];                          // id du champ
				var type = tab[m]['class'];                     // type de test
				var value = $('#'+id).attr('value');            // valeur du champ input (ou select)
				var name = tab[m]['name'];                      // nom du champ
				var label = tab[m]['label'];                    // label du champ
				var label_value = $(label).html();              // titre du label
				var input = $('#'+name);                        // champ input
				
				// certains champ (par ex: email) ont deux tests. On les sépare pour les traiter un par un
				var no_count = '';
				var two_type = new RegExp('^[a-z_]+$', 'g');
				
				if(two_type.test(type) === false)
				{
					type = type.split(' ');
					type = (typeof(value) == 'undefined') ? type[0] : type[1];
				}
				
				var isset_warning = $('span#'+type+'_'+name).html();  // une alerte existe déjà sur le champ ?
				
				if('js_require' == type)
				{
					action = 0;
					var span_format = $('span#js_email_'+name);    // est ce qu'une erreur concernant le format de l'email est déjà présente ?
					
					// si oui, on retire ce message et on place la variable no_count à 1 pour ne pas incrémenter la fonction count_error
					if(span_format.html() != null) 
					{
						$('span#js_email_'+name).remove();
						no_count = 1;
					}
					
					if('civilite' == name)
					{
						if(is_checked === 0 && isset_warning == null)
						{
							action = 1;
							msg_field = get_message('require', lang, name, label_value);
						}
					}
					else
					{
						if((typeof(value) == 'undefined' || value == 0) && isset_warning == null)
						{
							action = 1;
							msg_field = get_message('require', lang, name, label_value);
						}
						else if((typeof(value) != 'undefined' && value != 0) && isset_warning != null)
						{
							action = 2;
						}
					}
				}
				
				if('js_numeric' == type)
				{
					action = 0;
					var data = $('input#'+id).attr('value');
					var reg = new RegExp('^[0-9]+$', 'g');
					var result = reg.test(data);
					
					if(result === false && isset_warning == null && typeof(value) != 'undefined')
					{
						action = 1;
						msg_field = get_message('numeric', lang, name, label_value);
					}
					else if((result == true && isset_warning != null) || (typeof(value) == 'undefined' && isset_warning != null))
					{
						action = 2;
					}
				}
				
				if('js_email' == type && typeof(value) != 'undefined')
				{
					action = 0;
					var span_require = $('span#js_require_'+name);
					
					if(span_require.html() != null)
					{
						$('span#js_require_'+name).remove();
						no_count = 1;
					}
					
					var data_email = $('input.js_email').attr('value');
					var reg_email = new RegExp('^[a-z0-9._-]+@[a-z0-9._]{2,}\.[a-z]{2,3}$');
					var result_email = reg_email.test(data_email);
					
					if(result_email === false && isset_warning == null)
					{
						action = 1;
						msg_field = get_message('email', lang, name, label_value);
					}
					else if(result_email === true && isset_warning != null)
					{
						action = 2;
					}
				}

				get_action(action, no_count, lang, label, name, msg_field, input, total_error, type);
			}
        }
        
        return true;
    });
});
