﻿// JavaScript Document 
// --------------------------------------------
// calcul de base
// ---------------------------------------------

//valeurs par défaut des taux et bases de calcul :
var tauMal = 0.0085;
var tauCSG = 0.075;
var tauCRDS = 0.005;
var tauContrib = 0.01;

var assietteMal = 1;
var assietteCSG = 0.97;
var assietteCRDS = 0.97;
var assietteContrib = 1;


function calcul() 
{
var tt=0;
var tta=0;
var deduc=0;

var CSG=0;
var AssSoc=0;
var CRDS=0;

var montant = document.getElementById("montant");
if (montant.value<0)
{
    alert("Le montant brut ne peut être inférieur à 0.");
    montant.select();
    return false;
}

/*Récupérer les taux et assiettes de la base*/
tauMal = document.fmCalcul.tauMal.value;
tauCSG = document.fmCalcul.tauCSG.value;
tauCRDS = document.fmCalcul.tauCRDS.value;
tauContrib = document.fmCalcul.tauContrib.value;

assietteMal = document.fmCalcul.assietteMal.value;
assietteCSG = document.fmCalcul.assietteCSG.value;
assietteCRDS = document.fmCalcul.assietteCRDS.value;
assietteContrib = document.fmCalcul.assietteContrib.value;

/* assurances sociales (maladie) */
AssSoc=new Number(arrondir(montant.value * tauMal * assietteMal, 0));
document.getElementById("assursoc").innerHTML = txt_formatMilliers(AssSoc) + " &euro;";
tt=tt+AssSoc;
deduc=deduc+AssSoc;

/* CSG */
CSG=new Number(arrondir(montant.value * tauCSG * assietteCSG, 0));
document.getElementById("csg").innerHTML = txt_formatMilliers(CSG) + " &euro;";
tt=tt+ CSG;
deduc=deduc+new Number(arrondir(montant.value*.051*assietteCSG,0));

/* CRDS */
CRDS=new Number(arrondir(montant.value * tauCRDS * assietteCRDS, 0));
document.getElementById("crds").innerHTML = txt_formatMilliers(CRDS) + " &euro;";
tt=tt+CRDS;
document.getElementById("totalart").innerHTML = txt_formatMilliers(tt) + " &euro;";

/* diffuseur */
TTdiffuseur=new Number(arrondir(montant.value * tauContrib * assietteContrib,0));
document.getElementById("difus").innerHTML = txt_formatMilliers(TTdiffuseur) + " &euro;";
tt=tt+TTdiffuseur;

/* total */
document.getElementById("total").innerHTML = txt_formatMilliers(tt) + " &euro;";
document.getElementById("deduc").innerHTML ="(dont " + txt_formatMilliers(deduc) + " &euro; " + " sont fiscalement d&eacute;ductibles)";

return false;

}

