/*
 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 == '') {
				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 == 'annee') {
						labelGetter = labelGetter.replace('annee', 'moiss');
						messageGetter = messageGetter.replace('annee', 'moiss');
						messageXGetter = messageXGetter.replace('annee', 'moiss');
					} else 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);
				});
			});
			$j('#moiss').change( function() {
				Surface.devisStep2.checkAge();
			});
			$j('#annee').change( function() {
				Surface.devisStep2.checkAge();
			});
			$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;
			});
		},
		
		checkAge : function() {
			if ($j('#moiss').val() != '0' && $j('#moiss').val().length > 0 && $j('#annee').val() != '0' && $j('#annee').val().length > 0) {
				var today = Surface.todayMonthBase();
				var naissance = new Date(parseInt($j('#annee').val(), 10), parseInt($j('#moiss').val(), 10) -1, 1);
				naissance.setFullYear(naissance.getFullYear() + 18);
				if (today < naissance) {
					Surface.warningMessage('E_USER_YOUNG');
					document.getElementById("moiss").selectedIndex = 0;
					document.getElementById("annee").selectedIndex = 0;
					return false;
				}
			}
			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('#moiss').val() == '0' || $j('#moiss').val().length == 0 || $j('#annee').val() == '0' || $j('#annee').val().length == 0) {
				Surface.toggleSelectError('label[for="moiss"]:first', '#moiss_erreur:first', '#moiss_xerreur:first', true);
				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;
				}
			}
			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,
		urlControl : '',
		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();
			  }
			);
			/**
			 * MGS - BOITIER PREVENTION
			 */
			$j("#PREV1").click(function(){
			      $j("#PREV2").removeAttr("checked");
			      $j("#PREV3").removeAttr("checked");
			      $j('.devis table.tableauPrevention td.col2').css("background","#FAFAFA");
			      $j('.devis table.tableauPrevention td.col3').css("background","#FAFAFA");
			      if($j('#labelpack2').hasClass("packPrecoSelected")){
			    	  $j('#labelpack2').removeClass("packPrecoSelected");
			    	  $j('#labelpack2').addClass("packPreco");
			      }
			      if($j('#labelpack3').hasClass("packPrecoSelected")){
			    	  $j('#labelpack3').removeClass("packPrecoSelected");
			    	  $j('#labelpack3').addClass("packPreco");
			      }
			      if($j(this).is(':checked')){
			    	  $j('.devis table.tableauPrevention td.col1').css("background","#FFDBBF");
			    	  Surface.devisStep3.messagePrevention();
			          if($j('#labelpack1').hasClass("packPreco")){
			        	  $j('#labelpack1').removeClass("packPreco");
			        	  $j('#labelpack1').addClass("packPrecoSelected");
			          }
			      }else{
			        $j(this).removeAttr("checked");
			        $j('.devis table.tableauPrevention td.col1').css("background","#FAFAFA");
			        if($j('#labelpack1').hasClass("packPrecoSelected")){
			      	  $j('#labelpack1').removeClass("packPrecoSelected");
			      	  $j('#labelpack1').addClass("packPreco");
			        }
			      }
			      calculer();
			    });

			    $j("#PREV2").click(function(){
			        $j("#PREV1").removeAttr("checked");
			        $j("#PREV3").removeAttr("checked");
			        $j('.devis table.tableauPrevention td.col1').css("background","#FAFAFA");
			        $j('.devis table.tableauPrevention td.col3').css("background","#FAFAFA");
			        if($j('#labelpack1').hasClass("packPrecoSelected")){
			      	  $j('#labelpack1').removeClass("packPrecoSelected");
			      	  $j('#labelpack1').addClass("packPreco");
			        }
			        if($j('#labelpack3').hasClass("packPrecoSelected")){
			      	  $j('#labelpack3').removeClass("packPrecoSelected");
			      	  $j('#labelpack3').addClass("packPreco");
			        }
			        if($j(this).is(':checked')){
			          $j('.devis table.tableauPrevention td.col2').css("background","#FFDBBF");
			      	  Surface.devisStep3.messagePrevention();
			          if($j('#labelpack2').hasClass("packPreco")){
			        	$j('#labelpack2').removeClass("packPreco");
			        	$j('#labelpack2').addClass("packPrecoSelected");
			          }
			        }else{
			            $j(this).removeAttr("checked");
			            $j('.devis table.tableauPrevention td.col2').css("background","#FAFAFA");
			            if($j('#labelpack2').hasClass("packPrecoSelected")){
			            	  $j('#labelpack2').removeClass("packPrecoSelected");
			            	  $j('#labelpack2').addClass("packPreco");
			              }
			        }
			        calculer();
			      });

			    $j("#PREV3").click(function(){
			        $j("#PREV1").removeAttr("checked");
			        $j("#PREV2").removeAttr("checked");
			        $j('.devis table.tableauPrevention td.col1').css("background","#FAFAFA");
			        $j('.devis table.tableauPrevention td.col2').css("background","#FAFAFA");
			        if($j('#labelpack1').hasClass("packPrecoSelected")){
			      	  $j('#labelpack1').removeClass("packPrecoSelected");
			      	  $j('#labelpack1').addClass("packPreco");
			        }
			        if($j('#labelpack2').hasClass("packPrecoSelected")){
			      	  $j('#labelpack2').removeClass("packPrecoSelected");
			      	  $j('#labelpack2').addClass("packPreco");
			        }
			        if($j(this).is(':checked')){
			          $j('.devis table.tableauPrevention td.col3').css("background","#FFDBBF");
			      	  Surface.devisStep3.messagePrevention();
			      	if($j('#labelpack3').hasClass("packPreco")){
			        	$j('#labelpack3').removeClass("packPreco");
			        	$j('#labelpack3').addClass("packPrecoSelected");
			          }
			        }else{
			            $j(this).removeAttr("checked");
			            $j('.devis table.tableauPrevention td.col3').css("background","#FAFAFA");
			            if($j('#labelpack3').hasClass("packPrecoSelected")){
			          	  $j('#labelpack3').removeClass("packPrecoSelected");
			          	  $j('#labelpack3').addClass("packPreco");
			            }
			        }
			        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) {
							this.click();
							break; 
						}
					}
				});
			}
		},
		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 },
					function ( datas ) {
						$j('.spinner').hide();
						$j('#recalcul').show();
						if("COD_PROMO_VALIDE" == datas.error.toUpperCase()){
							/*Message basée sur les 2 premiers caractères du code*/
							var codePromo = new String(datas.value);
							codePromo = codePromo.substring(0,2);
							if(residence.toUpperCase() == "PNO" && (codePromo == "AC" || codePromo =="AS")){
								$j("#promo").val($j("#promo_deja_entree").val());
								Surface.warningMessage("COD_PROMO_INVALID_PNO");
								Surface.devisStep3.codePromoOk = false;
							}else{
								$j("#promo_deja_entree").val(new String(datas.value));
								var codeMessage = "COD_PROMO_"+ codePromo;
								Surface.devisStep3.codePromoOk = true;
								Surface.warningMessage(codeMessage);
							}
						} else{
							$j("#promo").val($j("#promo_deja_entree").val());
							Surface.devisStep3.codePromoOk = false;
							Surface.warningMessage(datas.error);
						}
					}
				);
			} else {
				$j("#promo_deja_entree").val("");
				Surface.devisStep3.reloadSimulation();
			}
			return false;
		},
		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("#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'));
			}
			window.location.href=Surface.rebuildUrlWithParams(params);
		},
		recordIt : function () {
			//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) {
				Surface.devisStep3.submited = true;
				$j("#devisFormule")[0].submit();
				return Surface.devisStep3.submited;
			} else {
				return false;
			}
		},
		
		messagePrevention:function(){
			//Surface.devisStep3.reloadSimulation();
			Surface.warningMessage("AVANTAGE_PREVENTION");
		},
		
		callBack : function() {
			if (0 < $j("#actionNext").size()) {
				$j("#actionNext")[0].value="callback";
			}
			Surface.devisStep3.recordIt( false );
			return false;
		},
		
		subscribe : function() {
			if (0 < $j("#actionNext").size()) {
				$j("#actionNext")[0].value="subscribe";
			}
			Surface.devisStep3.recordIt( false );
			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('');
					}
				}
			}
		}
		
	},
	
	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) {
		return  /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/.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 ;
  }
}
