/**
 * $Id: register.js 474 2010-04-06 14:21:29Z cyril $
 *
 * @brief  Register JS
 *
 * @package Vacances Energie
 * @author $Author: cyril $
 * @copyright Copyright Galilée
 * @date $Date: 2010-04-06 16:21:29 +0200 (mar 06 avr 2010) $
 **/

var loadingImg       = _root+'img/load.gif';
var loadingLineImg   = _root+'img/load_line.gif';

function isValidEmailAddress(emailAddress) {
	var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
	return pattern.test(emailAddress);
}

var phpJs = {
	array_keys : function(input, search_value, argStrict) {
	    var tmp_arr = {}, strict = !!argStrict, include = true, cnt = 0;
	    var key = '';
	    
	    for (key in input) {
	        include = true;
	        if (search_value != undefined) {
	            if (strict && input[key] !== search_value){
	                include = false;
	            } else if (input[key] != search_value){
	                include = false;
	            }
	        }
	        
	        if (include) {
	            tmp_arr[cnt] = key;
	            cnt++;
	        }
	    }
	    
	    return tmp_arr;
	},
	
	explode : function(delimiter, string, limit) {
	    var emptyArray = { 0: '' };
	    
	    // third argument is not required
	    if ( arguments.length < 2 ||
	        typeof arguments[0] == 'undefined' ||
	        typeof arguments[1] == 'undefined' )
	    {
	        return null;
	    }
	 
	    if ( delimiter === '' ||
	        delimiter === false ||
	        delimiter === null )
	    {
	        return false;
	    }
	 
	    if ( typeof delimiter == 'function' ||
	        typeof delimiter == 'object' ||
	        typeof string == 'function' ||
	        typeof string == 'object' )
	    {
	        return emptyArray;
	    }
	 
	    if ( delimiter === true ) {
	        delimiter = '1';
	    }
	    
	    if (!limit) {
	        return string.toString().split(delimiter.toString());
	    } else {
	        // support for limit argument
	        var splitted = string.toString().split(delimiter.toString());
	        var partA = splitted.splice(0, limit - 1);
	        var partB = splitted.join(delimiter.toString());
	        partA.push(partB);
	        return partA;
	    }
	},

	floatval: function(mixed_var) {
	    return (parseFloat(mixed_var) || 0);
	},
	
	str_replace : function(search, replace, subject, count) {
	    var i = 0, j = 0, temp = '', repl = '', sl = 0, fl = 0,
	            f = [].concat(search),
	            r = [].concat(replace),
	            s = subject,
	            ra = r instanceof Array, sa = s instanceof Array;
	    s = [].concat(s);
	    if (count) {
	        this.window[count] = 0;
	    }

	    for (i=0, sl=s.length; i < sl; i++) {
	        if (s[i] === '') {
	            continue;
	        }
	        for (j=0, fl=f.length; j < fl; j++) {
	            temp = s[i]+'';
	            repl = ra ? (r[j] !== undefined ? r[j] : '') : r[0];
	            s[i] = (temp).split(f[j]).join(repl);
	            if (count && s[i] !== temp) {
	                this.window[count] += (temp.length-s[i].length)/f[j].length;}
	        }
	    }
	    return sa ? s : s[0];
	},
	
	substr : function(f_string, f_start, f_length) {
	    f_string += '';
	    if (f_start < 0) {
	        f_start += f_string.length;
	    }
	    if (f_length == undefined) {
	        f_length = f_string.length;
	    } else if (f_length < 0){
	        f_length += f_string.length;
	    } else {
	        f_length += f_start;
	    }
	    if (f_length < f_start) {
	        f_length = f_start;
	    }
	    return f_string.substring(f_start, f_length);
	},
	
	number_format : function(number, decimals, dec_point, thousands_sep) {
	    var n = number, prec = decimals;
	    var toFixedFix = function (n,prec) {
	        var k = Math.pow(10,prec);
	        return (Math.round(n*k)/k).toString();
	    };
	    n = !isFinite(+n) ? 0 : +n;
	    prec = !isFinite(+prec) ? 0 : Math.abs(prec);
	    var sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;
	    var dec = (typeof dec_point === 'undefined') ? '.' : dec_point;

	    var s = (prec > 0) ? toFixedFix(n, prec) : toFixedFix(Math.round(n), prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;

	    var abs = toFixedFix(Math.abs(n), prec);
	    var _, i;

	    if (abs >= 1000) {
	        _ = abs.split(/\D/);
	        i = _[0].length % 3 || 3;

	        _[0] = s.slice(0,i + (n < 0)) +
	              _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
	        s = _.join(dec);
	    } else {
	        s = s.replace('.', dec);
	    }

	    var decPos = s.indexOf(dec);
	    if (prec >= 1 && decPos !== -1 && (s.length-decPos-1) < prec) {
	        s += new Array(prec-(s.length-decPos-1)).join(0)+'0';
	    }
	    else if (prec >= 1 && decPos === -1) {
	        s += dec+new Array(prec).join(0)+'0';
	    }
	    return s;
	},
	
	empty : function(mixed_var) {
	    var key;
	    
	    if (mixed_var === "" ||
	        mixed_var === 0 ||
	        mixed_var === "0" ||
	        mixed_var === null ||
	        mixed_var === false ||
	        mixed_var === undefined
	    ){
	        return true;
	    }

	    if (typeof mixed_var == 'object') {
	        for (key in mixed_var) {
	            return false;
	        }
	        return true;
	    }

	    return false;
	},
	
	in_array : function(needle, haystack, argStrict) {
	    var key = '', strict = !!argStrict;
	    if (strict) {
	        for (key in haystack) {
	            if (haystack[key] === needle) {
	                return true;
	            }
	        }
	    } else {
	        for (key in haystack) {
	            if (haystack[key] == needle) {
	                return true;
	            }
	        }
	    }
	    return false;
	},
	
	intval : function (mixed_var, base) {
	    var tmp;

	    var type = typeof( mixed_var );

	    if (type === 'boolean') {
	        return (mixed_var) ? 1 : 0;
	    } else if (type === 'string') {
	        tmp = parseInt(mixed_var, base || 10);
	        return (isNaN(tmp) || !isFinite(tmp)) ? 0 : tmp;
	    } else if (type === 'number' && isFinite(mixed_var) ) {
	        return Math.floor(mixed_var);
	    } else {
	        return 0;
	    }
	},
	
	trim : function (str, charlist) {
	    var whitespace, l = 0, i = 0;
	    str += '';
	    
	    if (!charlist) {
	        // default list
	        whitespace = " \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000";
	    } else {
	        // preg_quote custom list
	        charlist += '';
	        whitespace = charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
	    }
	    
	    l = str.length;
	    for (i = 0; i < l; i++) {
	        if (whitespace.indexOf(str.charAt(i)) === -1) {
	            str = str.substring(i);
	            break;
	        }
	    }
	    
	    l = str.length;
	    for (i = l - 1; i >= 0; i--) {
	        if (whitespace.indexOf(str.charAt(i)) === -1) {
	            str = str.substring(0, i + 1);
	            break;
	        }
	    }
	    
	    return whitespace.indexOf(str.charAt(0)) === -1 ? str : '';
	}

};

var register = {
	pAdhesion : false,
	pcheckAdhesion : false,
	pData : {},
	pId   : 0,
	pCodeSejour : 0,
	pCodeSejourVille : 0,
	pNbInscris : 0,
	pRegOpts : {},
	pTabs : ['Mon panier', 'Responsables / payeur', 'Paiement'],
	pLoadB: '<div id="loadingBlock"><img src="'+loadingLineImg+'" alt="Loading" /></div>',
	pBoard: ['Séjour', 'Date et lieu', 'Nom', 'Prénom', 'Né(e) le', 'Prix séjour', 'Options(s)', 'Transport', 'Assurance annulation (2%)', 'Total ligne', 'Modifier', 'Supprimer'],
	pRegB : {name:{t:'text',n:'nom',v:'Nom*'}, surname:{t:'text',n:'prenom',v:'Prénom*'},
			birthdate:{t:'text',n:'date_naissance',v:'Date de naissance*'}, sex:{t:'select',n:'sexe',v:'Sexe'},
			stayDate:{t:'select',n:'code_sejour',v:'Date du séjour'}, transport:{t:'select',n:'code_sejour_ville',v:'Transport'},
			cancelInsurance:{t:'checkbox',n:'assurance',v:'Assurance annulation (2% du prix du sejour avec transport)'}},
	pTxt  : {addTitle:'Ajouter un participant',addButton:'Ajouter un participant',validateButton:'Valider les coordonnées',
			delSel:'Supprimer la sélection',continueButton:'Continuer mes achats',validateCmd:'Je valide ma commande',
			remAdh:'',totalCmd:'Total achat',modTitle:'Modifier un participant',starFields:'* Champs obligatoires',
			toPay:'Net à payer',From:'Du',to:'au',days:'jours',CGVAccept:'J\'accepte les Conditions Générales de Vente',
			CGVConsult:'(cliquez ici pour consulter les Conditions Générales de Vente)',defaultCity:'Sans transport',
			birthFieldAlert:'Veuillez d\'abord saisir la date de naissance du participant'},
	pTxtEr: {nom_adherent               :'Nom manquant',
			 prenom_adherent            :'Prénom manquant',
			 adresse1_adherent          :'Adresse manquante',
			 code_postal_adherent       :'Code Postal manquante',
			 ville_adherent             :'Ville manquante',
			 telephone_adherent         :'Téléphone manquant',
			 email_adherent             :'Email manquant',
			 confirmation_email_adherent:'Confirmation Email manquante',
			 email_adherent_nok         :'Email non valide',
			 confirmation_email_nok     :'L\'email de confirmation ne correspond pas à l\'adresse mail saisie',
			 nom_responsable1           :'Nom du responsable 1 manquant',
			 prenom_responsable1        :'Prénom du responsable 1 manquant',
			 adresse_responsable1       :'Adresse du responsable 1 manquant',
			 cp_responsable1            :'Code postal du responsable 1 manquant',
			 ville_responsable1         :'Ville du responsable 1 manquant',
			 teldom_responsable1        :'Tél. domicile du responsable 1 manquant',
			 mail_responsable1          :'Email du responsable 1 manquant',
			 conf_mail_responsable1     :'La confirmation de l\'Email du responsable 1 est manquante',
			 mail_responsable1_nok      :'Email du responsable 1 non valide',
			 mail_resp1_confirm_nok     :'L\'email de confirmation du responsable 1 ne correspond pas à l\'adresse mail saisie'
			},
	pChkS1: ['nom_adherent','prenom_adherent','adresse1_adherent','code_postal_adherent','ville_adherent','telephone_adherent','email_adherent','confirmation_email_adherent'],
	pChkS2: ['nom_responsable1', 'prenom_responsable1', 'adresse_responsable1', 'cp_responsable1', 'ville_responsable1', 'teldom_responsable1', 'mail_responsable1', 'conf_mail_responsable1'],
	pSexe : {M:'Masculin',F:'Feminin'},
	pAssurance : 0.02,
	pUpdateId : 0,
	pRemisePartenaire : 0,
	pMontantRemisePartenaire : 0,
	
	addRegistration: function() {
		var error = 0;
		jQuery.each($('form#addRegistration input[type=text]'), function(i, val) {
			if($(val).val() == '') {
				error++;
			}
		});
		if(error > 0) {
			alert('Erreur : veuillez remplir tous les champs !');
			return;
		}
		var assurance = '0';
		if($('#addRegistration #assurance:checked').length != 0) {
			var assurance = '1';
		}
		var options = {};
		for(id in this.pData.options[this.pCodeSejour]) {
			if($('#optBlocks input#opt_'+id+':checked').length != 0) {
				options[id] = register.pData.options[register.pCodeSejour][id];
			}
		}
		var params = ['',
		              options,
		              $('#addRegistration #nom').val(),
		              $('#addRegistration #prenom').val(),
		              $('#addRegistration #date_naissance').val(),
		              $('#addRegistration #code_sejour').val(),
		              $('#addRegistration #code_sejour_ville').val(),
		              '',
		              assurance,
		              ''
		              ];
		var options = $('#optBlocks input:checked').serialize();
		var url = _root+'index.php?page=inscription&action=';
		if(register.pUpdateId != 0) {
			url += 'mod&id='+register.pUpdateId;
		} else {
			url += 'add';
		}
		$.ajax({
			type:    'POST',
			url :    url,
			data:    'nom='+params[2]+'&prenom='+params[3]+'&date_naissance='+params[4]+'&sexe='+$('#addRegistration #sexe').val()+
					 '&code_sejour='+params[5]+'&code_sejour_ville='+params[6]+'&assurance='+assurance+'&'+options,
			dataType:'json',
			success: function(data, textStatus) {
				$('table#registerBoard tbody').html('');
				register.pData.registrations = data.registrations;
				register.addBoardRegistrations();
				register.getPartialTotalPrice();
				$('#cmdBlock #addButton').remove();
				$('#cmdBlock').show();
			}
		});
		$('#addRegistration').hide();
		$('#ajout_participant').show().unbind('click').click(function() {
			$('#addRegistration').show();
			$(this).hide();
		});
		$('#addRegistration input[type="text"]').val('');
	},
	
	addBoardRegistration: function(id, params) {
		var regParams = this.pData.registrations[id];
		var idSej = regParams['id_sejour'];
		var sej   = this.pData.dates[idSej][params[5]];
		var prixTransport = 0;
		this.pRemisePartenaire = phpJs.floatval(regParams.remise_pourcent) / 100;
		var price = phpJs.floatval(regParams['cout_sejour']);
		
		if(register.getPromoTransport(regParams['code_sejour'], regParams['code_sejour_ville'], regParams['date_naissance'])) {
			//var prixTransport = phpJs.floatval(this.pData.villes[regParams['code_sejour']][regParams['code_sejour_ville']]['prixRed']);
			var prixTransport = phpJs.floatval(regParams['prix_transport_reduit']);
		} else {
			var prixTransport = phpJs.floatval(regParams['prix_transport']);
		}
		var optTotal = 0;
		if(!phpJs.empty(params[1])) {
			for(opt in params[1]) {
				optTotal += phpJs.floatval(params[1][opt]['prix']);
			}
		}
		if(this.pRemisePartenaire > 0) {
			price         = price         - price         * this.pRemisePartenaire;
//			prixTransport = prixTransport - prixTransport * this.pRemisePartenaire;
//			optTotal      = optTotal      - optTotal      * this.pRemisePartenaire;
		}
		var assurPrice = 0;
		if(params[8] == '1') {
			assurPrice = (phpJs.floatval(price) + phpJs.floatval(prixTransport) + phpJs.floatval(optTotal)) * phpJs.floatval(register.pAssurance);
		}
		if(!register.pData.villes[params[5]][params[6]]) {
			params[6] = 'Internal Error';
		} else {
			params[6] = register.pData.villes[params[5]][params[6]].ville;
		}
		if(params[8] == '1') {
			params[8] = '<input type="checkbox" name="assurance_annulation['+id+']" checked="checked" disabled="disabled" /><br />'+phpJs.number_format(assurPrice, 2, ',', ' ');
		} else {
			params[8] = '<input type="checkbox" name="assurance_annulation['+id+']" disabled="disabled" />';
		}
		this.pRegOpts[id] = params[1];
		var sejour   = params[0];
		var dateLieu = sej.start+' '+register.pTxt.to+' '+sej.end+'<br />'+this.optImg(id, 'ville');
		var options  = this.optImg(id, 'option')+'<br />'+phpJs.number_format(optTotal, 2, ',', ' ')+'&euro;';
		var nom      = params[2];
		var prenom   = params[3];
		var birth    = params[4];
		var villeTr  = params[6] +'<br />'+phpJs.number_format(prixTransport, 2, ',', ' ')+'&euro;';
		var prix     = phpJs.number_format(price, 2, ',', ' ');
		var total    = price + prixTransport + optTotal + assurPrice;
		var totalS   = phpJs.number_format(total, 2, ',', ' ');
		var assur    = params[8];
		var suppr    = '<a href="javascript:;" onclick="register.delSel('+id+');" title="Cliquez ici pour supprimer le séjour"><img src="'+_root+'img/poub.gif" alt="Supprimer" /></a>';
		var modif    = '<a href="javascript:;" onclick="register.manageUpdateRegistrationBlock('+id+
					   ')" title="Cliquez ici pour modifier le séjour"><img src="'+_root+'img/edition.gif" alt="" /></a></td>';
		
		params = [sejour, dateLieu, nom, prenom, birth, prix, options, villeTr, assur, totalS, modif, suppr];
		
		var boardContent = '<tr id="tr_'+id+'">';
		jQuery.each(params, function(i, val) {
			var contentClass = '';
			if(i > 9) {
				var contentClass = ' class="hideOnStep2"';
			}
			boardContent += '<td'+contentClass+'>'+val+'</td>';
		});
		boardContent += '</tr>';
		$('table#registerBoard tbody').append(boardContent);
		$('#option_'+id).simpletooltip({
			customTooltip: function(id) {
				id = phpJs.explode('_', $(id).attr('id'));
				id = id[1];
				if(phpJs.empty(register.pRegOpts[id])) {
					return '<p class="tooltip">Aucune option sélectionnée</p>';
				}
				var content = '<p class="tooltip">Options sélectionnées :<br />';
				jQuery.each(register.pRegOpts[id], function(i, val) {
					content += val.titre+' ('+phpJs.number_format(val.prix, 2, ',', ' ')+' &euro;)<br />';
				});
				content += '</p>';
				return content;
			},
			showEffect: 'fadeIn',
			hideEffect: 'fadeOut'
		});
		$('#ville_'+id).simpletooltip({
			customTooltip: function(id) {
				return '<p class="tooltip">'+sej.centr+'<br />'+sej.ville+'</p>';
			},
			showEffect: 'fadeIn',
			hideEffect: 'fadeOut'
		});
		
		return total;
	},
	
	addBoardRegistrations: function() {
		if(register.pData.registrations) {
			$('table#registerBoard tbody').html('');
			var totalPrice = 0;
			var totalAssuranceAnnulation = 0;
			for(id in register.pData.registrations) {
				var val = register.pData.registrations[id];
				var price = phpJs.floatval(val.prix_sejour)+phpJs.floatval(val.prix_transport);
				if(val.assurance_annulation == '1') {
					totalAssuranceAnnulation = price * phpJs.floatval(register.pAssurance);
					price += totalAssuranceAnnulation;
				}
				var params = [val.titre,
				              val.options,
				              val.nom,
				              val.prenom,
				              val.date_naissance,
				              val.code_sejour,
				              val.code_sejour_ville,
				              price,
				              val.assurance_annulation,
				              ''
				              ];
				totalPrice += register.addBoardRegistration(id, params);
			}
		} else {
			$('table#registerBoard tbody').append('<tr />');
		}
	},
	
	delSel: function(delId) {
		if(!phpJs.empty(delId) && confirm('Etes-vous certain de vouloir supprimer cette inscription ?')) {
			delete register.pData.registrations[delId];
			$('#registerBoard tr#tr_'+delId).remove();
			if(phpJs.empty(register.pData.registrations)) {
				$('#cmdBlock #adherent_false').attr('checked', false);
				$('#montant_adhesion').html('0,00');
				$('#cmdBlock, #remisePartenaire, #remise_totale, #remiseDeduite').hide();
				$('table#registerBoard tbody').append('<tr />');
				register.pAdhesion = false;
			}
			$.ajax({
				type   : 'GET',
				url    : _root+'index.php?page=inscription&action=del&del[]='+delId,
				success: function() {
					register.getPartialTotalPrice();
				}
			});
		}
	},
	
	getPartialTotalPrice: function() {
		var total         = 0;
		var totalRemise   = 0;
		var percentRemise = 0;
		var codeRemise    = '';
		var codeAdh       = '';
		
		for(reg in this.pData.registrations) {
			var val        = register.pData.registrations[reg];
			var assurance  = 0;
			var codeRemise = val.code_partenaire;
			var codeAdh    = val.code_adherent_lie;
			var percentRemise = val.remise_pourcent;
			var rTotalRemise = 0;
			this.pRemisePartenaire = phpJs.floatval(val.remise_pourcent) / 100;
			var rTotal = phpJs.floatval(val['cout_sejour']);
			
			if(this.pRemisePartenaire > 0) {
				rTotalRemise = phpJs.floatval(rTotal * this.pRemisePartenaire);
				totalRemise += rTotalRemise;
				rTotal = rTotal - rTotalRemise;
			}
			if(register.getPromoTransport(val['code_sejour'], val['code_sejour_ville'], val['date_naissance'])) {
				rTotal += phpJs.floatval(register.pData.villes[val['code_sejour']][val['code_sejour_ville']]['prixRed']);
			} else {
				rTotal += phpJs.floatval(val['prix_transport']);
			}
			if(!phpJs.empty(val['options'])) {
				for(opt in val['options']) {
					rTotal += phpJs.floatval(val['options'][opt]['prix']);
				}
			}
			if(val['assurance_annulation'] == 1) {
				assurance = rTotal * register.pAssurance;
			}
			total += (rTotal + assurance);
		}
		
		$('.totalPriceBlockWoAdh').html(phpJs.number_format(total, 2, ',', ' '));
		if(this.pAdhesion) {
			total += 10;
		}
		$('.totalPriceBlock').html(phpJs.number_format(total, 2, ',', ' '));
		this.pMontantRemisePartenaire = phpJs.number_format(totalRemise, 2, ',', ' ');
		if(this.pRemisePartenaire > 0) {
			if(codeAdh == 0) {
				codeAdh = '';
			}
			$('#remisePartenaire').html('Vous avez bénéficié d\'une remise de '+percentRemise+'%.');
			$('#remiseDeduite'   ).html('<br />(Remise Déduite)');
			$('#remise_totale'   ).html('Remise totale : <br /> '+register.pMontantRemisePartenaire+' €');
			$('#codeRemPart'     ).val (codeRemise);
			$('#adhCode'         ).val (codeAdh   );
			$('#msg_saisie_code_adherent').hide();
		} else {
			$('#remisePartenaire, #remiseDeduite, #remise_totale').html('');
//			$('#codeRemPart, #adhCode').val('');
		}
		
		return total;
	},
	
	setSejourTotalPrice: function() {
		var prix_sejour = 0;
		var prix_transport = 0;
		var prix_transport_remise = 0;
		var age_limite_facturation = 0;
		
		var code_sejour = $('select#code_sejour option:selected').val();
		if(!code_sejour) {
			return;
		}
		$.each(register.pData.dates[register.pId], function(i,item) {
			if(i==code_sejour){
				prix_sejour = phpJs.floatval(item.prix);
			}
		});
		
		var code_sejour_ville = $('select#code_sejour_ville option:selected').val();
		
		if(!phpJs.empty(register.pData.villes[code_sejour])) {
			$.each(register.pData.villes[code_sejour], function(i,item){
				
				if(i==code_sejour_ville){
					prix_transport = phpJs.floatval(item.prix);
					prix_transport_remise = phpJs.floatval(item.prixRed);
					
					age_limite_facturation = item.age_limite_facturation;
				}
			});
		
		}
		
		var prix_total = (phpJs.floatval(prix_sejour)+phpJs.floatval(prix_transport));
		
		if(register.getPromoTransport(code_sejour, code_sejour_ville, $('#date_naissance').val())) {
			prix_total = (phpJs.floatval(prix_sejour)+phpJs.floatval(prix_transport_remise));
		}
		
		if(!phpJs.empty(register.pData.options[code_sejour])) {
			$.each(register.pData.options[code_sejour], function(i,item){
				if($('#addRegistration #opt_'+i+':checked').length != 0) {
					prix_total += phpJs.floatval(item.prix);
				}
			});
		}
		
		if($('#addRegistration #assurance:checked').length != 0) {
			prix_total = prix_total + (prix_total * register.pAssurance);
		}
		
		$('#prix_total_sejour').html(phpJs.number_format(prix_total, 2, ',', ' ')+' &euro;');
	},
	
	getStep: function(step) {
		if(step == 2) {
			this.updateRemisePartenaire(function(result) {
				if(result === true) {
					register.getStep(22);
				}
			});
		} else if(step == 22) {
//			if(phpJs.empty($('#cmdBlock #adherent_false:checked').val()) && !phpJs.empty($('#adhCode').val()) && register.pcheckAdhesion == false) {
//				if(!register.checkAdhesion()) {
//					return;
//				}
//			}
//			if(!phpJs.empty($('#codeRemPart').val())) {
//				if(!register.checkCodePartenaire()) {
//					return;
//				}
//			}
			
			if(phpJs.empty(register.pData.registrations)) {
				alert('Erreur : pas de participants !');
				return;
			} else if(phpJs.empty($('#cmdBlock #adherent_false:checked').val()) && phpJs.empty($('#adhCode').val())) {
				alert('Erreur : veuillez souscrire une nouvelle adhésion ou entrer un code adhérent !');
				return;
			} else if($('#cmdBlock input#accept_cgv:checked').length == 0) {
				alert('Erreur : vous devez accepter les Conditions Générales de Vente !');
				return;
			} else if(!phpJs.empty($('#cmdBlock #adherent_false:checked').val())) {
				var txtError = '';
				
				for(t in register.pChkS1) {
					if(phpJs.empty($('#cmdBlock #adhesion #'+register.pChkS1[t]).val())) {
						txtError += register.pTxtEr[register.pChkS1[t]]+'\n';
					} else if(register.pChkS1[t] == 'email_adherent' && !isValidEmailAddress($('#cmdBlock #adhesion #email_adherent').val())) {
						txtError += register.pTxtEr.email_adherent_nok+'\n';
					} else if(register.pChkS1[t] == 'confirmation_email_adherent' && $('#cmdBlock #adhesion #confirmation_email_adherent').val() != $('#cmdBlock #adhesion #email_adherent').val()) {
						txtError += register.pTxtEr.confirmation_email_nok+'\n';
					}
				}

				if(!phpJs.empty(txtError)) {
					alert('Erreur : \n' + txtError);
					return;
				}
			}
			
			$('.edtion_sejour, #addRegistration, #cmdBlock, #ajout_participant').hide();
			$('#totalCmdBlock').show();
			$('table#registerBoard th:eq(10), table#registerBoard th:eq(11), table#registerBoard .hideOnStep2').hide();
			$('#codeRemPart, #adhCode').attr('disabled', 'disabled');
			this.mkTabs(2);
			// Fix change() IEs
		    if($.browser.msie) {
		        $('input:checkbox, input:radio').click(function() {
			        this.blur();
			        this.focus();
		        });	
		    }
			$.ajax({
				type    : 'POST',
				data:    'nom_adherent='+$('#adhBlock #nom_adherent').val()+'&prenom_adherent='+$('#adhBlock #prenom_adherent').val()+'&adresse1_adherent='+$('#adhBlock #adresse1_adherent').val()+'&code_postal_adherent='+$('#adhBlock #code_postal_adherent').val()+
				 '&ville_adherent='+$('#adhBlock #ville_adherent').val()+'&pays_adherent='+$('#adhBlock #pays_adherent').val()+'&telephone_adherent='+$('#adhBlock #telephone_adherent').val()+'&telephone_portable_adherent='+$('#adhBlock #telephone_portable_adherent').val()+'&email_adherent='+$('#adhBlock #email_adherent').val(),
				url     : _root+'index.php?page=inscription&action=getTplResponsables&codeAdherent='+$('#adhCode').val()+'&adresseMailSaisie='+$('#confirmation_email_adherent').val(),
				dataType: 'html',
				success : function(data, textStatus) {
					$('#dialogWindow').append(data);
					$('form#responsables input[type!="checkbox"], form#responsables select').change(function() {
						$(this).val(phpJs.trim($(this).val()));
						if(phpJs.in_array($(this).attr('name'), ['teldom_responsable1', 'teltravail_responsable1', 'telportable_responsable1', 'teldom_responsable2', 'teltravail_responsable2', 'telportable_responsable2'])) {
							$(this).val(phpJs.str_replace(' ', '', $(this).val()));
						}
						$.ajax({
							data:    $(this).attr('name')+'='+$(this).val(),
							type:    'POST',
							url :    _root+'index.php?page=inscription',
							dataType:'text',
							success: function(data, textStatus) {
								//
							}
						});
					});
					$('form#responsables input#disable_resp').change(function() {
						if($('form#responsables input#disable_resp:checked').length == 1) {
							$('form#responsables .responsableBlock:eq(1)  input[type!="checkbox"]').each(function(i, field) {
								$(field).val($('form#responsables .responsableBlock:eq(0) input:eq('+i+')').val());
							}).attr('disabled', 'disabled');
						} else {
							$('form#responsables .responsableBlock:eq(1) input[type!="checkbox"]')
							.removeAttr('disabled');
						}
					});
					$('table#registerBoard tfoot td:has(input#ajout_participant)').html($('#txtPanier').html());
					$('#txtPanier').html('');
				}
			});
		} else if(step == 3) {
			var txtError = '';
			
			for(t in register.pChkS2) {
				if(phpJs.empty($('#responsables #'+register.pChkS2[t]).val())) {
					txtError += register.pTxtEr[register.pChkS2[t]]+'\n';
				} else if(register.pChkS2[t] == 'mail_responsable1' && !isValidEmailAddress($('#responsables #mail_responsable1').val())) {
					txtError += register.pTxtEr.mail_responsable1_nok+'\n';
				} else if(register.pChkS2[t] == 'conf_mail_responsable1' && $('#responsables #conf_mail_responsable1').val() != $('#responsables #mail_responsable1').val()) {
					txtError += register.pTxtEr.mail_resp1_confirm_nok+'\n';
				}
			}
						
			if(txtError != '') {
				alert('Merci de vérifier les champs suivants : \n' + txtError);
				return;
			} else {
				$('#responsables').hide();
				this.mkTabs(3);
				$('#dialogWindow').append('<div id="paymentLoading"><center><img src="'+loadingImg+'" alt="Loading..." /></center></div>');
				$.get(_root+'index.php?page=inscription&action=payment&core=false&codeAdherent='+$('#adhCode').val(), function(data) {
					$('#dialogWindow #paymentLoading').hide();
					$('#dialogWindow').append(data);
				});
			}
		}
	},
	
	setPayment : function(paymentId) {
		$('#dialogWindow').append('<div id="paymentLoading"><center><img src="'+loadingImg+'" alt="Loading..." /></center></div>');
		$.get(_root+'index.php?page=inscription&action=payment&core=false&codeAdherent='+$('#adhCode').val()+'&type='+paymentId, function(data) {
			$('#dialogWindow #paymentLoading, #dialogWindow #paymentOptions').hide();
			$('#dialogWindow').append(data);
		});
	},
	
	mkTabs: function(step) {
		if(!step || step == 1) {
			if(!step) {
				var step = 1;
			}
			var tabContent = '<ul>';
			jQuery.each(this.pTabs, function(i, tab) {
				var selected = '';
				if(step == (i+1)) {
					var selected = ' class="selected"';
				}
				tabContent += '<li'+selected+'><span>'+(i+1)+'</span><span>'+tab+'</span></li>';
			});
			tabContent += '</ul>';
			
			return tabContent;
		} else {
			$('#dialogWindow ul li.selected').removeClass('selected');
			$('#dialogWindow ul li:eq('+(step-1)+')').addClass('selected');
		}
	},
	
	mkBoard: function() {
		var boardContent = '<table id="registerBoard"><thead>';
		jQuery.each(this.pBoard, function(i, column) {
			var style = '';
			if(i == 1) {
				style = ' style="width:120px"';
			}
			if(i == 2 || i == 3 || i == 4) {
				style = ' style="width:80px"';
			}
			if(i == 5) {
				style = ' style="width:130px"';
			}
			if(i == 6) {
				style = ' style="width:50px"';
			}
			if(i == 7) {
				style = ' style="width:100px"';
			}
			if(i == 8) {
				style = ' style="width:80px"';
			}
			if(i == 9) {
				style = ' style="width:70px"';
			}
			if(i == 10) {
				style = ' style="width:20px"';
			}
			if(i == 11 || i==12) {
				style = ' style="width:10px"';
			}
			
			if(i==5) {
				boardContent += '<th'+style+'>'+column+'<span id="remiseDeduite" class="remise"></span></th>';
			} else {
				boardContent += '<th'+style+'>'+column+'</th>';
			}
		});
		boardContent += '</thead><tbody><tr></tr></tbody><tfoot><tr style="border-top:1px solid #7D1701"><td colspan="3"></td>'+
						'<td colspan="2"><span class="remise" id="remisePartenaire" style="display: inline;"></span></td><td><div class="remise" style="display:inline;" id="remise_totale"></div></td>'+
						'<td colspan="3" style="font-weight: bold">'+register.pTxt.totalCmd+'</td><td class="totalPriceBlockWoAdh">0,00</td>'+
						'<td colspan="2" rowspan="3" class="hideOnStep2"></td></tr>'+
						'<tr style="border-top:1px solid #7D1701"><td colspan="6"><i>Survolez les ic&ocirc;nes '+this.optImg()+' pour afficher les informations</i></td><td colspan="3" style="font-weight: bold">Prix de l\'adhésion </td><td><span id="montant_adhesion">0,00</span></td></tr>'+
						'<tr style="border-top:1px solid #7D1701"><td colspan="6" rowspan="3"><input id="ajout_participant" value="Ajouter un participant sur le même séjour" class="ui-corner-all" type="button"><td colspan="3" style="font-weight: bold">Net à payer </td><td><span class="totalPriceBlock"></span></td></tr>'+
						'<tr style="border-top:1px solid #7D1701"></td><td colspan="3" style="font-weight: bold">Je bénéficie d\'un code partenaire</td><td><div id="code_partenaire"><input type="text" name="codeRemPart" id="codeRemPart" /></td><td colspan="2" class="hideOnStep2"><div id="msg_saisie_code_adherent">Veuillez saisir un code adh&eacute;rent valide !</div></td></tr>'+
						'<tr style="border-top:1px solid #7D1701"></td><td colspan="3" style="font-weight: bold">Je bénéficie d\'un code adhérent</td><td><div id="code_partenaire"><input type="text" name="code_adherent" id="adhCode" /></td><td colspan="2" class="hideOnStep2"><input id="updateRemisePartenaire" type="button" value="Recalculer" onclick="register.updateRemisePartenaire();" class="ui-corner-all" /></td></tr>'+
						'</tfoot></table><div id="message_options"><span>* Champs obligatoires</span></div>'+
						'<form action="javascript:;" id="addRegistration"></form>';

		return boardContent;
	},
	
	mkRegistrationBlock: function() {
		var strNomSejour = '';
		if(!phpJs.empty(this.pData.currentSelectedSejour)) {
			strNomSejour = ' au séjour suivant : '+this.pData.currentSelectedSejour.titre;
		} else {
			strNomSejour = '';
		}

		var RBlockContent = '<h3>'+this.pTxt.addTitle + strNomSejour+'</h3>';
		var codeSejourSelected = this.pCodeSejour;
		RBlockContent += '<br />';
		jQuery.each(this.pRegB, function(i, vals) {
			RBlockContent += '<label for="'+vals.n+'">'+vals.v+' :</label>';
			if(vals.t == 'select') {
				RBlockContent += '<select id="'+vals.n+'" name="'+vals.n+'">';
				if(vals.n == 'sexe') {
					RBlockContent += '<option value="M">'+register.pSexe.M+'</option><option value="F">'+register.pSexe.F+'</option>';
				} else if(vals.n == 'code_sejour') {
					jQuery.each(register.pData.dates[register.pId], function(k, v) {
						var selected = '';
						var places_dispo_internet = 0;
						if(!phpJs.empty(register.pData.places_dispo_internet))
							places_dispo_internet = register.pData.places_dispo_internet[k].places_dispo_internet;
						
						if(k == codeSejourSelected) {
							var selected = ' selected="selected"';
						}
						
						if(places_dispo_internet == 0) {
							RBlockContent += '<option disabled="disabled" value="'+k+'"'+selected+'>'+v.start+' '+register.pTxt.to+
							 ' '+v.end+' ('+v.prix+'&euro;-'+v.days+' '+register.pTxt.days+')-COMPLET</option>';
						} else {
							RBlockContent += '<option value="'+k+'"'+selected+'>'+v.start+' '+register.pTxt.to+
							 ' '+v.end+' ('+v.prix+'&euro;-'+v.days+' '+register.pTxt.days+')-'+v.centr+'</option>';
						}
					});
				} else if(vals.n == 'code_sejour_ville') {
					RBlockContent += register.mkTransportSelect(codeSejourSelected);
				}
				RBlockContent += '</select>';
			} else {
				RBlockContent += '<input type="'+vals.t+'" id="'+vals.n+'" name="'+vals.n+'" />';
			}
		});
		RBlockContent += '<div id="optBlocks"></div><div id="prixBlock"><br /><label for="prix_sejour">Prix du séjour : '+
						 '<span id="prix_total_sejour"></span></label></div><div id="prix_sejour"></div><input type="button" value="'+this.pTxt.validateButton+
						 '" class="ui-corner-all" onclick="javascript:register.addRegistration();" /><div class="starFields">'+register.pTxt.starFields+'</div>';
		
		return RBlockContent;
	},
	
	manageUpdateRegistrationBlock: function(id) {
		this.pUpdateId = id;
		$.ajax({
			type: 'GET',
			url: _root+'index.php?page=inscription&action=getJsonVilles&id='+this.pData.registrations[id].id_sejour,
			dataType: 'json',
			cache: false,
			success: function(data, textStatus) {
				register.pData = data;
				register.pId   = register.pData.currentSelectedSejour.id;
				register.pCodeSejour      = register.pData.registrations[id].code_sejour;
				register.pCodeSejourVille = register.pData.registrations[id].code_sejour_ville;
				$('#addRegistration').html(register.mkRegistrationBlock());
				$('#nom').val(register.pData.registrations[id].nom);
				$('#prenom').val(register.pData.registrations[id].prenom);
				$('#date_naissance').val(register.pData.registrations[id].date_naissance);
				$('#sexe').val(register.pData.registrations[id].sexe);
				$('#code_sejour').val(register.pData.registrations[id].code_sejour);
				$('#code_sejour_ville').val(register.pData.registrations[id].code_sejour_ville);
				if(register.pData.registrations[id].assurance_annulation == '1') {
					$('#assurance').attr('checked', true);
				}
				$('#date_naissance').change(function() {
					$('#code_sejour_ville').html(register.mkTransportSelect($('#code_sejour').val()));
					register.setSejourTotalPrice();
				});
				$('select#code_sejour_ville').html(register.mkTransportSelect(register.pCodeSejour));
				register.mkOptionsBlock(register.pCodeSejour);
				if(!phpJs.empty(register.pData.registrations[id].options)) {
					$.each(register.pData.registrations[id].options, function(i,item) {
						$('#opt_'+item.id).attr('checked', true);
					});
				}
				register.setSejourTotalPrice();
				$('#addRegistration h3').html(register.pTxt.modTitle+' au séjour suivant : '+register.pData.currentSelectedSejour.titre);
				$('#addRegistration').show();
				register.loadParticipantEvents();
			}
		});
	},
	
	mkCmdBlock: function(callback) {
		if(!callback) {
			var callback = function(data) {
				void(0);
			}
		}
		$.ajax({
			type    : 'GET',
			url     : _root+'index.php?page=inscription&action=adhesion&core=false',
			dataType: 'html',
			success : function(data, textStatus) {
				var CBlockContent = '<div id="cmdBlock">'+
										'<input type="button" id="addButton" value="'+register.pTxt.addButton+'" class="ui-corner-all" />'+
										'<div id="adhBlock">';
					CBlockContent += data;
					CBlockContent += '<div id="cgvBlock"><br /><input type="checkbox" name="accept_cgv" id="accept_cgv" /><label for="accept_cgv">   '+register.pTxt.CGVAccept+'</label>'+
									 '<br />'+
									 '<a href="'+_root+'documents/ConditionsGenerales.pdf">'+register.pTxt.CGVConsult+'</a></div></div>'+
									 '<input type="button" value="'+register.pTxt.validateCmd+'" class="ui-corner-all"'+
									 ' onclick="javascript:register.getStep(2)" />'+
									 '<input type="button" value="'+register.pTxt.continueButton+'" class="ui-corner-all" '+
									 'onclick="javascript:$(\'#dialogWindow\').dialog(\'close\');" />'+
									 '</div>';
				
				//$('#dialogWindow').append(CBlockContent);
				callback(CBlockContent);
			}
		});
	},
	
	mkOptionsBlock: function(codeSejour) {
		$('#dialogWindow #optBlocks').html(' ');
		if(!phpJs.empty(codeSejour)) {
			if(!phpJs.empty(this.pData.options[codeSejour])) {
				for(id in this.pData.options[codeSejour]) {
					var val = register.pData.options[codeSejour][id];
					$('#dialogWindow #optBlocks').append(
						'<div class="optBlock"><label for="opt_'+id+'">'+val.titre+
						' ('+val.prix+' &euro;)&nbsp;:&nbsp;</label><input type="checkbox" name="options[]" value="'+id+
						'" id="opt_'+id+'" /><br /></div>'
					);
				}
			}
		}
	},
	
	getAgeFromDateNaissance: function(date_naissance) {
		var age_participant = 0;
		
		age_participant = $.ajax({
			data    : 'date_naissance='+date_naissance,
			type    : 'GET',
			dataType: 'text',
			url     : _root+'index.php?page=inscription&action=getAgeFromDateNaissance',
			cache   : false,
			async   : false
		}).responseText;

		return age_participant;
	},	
	mkTransportSelect: function(sejourId) {
		var RBlockContent = '';
		var codeSejourVilleSelected = this.pCodeSejourVille;
		var selected = '';
		var age_min_sejour = register.pData.Sejour['age_min'];
		var age_max_sejour = register.pData.Sejour['age_max'];
		
		if($('#code_sejour_ville').val()) {
			var codeSejourVilleSelected = $('#code_sejour_ville').val();
		}
		var date_naissance = $('#date_naissance').val();
		var age_participant = 0;
		
		if(date_naissance) {
			age_participant = register.getAgeFromDateNaissance(date_naissance);
		} else {
			age_participant = 0;
		}
		
		jQuery.each(register.pData.villes[sejourId], function(k, v) {
			if(v.prix == '0') {
				selected = ' selected="selected"';
				v.ville = register.pTxt.defaultCity;
			} else {
				if(k == codeSejourVilleSelected) {
					selected = ' selected="selected"';
				} else {
					selected = '';
				}
			}
			if(v.prix == '0') {
				RBlockContent += '<option value="'+k+'"'+selected+'>'+v.ville+'</option>';
			} else {
				if((v.age_limite_facturation > age_min_sejour && v.age_limite_facturation > age_max_sejour) || (age_participant !=0 && age_participant < v.age_limite_facturation)) {
					RBlockContent += '<option value="'+k+'"'+selected+'>'+v.ville+' +'+v.prixRed+'&euro;</option>';
				} else if(v.age_limite_facturation <= age_min_sejour && v.age_limite_facturation < age_max_sejour || (age_participant !=0 && age_participant >= v.age_limite_facturation)) {
					RBlockContent += '<option value="'+k+'"'+selected+'>'+v.ville+' +'+v.prix+'&euro;</option>';
				} else {
					RBlockContent += '<option value="'+k+'"'+selected+'>'+v.ville+' - de '+v.age_limite_facturation+' ans (+'+v.prixRed+'&euro;) et + de  '+v.age_limite_facturation+' ans (+'+v.prix+'&euro;)</option>';
				}
			}
		});
		
		return RBlockContent;
	},
	
	optImg : function(id, type) {
		var alt = 'Informations';
		if(!id || !type) {
			var id = '';
		} else if(type == 'option') {
			id = 'option_'+phpJs.intval(id);
			alt = 'Options';
		} else if(type == 'ville') {
			id = 'ville_'+phpJs.intval(id);
		}
		return '<img src="'+_root+'img/options.png" alt="'+alt+'" id="'+id+'" />';
	},
	
	openDialog : function(content, callback) {
		if(!callback) {
			var callback = function() { void(0); };
		}
		if($('#dialogWindow').dialog('isOpen')) {
			$('#dialogWindow').toggle('clip', {}, 'normal', function() {
				$(this).html(content).toggle('clip', {}, 'normal', function() {
					callback();
				});
			});
		} else {
			$('#dialogWindow').html(content).dialog('open');
			callback();
		}
	},
	
	setBirthRange : function(input) {
/*		var dateBirthMin = explode('-', $('li div.ui-accordion-content-active .dateBirthMin').val());
		dateBirthMin = new Date(dateBirthMin[0], dateBirthMin[1] - 1, dateBirthMin[2]);
		var dateBirthMax = explode('-', $('li div.ui-accordion-content-active .dateBirthMax').val());
		dateBirthMax = new Date(dateBirthMax[0], dateBirthMax[1] - 1, dateBirthMax[2]);
		return {
			minDate: dateBirthMin,
			maxDate: dateBirthMax
		}
*/	},

	loadParticipantEvents : function() {
		$('#addRegistration select#code_sejour').unbind('change').change(function() {
			var options = [];
			jQuery.each($('#optBlocks input[id^="opt_"]:checked'), function(i, val) {
				options[i] = register.pData.options[register.pCodeSejour][$(this).val()].titre;
			});
			oldVille = register.pData.villes[register.pCodeSejour][register.pCodeSejourVille].ville;
			register.pCodeSejour = $(this).val();
			$('select#code_sejour_ville').html(register.mkTransportSelect(register.pCodeSejour));
			register.pCodeSejourVille = $('#addRegistration select#code_sejour_ville').val();
			for(v in register.pData.villes[register.pCodeSejour]) {
				if(register.pData.villes[register.pCodeSejour][v].ville == oldVille) {
					register.pCodeSejourVille = v;
				}
			}
			$('#code_sejour_ville').val(register.pCodeSejourVille);
			register.mkOptionsBlock(register.pCodeSejour);
			jQuery.each($('#optBlocks input[id^="opt_"]:checkbox'), function(i, val) {
				if(phpJs.in_array(register.pData.options[register.pCodeSejour][$(this).val()].titre, options)) {
					$(this).attr('checked', true);
				}
			});
			$("#addRegistration input[name='options[]']").unbind('change').change(function() {
				register.setSejourTotalPrice();
			});
			register.setSejourTotalPrice();
		});
		$('#addRegistration select#code_sejour_ville').unbind('change').change(function() {
			register.pCodeSejourVille = $(this).val();
			register.setSejourTotalPrice();
		});
		
		$("#addRegistration #assurance").unbind('change').change(function() {
			register.setSejourTotalPrice();
		});
		
		$("#addRegistration input[name='options[]']").unbind('change').change(function() {
			register.setSejourTotalPrice();
		});
		
		$('#addRegistration #date_naissance').datepicker('destroy').datepicker({ beforeShow: register.setBirthRange});
		
		// Fix change() IEs
	    if($.browser.msie) {
	        $('input:checkbox, input:radio').click(function() {
		        this.blur();
		        this.focus();
	        });	
	    }
	    
//	    $('#addRegistration select, #addRegistration checkbox, #addRegistration input[id!="date_naissance"]').focus(function() {
//	    	if(phpJs.empty($('#addRegistration #date_naissance').val())) {
//	    		alert(register.pTxt.birthFieldAlert);
//	    		$('#addRegistration #date_naissance').focus();
//	    	}
//	    });
	},
	
	newInscr : function(Id,codeSejour,codeSejourVille,nbInscris) {
		this.pId = Id;
		this.pCodeSejour = codeSejour;
		this.pCodeSejourVille = codeSejourVille;
		this.pNbInscris = nbInscris;
		this.openDialog(this.pLoadB);
		if(phpJs.empty(nbInscris)) {
			this.pNbInscris = 1;
		}
		this.pRemisePartenaire = 0;
		this.pMontantRemisePartenaire = 0;
		$.ajax({
			type: 'GET',
			url: _root+'index.php?page=inscription&action=getJsonVilles&id='+Id,
			dataType: 'json',
			cache: false,
			success: function(data, textStatus) {
				register.pData = data;
				if(!register.pCodeSejour) {
					register.pCodeSejour = data.dateDefaultSelect;
				}
				if(!register.pCodeSejourVille) {
					var tempVilles = phpJs.array_keys(data.villes[register.pCodeSejour]);
					register.pCodeSejourVille = tempVilles[0];
				}
				
				register.mkCmdBlock(function(dataCmdBlock) {
					var content = $('<div />').append(register.mkTabs(1)+register.mkBoard()+dataCmdBlock);
					if(Id) {
						$(content).find('#addRegistration').html(register.mkRegistrationBlock());
					}
					
					register.openDialog(content, function() {
						register.loadParticipantEvents();
						$('#addRegistration').show();

						$('#cmdBlock #adhesion input, #cmdBlock #adhesion select, #cmdBlock #adhesion textarea').change(function() {
							$(this).val(phpJs.trim($(this).val()));
							if(phpJs.in_array($(this).attr('name'), ['telephone_adherent', 'telephone_portable_adherent'])) {
								$(this).val(phpJs.str_replace(' ', '', $(this).val()));
							}
							$.ajax({
								data    : $(this).attr('name')+'='+$(this).val(),
								type    : 'POST',
								url     : _root+'index.php?page=inscription&type=adhesion',
								dataType: 'text',
								success: function(data, textStatus) {
									//
								}
							});
						});
						
						$('#cmdBlock #adherent_false').change(function() {
							register.checkAdhesionField();
							$.get(_root+'index.php?page=inscription&action=setNewAdhesion&val='+register.pAdhesion);
						});
						
						register.checkAdhesionField();
						register.addBoardRegistrations();
						register.getPartialTotalPrice();
						register.mkOptionsBlock(register.pCodeSejour);
						register.setSejourTotalPrice();
						
						$('#addRegistration #date_naissance').change(function() {
							$('#code_sejour_ville').html(register.mkTransportSelect($('#code_sejour').val()));
							$('#code_sejour_ville').attr('disabled', false);
							$('#date_naissance')   .attr('readonly', true );
							register.setSejourTotalPrice();
						});
						
						$("#addRegistration #assurance").change(function() {
							register.setSejourTotalPrice();	
						});
						
						$("#addRegistration input[name='options[]']").change(function() {
							register.setSejourTotalPrice();	
						});
					
						
						$('.ui-dialog').css({overflow:'hidden'}); //, top:'10%'
						if(!phpJs.empty(register.pData)) {
							if(phpJs.empty(register.pData.registrations)){
								$('#cmdBlock').hide();
								$('table#registerBoard tbody').append('<tr></tr>');
							}
						}
						
						$('#code_sejour_ville').attr('disabled', true);
						$('#adhBlock #msg_saisie_code_adherent').hide();
					});
				});
			}
		});
	},
	
	getPromoTransport : function(codeSejour, codeSejourVille, dateNaissance) {
		if(!codeSejour || !codeSejourVille || phpJs.empty(this.pData.villes[codeSejour][codeSejourVille])) {
			return false;
		}
		var dateSejourMax   = phpJs.explode('-', this.pData.villes[codeSejour][codeSejourVille]['limit']);
		var datePromoMax    = new Date(dateSejourMax[0], dateSejourMax[1] - 1, dateSejourMax[2]);
		var dateCurrent     = phpJs.explode('/', dateNaissance);
		dateCurrent         = new Date(dateCurrent[2], dateCurrent[1] - 1, dateCurrent[0]);
		if(dateCurrent > datePromoMax && this.pData.villes[codeSejour][codeSejourVille]['limit'] != 0) {
//			console.info(codeSejour+'>'+codeSejourVille+'>'+'true');
			return true;
		} else {
//			console.info(codeSejour+'>'+codeSejourVille+'>'+'false');
			return false;
		}
	},
	
	setBirthRange : function(input) {
		var sej = register.pData.dates[register.pId][$('#code_sejour').val()];
		var dateBirthMin = explode('-', sej.dBmin);
		dateBirthMin = new Date(phpJs.intval(dateBirthMin[0]) - 1, phpJs.intval(dateBirthMin[1]) - 1, phpJs.intval(dateBirthMin[2]) + 1);
		var dateBirthMax = explode('-', sej.dBmax);
		dateBirthMax = new Date(phpJs.intval(dateBirthMax[0]),phpJs.intval(dateBirthMax[1]) -1 , phpJs.intval(dateBirthMax[2]));
		return {
			minDate: dateBirthMin,
			maxDate: dateBirthMax
		}
	},
	
	checkAdhesionField : function() {
		if($('#cmdBlock #adherent_false:checked').val()) {
			$('#cmdBlock #adhesion').show();
			$('#montant_adhesion').html('10,00');
			register.pAdhesion = true;
		} else {
			$('#cmdBlock #adhesion').hide();
			$('#montant_adhesion').html('0,00');
			register.pAdhesion = false;
		}
		register.getPartialTotalPrice();
	},
	
	checkAdhesion : function(callback) {
		if(!callback) {
			callback = function(result) { void(0); };
		}
		var code_adherent_saisi    = $('#adhCode').val();
		var code_remise_partenaire = $('#codeRemPart').val();
		if(phpJs.empty(code_adherent_saisi)) {
			callback(true);
			return;
		}
		
		register.pcheckAdhesion = false;
		
		$.ajax({
			data    : 'code_adherent='+code_adherent_saisi,
			type    : 'GET',
			url     : _root+'index.php?page=inscription&action=checkAdhesion',
			dataType: 'text',
			success: function(data, textStatus) {
				data = phpJs.trim(data);
				if(data != 'ok') {
					if(data == 'ErrCodeAdherent') {
						alert('Le code adhérent saisi n\'est pas valide');
						callback(false);
					} else if(data == 'ErrTypeAdhesion') {
						alert('Vous ne pouvez utiliser ce site pour vous inscrire.\nMerci de contacter directement Vacances Energie.');
						callback(false);
					} else {
						var tmp_annee = phpJs.explode('_', data);
						annee = tmp_annee[1];
						if(confirm('Attention, votre adhésion aura expirée pour le séjour sélectionné. \nVeuillez souscrire une adhésion pour l\'année '+annee+'.')) {
							$.ajax({
								data    : 'code_adherent='+code_adherent_saisi,
								type    : 'GET',
								url     : _root+'index.php?page=inscription&action=getJsonInfosAdherent',
								dataType: 'json',
								cache: false,
								success: function(data, textStatus) {
									var infosAdherent = data;
									var civilite  = '';
									var nom       = '';
									var prenom    = '';
									var adresse1  = '';
									var adresse2  = '';
									var cp        = '';
									var ville     = '';
									var telephone = '';
									var email     = '';
									
									if(!phpJs.empty(infosAdherent.nom_adherent)) {
										$('#adhesion #nom_adherent').val(infosAdherent.nom_adherent);
									}
									
									if(!phpJs.empty(civilite)) {
										if(civilite == 'Madame') {
											civilite = 'Mme';
										} else if(civilite == 'Monsieur') {
											civilite = 'Mr';
										} else {
											civilite = 'Mlle';
										}
									}
									
									if(!phpJs.empty(infosAdherent.adresse_1)) {
										$('#adhesion #adresse1_adherent').val(infosAdherent.adresse_1);
									}
									if(!phpJs.empty(infosAdherent.adresse_2)) {
										$('#adhesion #adresse2_adherent').val(infosAdherent.adresse_2);
									}
									if(!phpJs.empty(infosAdherent.code_postal)) {
										$('#adhesion #code_postal_adherent').val(infosAdherent.code_postal);
									}
									if(!phpJs.empty(infosAdherent.ville)) {
										$('#adhesion #ville_adherent').val(infosAdherent.ville);
									}
									if(!phpJs.empty(infosAdherent.telephone_1)) {
										$('#adhesion #telephone_adherent').val(infosAdherent.telephone_1);
									}
									if(!phpJs.empty(infosAdherent.adresse_email)) {
										$('#adhesion #email_adherent').val(infosAdherent.adresse_email);
									}
								}
							});
							
							$('#cmdBlock #adherent_false').attr('checked', true);
							$('#cmdBlock #code_adherent, #totalBlock .noBold').hide();
							$('#cmdBlock #adhesion').show();
							register.pAdhesion = true;
							register.getPartialTotalPrice();
						}
					}
					callback(false);
				} else {
					register.pcheckAdhesion = true;
					callback(true);
				}
			}
		});
	},
	
	updateRemisePartenaire : function(callback) {
		if(!callback) {
			callback = function() { void(0); };
		}
		register.checkCodePartenaire(function(checkCodePartenaireResult) {
			if(checkCodePartenaireResult === true) {
				register.checkAdhesion(function(checkAdhesionResult) {
					callback(checkAdhesionResult);
				});
			} else {
				callback(false);
			}
		});
	},
	
	checkCodePartenaire : function(callback) {
		if(!callback) {
			callback = function(result) { void(0); };
		}
		if(phpJs.empty($('#codeRemPart').val())) {
			register.setRemiseRegistrations(0, '', '');
			callback(true);
			return;
		}
		var code_remise_partenaire = $('#codeRemPart').val();
		var code_adherent = $('#adhCode').val();
		if(phpJs.empty($('#adhCode').val())) {
			code_adherent = 0;
		}
		
		$.ajax({
			data    : 'code_remise_partenaire='+code_remise_partenaire+'&code_adherent='+code_adherent,
			type    : 'GET',
			url     : _root+'index.php?page=inscription&action=checkRemisePartenaire',
			dataType: 'text',
			success: function(data, textStatus) {
				data = phpJs.trim(data);
				if(data == 'ErrCodeRemisePartenaire') {
					register.setRemiseRegistrations(0, '', '');
					alert('Code Remise Partenaire non valide ('+code_remise_partenaire+')');
				} else if(data == 'ErrCodeAdherentNeeded') {
					register.setRemiseRegistrations(0, '', '');
					$('#msg_saisie_code_adherent').show();
					$('#adhCode').focus();
				} else {
					//alert('Code Remise Partenaire valide -> '+data);
					register.setRemiseRegistrations(phpJs.floatval(data), code_remise_partenaire, code_adherent);
					callback(true);
					return;
				}
				callback(false);
			}
		});
	},

	setRemiseRegistrations : function(remisePercent, code_partenaire, code_adherent_lie) {
		register.pRemisePartenaire = remisePercent;
		for(reg in this.pData.registrations) {
			var val = register.pData.registrations[reg];
			val.code_partenaire   = code_partenaire;
			val.code_adherent_lie = code_adherent_lie;
			val.remise_pourcent   = remisePercent;
			val.remise_montant    = val.cout_sejour * remisePercent / 100;
		}
		register.addBoardRegistrations();
		register.getPartialTotalPrice();
	}
}

$(document).ready(function() {
    $('<img>').attr('src', loadingImg);
    $('#dialogWindow').dialog({
    	autoOpen: false,
    	bgiframe: false,
    	buttons: { 'X': function() { $(this).dialog('close'); } },
    	closeOnEscape: true,
    	draggable: false,
    	height: 'auto',
    	hide: 'clip',
    	modal: true,
    	position: ['center', 'center'],
    	resizable: false,
    	show: 'clip',
    	title: '&nbsp;Inscription',
    	width: 940,
    	zIndex: 1000
    });
    $('#ShowPanier').click(function() {
    	register.newInscr();
    });
});

/*
 * jQuery Simple Tooltip 0.9.1
 *
*/
;(function($){
	// simpletooltip
	$.fn.simpletooltip = function(settings) {
		
		var options = $.extend({
			hideOnLeave: true,
			margin: 5,
			showEffect: false,
			hideEffect: false,
			click: false,
			hideDelay: 0,
			showDelay: .1,
			showCallback: function(){},
			hideCallback: function(){},
			customTooltip: false,
			customTooltipCache: true
		}, settings);
		
		this.each(function () {
			
			// Get and hide tooltip
			if (! $.isFunction(options.customTooltip)) {
				$(this).data("$tooltip", getTooltip(this).hide());
			}
			
			if (options.click) {
				$(this).bind("click", {"options": options, "target": this}, openTooltip);
			}
			else {
				var tipTimeOut;
				
				$(this)
				// On mouseenter, init delay
				.bind("mouseenter", {"options": options, "target": this}, function(e) {
					var mouseEvent = e;
					
					tipTimeOut = window.setTimeout(function() {
						openTooltip(mouseEvent);
					}, (options.showDelay * 1000));
				})
				// On mouseleave, reset delay
				.bind("mouseleave", function() {
					window.clearTimeout(tipTimeOut);
				});
			}
			
		});
		
		return this;
	};
	
	function getTooltip(target) {
		
		// Anchor only
		var currentHrefMatch = $(target).attr("href").match(/#.+/);
		if (!!currentHrefMatch){
			var $tooltip = $(currentHrefMatch[0]);
		}
		
		return $tooltip;
	};
	
	function initTooltip($tooltip) {
		
		$tooltip
		
		// Append to body
		.appendTo(document.body)
		
		// Store dimensions
		.data("width", $tooltip.outerWidth())
		.data("height", $tooltip.outerHeight())
		
		// Set CSS
		.css({"position": "absolute", "zIndex": "9998", "display": "none"})
		
		// Close tooltip btn
		.find("a[rel=close]").click(function (e) {
			e.preventDefault();
			$tooltip.trigger("hide");
		}).end()
		
		// Init ok.
		.data("init", true);
	};
	
	function openTooltip(e){
		
		if (e.type == "click") {
			e.preventDefault();
		}
		
		var opts = e.data.options;
		
		var $target = $(e.data.target);
		
		// Custom tooltip
		if (!opts.customTooltipCache && $target.data("$tooltip")) {
			$target.data("$tooltip").remove();
			$target.data("$tooltip", false);
		}
		
		if (!$target.data("$tooltip")) {
			$target.data("$tooltip", $(opts.customTooltip($target.get(0))));
		}
		
		var $tooltip = $target.data("$tooltip");
		
		if (!$tooltip.data("init")) {
			initTooltip($tooltip);
		}
		
		var winWidth = $(window).width();
		var winHeight = $(window).height();
		var winOffsetY = $(window).scrollTop();
		var winOffsetX = $(window).scrollLeft();
		
		// Remove show / hide triggers
		$tooltip.unbind("show").unbind("hide");
		
		// Show
		if (opts.showEffect && ( opts.showEffect.match(/^fadeIn|slideDown|show$/) ) ) {
			$tooltip.bind("show", function(){
				$tooltip[opts.showEffect](200);
				opts.showCallback($target[0], this);
			});
		}
		else {
			$tooltip.bind("show", function(){
				$tooltip.show();
				opts.showCallback($target[0], this);
			});
		}
		
		// Hide
		if (opts.hideEffect && ( opts.hideEffect.match(/^fadeOut|slideUp|hide$/) ) ) {
			$tooltip.bind("hide", function(){
				opts.hideCallback($target[0], this);
				$tooltip[opts.hideEffect](200);
			});
		}
		else {
			$tooltip.bind("hide", function(){
				opts.hideCallback($target[0], this);
				$tooltip.hide();
			});
		}
		
		// Initial tooltip position
		var tooltipPosX = e.pageX - ($tooltip.data("width")/2);
		var tooltipPosY = e.pageY - ($tooltip.data("height")/2);
		
		// Replace tooltip position
		if (tooltipPosX < winOffsetX + opts.margin) { // Left
			tooltipPosX = winOffsetX + opts.margin;
		} else if (tooltipPosX + $tooltip.data("width") > (winOffsetX + winWidth - opts.margin)) { // Right
			tooltipPosX = winOffsetX + winWidth - $tooltip.data("width") - opts.margin;
		}
		
		if (tooltipPosY < winOffsetY + opts.margin) { // Top
			tooltipPosY = winOffsetY + opts.margin;
		} else if (tooltipPosY + $tooltip.data("height") > (winOffsetY + winHeight - opts.margin)) { // Bottom
			tooltipPosY = winOffsetY + winHeight - $tooltip.data("height") - opts.margin;
		}
		
		// Delay
		if (opts.hideDelay > 0 && opts.hideOnLeave) {
			var timer;
			$tooltip.hover(
				function(){
					window.clearTimeout(timer);
				},
				function(){
					timer = window.setTimeout(function(){
						$tooltip.trigger("hide").unbind("mouseenter, mouseleave");
					}, opts.hideDelay * 1000);
				}
			);
		}
		
		// No delay
		else if (opts.hideOnLeave){
			$tooltip.bind("mouseleave", function(){
				$tooltip.trigger("hide").unbind("mouseleave");
			});
		}
		
		// Apply CSS and show
		$tooltip
			.css({"left": tooltipPosX + "px", "top": tooltipPosY + "px"})
			.trigger("show");
		
	};
})(jQuery);
