/*global Class, Classes, _e, _v, _xn, _xv, addClass, addEvent, ajax, hasClass, hide, preventDefault, removeClass, show, showMessage, window*/

Classes.Koszyk = new Class();
Classes.Koszyk.prototype = {
	activeTabSchowek: false,
	flashCountKoszyk: 0,
	flashCountSchowek: 0,
	flashIntervalId: null,
	schowekUsunId: null,
	_basketContent: null,
	promo: null,

	__construct: function (params) {
		this.copy(params);
		this.promo = new Classes.Promo({
			koszyk: this
		});
	},
	
	dodajKoszyk: function (pid, amount,move_from, move_to) {
		var callAfter = arguments[4];
		var paramsPost = 'productID=' + pid;
		if (amount) {
			paramsPost = paramsPost + '&amount=' + parseInt(amount, 10);
		}
		if(arguments[5]!=undefined) paramsPost += '&nocheck='+_int(arguments[5],0);

		ajax.callMethod('KoszykKomponent', 'addProduct', null, paramsPost, this,
		function(http,bb) {
			var root = http.getResponseJSON(showMessage);
				if (root) {
					bb.callbackDodaj(root, true, move_from, move_to);
					if(callAfter) callAfter();
				}
		}.bindResponse(this));
	},
	
	dodajPrezent: function (pid, amount,move_from, move_to) {
		var callAfter = arguments[4];
		var paramsPost = 'productID=' + pid;
		if (amount) {
			paramsPost = paramsPost + '&amount=' + parseInt(amount, 10);
		}
		if(arguments[5]!=undefined) paramsPost += '&nocheck='+_int(arguments[5],0);

		ajax.callMethod('KoszykKomponent', 'addGift', null, paramsPost, this,
		function(http,bb) {
			var root = http.getResponseJSON(showMessage);
				if (root) {
					bb.callbackDodaj(root, true, move_from, move_to);
					if(callAfter) callAfter();
				}
		}.bindResponse(this));
	},
	
	
	usunKoszyk: function (pid) {
		var paramsPost = 'productID=' + pid;
		
		if(arguments[1]!=undefined) paramsPost += '&nocheck='+_int(arguments[1],0);
		ajax.callMethod('KoszykKomponent', 'removeProductAjax', null, paramsPost, this,
			function (obj) {
				var root = this.getResponseJSON(showMessage);
				if (root) {
					obj.callbackUsun(root, true);
				}
			}
		);
	},
	
	
	usunKoszykPozycja: function (bid) {
		var paramsPost = 'refresh=1&basketPosID=' + bid;
		
		if(arguments[1]!=undefined) paramsPost += '&nocheck='+_int(arguments[1],0);

		ajax.callMethod('KoszykKomponent', 'removeProductAjax', null, paramsPost, this,
			function (obj) {
				var root = this.getResponseJSON(showMessage);
				if (root) {
					obj.callbackUsun(root, true);					
				}
			}
		);
	},
	
	setFlag: function (bid,flag) {
		
		var paramsPost = 'basketPosID=' + bid+'&flag='+flag;

		ajax.callMethod('KoszykKomponent', 'setFlag', null, paramsPost, this,
			function (obj) {
				var root = this.getResponseJSON(showMessage);
				if (root) {
					obj.callbackSetFlag(root, true,bid);
				}
			}
		);
	},
	
	przeniesPrezentKoszykSchowekPozycja: function(bid,pid){				
		var check = arguments[2]!=undefined ? arguments[2] : true;
		if(check)
			this.checkUsunKoszyk(bid,pid);
		else
			this.dodajSchowekPrezent(pid,null,null,function(){
				this.usunKoszykPozycja(bid,1);
			}.bind(this));		
	},
	
	przeniesPrezentSchowekKoszyk: function(pid){
		this.dodajPrezent(pid,1,null,null,function(){
			this.schowekUsun(pid);
		}.bind(this));
	},

	przeniesKoszykSchowekPozycja: function(bid,pid){		
		var check = arguments[2]!=undefined ? arguments[2] : true;
		if(check)
			this.checkUsunKoszyk(bid,pid);
		else
			this.dodajSchowek(pid,null,null,function(){
				this.usunKoszykPozycja(bid,1);
			}.bind(this));		
	},
	
	przeniesSchowekKoszyk: function(pid){
		this.dodajKoszyk(pid,1,null,null,function(){
			this.schowekUsun(pid);
		}.bind(this));
	},
	
	dodajSchowek: function (pid, move_from, move_to) {
		var callAfter = arguments[3];
		var paramsPost = 'productID=' + pid;
		ajax.callMethod('Schowek', 'addProduct', null, paramsPost, this,
			function (obj) {
				var root = this.getResponseJSON(showMessage);
				if (root) {
					root['product_brutto']=1;
					obj.callbackDodaj(root, false, move_from, move_to);
					if(callAfter) callAfter();
				}
			}
		);
	},
	dodajSchowekPrezent: function (pid, move_from, move_to) {
		var callAfter = arguments[3];
		var paramsPost = 'prezent=1&productID=' + pid;
		ajax.callMethod('Schowek', 'addProduct', null, paramsPost, this,
			function (obj) {
				var root = this.getResponseJSON(showMessage);
				if (root) {				
					obj.callbackDodaj(root, false, move_from, move_to);
					if(callAfter) callAfter();
				}
			}
		);
	},
	
	checkUsunKoszyk: function(bid,pid) {
		this.promo.pid = pid;
		this.promo.bid = bid;
		var paramsPost = 'basketPosID=' + bid;
		ajax.callMethod('KoszykKomponent', 'checkRemoveProduct', null, paramsPost, this,
		function (obj) {
			var root = this.getResponseJSON(showMessage);
			if (root) {								
				if(obj.promo.decode(root,'checkRemoveProduct')) return;		
				koszyk.przeniesKoszykSchowekPozycja(bid,pid,false);
			}
		});		
	},
	
	checkUsunPrezentKoszyk: function(bid,pid) {
		this.promo.pid = pid;
		this.promo.bid = bid;
		var paramsPost = 'basketPosID=' + bid;
		ajax.callMethod('KoszykKomponent', 'checkRemoveProduct', null, paramsPost, this,
		function (obj) {
			var root = this.getResponseJSON(showMessage);
			if (root) {								
				if(obj.promo.decode(root,'checkRemoveProductPrezent')) return;				
				koszyk.przeniesPrezentKoszykSchowekPozycja(bid,pid,false);
			}
		});		
	},

	callbackUsun: function (root, koszyk) {		
		if ('error' === root['html']) {
			showMessage(root['html']);
		} else {
			if(this.promo.decode(root,'removeProduct')) return;	
			//alert(dump_arr(root));
			var total = _e('basket_total_brutto');

			if(total && root['total_brutto']){
				total.innerHTML=root['total_brutto'].replace('.',',')+' zł';
			}
				
			var div = _e('koszykZawartosc');
			if (div) {//na stronie jest komponent
			
				if(root['html']) div.innerHTML = ajax.xhtmlConvert(root['html']);

			} else if (koszyk) {//brak komponentu, trzeba pokazać komunikat
				showMessage(dict('Produkt został usunięty z koszyka. Odśwież zawartość koszyka aby zobaczyć opis towarów.'));
			} else {
				showMessage(dict('Produkt został usunięty z koszyka. Odśwież zawartość koszyka aby zobaczyć opis towarów.'));
			}
					
			if((root['basketAmount'] && root['basketAmount']<1 && koszyk) || (root['storeAmount'] && root['storeAmount']<1 && !koszyk)) 
				var callback=this.removeNaviButtons;
			else
				var callback=null;
				
			if(root['repositoryTotal']){
				var repTotal=_e('repositoryTotal');
				if(repTotal) repTotal.innerHTML=root['repositoryTotal'];
			}
			
			if(root['productsList'] && root['productsList'].length > 0) {					
					this._basketContent = root['productsList'];
				}
			
			if(root['execId']) this.removeBasketRow(root['execId'],callback);
		}
	},
	
	removeNaviButtons: function(){

		$('#totalBrutto').hide("slow").remove();
		$('#buttonCheckout').hide("slow").remove();
		if($('#basketInfo').length){
			$('.basketInfo').slideDown();
			$('#basketInfo').slideUp("slow", function(){
				$('#basketEmpty').slideDown("slow");
			});
		}else {
			$('#basketEmpty').parent().slideDown("slow");
		}
	},
	
	removeBasketRow: function(bid,callback) {

		var ul=$('#basketProduct'+bid);
		ul.children('li:first').fadeTo("slow", 0, function(){
			ul.slideUp("slow",function(){
				
				if($(this).is(".top")){
					$(this).next('ul').addClass("top");
				}
				if($(this).is(".br")){
					$(this).next('ul').addClass("br");
				}
				$(this).remove();
				if($('.basketProduct').not('.reader').length<2) {
					$('#basket_top_separator').slideUp("slow").remove();
				}
				if($('.basketProduct').length>1 && $('.basketProduct').not('.reader').length==0){
					$('.basketInfo').slideUp("slow");
					$('#basketInfo').css('padding-top',0);
				}
				if(callback)callback.call();
								
				// FIX ME: 
				if(koszyk._basketContent && koszyk._basketContent.length>0) {					
					_e('basketContent').innerHTML = koszyk._basketContent;
				}

			});
		});
		ul.children('li:not(:first)').fadeTo("slow", 0);
	},
	
	callbackDodaj: function (root, koszyk,moveto_id, moveto_toid) {
		var div = _e('koszykZawartosc');
		if ('error' === root['html']) {
			showMessage(root['html']);
		} else if (div) {//na stronie jest komponent
			// sprawdz czy nie info o promocjach
			
			if(this.promo.decode(root,'addProduct')) return;
			
			var content= ajax.xhtmlConvert(root['html']);
			if(moveto_id){
				if(moveto_toid) var to=moveto_toid;
				else var to='basket';
				
				ShadowEffect.moveShadow(moveto_id, to, function(){
					div.innerHTML =content;
				});
			}else{
				div.innerHTML = content;
			}			

			if(root['productsList'] && root['productsList'].length > 0) {
				_e('basketContent').innerHTML = root['productsList'];
			}

			if(_int(root['product_brutto'],0)==0){
				showMessage(dict('!#koszyk_js#E-book został pobrany na Twoje konto.'));
			}
		} else if (koszyk) {//brak komponentu, trzeba pokazać komunikat
			showMessage(dict('Produkt został dodany do koszyka. Odśwież zawartość koszyka aby zobaczyć opis towarów.'));
		} else {
			showMessage(dict('Produkt został dodany do koszyka. Odśwież zawartość koszyka aby zobaczyć opis towarów.'));
		}
	},

	addProductSubmit: function (pid) {
		_e('productID').value = pid;
		_e('form-powiazane').submit();
	},

	basketSubmit: function () {
		var formKoszyk = _e('formKoszyk');
		if (formKoszyk) {
			formKoszyk.submit();
		}
	},
	
	setAmountOfProduct: function(bid,amount){
		amount=parseInt(amount);
		if($("#input_amount_"+bid).val()<1){
			$("#input_amount_"+bid).val(1);	
			amount=1;
		}
		if(amount>=0){
			this.promo.bid = bid;
			this.promo.amount = amount;
			var paramsPost = 'refresh=1&basketPosID=' + bid+'&amount='+amount;
			
			if(arguments[2]!=undefined) paramsPost += '&nocheck='+_int(arguments[2],0);
			
			ajax.callMethod('KoszykKomponent', 'setAmountProductAjax', null, paramsPost, this, 
			function(obj){
				var root = this.getResponseJSON(showMessage);
			
				if (root) {
					if(root['errMessage']){
						showErrorMessage(root['errMessage']);
						$("#input_amount_"+bid).val(root['execAmount']);
					}else{
						obj.callbackSetAmount(root, false);
						if(root['product_brutto']) {
							var amount= _e('product_price_'+bid);
							amount.innerHTML=root['product_brutto'];
						}
					}
				}
			});
		}
		return true;
	},
	
	callbackSetAmount: function(root, koszyk){
		var div = _e('koszykZawartosc');
		var total = _e('basket_total_brutto');
		if ('error' === root['html']) {
			showMessage(root['html']);
			return;
		} 
		
		if(this.promo.decode(root,'setAmount')) return;
		
		if(total && root['total_brutto']){
			total.innerHTML=root['total_brutto'].replace('.',',')+' zł';
		}
		if(root['productsList'] && root['productsList'].length > 0) {
			_e('basketContent').innerHTML = root['productsList'];
		}
		if (div) {//na stronie jest komponent
			div.innerHTML = ajax.xhtmlConvert(root['html']);
			/*
			if (koszyk) {
				if (this.slide) {
					this.slide.setContent(ajax.xhtmlConvert(root['prod_list']));
					this.slide.show(1);
				}
				//this.flashCountKoszyk = 3;
				this.showKoszyk();
			} else {
				this.flashCountSchowek = 3;
				this.showSchowek();
			}
			if (!this.flashIntervalId && (this.flashCountKoszyk || this.flashCountSchowek)) {
				this.flashIntervalId = setInterval(this.flashContent.bind(this), 500);
			}*/
		} else if (koszyk) {//brak komponentu, trzeba pokazać komunikat
			showMessage(dict('Liczba produktów w koszyku została zmieniona. Odśwież zawartość koszyka aby zobaczyć opis towarów.'));
		} else {
			showMessage(dict('Liczba produktów w schowku została zmieniona. Odśwież zawartość schowka aby zobaczyć opis towarów.'));
		}
	},
	
	callbackSetFlag: function(root, koszyk, pid){
		var div = _e('koszykZawartosc');
		var total = _e('basket_total_brutto');
		if ('error' === root['html']) {
			showMessage(root['html']);
			return;
		} 
		if(total && root['total_brutto']){
			total.innerHTML=root['total_brutto'].replace('.',',')+' zł';
		}
		if (div) {//na stronie jest komponent
			div.innerHTML = ajax.xhtmlConvert(root['html']);			
		} else if (koszyk) {//brak komponentu, trzeba pokazać komunikat			
		} else {			
		}
		
		$('.gift-'+pid).toggle();
	},
	amountProduct: function (pid, up) {
		var amount, formKoszyk = _e('formKoszyk');
		if (formKoszyk) {
			amount = Math.abs(parseInt(_e('koszyk_ilosc_' + pid).value, 10));
			if (up) {
				amount++;
			} else {
				amount--;
			}
			_e('koszykIlosc').value = amount;
			if (0 < amount) {
				_e('modeK').value = 'koszyk_ilosc';
				_e('productId').value = pid;
				formKoszyk.submit();
			}
		}
	},

	removeProduct: function (pid) {
		var formKoszyk = _e('formKoszyk');
		if (formKoszyk) {
			_e('modeK').value = 'koszyk_usun';
			_e('productId').value = pid;
			formKoszyk.submit();
		}
	},

	removeProductAll: function () {
		var formKoszyk = _e('formKoszyk');
		if (formKoszyk) {
			_e('modeK').value = 'koszyk_usun_all';
			formKoszyk.submit();
		}
	},

	showKoszyk: function () {
		this.activeTabSchowek = false;
		show('contentKSkoszyk');
		hide('contentKSschowek');
		return false;
	},

	showSchowek: function () {
		this.activeTabSchowek = true;
		show('contentKSschowek');
		hide('contentKSkoszyk');
		return false;
	},

	schowekUsun: function (pid) {
		/*var formUsun = _e('formUsun');
		if (formUsun) {
			formUsun.productId.value = pid;
			formUsun.submit();
		}*/
		var paramsPost = 'productId=' + pid;
		
		ajax.callMethod('Schowek', 'removeProduct', null, paramsPost, this,
		function(http,bb) {
			var root = http.getResponseJSON(showMessage);
				if (root) {
					bb.callbackUsun(root,false);
				}
		}.bindResponse(this));
	},
	
	doKasyClick: function() {
		ajax.callMethod('KoszykKomponent', 'checkDoKasy', null, null, this,
		function (obj) {
			var root = this.getResponseJSON(showMessage);
			if (root) {								
				if(obj.promo.decode(root,'checkDoKasy')) return;
				window.location = 'koszyk_potwierdz.php';				
			}
		});		

	}
};



