

/**
 * nb_lignes_par_groupe: Tableau global contenant en clé les numéros des différents tableaux (caractéristiques groupées) et en valeur le nombre courant de ligne pour ce tableau
 * chemin_dossier_images: chaine correspondant à DIR_TEMPLATE_GLOBAL_URL càd le chemin des images
 */
nb_lignes_par_groupe = new Array();
chemin_dossier_images = "";


/**
 * Affecter DIR_TEMPLATE_GLOBAL_URL à chemin_dossier_images
 * @param chemin: chaine correspondant à DIR_TEMPLATE_GLOBAL_URL
 */
function affecterCheminImages(chemin){
	chemin_dossier_images = chemin;
}


/**
 * Affichage du popup
 * @param indice: ID du groupe dans la table caracteristiques_produits
 * @param colonnes_nombre: nombre de colonnes du tableau
 * @param ligne_suivante: id à affecter à la ligne lors de sa création
 * @param colonne_chaine: chaine formatée contenant les id de caractéristique de chaque colonnes du tableau
 * @param vider_popup: si = 1, on vide le popup lors de l'ouverture
 */
function creerPopup(indice , colonnes_nombre , ligne_suivante , colonnes_chaine, vider_popup){
	$(function() {

		$('#dialog').dialog('destroy');
		
		//si nb_lignes_par_groupe ne possède pas encore de données sur le nombre de ligne actuel de cette caractéristique groupée, on lui assigne le nombre de ligne courant
		if(!nb_lignes_par_groupe[indice]){
			nb_lignes_par_groupe[indice] = ligne_suivante;
		}
		
		var colonnes_id = colonnes_chaine.split("_" , colonnes_nombre);	//on créé un tableau contenant les id des caractéristiques des colonnes
		var html;								//variable qui contiendra le contenu de la ligne ainsi que les champs cachés
		var curseur = 1; 						//curseur incrémenté, pour les boucles
		var valeur = new Array();				//tableau contenant les selecteurs des champs du popup
		var nouveau = new Array();				//tableau contenant les selecteurs pour le champ "nouveau" si on a affaire à une liste dynamique
		var note = new Array();					//tableau contenant les notes de chaque colonne
		var option = new Array();				//tableau permettant de savoir si la case "option" d'une colonne est cochée ou non
		var incertain = new Array();			//tableau permettant de savoir si la case "incertain" d'une colonne est cochée ou non
		var infos_carac = "";					//informations sur la carac à passer en titre à l'image (nbp + checkbox)
		var html_infos_carac = "";				//code html de l'image à ajouter si des notes de bas de page sont présentes
		var vide = new Array();					//tableau permettant de savoir si la case "vide" d'une colonne est cochée ou non
		var suppression_lien;					//variable qui contiendra le code html générant la petite croix rouge de suppression de ligne
		
		//mise en place des sélecteurs pour les caractéristiques et les notes de bas de page
		for(cle in colonnes_id){

			valeur[curseur] = $("#caracteristique"+colonnes_id[cle]);
			nouveau[curseur] = $("#nouveau"+colonnes_id[cle]);
			note[curseur] = $("#note_bas_page"+colonnes_id[cle]);
			curseur++;
		}
		
		//var longueur = valeur.length;
		
		/**
		 * Permet de vérifier qu'aucune des valeurs entrées n'est nulle
		 */
		function verifierNonNul(indice){
			if(valeur[indice].val().length < 1){
				return false;
			}
			else{
				return true;
			}
		}
		
//		if(vider_popup > 0){
			viderPopup(colonnes_id , valeur , nouveau , note);
//		}
		
		$('#dialog-form'+indice).dialog({
			autoOpen:false,
			height: 450,
			width: 400,
			modal: true,
			buttons: {
				//si on clique sur le bouton d'annulation, on ferme simplement le popup
				Annuler: function(){
					viderPopup(colonnes_id , valeur , nouveau , note);
					$(this).dialog('close');
				},
				//si on clique sur le bouton d'ajout, il faut ajouter les données au formulaire
				'Ajouter': function(){
					//on considère le popup valide par défaut
					var est_valide = true;
					//mise en place du lien de suppression
					var suppression_lien = "<a href='javascript: supprimerLigneTableau(" + indice + " , " +nb_lignes_par_groupe[indice]+ " , " +colonnes_nombre+ ")' title='Supprimer la ligne " + nb_lignes_par_groupe[indice] + "'>"+
					  "<img alt='suppr' src='" + chemin_dossier_images + "gfx/supprimer.png' title='Supprimer cette ligne'>"+
						"</a>";
					
					//on teste les cases à cocher, pour chaque caractéristique
					curseur = 1;
					for(cle in colonnes_id){
						//on teste si les cases sont cochées lors de la validation du popup et on récupère une valeur, en fonction du résultat
						option[curseur] = (document.getElementById("option" + colonnes_id[cle]).checked == true) ? "t" : "f";
						incertain[curseur] = (document.getElementById("incertain" + colonnes_id[cle]).checked == true) ? "t" : "f";
						vide[curseur] = (document.getElementById("vide" + colonnes_id[cle]).checked == true) ? "t" : "f";
						curseur++;
					}
					
					//html contient le code html de la ligne du tableau à ajouter. On commence avec le début du code et le lien de suppression de ligne qui est déjà construit
					html = "<tr id='ligne" + indice + "_" + nb_lignes_par_groupe[indice] + "'><td align='center'>" + suppression_lien + "</td>";
					
					curseur = 1;
					//pour chaque colonne on rajoute une case (HTML) et les champs cachés (valeur + note_bas_page + 3cases à cocher)
					for(cle in colonnes_id){
						//on vérifie la validité (longueur non nulle)
						est_valide = est_valide && verifierNonNul(curseur);
						//on ajoute les informations au titre de l'image qui indique qu'il y a des notes de bas de page
						infos_carac = note[curseur].val();
						infos_carac += (option[curseur] == "t") ? " (option)" : "" ;
						infos_carac += (incertain[curseur] == "t") ? " (incertain)" : "" ;
						infos_carac += (vide[curseur] == "t") ? " (vide)" : "" ;
						html_infos_carac = "<img alt='nbp_oui' src='" + chemin_dossier_images + "gfx/ajouter.png' title='" + infos_carac + "' />";
						
						//si on a affaire à une liste dynamique, il faut prendre en compte la nouvelle valeur, le cas échéant
						if(nouveau[curseur].val()){
							if(nouveau[curseur].val().length > 0){
								html += "<td align='center'>" + nouveau[curseur].val();
								if (option[curseur] == "t" || incertain[curseur] == "t" || vide[curseur] == "t" || note[curseur].val().length > 0 ){
									html += " " + html_infos_carac;
								}
								html += "</td>";
								html += "<input type='hidden' value='" + nouveau[curseur].val().replace(new RegExp("(')" , "g") , "&apos;") + "' name='groupe" + indice + "_" + nb_lignes_par_groupe[indice] + "_" + colonnes_id[cle] + "' />";
							}
						}
						else{
							html += "<td align='center'>" + valeur[curseur].val() ;
							if (option[curseur] == "t" || incertain[curseur] == "t" || vide[curseur] == "t" || note[curseur].val().length > 0 ){
								html += html_infos_carac;
							}
							html += "</td>";
							html += "<input type='hidden' value='" + valeur[curseur].val().replace(new RegExp("(')" , "g") , "&apos;") + "' name='groupe" + indice + "_" + nb_lignes_par_groupe[indice] + "_" + colonnes_id[cle] + "' />";
						}
						html += "<input type='hidden' value='" + note[curseur].val().replace(new RegExp("(')" , "g") , "&apos;") + "' name='notes" + indice + "_" + nb_lignes_par_groupe[indice] + "_" + colonnes_id[cle] + "_note' />";
						html += "<input type='hidden' value='" + option[curseur] + "' name='notes" + indice + "_" + nb_lignes_par_groupe[indice] + "_" + colonnes_id[cle] + "_option' />";
						html += "<input type='hidden' value='" + incertain[curseur] + "' name='notes" + indice + "_" + nb_lignes_par_groupe[indice] + "_" + colonnes_id[cle] + "_incertain' />";
						html += "<input type='hidden' value='" + vide[curseur] + "' name='notes" + indice + "_" + nb_lignes_par_groupe[indice] + "_" + colonnes_id[cle] + "_vide' />";
						curseur++;
					}
					html +="</tr>";
					if(est_valide){
						//si le tableau contient une ligne indiquant qu'il est vide, on la supprime avant d'ajouter notre nouvelle ligne
						$(".ligne_tableau_vide_"+indice).remove(":contains('Aucune valeur existante')");
						//on ajoute la ligne
						$('#table'+indice+' tbody').append(html); 
						//on remet l'indication comme elle était par défaut, au cas où on réouvre le popup
						$(".popup_header").text("Complétez les valeurs des caractéristiques et cliquez sur 'Ajouter'.");
						$(".popup_header").css("color" , "");
						//on incrémente la variable globale du nombre de ligne pour tableau, au cas où on ajoute une autre ligne par la suite
						nb_lignes_par_groupe[indice] = nb_lignes_par_groupe[indice] + 1;
						//et on ferme le popup
						$(this).dialog('close');
						viderPopup(colonnes_id , valeur , nouveau , note);
					}
					else{
						//on affiche un message d'erreur
						$(".popup_header").text("Les valeurs ne peuvent être nulles !");
						$(".popup_header").css("color" , "red");
					}
				}
			},
			close: function() {
				
			}
			
		});
		
	});
	
}


