var nb_actions_regroupement = 12;

//var prix_de_ref_avec_decote = 1.35;
//var prix_de_ref_sans_decote = 1.59;
var prix_de_ref_avec_decote = 1.35 * nb_actions_regroupement;
//var prix_de_ref_sans_decote = 1.59 * nb_actions_regroupement;
var prix_de_ref_sans_decote = 18.19;

var nombre_maximal_de_cours = 60;

var idlang = 0;
var idpays = 0;

var valeur_invest = 0

var isliquidation = false; // dans le cas d'une liquidation a la date => true, dans le cas d'une prevision => false

var lib_pays_by_lang = new Array();
var labels_by_lang = new Array();
var lib_rend_garanti	= new Array();
var infoValeurMin		= new Array();
var infoValeurLiq		= new Array();
var infoDisclaimer		= new Array();


/**
 *
 * TRADUCTION DES DIFFERENTES LANGUES
 *
 *************************************************************************************************************************
 *************************************************************************************************************************/

vid = LireCookie("vid");

if (vid == "1") {
	idlang = 0;
}
else if (vid == "2") {
	idlang = 2;
}
else {
	idlang = 1;
}

// ajouter un label par langue
var lang = ["Français","English","Brasil"];

// ajouter une ligne par langue et un label par pays
lib_pays_by_lang[0] = ["France - Euro","Brésil - Réal","Angleterre - Livre sterling","Allemagne - Euro","Italie - Euro","Espagne - Euro","Pologne - Szloty","Hong Kong - HK Dollar","Singapour - S Dollar","Japon - Yen","Etats-Unis - US Dollar","Canada - CAN Dollar"];
lib_pays_by_lang[1] = ["France - Euro","Brazil - Real","UK - Livre sterling","Germany - Euro","Italia - Euro","Spain - Euro","Poland - Szloty","Hong Kong - HK Dollar","Singapour - S Dollar","Japan - Yen","North America - US Dollar","Canada - CAN Dollar"];
lib_pays_by_lang[2] = ["France - Euro","Brazil - Real","UK - Livre sterling","Germany - Euro","Italia - Euro","Spain - Euro","Poland - Szloty","Hong Kong - HK Dollar","Singapour - S Dollar","Japan - Yen","North America - US Dollar","Canada - CAN Dollar"];

// le label du crendement garanti change en fonction du calcul
lib_rend_garanti[0] = ["Rendement garanti à la date (%)", "Rendement à la date (%)"];
lib_rend_garanti[1] = ["Minimum guaranteed return (%)", "Return if liquidated today (%)"];
lib_rend_garanti[2] = ["Rendimento no vencimento (%)", "Rendimento até à data atual (%)"];

// ajouter une ligne par langue et un label par pays
labels_by_lang[0] = ["Choisissez votre langue >> ","Choisissez votre pays >> ","Calcul de la valeur minimale acquise","Calcul de la valeur liquidative","Montant investi en monnaie locale","Contre-valeur en euros","Nombre d'actions","Cours final moyenné","Valeur du levier","Valeur du portefeuille en euros","Rendement garanti à la date (%)","Calculer"];
labels_by_lang[1] = ["Choose your language >> ","Choose your country >> ","Calculate the guaranteed value","Calculate the liquidation value","Amount you invested in your local currency","Exchange-value in euros","Number of shares","Averaged final price","Value of the leveraged formula","Value of your portfolio in Euros","Rendement garanti à la date (%)","Calculate"];
labels_by_lang[2] = ["Escolha sua língua >> ","Escolha seu país >> ","Cálculo do valor mínimo adquirido","Cálculo do valor liquidativo","Total investido em moeda local","Valor em euros","Número de ações","Cotação final média","Valor da alavancada","Valor do portfólio em euros","Rendimento no vencimento (%)","Calculate"];

