/*
 * @author VM
 * Retour du JSON en en-tete de la page
 */
function ajoutPanier() {
	var nb_billet = $('#quantite').val();
    $('#ajout-panier-link').attr('href', $('#ajout-panier-link').attr('href')+'/quantite/'+nb_billet);
}

function getHeaderJSON(xhr) {
	var json;
	try {
		json = xhr.getResponseHeader('X-Json') ;
	}catch(e) {}
	if (json) {
		var data = eval('(' + json + ')');
		return data;
	}
}

/*
 *  @author VM
 * Récuperation du bouton submit
 */
function getDefaultButtonSubmit(form) {
	if (form != null) {
		return form.find('button[type=submit]');
	}
	return null;
}
/*
 * @author VM
 * fonction Alerte pour afficher les caracteres HTML
 */
function Alerte(msg){
	var div = new Element('div', {id: 'div-alert', style: 'display:none'});
	div.innerHTML = msg;
	alert(div.innerHTML);
	div.dispose();
}

/*
 * @author VM
 * Ajax Form
 */
var AjaxForms = $.inherit (
	{

	__constructor : function(datas) {},

	initRequest: function(datas) {
		var _this 		= this;
		_this.type		= (datas['type'] != null) ? datas['type'] : 'GET';
		_this.url		= (datas['url'] != null)  ? datas['url']  : '';
		_this.data		= (datas['data'] != null) ? datas['data'] : '';
		_this.dataType	= (datas['dataType'] != null) ? datas['dataType'] : 'json';
	},

	sendSuccess: function(json, response) {},

	sendbeforeSend: function() {},

	sendRequest: function(e) {
		var _this = this;
		e.preventDefault();
		var xhr = $.ajax({
			url: 		_this.url,
			type: 		_this.type,
			data: 		_this.data,
			dataType: 	_this.dataType,
			beforeSend: function(){
				_this.sendbeforeSend();
     	 	},
			success: function(responseJson) {
				_this.sendSuccess(getHeaderJSON(xhr), responseJson);
			},
			 error:function (xhr, ajaxOptions, thrownError){

            }

		});
		return false;
	}
});

/*
 * TODO : EN COURS DE dEVELOPPEMENT
 *
 */
var AjaxSubmitForm = $.inherit(
	AjaxForms, {

	__constructor : function(form, options) {

		/* Plus simple d'avoir un _this */
		var _this 				= this;
		this.form 				= form;
		var datas				= new Array();
		this.buttonSubmit 		= getDefaultButtonSubmit(this.form);

		if(options != null) {
			this.update 		= (options['update'] != null) ? options['update'] : null;
			this.infobar 		= (options['infobar'] != null) ? options['infobar'] : $('#form_feedback');
		}
		datas['url']			= this.form.attr('action');
		datas['type']			= this.form.attr('method');

		/* Envoi du submit */
		this.form.submit(function(e) {
			datas['data']		= form.serialize();
			_this.initRequest(datas);
			_this.sendRequest(e);
		});
	},

	initRequest: function(datas) {
		this.__base(datas);

		if (this.update != null) {
			this.update.html = '';
		}
		/*if (this.ajaxSpinner != null) {
			this.ajaxSpinner.addClass('ajax-loading');
		}*/
	},

	//'#submit-button').attr('disabled', 'disabled');

	sendRequest: function(e) {
		this.__base(e);
	},

	sendbeforeSend: function() {
		this.buttonSubmit.attr('disabled', true);
		this.buttonSubmit.addClass('button-gris');

	},

	sendSuccess: function(json, response) {
		if (json != null) {
			/* Statuts disponible dans la class JsonResponse */
			switch (json.status) {
				case 'request_status_successful':

					this.setInfobar('valid', json.feedback_msg);
					this.callbackRequestSuccessful(response);
					break;
				case 'request_status_redirect':
					this.callbackRequestRedirect(response);
					break;
				/*case 'request_status_failed':
					this.setInfobar('failed', json.feedback_msg);
					this.callbackRequestFailed(response);
					break;*/
				case 'request_status_error':
					this.buttonSubmit.removeAttr('disabled');
					this.buttonSubmit.removeClass('button-gris');
					this.setInfobar('error', json.feedback_msg);
					this.callbackRequestError(response);
					break;
				default:
					break;
			}
		}
	},
	/*
	 * Gestion des callback : Retour du JSON
	 */
	callbackRequestSuccessful: function(response) {
		if (this.update != null) {
			$(this.update).html(""+response);
		}
	},
	callbackRequestRedirect: function(response) {
		window.location.replace(response);
	},
	callbackRequestError: function(response) {
		if (this.update != null) {
			$(this.update).html(""+response);
		}
	},
	/* Gestion des barres d'affichages de retour d'erreurs */
	setInfobar: function(type, content) {
		if ((type != '') && (content != '')) {
			this.infobar.addClass(type);
			$(this.infobar).html(""+content);
		}
	},
	unsetInfobar: function() {
		$(this.infobar).empty();
	}
});


