///////////////////////////////////////////////////////
// Affichage de la popup de confirmation de la demande

function confirmPopup() {
	YAHOO.Sqli.Utils.Tools.confirm("<img src='ui/default/images/mini-teleconseillere.jpg' /> &nbsp; <span style='font-size: 11pt'>Votre demande a bien été prise en compte.</span>",
		function(){location.href="accueil.do";},"Mes abonnements - Confirmation",
		"Fermer la fenêtre","styleInvisible","400px",false);
}


////////////////////////////////////////////////////
// Fonctions de validation des champs du formulaire

// Tableau des messages d'erreur a afficher (defini pour reutiliser les fonctions de validation)
var errMessages = new Array();
// Changement d'adresse
errMessages["adresse.nom"] = "Le nom est obligatoire";
errMessages["adresse.prenom"] = "Le pr&eacute;nom est obligatoire";
errMessages["adresse.adresse2"] = "L'adresse 1 est obligatoire";
errMessages["adresse.cp"] = "Le code postal est obligatoire";
errMessages["adresse.ville"] = "La ville est obligatoire";
errMessages["adresse.auxIdent"] = "C/O est obligatoire";
// Question
errMessages["question.texte"] = "Le message est obligatoire";


function resetAdresse(id){
	var field = document.getElementById(id);
	if(field.value == field.title)
		field.value = "";
}
function testAdresse(field){
	if(field.value == field.title) {
		return new ValidatorResult(false,"Adresse 2 est obligatoire");
	}
	return new ValidatorResult(true,null);
}
/**
 * Dans le sous formulaire Changer Magazine, les magazines doivent etre differents
 */
function testEgal(field) {
	if(document.getElementById("motif.changer_de_magazine").checked
		&& trim(field.value) ) {
		if(field.id == "aboChange.titleMagazineNouveau") {
			var val = document.getElementById("aboChange.idMagazineNouveau").value
			if (val == document.getElementById("aboChange.idMagazineAncien").value) {
				return new ValidatorResult(false,"Veuillez saisir un magazine différent du magazine auquel vous êtes déjà abonné");
			}
		}
		if(field.id == "cadeauChange.idMagazineNouveau") {
			var val = document.getElementById("cadeauChange.idMagazineNouveau").value
			if (val == document.getElementById("cadeauChange.idMagazineAncien").value) {
				return new ValidatorResult(false,"Veuillez saisir un magazine différent du magazine auquel vous êtes déjà abonné");
			}
		}
	}
	return new ValidatorResult(true,null);
}
/**
 * dans le sous formulaire changer d'adresse, 
 * les dates debut et fin sont requis si la radio temporaire est checkee
 */
function dateRequis(field) {
	if(document.getElementById("motif.changer_mon_adresse").checked
		&& document.getElementById("adresse.changement_temporaire").checked ) {
		// date obligatoire
		if ( ! trim(field.value) ) {
			if (field.id == "adresse.dateDebut") {
				return new ValidatorResult(false,"Date début est obligatoire");
			} else {
				return new ValidatorResult(false,"Date fin est obligatoire");
			}
		}
	}
	return new ValidatorResult(true,null);
}

/**
 * Si le motif changer adresse est coche => le champ est  obligatoire 
 */
function adresseRequis(field) {
	if(document.getElementById("motif.changer_mon_adresse").checked 
		&& ( ! trim(field.value) || field.value == field.title) ) {
		return new ValidatorResult(false,errMessages[field.id]);
	}
	return new ValidatorResult(true,null);
}
/**
 * Si le motif changer de magazine est coche => le champ est  obligatoire 
 */
function changeAboRequis(field) {
	if( ! document.getElementById("motif.changer_de_magazine").checked ) {
		return new ValidatorResult(true,null); 
	}
	// Le motif changer de magazine est coche
	if ( ! trim(document.getElementById("aboChange.idMagazineAncien").value)
   		&& ! trim(document.getElementById("aboChange.idMagazineNouveau").value)
   		&& ! trim(document.getElementById("cadeauChange.idMagazineAncien").value)
   		&& ! trim(document.getElementById("cadeauChange.idMagazineNouveau").value) ) {

   		return new ValidatorResult(false,"Un changement est requis");
   		
   	} else if (
   		( ! trim(field.value) ) 
   		&& ((	(field.id == "aboChange.titleMagazineAncien") 
   				&& trim(document.getElementById("aboChange.idMagazineNouveau").value) 
   			) || (
   				(field.id == "aboChange.titleMagazineNouveau") 
   				&& trim(document.getElementById("aboChange.idMagazineAncien").value)
   			) || (
   				(field.id == "cadeauChange.titleMagazineAncien") 
   				&& trim(document.getElementById("cadeauChange.idMagazineNouveau").value)
   			) || (
   				(field.id == "cadeauChange.titleMagazineNouveau") 
   				&& trim(document.getElementById("cadeauChange.idMagazineAncien").value)
   		))) {
   			// Le champ en question est vide et "son pair" ne l'est pas
   			return new ValidatorResult(false,"Magazine est obligatoire");
   	}
	return new ValidatorResult(true,null);
}
/**
 * Si le motif resilier abonnement est coche => au moins 1 champ est  obligatoire 
 */
