// Oggetto carrello

// Questo è l'oggetto che gestisce il carrello

var Carrello = {
	
	Borse: '',
	ContaBorse : 0,
	Slider : 0,
	Totale : 0,
	Spedizione :0,
	Paese: '',
	
	StartCarrello: function()
	{
		this.Borse = {};
			
		$('Q2').setStyle('display', 'none');
		$('Q2').set('styles',{'top':'21px','height':'417px','width':'836px','left':'87px'});
		  
		var shoppingcart = new Element('div',{'id':'shoppingcart','text':'Shopping cart'});
		shoppingcart.inject('Q2');
		
		var greybar_carrello = new Element('div',{'id':'greybar_carrello'});
		
		var buynow = new Element('div',{'id':'buynow'});
		var buynow_button = new Element('a',{'class':'button', 'href':'#'});
		var buynow_text = new Element('span',{'text':'BUY NOW'});
		buynow_text.inject(buynow_button);
		buynow_button.inject(buynow);
		buynow.inject(greybar_carrello);
		buynow.addEvents({
					click:function(){
									if (Carrello.ContaBorse > 0)
											{
											if (Carrello.Paese !== '')
												{
												if (!Login.IsLogged())
												//if (Login.IsLogged())
													{
													Carrello.Nascondi();
													Login.Mostra();
													//Sito.CambiaColore();
													}
												else
													{
													Carrello.Acquista();
													}
												}
											else
												{
												alert('Select your country.');
												}
											}
										else
											{
											alert('The basket is empty.');
											}
									}
								  });		
		
		var back = new Element('div',{'id':'back'});
		var back_button = new Element('a',{'class':'button','href':'#'});
		var back_text = new Element('span',{'text':'Another bag?'});
		back_text.inject(back_button);
		back_button.inject(back);
		back.inject(greybar_carrello);
		back.addEvents({
					click:function(){
									Carrello.Nascondi();
									Shop.Mostra();
									//Sito.CambiaColore();
									}
								  });
		
		greybar_carrello.inject('Q2');
		
		var box_carrello = new Element('div',{'id':'box_carrello'});
		var contenuto_carrello = new Element('div',{'id':'contenuto_carrello'});
		contenuto_carrello.inject(box_carrello);
		
		var scrollbar = new Element('div',{'id':'scrollbar','class':'scrollbar-vert'});
		var handle = new Element('div',{'id':'handle','class':'handle-vert'});
		handle.inject(scrollbar);
		scrollbar.inject(box_carrello);
		
		var clear = new Element('div',{'class':'clear'});
		clear.inject(box_carrello);
		
		var totale_div = new Element('div',{'id':'totale_div'});
		
		var subtotale_text = new Element('div',{'id':'subtotale_text','text':'SUBTOTAL 0.00'});
		subtotale_text.inject(totale_div);
		
		var shipping_text = new Element('div',{'id':'shipping_text','text':'shipping costs for'});
		shipping_text.inject(totale_div);
		
		var totale_text = new Element('div',{'id':'totale_text','text':'TOTAL 0.00'});
		totale_text.inject(totale_div);
		
		var shipping = new Element('div',{'id':'shipping'});
		shipping.inject(totale_div);
		
		var shipping_price = new Element('div',{'id':'shipping_price','text':'EUR 0.00'});
		shipping_price.inject(totale_div);
		
		var delivery = new Element('div',{'id':'delivery','text':'3 - 9 days'});
		delivery.inject(totale_div);
		
		totale_div.inject('Q2');
		
		box_carrello.inject('Q2');
		
		Pagamento.StartPagamento($('Q2'));
		
		this.CaricaPaesi();
		this.CaricaZone();
		this.makeScrollbar();
		
		},

	makeScrollbar: function ()
	{
	// Deve essere uguale al numero dei pixel della singola riga
	var steps = 30;
	this.Slider = new Slider($('scrollbar'), $('handle'), {	
		steps: steps,
		mode: 'vertical',
		onChange: function(step){
			/*var x = 0;
			var y = step;*/
			$('contenuto_carrello').setStyle('top',(-1)*(step)*(Carrello.ContaBorse));
		}
	}).set(0);
		$('contenuto_carrello').addEvent('mousewheel', function(e){	
			e = new Event(e).stop();
			var step = Carrello.Slider.step - e.wheel;	
			Carrello.Slider.set(step);					
		});
		$('scrollbar').addEvent('mousewheel', function(e){	
			e = new Event(e).stop();
			var step = this.Slider.step - e.wheel;	
			Carrello.Slider.set(step);					
		});
	$(document.body).addEvent('mouseleave',function(){Carrello.Slider.drag.stop();});
	},
	
	Acquista: function()
	{
		
		var JSONRequest = '{ "email" : "' + Login.email + '"}';
	
		var myRequest = new Request({method: 'get',
								 url: 'php/dati.php',
								 onSuccess: function(responseText, responseXML)
									{
									var myResponse = JSON.decode(responseText);
									if (myResponse.result)
										{
										var dati = [];
										dati.nome = myResponse.dati[0].nome;
										dati.cognome = myResponse.dati[0].cognome;
										dati.via = myResponse.dati[0].via;
										dati.numero = myResponse.dati[0].numero;
										dati.cap = myResponse.dati[0].cap;
										dati.citta = myResponse.dati[0].citta;
										dati.paese = 'IT';
										dati.email = Login.email;
										
										Pagamento.RiempiDatiUtente(dati);
										Carrello.Salva_e_Paga();
																				
										}
									else
										{											
											Carrello.ErroreDB();
										}									
									},
								 onFailure: function(xhr)
									{
										Carrello.ErroreDB();
									},
								 onCancel: function()
									{										
										Carrello.ErroreDB();
									}
									});
									
	myRequest.send('user='+escape(JSONRequest));
	
	},
	
	SalvaCarrello: function()
	{
		// Salvo qui ogni volta il cookie
		Cookie.dispose('carrello');
		Cookie.write('carrello', JSON.encode(this.Borse));	
	},
	
	AggiornaTotale: function()
	{
		var TotNoSpe = this.Totale;
		var TotSpe = this.Totale + this.Spedizione;
		$('subtotale_text').set('text','SUBTOTAL '+TotNoSpe.toFixed(2));
		$('totale_text').set('text','TOTAL '+TotSpe.toFixed(2));
	},
	
    Elimina: function(borsa_string)
	{
		
		this.Totale = this.Totale - this.Borse[borsa_string+'_prezzo'];
		delete this.Borse[borsa_string];
		delete this.Borse[borsa_string+'_prezzo'];

		$(borsa_string + '_div' ).dispose();
		
		this.ContaBorse = this.ContaBorse -1;
		
		$('bag_n').set('value',Carrello.Contatore());
		
		this.AggiornaTotale();
		this.SalvaCarrello();
	},

	Aggiungi: function(borsa_string, prezzo)
	{
		this.ContaBorse = this.ContaBorse+1;
		this.Totale = this.Totale + parseFloat(prezzo);
		this.Borse[borsa_string] = borsa_string;
		this.Borse[borsa_string+'_prezzo'] = prezzo;
		
		var NuovaBorsa = new Element('div',{'id':borsa_string + '_div','class':'basket_bag'});
		var disegno = new Element('div',{'id':borsa_string + '_img','class':'image_bag'});
		var i;
		for (i=0; i<borsa_string.length;i++)
			{
			var colore =  this.Borse[borsa_string].charAt(i);
			if  (colore !== "_")
				{
					var image_string = '';
					if (i===0)
						{
							image_string = 'side_' + Shop.MyBag.colori[colore] +'_1';
						}
					else
						if (i===6)
							{
								image_string = 'side_' + Shop.MyBag.colori[colore] +'_2';
							}
						else
							{
								image_string = 'expansion_' + Shop.MyBag.colori[colore];
							}
					
					var nuovafascia = new Element('div',{'id':borsa_string + '_f_' + i,'class':'bag_part'});
					var nuovafascia_img = new Element('img',{'src':'images/shop/bag/'+image_string+'.gif'});
					nuovafascia_img.inject(nuovafascia);
					nuovafascia.inject(disegno);
				}
			}
		disegno.inject(NuovaBorsa);
		
		var testo = new Element('div',{'id':borsa_string + '_text','class':'text_bag','text':'product: ' + 'bag 2.0'});
		testo.inject(NuovaBorsa);
		
		var delete_bag =new Element('div',{'id':borsa_string + '_delete','class':'delete_bag','text':'delete'});
		delete_bag.inject(NuovaBorsa);
		
		delete_bag.addEvents({
					click:function(){
									var myID = this.getProperty('id');
									Carrello.Elimina(myID.substr(0,7));
									}
								  });
		
		var price = new Element('div',{'id':borsa_string + '_price','class':'price_bag','text':'EUR '+prezzo+'.00'});
		price.inject(NuovaBorsa);
			
		$('bag_n').set('value',Carrello.Contatore());
			
		NuovaBorsa.inject('contenuto_carrello');
		Shop.MyBag.SetBag(Shop.MyBag.bag_string_default);
		$('ext_n').set('value',Shop.MyBag.Fasce());
		Shop.EsponiPrezzo();
	},
	
	Contatore: function()
	{
		return this.ContaBorse;
	},
	
	Mostra: function()
	{
		$('Q2').setStyle('display', 'inline');
		$$('Q2').each(function(el){
									el.setStyle('display', 'inline');	
								  });		
	},
	
	Nascondi: function()
	{
		$('Q2').setStyle('display', 'none');
		$$('Q2').each(function(el){
									el.setStyle('display', 'none');	
								  });	
	},
	
	Salva_e_Paga: function()
	{
	
		var OrdineJSON = '{ "cliente" : "' + Login.email + '", "paese" : "' + Carrello.Paese + '","borse" : [';
		
		var borsa_tmp = '';
		var borsa_prezzo = '';
		var fasce = 0;
		var borsa_pay = '';
		var Dato = '';
		// Maledetti array associativi!!!!
		for (Dato in Carrello.Borse)
			{
			if (Carrello.Borse.hasOwnProperty(Dato))
				{
					if (Dato.length < 8) 
						{
						borsa_tmp = Carrello.Borse[Dato];
						if (borsa_tmp !== '')
							{
							OrdineJSON = OrdineJSON + '"' + Carrello.Borse[Dato] + '",';
							}
						}
					else
						{
						if (Dato.length > 13) 
							{
							
							borsa_prezzo = Carrello.Borse[Dato];
							if (borsa_prezzo!== '')
								{
								borsa_pay = borsa_tmp.replace(/[_]/ig,"");
								fasce = borsa_pay.length - 2;
								Pagamento.AggiungiOggetto('Bag 2.0 with '+ fasce + ' Expansion ('+ borsa_pay +')',borsa_prezzo.toFixed(2));
								}
							}
						}
				}
			}
			
		// Tolgo l'ultima virgola
		OrdineJSON = OrdineJSON.slice(0, -1);
		OrdineJSON = OrdineJSON + ']}';
		
		var myRequest = new Request({method: 'get',
						 url: 'php/order.php',
						 onSuccess: function(responseText, responseXML)
							{	
								var myResponse = JSON.decode(responseText);
								
								if (myResponse.result)
									{
									/* #### DEBUG 
									Metti il carrello in attesa
									*/
																			
									Pagamento.AggiungiCostoSpedizione(Carrello.Spedizione.toFixed(2));
									Pagamento.AssegnaURLRitorno(myResponse.id);
									Pagamento.AvviaPagamento();
									
									}
								else
									{
										Carrello.ErroreDB();
									}
							},
						 onFailure: function(xhr)
							{
								Carrello.ErroreDB();
							},
						 onCancel: function()
							{
								Carrello.ErroreDB();
							}
							});
							
		myRequest.send('ordine='+escape(OrdineJSON));
	
	},
	
	CaricaCarrello: function()
	{
	
		this.ContaBorse = 0;
		this.Totale = 0;
		this.Spedizione = 0;
	
			var tmb_Borse = JSON.decode(Cookie.read('carrello'));
			
			var borsa_tmp = '';
			var borsa_prezzo = '';
			var Dato = '';
			
			for (Dato in tmb_Borse)
				{
				if (tmb_Borse.hasOwnProperty(Dato))
					{
						if (Dato.length < 8) 
							{
							borsa_tmp = tmb_Borse[Dato];
							}
						else
							{
							if (Dato.length > 13) 
								{
								borsa_prezzo = tmb_Borse[Dato];
								this.Aggiungi(borsa_tmp,borsa_prezzo);
								}
							}
					}
				}
			
		this.AggiornaTotale();
	},
	
	CaricaPrezzi: function()
	{
		var JSONRequest = '{"prezzo":"prezzo"}';
		var myRequest = new Request({method: 'get',
									 url: 'php/prezzo.php',
									 onSuccess: function(responseText, responseXML)
										{									
										var myResponse = JSON.decode(responseText);
										if (myResponse.result)
											{
												Shop.MyBag.SetPrice(parseInt(myResponse.dati[0].PrezzoBorsa,10),parseInt(myResponse.dati[0].PrezzoFasce,10));
												Shop.MyBag.CalcolaPrezzo();
												Shop.EsponiPrezzo();
											}
										else
											{
												Carrello.ErroreDB();
											}
										},
									 onFailure: function(xhr)
										{
										Carrello.ErroreDB();
										},
									 onCancel: function()
										{
										Carrello.ErroreDB();
										}
									});
									
		myRequest.send('prezzo='+escape(JSONRequest));
	},
	
	CaricaPaesi: function()
	{
		var JSONRequest = '{"elenco":"elenco"}';
		var myRequest = new Request({method: 'get',
									 url: 'php/spedizione.php',
									 onSuccess: function(responseText, responseXML)
										{									
										var myResponse = JSON.decode(responseText);
										if (myResponse.result)
											{
												var combobox = new Element('select',{'name':'paesi','class':'comboBoo'});
												var option_blank = new Element('option',{'value':'0.00','text':''});
												option_blank.inject(combobox);
												var i=0;
												for (i=0;i<myResponse.dati.length;i++)
													{
													var option = new Element('option',{'value':myResponse.dati[i].b1,'text':myResponse.dati[i].Paese});
													option.inject(combobox);
													}
												combobox.addEvents({
															change:function(){
																			var prezzo = parseFloat(this.value);
																			Carrello.Spedizione = prezzo;
																			Carrello.Paese = this.options[this.selectedIndex].text;
																			$('shipping_price').set('text','EUR ' + prezzo.toFixed(2));
																			Carrello.AggiornaTotale();
																			//Sito.CambiaColore();
																			}
																		  });
												combobox.inject('shipping');
											}
										else
											{
												Carrello.ErroreDB();
											}
										},
									 onFailure: function(xhr)
										{
										Carrello.ErroreDB();
										},
									 onCancel: function()
										{
										Carrello.ErroreDB();
										}
									});
									
		myRequest.send('elenco='+escape(JSONRequest));
	},
	
	CaricaZone: function()
	{
		var JSONRequest = '{"zone":"zone"}';
		var myRequest = new Request({method: 'get',
									 url: 'php/spedizione.php',
									 onSuccess: function(responseText, responseXML)
										{									
										var myResponse = JSON.decode(responseText);
										if (myResponse.result)
											{
												var i=0;
												for (i=0;i<myResponse.dati.length;i++)
													{
													Shop.Spedizione[myResponse.dati[i].Zona] = myResponse.dati[i].b1;
													}
											}
										else
											{
												Carrello.ErroreDB();
											}
										},
									 onFailure: function(xhr)
										{
										Carrello.ErroreDB();
										},
									 onCancel: function()
										{
										Carrello.ErroreDB();
										}
									});
									
		myRequest.send('zone='+escape(JSONRequest));
	},
	
		ErroreDB: function()
	{
		alert('Error - Try to reload page');
	}

};
	