// Infos pour le type de calcul
infoValeurMin[0] = '<p><strong>Valeur minimale acquise</strong><br />La valeur minimale acquise correspond à la valeur définitivement acquise par votre portefeuille quelque soit l’évolution à venir du cours de l’action entre la date de calcul et la fin de la période de blocage de 5 ans.</p>';
infoValeurMin[1] = '<p><strong>Minimum guaranteed value</strong><br />The minimum guaranteed value is the minimum amount that your investment will be worth at the end of the 5 year lock in. You are guaranteed to receive at least this sum, regardless of future movements in the Rhodia share price.</p>';
infoValeurMin[2] = '<p><strong>Valor mínimo adquirido</strong><br />O valor mínimo adquirido corresponde ao valor definitivamente adquirido pelo seu portfólio seja qual for a evolução futura da taxa da ação entre a data de cálculo e o fim do período de bloqueio de 5 anos.</p>';

infoValeurLiq[0] = '<p><strong>Valeur liquidative</strong><br />La valeur liquidative est calculée en cas de liquidation de votre portefeuille avant la fin de la période de blocage de 5 ans. C’est la valeur liquidative qui est retenue par Natixis Interépargne dans les relevés qui vous sont adressés.</p>';
infoValeurLiq[1] = '<p><strong>Liquidation value</strong><br />The liquidation value is the value your portfolio would have if liquidated before the end of the five year "lock in".  It is the same liquidation value that Natixis Interépargne uses in the statements that are sent to you. </p>';
infoValeurLiq[2] = '<p><strong>Valor liquidativo</strong><br />O valor liquidativo foi calculado no caso da liquidação de seu portfólio antes do fim do período de bloqueio de 5 anos. Trata-se do valor liquidativo liquidativo que foi fixado pela Natixis Interépargne nos extratos que lhe foram enviados.</p>';

// Disclaimer
infoDisclaimer[0] = ["Avertissement", "Les taux de conversion des devises en euros ont été arrêtés au 18 mai 2006. Les chiffres fournis par ce calculateur sont simplement indicatifs et n'ont pas de valeur contractuelle. Pour connaître le montant exact de votre portefeuille, vous devez en faire la demande à Natixis Interépargne."];
infoDisclaimer[1] = ["Warning", "Currency exchange rates used for conversion into euros are those of May 18, 2006. The calculator results are to be considered indicative only, non-binding, and without contractual value.  To know the exact value of your portfolio, please contact Natixis Interpargne."];
infoDisclaimer[2] = ["Atenção", "As taxas de conversão em euros foram fixadas em 18 de maio 2006. Os números fornecidos por esta calculadora representam somente uma indicação e não tem valor de contrato. Para conhecer o valor exato do seu portfólio, você deve pedir à empresa Natixis Interepargne."];

function load_lang(){
	var flang = document.getElementById("lang");
	for(var i = 0 ; i < lang.length; i++){
		flang.options[i] = new Option(lang[i], i);
	}
	flang.options.selectedIndex = idlang;
}

function load_pays(){
	var fpays = document.getElementById("pays");
	var selected_index = fpays.options.selectedIndex;
	if (selected_index == -1) selected_index = 0;
	for(var i = 0 ; i < code_pays.length; i++){
		fpays.options[i] = new Option(lib_pays_by_lang[idlang][i], code_pays[i]);
	}
	fpays.options.selectedIndex = selected_index;
}

function change_pays(newidpays){
	idpays = newidpays;
}

function change_lang(newidlang){
	idlang = newidlang;
	load_pays();
}

function change_liquidation(newliquidation){
	isliquidation = newliquidation;
}

/**
 *
 * METHODES DE CALCUL
 *
 *************************************************************************************************************************
 *************************************************************************************************************************/

// ajouter un label par pays
var code_pays = ["fr","br","uk","de","it","sp","pl","hk","sg","ja","us","ca"];

// modeles par pays
var model_by_pays = [9.2, 9.2, 9.2, 10.2, 8.7, 8.7, 9.2, 8.7, 8.7, 8.7, 9.2, 8.7];

// prix de reference par pays
var prix_ref_by_pays = [1.35, 1.35, 1.35, 1.59, 1.35, 1.35, 1.35, 1.35, 1.35, 1.35, 1.35, 1.35];