/**
 * Désactive ou active le choix du constructeur en fonction du choix du parent
 */
function desactiverConstructeur(){
	if($("select[name='parent_enfant'] option:selected").val() != "parent"){
		var valeur = $("select[name='parent_enfant'] option:selected").val();
		$("#constructeur").attr("disabled" , "disabled");
		$("#info_constructeur").show();
		$("#info_constructeur").append("<input type='hidden' value='" + valeur + "' name='constructeur' id='constructeur_cache' />");
	}
	else{
		$("#constructeur").removeAttr("disabled");
		$("#info_constructeur").hide();
		$("#constructeur_cache").remove();
	}
}


/**
 * Renvoie true si l'argument est un nombre, false sinon
 * @param n : la valeur à tester
 */
function isNumber(n) {
	return !isNaN(parseFloat(n)) && isFinite(n);
}


/**
 * Retourne le nombre de ligne d'un tableau HTML
 * @param id: ID du tableau HTML dont on veut connaitre le nombre de lignes
 */
function nombreLignesTableau(id){
	
	var res = 0;	//résultat de la fonction initialisé à 0
    var lignes = document.getElementById(id).getElementsByTagName('tr');	//ensemble des lignes du tableau

    for(i=1;i<lignes.length;i++)
    { 
          if(lignes[i].getElementsByTagName('td')[1])
          {
                res++;
          }
    } 
    return res;
}