function resilieAboRequis(field) {
	if(document.getElementById("motif.changer_resilier").checked 
		&& ! trim(document.getElementById("aboResiliation.idMagazine").value) 
		&& ! trim(document.getElementById("cadeauResiliation.idMagazine").value) ) {
		
		return new ValidatorResult(false,"Un magazine doit être précisé");
	}
	
	return new ValidatorResult(true,null);
}
/**
* Check les motifs et intentions
*/
function resiliMotifRequis(field){
	var selMR = document.getElementById("aboResiliation.idMotifResiliation");
	var selIR = document.getElementById("aboResiliation.idIntention");
	var selMRC = document.getElementById("cadeauResiliation.idMotifResiliation");
	var selIRC = document.getElementById("cadeauResiliation.idIntention");
	if(selMR.options[selMR.selectedIndex].value == "" &&
		selMRC.options[selMRC.selectedIndex].value == "")
		return new ValidatorResult(false,"Un motif doit être précisé");
	if(selIR.options[selIR.selectedIndex].value == "" &&
		selIRC.options[selIRC.selectedIndex].value == "")
		return new ValidatorResult(false,"Une intention doit être précisée");	
		
	return new ValidatorResult(true,null);
	
}
/**
 * Si le motif poser une question est coche => le champ est  obligatoire 
 */
function questionRequis(field) {
	if(document.getElementById("motif.changer_question").checked 
		&& !trim(field.value)) {
		return new ValidatorResult(false,errMessages[field.id]);
	}
	return new ValidatorResult(true,null);
}


//////////////////////////////////////////////
// Gestion d'une popup de liste de magazines

/**
 * Renvoie toutes les checkbox du formulaire formSelectMag
 */
function getChecks(){
	var c = document.getElementById('formSelectMag').getElementsByTagName("input");
	var ch = new Array();
	for(var i=0 ; i< c.length ; i++){
		if(c[i].type == "checkbox")
			ch.push(c[i]);
	}
	return ch;
}
/**
 * Renvoi le nombre de checkbox cochee dans le formulaire formSelectMag
 */
function countChecks(){
	var checks = getChecks();
	var cmpt = 0;
	for(var i=0 ; i< checks.length ; i++){
		if(checks[i].checked)
			cmpt++;
	}
	return cmpt;
}

var liaisonDatatable = null;

/**
 * Restore les checkbox cochee/pas cochee lors de la navigation entre les pages
 */
function restoreChecks(){
	if(liaisonDatatable.checks != null){
		var checks = getChecks();
	    for(var i=0 ; i<checks.length  ; i++){
		if(liaisonDatatable.checks[checks[i].parentNode.nextSibling.firstChild.data])
			checks[i].checked = liaisonDatatable.checks[checks[i].parentNode.nextSibling.firstChild.data];
		}
	}
}

/**
 * Methode appelle lors d'un evenement click
 */
function checkListe(e){
	if(!document.all)
		check = e.target;
	else
		check = e.srcElement;
	if(!check.checked){
		var ind = liaisonDatatableChecks.indexOf(check.value);
		if(ind != -1)
			liaisonDatatableChecks.splice(ind,1);
	}
	if(countChecks() < 2){ // l'utilisateur ne peux selectionner que 1 magazine a la fois
		if(liaisonDatatable.checks == null)
			liaisonDatatable.checks = new Array();
		
		liaisonDatatable.checks[check.parentNode.nextSibling.firstChild.data] = check.checked;
		if(check.checked)
			liaisonDatatableChecks.push(check.value);		
		return true;
	}
	check.checked = false;
	YAHOO.Sqli.Utils.Tools.error("Vous ne pouvez cocher qu'un magazine !","Sélection de magazine - Erreur");
	return false;
}

/**
 * Initialisation de la liste des magazines
 */