var AjaxSubmitFormReponse = $.inherit(
		AjaxSubmitForm, {

		__constructor : function(form, options) {
			this.__base(form, options);
		},

		initRequest: function(datas) {
			this.__base(datas);
		},

		sendRequest: function(e) {
			this.__base(e);
		},

		sendSuccess: function(json, response) {
			if (json != null) {
				switch (json.status) {
					case 'request_status_successful':
						this.setInfobar('valid', json.feedback_msg);
						this.callbackRequestSuccessful(response);
						break;
					case 'request_status_error':
						this.buttonSubmit.removeAttr('disabled');
						this.buttonSubmit.removeClass('button-gris');
						this.callbackRequestError(response);
						break;
					case 'request_status_redirect':
						window.location.replace(json.feedback_msg);
						break;
					case 'request_status_redirect_message':
						this.setInfobar('valid', json.feedback_msg);
						if (this.update != null) {
							$(this.update).html(""+json.feedback_msg);
						}
						setTimeout("window.location.replace('" + json.url_redirect + "');",4000);
						break;
					case 'request_status_redirect_alert':

						//alert(response);
						//window.location.replace(json.feedback_msg);
						break;
					case 'request_status_redirect_login':
						var caption = "Connectez-vous pour poser une question";
						var url = url_zepass+"membre/box_login?height=300&width=300";
						var rel = "";
						tb_show(caption, url, rel);
						break;
					default:
						break;
				}
			}
		},
		/*
		 * Gestion des callback : Retour du JSON
		 */
		callbackRequestSuccessful: function(response) {
			$('div').removeClass('champ-erreur');
			$('div[class="error"]').remove();
			if (this.update != null) {
				$(this.update).html(""+response);
			}
		},
		callbackRequestRedirect: function(response) {
			window.location.replace(response);
		},
		callbackRequestError: function(response) {
			$('div').removeClass('champ-erreur');
			$('div[class="error"]').remove();
			/* Traitements des retours d'erreurs */
			for(var i in response) {
			//	alert(response);
				/* Premier élément = erreur */
				for(var j in response[i]['error']) {
					$('div[id="div_'+response[i]['error'][j]+'"]').addClass('champ-erreur');
				}
				var results	= '<div class="error" id="error-content">';
				for(var j in response[i]['content']) {
					results += response[i]['content'][j]+'<br/>';
				}
				results	+= "</div>";
				$('#'+i).before(results);
			}
			if (this.update != null) {
				$(this.update).html(""+response);
			}
			location.href = '#error-content';
		},
		/* Gestion des barres d'affichages de retour d'erreurs */
		setInfobar: function(type, content) {
			if ((type != '') && (content != '')) {
				this.infobar.addClass(type);
				$(this.infobar).html(""+content);
			}
		},
		unsetInfobar: function() {
			$(this.infobar).empty();
		}
	});

