var END_OF_INPUT = -1;

var base64Chars = new Array(
    'A','B','C','D','E','F','G','H',
    'I','J','K','L','M','N','O','P',
    'Q','R','S','T','U','V','W','X',
    'Y','Z','a','b','c','d','e','f',
    'g','h','i','j','k','l','m','n',
    'o','p','q','r','s','t','u','v',
    'w','x','y','z','0','1','2','3',
    '4','5','6','7','8','9','+','/'
);

var reverseBase64Chars = new Array();
for (var i=0; i < base64Chars.length; i++){
    reverseBase64Chars[base64Chars[i]] = i;
}

var base64Str;
var base64Count;
function setBase64Str(str){
    base64Str = str;
    base64Count = 0;
}
function readBase64(){    
    if (!base64Str) return END_OF_INPUT;
    if (base64Count >= base64Str.length) return END_OF_INPUT;
    var c = base64Str.charCodeAt(base64Count) & 0xff;
    base64Count++;
    return c;
}
function encodeBase64(str){
    setBase64Str(str);
    var result = '';
    var inBuffer = new Array(3);
    var lineCount = 0;
    var done = false;
    while (!done && (inBuffer[0] = readBase64()) != END_OF_INPUT){
        inBuffer[1] = readBase64();
        inBuffer[2] = readBase64();
        result += (base64Chars[ inBuffer[0] >> 2 ]);
        if (inBuffer[1] != END_OF_INPUT){
            result += (base64Chars [(( inBuffer[0] << 4 ) & 0x30) | (inBuffer[1] >> 4) ]);
            if (inBuffer[2] != END_OF_INPUT){
                result += (base64Chars [((inBuffer[1] << 2) & 0x3c) | (inBuffer[2] >> 6) ]);
                result += (base64Chars [inBuffer[2] & 0x3F]);
            } else {
                result += (base64Chars [((inBuffer[1] << 2) & 0x3c)]);
                result += ('=');
                done = true;
            }
        } else {
            result += (base64Chars [(( inBuffer[0] << 4 ) & 0x30)]);
            result += ('=');
            result += ('=');
            done = true;
        }
        lineCount += 4;
        if (lineCount >= 76){
            result += ('n');
            lineCount = 0;
        }
    }
    return result;
}

