/*
 GUR
 
 Librairie de controles des formulaires, reprises et autres traitements
 
 Nécessite jquery
 
*/

var Surface = {
	devisIdentification : {
		init : function() {
			$j('#login').change( function(index, item) {
				Surface.toggleSelectError('label[for="login"]:first', '#login_erreur','#login_xerreur', !Surface.isValidEmail( $j('#login').val()));
			});
			$j('#password').change( function(index, item) {
				Surface.toggleSelectError('label[for="password"]:first', '#password_erreur','#password_xerreur', false);
			});
		},
		
		valid : function() {
			var isValid = true;
			if ($j('#login') == 0 || !Surface.isValidEmail($j('#login').val())) {
				Surface.toggleSelectError('label[for="login"]:first', '#login_erreur','#login_xerreur', true);
				isValid = false;
			}
			if ($j('#login') == 0 || $j('#login').val().length == 0 ) {
				Surface.toggleSelectError('label[for="password"]:first', '#password_erreur','#password_xerreur', true);
				isValid = false;
			}
			return isValid;
		}
	},
		
	/* controle de l'etape 1 de devis */
	devisStep1 : {
		init : function() {
			if ('undefined' != typeof(devisLogement)) {
				devisLogement.init();
			}
			Surface.devisIdentification.init();
			$j.each($j('input[type="radio"]'), function(index, item) {
				$j(item).click( function() {
					var itemGetter = '#' + this.name + '_title:first';
					Surface.toggleRadioError(itemGetter , false); 
				});
			});
			$j.each($j('select'), function(index, item) {
				$j(item).change( function() {
					var labelGetter = 'label[for="' + this.name + '"]:first';
					var messageGetter = '#' + this.name + '_erreur:first';
					var messageXGetter = '#' + this.name + '_xerreur:first';
					Surface.toggleSelectError(labelGetter, messageGetter, messageXGetter, false);
				});
			});
			$j('#ville').change( function(index, item) {
				Surface.toggleSelectError('label[for="codep"]:first', '#codep_erreur','#codep_xerreur', false);
			});
			$j("#loge3").click( function() {
				$j.each($j('input[name="poss"]'), function (index , item) {item.checked = false;});
				Surface.toggleRadioError('#poss_title:first' , false); 
				return true;
			});
			$j("#type1").click( function() {
				document.getElementById("etage").selectedIndex = 0;
				$j.each($j('input[name="dern"]'), function (index , item) {item.checked = false;});
				Surface.toggleSelectError('label[for="etage"]:first' , '#etage_erreur' , '#etage_xerreur' , false);
				Surface.toggleRadioError('#dern_title:first' , false); 
				return true;
			});
			$j("#type3").click( function() {
				document.getElementById("etage").selectedIndex = 0;
				$j.each($j('input[name="dern"]'), function (index , item) {item.checked = false;});
				document.getElementById("piece").selectedIndex = 0;
				document.getElementById("grdes").selectedIndex = 0;
				Surface.toggleSelectError('label[for="piece"]:first', '#piece_erreur', '#piece_xerreur', false);
				Surface.toggleSelectError('label[for="etage"]:first', '#etage_erreur', '#etage_xerreur', false);
				Surface.toggleRadioError('#dern_title:first' , false);
				return true;
			});
			$j("#piece").change( function() {
				if ($j('#piece').val() > 12) {
					Surface.warningMessage('E_MORE_THAN_12_ROOMS');
					document.getElementById("piece").selectedIndex = 0;
				}
				Surface.devisStep1.checkNumberOfRooms();
				return true;
			});
			$j("#depe1").click( function() {
				Surface.warningMessage('W_DEPENDANCES_YES');
				return true;
			});
			$j("#depe2").click( function() {
				$j.each($j('input[name="dime"]'), function (index , item) {item.checked = false;});
				return true;
			});
			$j("#grdes").change( function() {
				Surface.toggleSelectError('label[for="piece"]:first', '#piece_erreur:first', '#piece_xerreur:first', false);
				Surface.devisStep1.checkNumberOfRooms();
				return true;
			});
			$j("#dime1").click( function() {
				Surface.warningMessage('W_DEPENDANCES_MORE_THAN_50M2');
				// Amaline : ne pas décocher le check box car message non bloquant (DAQ, vu avec CCD);
				// document.getElementById("dime1").checked = false;
				return true;
			});
			$j("#pisc2").click( function() {
				document.getElementById("pisci").selectedIndex = 0;
				Surface.toggleSelectError('label[for="pisci"]:first' , '#pisci_erreur:first', '#pisci_xerreur:first', false);
				Surface.toggleRadioError('#pisc_title:first' , false);
				return true;
			});
		},
		
		isPNO : function () {
			var arr = $j('input[name="loge"]');
			var is = false;
			$j('input[name="loge"]').each(function(current, item) {
				if ((item.value == 'PNO') && item.checked) {
					is = true;
				} 
			});
			return is;
		},
		
		checkNumberOfRooms : function () {
			var nbGrandesPieces = parseInt($j('#grdes').val(), 10);
			var nbPieces = parseInt($j('#piece').val(), 10);
			if ((nbPieces < 0) || (nbGrandesPieces < 0)) { return true; }
			if (nbGrandesPieces > nbPieces) {
				Surface.warningMessage('W_INVALID_NUMBER_OF_ROOMS');
				document.getElementById("grdes").selectedIndex=0;
				document.getElementById("piece").selectedIndex=0;
				return false;
			}
			return true;
		},
		
		errorMessage : function ( code ) {
			Surface.warningMessage( code );
			Surface.devisStep1.reset();
		},
		
		isValidValue : function( fieldValue ){
			if (fieldValue == "-1") return false;
			if ('undefined' != typeof(tErrorWarn)) {
				var interdit_exp = new RegExp("^E","gi");
		    	var warning_exp = new RegExp("^W","gi");
				for (index = 0; index < tErrorWarn.length; ++index ) {
					if (tErrorWarn[index][0] == fieldValue) {
						if (interdit_exp.test(tErrorWarn[index][1])) {
		    			Surface.devisStep1.errorMessage(tErrorWarn[index][1]);
						}
				    if (warning_exp.test(tErrorWarn[index][1])) {
				    	Surface.warningMessage(tErrorWarn[index][1]);
				    }
						return false;
					}
				}		
			}
			return true;
		},
		
		valid : function() {
			var isValid = true;
			if (!$j("#loge1")[0].checked && !$j("#loge2")[0].checked && !$j("#loge3")[0].checked) {
				Surface.toggleRadioError('#loge_title:first' , true);
				isValid = false;
			}
			if (!$j("#type1")[0].checked && !$j("#type2")[0].checked && !$j("#type3")[0].checked) {
				Surface.toggleRadioError('#type_title:first' , true);
				isValid = false;
			}
			if (!$j("#poss1")[0].checked && !$j("#poss2")[0].checked && !Surface.devisStep1.isPNO()) {
				Surface.toggleRadioError('#poss_title:first' , true);
				isValid = false;
			}
			if ($j("#type2")[0].checked && ($j('#etage').val() == '-1' || $j('#etage').val().length == 0)) {
				Surface.toggleSelectError('label[for="etage"]:first', '#etage_erreur:first', '#etage_xerreur:first', true);
				isValid = false;
			}
			if ($j("#type2")[0].checked && !$j("#dern1")[0].checked && !$j("#dern2")[0].checked) {
				Surface.toggleRadioError('#dern_title:first' , true);
				isValid = false;
			}
			if ($j("#codep")[0].value == null || $j("#codep")[0].value == '' || !/^[0-9]{5}$/.test($j("#codep")[0].value)) {
				Surface.toggleSelectError('label[for="codep"]:first', '#codep_erreur:first', '#codep_xerreur:first', true);
				isValid = false;
			} else if ($j('#ville').val() == '-1' || $j('#ville').val().length == 0) {
				Surface.toggleSelectError('label[for="codep"]:first', '#codep_erreur:first', '#codep_xerreur:first', true);
				isValid = false;
			}
			if (!$j("#type3")[0].checked && ($j('#piece').val() == '-1' || $j('#piece').val().length == 0)) {
				Surface.toggleSelectError('label[for="piece"]:first', '#piece_erreur:first','#piece_xerreur:first', true);
				isValid = false;
			}
			if (!$j("#vera1")[0].checked && !$j("#vera2")[0].checked) {
				Surface.toggleRadioError('#vera_title:first' , true);
				isValid = false;
			}
			if (!$j("#depe1")[0].checked && !$j("#depe2")[0].checked) {
				Surface.toggleRadioError('#depe_title:first' , true);
				isValid = false;
			}
			if ($j("#depe1")[0].checked && !$j("#dime1")[0].checked && !$j("#dime2")[0].checked) {
				Surface.toggleRadioError('#dime_title:first' , true);
				isValid = false;
			}
			if (!$j("#gara1")[0].checked && !$j("#gara2")[0].checked) {
				Surface.toggleRadioError('#gara_title:first' , true);
				isValid = false;
			}
			if (!$j("#pisc1")[0].checked && !$j("#pisc2")[0].checked) {
				Surface.toggleRadioError('#pisc_title:first' , true);
				isValid = false;
			}
			if ($j("#pisc1")[0].checked && ($j('#pisci').val() == '-1' ||  $j('#pisci').val().length == 0)) {
				Surface.toggleSelectError('label[for="pisci"]:first' , '#pisci_erreur:first', '#pisci_xerreur:first', true);
				isValid = false;
			}
			return ( isValid );
		},

		reset : function() {
			$j.each($j('select'), function(index, item) {
				item.selectedIndex = 0;
			});
			$j.each($j('input[type="radio"]'), function(index, item) { item.checked = false; });
		}
	},
		
	/* controle de l'etape 2 de devis */
	devisStep2 : {
		init : function() {
			$j.each($j('input[type="radio"]'), function(index, item) {
				$j(item).click( function() {
					var itemGetter = '#' + this.name + '_title:first';
					Surface.toggleRadioError(itemGetter , false);
				});
			});
			$j.each($j('select'), function(index, item) {
				$j(item).change( function() {
					var nameForCheck = this.name;
					var labelGetter = 'label[for="' + nameForCheck + '"]:first';
					var messageGetter = '#' + nameForCheck + '_erreur:first';
					var messageXGetter = '#' + nameForCheck + '_xerreur:first';
					if (nameForCheck.match(/^anne/g)) {
						labelGetter = labelGetter.replace('anne', 'mois');
						messageGetter = messageGetter.replace('anne', 'mois');
						messageXGetter = messageXGetter.replace('anne', 'mois');
					}
					Surface.toggleSelectError(labelGetter, messageGetter, messageXGetter, false);
				});
			});
			//Check date de naissance
			$j("#date_naissance").change(function(){
				//Determiner les dates seuils
				var aujourdhui = new Date();
				var dateTropJeune = new Date(aujourdhui.getFullYear()-18,aujourdhui.getMonth(),aujourdhui.getDate());
				dateTropJeune.setHours(0);
				dateTropJeune.setMinutes(0);
				dateTropJeune.setSeconds(0);
				dateTropJeune.setMilliseconds(0);
				
				//Date de naissance
				var date_regexp=/^(\d{1,2}\/){2}\d{4}$/;
				if ($j(this).val().match(date_regexp)){
					var day = $j(this).val().substring(0,2);
					var month = $j(this).val().substring(3,5);
					var year = $j(this).val().substring(6,10);
					var naissance = new Date(year,month-1,day);
					naissance.setHours(0);
					naissance.setMinutes(0);
					naissance.setSeconds(0);
					naissance.setMilliseconds(0);
					
					var seuil = compareDates(dateTropJeune,naissance);
					
					if(seuil == -1){
						$j(this).val("");
						$j("#date_naissance_xerreur").show();
						Surface.warningMessage('E_USER_YOUNG');
					}else{
						$j("#date_naissance_xerreur").hide();
					}
				}else{
					$j("#date_naissance_xerreur").show();
				}
			});
			$j('#profe').change( function() {
				Surface.toggleSelectError('label[for="profe"]:first', '#profe_erreur:first', '#profe_xerreur:first', false);
				Surface.devisStep2.isValidValue($j(this).val());
			});
			$j('#assur').change( function() {
				Surface.toggleSelectError('label[for="assur"]:first', '#assur_erreur:first', '#assur_xerreur:first', false);
				Surface.toggleSelectError('label[for="quand"]:first', '#quand_erreur:first','#quand_xerreur:first', false);
				var assureur = $j(this).val();
				if (this.selectedIndex == 0 || assureur == 'PAS' ) {
					document.getElementById("quand").selectedIndex = 0 ;
				} else {
					Surface.devisStep2.isValidValue(assureur);
				}
				return true;
			});
			$j('#quand').change( function() {
				Surface.toggleSelectError('label[for="quand"]:first', '#quand_erreur:first','#quand_xerreur:first', false);
			});
			$j('#nenfa').change( function() {
				var nb = parseInt(this.value, 10);
				for (var current = (nb + 1); ($j('#mois'+current).size() > 0) ; ++current) {
					try {
						document.getElementById("mois" +current).selectedIndex=0;
						document.getElementById("anne"+current).selectedIndex=0;
					} catch (e) {}
				}
			});
			$j('select[name~="anne"]').change( function() {
				if (this.name == 'annee') {
					return true;
				}
				var result = Surface.devisStep2.bornInTheFuture();
				return result;
			});
			$j('select[name~="mois"]').change( function() {
				if (this.name == 'moiss') {
					return true;
				}
				Surface.devisStep2.bornInTheFuture();
				return true;
			});
			$j('#enfa2').click( function() {
				var nbenfant = 0;
				document.getElementById("nenfa").selectedIndex = 0;
				var index = 1;
				while (0 < $j("#mois" + index).size() && 0 < $j("#anne" + index).size()) {
					document.getElementById("mois" + index).selectedIndex = 0;
					document.getElementById("anne" + index).selectedIndex = 0;
					Surface.toggleSelectError('label[for="mois' + index + '"]:first', '#mois'+index+'_erreur:first', '#mois'+index +'_xerreur:first', false);
					++index;
				}
				$j.each( $j("div.f02b div.hors"), function() {
					this.style.display = 'none';
				});
				return true;
			});
			$j('#resi1').click( function() {
				Surface.devisStep2.errorMessage('E_SOUSCRIPTION_INTERDITE');
				return true;
			});
		},
				
		bornInTheFuture : function() {
			var nb_enfants = $j('#nenfa').val();
			var alreadyAlerted = false;
			if (0 < nb_enfants) {
				var today = Surface.todayMonthBase();
				for (index = 1; index <= nb_enfants; index++) {
					var annee = parseInt($j('#anne' + index).val(), 10);
					var mois = parseInt($j('#mois' + index).val(), 10);
					if ((0 >= mois) || (0 >= annee)) {
						continue;
					}
					var naissance = new Date(annee, mois - 1, 1);
					if (today < naissance) {
						if (! alreadyAlerted) {
							Surface.warningMessage("W_CHILD_BORN_FUTUR");
						}
						alreadyAlerted = true;
						document.getElementById("mois" + index).selectedIndex = 0;
						document.getElementById("anne" + index).selectedIndex = 0;
					}
				}
			}
		},
		
		errorMessage : function ( code ) {
			Surface.warningMessage( code );
			Surface.devisStep2.reset();
		},
		
		isValidValue : function( fieldValue ){
			if (fieldValue == "-1") return false;
			if ('undefined' != typeof(tErrorWarn)) {
				var interdit_exp = new RegExp("^E","gi");
		    	var warning_exp = new RegExp("^W","gi");
				for (index = 0; index < tErrorWarn.length; ++index ) {
					if (tErrorWarn[index][0] == fieldValue) {
						if (interdit_exp.test(tErrorWarn[index][1]))
		    			Surface.devisStep2.errorMessage(tErrorWarn[index][1]);
				    if (warning_exp.test(tErrorWarn[index][1]))
				    	Surface.warningMessage(tErrorWarn[index][1]);
						return false;
					}
				}		
			}
			return true;
		},
		
		valid : function() {
			var isValid = true;
			if (!$j("#sexe1")[0].checked && !$j("#sexe2")[0].checked) {
				Surface.toggleRadioError('#sexe_title:first', true);
				isValid = false;
			}
			if($j("#date_naissance").val()==null || $j("#date_naissance").val()==""){
				$j("#date_naissance_xerreur").show();
				isValid = false;
			}
			if ($j('#profe').val() == '0' || $j('#profe').val().length == 0) {
				Surface.toggleSelectError('label[for="profe"]:first', '#profe_erreur:first', '#profe_xerreur:first', true);
				isValid = false;
			}
			if (!$j("#situ1")[0].checked && !$j("#situ2")[0].checked) {
				Surface.toggleRadioError('#situ_title:first', true);
				isValid = false;
			}
			if ($j("#enfa1").size() > 0) {
				if (!$j("#enfa1")[0].checked && !$j("#enfa2")[0].checked) {
					Surface.toggleRadioError('#enfa_title:first', true);
					isValid = false;
				}
				if ($j("#enfa1")[0].checked) {
					for (var current=1; current <= parseInt($j('#nenfa').val(), 10); ++current) {
						if ($j('#mois' + current)[0].selectedIndex == 0 || $j('#anne' + current)[0].selectedIndex == 0) {
							Surface.toggleSelectError('label[for="mois'+current+'"]:first', '#mois' + current + '_erreur:first', '#mois' +current + '_xerreur:first', true);
							isValid = false;
						}
					}
				}
			}
			if (!$j("#resi1")[0].checked && !$j("#resi2")[0].checked) {
				Surface.toggleRadioError('#resi_title:first', true);
				isValid = false;
			}
			if ($j('#assur').val() == '0' || $j('#assur').val().length == 0) {
				Surface.toggleSelectError('label[for="assur"]:first', '#assur_erreur:first', '#assur_xerreur:first', true);
				isValid = false;
			} else {
				if ($j('#quand').val() == '-1' || $j('#quand').val().length == 0) {
					if ($j('#assur').val() != 'PAS') {
						Surface.toggleSelectError('label[for="quand"]:first', '#quand_erreur:first', '#quand_xerreur:first', true);
						isValid = false;
					}
				}
				if ($j('#assur').val() != 'PAS') {
					if($j("#date_echeance").val()==null || $j("#date_echeance").val()==""){
						$j("#date_echeance_xerreur").show();
						isValid = false;
					}
				}
			}
			return isValid;
		},

		reset : function() {
			$j.each($j('select'), function(index, item) { item.selectedIndex = 0; });
			$j.each($j('input[type="radio"]'), function(index, item) { item.checked = false; });
			$j("#enfa2")[0].click(); //on met cette etape en dernier car pour PNO pas d'enfant sur formulaire
		}
		
	},
	
	/* controle de l'etape 3 de devis */
	devisStep3 : {
		submited : false,
		codePromoOk : false,
		codePromoFilleulIdent : '',
		urlControl : '',
		urlControlFilleul : '',
		urlControlParrain : '',
		urlDetermineOptionOfferte : '',
		init : function() {
			if ('undefined' != typeof(lancerSimulation)) {
				lancerSimulation();
			}
			$j('div.devis table input[type="checkbox"]').change(function() {
				Surface.devisStep3.majOptions();
			});
			if (0 < $j("#actionNext").size()) {
				$j("#actionNext")[0].value="";
			}
			$j("span.formuleLabel").tooltip({ 
		  		track: true,
		  		delay: 0,
		  		showURL: false,
		  		extraClass: "right"
		  	});
			$j('#recalcul').ajaxError(function() {
			    $j('.spinner').hide();
			    $j('#recalcul').show();
			  }
			);
			
			Surface.devisStep3.fixHeightFormules();
			Surface.devisStep3.fixHeightOptions();
			
			/**
			 * MGS - BOITIER PREVENTION
			 */
			$j("#PREV1").click(function(){
			      $j("#PREV2").removeAttr("checked");
			      $j("#PREV3").removeAttr("checked");
			      if($j(this).is(':checked')){
			    	  Surface.devisStep3.messagePrevention();
			      }else{
			    	  $j(this).removeAttr("checked");
			      }
			      calculer();
			    });

			    $j("#PREV2").click(function(){
			        $j("#PREV1").removeAttr("checked");
			        $j("#PREV3").removeAttr("checked");
			        if($j(this).is(':checked')){
			      	  	Surface.devisStep3.messagePrevention();
			        }else{
			            $j(this).removeAttr("checked");
			        }
			        calculer();
			      });

			    $j("#PREV3").click(function(){
			        $j("#PREV1").removeAttr("checked");
			        $j("#PREV2").removeAttr("checked");
			        if($j(this).is(':checked')){
			      	  	Surface.devisStep3.messagePrevention();
			        }else{
			            $j(this).removeAttr("checked");
			        }
			        calculer();
			      });
			/**
			 * FIN BOITIER PREVENTION
			 */
		},
		errorMessage : function ( code ) {
			Surface.warningMessage( code );
			Surface.devisStep3.reset();
		},
		isValidValue : function( fieldValue ){
			if (fieldValue == "-1") return false;
			if ('undefined' != typeof(tErrorWarn)) {
				var interdit_exp = new RegExp("^E","gi");
				var warning_exp = new RegExp("^W","gi");
				for (index = 0; index < tErrorWarn.length; ++index ) {
					if (tErrorWarn[index][0] == fieldValue) {
						if (interdit_exp.test(tErrorWarn[index][1])) {
							Surface.devisStep3.errorMessage(tErrorWarn[index][1]);
						}
						if (warning_exp.test(tErrorWarn[index][1])) {
							Surface.warningMessage(tErrorWarn[index][1]);
						}
						return false;
					}
				}		
			}
			return true;
		},
		reset : function() { },
		reloadOptions : function() {
			var selected = $j('#selectedOptions').val();
			if ((typeof(selected) != 'undefined') && (selected != '')) {
				var selectedArray = selected.split(/[;,]+/g);
				$j.each($j('div.devis table input[type="checkbox"]'), function(index, item) {
					var optionsArray = this.value.split(/[;,]+/g);
					var checked = false;
					for (var i = 0; i < optionsArray.length ; ++i) {
						for (var j = 0; j < selectedArray.length ; ++j) {
							if (selectedArray[j] == optionsArray[i]) {
								checked = true;
								break;
							}
						}
						if (checked) {
							// On coche la checkbox de l'option
							$j('#'+this.id).attr('checked', true);
							break;
						}
					}
				});
				// Simulation d'un clic pour que l'affichage soit bien cohérent (pour option offerte notamment)
				onClickOption();
			}
		},
		majOptions : function() {
			var selected = new Array();
			var notSelected = new Array();
			$j('#selectedOptions').val('');
			$j('#notSelectedOptions').val('');
			$j.each($j('div.devis table input[type="checkbox"]'), function(index, item) {
				var optionValue = this.value;
				if (item.checked) {
					if (-1 == $j.inArray(optionValue, selected)) {
						selected.push(optionValue);
					}
				} else {
					if (-1 == $j.inArray(optionValue, notSelected)) {
						notSelected.push(optionValue);
					}
				}
			});
			$j('#selectedOptions').val(selected);
			$j('#notSelectedOptions').val(notSelected);
		},
		recalcul : function(residence) {
			var code = $j("#promo").val();
			if (code.length > 0) {
				$j('#recalcul').hide();
				$j('.spinner').show();
				ajaxControle = $j.getJSON(
					Surface.devisStep3.urlControl,
					{ codePromo : code,
					  produit: "MRH",
					  t : Math.random()},
					function ( datas ) {
						$j('.spinner').hide();
						$j('#recalcul').show();
						var codeMessage = datas.error.toUpperCase();
						if ("COD_PROMO_VALIDE" == datas.error.toUpperCase()) {
							/*Message basée sur l identifiant du code promo*/
							var ident = new String(datas.ident);
							var codeSalarie = new String(datas.codeSalarie);
							var filleul = new String(datas.filleul);
							$j("#promo_deja_entree").val(code);
							codeMessage = "COD_PROMO_"+ ident;
							Surface.devisStep3.codePromoOk = true;
							if (filleul != 'OUI') {
								Surface.devisStep3.codePromoFilleulIdent = "";
								$j("#emailParrain").val("");
								$j("#divEmailParrain").hide();
								Surface.devisStep3.reloadSimulation();
								tb_show("", "#TB_inline?height=394&width=597&inlineId=" + codeMessage, "");
							} else {
								Surface.devisStep3.codePromoFilleulIdent = ident;
								var conseille_id = "<%= surfer.isConnected() %>";
								if (conseille_id == 'true') {
									isFilleulPossible();
								} else {
									$j("#emailParrain").val("");
									$j("#divEmailParrain").show();
								}
							}
						} else {
							$j("#emailParrain").val("");
							$j("#promo").val("");
							$j("#divEmailParrain").hide();
							Surface.devisStep3.codePromoOk = false;
							Surface.devisStep3.reloadSimulation();
							tb_show("", "#TB_inline?height=394&width=597&inlineId=" + codeMessage, "");
						}
					}
				);
			} else {
				$j("#emailParrain").val("");
				$j("#divEmailParrain").hide();
				$j("#promo_deja_entree").val("");
				Surface.devisStep3.reloadSimulation();
			}
			return false;
		},
		isCodePromoParrainage : function() {
			var codePromoParrainage = false;
			var code = $j("#promo").val();
			if (code.length > 0) {
				ajaxControle = $j.ajax({
					url : Surface.devisStep3.urlControl,
					async : false,
					dataType: 'json',
					data : { codePromo : code,
					  t : Math.random()},
					success : function ( datas ) {
						Surface.devisStep3.codePromoFilleulIdent = "";
						if ("COD_PROMO_VALIDE" == datas.error.toUpperCase()) {
							var ident = new String(datas.ident);
							var filleul = new String(datas.filleul);
							if (filleul == 'OUI') {
								Surface.devisStep3.codePromoFilleulIdent = ident;
								codePromoParrainage = true;
							}
						}
					}
				});
			}
			return codePromoParrainage;
		},
		isParrainPossible : function() {
			var mailParrain = $j("#emailParrain").val();
			ajaxControle = $j.getJSON(Surface.devisStep3.urlControlParrain,
					{ mailParrain : mailParrain, t : Math.random()},
				function ( datas ) {
					if ("COD_PROMO_VALIDE" == datas.error.toUpperCase()) {
						codeMessage = "COD_PROMO_"+ Surface.devisStep3.codePromoFilleulIdent;
						tb_show("", "#TB_inline?height=394&width=597&inlineId=" + codeMessage, "");
					} else {
						$j("#promo").val("");
						$j("#emailParrain").val("");
						tb_show("", "#TB_inline?height=394&width=597&inlineId=" + datas.error, "");
					}
				}
			)
			return false;
		},
		isFilleulPossible : function() {
			ajaxControle = $j.getJSON(Surface.devisStep3.urlControlFilleul,
					{t : Math.random()},
				function ( datas ) {
					var codeMessage = datas.error;
					if ("COD_PROMO_VALIDE" != datas.error.toUpperCase()) {
						$j("#promo").val("");
						$j("#emailParrain").val("");
						$j("#divEmailParrain").hide();
						tb_show("", "#TB_inline?height=394&width=597&inlineId=" + codeMessage, "");
					} else {
						$j("#emailParrain").val("");
						$j("#divEmailParrain").show();
					}
				}
			)
			return false;
		},
		controleMailParrain : function() {
			var divEmailPArrain = "#emailParrain";
			var validationError = false;
			if ($j(divEmailPArrain).nextAll().is("span.error")) {
				$j(divEmailPArrain).nextAll("span.error").remove();
			}
			if ($j(divEmailPArrain).nextAll().is("span.msgError")) {
				$j(divEmailPArrain).nextAll("span.msgError").remove();
			}
			// si code promo pour le parrainage alors
			if ($j("#promo").val() != null &&  $j.trim($j("#promo").val()) != '' && Surface.devisStep3.isCodePromoParrainage()) { 
				if (!Surface.isValidEmail($j(divEmailPArrain).val())) {
					validationError = true;
				}
			}
			if (validationError) { 
				$j(divEmailPArrain).addClass("error");			
				var error1 = document.createElement("span");
				$j(error1).addClass("error");
				$j(error1).html("x");
				var error2 = document.createElement("span");
				$j(error2).addClass("msgError");
				$j(error2).html("Veuillez v\u00e9rifier l'email du parrain !");
				$j(error2).insertAfter(divEmailPArrain);
				$j(error1).insertAfter(divEmailPArrain);
				return false;
			} else {
				return true;
			}
		},
		reloadSimulation : function() {
			var params = new Array();
			if ($j("#promo").val().length > 0) {
				params.push(new Array('promo', $j("#promo").val()));  
			} else {
				params.push(new Array('promo', ''));
			}
			if ($j("#promo_deja_entree").val().length > 0) {
				params.push(new Array('promo_deja_entree', $j("#promo_deja_entree").val()));  
			} else {
				params.push(new Array('promo_deja_entree', ''));
			}
			if ($j("#emailParrain").val().length > 0) {
				params.push(new Array('emailParrain', $j("#emailParrain").val()));  
			} else {
				params.push(new Array('emailParrain', ''));  
			}
			if ($j("#selectedOptions").val().length > 0) {
				params.push(new Array('options', $j("#selectedOptions").val()));
			} else {
				params.push(new Array('options', ''));
			}
			if ($j("input[name='regl']:checked").size() > 0) {
				params.push(new Array('fraction', $j("input[name='regl']:checked").val() ));
			} else {
				params.push(new Array('fraction', ''));
			}
			if ($j("input[name='vale']:checked").size() > 0) {
				params.push(new Array('val', $j("input[name='vale']:checked").val() ));
			} else {
				params.push(new Array('val', ''));
			}
			if ($j("input[name='PREV1']:checked").size() > 0) {
				params.push(new Array('packPrevention', 'P1'));
			} else if($j("input[name='PREV2']:checked").size() > 0){
				params.push(new Array('packPrevention', 'P2'));
			} else if($j("input[name='PREV3']:checked").size() > 0){
				params.push(new Array('packPrevention', 'P3'));
			} else if ($j("#step3Simul").size() > 0) {
				params.push(new Array('step3Simul', 'true'));
			}
			window.location.href=Surface.rebuildUrlWithParams(params);
		},
		recordIt : function () {
			if (Surface.devisStep3.controlsOnRecordIt()) {
				//MGS - récupère le code promo utilisé (à vide si pas de recalcul avec un code promo valide)
				$j("#promo").val($j("#promo_deja_entree").val());

				Surface.devisStep3.majOptions();
				if (arguments.length > 0 && ( true === arguments[0] ) && ( 0 < $j("#actionNext").size() )) {
					$j("#actionNext")[0].value="";
				}
				if (!Surface.devisStep3.submited) {
					// Affichage du popin d'attente
					setTimeout('errorPopInMessage(\'I_CREATE_CONTRAT\',\'\',true)',100);
					
					Surface.devisStep3.submited = true;
					$j("#devisFormule")[0].submit();
					return Surface.devisStep3.submited;
				} else {
					return false;
				}
			} else {
				return false;
			}
		},
		
		controlsOnRecordIt : function () {
			if ($j("#type_promo").val() == 5) {
				/*
				 * Si un code promo est saisi et que le type de ce code promo est 5, il faut vérifier
				 * qu'il y a au moins 2 options cochées.
				 */
				return ($j('div.devis table input[type="checkbox"][checked]').length >= 2);
			} else if ($j("#type_promo").val() == 6) {
				/*
				 * Si un code promo est saisi et que le type de ce code promo est 6, il faut vérifier
				 * qu'il y a au moins 3 options cochées.
				 */
				return ($j('div.devis table input[type="checkbox"][checked]').length >= 3);
			} 
			return true;
		},
		
		messagePrevention : function(){
			//Surface.devisStep3.reloadSimulation();
			Surface.warningMessage("AVANTAGE_PREVENTION");
		},
		
		callBack : function() {
			if (0 < $j("#actionNext").size()) {
				$j("#actionNext")[0].value="callback";
			}
			Surface.devisStep3.recordIt();
			return false;
		},
		
		subscribe : function() {
			if (0 < $j("#actionNext").size()) {
				$j("#actionNext")[0].value="subscribe";
			}
			Surface.devisStep3.recordIt();
			return false;
		},
		
		fixHeightFormules: function(){
			optionsBodyHeightData = $j(".dataBody").height();
			$j(".dataBody").css({ height: optionsBodyHeightData+"px", overflow: "hidden" });
			
			$j(".closeDataBody").click(function(){
				if( $j(".dataBody").height() == 60 ){
					$j(".dataBody").animate({ height: optionsBodyHeightData+"px" }, 1000, function(){
						$j(".closeDataBody .texte").html("FERMER");
					});
				} else {
					$j(".dataBody").animate({ height: "60px" }, 1000, function(){
						$j(".closeDataBody .texte").html("OUVRIR");
					});	
				}
				return false;
			});
		},
		
		fixHeightOptions: function(){
			optionsBodyHeight = $j(".optionsBody table").height();
			$j(".optionsBody").css({ height: optionsBodyHeight+"px", overflow: "hidden" });
			
			$j(".closeOptionsBody").unbind("click").click(function(){
				if( $j(".optionsBody").height() == 39 ){
					$j(".optionsBody").animate({ height: optionsBodyHeight+"px" }, 1000, function(){
						$j(".closeOptionsBody .texte").html("FERMER");
					});
				} else {
					$j(".optionsBody").animate({ height: "39px" }, 1000, function(){
						$j(".closeOptionsBody .texte").html("OUVRIR");
					});	
				}
				return false;
			});
		}

	},
	
	subscribeStep1 : {
		working: false,
		init : function(){
			$j("#checkForm").submit( function() {
			  
			  /* AMALINE 15/04/2009 : Correction de la mauvaise gestion du double clic lors de la création de l'espace perso
			      En effet si les controles de surface ne sont pas corrects il n'est alors pas possible de soumettre le formulaire
			      après correction des erreurs de saisie */
			  if($j("#checkForm span.error").length>0) {
				Surface.subscribeStep1.working = false;
		        return false;
			  }
				
	          if (Surface.subscribeStep1.working) {
        	    //AMALINE 15/04/2009 : modification du message 
	        	Surface.warningMessage("I_CREATE_CONTRAT");
	            return false;
	          }
	          Surface.subscribeStep1.working = true;
	          return true;
	        });
		},
		reset : function(){}
	},
	
	subscribeStep2 : {
		init : function() {
			if (typeof(devisLogement) != 'undefined' &&  typeof(devisLogement.init) != 'undefined') {
				devisLogement.init();
			}
			$j('#date_contrat').change( function() {
				Surface.subscribeStep2.contratAntidate();
			});
			$j('#date_contrat').blur( function() {
				Surface.subscribeStep2.contratAntidate();
			});
			$j("#checkForm").submit( function() {
				//MGS - Verif sur les champs du boitier prevention
				//Mode de livraison
				var modeLivraison1 = $j("#mode_livraison1");
				var modeLivraison2 = $j("#mode_livraison2");
				var relaisIsSelected = $j("#relais_selectionne_id");
				if(modeLivraison1.length != 0 && modeLivraison2.length != 0){
					if (!modeLivraison1[0].checked && !modeLivraison2[0].checked) {
						$j("#boitier_sub_title_mode_livraison").addClass("error");
					}else{
						if(modeLivraison1[0].checked && relaisIsSelected.val() == ""){
							$j("#boitier_title_adresse_relais").addClass("error");
						}
					}
				}
				//Adresse de livraison
				var adresseLivraison1 = $j("#adresse_livraison1");
				var adresseLivraison2 = $j("#adresse_livraison2");
				var adresseLivraison3 = $j("#adresse_livraison3");
				var error1 = false;
				var error2 = false
				if(adresseLivraison1.length != 0 && adresseLivraison3.length != 0){
					if(!adresseLivraison1.parents("div.hide, p.hide").is(":hidden")){
						if (!adresseLivraison1[0].checked && !adresseLivraison3[0].checked) {
							error1 = true;
						}
					}
				}
				if(adresseLivraison2.length != 0){
					if(!adresseLivraison2.parents("div.hide, p.hide").is(":hidden")){
						if (!adresseLivraison2[0].checked) {
							error2 = true;
						}
					}
				}
				if(error1 && error2){
					$j("#boitier_title_adresse_livraison").addClass("error");
				}
			});
		},
		reset : function() {},
		
		contratAntidate : function() {
			if ($j('#date_contrat').size() > 0) {
				var today  = Surface.today();
				//CCD: on ne garde que la date du jour pour une comparaison correcte avec la date de contrat.
				today.setHours(0);
				today.setMinutes(0);
				today.setSeconds(0);
				today.setMilliseconds(0);
				var text=$j('#date_contrat')[0].value;
				if (  /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/.test( text )) {
					var dateContrat = new Date(parseInt(text.substr(6,4), 10), parseInt(text.substr(3,2), 10) - 1, parseInt(text.substr(0,2), 10));
					dateContrat.setHours(0);
			    	dateContrat.setMinutes(0);
			    	dateContrat.setSeconds(0);
			    	dateContrat.setMilliseconds(0);
			    	if (text != dateContrat.asString()) { /* asString est une méthode récupérée depuis les tools du datepicker  */
			    		//NGY : On ne met pas la popin car le message d'erreur s'affiche déjà dans la page - Mantis 472
			    		//Surface.warningMessage("E_CONTRAT_DATE_ERROR_FORMAT");
						$j('#date_contrat').val('');
			    	}
					if (today > dateContrat ) {
						Surface.warningMessage("E_CONTRAT_ANTIDATE");
						$j('#date_contrat').val('');
					}
					today.setFullYear(today.getFullYear() + 1);
					if (today < dateContrat) {
						Surface.warningMessage("E_CONTRAT_1_YEAR_TOO_LATE");
						$j('#date_contrat').val('');
					}
				}
			}
		}
		
	},
	
	subscribeStep2Prev : {
		init : function() {
			if (typeof(devisLogement) != 'undefined' &&  typeof(devisLogement.init) != 'undefined') {
				devisLogement.init();
			}
			$j('#date_contrat').change( function() {
				Surface.subscribeStep2Prev.contratAntidate();
			});
			$j('#date_contrat').blur( function() {
				Surface.subscribeStep2Prev.contratAntidate();
			});
			$j("#checkForm").submit( function() {
				//MGS - Verif sur les champs du boitier prevention
				//Mode de livraison
				var modeLivraison1 = $j("#mode_livraison1");
				var modeLivraison2 = $j("#mode_livraison2");
				var relaisIsSelected = $j("#relais_selectionne_id");
				if(modeLivraison1.length != 0 && modeLivraison2.length != 0){
					if (!modeLivraison1[0].checked && !modeLivraison2[0].checked) {
						$j("#boitier_sub_title_mode_livraison").addClass("error");
					}else{
						if(modeLivraison1[0].checked && relaisIsSelected.val() == ""){
							$j("#boitier_title_adresse_relais").addClass("error");
						}
					}
				}
				//Adresse de livraison
				var adresseLivraison1 = $j("#adresse_livraison1");
				var adresseLivraison2 = $j("#adresse_livraison2");
				var adresseLivraison3 = $j("#adresse_livraison3");
				var error1 = false;
				var error2 = false
				if(adresseLivraison1.length != 0 && adresseLivraison3.length != 0){
					if(!adresseLivraison1.parents("div.hide, p.hide").is(":hidden")){
						if (!adresseLivraison1[0].checked && !adresseLivraison3[0].checked) {
							error1 = true;
						}
					}
				}
				if(adresseLivraison2.length != 0){
					if(!adresseLivraison2.parents("div.hide, p.hide").is(":hidden")){
						if (!adresseLivraison2[0].checked) {
							error2 = true;
						}
					}
				}
				if(error1 && error2){
					$j("#boitier_title_adresse_livraison").addClass("error");
				}
			});
		},
		reset : function() {},
		
		contratAntidate : function() {
			if ($j('#date_contrat').size() > 0) {
				var today  = Surface.today();
				//CCD: on ne garde que la date du jour pour une comparaison correcte avec la date de contrat.
				today.setHours(0);
				today.setMinutes(0);
				today.setSeconds(0);
				today.setMilliseconds(0);
				var text=$j('#date_contrat')[0].value;
				if (  /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/.test( text )) {
					var dateContrat = new Date(parseInt(text.substr(6,4), 10), parseInt(text.substr(3,2), 10) - 1, parseInt(text.substr(0,2), 10));
					dateContrat.setHours(0);
			    	dateContrat.setMinutes(0);
			    	dateContrat.setSeconds(0);
			    	dateContrat.setMilliseconds(0);
			    	if (text != dateContrat.asString()) { /* asString est une méthode récupérée depuis les tools du datepicker  */
			    		//NGY : On ne met pas la popin car le message d'erreur s'affiche déjà dans la page - Mantis 472
			    		//Surface.warningMessage("E_CONTRAT_DATE_ERROR_FORMAT");
						$j('#date_contrat').val('');
			    	}
					if (today > dateContrat ) {
						Surface.warningMessage("E_CONTRAT_ANTIDATE");
						$j('#date_contrat').val('');
					} else if (today >= dateContrat ) {
						Surface.warningMessage("E_CONTRAT_TODAY");
						$j('#date_contrat').val('');
					}
					today.setFullYear(today.getFullYear() + 1);
					if (today < dateContrat) {
						Surface.warningMessage("E_CONTRAT_1_YEAR_TOO_LATE");
						$j('#date_contrat').val('');
					}
				}
			}
		}
		
	},

	subscribeStep3 : {
		dejaTransforme : false,
		enCours : false,
		init : function() {
			$j("#submit").click( function() {
		    // declar cgv periode paiement
		    if($j("#declar").is(":checked") 
		        && $j("#cgv").is(":checked") 
		        && $j("#periode").is(":checked")) {
		      transformeDevis();
		    }
		    else {
		      errorPopInMessage("E_RECAP_LEGAL");
		      return false;
		    }
		  });
		},
		reset : function() {},
		preventReturnDevis:	function () {
			$j.each($j('a.modifyLink') , function () {
				this.style.display = 'none';
				this.href='#';
	    });
			$j.each($j('span.button a.thickbox'), function () {
				 this.style.color = 'black';
			});
			$j.each($j('#changeFractionLink'), function () {
				this.href = "#";
	      this.style.textDecoration = "line-through";
			});
			$j.each($j('#dateDebLink'), function () {
				this.href = "#";
	      this.style.textDecoration = "line-through";
			});
			$j.each($j('.step2 a'), function () {
				this.href = "#";
			});
		}
	},
	
	warningMessage: function( code ) {
		errorPopInMessage( code );
	},
	
	preparePageDevis : function( step ) {
		lancer(); /* préparation graphique */
		switch (step) {
			case 1 :
				Surface.devisStep1.init();
				break;
			case 2 :
				Surface.devisStep2.init();
				break;
			case 3 :
				Surface.devisStep3.init();
				break;
			default :
				break;
		}
		Surface.reloadContent();
	},

	preparePageSubscription : function( step ) {
		switch (step) {
			case 1 :
				Surface.subscribeStep1.init();
				break;
			case 2 :
				Surface.subscribeStep2.init();
				break;
			case 3 :
				Surface.subscribeStep3.init();
				break;
			default : break;
		}
	},
	
	toggleSelectError : function ( labelItem, messageItem, messageXItem, state ) {
		if ($j(labelItem).hasClass('erreur') ^ state ) {
			$j(labelItem).toggleClass('erreur', state);
			if ($j(messageItem).length > 0) $j(messageItem)[0].style.display = state ? '' : 'none' ;
			if ($j(messageXItem).length > 0) $j(messageXItem)[0].style.display = state ? '' : 'none' ;
		}
	},
	
	toggleRadioError : function ( spanItem , state ) {
		if ($j(spanItem).hasClass('erreur') ^ state ) {
			$j(spanItem).toggleClass('erreur', state);
		}
	},
	
	reloadContent : function() {
		if( typeof(optionsData) != "undefined" ) {
			amaguiz_form_options.init(optionsData);
			if ($j('#selectedOptions').size() > 0) {
				Surface.devisStep3.reloadOptions();
			}
		}
	},
	
	rebuildUrlWithParams : function( params ) {
		var url = unescape(window.location.search).substr(1).split("&");
		var newUrl = window.location.protocol + '//' +  window.location.host + window.location.pathname;
		var hasParam = false;
		for ( i=0; i < url.length; i++) {
		  var param = url[i].split("=");
		  if (param.length != 2) continue;
		  if (param[0].length == 0) continue;
		  // recherche d'un remplacement de paramètre existant
		  for (p = 0; p < params.length; p++) {
			  if (params[p].length != 2) continue;
			  if (params[p][0].length == 0) continue;
			  if ( param[0] == params[p][0] ) {
				  param[1] = params[p][1];
				  params[p][1] = '';
			  }
		  }
		  if (param[1].length == 0) continue;
		  if (!hasParam) newUrl += "?";
		  else newUrl += "&";
		  newUrl += param[0] + '=' + encodeURI(param[1]);
		  hasParam = true;
		}
		for (p = 0; p < params.length; p++) {
		    if (params[p].length != 2) continue;
			if (params[p][0].length == 0 || params[p][1].length == 0) continue;
			if (!hasParam) newUrl += "?";
			else newUrl += "&"; 
			newUrl += params[p][0] + '=' + encodeURI(params[p][1]);
			hasParam = true;
		}
		return newUrl;
	},

	todayMonthBase:function() {
		return Surface.today().setDate(1);
	},
	
	today: function() {
		var today = new Date();
		return today;
	},
	
	isValidEmail: function (mail) {
		//MGS - Mantis 1539 - Pb d'expression reguliere
		reg = new RegExp($j("#regex").val());
		return  reg.test( mail ) ;
	}

};

/*
 * GUR : 
 * Mise à jour des champs de tunnel devis / souscription
 * 
 */
 
var FieldsControler = {
  indexRadio : function (name, value) {
  	// les radios commencent à 1 conducteur1, conducteur2 ..
		var arr = $j('input[name="' + name + '"]');
		var index = 1;
		var final_index = -1;
		$j('input[name="' + name + '"]').each(function(current, item) {
			if (item.value == value) {
				final_index =  (index - 1);
  	  } else {
  		  ++index;
  	  }	  
		});
    return final_index; 
  },
  indexSelect : function (name, value) {
		if ($j('select[name="' + name + '"]').size() > 0) {
			var current = $j('select[name="' + name + '"]')[0];
			var index = 0;
			while (null != current.options[index]) {
				if (value != current.options[index].value) {
          index++;
          continue;
        }
        return index;
			}
		}
		return 0 ;
  }
}

//Retourne:
//0 si date_1=date_2
//1 si date_1>date_2
//-1 si date_1<date_2
function compareDates(date_1, date_2){
	diff = date_1.getTime()-date_2.getTime();
	return (diff==0?diff:diff/Math.abs(diff));
}

