EnvProjetController = function ()
{
	/**
	 * Mise à jour des gammes disponibles en fonction du type d'installation.
	 * 
	 * @param type_installation
	 * @return
	 */
	this.selectionTypeInstallation = function (type_installation)
	{
		jQuery('ul#choix-type-installation > li').each( function(i, li) { if (jQuery(li).hasClass('selection')) jQuery(li).removeClass('selection'); } );
		this.selectionGamme('');
		jQuery('input#etape_1_projet_type_installation').val(type_installation);
		jQuery('ul#choix-gamme li').hide();
		if ('' !== type_installation)
		{
			jQuery('ul#choix-gamme li').each( function (index, li_gamme)
			{
        if ('Relève de chaudière' === type_installation && 'AIRÉO' !== jQuery(li_gamme).children('a').html()
          || ('Pompe à chaleur seule' === type_installation && ('AIRÉO RLV' !== jQuery(li_gamme).children('a').html() && 'ALFÉA HYBRID DUO' !== jQuery(li_gamme).children('a').html())))
					jQuery(li_gamme).show();
			});
		}
		jQuery('ul#choix-type-installation > li').each( function(i, li) { if (type_installation === jQuery(li).children('a').attr('title')) jQuery(li).addClass('selection'); } );
	};
	
	/**
	 * Renseignement du input type hidden et mise à jour des images de sélection
	 * 
	 * @param gamme_id
	 * @return 
	 */
	this.selectionGamme = function (gamme_id)
	{
		jQuery('ul#choix-gamme > li').each( function(i, li) { if (jQuery(li).hasClass('selection')) jQuery(li).removeClass('selection'); } );
		jQuery('input#etape_1_projet_gamme_id').val(gamme_id);
		jQuery('li#gamme_' + gamme_id).addClass('selection');
	};
	
	/**
	 * Mise à jour des bloc complémentaire de l'étape 2 sur sélection des types d'émetteurs
	 * 
	 * @return
	 */
	this.selectionTypeEmetteur = function ()
	{
	  jQuery('div#div-donnee-compl-convecteur-electrique').hide();
		jQuery('div#div-donnee-compl-emetteur-reversible').hide();
		jQuery('div#div-donnee-compl-convecteur-electrique input').attr('disabled', 'disabled');
		jQuery('select.select_type_emetteur').each( function(i, select_type_emetteur)
		{
			if ('Radiateurs électriques' === jQuery(select_type_emetteur).val() || 'Climatisation' === jQuery(select_type_emetteur).val() || 'Émetteurs réversibles' === jQuery(select_type_emetteur).val())
			{
			  if ('Émetteurs réversibles' != jQuery(select_type_emetteur).val() || ('Émetteurs réversibles' === jQuery(select_type_emetteur).val() && 'etape_2_projet_etage_type_emetteur' === select_type_emetteur.id))
	      {
			    jQuery('div#div-donnee-compl-convecteur-electrique').show();
	      }
				jQuery('div#div-donnee-compl-convecteur-electrique input').removeAttr('disabled');
				if ('Radiateurs électriques' === jQuery(select_type_emetteur).val()) jQuery('em#em_chauffage_etage').html(traduction_convercteur_electrique);
				if ('Climatisation' === jQuery(select_type_emetteur).val()) jQuery('em#em_chauffage_etage').html(traduction_climatisation);
				if ('Émetteurs réversibles' === jQuery(select_type_emetteur).val()) jQuery('em#em_chauffage_etage').html(traduction_emetteur_reversible);
			}
			if ('Émetteurs réversibles' === jQuery(select_type_emetteur).val() && 'etape_2_projet_rdc_type_emetteur' === select_type_emetteur.id)
			{
			  jQuery('div#div-donnee-compl-emetteur-reversible').show();
			}
		});
	};
	
	/**
	 * Ajoute une nouvelle ligne de pièce pour l'étage
	 * @return
	 */
	this.nouvellePieceEtage = function ()
	{
	  compteur = jQuery('tr.projet_piece_etage').length;
	  jQuery('div#div-donnee-compl-convecteur-electrique table tbody').append(""
	      + "<tr id='projet_piece_etage_" + compteur + "' class='projet_piece_etage'>"
	      + "  <th>" + (compteur-1+2)
	      + "  	 <input type='hidden' id='projet_piece_etage_" + compteur + "_id' name='etape_2_projet[projet_piece_etage_" + compteur + "][id]'>"
	      + "  	 <input type='hidden' id='projet_piece_etage_" + compteur + "_projet_id' name='etape_2_projet[projet_piece_etage_" + compteur + "][projet_id]' value='" + jQuery('input#etape_2_projet_id').val() + "'>"
	      + "	 </th>"
	      + "  <td><input type='text' autocomplete='off' id='projet_piece_etage_" + compteur + "_libelle' name='etape_2_projet[projet_piece_etage_" + compteur + "][libelle]' class=''></td>"
	      + "  <td><input type='text' autocomplete='off' id='projet_piece_etage_" + compteur + "_surface' name='etape_2_projet[projet_piece_etage_" + compteur + "][surface]' class='input_surface piece-etage-surface' onkeyup='envProjetController.cumulSurfacePieceEtage();'></td>"
	      + "  <td><input type='text' id='etape_2_projet_projet_piece_etage_" + compteur + "_hauteur_sous_plafond' class='input_distance' autocomplete='off' name='etape_2_projet[projet_piece_etage_" + compteur + "][hauteur_sous_plafond]'/></td>"
	      + "  <td><a onclick=\"envProjetController.supprimerPieceEtage('projet_piece_etage_" + compteur + "'); return false;\" href='#'>- " + traduction_supprimer + "</a></td>"
	      + "</tr>");
	};
	
	/**
	 * Ajoute une nouvelle ligne de pièce pour le RdC
	 * @return
	 */
	this.nouvellePieceRdc = function ()
	{
		compteur = jQuery('tr.projet_piece_rdc').length;
		jQuery('div#div-donnee-compl-emetteur-reversible table tbody').append(""
    + "<tr id='projet_piece_rdc_" + compteur + "' class='projet_piece_rdc'>"
    + "  <th>" + (compteur-1+2)
    + "  	 <input type='hidden' id='projet_piece_rdc_" + compteur + "_id' name='etape_2_projet[projet_piece_rdc_" + compteur + "][id]'>"
    + "  	 <input type='hidden' id='projet_piece_rdc_" + compteur + "_projet_id' name='etape_2_projet[projet_piece_rdc_" + compteur + "][projet_id]' value='" + jQuery('input#etape_2_projet_id').val() + "'>"
    + "	 </th>"
    + "  <td><input type='text' autocomplete='off' id='projet_piece_rdc_" + compteur + "_libelle' name='etape_2_projet[projet_piece_rdc_" + compteur + "][libelle]' class=''></td>"
    + "  <td><input type='text' autocomplete='off' id='projet_piece_rdc_" + compteur + "_surface' name='etape_2_projet[projet_piece_rdc_" + compteur + "][surface]' class='input_surface piece-rdc-surface' onkeyup='envProjetController.cumulSurfacePieceRdc();'></td>"
    + "  <td><input type='text' id='etape_2_projet_projet_piece_rdc_" + compteur + "_hauteur_sous_plafond' class='input_distance' autocomplete='off' name='etape_2_projet[projet_piece_rdc_" + compteur + "][hauteur_sous_plafond]'/></td>"
    + "  <td><a onclick=\"envProjetController.supprimerPiece('projet_piece_rdc_" + compteur + "'); return false;\" href='#'>- " + traduction_supprimer + "</a></td>"
    + "</tr>");
	};
	
	/**
	 * Suppression d'une pièce de l'étage
	 * 
	 * @param tr_id
	 * @return
	 */
	this.supprimerPieceEtage = function (tr_id)
	{
		jQuery('tr#' + tr_id).remove();
		this.cumulSurfacePieceEtage();
	};

	/**
	 * Ajoute une nouvelle ligne de salle de bain
	 * @return
	 */
	this.nouvelleSalleDeBain = function ()
	{
		compteur = jQuery('tr.projet_salle_de_bain').length;
		jQuery('div#div-donnee-compl-climatisation table tbody').append(""
        + "<tr id='projet_salle_de_bain_" + compteur + "' class='projet_salle_de_bain'>"
        + "  <th>" + (compteur-1+2)
        + "  	 <input type='hidden' id='projet_salle_de_bain_" + compteur + "_id' name='etape_2_projet[projet_salle_de_bain_" + compteur + "][id]'>"
        + "  	 <input type='hidden' id='projet_salle_de_bain_" + compteur + "_projet_id' name='etape_2_projet[projet_salle_de_bain_" + compteur + "][projet_id]' value='" + jQuery('input#etape_2_projet_id').val() + "'>"
        + "</th>"
        + "  <td><input type='text' autocomplete='off' id='projet_salle_de_bain_" + compteur + "_surface' name='etape_2_projet[projet_salle_de_bain_" + compteur + "][surface]' class='input_surface'></td>"
        + "  <td><input type='text' autocomplete='off' id='projet_salle_de_bain_" + compteur + "_hauteur_sous_plafond' name='etape_2_projet[projet_salle_de_bain_" + compteur + "][hauteur_sous_plafond]' class='input_distance'></td>"
        + "  <td><input type='text' autocomplete='off' id='projet_salle_de_bain_" + compteur + "_temperature_ambiante' name='etape_2_projet[projet_salle_de_bain_" + compteur + "][temperature_ambiante]' class='input_temperature'></td>"
        + "  <td><a onclick=\"envProjetController.supprimerSalleDeBain('projet_salle_de_bain_" + compteur + "'); return false;\" href='#'>- " + traduction_supprimer + "</a></td>"
        + "</tr>");
	};
	
	/**
	 * Supprime une salle de bain
	 * 
	 * @param tr_id
	 * @return
	 */
	this.supprimerSalleDeBain = function (tr_id)
	{
		jQuery('tr#' + tr_id).remove();
	};
	
	/**
	 * Sélectionne un mode de calcul pour les déperditions 
	 * 
	 * @param mode_calcul_deperditions
	 * @return
	 */
	this.selectionModeCalculDeperditions = function (mode_calcul_deperditions, reset)
	{
		jQuery('div.bloc-etape3-deperditions').hide();
		if (reset)
		{
			jQuery("div.bloc-etape3-deperditions input[type='text']").val('');
			jQuery('div.bloc-etape3-deperditions select').val('');
		}
		jQuery('ul#choix-mode-calcul-deperditions li a').removeClass('selection');
		jQuery('input#etape_3_projet_deperdition_mode_calcul').val(mode_calcul_deperditions);
		switch(mode_calcul_deperditions)
		{
			case 'Déperdition connues':
				jQuery('div#deperdition-connues').show();
				break;
			case 'Simplifié par le G':
				jQuery('div#g-simple').show();
				break;
			case 'Avancé par les coefficients des parois':
				jQuery('div#g-avance').show();
				break;
		}
		jQuery('ul#choix-mode-calcul-deperditions li a').each( function (i, a_mode_calcul_deperdition)
		{
			if (traductions_mode_calcul[mode_calcul_deperditions] === jQuery(a_mode_calcul_deperdition).html())
				jQuery(a_mode_calcul_deperdition).addClass('selection');
		});
	};
	
	/**
	 * Etape4 : sélection d'une pompe à chaleur
	 * @param pompe_a_chaleur_id
	 * @param accessoire_personnalisation_appoint_id
	 * @return
	 */
	this.selectionPompeAChaleur = function (pompe_a_chaleur_id, accessoire_personnalisation_appoint_id)
	{
		jQuery('form#formulaire-etape-4 table tbody tr td a').removeClass('selection');
		jQuery('input#etape_4_projet_pompe_a_chaleur_id').val(pompe_a_chaleur_id);
		jQuery('input#etape_4_projet_accessoire_appoint_env_accessoire_personnalisation_id').val(accessoire_personnalisation_appoint_id);
		jQuery('form#formulaire-etape-4 table tbody tr#pompe_a_chaleur_' + pompe_a_chaleur_id + ' td a').addClass('selection');
	};
	
	this.cumulSurfacePieceEtage = function ()
	{
		surface_piece_etage = 0;
		jQuery('input.piece-etage-surface').each( function(index, element)
		{
			surface_piece_etage += jQuery(element).val() -1 + 1;  
		});
		if (0 === surface_piece_etage)
		{
			jQuery('div#cumul_surface_etage').html('');
			jQuery('div#cumul_surface_etage').hide();
		}
		else
		{
		  surface_etage = '' === jQuery('input#etape_2_projet_etage_surface').val() ? 0 : jQuery('input#etape_2_projet_etage_surface').val();
			if (surface_etage < surface_piece_etage)
			{
				jQuery('div#cumul_surface_etage').addClass('erreur-surface-etage');
			}
			else
			{
				jQuery('div#cumul_surface_etage').removeClass('erreur-surface-etage');
			}

			jQuery('div#cumul_surface_etage').html('<strong>' + surface_piece_etage + ' m²</strong> saisie sur ' + surface_etage + ' m² disponible');
			jQuery('div#cumul_surface_etage').show();
		}
	};
	
	this.cumulSurfacePieceRdc = function ()
  {
	  surface_piece_rdc = 0;
    jQuery('input.piece-rdc-surface').each( function(index, element)
    {
      surface_piece_rdc += jQuery(element).val() -1 + 1;  
    });
    if (0 === surface_piece_rdc)
    {
      jQuery('div#cumul_surface_etage').html('');
      jQuery('div#cumul_surface_etage').hide();
    }
    else
    {
      surface_rdc = '' === jQuery('input#etape_2_projet_rdc_surface').val() ? 0 : jQuery('input#etape_2_projet_rdc_surface').val();
      if (surface_rdc < surface_piece_rdc)
      {
        jQuery('div#cumul_surface_rdc').addClass('erreur-surface-etage');
      }
      else
      {
        jQuery('div#cumul_surface_rdc').removeClass('erreur-surface-etage');
      }

      jQuery('div#cumul_surface_rdc').html('<strong>' + surface_piece_rdc + ' m²</strong> saisie sur ' + surface_rdc + ' m² disponible');
      jQuery('div#cumul_surface_rdc').show();
    }
  };
};