function calculSup4fois() 
{
var tt=0;
var tta=0;
var deduc=0;

var AssSoc=0;
var CSG=0;
var CSG97 = 0;
var CSG100 = 0;
var CSG97deci = 0;
var CSG100deci = 0;
var CRDS=0;
var CRDS97 = 0;
var CRDS100 = 0;
var CRDS97deci = 0;
var CRDS100deci = 0;

var diffArrondis;
var diff97;
var diff100;

var montant = document.getElementById("montant");
var part = document.getElementById("part");

if (part.value<0 && montant.value<0)
{
    alert("Le montant brut et la part excédentaire ne peuvent être inférieurs à 0.");
    montant.select();
    return false;
}
if (montant.value<0 )
{
    alert("Le montant brut ne peut être inférieur à 0.");
    montant.select();
    return false;
}
if (part.value<0 )
{
    alert("La part excédentaire ne peut être inférieure à 0.");
    part.select();
    return false;
}
if(montant.value - part.value < 0)
{
    alert("La part excédentaire ne peut être supérieure au montant brut.");
    part.select();
    return false;
}

/*Récupérer les taux et assiettes de la base*/
tauMal = document.fmCalcul.tauMal.value;
tauCSG = document.fmCalcul.tauCSG.value;
tauCRDS = document.fmCalcul.tauCRDS.value;
tauContrib = document.fmCalcul.tauContrib.value;

assietteMal = document.fmCalcul.assietteMal.value;
assietteCSG = document.fmCalcul.assietteCSG.value;
assietteCRDS = document.fmCalcul.assietteCRDS.value;
assietteContrib = document.fmCalcul.assietteContrib.value;

/* assurances sociales*/
AssSoc = new Number(arrondir(montant.value * tauMal * assietteMal,0));
document.getElementById("assursoc").innerHTML = txt_formatMilliers(AssSoc) + " &euro;";
tt=tt+AssSoc;
deduc=deduc+AssSoc;

/* CSG */
CSG97deci = (montant.value-part.value)* tauCSG * assietteCSG;
CSG100deci = part.value * tauCSG;
CSG97  = new Number(arrondir(CSG97deci,0));
CSG100 = new Number(arrondir(CSG100deci,0));
CSG=new Number(arrondir(CSG97deci + CSG100deci,0));
//Si l'arrondi de la somme n'est pas égal à la somme des arrondis
diffArrondis = new Number(CSG - (CSG97 + CSG100));
if(diffArrondis != 0)
{//On affecte la différence à un des sous-totaux en fonction de sa partie décimale.
    diff97 = CSG97deci - CSG97;
    diff100 = CSG100deci - CSG100;
    if((diff97 > diff100 && diffArrondis > 0) || (diff97 < diff100 && diffArrondis < 0))
    {
        CSG97 = CSG97 + diffArrondis;
    }else{
        CSG100 = CSG100 + diffArrondis;
    }
}

document.getElementById("csg").innerHTML = txt_formatMilliers(CSG) + " &euro;";
document.getElementById("csg97").innerHTML = txt_formatMilliers(CSG97) + " &euro;";
document.getElementById("csg100").innerHTML = txt_formatMilliers(CSG100) + " &euro;";
tt=tt+ CSG;
deduc=deduc+new Number(arrondir(montant.value * .051 * assietteCSG,0));


/* CRDS */
CRDS97deci = (montant.value-part.value) * tauCRDS * assietteCRDS;
CRDS100deci = part.value * tauCRDS;
CRDS97 = new Number(arrondir(CRDS97deci,0));
CRDS100= new Number(arrondir(CRDS100deci,0));
CRDS=new Number(arrondir(CRDS97deci + CRDS100deci,0));
//Si l'arrondi de la somme n'est pas égal à la somme des arrondis
diffArrondis = new Number(CRDS - (CRDS97 + CRDS100));
if(diffArrondis != 0)
{//On affecte la différence à un des sous-totaux en fonction de sa partie décimale.
    diff97 = CRDS97deci - CRDS97;
    diff100 = CRDS100deci - CRDS100;
    if((diff97 > diff100 && diffArrondis > 0) || (diff97 < diff100 && diffArrondis < 0))
    {
        CRDS97 = CRDS97 + diffArrondis;
    }else{
        CRDS100 = CRDS100 + diffArrondis;
    }
}
document.getElementById("crds").innerHTML = txt_formatMilliers(CRDS) + " &euro;";
document.getElementById("crds97").innerHTML = txt_formatMilliers(CRDS97) + " &euro;";
document.getElementById("crds100").innerHTML = txt_formatMilliers(CRDS100) + " &euro;";
tt=tt+CRDS;
document.getElementById("totalart").innerHTML = txt_formatMilliers(tt) + " &euro;";

/* diffuseur */
TTdiffuseur=new Number(arrondir(montant.value * tauContrib * assietteContrib, 0));
document.getElementById("difus").innerHTML = txt_formatMilliers(TTdiffuseur) + " &euro;";
tt=tt+TTdiffuseur;

/* total */
document.getElementById("total").innerHTML = txt_formatMilliers(tt) + " &euro;";
document.getElementById("deduc").innerHTML ="(dont " + txt_formatMilliers(deduc) + " &euro; " + " sont fiscalement d&eacute;ductibles)";

return false;

}

// --------------------------------------------
// fonction arrondir un nombre
// --------------------------------------------
function arrondir(pnumber,decimals) 
{ 
var strNumber = new String(pnumber); 
strNumber=strNumber.replace(",",".");
var arrParts = strNumber.split('.'); 
var intWholePart = parseInt(arrParts[0],10); 
var strResult = ''; 
if (isNaN(intWholePart)) 
intWholePart = '0'; 
if(arrParts.length > 1) 
{ 
var decDecimalPart = new String(arrParts[1]); 
var i = 0; 
var intZeroCount = 0; 
while ( i < String(arrParts[1]).length ) 
{ 
if( parseInt(String(arrParts[1]).charAt(i),10) == 0 ) 
{ 
intZeroCount += 1; 
i += 1; 
} 
else 
break; 
} 
decDecimalPart = parseInt(decDecimalPart,10)/Math.pow(10,parseInt(decDecimalPart.length-decimals-1)); 
Math.round(decDecimalPart); 
decDecimalPart = parseInt(decDecimalPart)/10; 
decDecimalPart = Math.round(decDecimalPart); 

//If the number was rounded up from 9 to 10, and it was for 1 'decimal' 
//then we need to add 1 to the 'intWholePart' and set the decDecimalPart to 0. 

if(decDecimalPart==Math.pow(10, parseInt(decimals))) 
{ 
intWholePart+=1; 
decDecimalPart="0"; 
} 
var stringOfZeros = new String(''); 
i=0; 
if( decDecimalPart > 0 ) 
{ 
while( i < intZeroCount) 
{ 
stringOfZeros += '0'; 
i += 1; 
} 
} 
decDecimalPart = String(intWholePart) + "." + stringOfZeros + String(decDecimalPart); 
var dot = decDecimalPart.indexOf('.'); 
if(dot == -1) 
{ 
decDecimalPart += '.'; 
dot = decDecimalPart.indexOf('.'); 
} 
var l=parseInt(dot)+parseInt(decimals); 
while(decDecimalPart.length <= l) 
{ 
decDecimalPart += '0'; 
} 
strResult = decDecimalPart; 
} 
else 
{ 
var dot; 
var decDecimalPart = new String(intWholePart); 

decDecimalPart += '.'; 
dot = decDecimalPart.indexOf('.'); 
var l=parseInt(dot)+parseInt(decimals); 
while(decDecimalPart.length <= l) 
{ 
decDecimalPart += '0'; 
} 
strResult = decDecimalPart; 
} 
return strResult; 
} 