// taux de change par pays
var tx_chang_by_pays = [1, 2.80050, 0.67755, 1, 1, 1, 3.97050, 9.90220, 2.01870, 141.94000, 1.2770, 1.42350];


// calcul de la contre-valeur en euros
function calcul_cve(){
	return valeur_invest / tx_chang_by_pays[idpays];		
}

// calcul du nombre de actions
function calcul_nb_actions(){
	var nb_actions = calcul_cve()/prix_ref_by_pays[idpays]/nb_actions_regroupement;	
	return nb_actions;
}

// calcul du nombre de actions
function set_valeur_invest(valeur_en_monnaie_pays){
	valeur_invest = valeur_en_monnaie_pays;
}

// calcul du cours final moyenné
function calcul_cfm(){
	var somme_des_cours_anterieurs = 0;
	var somme_des_cours_posterieurs = 0;
	var cfm = 0;
	
	var nombre_de_cours = cours_cloture_mensuel.length;
	
	var cours_cloture_mensuel_regroup = 0;
	
	// calcul de la somme des cours anterieurs au mois en cours
	for (var i = 0 ; i < nombre_de_cours; i++){
		if(i < 11){
		// Pour les 11 premiers cours (avant regroupement), on multiplie par le nombre d'actions regroupées
		  cours_cloture_mensuel_regroup = cours_cloture_mensuel[i] * nb_actions_regroupement;
		}else{
		// pour les cours suivants le cours en base doit être le bon
		  cours_cloture_mensuel_regroup = cours_cloture_mensuel[i];
		}	
		somme_des_cours_anterieurs = somme_des_cours_anterieurs + Math.max(cours_cloture_mensuel_regroup,prix_de_ref_sans_decote);
	}
	
	// calcul de la somme des cours posterieurs au mois en cours
	if(isliquidation=="true"){ // dans le cas d'une liquidation on prend le cours du dernier mois comme reference
	
	somme_des_cours_posterieurs = Math.max(cours_cloture_mensuel[nombre_de_cours-1],prix_de_ref_sans_decote) * (nombre_maximal_de_cours - nombre_de_cours);

		if(nombre_de_cours < 12){ // au cas où le dernier cours ne correspondrait pas au regroupement
		  somme_des_cours_posterieurs = somme_des_cours_posterieurs * nb_actions_regroupement;
		}
	}else{ // dans le cas d'une prevision a terme on prend le cours de reference
		somme_des_cours_posterieurs = prix_de_ref_sans_decote * (nombre_maximal_de_cours - nombre_de_cours);
	}
	// calcul du cours final moyenné
	cfm = ( somme_des_cours_anterieurs + somme_des_cours_posterieurs ) / nombre_maximal_de_cours;

	return cfm;
}


// calcul de la valeur du levier
function calcul_vl(){
	return model_by_pays[idpays] * (calcul_cfm()-prix_de_ref_sans_decote) * calcul_nb_actions();
}

// calcul de la valeur du portefeuille
function calcul_vp(){
	return calcul_cve() + calcul_vl();
}


// calcul du rendement garanti a la date la valeur minimale garantie du portefeuille
function calcul_rgd(){
	var rgd = 0;
	if(calcul_cve() > 0){
		rgd = ( (calcul_vp()-calcul_cve()) / calcul_cve() ) * 100;
	}
	return rgd;
}

function arrondi(valeur){
  return Math.round(valeur*100)/100;
}

function init_all_fields(){
	valeur_invest = clean_field(document.getElementById("invest").value);
	
	document.getElementById("invest").value = valeur_invest;
	document.getElementById("cve").innerHTML= arrondi(calcul_cve()); 
	document.getElementById("nba").innerHTML=arrondi(calcul_nb_actions());	
	document.getElementById("cfm").innerHTML=arrondi(calcul_cfm());		
	document.getElementById("vl").innerHTML=arrondi(calcul_vl());			
	document.getElementById("vp").innerHTML=arrondi(calcul_vp());	
	document.getElementById("rgd").innerHTML=arrondi(calcul_rgd());
	
}

