var Koszyk = new Class({
		Implements: Options,
		options: {
			produkt_selector:'produkt',
			dodaj_div:'produkt-dodaj',
			links_selector:'a.add',
			koszyk_id:'koszyk',
			koszyk_mesg:'koszyk_messages',
			koszyk_lista:'koszyk-lista',
			pre_id:'produkt_',
			pre_wersja:'wersja_',
			parent_element:'div.produkt_parent',
			cena_element:'.cena',
			url_add_produkt:'/add_product',
			url_remove_produkt:'/remove_product',
			url_set_count:'/set_count',
			url_get_all:'/get_koszyk',
			url_reset:'/clean_koszyk',
			url_zamowienie:'/new/zamowienie',
			
			pokaz_link_zamowienia:true
		},
		initialize: function( options )	{
			
			this.value = 0;
			this.count = 0;
			this.produkty = [];
			
			/*this.waiter = new Element('img', {
					id:'imworking',
					style:'padding-left:15px',
					src:'/images/koszyk-pusty.gif'
			});*/
			
			this.icon = $(this.options.koszyk_id).getParent('div.red-border').getElement('p.bigger');
			this.icon.setStyles({
					'background-image':"url('/images/koszyk-pusty.gif')",
					'background-position':'65px -12px',
					'background-repeat':'no-repeat'
			});
			
			
			this.setOptions(options);
			
			$$('.'+this.options.dodaj_div).each( function(l) {
					l.fade('hide');
			});
			
			this.syncProdukts();
		},
		
		syncProdukts: function()	{

			// wczytanie koszyka
			this.koszykSession = new Request.JSON({
					url:this.options.url_get_all,
					data:'sklep=1',
					onRequest:this.imworking.bind(this),
					onSuccess:function(responseJSON)	{
						this.updateKoszyk(responseJSON);
						this.imfinished();
						this.setLinks();
					}.bind(this),
					onFailure:this.imfinished.bind(this)

			}).send();
			
		},
		
		setLinks: function()	{
			
			var addlinks = $$(this.options.links_selector);
			addlinks.each( function(l,i) {
					l.addEvent('click', this.addProdukt.bind(this));
			}.bind(this) );
			
			var adddivs  = $$('.'+this.options.produkt_selector);
			adddivs.each(function(l,i) {
					var adddiv = l.getElement('div.'+this.options.dodaj_div);
					//adddiv.tween('opacity', '0');
					
					l.addEvent('mouseover', function(e) {
							adddiv.fade('show');
					}.bind(this) );
					
					l.addEvent('mouseout', function(e) {
							adddiv.fade('hide');
					}.bind(this) );
					
			}.bind(this));
			
		},
		
		addProdukt: function(e) {
			e.stop();
			var l = $(e.target);
			var p = l.getParent(this.options.parent_element);
			var ch = p.getElement('select');

			var pid = l.id.substring(8);
			var wersja = (ch) ? ch.options[ch.selectedIndex].text : '';

			new Request.JSON({
					url:this.options.url_add_produkt,
					data:{
						produkt_id:pid,
						wersja:wersja
					},
					onRequest:this.imworking.bind(this),
					onSuccess:function(responseJSON)	{
						this.updateKoszyk(responseJSON);
						this.imfinished();
					}.bind(this),
					onFailure:this.imfinished.bind(this)
			}).send();
			
			// albo wyrzucenie danych w zwrocie zapisanie synchronizacji
			
		},
		
		removeProdukt:function(e)	{
			e.stop();
			var dane = e.target.retrieve('dane');
			new Request.JSON({
					url:this.options.url_remove_produkt,
					data:dane,
					onRequest:this.imworking.bind(this),
					onSuccess:function(responseJSON)	{
						this.updateKoszyk(responseJSON);
						this.imfinished();
					}.bind(this),
					onFailure:this.imfinished.bind(this)
			}).send();
			
		},
		
		
		imworking:function()	{
			this.icon.setStyle('background-image',"url('/images/koszyk-action.gif')");
/*			if ( !$('imworking') ) {
				var p = $(this.options.koszyk_id).getParent('div.red-border').getElement('p.bigger');
				p.grab(this.waiter);
			}*/
		},
		
		imfinished:function()	{
			if ( this.count > 0 )
				this.icon.setStyle('background-image',"url('/images/koszyk-pelen.gif')");
			else {
				this.icon.setStyle('background-image',"url('/images/koszyk-pusty.gif')");
			}
			/*if ( $('imworking') ) {
				$('imworking').dispose();
			}*/
		},

		resetKoszyk:function(e)	{
			e.stop();
			
			new Request.JSON({
					url:this.options.url_reset,
					data:'sklep=1',
					onRequest:this.imworking.bind(this),
					onSuccess:function(responseJSON)	{
						this.updateKoszyk(responseJSON);
						this.imfinished();
					}.bind(this),
					onFailure:this.imfinished.bind(this)
			}).send();
			
		},
		
		updateKoszyk:function(json)	{
			if ( json == null )
				return false;

			this.count = json.koszyk.count;
			this.value = json.koszyk.value;
			this.produkty = json.koszyk.produkty;
			if ( json.koszyk.count > 0  ) { // pełen koszyk

				//lista produktów
				var ps = $H(json.koszyk.produkty);
				var list = $(this.options.koszyk_lista);
				list.empty();
				var table = new Element('table',{
					'class':'koszyk'
				});
				var tb = new Element('tbody');
				var th = new Element('tr');
				var th1 = new Element('td', {
						'class':'td-nazwa',
						html:'Nazwa'
				});
				var th2 = new Element('td', {
						'class':'td-ilosc',
						html:'Ilość'
				});
				var th3 = new Element('td', {
						'class':'td-usun',
						html:'Cena'
				});
				th.adopt( th1, th2, th3 );
				tb.grab( th );
				table.grab( tb );
				
				var tr;
				// zagłowek tabelki
				
				
				ps.each( function(group, pid) {
					group.each( function(item) {
						
						var a = new Element('a', {
								href:'#',
								html:'usuń',
								events:{
									click:this.removeProdukt.bind(this)
								}
						});
						a.setStyle('display','none');
						a.store('dane', item);
						
						var cena = new Number(item.cena*item.ilosc);
						cena = cena.toFixed(2);

						var span = new Element('span', {
								html:cena + ' zł'
						});

						//alert( item.wersja );
						
						var td1 = new Element('td', {
								'class':'td-nazwa',
								html:'<a href="/sklep/'+item.produkt_id+'">'+item.nazwa+( item.wersja ? ' ('+item.wersja+')':'') +'</a>'
						});
						var td2 = new Element('td', {
								'class':'td-ilosc',
								html:'<span>x'+item.ilosc+'</span>'
						});
						var td3 = new Element('td',{
								'class':'td-usun'
						});

						tr = new Element('tr',{
							events:{
								mouseover:function()	{
									a.setStyle('display','inline');
									span.setStyle('display','none');
								},
								mouseout:function()	{
									a.setStyle('display','none');
									span.setStyle('display','inline');
								}
							}
						});
						
						td3.adopt(span, a);
						
						tr.adopt( td1, td2, td3 );
						
						tb.grab(tr);
						
					}.bind(this));
				}.bind(this) );
				
				list.grab(table);
				
				// informacje o koszyku
				$(this.options.koszyk_mesg).empty();

				var info = new Element('p',{'class':'koszyk-suma'});
				if ( this.options.pokaz_link_zamowienia ) {
					info.set('html','<a href="#">wyczyść</a><span>suma <b>'+this.value.toFixed(2)+' zł</b></span>');
					info.getElement('a').addEvent('click', this.resetKoszyk.bind(this));
				} else {
					info.set('html','<span>suma <b>'+this.value.toFixed(2)+' zł</b></span>');
				}
				$(this.options.koszyk_mesg).grab(info);
				
				
				
				// link do złożenia zamówienia
				if ( this.options.pokaz_link_zamowienia ) {
					var zam = new Element('p', {
							html:'<a href="'+this.options.url_zamowienie+'" class="zamowienie"><span>złóż zamówienie</span></a>'
					});
					$(this.options.koszyk_mesg).grab(zam);
				}

			} else { // koszyk pusty
				$(this.options.koszyk_lista).empty();
				$(this.options.koszyk_mesg).set('html', '<p>Koszyk jest pusty</p>');
			}
		}
		
		
});