/* FONCTION DE CHECK POUR LES FORMULAIRES */
function CheckEmail(theform, actualemail) {
	var email1 = document.forms[theform].elements["email"].value;

	if(email1 != "") {
		var reg = /^[A-Za-z0-9._-]+@[A-Za-z0-9.-]{2,}[.][A-Za-z]{2,3}$/
		//On vérifie que l'adresse email est correcte d'un point de vue syntaxique
		if(reg.exec(email1) == null) {
			$('#warning-email').css('display', "block");
			$('#help-warning-email1').css('display', "block");
		}else {
			//On vérifie ensuite que l'adresse email ne soit pas déjà utilisée (si nouvel email saisi)
			if(email1 != actualemail) {
				var xhr	= $.ajax({
					url: 		 url_zepass+'membre/check_email',
					type: 		'post',
					dataType: 	'json',
					success: function(response) {
						var json = getHeaderJSON(xhr);
						switch (json.status) {
							case '':
								$('#warning-email').css('display', "none");
								$('#help-warning-email1').css('display', "none");
								$('#help-warning-email2').css('display', "none");
								break;
							case 'request_status_error':
								$('#warning-email').css('display',"block");
								$('#help-warning-email1').css('display', "none");
								$('#help-warning-email2').css('display',"block");
								$('#warning-verif-email').css('display', "none");
								$('#help-warning-verif-email').css('display', "none");
								break;
							default:
								break;
						}
					}
				});
			}else{
				$('#warning-email').css('display', "none");
				$('#help-warning-email2').css('display', "none");
			}

			//On vérifie enfin que les deux emails soient identiques
			if($('#warning-email').attr('display') != 'block') {
				var email2 = $("#verif_email").val();
				if(email1 != '' && email2 != '' && email1 != email2) {
					$('#warning-verif-email').css('display','block');
					$('#help-warning-verif-email').css('display','block');
				}else {
					$('#warning-verif-email').css('display', 'none');
					$('#help-warning-verif-email').css('display', 'none');
				}
			}
		}
	}
}


function CheckMotDePasse(theform) {
	var motdepasse1 = document.forms[theform].elements["mot_de_passe"].value;
	if(motdepasse1 != "") {
		var reg = /^[A-Za-z0-9]{4,12}$/
		//On vérifie que le premier champ mot de passe contient quatre à huit caractères alphanumériques
		if(reg.exec(motdepasse1) == null) {
			// La condition n'est pas vérifiée
			$('#warning-mot-de-passe').css('display','block');
			$('#help-warning-mot-de-passe').css('display','block');
		}
		//Si la précédente condition est vérifiée, on vérifie ensuite que les deux mots de passe soient identiques
		else {
			$('#warning-mot-de-passe').css('display','none');
			$('#help-warning-mot-de-passe').css('display','none');

			var motdepasse2 = document.forms[theform].elements["verif_mot_de_passe"].value;
			if(motdepasse2 != "" && motdepasse1 != motdepasse2) {
                $('#warning-verif-mot-de-passe').css('display','block');
                $('#help-warning-verif-mot-de-passe').css('display','block');
			}else {
				$('#warning-verif-mot-de-passe').css('display','none');
                $('#help-warning-verif-mot-de-passe').css('display','none');
			}
		}
	}
}