function clean_field(field) {    
	if (field!=null){
	  
	  // nettoyage des caractères blancs
	  field = trim(field);
	  
	  // recherche d'éléments non-numériques
	  var regexpNotOnlyNumerics = new RegExp('[^0-9,.]', 'gi');
	  var booNotOnlyNumerics = regexpNotOnlyNumerics.test(field);
	  
	  // recherche de virgules multiples
	  var arrSeveralDot = field.split('.');
	  var arrSeveralComma = field.split(',');
	  
	  var booSeveralDotOrComma = ( arrSeveralDot.length + arrSeveralComma.length ) > 3;
	  
	  if(booNotOnlyNumerics || booSeveralDotOrComma){
	    field = '0';
	  }
	  
	  // remplacement d'une , par un .
	  field = field.replace(new RegExp(',', 'gi'), '\.');
	  
	  
	}else{
	  field = '0';
	}	
	
	return field;
}

function trim(s) {
    return s.replace(/^\s+/, '').replace(/\s+$/, '');
}


/**
 *
 * AFFICHAGE DU RESULTAT
 *
 *************************************************************************************************************************
 *************************************************************************************************************************/

function init_label_rendement() {
	codeLangue = $("lang").value;
	if ($("liquidation_min").checked == true) {
		bonLabel = lib_rend_garanti[codeLangue][0];
	}
	else {
		bonLabel = lib_rend_garanti[codeLangue][1];
	}
	$("lrgd").update(bonLabel);
}

function init_all_labels(){
	document.getElementById("lswlang").innerHTML = labels_by_lang[idlang][0];
	document.getElementById("lpays").innerHTML = labels_by_lang[idlang][1];
	document.getElementById("lnoliqu").innerHTML = labels_by_lang[idlang][2];
	document.getElementById("lliqu").innerHTML = labels_by_lang[idlang][3];
	document.getElementById("livest").innerHTML = labels_by_lang[idlang][4];
	document.getElementById("lcve").innerHTML = labels_by_lang[idlang][5];
	document.getElementById("lnba").innerHTML = labels_by_lang[idlang][6];	
	document.getElementById("lcfm").innerHTML = labels_by_lang[idlang][7];		
	document.getElementById("lvl").innerHTML = labels_by_lang[idlang][8];		
	document.getElementById("lvp").innerHTML = labels_by_lang[idlang][9];				
	// document.getElementById("lrgd").innerHTML = labels_by_lang[idlang][10];				
	document.getElementById("calc").value = labels_by_lang[idlang][11];

	//--> affichage du bon label pour le rendement garanti.
	init_label_rendement();

	//--> Definition du type de calcul
	$("infosValMin").update(infoValeurMin[idlang]);
	$("infosLiqu").update(infoValeurLiq[idlang]);

	//--> Information Disclaimer
	$("lienDisclaimer").update(infoDisclaimer[idlang][0]);
	$("texteDisclaimer").update(infoDisclaimer[idlang][1]);
}

/**
 *
 * DEBUG
 *
 *************************************************************************************************************************
 *************************************************************************************************************************/

function displayallvalues(){
	alert(  idpays + " " + tx_chang_by_pays[idpays]);
}


function testforAffichageCalculateur(){
  message_erreur = "Due to a system issue, the calucaltor is temporary unavailable. Sorry for the inconvenience.<br><br>Suite à un problème informatique, le calculateur est momentanemment indisponible. Nous vous prions de nous excuser pour ce désagrément.";
  if(cours_cloture_mensuel==null){
	  document.getElementById("formcalc").style.display = "none";
  	document.getElementById("errormessage").innerHTML = message_erreur;

	}
	else if(cours_cloture_mensuel.length == 0){
	document.getElementById("errormessage").innerHTML = message_erreur;

	  document.getElementById("formcalc").style.display = "none";
	}	
}
