/*
* Script réalisé dans le cadre du Td Devisea
* date		    : Avril 2009
*****************************************************************************************************/

var tabPrix= null;
var deviseFrom =1;
var tarifListByPriceClass	= new Array();
var currenciesTab = new Array();

document.write('<script type="text/javascript" src="/scripts-v56/getElementsByClassName.js"></script>');
document.write('<script type="text/javascript" src="/scripts-v56/fct_diverses.js"></script>');



/*
* Recupere la valeur d'un cookie
* @cookieName		    : Nom du cookie
*****************************************************************************************************/
var getCookie = function(cookieName) {
var userLocalization = '';
//var cookieName = "userLocalization";
var cookies = document.cookie.split(';');
		for (var i = 0; i < cookies.length; i++) {
			var cookie = cookies[i];
			while (cookie.charAt(0) == ' ') cookie = cookie.substring(1, cookie.length);
			if (cookie.indexOf(cookieName) == 0) {
				userLocalization = cookie.substring(cookieName.length + 1, cookie.length);
			}
		}
		return userLocalization;
};


/*
* Arrondie le prix convertie à l' entier superieur
* @nombre		    : Prix à convertir
*****************************************************************************************************/
function truncate(nombre) {
	var nombre_tronque = Number(nombre);	
	return Math.ceil(nombre_tronque);
}

/*
* Création d'un objet devise
* @devise		    : devise
* @taux		    	: taux
* @symbole		    : symbole
*****************************************************************************************************/
function Createdevise(devise,taux,symbole) {
      this.devise=devise;
	  this.taux=taux;
      this.symbole=symbole;
}


/*
* Gère la création du menu déroulant contenant les devises
* @idSelect		    : ID du Select
* @currenciesJson   : Tableau de l'ensemble des devises =json
* @defaultCurrency  : Valeur à sélectionner par défaut = Userlocalisation
*****************************************************************************************************/

function writeSelectCurrencies(idSelect, currenciesJson, defaultCurrency){

	var select = getElement(idSelect);
	var j = 0;

		if (select && select.nodeName== "SELECT") {
				select.options.length 	= 0;
				for(var count = 0; count < currenciesJson.length-1;count++){
					
					if (currenciesJson[count].devise != currenciesJson[count+1].devise) {
						select.options[j] = new Option(currenciesJson[count].devise, currenciesJson[count].devise);
						currenciesTab[j] = new Createdevise(currenciesJson[count].devise,currenciesJson[count].taux,currenciesJson[count].symbole);
						
					j++;
					}

					if (count+2 == currenciesJson.length) {
						select.options[j] = new Option(currenciesJson[count+1].devise, currenciesJson[count+1].devise);
						currenciesTab[j] = new Createdevise(currenciesJson[count+1].devise,currenciesJson[count+1].taux,currenciesJson[count+1].symbole);
					}
					
				}
				
				for (var j = 0; j < currenciesTab.length;j++) {
					if(currenciesTab[j].devise == defaultCurrency){
							select.options[j].selected = true;
					}
					
				}
		}
}


/*
* Fonction permettant de convertir les prix en fonction de la devise sélectionnée
* @idSelect		    : ID du Select
* @defaultCurrency  : Devise par défaut
* @oElm				: par défaut : document
* @strTagName		: Type d'élément à traiter DIV, SPAN, A
* @oClassNames		: Classe à gérer "mClasse" ou ["mClasse1", "mClasse2"]
*****************************************************************************************************/
function convertToCurrency(idSelect,defaultCurrency, oElm, strTagName, oClassNames){

	var selectedCurrency = getElement(idSelect).value;//Devise à afficher
	var deviseTo ; // Valeur de la devise a convertir
	var prixConv = 0;

	for(var i = 0; i < currenciesTab.length; i++) {
		if(currenciesTab[i].devise == selectedCurrency) {
		deviseTo=currenciesTab[i].taux;
		}
	}


	for(var i = 0; i < tarifListByPriceClass.length; i++){

		prixConv = tarifListByPriceClass[i];
			
		// calcul du ratio multiplicateur entre la devise de référence et la devise demandée
		ratioConv = deviseTo / deviseFrom;
		
		// calcul nouveau montant
		prixConv = prixConv * ratioConv;
		
		if(prixConv != 0){
		    if(tabPrix[i].innerHTML){
				tabPrix[i].innerHTML = truncate(prixConv);
					
			}else if(tabPrix[i].document && tabPrix[i].document != window.document){
				tabPrix[i].document.open();
				tabPrix[i].document.write(truncate(prixConv));
				tabPrix[i].document.close();
			}
		}
	}
		
	
}