DepartementController = function ()
{
	/**
	 * Filtre les station météo selon le département sélectionné
	 * 
	 * @param reset Ne remet à pas 0 la valeur du select si false
	 * @return
	 */
	this.filtre_station_meteos = function (reset)
	{
		var select_valeur = jQuery('select#etape_2_projet_station_meteo_id').val();
		jQuery('select#etape_2_projet_station_meteo_id option').remove();
		jQuery('select#etape_2_projet_station_meteo_id').append('<option selected="selected" value="">&nbsp;</option>');
		if (0 < jQuery('#etape_2_projet_departement_id').val())
		{
			jQuery(correspondances_departement_station_meteo[jQuery('#etape_2_projet_departement_id').val()]).each( function (i, station_meteo_id) 
			{
				jQuery('select#etape_2_projet_station_meteo_id').append('<option value="' + station_meteo_id + '">' + correspondences_station_meteo_id[station_meteo_id] + '</option>');
			});
			if (reset) jQuery('#etape_2_projet_station_meteo_id').val('');
			else jQuery('#etape_2_projet_station_meteo_id').val(select_valeur);
		}
		else
		{
			jQuery('#etape_2_projet_station_meteo_id').val('');
		}
	};
};

AccessoireController = function ()
{
	/**
	 * Sélectionne un accessoire pour être ajouté au projet
	 * 
	 * @param accessoire_id
	 * @return boolean
	 */
	this.selectionne = function (accessoire_id)
	{
		jQuery('div.notice').remove();
		jQuery('div#selection-accessoire table tbody tr.aucun-accessoire').remove();
		if (0 !== jQuery('tr#projet_accessoire_' + accessoire_id).length) return false; // déjà présent dans la liste
		// test s'il n'y a pas d'incompatibilité avec d'autres accessoires sélectionnés
		var accessoire_incompatible = false;

		jQuery('tr.accessoire-selectionne td input.env_accessoire_id').each( function (i, input)
		{
			if (false === accessoire_incompatible && jQuery(input).val() != accessoire_id
				&& correspondances_accessoires_incompatibilites[jQuery(input).val()]
       	&& -1 != jQuery.inArray(accessoire_id, correspondances_accessoires_incompatibilites[jQuery(input).val()]) )
			{
				accessoire_incompatible = jQuery(input).val();
			}
		});
		if (false !== accessoire_incompatible)
		{
			jQuery('div#selection-accessoire table').before('<div class="notice">' + suppression_impossible_car_incompatible 
				+ jQuery('tr#accessoire-disponible-' + accessoire_incompatible + ' td.colonne-designation').html() + ' - '
				+ jQuery('tr#accessoire-disponible-' + accessoire_incompatible + ' td.colonne-reference').html()
				+ ' (' + jQuery('tr#accessoire-disponible-' + accessoire_incompatible + ' td.colonne-code').html() + ')'
				+ '</div>');
			return false;
		}
		
		// selectionne l'article
		jQuery('div#selection-accessoire table tbody').append(""
				+ "<tr class='accessoire-selectionne' id='projet_accessoire_" + accessoire_id + "'>"
				+ "  <td>"
				+ "    <input type='hidden' id='etape_5_projet_projet_accessoire_" + accessoire_id + "_id' value='' name='etape_5_projet[projet_accessoire_" + accessoire_id + "][id]'/>"
				+ "    <input type='hidden' id='etape_5_projet_projet_accessoire_" + accessoire_id + "_projet_id' value='" + jQuery('input#etape_5_projet_id').val() + "' name='etape_5_projet[projet_accessoire_" + accessoire_id + "][projet_id]'/>"
				+ "    <input type='hidden' id='etape_5_projet_projet_accessoire_" + accessoire_id + "_env_accessoire_personnalisation_id' value='" + accessoire_id + "' name='etape_5_projet[projet_accessoire_" + accessoire_id + "][env_accessoire_personnalisation_id]' class='env_accessoire_id'/>"
				+ "    <a onclick='accessoireController.deselectionne(" + accessoire_id + ")' href='#' class='bouton_suppression_accessoire'><span>supprimer</span></a>"
				+ "  </td>"
				+ "  <td>" + jQuery('tr#accessoire-disponible-' + accessoire_id + ' td.colonne-designation').text() + "</td>"
				+ "  <td>" + jQuery('tr#accessoire-disponible-' + accessoire_id + ' td.colonne-reference').text() + "</td>"
				+ "  <td>" + jQuery('tr#accessoire-disponible-' + accessoire_id + ' td.colonne-code').text() + "</td>"
				+ "</tr>");
		// Cache la ligne accessoire disponible
		jQuery('tr#accessoire-disponible-' + accessoire_id).addClass('accessoire-deja-selectionne')
		// sélectionne les dépendances
		if(correspondances_accessoires_dependances[accessoire_id])
		{
			jQuery(correspondances_accessoires_dependances[accessoire_id]).each( function (i, accessoire_dependant_id)
			{
				if (!document.getElementById('projet_accessoire_' + accessoire_dependant_id))
				{
					accessoireController.selectionne(accessoire_dependant_id);
				}
			});
		}
		return true;
	};
	
	/**
	 * Déselectionne un accessoire
	 * 
	 * @param accessoire_id
	 * @return boolean
	 */
	this.deselectionne = function (accessoire_id)
	{
		jQuery('div.notice').remove();
		// Test si l'accessoire n'est obligatoire
		if (-1 != jQuery.inArray(accessoire_id, correspondances_accessoires_obligatoires))
		{
			jQuery('div#selection-accessoire table').before('<div class="notice">' + suppression_impossible_car_obligatoire + '</div>');
			return false;
		}
		
		// Test si accessoire n'est pas une dépendance d'autres accessoires
		var accessoire_dependant = false;

		jQuery('tr.accessoire-selectionne td input.env_accessoire_id').each( function (i, input)
		{
			if (false === accessoire_dependant && jQuery(input).val() != accessoire_id
				&& correspondances_accessoires_dependances[jQuery(input).val()]
       	&& -1 != jQuery.inArray(accessoire_id, correspondances_accessoires_dependances[jQuery(input).val()]) )
			{
				accessoire_dependant = jQuery(input).val();
			}
		});
		if (false !== accessoire_dependant)
		{
			jQuery('div#selection-accessoire table').before('<div class="notice">' + suppression_impossible_car_dependance 
				+ jQuery('tr#accessoire-disponible-' + accessoire_dependant + ' td.colonne-designation').html() + ' - '
				+ jQuery('tr#accessoire-disponible-' + accessoire_dependant + ' td.colonne-reference').html()
				+ ' (' + jQuery('tr#accessoire-disponible-' + accessoire_dependant + ' td.colonne-code').html() + ')'
				+ '</div>');
			return false;
		}
		// deselectionne l'article
		jQuery('tr#accessoire-disponible-' + accessoire_id).removeClass('accessoire-deja-selectionne');
		jQuery('tr#projet_accessoire_' + accessoire_id).remove();
		// Si plus d'accessoire
		if (0 === jQuery('div#selection-accessoire table tbody tr.accessoire-selectionne').length)
		{
			jQuery('div#selection-accessoire table tbody').append('<tr class="aucun-accessoire"><td colspan="3">' + aucun_accessoire + '.</td></tr>')
		}
		return true;
	};
};

