var catalogEvents = {
	listeners:{},
	addListener: function(event, callback, scope){
		var x = {};
			x.callback = callback;
			x.scope = scope;

		if(!this.listeners[event]){
			this.listeners[event] = []
		}
		this.listeners[event][this.listeners[event].length] = x;
	},
	fireEvent: function(event, obj){
		if(!this.listeners[event]){
			this.listeners[event] = []
		}
		for(var i=0; i< this.listeners[event].length; i++){
			this.listeners[event][i].callback.call(this.listeners[event][i].scope || window, obj);
		}
	},
	//todo: fixit
	removeListener: function(event, callback){
		if(!this.listeners[event]){
			this.listeners[event] = []
		}
		for(var i=0; i< this.listeners[event].length; i++){
			if(this.listeners[event][i].callback == callback)
				this.listeners[event][i] = null;
		}
	}
};

var catalogCart = {
	submitForm: function(formId){
		var form = $(formId);
		$().sendForm({form: form, success:function(res){
			form.$$('input[type="checkbox"]').walk(function(el){
				el.checked = false;
				return el;
			});
			catalogEvents.fireEvent('cartchange', res);
			catalogEvents.fireEvent('cartnewitems', res);
		}})
	},
	recalculate: function(formId){
		var form = $(formId);
			form.$$('input').walk(function(el){
				el.disabled = true;
				return el;
			});
		$().sendForm({form: form, success:function(res){
			form.$$('input').walk(function(el){
				el.disabled = false;
				return el;
			});
			res.items.walk(function(item){
				var ipt = form.$$("input[name='"+item.id+"']")[0];
				ipt.value = item.qnt;
				var total = form.$$("span#cart-item-"+item.id+"-total")[0];
				total.innerHTML = item.total;
				return item;
			});
			catalogEvents.fireEvent('cartchange', res);
		}})
	},
	addItem: function(itemId){
		$().getJSON({
			url: '/admin/ajax/catalog/cart/additem/'+itemId+'/',
			success: function(res){
				catalogEvents.fireEvent('cartchange', res);
				catalogEvents.fireEvent('cartnewitem', res);
			}
		})
	},
	removeItem: function(itemId){
		$().getJSON({
			url: '/admin/ajax/catalog/cart/removeitem/'+itemId+'/',
			success: function(res){
				catalogEvents.fireEvent('cartchange', res);
			}
		})
	},
	sendOrder: function(frm){
		$(frm).$$('input').walk(function(el){ el.disabled = true; return el; });
		
		var result = function(res)
		{
			if(res.responseText)
				res = eval("("+res.responseText+")");

			$(frm).$$('input').walk(function(el){ el.disabled = false; $(el).removeClass('error'); return el; });
			if(res.success == true){
				showMessage('', 'Ваш заказ успешно отправлен на обработку оператору');
				document.location = document.location;
			}

			if(res.success == false){
				if(res.errors)
					showMessage('Ошибка', '<strong>Заполните обязательные поля</strong>');
				for(var k in res.errors){
					$(frm[k]).addClass('error');
				}
			}
		};

		
		$().sendForm({ form: frm, success: result, complete: result });
	}
};

//to global scope
window.catalogEvents = catalogEvents;
window.catalogCart = catalogCart;

catalogEvents.addListener('cartchange', function(res){
	if(res.total > 0){
		$('cart-widtget-1-empty').hide();
		$('cart-widtget-1-notempty').show();
	}else{
		$('cart-widtget-1-empty').show();
		$('cart-widtget-1-notempty').hide();
	}

	$('cart-widtget-1-count').innerHTML = res.total;
	$('cart-widtget-1-total').innerHTML = res.summ;
});

catalogEvents.addListener('cartnewitem', function(res){
	showMessage('В корзину добавлен новый продукт:', '<br /><strong>'+res.item.catItem.title+'</strong><br /><br/>Цена: <span class="price">'+res.item.total+' руб.</span><br/><br/> Всего позиций в корзине: <span class="quantity">'+res.total+'</span><br/>на сумму: <span class="price">'+res.summ+'</span> руб.<br/><br/> <a href="/cart/">Перейти в корзину</a>');
});
catalogEvents.addListener('cartnewitems', function(res){
	var itemsText = '';
	if(res.items.length < 1) return;
	for(var i=0; i<res.items.length; i++){
		itemsText += res.items[i].catItem.title+'.<br/>';
		itemsText += 'Цена: <span class="price">'+res.items[i].total+' руб.</span><br/><br/>';
	}
	showMessage('', 'В корзину добавлено <span class="quantity">'+res.items.length+'</span> товара<br /><br />'+itemsText+'Всего позиций в корзине: <span class="quantity">4</span><br/>на смму: <span class="price">'+res.summ+'</span> руб.<br/><br/> <a href="/cart/">Перейти в корзину</a>');
});


var catalogHelper = {
	submitForm: function(formId){
		var form = $(formId);
			form.action = '/admin/ajax/catalog/storage/makeorderbyform/';

		$().sendForm({form: form, success:function(res){
			form.$$('input[type="checkbox"]').walk(function(el){
				el.checked = false;
				return el;
			});
			catalogEvents.fireEvent('storagechange', res);
			catalogEvents.fireEvent('storagenewitems', res);
		}});
	},
	removeItem: function(itemId){
		$().getJSON({
			url: '/admin/ajax/catalog/storage/removeitem/'+itemId+'/',
			success: function(res){
				catalogEvents.fireEvent('storagechange', res);
			}
		})
	},
	sendByEmail: function(formId){
		var form = $(formId);
			form.$$('input').walk(function(el){ el.disabled = true; return el; });
			form.$$('textarea').walk(function(el){ el.disabled = true; return el; });
		$().sendForm({form: form, success:function(res){
			form.$$('input').walk(function(el){ el.disabled = false; return el; });
			form.$$('textarea').walk(function(el){ el.disabled = false; return el; });

			if(res.success) {
				form.reset();
				showMessage('', 'Сообщение успешно отправлено');
			}
			else {
				if(res.errors)
					showMessage('Ошибка', '<strong>Заполните обязательные поля</strong>');
				for(var k in res.errors)
					$(form[k]).addClass('error');
			}
		}});
	}
}
