var nyomell = {

	url: '',
	categoryId: 0,
	searching: false,


	init: function() {
		$('#footer').find('.menu li:not(:last)').addClass('footermenu');
		$("a[rel^='prettyPhoto']").prettyPhoto(prettyPhotoConfig); 

		// Keresés
		$('#productSearchForm').submit(this.searchSubmit);
		$('#productQuery').keyup(this.queryKeyup);
		$('#inCategory').click(this.inCategoryClick);

		// Regisztráció
		$('#sameAddress').change(this.sameAddressChange);

		// Rendelés
		$('#orderDelivery').change(this.deliveryChange);
	},


	searchSubmit: function() {
		nyomell.search(0);
		return false;
	},


	queryKeyup: function(event) {
		if($('#productQuery').val().length > 1 && event.keyCode != 13) {
			setTimeout('nyomell.search(0);', 10);
		}
		return true;
	},


	inCategoryClick: function() {
		nyomell.search(0);
		return true;
	},


	customPageKeyup: function(event) {
		if(event.keyCode != 13) return;
		nyomell.viewCategory(($('#customPage').val() * 1 - 1) * 10);
	},


	viewCategory: function(offset) {
		if(nyomell.searching) nyomell.search(offset);
		else nyomell.loadProducts(false, {
			kategoria: nyomell.categoryId,
			offset: offset
		});
	},


	search: function(offset) {
		var q = $('#productQuery').val();
		if(q.length < 3) return;
		var data = {
			productQuery: q,
			kategoria: nyomell.categoryId,
			offset: offset
		};
		if($('#inCategory').is(':checked')) data.inCategory = true;
		nyomell.loadProducts(true, data);
	},


	loadProducts: function(searching, data) {
		$('#listFooter').find('.listinfo, .paging').html('&nbsp;');
		$('#pageLoader').show();
		$('#content').load(nyomell.url + (searching ? 'shop/search/' : 'shop/products/'), data,
			function() {
				$('#pageLoader').hide();
				$("a[rel^='prettyPhoto']").prettyPhoto(prettyPhotoConfig); 
			}
		);
	},


	validateRegistration: function() {
		var f = $('#registrationForm'),
			result = nyomell.baseValidation(f);
		if(result === true) {
			email = $('#userEmail');
			if(!email.val().validateEmail()) {
				result = 'Érvénytelen e-mail cím, kérem ellenőrizze!';
				email.addClass('error').focus();
			}
			else return true;
		}

		var msg = $('.errorMsg');
		msg.slideUp(200, function() {
			msg.text(result).slideDown();
			return false;
		});
		return false;
	},


	validateProfile: function() {
		var f = $('#profileForm'),
			pw1 = $('#profilePassword1'),
			pw2 = $('#profilePassword2'),
			result = nyomell.baseValidation(f);
		pw1.removeClass('error');
		pw2.removeClass('error');
		if(result === true) {
			if(pw1 && pw1.val() != pw2.val()) {
				result = 'A megadott jelszavak nem egyeznek, kérem adja meg őket újra!';
				pw1.addClass('error').focus();
				pw2.addClass('error');
			} else {
				email = $('#userEmail');
				if(!email.val().validateEmail()) {
					result = 'Érvénytelen e-mail cím, kérem ellenőrizze!';
					email.addClass('error').focus();
				}
				else return true;
			}
		}

		var msg = $('.errorMsg');
		msg.slideUp(200, function() {
			msg.text(result).slideDown();
			return false;
		});
		return false;
	},


	validateLogin: function() {
		var f = $('#loginForm'),
			result = nyomell.baseValidation(f);
		if(result === true) return true;

		$('.successMsg').slideUp();
		var msg = $('.errorMsg');
		msg.slideUp(function() {
			msg.text(result).slideDown();
			return false;
		});
		return false;
	},


	loginForm: function() {
		nyomell.initForm($('#loginForm'));
		$('#forgottenForm').fadeOut(200, function() {
			$('#loginForm').fadeIn(200);
		});
		return false;
	},


	validateForgotten: function() {
		var f = $('#forgottenForm'),
			result = nyomell.baseValidation(f);
		if(result === true) {
			nyomell.sendForgotten();
			return false;
		}
		var msg = $('.errorMsg');
		msg.slideUp(200, function() {
			msg.text(result).slideDown();
			return false;
		});
		return false;
	},



	forgottenPassword: function() {
		nyomell.initForm($('#forgottenForm'))
		$('#loginForm').fadeOut(200, function() {
			$('#forgottenForm').fadeIn(200);
		});
		return false;
	},


	sendForgotten: function() {
		$.getJSON('/auth/forgottenPassword',
			{
				loginemail: $('#userNameEmail').val(),
				r: Math.random(10000)
			},
			function(data) {
				console.log(data);
				$(data.success ? '.successMsg' : '.errorMsg').slideUp();
				var msg = $(data.success ? '.successMsg' : '.errorMsg');
				msg.slideUp(200, function() {
					msg.text(data.message).slideDown();
				});
				return false;
			}
		);
	},


	baseValidation: function(form) {
		var error = false,
			msg = $('.errorMsg');

		// kötelező mezők ellenőrzése
		form.find('.req').each(function() {
			var $this = jQuery(this);
			if($this.val() == '') {
				$this.addClass('error');
				if(!error) {
					$this.focus();
					error = true;
				}
			} else $this.removeClass('error');
		});
		if(error) {
			return 'Kérem töltsön ki minden kötelező mezőt!';
		}

		return true;
	},


	initForm: function(form) {
		$('.errorMsg, .successMsg').slideUp();
		form.find('.req').removeClass('error');
	},


	basketPostfix: ' termék',
	emptyBasket: 'üres',

	basketCount: function() {
		$.getJSON('/shop/updateBasket',
			{ r: Math.random(10000) },
			function(data) {
				$('.basketCount').html(data.count ? data.count + nyomell.basketPostfix : nyomell.emptyBasket);
			}
		);
	},


	increaseAmount: function(id) {
		var a = $('#amount_' + id);
		a.val(a.val() * 1 + 1);
		nyomell.updateBasket(id, 'update');
	},


	decreaseAmount: function(id) {
		var a = $('#amount_' + id);
		a.val(a.val() * 1 - 1);
		if(a.val() * 1) nyomell.updateBasket(id, 'update');
		else if(!nyomell.removeBasket(id)) a.val(1);
	},


	updateBasket: function(id, mode) {
		var e = $('#amount_' + id),
			amount = e.val();
		if(!amount) nyomell.removeBasket(id);
		$.getJSON('/shop/updateBasket',
			{
				product: id,
				amount: amount,
				mode: mode,
				r: Math.random(10000)
			},
			function(data) {
				$('.itemCount').html(data.itemCount);
				$('#product_' + id).find('.pvalue').text(nyomell.currency(data.value));
				nyomell.refreshBasketValues(data);

				if(!$('#basketUpdater_' + id).length) {
					e.parent().append('<img id="basketUpdater_' + id +
							'" src="/wp-content/themes/nyomell/images/pipe.png" style="width:16px;height:16px;margin:0 0 6px 2px;" />');
					$('#basketUpdater_' + id).fadeOut(2000, function() {
						$(this).remove();
					});
				};
			}
		);
	},


	removeBasket: function(id) {
		if(!confirm('Biztosan eltávolítja a tételt a kosárból?')) return false;

		$.getJSON('/shop/updateBasket',
			{
				product: id,
				amount: 0,
				mode: 'update',
				r: Math.random(10000)
			},
			function(data) {
				nyomell.refreshBasketValues(data);

				$('#product_' + id + ', #sep_' + id).remove();
				var s = $('.products tbody tr:last');
				if(s.length && s.attr('id').indexOf('sep_') == 0) s.remove();
				if(!data.count) {
					$('div.products').children().hide();
					$('div.products .emptylist').show();
				}
				return false;
			}
		);
		return false;
	},


	refreshBasketValues: function(data) {
		$('.basketCount').text(data.count ? data.count + nyomell.basketPostfix : nyomell.emptyBasket);
		$('#orderTotal').text(nyomell.currency(data.total));
		$('#orderTax').text(nyomell.currency(data.tax));
		$('#orderGross').text(nyomell.currency(data.gross));
	},


	currency: function(v) {
		return v.formatMoney(0, ',', '.') + ' Ft';
	},


	sameAddressChange: function() {
		$('#postAddress').slideToggle();
	},


	deliveryChange: function() {
		var p = $('#orderPayment'),
			d = $(this).find(':selected').val();
		switch(d) {
			case 'preorder':
				p.find(':first').show();
				if(p.find(':selected').val() == 'collect') p.val('cash');
				p.find(':last').hide();
				break;
			case 'delivery':
				p.find(':last').show();
				if(p.find(':selected').val() == 'cash') p.val('pretransfer');
				p.find(':first').hide();
		}
	},


	validateOrder: function() {
		return true;
	}

};

$(function() {
	nyomell.init();
});