EnergieController  = function ()
{
	/**
	 * Sélection d'une énergie pour la chaudière
	 * 
	 * @param chaudiere_energie
	 */
	this.setChaudiereEnergie = function (chaudiere_energie)
	{
		if(typeof(chaudiere_energie) === 'undefined')
			chaudiere_energie = jQuery('select#etape_3_projet_etape_3_projet_complement_releve_chaudiere_energie').val();
		jQuery('select#etape_3_projet_etape_3_projet_complement_releve_chaudiere_energie').val(chaudiere_energie);
		// Ré-initialise la liste des type de chaudière
		jQuery('select#etape_3_projet_etape_3_projet_complement_releve_chaudiere_type option').attr('disabled', 'disabled');
		this.setConsommationUnite(chaudiere_energie);
		if ('' != chaudiere_energie)
		{
			jQuery.each(correspondances_energie_type_annee[chaudiere_energie], function(chaudiere_type, chaudiere_annee)
			{
        jQuery('select#etape_3_projet_etape_3_projet_complement_releve_chaudiere_type option[value='+chaudiere_type+']').removeAttr('disabled');
			});
		}
		this.setChaudiereType('');
		this.compatibiliteIeDisableSelect();
	};
	
	/**
	 * Initialise l'unité du champs consommation annuelle
	 * 
	 * @param chaudiere_energie
	 */
	this.setConsommationUnite = function (chaudiere_energie)
	{
		jQuery('input#etape_3_projet_etape_3_projet_complement_releve_consommation_annuelle').removeClass();
		jQuery('input#etape_3_projet_etape_3_projet_complement_releve_consommation_annuelle').addClass(relations_energie_unite[chaudiere_energie]);
	};
	
	/**
	 * Sélection d'un type de chaudière
	 * 
	 * @param chaudiere_type
	 */
	this.setChaudiereType = function (chaudiere_type)
	{
		if(typeof(chaudiere_type) === 'undefined')
			chaudiere_type = jQuery('select#etape_3_projet_etape_3_projet_complement_releve_chaudiere_type').val();
		jQuery('select#etape_3_projet_etape_3_projet_complement_releve_chaudiere_type').val(chaudiere_type);
		jQuery('select#etape_3_projet_etape_3_projet_complement_releve_chaudiere_annee option').remove();
		jQuery('select#etape_3_projet_etape_3_projet_complement_releve_chaudiere_annee').append('<option value="">&nbsp;</option>');
		if ('' != chaudiere_type)
		{
			jQuery.each(correspondances_energie_type_annee[jQuery('select#etape_3_projet_etape_3_projet_complement_releve_chaudiere_energie').val()][chaudiere_type], function(i, chaudiere_annee)
			{
				jQuery('select#etape_3_projet_etape_3_projet_complement_releve_chaudiere_annee').append('<option value="' + chaudiere_annee + '">' + chaudiere_annee + '</option>');
			});
		}
		this.setChaudiereAnnee('');
	};
	
	/**
	 * Sélection d'une année de chaudière
	 * 
	 * @param chaudiere_annee
	 */
	this.setChaudiereAnnee = function (chaudiere_annee)
	{
		if(typeof(chaudiere_annee) === 'undefined')
			chaudiere_annee = jQuery('select#chaudiere_type').val();
		jQuery('select#etape_3_projet_etape_3_projet_complement_releve_chaudiere_annee').val(chaudiere_annee);
	};
	
	/**
	 * Compatibilité IE pour les disabled sur les options d'un select.
	 */
  this.compatibiliteIeDisableSelect = function ()
  {
    jQuery('option').css({'color': '#000000'});
    jQuery('option[disabled]').css({'color': '#cccccc'});
    jQuery('select').change(function()
    {
      if(this.selectedIndex && this.options[this.selectedIndex].disabled)
      {
        if(this.options.length == 0)
        {
          this.selectedIndex = -1;
        }
        else
        {
          this.selectedIndex--;
        }
        jQuery(this).trigger('change');
      }
    });
    jQuery('select').each(function(it)
    {
      if(this.options[this.selectedIndex].disabled) jQuery(this).change();
    });
  };
	
};



