
////////////////////////////////////////////////
// ZBASKET.JS ///v1.2/// zagraph.com DR 2009 //
//////////////////////////////////////////////
// Gestion du panier coté JS fonctionne avec zbasket.class.php
////////////////////////////////////////////

// ATTENTION : ce script fait des calculs de totaux de produit !
// Il ne doit jamais faire autre chose que de la multiplication (quantite * prix_unitaire_ttc)
// Jamais de vue de tva ou de calcul de tva, jamais d'arrondi, toujours affichage du prix ttc !!
// par contre, une fonction pour un affichage en FR du prix (ex: 13 € ou 14,5 € pas de 15,00 €) peut etre utilisé.

// generation du div de la pop zbasket_pop

var ComposantPanierPop = Class.create();
 
ComposantPanierPop.prototype = {

	// INIT
	initialize: function(mode_vue) {
		// generation basket
		zbasket = this;
		if(mode_vue == 'fixed_and_add') {
			zbasket.action_attente = "add";
			zbasket.mode_vue = "fixed";
		} else if(mode_vue == 'relative_and_add') {
			zbasket.action_attente = "add";
			zbasket.mode_vue = "relative";
		} else {
			zbasket.action_attente = "";
			zbasket.mode_vue = mode_vue;
		}
		this.generation();
		this.nb_item = 0;
		this.montant_total_ttc = 0;
		this.devise = 0;
		this.ligne_produit = new Array();
		/* modele ligne_produit obj
		this.ligne_produit[i] = new Objet();
		this.ligne_produit[i].zsh_produit_id = 0;
		this.ligne_produit[i].ico = 0;
		this.ligne_produit[i].code_article = 0;
		this.ligne_produit[i].designation = 0;
		this.ligne_produit[i].quantite = 0;
		this.ligne_produit[i].prix_unitaire_ttc = 0;
		*/
	} ,

	// Generation du div basket_pop_zoom
	generation: function(){
		if(zbasket.mode_vue == "fixed") position="display:none;position:fixed;left: 50%;margin-left: -125px;top: 50%;margin-top: -150px;";
		else if(zbasket.mode_vue == "relative") position="display:block-inline;";
		else position="";
		var code = '';
		code += '<div id=basket_pop_zoom style="'+ position +'">';
		code += '	<div id=oeuvre_panier style="">';
		code += '		<div id=oeuvre_panier_titre>';
		if(zbasket.mode_vue == "fixed") code += '			<a href="javascript:zbasket.hide();"><img id=basket_pop_zoom_btn_fermer alt="" src="'+CONF_URL_IMG+'/btn_fermer_mini_b.png"/></a>';
		code += '			'+ZSH__BASKET__POP_TITRE;
		code += '		</div>';
		code += '		<div id=oeuvre_panier_content>';
		code += '			<div id=div_basket_zone>';
		code += '				<div id=div_basket style="display:none;"></div>';
		code += '				<div id=div_basket_loader style="text-align:center;margin-top:80px;"><img src="'+CONF_URL_IMG+'/loading.gif"><br><br> '+ZSH__BASKET__POP_MES_CHARGEMENT+'<br></div>';
		code += '			</div>';
		code += '		</div>';
		code += '		<div id=oeuvre_panier_nb_item style="display:none;text-align:left;"></div>';
		code += '		<div id=oeuvre_panier_total style="display:none;text-align:right;margin-right:15px;"></div>';
		code += '		<div id=oeuvre_panier_btn style="display:none;"><a href="'+CONF_URL_ZSHOP+'/vente_en_ligne.php"">'+ZSH__BASKET__POP_BTN_FINALISER+'</a></div>';
		
		if(zbasket.mode_vue == "fixed") {
			code += '		<div id=oeuvre_panier_btn_separation style="display:none;text-align:center;">'+ZSH__BASKET__POP_OU+'</div>';
			code += '		<div id=oeuvre_panier_btn2 style="display:none;"><a href="javascript:zbasket.hide();">'+ZSH__BASKET__POP_BTN_FERMER+'</a></div>';
		}
		else if(zbasket.mode_vue == "relative") {
			code += '		<div id=oeuvre_panier_btn_separation style="display:none;"></div>';
			code += '		<div id=oeuvre_panier_btn2 style="display:none;"></div>';
		}
		code += '	</div>';
		code += '</div>';
		document.write(code);
		if(zbasket.mode_vue == "relative" && zbasket.action_attente == '') {
			zbasket.action_attente = '';
			zbasket.open();
		}
	} ,
	
	ajout_produit_au_panier: function(produit_id){
		zbasket.show_reload_view();
		crtl_url = CONF_URL_ZSHOP + '/zbasket.php';
		new Ajax.Request(crtl_url, {
				method: 'post',
				encoding: 'UTF-8',
				parameters: 'action=zbasket_ajout_produit&produit_id=' + produit_id,
				requestHeaders: {Accept: 'text/x-json'},
				onSuccess: zbasket.maj_data,
				onFailure: function(){
					alert('Ajax Request Error');
				}
		} );
	} ,
	
	open: function(){
		zbasket.show_reload_view();
		// Lance la requette ajax
		crtl_url = CONF_URL_ZSHOP + '/zbasket.php';
		new Ajax.Request(crtl_url, {
				method: 'post',
				encoding: 'UTF-8',
				parameters: 'action=zbasket_get_data',
				requestHeaders: {Accept: 'text/x-json'},
				onSuccess: zbasket.maj_data,
				onFailure: function(){
					alert('Ajax Request Error');
				}
		} );
	} ,
	
	show_reload_view: function(){
		// Prepa la vue de la pop en mode chargement data contenu
		$('div_basket').hide();
		$('oeuvre_panier_total').hide();
		$('oeuvre_panier_nb_item').hide();
		$('oeuvre_panier_btn').hide();
		$('oeuvre_panier_btn_separation').hide();
		$('oeuvre_panier_btn2').hide();
		$('div_basket_loader').show();
		if(zbasket.mode_vue == "fixed") {
			$('div_basket_zone').style.height = '324px';		 
			$('oeuvre_panier_content').style.height = '324px';
		}
		if(zbasket.mode_vue == "relative") {
			$('div_basket_zone').style.height = '324px';		 
			$('oeuvre_panier_content').style.height = '324px';
		}
		// Rend visible la pop
		$('basket_pop_zoom').show();
	} ,

	show_panier_vide_view: function(){
		// Prepa la vue de la pop en mode panier vide
		if(zbasket.mode_vue == "fixed") {
			$('div_basket_zone').style.height = '289px';		 
			$('oeuvre_panier_content').style.height = '289px';
			$('oeuvre_panier_btn2').show();
		}
		if(zbasket.mode_vue == "relative") {
			$('div_basket_zone').style.height = '324px';		 
			$('oeuvre_panier_content').style.height = '324px';
			$('oeuvre_panier_btn2').hide();
		}
		mini_basket = '<div style="text-align:center;margin-top:120px;"><b>'+ZSH__BASKET__POP_MES_PANIER_VIDE+'</b></div>';
		$('oeuvre_panier_total').hide();
		$('oeuvre_panier_nb_item').hide();
		$('oeuvre_panier_btn').hide();
		$('oeuvre_panier_btn_separation').hide();
		$('div_basket').innerHTML = mini_basket;
		$('div_basket_loader').hide();
		$('div_basket').show();
		$('basket_pop_zoom').show();
		
	} ,

	show_panier_produit_view: function(){
		// Prepa la vue de la pop en mode vue des produits
		if(zbasket.mode_vue == "fixed") {
			$('div_basket_zone').style.height = '208px';		 
			$('oeuvre_panier_content').style.height = '208px';
			$('oeuvre_panier_btn_separation').show();
			$('oeuvre_panier_btn2').show();
		}
		if(zbasket.mode_vue == "relative") {
			$('div_basket_zone').style.height = '264px';		 
			$('oeuvre_panier_content').style.height = '264px';
			$('oeuvre_panier_btn_separation').hide();
			$('oeuvre_panier_btn2').hide();
		}
		$('oeuvre_panier_nb_item').show();
		$('oeuvre_panier_total').show();
		$('div_basket_loader').hide();
		$('div_basket').show();
		$('basket_pop_zoom').show();
	} ,
	
	hide: function(){
		$('basket_pop_zoom').hide();
	} ,
	
	maj_data: function(transport, json){
		// met à jour les datas du tableau js du panier en vue de calcul et affichage
		json = transport.responseText.evalJSON();
		obj = eval(json.obj_requester);
		
		zbasket.nb_item = json.nb_item;
		// TODO : voir le .replace(",",".") en dessous
		zbasket.montant_total_ttc = json.montant_total_ttc;//.replace(",",".")
		zbasket.devise = json.devise;
		zbasket.ligne_produit = new Array();
		for (var i = 0; i < json.ligne_produit.length; i++) {
			if(json.ligne_produit[i].quantite != 0){
				zbasket.ligne_produit[i] = new Object();
				zbasket.ligne_produit[i].zsh_produit_id = json.ligne_produit[i].zsh_produit_id;
				zbasket.ligne_produit[i].ico = json.ligne_produit[i].ico;
				zbasket.ligne_produit[i].code_article = json.ligne_produit[i].code_article;
				zbasket.ligne_produit[i].designation = json.ligne_produit[i].designation;
				zbasket.ligne_produit[i].quantite = json.ligne_produit[i].quantite;
				zbasket.ligne_produit[i].prix_unitaire_ttc = json.ligne_produit[i].prix_unitaire_ttc;//.replace(",",".")
			}
		}
		zbasket.maj_vue();
	},

	// genere les lignes produit
	maj_vue: function(){
		mini_basket = '';
		// affiche panier
		for (var i = 0; i < zbasket.ligne_produit.length; i++) {
			mini_basket  += '<div id="oeuvre_panier_grand_format_produit_'+zbasket.ligne_produit[i].zsh_produit_id+'" class=oeuvre_panier_grand_format_produit style="text-align:left;">';
			mini_basket  += '	<div class="oeuvre_panier_btn_quantite">';
			mini_basket  += '	<img src="'+CONF_URL_ZSHOP_IMG+'/picto_qtx.jpg" border=0 usemap="#map_basket_'+zbasket.ligne_produit[i].zsh_produit_id+'">';
			mini_basket  += '	<map name="map_basket_'+zbasket.ligne_produit[i].zsh_produit_id+'">';
			mini_basket  += '		<area shape="rect" coords="0,0,19,19" href="javascript:zbasket.change_quantite_p('+zbasket.ligne_produit[i].zsh_produit_id+');" style="cursor:pointer;">';
			mini_basket  += '		<area shape="rect" coords="20,0,39,19" href="javascript:zbasket.change_quantite_m('+zbasket.ligne_produit[i].zsh_produit_id+');" style="cursor:pointer;">';
			mini_basket  += '	</map> ';
			mini_basket  += '	</div>';
			mini_basket  += '	<div class="oeuvre_panier_btn_quantite_0">';
			mini_basket  += '		<a href="javascript:zbasket.supprim_item('+zbasket.ligne_produit[i].zsh_produit_id+');"><img src="'+CONF_URL_ZSHOP_IMG+'/ico_delete_16x16.png" border=0 align=right></a>';
			mini_basket  += '	</div>';
			mini_basket  += '	<div class=\"oeuvre_panier_prod_data\">';
			mini_basket  += '		<div class="oeuvre_panier_prod_nom">'+zbasket.ligne_produit[i].designation+'</div>';
			mini_basket  += '		<div id="zbasket_produit_div_prix_'+zbasket.ligne_produit[i].zsh_produit_id+'" class=prix style="padding-left:42px;">'+zbasket.ligne_produit[i].quantite + ' x '+new Number(zbasket.ligne_produit[i].prix_unitaire_ttc).toFixed(2).replace(".",",")+' '+zbasket.devise+';</div>';
			mini_basket  += '	</div>';
			mini_basket  += '</div>';
			mini_basket  += '	<form name="zbasket_form_'+zbasket.ligne_produit[i].zsh_produit_id+'" id="zbasket_form_'+zbasket.ligne_produit[i].zsh_produit_id+'">';
			mini_basket  += '	<input type="hidden" id="zbasket_produit_produit_id_'+zbasket.ligne_produit[i].zsh_produit_id+'" name="zbasket_produit_produit_id_'+zbasket.ligne_produit[i].zsh_produit_id+'" value="'+zbasket.ligne_produit[i].zsh_produit_id+'">';
			mini_basket  += '	<input type="hidden" id="zbasket_produit_quantite_'+zbasket.ligne_produit[i].zsh_produit_id+'" name="zbasket_produit_quantite_'+zbasket.ligne_produit[i].zsh_produit_id+'" value="'+zbasket.ligne_produit[i].quantite+'">';
			mini_basket  += '	<input type="hidden" id="zbasket_produit_prix_unitaire_ttc_'+zbasket.ligne_produit[i].zsh_produit_id+'" name="zbasket_produit_prix_unitaire_ttc_'+zbasket.ligne_produit[i].zsh_produit_id+'" value="'+zbasket.ligne_produit[i].prix_unitaire_ttc+'">';
			mini_basket  += '	</form>';
			$('oeuvre_panier_btn').show();
			$('oeuvre_panier_btn_separation').show();
			$('oeuvre_panier_btn2').show();
			
		}
		if(zbasket.ligne_produit.length == 0){
			zbasket.show_panier_vide_view();
		}else{
			$('oeuvre_panier_total').innerHTML = ZSH__BASKET__POP_MES_TOTAL +' : ' + new Number(zbasket.montant_total_ttc).toFixed(2).replace(".",",") + ' '+ zbasket.devise +'';
			if(zbasket.nb_item < 2) $('oeuvre_panier_nb_item').innerHTML = zbasket.nb_item + ' ' + ZSH__BASKET__POP_MES_ARTICLE;
			else $('oeuvre_panier_nb_item').innerHTML = zbasket.nb_item + ' ' + ZSH__BASKET__POP_MES_ARTICLES;
			$('div_basket').innerHTML = mini_basket;
			zbasket.show_panier_produit_view();
		}

			
	} ,
	
	calcul_quantite: function(){
		zbasket.nb_item = 0;
		zbasket.montant_total_ttc = 0;
		index_a_sup = "";
		for (var i = 0; i < zbasket.ligne_produit.length; i++) {
			if(zbasket.ligne_produit[i].quantite == 0){
				// prepa de l'index à sup (a faire apres pour ne pas perturber le calcul)
				index_a_sup = i;
			}else{
				var q = new Number( zbasket.ligne_produit[i].quantite );
				var x_a = zbasket.ligne_produit[i].prix_unitaire_ttc;
				//var x = new Number( zbasket.ligne_produit[i].prix_unitaire_ttc.replace(",",".") ).toFixed(2);
				var x = new Number( zbasket.ligne_produit[i].prix_unitaire_ttc ).toFixed(2);
				var t = new Number( q * x ).toFixed(2);
				//var t = new Number( q * x ).toFixed(2).replace(".",",");
				zbasket.ligne_produit[i].quantite = q;
				zbasket.nb_item = ( zbasket.nb_item + q );
				zbasket.montant_total_ttc = ( zbasket.montant_total_ttc + ( x * q) );
			}
			//alert("tot:"+zbasket.montant_total_ttc);
		}
		
		// si supprim de l'obj data ligne_produit de ce produit
		if(index_a_sup != ""){
			zbasket.ligne_produit.splice(index_a_sup,1);
		}
		
		//alert("total:"+zbasket.montant_total_ttc);
	},
	
	change_quantite: function(produit_id,quantite){
	//alert('zou:'+index+','+produit_id+','+quantite);
		crtl_url = CONF_URL_ZSHOP + '/zbasket.php';
		new Ajax.Request(crtl_url, {
				method: 'post',
				encoding: 'UTF-8',
				parameters: 'action=zbasket_change_quantite&produit_id=' + produit_id +'&quantite=' + quantite,
				requestHeaders: {Accept: 'text/x-json'},
				onSuccess: zbasket.change_quantite_retour,
				onFailure: function(){
					alert('Ajax Request Error');
				}
		} );
	} ,
	
	change_quantite_retour: function(transport, json){
		//alert('modif quantite : retour');
	} ,
	
	change_quantite_p: function(produit_id){
		
		// recherche l'index du produit dans le tableau js
		for (var i = 0; i < zbasket.ligne_produit.length; i++) {
			if(zbasket.ligne_produit[i].zsh_produit_id == produit_id){
				index = i;
			}
		}
		// quantite +1
		quantite = (parseInt($('zbasket_produit_quantite_'+produit_id).value) + 1);
		// met à jour la quantité du produit touché
		zbasket.ligne_produit[index].quantite = quantite;
		// mise a jour du cook de ce produit
		zbasket.change_quantite(produit_id,quantite);
		// calcul du nombre de item et du total ttc
		zbasket.calcul_quantite();
		$('zbasket_produit_quantite_'+produit_id).value = quantite;
		// met a jour le div quantite / prix
		$('zbasket_produit_div_prix_'+produit_id).innerHTML = zbasket.ligne_produit[index].quantite + ' x '+new Number(zbasket.ligne_produit[index].prix_unitaire_ttc).toFixed(2).replace(".",",")+' '+zbasket.devise;
		// met a jout le total d'article du panier
		if(zbasket.nb_item < 2) $('oeuvre_panier_nb_item').innerHTML = zbasket.nb_item + ' ' + ZSH__BASKET__POP_MES_ARTICLE;
		else $('oeuvre_panier_nb_item').innerHTML = zbasket.nb_item + ' ' + ZSH__BASKET__POP_MES_ARTICLES;
		// met a jour le total ttc du panier
		$('oeuvre_panier_total').innerHTML = ZSH__BASKET__POP_MES_TOTAL + ' : ' + new Number(zbasket.montant_total_ttc).toFixed(2).replace(".",",") + ' '+ zbasket.devise +'';
	} ,
	
	change_quantite_m: function(produit_id){
		if($('zbasket_produit_quantite_'+produit_id).value!=0){
			// recherche l'index du produit dans le tableau js
			for (var i = 0; i < zbasket.ligne_produit.length; i++) {
				if(zbasket.ligne_produit[i].zsh_produit_id == produit_id){
					index = i;
				}
			}
			// quantite -1
			quantite = (parseInt($('zbasket_produit_quantite_'+produit_id).value) - 1);
			// met à jour la quantité du produit touché
			zbasket.ligne_produit[index].quantite = quantite;
			// mise a jour du cook de ce produit
			zbasket.change_quantite(produit_id,quantite);
			// calcul du nombre de item et du total ttc
			zbasket.calcul_quantite();
			$('zbasket_produit_quantite_'+produit_id).value = quantite;
			
			// test la quantite de ce produit
			if(quantite == 0){
				// si plus de produit dans le panier
				if(zbasket.nb_item == 0){
					zbasket.show_panier_vide_view();
				}else{
					// sup du div de la ligne_produit
					$('div_basket').removeChild($('oeuvre_panier_grand_format_produit_'+produit_id));
					// met a jout le total d'article du panier
					if(zbasket.nb_item < 2) $('oeuvre_panier_nb_item').innerHTML = zbasket.nb_item + ' ' + ZSH__BASKET__POP_MES_ARTICLE;
					else $('oeuvre_panier_nb_item').innerHTML = zbasket.nb_item + ' ' + ZSH__BASKET__POP_MES_ARTICLES;
					// met a jour le total ttc du panier
					$('oeuvre_panier_total').innerHTML = ZSH__BASKET__POP_MES_TOTAL + ' : ' + new Number(zbasket.montant_total_ttc).toFixed(2).replace(".",",") + ' '+ zbasket.devise +'';
				}
			}else{
				// met a jour le div quantite / prix
				$('zbasket_produit_div_prix_'+produit_id).innerHTML = zbasket.ligne_produit[index].quantite + ' x '+new Number(zbasket.ligne_produit[index].prix_unitaire_ttc).toFixed(2).replace(".",",")+' '+zbasket.devise;
				// met a jout le total d'article du panier
				if(zbasket.nb_item < 2) $('oeuvre_panier_nb_item').innerHTML = zbasket.nb_item + ' ' + ZSH__BASKET__POP_MES_ARTICLE;
				else $('oeuvre_panier_nb_item').innerHTML = zbasket.nb_item + ' ' + ZSH__BASKET__POP_MES_ARTICLES;
				// met a jour le total ttc du panier
				$('oeuvre_panier_total').innerHTML = ZSH__BASKET__POP_MES_TOTAL + ' : ' + new Number(zbasket.montant_total_ttc).toFixed(2).replace(".",",") + ' '+ zbasket.devise +'';
				
			}
		}
	} ,
	
	supprim_item: function(produit_id){
		// mise a jour du cook de ce produit
		zbasket.change_quantite(produit_id,0);
		// recherche l'index du produit dans le tableau js
		for (var i = 0; i < zbasket.ligne_produit.length; i++) {
			if(zbasket.ligne_produit[i].zsh_produit_id == produit_id){
				index = i;
			}
		}
		// met à jour la quantité du produit touché
		zbasket.ligne_produit[index].quantite = 0;
		// calcul du nombre de item et du total ttc
		zbasket.calcul_quantite();
		$('zbasket_produit_quantite_'+produit_id).value = 0;
			
		// si plus de produit dans le panier
		if(zbasket.nb_item == 0){
			zbasket.show_panier_vide_view();
		
		}else{
			// sup du div de la ligne_produit
			$('div_basket').removeChild($('oeuvre_panier_grand_format_produit_'+produit_id));
			// met a jout le total d'article du panier
			if(zbasket.nb_item < 2) $('oeuvre_panier_nb_item').innerHTML = zbasket.nb_item + ' ' + ZSH__BASKET__POP_MES_ARTICLE;
			else $('oeuvre_panier_nb_item').innerHTML = zbasket.nb_item + ' ' + ZSH__BASKET__POP_MES_ARTICLES;
			// met a jour le total ttc du panier
			$('oeuvre_panier_total').innerHTML = ZSH__BASKET__POP_MES_TOTAL + ' : ' + new Number(zbasket.montant_total_ttc).toFixed(2).replace(".",",") + ' '+ zbasket.devise +'';
		}
		
	}
	
}




