
$(document).ready(function () {

	// Recherche de codes postaux
	// --------------------------

		$.fn.declencherRechercheCodePostal = function(){
		
			if ( $(this).val().length == 5 ) 
				$(this).rechercherCodePostal();
			};

		$.fn.rechercherCodePostal = function(){

			var champCp = $(this).attr("id");
			var champVille = $(".agpmChampVille." + champCp ).attr("id");
			var codeInsee = $(this).attr("codeInsee");
			var pays = "FR";
			if( $(this).attr("pays") != null)
				pays = $(this).attr("pays");
			
			var zoneResultat = $(".agpmZoneVille." + champCp);
		
			var cp = $(this).val();
			if (cp.length < 5) { 
				alert('Indiquez d\'abord un code postal (exemple : 29100)'); 
				return false;
				}

			// TODO ADEG var version = ( $(this).hasClass("nogs") ) ? "NOGS" : "OCEA" ;
			var action = ( $(this).hasClass("nogs") ) ? "/communs/fonctions/reference/RechercherCodePostalBdaAction.php" : "/communs/fonctions/reference/RechercherCodePostalOceaAction.php" ;


			// Msg chargement
			zoneResultat.html("<p align='center'> Chargement ... </p>"); 

			// Ajax
			var donnees = "champCp="+champCp+"&valeurCp="+cp+"&champVille="+champVille+"&codeInsee="+codeInsee+"&pays="+pays;

			var html = $.ajax({
				type: "POST",
				url: action,
				async: false,
				data: donnees
				}).responseText;

			// DEBUG alert('html => ' + html);
				
			zoneResultat.html(html); 
			};

	$(function() {

		// Declenchement de la recherche de localites à la saisie d'un code postal
		$(".agpmCodePostal").keyup ( function () { $(this).declencherRechercheCodePostal();} );
		
		// Boutons recherche de localites
		$(".agpmCodePostal").each( function() {
			var champCp = $(this).attr("id");
			$(".agpmCodePostalRecherche." + champCp).css("cursor","pointer").click(function(){
					$("#" + champCp).rechercherCodePostal();
				});
			});

		});

	// Validation a la saisie
	// -----------------------

	(function($){

		// validation DATE
		// ---------------

		$.fn.validerDate = function(){
			
			var d = $(this).val();
			
			// Si le champ est vide, pas de verif, pas de msg.
			if(d == '') return true;
			 
			// booleen indiquant si la date est valide ou non.
			var bool = true;
	
			// Variables jour/mois/année
			var jour;
			var mois;
			var annee;
	
			// On vérifie qu'il y a 2 séparateurs
			// ----------------------------------
			d = "" + d; // Caste en string
			var resultat = d.split(/[\.\-\_\/]/);
			
			if(resultat.length==3){
	
				jour = resultat[0];
				mois = resultat[1];
				annee = resultat[2];
	
				// Si les valeurs ne sont pas numériques
				if(isNaN(jour) || isNaN(mois) || isNaN(annee)) bool = false;
				
				}
			else {

				// S'il n'y a pas 2 séparateurs, alors 
				// on prends les chiffres en considération
				// ---------------------------------------
				chiffres = d.match(/\d/g);
				
				if(chiffres){
					switch (chiffres.length) {
						case 8:
							jour  = chiffres[0] + chiffres[1];
							mois  = chiffres[2] + chiffres[3];
							annee = chiffres[4] + chiffres[5] + chiffres[6] + chiffres[7];
						break;
						case 6:
							jour  = chiffres[0] + chiffres[1];
							mois  = chiffres[2] + chiffres[3];
							annee = chiffres[4] + chiffres[5];
						break;
						case 4:
							jour  = chiffres[0]
							mois  = chiffres[1];
							annee = chiffres[2] + chiffres[3] ;
						break;
						default:
							// Erreur si longueur différente de 4,6 ou 8.
							// DEBUG alert('CASE DEFAULT = longueur différente de 4, 6 ou 8.');
							bool= false;
						break;
						} 
					}
				else{
						// Erreur pas de chiffres
						bool= false;
					}
				}
	
			// Si jour,mois,année valide
			if(bool){
	
				// On met le jour sur 2 chiffres s'il etait sur 1
				if(jour.length == 1) jour = "0" + jour;
				
				// On met l'annee sur 4 chiffres si elle etait sur 1
				if(mois.length == 1) mois = "0" + mois;
					
				// On met l'annee sur 4 chiffres si elle etait sur 2
				if(annee.length == 2){
					if( parseInt(annee,10) < 50 )
						annee = "20" + annee ;
					else
						annee = "19" + annee;	
					}
	
				//alert('JOUR= ' + jour +' | ' + 'MOIS = ' + mois + ' | ' + 'ANNEE =  ' + annee  );
				
				// On reformate la valeur du controle.
				$(this).val( jour + "/" + mois + "/" + annee );
				
				// Vérification des valeurs jour, mois et année.
				// ---------------------------------------------
				
				// Mois entre 1 et 12
				if (mois < 1 || mois > 12) bool = false;
				
				// Mois entre 1 et 31
				if (jour < 1 || jour > 31) bool = false;
				
				// Mois a 31 jours
				if ((mois == 4 || mois == 6 || mois == 9 || mois == 11) && (jour == 31)) bool = false;
				    
				// Année
			  if(annee.length!=4)
			  	bool = false;
			  else {
					// Verif si février annees bissextiles
					if (mois == 2) {
					  var leap = (annee % 4 == 0 && (annee % 100 != 0 || annee % 400 == 0));
					  if (jour>29 || (jour == 29 && !leap)) bool = false;
					  }
			  	}
				}
	
			// Si la date n'est pas valide
			// ---------------------------
			if(!bool) {
				alert('Date invalide'); /* TODO i18n*/
				$(this).val("");
				$(this).focus();
				return false;
				}
			return true;
			}

		// validation HEURE
		// ----------------

		$.fn.validerHeure = function(){
			
			var d = $(this).val();
			
			// Si le champ est vide, pas de verif, pas de msg.
			if(d == '') return true;
			 
			// booleen indiquant si l'heure est valide ou non.
			var bool = true;
	
			// Variables heure/minute
			var heure;
			var minute;
	
			// On vérifie qu'il y a 2 séparateurs
			// ----------------------------------
			d = "" + d; // Caste en string
			var resultat = d.split(/[\h\H\.\-\_\/]/);
			
			if(resultat.length==2){
	
				heure  = resultat[0];
				minute = resultat[1];
	
				// Si les valeurs ne sont pas numériques
				if ( isNaN(heure) || isNaN(minute) ) bool = false;

				}
			else {

				// S'il n'y a pas 2 séparateurs, alors 
				// on prends les chiffres en considération
				// ---------------------------------------
				chiffres = d.match(/\d/g);
				
				if(chiffres){
					switch (chiffres.length) {
						case 4:
							heure  = chiffres[0] + chiffres[1];
							minute  = chiffres[2] + chiffres[3];
						break;
						case 3:
							heure  = chiffres[0];
							minute  = chiffres[1] + chiffres[2];
						break;
						case 3:
							heure  = chiffres[0] + chiffres[1];
							minute  = "00";
						break;
						default:
							bool= false;
						break;
						} 
					}
				else{
						// Erreur pas de chiffres
						bool= false;
					}
				}
			
				// On reformate la valeur du controle.
				$(this).val( heure + ":" + minute );
			
				// Vérification des valeurs heure et minute.
				// ---------------------------------------------
				
				// heure entre 0 et 23
				if (heure < 0 || heure > 23) bool = false;
				
				// minute entre 0 et 59
				if (minute < 0 || minute > 59) bool = false;
			
			// Si l'heure n'est pas valide
			// ---------------------------
			if(!bool) {
				alert('Heure invalide'); /* TODO i18n*/
				$(this).val("");
				$(this).focus();
				return false;
				}
			return true;
			}

		// validation LETTRES
		// -------------------

		$.fn.validerLettre = function(){
			var expression = /^([a-zA-Z])+$/;
			var msg = "Ce champ doit contenir uniquement des lettres";
			// var msg = "champ LETTRES !!!";
			$(this).valider(expression,msg);
			};
			
		// validation CHIFFRES
		// -------------------

		$.fn.validerChiffre = function(){

			// On supprime tout les caracteres blancs
			$(this).val( $(this).val().replace(/ /g, '') );

			var expression = /^[0-9]+$/;
			var msg = "Ce champ doit contenir uniquement des chiffres";
			// var msg = "champ CHIFFRES !!!";
			$(this).valider(expression,msg);
			};

		// validation DECIMAL
		// -------------------

		$.fn.validerDecimal = function(){
			
			// On supprime tout les caracteres blancs
			$(this).val( $(this).val().replace(/ /g, '') );
			// Le séparateur est le point
			$(this).val( $(this).val().replace(',','.') ) ;
			
			var expression = /^([0-9])+([\.][0-9]{1,2})?$/;
			var msg = "Ce champ doit contenir uniquement des chiffres";
			// var msg = "champ DECIMAL !!!";
			$(this).valider(expression,msg);
			};

		// validation MAIL
		// ---------------

		$.fn.validerMail = function(){
			
			// On supprime tout les caracteres blancs
			$(this).val( $(this).val().replace(/ /g, '') );
			// Le séparateur est le point
			$(this).val( $(this).val().replace(',','.') ) ;
			
			//var expression = /^([a-zA-Z0-9])+[a-zA-Z0-9\.\-\_]+([a-zA-Z0-9])+@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/;
			var expression = /^([a-zA-Z0-9\.\-\_])+@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/;
			var msg = "L'adresse e-mail que vous avez saisie n'est pas valide";
			// var msg = "champ MAIL !!!";
			$(this).valider(expression,msg);
			};

		// Fonction générique de validation 
		// ---------------------------------

		$.fn.valider = function(expression,msg){
		
			// alert('test valider(' + expression + ',' + msg + ')');
		
			var valeur = $(this).val();
			if ( valeur.length > 0 ) {
				if (!( expression.test(valeur))) {
					alert(msg);
					$(this).val("");
					$(this).focus();
					}
				}
			};

		// validation CODE POSTAL
		// ----------------------

		$.fn.validerCodePostal = function(){

			// On supprime tout les caracteres blancs
			$(this).val( $(this).val().replace(/ /g, '') );
			// Le séparateur est le point
			$(this).val( $(this).val().replace(',','.') ) ;

			var expression = /^([a-zA-Z0-9])+[a-zA-Z0-9\.\-\_]+([a-zA-Z0-9])+@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/;
			var msg = "L'adresse e-mail que vous avez saisie n'est pas valide";
			// var msg = "champ CODE POSTAL !!!";
			$(this).valider(expression,msg);
			};

	})(jQuery)


	$(".agpmValidationChiffre").blur(function () { $(this).validerChiffre();});
	$(".agpmValidationDate").blur(function () { $(this).validerDate();});
	$(".agpmValidationHeure").blur(function () { $(this).validerHeure();});
	$(".agpmValidationDecimal").blur(function () { $(this).validerDecimal();});
	$(".agpmValidationLettre").blur(function () { $(this).validerLettre();});
	$(".agpmValidationMail").blur(function () { $(this).validerMail();});

	// Code postal
	// $(".agpmCodePostal").blur(function () { $(this).validerCodePostal();});
	// $(".agpmCodePostal").keyup(function () { $(this).declencherRechercheCodePostal();});
	
	});


	$(document).ready(function () {
	
		// TAGLIB BOUTON
		// -------------
		
		// Taglib Bouton - Rollover
		
		$('.agpmBouton').css("cursor","pointer").mouseover( function() {
			$(this).children().addClass('actif');
			});
		
		$('.agpmBouton').css("cursor","pointer").mouseout( function() {
			$(this).children().removeClass('actif');
			});
		
		// Taglib Bouton - Submit

		$('.agpmBouton[methode]').click( function() {

			if ( ! $(this).hasClass('agpm-desactivation') ) {

				var methode = $(this).attr("methode");
				var formulaire = $(this).parents("form");
				var champMethode = formulaire.find("#methode");
				
				// Set la méthode dans le champs caché
				champMethode.val( methode );
			
				// On balance le formulaire
				formulaire.submit();
			
				// empeche de submitter plusieurs fois un formulaire
				$(this).addClass('agpm-desactivation');

				}

			});

		});