ClientController  = function ()
{
	/**
	 * Ouverture de la modale de sélection client
	 * 
	 */
	this.ouverture_recherche = function (balise_a)
	{
		jQuery('body').append('<div id="masque-opaque"></div>');
		jQuery('body').append('<div id="calque-modal"><div id="fenetre-modale"></div></div>');
		jQuery.post(jQuery(balise_a).attr('href'), {}, function(data) { jQuery('div#fenetre-modale').html(data); } );
	};
	
	/**
	 * Fermeture de la modale de sélection client
	 * 
	 */
	this.fermeture_recherche = function ()
	{
		jQuery('div#masque-opaque').remove();
		jQuery('div#calque-modal').remove();
	};
	
	/**
	 * Sélection d'un client
	 * 
	 */
	this.selectionner_client = function (info_client)
	{
		jQuery.each(info_client, function (i, val) { jQuery('#etape_1_projet_client_' + i).val(val); });
		jQuery('#masque-opaque').remove();
		jQuery('#calque-modal').remove();
	};
};

GAvanceController = function ()
{
	
	this.selection_champs = function (select_courrant, deperdition_classe)
	{
		var chaine_formulaire = 'etape_3_bis_projet_etape_3_bis_projet_complement_g_avance_';
		var champ_modifie =jQuery(select_courrant).attr('id').replace(chaine_formulaire, '');
		switch (deperdition_classe)
		{
			case 'vitrages':
				var valeurs_champs_suivant = tableau_coefficients_vitrages;
				var tableau_coefficients_index = tableau_coefficients_vitrages_index;
				break;
			case 'portes':
				var valeurs_champs_suivant = tableau_coefficients_portes;
				var tableau_coefficients_index = tableau_coefficients_portes_index;
				break;
			case 'murs':
				var valeurs_champs_suivant = tableau_coefficients_murs;
				var tableau_coefficients_index = tableau_coefficients_murs_index;
				break;
			case 'plafonds':
				var valeurs_champs_suivant = tableau_coefficients_plafonds;
				var tableau_coefficients_index = tableau_coefficients_plafonds_index;
				break;
			case 'plancher':
				var valeurs_champs_suivant = tableau_coefficients_plancher;
				var tableau_coefficients_index = tableau_coefficients_plancher_index;
				break;
			case 'ventilation':
				var valeurs_champs_suivant = tableau_coefficients_ventilation;
				var tableau_coefficients_index = tableau_coefficients_ventilation_index;
				break;
		}
		var champs_modifie_traite = false;
		var champs_suivant_traite = false;		
		jQuery.each(tableau_coefficients_index, function (i, champs_vitrage)
		{
			if (true === champs_modifie_traite)
			{
				jQuery('select#' + chaine_formulaire + champs_vitrage + ' option').remove();
				jQuery('select#' + chaine_formulaire + champs_vitrage).append('<option value="">&nbsp;</option>');
				if (false === champs_suivant_traite)
				{
					if (false === isNaN(valeurs_champs_suivant))
					{
						jQuery('select#' + chaine_formulaire + champs_vitrage).prev().hide();
						jQuery('select#' + chaine_formulaire + champs_vitrage).hide();
					}
					else
					{
						jQuery('select#' + chaine_formulaire + champs_vitrage + ' option').remove();
						jQuery('select#' + chaine_formulaire + champs_vitrage).append('<option value="">&nbsp;</option>');
						jQuery.each(valeurs_champs_suivant, function(i, valeur_champs)
						{
							jQuery('select#' + chaine_formulaire + champs_vitrage).append('<option value="' + i + '">' + i + '</option>');
						});
						jQuery('select#' + chaine_formulaire + champs_vitrage).prev().show();
						jQuery('select#' + chaine_formulaire + champs_vitrage).show();
					}
					champs_suivant_traite = true;
				}
				else
				{
					if ('vitrage_lame_d_air' === champs_vitrage
							|| 'porte_type' === champs_vitrage
							|| 'plafond_epaisseur' === champs_vitrage
							|| 'plancher_type' === champs_vitrage
							|| 'plancher_epaisseur' === champs_vitrage)
					{
						jQuery('select#' + chaine_formulaire + champs_vitrage).prev().hide();
						jQuery('select#' + chaine_formulaire + champs_vitrage).hide();
					}
				}
			}
			else
			{
				if ('' === jQuery('select#' + chaine_formulaire + champs_vitrage).val())
				{
					alert(message_erreur_ordre);
					return;
				}
				valeurs_champs_suivant = valeurs_champs_suivant[jQuery('select#' + chaine_formulaire + champs_vitrage).val()];
			}
			if (champ_modifie === champs_vitrage)
			{
				champs_modifie_traite = true;
			}
		});
	};
};

