/*
 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) {
		//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 ;
  }
}