function CheckIdentifiant(page) {
	var identifiant = "";
	if(page == "inscription"){
		identifiant += $("#compte_identifiant").val();
	}else if(page == "revente"){
		identifiant += $("#compte_identifiant").val();
	}else if(page == "identification_panier"){
		identifiant += $("#compte_identifiant").val();
	}else{
		return;
	}

	if(identifiant != "") {
		var reg = /^[A-Za-z0-9]{4,12}$/
		var reg2= /[0oO][1-68lIisS]([-. ]?[0-9oOIilsS]{2}){4}/
		//On vérifie que le champ identifiant contient quatre à douze caractères alphanumériques
		if(reg.exec(identifiant) == null) {
			if(page == "inscription"){
				$('#warning-identifiant').css('display', 'block');
				$('#help-warning-identifiant2').css('display', 'none');
				$('#help-warning-identifiant1').css('display', 'block');
			}
			$('#idDispo').css('visibility', 'hidden');
			$('#checkDispoIdentifiant').css('visibility', 'hidden');
			if(page == "inscription"){
				$('#idNonDispo').css('visibility', 'hidden');
			}else{
				$('#idNonDispo').css('visibility', 'visible');
			}
		}
		//On vérifie que l'identifiant comporte pas de num de tel
		else if (reg2.exec(identifiant)) {
			if(page == "inscription"){
				$('#warning-identifiant').css('display', 'block');
				$('#help-warning-identifiant1').css('display', 'none');
				$('#help-warning-identifiant2').css('display', 'none');
				$('#help-warning-identifiant3').css('display', 'block');
			}
			$('#idDispo').css('visibility', 'hidden');

			$('#checkDispoIdentifiant').css('visibility', 'hidden');

			if(page == "inscription"){
				$('#idNonDispo').css('visibility', 'hidden');
			}else{
				$('#idNonDispo').css('visibility', 'visible');
			}
		}
		//On vérifie ensuite que l'identifiant choisi n'est pas déjà utilisé
		else {
			if(page == "inscription"){
				$('#warning-identifiant').css('display', 'none');
				$('#help-warning-identifiant1').css('display', 'none');
				$('#help-warning-identifiant2').css('display', 'none');
			}
			// On affiche le bouton "Verifier la dispo"
			$('#checkDispoIdentifiant').css('visibility', 'visible');
			$('#idDispo').css('visibility', 'hidden');
			$('#idNonDispo').css('visibility', 'hidden');
		}
	}else{
		// On cache le bouton "Verifier la dispo"
		$('#checkDispoIdentifiant').css('visibility', 'hiddent');
		$('#idDispo').css('visibility', 'hidden');
		$('#idNonDispo').css('visibility', 'hidden');
	}
}

/* Gestion de l'age */

function GestionAge(theform) {
	var MaDate 	= new Date();

	var jour 	= $('#jour_naissance').val();
	var mois 	= $('#mois_naissance').val();
	var annee	= $('#annee_naissance').val();

	if(jour != '' && mois != '' && annee > 1989 ) {
		var objetDate 			= new Date(annee,mois-1,jour);
		var time_naissance 		= objetDate.getTime()/1000;
		var now					= new Date();
		var date_mineur			= new Date(now.getYear() - 16,now.getMonth(),now.getDay(),0,0,0);
		var date_majeur			= new Date(now.getYear() - 18,now.getMonth(),now.getDay(),0,0,0);

		var time_16				= date_mineur.getTime()/1000;
		var time_18				= date_majeur.getTime()/1000;

		if(time_naissance <= time_16 && time_naissance > time_18) {
			$('#interdiction-age').css('display', 'none');
			$('#autorisation-parentale').css('display', 'block');
		}else if(time_naissance > time_16) {
			$('#interdiction-age').css('display', 'block');
			$('#autorisation-parentale').css('display', 'none');
		}else if(time_naissance <= time_18) {
			$('#interdiction-age').css('display', 'none');
			$('#autorisation-parentale').css('display', 'none');
		}else {
			$('#interdiction-age').css('display', 'none');
			$('#autorisation-parentale').css('display', 'none');
		}
	}
}

function OuvrirPopup(page,nom,option) {
	window.open(page,nom,option);
}

var panierSurLeSite	= null;
function getPanier(){
	if(panierSurLeSite == null){
		panierSurLeSite = new Panier({
			"name"				:	"panier",
			"adresseDonnees"	: 	"traitements_panier.php"
		});
	}
	return panierSurLeSite;
}

/* BOX D'identification */
function openLogin() {
	var caption = "Connectez-vous pour accéder à votre compte";
	var url = url_zepass+"membre/box_login?height=300&width=300";
	var rel = "";
	tb_show(caption, url, rel);
}

function openAlerte(height) {
	var caption = "Créer gratuitement votre alerte";
	var url = url_zepass+"alerte/box_alerte?height=260&width=580";
	var rel = "";
	tb_show(caption, url, rel);
}

