function getElement( id )
{
    var element = null;
    if( document.getElementById )   // this is the way the standards work
    {
        element = document.getElementById( id );
    }
    else if( document.all )         // this is the way old msie versions work
    {
        element = document.all[ id ];
    }
    else if( document.layers )      // this is the way nn4 works
    {
        element = document.layers[ id ];
    }
    return element;
}



function getField( form, fieldName )
{
    for( var i = 0; i < form.length; ++i )
    {
        if( form.elements[i].name == fieldName )
        {
            return form.elements[i];
        }
    }
    return null;
}



function setEnabled( textfieldId, enabled )
{
   var textfield = getElement( textfieldId );
   textfield.disabled = ! enabled;
}



function setSum( ids, cible )
{
   var somme = 0.0;
   for( i = 0; i < ids.length; ++i )
   {
      var id    = ids[i];
      var value = parseFloat( getElement( id ).value );
      if( ! isNaN( value ))
      {
         somme += value;
      }
   }
   getElement( cible ).value = Math.round( somme * 100.0 ) / 100.0;
}



function setSumImmo( checkId, ids, cible )
{
	var checkId = getElement( checkId );
	var status  = checkId.checked;
	var somme   = 0.0;
	for( i = 0; i < ids.length; ++i )
	{
		var id    = ids[i];
		var value = parseFloat( getElement( id ).value );
		if( ! isNaN( value ) && ( i > 0 || status ))
		{
			somme += value;
		}
	}
	getElement( cible ).value = Math.round( somme * 100.0 ) / 100.0;
}



function validationNewsletter( formulaire )
{
    var mel = getField( formulaire, "mel" ).value;
    var retVal =
        ( mel.length         >= 3 ) &&
        ( mel.indexOf( "@" ) > -1 );
    return retVal;
}



function getLength( form, fieldname )
{
    return getField( form, fieldname ).value.length;
}



function isGoodMail( form, fieldname )
{
    var mail = getField( form, fieldname ).value;
    return mail.length >= 3 && mail.lastIndexOf( "@" ) > -1;
}



function validation( form )
{
    var valid = true;
    var civil = getField( form, "civil" );
    if( civil.value == "Choisissez..." )
    {
        valid = false;
        civil.style.border = "thick solid red";
    }
    else
    {
        civil.style.border = "";
    }
    var nom = getField( form, "nom" );
    if( nom.value.length < 2 )
    {
        valid = false;
        nom.style.border = "thick solid red";
    }
    else
    {
        nom.style.border = "";
    }
    if( isGoodMail( form, "mel" ) ||
        getLength( form, "telfix" ) == 10 ||
        getLength( form, "telmob" ) == 10 ||
         ( getLength( form, "adresse" )  > 3 &&
           getLength( form, "zip"     ) == 5 &&
           getLength( form, "ville"   ) > 1     ))
    {
        getElement( "domicile" ).style.border = "";
    }
    else
    {
        valid = false;
        getElement( "domicile" ).style.border = "thick solid red";
    }
    var montant = getField( form, "montant" );
    if( montant != null )
    {
	    if( montant.value.length < 2 )
	    {
	        valid = false;
	        montant.style.border = "thick solid red";
	    }
	    else
	    {
	        montant.style.border = "";
	    }
	 }
    var errmsg  = getElement( "errmsg" );
    var sendBtn = getElement( "sendBtn" );
    if( valid )
    {
        errmsg.innerHTML = "";
        form.submit();
    }
    else
    {
        errmsg.innerHTML = "Veuillez renseigner les champs encadrés de rouge";
    }
    return valid;
}



function setVisibility( ids, enabled )
{
    var visi = ( enabled ? "visible" : "collapse" );
    for( i = 0; i < ids.length; ++i )
    {
        var elt = getElement( ids[i] );
        elt.style.visibility = visi;
    }
}



function zeroField( disabled, fieldId )
{
	var elt = getElement( fieldId );
	if( disabled )
	{
		elt.value = '0';
	}
	elt.disabled = disabled;
	elt.onchange( null );
}// zeroField( disabled, fieldId )



function getNumber( str )
{
	if( str.length > 0 )
	{
		return parseFloat( str );
	}// if
	return 0.0;
}// getNumber( str )



function tauxEndettement()
{
	var taux_d_endettement = document.getElementById( "txe_taux_d_endettement" );
	var revenus            = document.getElementById( "txe_revenus" );
	var loyer_percus       = document.getElementById( "txe_loyer_percus" );
	var pensions_percues   = document.getElementById( "txe_pensions_percues" );
	var loyer_verses       = document.getElementById( "txe_loyer_verses" );
	var credits            = document.getElementById( "txe_credits" );
	var pensions_versees   = document.getElementById( "txe_pensions_versees" );
	var entrees            =
		getNumber( revenus         .value ) +
		getNumber( loyer_percus    .value ) * 0.8 +
		getNumber( pensions_percues.value );
	var sorties            =
		getNumber( loyer_verses    .value ) +
		getNumber( credits         .value ) +
		getNumber( pensions_versees.value );
	if( entrees > 0 && sorties > 0 )
	{
		var str = "" + ( 100.00 * sorties / entrees );
		var dot = str.indexOf( '.' );
		if( dot == -1 )
		{
			taux_d_endettement.value = str + ".00 %";
		}
		else
		{
			taux_d_endettement.value = str.substring( 0, dot + 3 ) + " %";
		}// if
	}
	else
	{
		taux_d_endettement.value = "";
	}// if
}// tauxEndettement()



function money( value )
{
	if( isNaN( value )) return "";
	var strValue = "" + value;
	var dot      = strValue.indexOf( "." );
	if( dot == -1 )
	{
		strValue = value + ".00";
	}
	else
	{
		strValue = strValue.substring( 0, dot + 3 );
	}// if
	return new Number( strValue ).toLocaleString();
}// money( value )