/*
* Gère l'affichage de la devise en cours
* idSelect          : l'id du select des devises.
* @oElm				: par défaut : document
* @strTagName		: Type d'élément à traiter DIV, SPAN, A
* @oClassNames		: Classe à gérer "mClasse" ou ["mClasse1", "mClasse2"]
*****************************************************************************************************/
function writeCurrency(idSelect, oElm, strTagName, oClassNames){
	var selectedCurrency	= getElement(idSelect).value;
	var spanDevise			= getElementsByClassName(oElm, strTagName, oClassNames);
	var symboleDevise;

	for(var j = 0; j < currenciesTab.length; j++){
		if (selectedCurrency == currenciesTab[j].devise) symboleDevise = currenciesTab[j].symbole;
	}

	for(var i = 0; i < spanDevise.length; i++){
		
		if(spanDevise[i].innerHTML){
			spanDevise[i].innerHTML		= symboleDevise;
		}else if(currenciesTab[i].document && spanDevise[i].document != window.document){
			spanDevise[i].document.open();
			spanDevise[i].document.write(symboleDevise);
			spanDevise[i].document.close();
		}
	}
}


/*
* Actualise l'affichage et exécute la conversion des devises
* @oElm				: par défaut : document
* @strTagName		: Type d'élément à traiter DIV, SPAN, A pour les prix
* @oClassPrix		: Classe à gérer "mClasse" ou ["mClasse1", "mClasse2"] pour les prix
* @strTagNameD		: Type d'élément à traiter DIV, SPAN, A pour les devises
* @oClassDevise		: Classe à gérer "mClasse" ou ["mClasse1", "mClasse2"] pour les devises
************************************************************************/
function updatePricesAndCurrencies(idSelect,defaultCurrency, oElm, strTagName, oClassPrix, oClassDevise){
	if(tabPrix == null)
	{
		tabPrix = getElementsByClassName(oElm, strTagName, oClassPrix);
		for(var i = 0; i < tabPrix.length; i++){
		tarifListByPriceClass[i]=tabPrix[i].innerHTML;
		}
		
	}
	
	var tarif_ref = new Array();
	  for(var i = 0; i < tarifListByPriceClass.length; i++){
		  if(isNaN(tarifListByPriceClass[i])) mPrix = 0;
		    else mPrix = tarifListByPriceClass[i];
		  tarif_ref[i] = mPrix;
	  }
	  

    // Convertion des prix dans la nouvelle devise
	convertToCurrency(idSelect, defaultCurrency,oElm, strTagName, oClassPrix);
	// Ecriture du code de la nouvelle devise
	writeCurrency(idSelect, oElm, strTagName, oClassDevise);
}

/*
* Récupère les éléments du json en fonction du type
* @json				: json
* @type				: type du json
************************************************************************/
var getJSONFragment = function(json, type) {
	return (typeof json == 'object' && json[type]) ? json[type] : null;
};



/*
* Fonction pour lire le json et appeler les autres fonctions
* @options			: options du json
************************************************************************/
var addTemplateToPage = function(options) {
var dom = options.insertTo;

if (dom != null) {

			new Ajax.Request(options.url + '?day=' + new Date().getDay(), {
						method: 'get',
						onSuccess: function(request) {
		
							var json = request.responseText;
		
							if (typeof json == 'string') {
								json = eval('(' + json + ')');
							} 
							
							if (typeof json == 'object') {
					
							var fragment = getJSONFragment(json, options.type);
								
							var defaultCurrencyTab= getElementsByClassName(document, "span", "mdevise");
							var tmp=defaultCurrencyTab[0].innerHTML;
							var defaultCurrencyFrom=0;
							
								for(var i = 0; i < fragment.length; i++){
									if (fragment[i].symbole == tmp){
										defaultCurrencyFrom=fragment[i].devise;
										deviseFrom=fragment[i].taux;
									}
								}
								
								defaultCurrency=defaultCurrencyFrom;
								
								for (var i = 0; i < fragment.length; i++) {
									if (fragment[i].codepays.toLowerCase() == options.code_pays) defaultCurrency=fragment[i].devise;
								}
							
							writeSelectCurrencies(options.insertTo,fragment, defaultCurrency);
							updatePricesAndCurrencies(options.insertTo,defaultCurrency, document, "span", "mtarif","mdevise");
						
								Event.observe(options.insertTo, "change",
									function(){
										updatePricesAndCurrencies(options.insertTo,defaultCurrency, document, "span", "mtarif", "mdevise");
										defaultCurrency= getElement(options.insertTo).value;
									}
								)
							}
							

						},
						onComplete: function(){ 
						
						}
					
				});
}
};
