/*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,

	__construct: function (params) {
		this.copy(params);
	},

	onSlideFinish: function () {
		if (this.slide.direction > 0) {
			setTimeout(function () {
				this.slide.start(-1);
			}.bind(this), this.slideTimeout);
		}
		else {
			this.slide.hide();
		}
	},

	dodajKoszyk: function (pid, amount,move_from, move_to) {
		var paramsPost = 'productID=' + pid;
		if (amount) {
			paramsPost = paramsPost + '&amount=' + parseInt(amount, 10);
		}

		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);
				}
		}.bindResponse(this));
	},
	
	dodajPrezent: function (pid, amount,move_from, move_to) {
		var paramsPost = 'productID=' + pid;
		if (amount) {
			paramsPost = paramsPost + '&amount=' + parseInt(amount, 10);
		}

		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);
				}
		}.bindResponse(this));
	},
	
	usunKoszyk: function (pid) {
		
		var paramsPost = 'productID=' + pid;

		ajax.callMethod('KoszykKomponent', 'removeProductAjax', null, paramsPost, this,
			function (obj) {
				var root = this.getResponseJSON(showMessage);
				if (root) {
					obj.callbackUsun(root, true);
				}
			}
		);
	},
	
	przeniesPrezentKoszykSchowek: function(pid){
		this.dodajSchowekPrezent(pid);
		this.usunKoszyk(pid);
	},
	
	przeniesPrezentSchowekKoszyk: function(pid){
		this.dodajPrezent(pid);
		this.schowekUsun(pid);
	},

	przeniesKoszykSchowek: function(pid){
		this.dodajSchowek(pid);
		this.usunKoszyk(pid);
	},
	
	przeniesSchowekKoszyk: function(pid){
		this.dodajKoszyk(pid);
		this.schowekUsun(pid);
	},
	
	dodajSchowek: function (pid, move_from, move_to) {
		var paramsPost = '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);
				}
			}
		);
	},
	dodajSchowekPrezent: function (pid, move_from, move_to) {
		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);
				}
			}
		);
	},

	callbackUsun: function (root, koszyk) {

		if ('error' === root['html']) {
			showMessage(root['html']);
		} else {
			//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['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(pid,callback) {

		var ul=$('#basketProduct'+pid);
		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();
			});
		});
		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
			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;
			}			
		} 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(pid,amount){
		amount=parseInt(amount);
		if(amount>=0){
			var paramsPost = 'productID=' + pid+'&amount='+amount;
			ajax.callMethod('KoszykKomponent', 'setAmountProductAjax', null, paramsPost, this, 
			function(obj){
				var root = this.getResponseJSON(showMessage);
				if (root) {
					obj.callbackSetAmount(root, false);
					
					var amount= _e('product_price_'+pid);
					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(total && root['total_brutto']){
			total.innerHTML=root['total_brutto'].replace('.',',')+' zł';
		}
		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.'));
		}
	},
	
	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));
	}
};