function calculDeLaMensualite()
{
	var mensualite = document.getElementById( "mens_mensualite" );
	var capital    = document.getElementById( "mens_capital" );
	var taux       = document.getElementById( "mens_taux" );
	var duree      = document.getElementById( "mens_duree" );
	var cap        = getNumber( capital.value );
	var tx         = getNumber( taux   .value ) / 1200.0;
	var dur        = getNumber( duree  .value );
	if( cap > 0.0 && tx > 0.0 && tx < 20.0 && dur > 0.0 )
	{
		var ci  = ( cap * tx ) / ( 1 - ( 1 / Math.pow( 1 + tx, 12.0 * dur )));
		mensualite.value = money( ci );
	}
	else
	{
		mensualite.value = "";
	}// if
}// calculDeLaMensualite()



function calculDuCapital()
{
	var mensualite = document.getElementById( "cap_mensualite" );
	var capital    = document.getElementById( "cap_capital" );
	var taux       = document.getElementById( "cap_taux" );
	var duree      = document.getElementById( "cap_duree" );
	var tx         = getNumber( taux      .value ) / 1200.0;
	var dur        = getNumber( duree     .value );
	var mens       = getNumber( mensualite.value );
	var cap        = ( mens * ( 1 - 1 / Math.pow( 1 + tx, 12.0 * dur ))) / tx;
	capital.value = money( cap );
}// calculDuCapital()



function calculDeLaDuree()
{
	var mensualite = document.getElementById( "dur_mensualite" );
	var capital    = document.getElementById( "dur_capital" );
	var taux       = document.getElementById( "dur_taux" );
	var duree      = document.getElementById( "dur_duree" );
	var tx         = getNumber( taux      .value ) / 1200.0;
	var mens       = getNumber( mensualite.value );
	var cap        = getNumber( capital   .value );
	var M_s_C      = mens / cap;
	var dur        =
		( Math.log( M_s_C ) - Math.log( M_s_C - tx )) / Math.log( 1 + tx );
	dur = Math.ceil( dur / 12 );
	if( isNaN( dur ))
	{
		dur = "";
	}// if
	duree.value = dur;
}// calculDeLaDuree()



function calculDuTaux()
{
    var mensualite = document.getElementById( "tx_mensualite" );
    var capital    = document.getElementById( "tx_capital" );
    var taux       = document.getElementById( "tx_taux" );
    var duree      = document.getElementById( "tx_duree" );
    var mens       = getNumber( mensualite.value );
    var cap        = getNumber( capital.value );
    var dur        = 12.0 * getNumber( duree.value );
    var txL        = 0.05;
    var tx         = 50.0;
    var txR        = 100.0;
    for( var i = 1; i < 20; ++i )
    {
        var t = tx / 1200;
        var c = ( mens * ( 1 - 1 / Math.pow( 1 + t, dur ))) / t;
        if( c < cap )
        {
            txR = tx;
        }
        else
        {
            txL = tx;
        }// for
        tx = ( txL + txR ) / 2.0;
    }// for
    taux.value = money( tx );
}// calculDuTaux()



function calculDuTableauAmortissement()
{
	var capital    = document.getElementById( "tab_capital" );
	var mensualite = document.getElementById( "tab_mens" );
	var taux       = document.getElementById( "tab_taux" );
	var div        = document.getElementById( "tab_amort" );
	var cap        = getNumber( capital   .value );
	var mens       = getNumber( mensualite.value );
	var tx         = getNumber( taux      .value ) / 1200.0;
	var tab        = "";
	if( tx > 0 && mens > 0 && cap > 0 )
	{
		var thStyle =
			'style="padding:4px 4px 4px 4px;background-color:black;' +
			'color:white;border:1px solid darkgray"';
		tab += '<table style="border:1px solid darkgray;border-collapse:collapse;">';
		tab += '<tr>';
		tab += '<th ' + thStyle + '>Année</th>';
		tab += '<th ' + thStyle + '>Mois</th>';
		tab += '<th ' + thStyle + '>Capital restant dû</th>';
		tab += '<th ' + thStyle + '>Intérêts remboursés</th>';
		tab += '<th ' + thStyle + '>Capital remboursés</th>';
		tab += "</tr>\n";
		var mois       = 1;
		var interets   = 0.0;
		var rembour    = 0.0;
		var colorIndex = 0;
		var colors     = [ 'lightblue', 'lightgray'];
		while( cap > 0 )
		{
			interets = cap * tx;
			if( cap * ( 1 + tx ) < mens )
			{
				mens = cap + interets;
				cap  = 0;
			}
			else
			{
				cap = cap * ( 1 + tx ) - mens;
			}// if
			rembour = mens - interets;
			tab += '<tr style="background-color:' + colors[colorIndex] + '">';
			if(( mois - 1 ) % 12 == 0 )
			{
				tab += '<td rowspan="12" style="border:1px solid darkgray">' +
						(( mois - 1 ) / 12 + 1 ) + "</td>";
			}// if
			tab += '<td style="border:1px solid darkgray">' + mois + "</td>";
			tab += '<td style="border:1px solid darkgray">' + money( cap ) + "</td>";
			tab += '<td style="border:1px solid darkgray">' + money( interets ) + "</td>";
			tab += '<td style="border:1px solid darkgray">' + money( rembour ) + "</td>";
			tab += "</tr>\n";
			if( mois++ % 12 == 0 )
			{
				++colorIndex;
				colorIndex %= 2;
			}// if
		}// while	
		tab += "</table>";
	}// if
	div.innerHTML = tab;
}// calculDuTableauAmortissement()