DevisController = function ()
{
	this.recalculer = function ()
	{
		var total_ht = new Number(0);
		var coefficient = new Number(jQuery('input#etape_7_projet_coefficient_devis').val());
		var tva = new Number(1+ jQuery('select#etape_7_projet_etape_7_projet_complement_rapport_tva_choix').val()*1);
		// pompe + accessoire
		jQuery('td.prix_ht_total').each( function (i, td_prix_ht_total)
		{
			montant_ligne = new Number(jQuery(td_prix_ht_total).html().replace(' ', '').replace(',', '.').replace('&nbsp;', '').replace('€', '')).toFixed(2);
			total_ht = total_ht*1 + montant_ligne*1;
			montant_ligne_coef = montant_ligne * coefficient;
			jQuery(td_prix_ht_total).next('td').html(number_format(montant_ligne_coef, 2, ',', ' ') + ' €');
		});
		// lignes ht
		jQuery('tr.ligne_ht td.td_euro input.input_euro').each(function (i, input_ligne_devis)
		{
			if (isNaN(jQuery(input_ligne_devis).val()))
			{
				jQuery(input_ligne_devis).val('');
			}
			else
			{
				montant_ligne = new Number(jQuery(input_ligne_devis).val()).toFixed(2);
				total_ht = total_ht*1 + montant_ligne*1;
				montant_ligne_coef = montant_ligne * coefficient;
				jQuery(input_ligne_devis).parent().next('td.prix_ht_total_coef').html(number_format(montant_ligne_coef, 2, ',', ' ') + ' €')
			}
		});
		
		jQuery('td#total_ht').html(number_format(total_ht, 2, ',', ' ') + ' €');
		jQuery('td#total_ht').next('td').html(number_format(total_ht * coefficient, 2, ',', ' ') + ' €');
		
    // lignes ht2
    jQuery('tr.ligne_ht2 td.td_euro input.input_euro').each(function (i, input_ligne_devis)
    {
      if (isNaN(jQuery(input_ligne_devis).val()))
      {
        jQuery(input_ligne_devis).val('');
      }
      else
      {
        montant_ligne = new Number(jQuery(input_ligne_devis).val()).toFixed(2);
        total_ht = total_ht*1 + montant_ligne*1;
        montant_ligne_coef = montant_ligne * coefficient;
        jQuery(input_ligne_devis).parent().next('td.prix_ht_total_coef').html(number_format(montant_ligne_coef, 2, ',', ' ') + ' €')
      }
    });
		
		var total_ttc = new Number(total_ht * tva).toFixed(2);
		jQuery('td#total_ttc').html(number_format(total_ttc, 2, ',', ' ') + ' €');
		jQuery('td#total_ttc').next('td').html(number_format(total_ttc * coefficient, 2, ',', ' ') + ' €');
		
		var part_ttc_ouvrant_droit_impots = new Number(part_ht_ouvrant_droit_impots.toFixed(2) * tva).toFixed(2);
		if (jQuery('td#part_ttc_droit_credit'))
		{
  		jQuery('td#part_ttc_droit_credit').html(number_format(part_ttc_ouvrant_droit_impots, 2, ',', ' ') + ' €');
  		jQuery('td#part_ttc_droit_credit').next('td').html(number_format(part_ttc_ouvrant_droit_impots * coefficient, 2, ',', ' ') + ' €');
		}
		
		var credit_impots_ttc = new Number(credit_impots_ht.toFixed(2) * tva).toFixed(2);
		if(jQuery('td#estimation_credit_impots'))
		{
  		jQuery('td#estimation_credit_impots').html(number_format(credit_impots_ttc, 2, ',', ' ') + ' €');
  		jQuery('td#estimation_credit_impots').next('td').html(number_format(credit_impots_ttc * coefficient, 2, ',', ' ') + ' €');
		}
		
    // lignes ttc
    jQuery('tr.ligne_ttc td.td_euro input.input_euro').each(function (i, input_ligne_devis)
    {
      if (isNaN(jQuery(input_ligne_devis).val()))
      {
        jQuery(input_ligne_devis).val('');
      }
      else
      {
        montant_ligne = new Number(jQuery(input_ligne_devis).val()).toFixed(2);
        total_ttc = total_ttc*1 + montant_ligne*1;
        montant_ligne_coef = montant_ligne * coefficient;
        jQuery(input_ligne_devis).parent().next('td.prix_ht_total_coef').html(number_format(montant_ligne_coef, 2, ',', ' ') + ' €')
      }
    });
		
		var total_ttc_apres_credit = new Number(total_ttc - credit_impots_ttc).toFixed(2);
		jQuery('td#total_ttc_apres_credit').html(number_format(total_ttc_apres_credit, 2, ',', ' ') + ' €');
		jQuery('td#total_ttc_apres_credit').next('td').html(number_format(total_ttc_apres_credit * coefficient, 2, ',', ' ') + ' €');
	};
	
	this.supprimerDevisLigne = function (id_ligne)
	{
		jQuery('tr#' + id_ligne).remove();
		this.recalculer();
	};
	
	this.nouvelleDevisLigne = function (lien_ajout, section)
	{
		compteur = jQuery('tr.projet_devis_ligne').length;
		jQuery(lien_ajout).closest('tr').before(""
		+ "<tr class='projet_devis_ligne ligne_"+ section +"' id='projet_devis_ligne_" + compteur + "'>"
		+ "  <td colspan='3'>"
		+ "    <input type='hidden' id='etape_7_projet_devis_ligne_" + compteur + "_section' value='"+ section +"' name='etape_7_projet[devis_ligne_" + compteur + "][section]'/>"
		+ "    <input type='hidden' id='etape_7_projet_devis_ligne_" + compteur + "_id' value='' name='etape_7_projet[devis_ligne_" + compteur + "][id]'/>"
		+ "    <input type='hidden' id='etape_7_projet_devis_ligne_" + compteur + "_projet_id' value='" + jQuery('input#etape_7_projet_id').val() + "' name='etape_7_projet[devis_ligne_" + compteur + "][projet_id]'/>"
		+ "    <input type='text' id='etape_7_projet_devis_ligne_" + compteur + "_libelle' autocomplete='off' value='' name='etape_7_projet[devis_ligne_" + compteur + "][libelle]'/>"
		+ "  </td>"
		+ "  <td class='td_euro'>"
		+ "    <input type='text' id='etape_7_projet_devis_ligne_" + compteur + "_montant' class='input_euro' onkeyup='devisController.recalculer();' autocomplete='off' value='' name='etape_7_projet[devis_ligne_" + compteur + "][montant]'/>"
		+ "    <td class='td_euro prix_ht_total_coef'>0 €</td>"
		+ "  </td>"
		+ "  <td>"
		+ "    <a onclick=\"devisController.supprimerDevisLigne('projet_devis_ligne_" + compteur + "'); return false;\" href='#'>- Supprimer</a>"
		+ "  </td>"
    + "</tr>");
	};
};