function reactivation(result) {
	var xhr = $.ajax({
		url: 		url_zepass+'membre/mail_reactivation',
		type: 		'GET',
		dataType: 	'JSON',
		success: function(responseJson) {
			var json 		= getHeaderJSON(xhr);
			if (json != null) {
				switch (json.status) {
					case 'request_status_successful':
						result.html("<div class='valid'>" + json.feedback_msg + "</div>");
						break;
					case 'request_status_error':
						result.html("<div class='error'>" + json.feedback_msg + "</div>");
						break;
					default:
						break;
				}
			}
		},
		error:function (xhr, ajaxOptions, thrownError){
         //   alert(xhr.status);
          //  alert(thrownError);
         }
	});
}

var AjaxConnection = $.inherit(
	AjaxForms, {
	__constructor : function(form, options) {
		var _this				= this;
		var datas				= new Array();
		datas['url']			=  url_zepass+'membre/login';

		form.submit(function(e) {
			datas['data']		= form.serialize();
			datas['type'] 		= 'POST';
			_this.initRequest(datas);
			_this.sendRequest(e);
		});
	},

	initRequest: function(datas) {
		this.__base(datas);
	},

	sendRequest: function(e) {
		this.__base(e);
	},

	sendSuccess: function(json, response) {
		if (json != null) {
			$('#res_log').empty();
			$('#res_log').removeClass('error');
			switch (json.status) {
				case 'request_status_redirect':
				case 'request_status_successful':
				   	tb_remove();
				   	window.location.reload();
					break;
				case 'request_status_error':
					//vidage du champ du mot de passe en cas d'erreur
					$('#password').attr("value", "");
					$('#box_password').attr("value", ""); //Pour Opera
					$('#res_log').html("<div class='error'>" + response + "</div>");
					$('#reactivation').click(function(e) {
						reactivation($('#res_log'));
						return false;
					});
					$('.box_login_oubli_mdp').click(function(e) {
						var caption = '';
						var url = url_zepass+ "membre/box_oubli?width=480&widthC=480";
						var rel = "";
						tb_show(caption, url, rel);
					});
					break;
				default:
					break;
			}
		}
	}
});

var AjaxIdentification = $.inherit(
	AjaxConnection, {
	__constructor : function(form, options) {
		this.__base(form, options);
	},

	initRequest: function(datas) {
		this.__base(datas);
	},

	sendRequest: function(e) {
		this.__base(e);
	},

	sendSuccess: function(json, response) {
		if (json != null) {
			switch (json.status) {
				case 'request_status_redirect':
					window.location.replace(json.feedback_msg);
					break;
				case 'request_status_successful':
				   	window.location.reload();
					break;
				case 'request_status_error':
					$('#password').attr("value", "");
					$('#res_connexion').html("<div class='error'>" + response + "</div>");
					$('#reactivation').click(function(e) {
						reactivation($('#res_connexion'));
						return false;
					});
					break;
				default:
					break;
			}
		}
	}
});

function OpenNewsletter() {
	var caption = '';
	var url = url_zepass+'abonnement/slideup_newsletter?height=230&width=510';
	var rel = '';
	tb_show(caption, url, rel);
}

function OpenAlignement() {
	var caption = '';
	var url = url_zepass+'concert/alignement?height=480&width=510';
	var rel = '';
	tb_show(caption, url, rel);
}

function openBoxBecomePremium() {
	var caption = "";
	var url = url_zepass+"abonnement/box_become_premium?height=250&width=500";
	var rel = "";
	tb_show(caption, url, rel, 1);
}

function viderPanier() {
	$.ajax({
	  url: url_zepass_longue + "panier/vider_panier",
	  dataType: "json",
	  type: "GET",
	  success: function(data) {
		  window.location.reload();
		}
	});
}

function in_array(needle, collection) {
    var i = collection.length-1;
    if (i >= 0) {
        do {
            if (collection[i] == needle) {
                return true;
            }
        } while (i--);
    }
    return false;
}

/*
 * @author VM
 * Affichage pop-up sur iPhone
 */
function isIPhone() {
	if((navigator.userAgent.match(/iPhone/i))||(navigator.userAgent.match(/iPod/i))){
		return true;
	}
	else{
		return false;
	}
}

