var tabLignesRef = new Array();	

function traitePrix(prix, action) {
	if(action == 'calcule') {
		// il faut repérer la virgule, la remplacer par un point et retourner un numérique
		prix = prix.replace(/,/, '.');
		// pour les milliers il faut supprimer l'espace d'affichage ajouté après le millier
		prix = prix.replace(/ /g, '');
		// transformation de la chaîne en nombre
		prix = Number(prix); 
	}
	if(action == 'affiche') {
		// il faut repérer le point s'il existe, le remplacer par une virgule. S'il n'y a rien il faut 2 décimales
		if(prix == parseInt(prix))	{
			// si le chiffre est entier -> on ajoute , et 00
			prix = prix.toString();				// transformation en string pour l'affichage
			prix += ',00';						// ajout des 2 décimales
		} else {
			// sinon on remplace le point par une virgule
			prix = prix.toFixed(2);				// on force à 2 décimales
			prix = prix.toString();				// transformation en string pour l'affichage
			prix = prix.replace(/\./, ',');		// remplacement du point par la virgule
		}
		// ajout de l'espace du millier
		prixN = parseFloat( prix );
		if(prixN >= 1000) prix = prix.slice(0, (prix.length - 6)) + ' ' + prix.slice((prix.length - 6));
		// idem pour le million
		if(prixN >= 1000000 ) prix = prix.slice(0, (prix.length - 10)) + ' ' + prix.slice((prix.length - 10));
		// idem pour le milliard
		if(prixN >= 1000000000) prix = prix.slice(0, (prix.length - 14)) + ' ' + prix.slice((prix.length - 14));
	}
	return prix;
}

function recalculePanier() {
	
	// stockage des totaux du panier
	var eltTtlHT = ($('sousTotalHT'))?$('sousTotalHT').firstChild:null;
	var eltTtlTTC = ($('sousTotalTTC'))?$('sousTotalTTC').firstChild:null; 
	
	// tableau de stockage des prix et quantité par ligne de produit commandé
	$$('tbody .ligneproduit').each(function(lignesproduit, index) {
		tabLignesRef[index] = new Array();
		tabLignesRef[index]["prixUHT"] = tabLignesRef[index]["prixUTTC"] = tabLignesRef[index]["qtt"] = tabLignesRef[index]["prixTHT"] = tabLignesRef[index]["prixTTTC"] = null;
		
		lignesproduit.childElements().each(function(cellule) {
			cellule.nbligne = index;
			// stockage du champ prix unitaire HT
			if(cellule.hasClassName('prixUHT')) tabLignesRef[index]["prixUHT"] = cellule.firstChild;
			// stockage du champ unitaire TTC
			if(cellule.hasClassName('prixUTTC')) tabLignesRef[index]["prixUTTC"] = cellule.firstChild;
			// stockage du champ quantité
			if(cellule.hasClassName('qtt')) tabLignesRef[index]["qtt"] = cellule.lastChild.nodeValue;
			// stockage du champ total HT
			if(cellule.hasClassName('prixTHT')) tabLignesRef[index]["prixTHT"] = cellule.firstChild;
			// stockage du champ total TTC
			if(cellule.hasClassName('prixTTTC')) tabLignesRef[index]["prixTTTC"] = cellule.firstChild;
			
			
			// calcule des prix par ligne en fonction des quantités
			if(cellule.hasClassName('qtt')) {
				cellule.lastChild.onchange = function() { $('formPanier').submit(); }
				cellule.lastChild.onkeyup = function() {
							
					var n = this.parentNode.nbligne;
					// suppression des totaux de la ligne aux totaux globaux
					if(eltTtlHT != null) {
						eltTtlHT.nodeValue = traitePrix(eltTtlHT.nodeValue, 'calcule') - traitePrix(tabLignesRef[n]["prixTHT"].nodeValue, 'calcule')
					}
					if(eltTtlTTC != null) {
						eltTtlTTC.nodeValue = traitePrix(eltTtlTTC.nodeValue, 'calcule') - traitePrix(tabLignesRef[n]["prixTTTC"].nodeValue, 'calcule')
					}
					
					// modification des totaux de la ligne
					if(tabLignesRef[n]["prixTHT"] != null) 
						tabLignesRef[n]["prixTHT"].nodeValue = traitePrix(this.value * traitePrix(tabLignesRef[n]["prixUHT"].nodeValue,'calcule'),'affiche');
					if(tabLignesRef[n]["prixTTTC"] != null) 
						tabLignesRef[n]["prixTTTC"].nodeValue = traitePrix(this.value * traitePrix(tabLignesRef[n]["prixUTTC"].nodeValue,'calcule'),'affiche');
					
					// ajout des nouveaux totaux de la ligne aux totaux globaux
					if(eltTtlHT != null) 
						eltTtlHT.nodeValue = traitePrix(traitePrix(eltTtlHT.nodeValue, 'calcule') + traitePrix(tabLignesRef[n]["prixTHT"].nodeValue, 'calcule'), 'affiche');
					if(eltTtlTTC != null) 
						eltTtlTTC.nodeValue = traitePrix(traitePrix(eltTtlTTC.nodeValue, 'calcule') + traitePrix(tabLignesRef[n]["prixTTTC"].nodeValue, 'calcule'), 'affiche');
					
					// modification du total du short basket
					if($('totalshortbasket'))  {
						if($('totalshortbasket').hasClassName('HTshortbasket')) {
							$('totalshortbasket').firstChild.nodeValue = eltTtlHT.nodeValue;
						}
						if($('totalshortbasket').hasClassName('TTCshortbasket')) {
							$('totalshortbasket').firstChild.nodeValue = eltTtlTTC.nodeValue;
						}
					}
					
					// modification du nombre de produits du short basket
					if($('nbproduitshortbasket')) {
						var ttlNbProduits = 0;
						$$('tbody .ligneproduit').each(function(lignesproduit, index) {
							lignesproduit.childElements().each(function(cellule) {
								if(cellule.hasClassName('qtt')) ttlNbProduits += parseInt(cellule.lastChild.value);
							});
						});
						$('nbproduitshortbasket').firstChild.nodeValue = ttlNbProduits;
					}
				}
			}
		});
	});
}
	
function addLoadListenerPanierCalcul(func) {
	if (window.addEventListener) {
		window.addEventListener("load", func, false);
	} else if (document.addEventListener) {
		document.addEventListener("load", func, false);
	} else if (window.attachEvent) {
		window.attachEvent("onload", func);
	}
}

if (document.getElementById && document.createTextNode) {
	addLoadListenerPanierCalcul(function() {
		if($('tablo_panier')) {
			calcule = false;
			$$('tbody .qtt').each(function(n) {
				if(n.lastChild.nodeName == 'INPUT') {
					calcule = true;
					recalculePanier();
				}
			});
			
		}
	});
}