function number_format (number, decimals, dec_point, thousands_sep) {
  var n = number, prec = decimals;

  var toFixedFix = function (n,prec) {
      var k = Math.pow(10,prec);
      return (Math.round(n*k)/k).toString();
  };

  n = !isFinite(+n) ? 0 : +n;
  prec = !isFinite(+prec) ? 0 : Math.abs(prec);
  var sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;
  var dec = (typeof dec_point === 'undefined') ? '.' : dec_point;

  var s = (prec > 0) ? toFixedFix(n, prec) : toFixedFix(Math.round(n), prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;

  var abs = toFixedFix(Math.abs(n), prec);
  var _, i;

  if (abs >= 1000) {
      _ = abs.split(/\D/);
      i = _[0].length % 3 || 3;

      _[0] = s.slice(0,i + (n < 0)) +
            _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
      s = _.join(dec);
  } else {
      s = s.replace('.', dec);
  }

  var decPos = s.indexOf(dec);
  if (prec >= 1 && decPos !== -1 && (s.length-decPos-1) < prec) {
      s += new Array(prec-(s.length-decPos-1)).join(0)+'0';
  }
  else if (prec >= 1 && decPos === -1) {
      s += dec+new Array(prec).join(0)+'0';
  }
  return s;
}

GSimpleController = function ()
{
	this.calcul = function ()
	{
	  if (0 != jQuery('em#g_calcul').length) jQuery('em#g_calcul').remove();
		if ('' !== jQuery('select#etape_3_projet_etape_3_projet_complement_g_simple_maison_annee_construction').val()
	    && '' !== jQuery('select#etape_3_projet_etape_3_projet_complement_g_simple_isolation_toiture').val()
	    && '' !== jQuery('select#etape_3_projet_etape_3_projet_complement_g_simple_isolation_mur').val()
	    && '' !== jQuery('select#etape_3_projet_etape_3_projet_complement_g_simple_isolation_fenetre').val())
		{
		  g_base = correspondence_g_maison_annees_construction[jQuery('select#etape_3_projet_etape_3_projet_complement_g_simple_maison_annee_construction').val()];
		  coefficient = correspondence_coefficient_maison_annees_construction[jQuery('select#etape_3_projet_etape_3_projet_complement_g_simple_maison_annee_construction').val()];
		  g = g_base
  		  - coefficient * correspondence_coefficient_isolations_murs[jQuery('select#etape_3_projet_etape_3_projet_complement_g_simple_isolation_mur').val()]
  		  - coefficient * correspondence_coefficient_isolations_toiture[jQuery('select#etape_3_projet_etape_3_projet_complement_g_simple_isolation_toiture').val()]
  		  - coefficient * correspondence_coefficient_isolations_fenetres[jQuery('select#etape_3_projet_etape_3_projet_complement_g_simple_isolation_fenetre').val()];
		  jQuery('div#g-simple table').after('<em id="g_calcul">' + tradcution_valeur_du_g + ' : ' + Math.round(g*100) / 100 + '</em>');
		}
	};
};

EmetteurSelection = function ()
{
  /**
   * Utile dans le cadre d'un projet en Alfea SE
   */
	this.selectionRdc = function ()
	{
	  var emetteur_rdc = jQuery("select#etape_2_projet_rdc_type_emetteur").val();
	  jQuery('select#etape_2_projet_etage_type_emetteur option').attr('disabled', 'disabled');
    if ('' != emetteur_rdc)
    {
      jQuery("select#etape_2_projet_etage_type_emetteur option[value='']").removeAttr('disabled');
      jQuery('select#etape_2_projet_etage_type_emetteur option[value='+emetteur_rdc+']').removeAttr('disabled');
    }
    jQuery('select#etape_2_projet_etage_type_emetteur').val('');
	};
	
}


var envProjetController = new EnvProjetController ();
var departementController = new DepartementController ();
var accessoireController = new AccessoireController ();
var energieController = new EnergieController ();
var clientController = new ClientController ();
var gAvanceController = new GAvanceController ();
var devisController = new DevisController ();
var gSimpleController = new GSimpleController ();
var emetteurSelection = new EmetteurSelection ();