function iPhoneAlert() {
	var is_iphone = isIPhone();

	if(is_iphone == true){
		var question = confirm("Souhaitez-vous télécharger l'application gratuite zePASS pour iPhone ?")
		if (question){
			window.location = "http://clk.tradedoubler.com/click?p=23753&a=1021262&g=0&url=http://itunes.apple.com/fr/app/zepass/id376828694?mt=8";
		}else{

		}
	}
}

function getFlashVersion(){
	return 0;
	try {
    	try {
     		var axo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.6');
      		try {
      			axo.AllowScriptAccess = 'always';
      		}catch(e) {
      			return '6,0,0';
      		}
    	} catch(e) {}
    	return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\D+/g, ',').match(/^,?(.+),?$/)[1];
  	}catch(e) {
		try {
      		if(navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin){
        		return (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]).description.replace(/\D+/g, ",").match(/^,?(.+),?$/)[1];
      		}
    	} catch(e) {}
  	}
  	return 0;
}

/*
 * @author QS
 * Affichage interstitiel
 */
function openInterstitiel(cible_interstitiel) {
	/* no si campagne coupée, yes pour afficher */
	var affich_interstitiel = 'no';
	var referrer_string = document.referrer.split('/');
	if(cible_interstitiel == 'newVU' && (referrer_string[2] == 'www.zepass.com' || referrer_string[2] == 'zepass.com')) {
		affich_interstitiel = 'no';
	}

	var is_iphone = isIPhone();

	if(affich_interstitiel == 'yes' && is_iphone == false) {
		//cookie_interstitiel = lireCookie('interstit');
		//cookie_interstitiel_vsc = lireCookie('interstit_vsc');
		cookie_interstitiel_thalys = lireCookie('interstit_thalys');

		if(cookie_interstitiel_thalys  == null) {
			var caption = "";
			var url = url_zepass+"accueil/box_interstitiel_thalys?height=350&width=410";
			var rel = "";
			tb_show(caption, url, rel);

			creerCookie('interstit_thalys', 'y', 2);
		}
		/*if(cookie_interstitiel_vsc == null) {
			var caption = "";
			var url = url_zepass+"accueil/box_interstitiel_vsc?height=510&width=505";
			var rel = "";
			tb_show(caption, url, rel);

			creerCookie('interstit_vsc', 'y', 2);
			creerCookie('interstit', 'y', 0);
		}
		else if(cookie_interstitiel == null && cookie_interstitiel_thalys  == null) {
			var caption = "";
			var url = url_zepass+"accueil/box_interstitiel_thalys?height=350&width=410";
			var rel = "";
			tb_show(caption, url, rel);

			creerCookie('interstit_thalys', 'y', 2);
		}*/
	}
}

/*
 * @author VM
 * Inversion des gares dans les sélecteurs
 *
*/
function inverser_gare(id_gare_depart, id_gare_arrivee) {
	var gare_depart = document.getElementById(id_gare_depart).options[document.getElementById(id_gare_depart).selectedIndex].value;
	var gare_arrivee = document.getElementById(id_gare_arrivee).options[document.getElementById(id_gare_arrivee).selectedIndex].value;
	document.getElementById(id_gare_depart).options[document.getElementById(id_gare_depart).selectedIndex].selected = false;
	document.getElementById(id_gare_arrivee).options[document.getElementById(id_gare_arrivee).selectedIndex].selected = false;
	var x = 0;
	while (document.getElementById(id_gare_depart).options[x].value != gare_arrivee) {
		x++;
	}
	document.getElementById(id_gare_depart).options[x].selected = true;
	setCookie('gare_depart', document.getElementById(id_gare_depart).options[x].value, 15*24*60*60*1000);
	x = 0;
	while (document.getElementById(id_gare_arrivee).options[x].value != gare_depart) {
		x++;
	}
	document.getElementById(id_gare_arrivee).options[x].selected = true;
	setCookie('gare_arrivee', document.getElementById(id_gare_arrivee).options[x].value, 15*24*60*60*1000);
}