/**
 * Supprimer une ligne d'id: "table_indice_ligne" , d'un tableau
 * @param
 * 	> indice: indice de la caractéristique
 * 	> lignes_id: ligne du tableau
 * 	> colonnes_nombre: le nombre de colonnes du tableau (utile pour le cas où on supprime la dernière colonne et qu'on veut ajouter un message qui prendra toute une ligne)
 */
function supprimerLigneTableau(indice , lignes_id , colonnes_nombre){
	$(function() {
		
		if(confirm("Êtes-vous certain de vouloir supprimer cette caractéristique ?")){
			$("#ligne"+indice+"_"+lignes_id+"").remove();
			
			if(nombreLignesTableau('table'+indice) == 0){
				$('#table'+indice+' tbody').append('<tr class="ligne_tableau_vide_'+indice+'">' +
						'<td colspan="'+(colonnes_nombre+1)+'">' + "<em>Aucune valeur existante...</em>" + '</td>' + 
						'</tr>');
			}
			$("input[name^='groupe"+indice+"_"+lignes_id+"_']").remove();
			$("input[name^='notes"+indice+"_"+lignes_id+"_']").remove();
			
			var html = "<input type='hidden' value='" + indice + "_" + lignes_id + "' name='suppr" + indice + "_" + lignes_id + "' />";
			$("#table" + indice + " tbody").append(html);
			
		}
	
	});
}


/**
 * Fonction de remplacement de toggle qui fonctionne vraiment :-)
 * @param selecteur: le selecteur de l'élément que l'on veut afficher ou cacher
 * @param type (NON IMPLEMENTE CAR ERREURS): contient le nom de l'effet désiré ("slow" ou "normal" ou autre). Par défaut: pas d'effet
 */
function toggle(selecteur , type){
	//alert(selecteur.css("display"));
	if(selecteur.css("display") != "none"){
		selecteur.hide();
	}
	else{
		selecteur.show();
	}
}


/**
 * Vider entièrement les valeurs d'un popup
 * @param colonnes_id : id des colonnes du tableau associé au popup
 * @param valeur : tableau contenant les selecteurs vers les champs du popup
 * @param nouveau : tableau contenant les selecteurs vers les éventuels champs d'ajout d'une nouvelle valeur du popup pour les menus déroulants dynamiques
 * @param note : tableau contenant les selecteurs vers les champs de note de bas de page
 */
function viderPopup(colonnes_id , valeur , nouveau , note){
	
	for(cle in valeur){
		valeur[cle].val("");
		nouveau[cle].val("");
		note[cle].val("");
	}
	for(cle in colonnes_id){
		document.getElementById("option" + colonnes_id[cle]).checked = false;
		document.getElementById("incertain" + colonnes_id[cle]).checked = false;
		document.getElementById("vide" + colonnes_id[cle]).checked = false;
		$("#div_note" + colonnes_id[cle]).hide();
	}
}


/**
 * Définit quelle ligne afficher ou non en fonction du type choisi dans la classe caractéristique
 * @param select : selecteur du champ select concerné
 */
function visibiliteChoixType(carac_id){
	if($("#type" + carac_id).val() == 'menu_deroulant_table'){
		$('#divtable' + carac_id).show();
		$('#divcommunes' + carac_id).hide();
		$('#divliste' + carac_id).hide();
	} 
	else if($("#type" + carac_id).val() == 'menu_deroulant_table_commune'){ 
		$('#divtable' + carac_id).hide();
		$('#divcommunes' + carac_id).show();
		$('#divliste' + carac_id).hide();
	} 
	else if($("#type" + carac_id).val() == 'menu_deroulant_choix_predefinis') { 
		$('#divtable' + carac_id).hide();
		$('#divcommunes' + carac_id).hide();
		$('#divliste' + carac_id).show();
	}
	else { 
		$('#divtable' + carac_id).hide();
		$('#divcommunes' + carac_id).hide();
		$('#divliste' + carac_id).hide();
	}
}