function initListe(){
	var c = document.getElementById('liaisonDatatableChecksSpan').getElementsByTagName("input");
	for(var i=0 ; i< c.length ; i++){
		if(c[i].type == "hidden" && c[i].name== "liaisonDatatableChecks")
			liaisonDatatableChecks.push(c[i].value);
	}
	liaisonDatatable = null;
	this.formatCheck = function(elCell, oRecord, oColumn, sData) {
	    var genid = YAHOO.util.Dom.generateId();
	    var sel = "";
	    if(sData.indexOf("|") != -1){
	    	datas = sData.split("|");
	    	sData = datas[0];
	    	if(datas[1] == "true"){
	    		sel = " checked='checked' "
	    	}
	    }
		elCell.innerHTML = "<input id='"+genid+"' "+sel+" type='checkbox' value='"+sData+"' name='selectedMags' />";
		YAHOO.util.Event.addListener(genid, "click", checkListe );
	    
	    //elCell.innerHTML = "<input type='checkbox' onclick='checkLiaisons(this)' value='"+sData+"' name='selectedMag' />";
	};
	
	var myColumnDefs = new Array();
	var fields = new Array();
	
	myColumnDefs.push({key:"idMag",label:"Selection",formatter:this.formatCheck,sortable:false});
	fields.push("idMag");
	myColumnDefs.push({key:"titre",label:"Titre",sortable:true});
	fields.push("titre");
		
	this.myDataSource = new YAHOO.util.DataSource(YAHOO.util.Dom.get("magazinesTable")); 
	   this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE; 
	   this.myDataSource.responseSchema = { 
	          fields: fields
	      }; 
	
	this.myConfigs = { 
		caption:"Liste des magazines",
		sortedBy:{key:"titre",dir:"asc"},
	       paginated:true, 
	       paginator:{ 
	           containers: null, 
	           currentPage: 1,
	           dropdownOptions: [10,25,50], 
	           pageLinks: 0, 
	           rowsPerPage: 10
	       } 
	};

    this.myDataTable = new YAHOO.Sqli.Widgets.DatatableImpl("markup", myColumnDefs, 
     												this.myDataSource,this.myConfigs);

	liaisonDatatable =  this.myDataTable;
	this.myDataTable.subscribe("columnSortEvent", function(oArgs){ restoreChecks()}); 
	this.myDataTable.subscribe("paginatorDropdownChangeEvent", function(){ restoreChecks()}); 
	this.myDataTable.subscribe("paginatorLinkClickEvent", function(){ restoreChecks()}); 
}

var inputId = null; // Champ cache ou doit aller l'id du magazine selectionne
var inputTitle = null; // Champ cache ou doit aller le titre du magazine selectionne

/**
 * Action a faire en cas de success lors de l'envoi du formulaire : postListe()
 */
function refreshSelection(o){
	
	if(o!=null && o.responseText != null) {
		
		var reg=new RegExp(":@@:");
		var result = trim(o.responseText).split(reg);
		if (result.length == 2) {
			// Recuperation de l'id selectionne
			inputId.value = result[0];

			// Recuperation du titre du magazine
			inputTitle.value = result[1];
		}
		//else mauvais format de reponse
	}
	// else aucun magazine selectionne
}
/**
 * Appelle lors d'une erreur apres envoi du formulaire de selection des magazines
 */
function failRefreshSelection(o){
	YAHOO.Sqli.Utils.Tools.error("Impossible de récupérer la liste des magazines !","Choix des magazines");
}
/**
 * Renvoie le formulaire a l'action apres selection du ou des magazines
 */
function postListe(){
	var datas = "&selectedMags=";
	datas += liaisonDatatableChecks.join("&selectedMags=");
	YAHOO.util.Connect.asyncRequest('POST', "mesAbonnements.do?method=updateMagSelection"+datas , 
 			{success : refreshSelection,
 			failure : failRefreshSelection});
}

var liaisonDatatableChecks = null;
var waitPop = null;
function toWait(){
	waitPop = new YAHOO.widget.SimpleDialog("dlg", { visible:false, width: "30em", close: false, fixedcenter:true, modal:true, draggable:false });
		
	waitPop.setHeader("Patientez");
	waitPop.setBody("<img src='ui/default/images/indicator.gif' alt='Patientez' />&nbsp;<b>Merci de bien vouloir patienter</b>");
	waitPop.cfg.queueProperty("width","360px");
	waitPop.render(document.body);
    waitPop.show();
}
/**
 * Cree la popup qui liste les magazines
 */
function selectMag(idField, titleField){
	

	// Ces champs devront êtres mis a jour en fonction de la selection
	inputId = idField;
	inputTitle = titleField;

	liaisonDatatableChecks = new Array();
	var w = new YAHOO.Sqli.Widgets.Window("mesAbonnements.do?method=selectMag",
				"Mes abonnements - Choix d'un magazines",
				function(){waitPop.hide();initListe();},
				function(){postListe();});
	if(document.all)
		w._dlg.cfg.queueProperty("width","560px");
	w.show();
}