function girardinsa(){
var getstring;
var activPrint = 0;
var capiHorsIS = 0;
var capiIS = 0;
var getstring;
var activPrint = 0;
var girardinsaArray = xmldata( 0, core + 'extend/ext_wsquery.php?swtype=object&objectName=girardinsaArray' );
girardinsaArray = girardinsaArray.split(",")

plafondImpotsBas = girardinsaArray[0];
coeficientImpotsBas = girardinsaArray[1];
coeficientImpotsHaut = girardinsaArray[2];

resultatFiscal = eval(document.devis.resultatFiscal.value);

if(resultatFiscal > plafondImpotsBas){
	pourcentageBas = coeficientImpotsBas * 100;
	impotsBas = plafondImpotsBas * coeficientImpotsBas;
	
	pourcentageHaut = coeficientImpotsHaut * 100;
	impotsHaut = ( resultatFiscal - plafondImpotsBas ) * coeficientImpotsHaut;
	
	impotsTotal = impotsBas + impotsHaut;
	impotsResultFlux = "Impôt à " + pourcentageBas + "% : " + FormatNumber(impotsBas) + " \u20AC<br />Impôt à " + pourcentageHaut + "% : " + FormatNumber(impotsHaut) + " \u20AC<br />Impôt total : " + FormatNumber(impotsTotal) + " \u20AC";
}
else
{
	pourcentage = coeficientImpotsBas * 100;
	
	impotsTotal = resultatFiscal * coeficientImpotsBas;
	impotsResultFlux = "Impôt à " + pourcentage + "% : " + FormatNumber(impotsTotal) + " \u20AC";
}

if(resultatFiscal > 0){
	document.getElementById("situationActuelle").innerHTML = "Situation actuelle<br />" + impotsResultFlux;
	document.getElementById("beneficeApresIS").innerHTML = "Bénéfice aprés IS : <font color=\"#ff0000\">" + FormatNumber(resultatFiscal-impotsTotal) + " \u20AC</font>";


	investissement = eval(document.devis.investissement.value);
	dureeInvestissement = eval(document.devis.dureeInvestissement.value);
	if(investissement > 0){
		nouveauResultatFiscal = resultatFiscal - investissement;
		document.getElementById("situationNouvelle").innerHTML = "Situation nouvelle<br />Nouveau Résultat Fiscal : <font color=\"#ff0000\">" + nouveauResultatFiscal + " \u20AC</font>";
	
		if(nouveauResultatFiscal > plafondImpotsBas){
			nouveauPourcentageBas = coeficientImpotsBas * 100 ;
			nouveauImpotsBas = plafondImpotsBas * coeficientImpotsBas;
			
			nouveauPourcentageHaut = coeficientImpotsHaut * 100;
			nouveauImpotsHaut = ( nouveauResultatFiscal - plafondImpotsBas ) * coeficientImpotsHaut;
			
			nouveauImpotsTotal = nouveauImpotsBas + nouveauImpotsHaut;
			nouveauImpotsResultFlux = "Nouvel Impôt à " + nouveauPourcentageBas + "% : " + FormatNumber(nouveauImpotsBas) + " \u20AC<br />Nouvel Impôt à " + nouveauPourcentageHaut + "% : " + FormatNumber(nouveauImpotsHaut) + " \u20AC<br />Nouvel Impôt total : " + FormatNumber(nouveauImpotsTotal) + " \u20AC";
		}
		else
		{
			nouveauPourcentage = coeficientImpotsBas * 100;
			nouveauImpotsTotal = nouveauResultatFiscal * coeficientImpotsBas;
			nouveauImpotsResultFlux = "Nouvel Impôt à " + nouveauPourcentage + "% : " + FormatNumber(nouveauImpotsTotal) + " \u20AC";
		}
		
		document.getElementById("nouveauImpotsRegler").innerHTML = "<b><u>Nouvel impôt à régler</u></b><br />" + nouveauImpotsResultFlux;
		document.getElementById("nouveauIBeneficeApresIS").innerHTML = "Nouveau Bénéfice aprés IS : <font color=\"#ff0000\">" + FormatNumber(resultatFiscal-nouveauImpotsTotal) + " \u20AC</font>";
		document.getElementById("gainImpotsGenere").innerHTML = "<font color=\"#ff0000\"><b><u>Gain impôt généré : " + FormatNumber(impotsTotal - nouveauImpotsTotal) + "</u></b>";
	
	}
	
	apportCash = eval(document.devis.apportCash.value);
	if(apportCash >= 0)
		creditTotal = investissement - apportCash;
	else
		creditTotal = investissement;
		
	capiHorsIS = eval(document.devis.capiHorsIS.value);
	capiIS = eval(document.devis.capiIS.value);
	if(creditTotal > 0 && capiHorsIS >=0 && capiIS >=0){
		totalCapi = capiHorsIS + capiIS;
		document.getElementById("capitalInFine").innerHTML = "Capital in fine : " + creditTotal + " \u20AC<br />montant capi (fiscalité incluse) : " + totalCapi + " \u20AC<br />Capital restant dû : " + ( creditTotal - totalCapi ) + " \u20AC";
	}
	
	document.getElementById("montantEmprunte").innerHTML = "Montant emprunté : " + creditTotal + " \u20AC";
	
	tauxBaseInFine = eval(document.devis.tauxInFine.value);
	tauxAssuranceInFine = eval(document.devis.tauxAssuranceInFine.value);
	tauxInFine = tauxBaseInFine + tauxAssuranceInFine;
	dureeInFine = eval(document.devis.dureeInFine.value);
	coeficientInFine = tauxInFine / 100;
	tauxPeriodiqueInFine = coeficientInFine / 12;
	dureeMoisInFine = dureeInFine * 12;
	echeanceInFine = (( creditTotal * tauxPeriodiqueInFine ) / ( 1 - Math.pow(( 1 + tauxPeriodiqueInFine ), -dureeMoisInFine )));
	coutCreditInFine = ( creditTotal * coeficientInFine ) * dureeInFine;
	mensualiteInFine = coutCreditInFine / dureeMoisInFine;
	
	tauxBaseAmotissable = eval(document.devis.tauxAmotissable.value);
	tauxAssuranceAmotissable = eval(document.devis.tauxAssuranceAmotissable.value);
	tauxAmotissable = tauxBaseAmotissable + tauxAssuranceAmotissable;
	dureeAmotissable = eval(document.devis.dureeAmotissable.value);
	coeficientAmotissable = tauxAmotissable / 100;
	tauxPeriodiqueAmotissable = coeficientAmotissable / 12;
	dureeMoisAmotissable = dureeAmotissable * 12;
	echeanceAmotissable = (( creditTotal * tauxPeriodiqueAmotissable ) / ( 1 - Math.pow(( 1 + tauxPeriodiqueAmotissable ), -dureeMoisAmotissable )));
	coutCreditAmotissable = ( echeanceAmotissable * dureeMoisAmotissable ) - creditTotal;
	
	if((tauxInFine > 0 && dureeInFine > 0) || (tauxAmotissable > 0 && dureeAmotissable > 0))
	{
		document.getElementById("totalcredit").innerHTML = "Montant emprunté : " + creditTotal + " \u20AC";
		if(tauxInFine > 0 && dureeInFine > 0)
		{
			document.getElementById("mensualitesInFine").innerHTML = "Mensualité :<br>- " + FormatNumber(mensualiteInFine) + " \u20AC /mois<br>- " + FormatNumber(mensualiteInFine*12) + " \u20AC /an<br>Coût du crédit In FINE : " + FormatNumber(coutCreditInFine) + " \u20AC";	
		}
		if(tauxAmotissable > 0 && dureeAmotissable > 0)
		{
			document.getElementById("mensualitesAmotissable").innerHTML = "Mensualité :<br>- " + FormatNumber(echeanceAmotissable) + " \u20AC /mois<br>- " + FormatNumber(echeanceAmotissable*12) + " \u20AC /an<br>Coût du crédit amortissable : " + FormatNumber(coutCreditAmotissable) + " \u20AC";	
		}
		
		loyers = eval(document.devis.loyers.value);
		injectionTresorie = eval(document.devis.injectionTresorie.value);
		if(loyers > 0 && injectionTresorie >= 0)
		{
			inFineRemboursements = echeanceInFine * 12;
			differencielInFineBrut = loyers - inFineRemboursements;
			inFineSoldeComptable = ( loyers + injectionTresorie - inFineRemboursements );
			inFineAmortissement = investissement / dureeInFine;
			inFineSoldeFiscal = ( loyers + injectionTresorie ) - ( inFineRemboursements + inFineAmortissement );
			inFineGainImpot = inFineSoldeFiscal * coeficientImpotsHaut;
			inFineSoldeApresGain = inFineSoldeFiscal - inFineGainImpot;
			inFineEffortReelDEpargne = inFineSoldeComptable - inFineGainImpot;
			document.getElementById("differencielInFine").innerHTML = "Différentiel brut moyen : " + FormatNumber(differencielInFineBrut) + " / an<br />Différentiel net moyen : " + FormatNumber(inFineEffortReelDEpargne) + " / an";
			
			amortissableRemboursements = echeanceAmotissable * 12;
			differencielAmortissableBrut = loyers - amortissableRemboursements;
			amortissableSoldeComptable = ( loyers + injectionTresorie - amortissableRemboursements );
			amortissableAmortissement = investissement / dureeAmotissable;
			amortissableSoldeFiscal = ( loyers + injectionTresorie ) - ( amortissableRemboursements + amortissableAmortissement );
			amortissableGainImpot = amortissableSoldeFiscal * coeficientImpotsHaut;
			amortissableSoldeApresGain = amortissableSoldeFiscal - amortissableGainImpot;
			amortissableEffortReelDEpargne = amortissableSoldeComptable - amortissableGainImpot;
			document.getElementById("differencielAmortissable").innerHTML = "Différentiel brut moyen : " + FormatNumber(differencielAmortissableBrut) + " / an<br />Différentiel net moyen : " + FormatNumber(amortissableEffortReelDEpargne) + " / an";
		
			activPrint = 1;
		}
	}
}

if(activPrint == 1){
	getstring = encodeBase64("1," + resultatFiscal + "," + investissement + "," + dureeInvestissement + "," + apportCash + "," + tauxBaseAmotissable + "," + tauxBaseInFine + "," + tauxAssuranceAmotissable + "," + tauxAssuranceInFine + "," + dureeAmotissable + "," + dureeInFine + "," + loyers + "," + injectionTresorie);
	document.getElementById("printPDF").innerHTML = "<a href=\"" + core + "extend/ext_simgsapdf.php?q=" + getstring + "\" target=\"_blank\"><img src=\"" + core + "layout/" + layout + "/pict/pdf_ico.gif\" alt=\"PDF\" /></a>";
}

}
