﻿var Site = {
	
	svc: new SiteService(),
	
	emailRx: /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,
	
	reloadPage: function(){
		window.location = window.location;
	},
	
	handleError: function(resp){
		alert(resp.error);
	},
	
	logout: function(){
		var svc = new SiteService();
		svc.logout(function(resp){
			if(!resp.error){
				Site.reloadPage();
			}
		});
	},
	
	showLoginForm: function(){
		var form = $('#login-form');

		var width = form.width();
		var x = Math.round($(document).width()/2 - (width/2));
		form.css({left: x + 'px'});
		form.fadeIn('fast');
		$('#login-input').focus();		
	},

	hideLoginForm: function(){
		$('#login-form').fadeOut('fast');
		$('#login-error').hide();
	},
	
	authorize: function(){
		$('#login-error').hide();

		var login = $('#login-input').val();
		if(login.length <= 0 || login.length >= 50){
			$('#login-input').focus();
			return false;
		}	
		
		var password = $('#password-input').val();
		if(password.length <= 0 || password.length >= 50){
			$('#password-input').focus();
			return false;
		}	
		
		var btn = $('#login-button');
		btn.attr('disabled', 'disabled');
		
		var progress = $('#login-progress');
		progress.show();
		
		var remember = $('#login-remember').val() == 'on';
		
		var svc = new SiteService();
		svc.authorize(login, password, remember, function(resp){
			progress.hide();
			btn.attr('disabled', '');
			
			if(resp.result === true){
				window.location.reload();
				return;
			}
			
			$('#login-error').show();
		});	
	},
	
	register: function() {
		var validationError = $('#validation-error');
		try {
			var login = $('#login').val();
			if (login.length == 0) {
				$('#login').focus();
				throw new Error('Необходимо указать логин!');
			}

			if (!Site.emailRx.test(login)) {
				throw new Error('Логин должен быть правильным адресом электронной почты!');
			}

			var password = $('#password').val();
			var passwordConfirm = $('#password-confirm').val();
			if (password.length == 0) {
				$('#password').focus();
				throw new Error('Необходимо указать пароль!');
			}
			if (password != passwordConfirm) {
				$('#password-confirm').focus();
				throw new Error('Пароль и его подтвердждение не совпадают!');
			}


			var fio = $('#fio').val();
			if (fio.length == 0) {
				$('#fio').focus();
				throw new Error('Необходимо ввести Фамилию, Имя и Отчество!');
			}

			var address = $('#address').val();
			var phone = $('#phone').val();

			$('#register-button').hide();
			$('#loading').show();

			validationError.hide();

			var svc = new SiteService();
			svc.registerUser(login, password, fio, phone, address, function(response) {

            	$('#loading').hide();
            	$('#register-button').show();

            	if (response.error != null) {
            		validationError.text(response.error.message);
            		validationError.fadeIn();
            	} else {
            		if (typeof (onUserRegistration) == 'function'){
            			onUserRegistration(response.result);
            		}
            	}
            	
            });

		} catch (e) {
			validationError.text(e.message);
			validationError.fadeIn();

			$('#loading').hide();
			$('#register-button').show();
		}
	},
	
	recoverPassword: function(){
		
		$('#password-recover-fail').hide();
		$('#password-recover-success').hide();

		var login = $('#login-recover-input').val();
		
		if(login.length <= 0 || login.length > 50 || !Site.emailRx.test(login)){
			$('#login-recover-input').focus();
			return;
		}
		
		var svc = new SiteService();
		svc.recoverPassword(login, function(resp){
			
			if(resp.error){
				return Site.handleError(resp);
			}
			
			if(resp.result == true){
				$('#login-recover-input').val('');
				$('#password-recover-success').fadeIn();
			} else {
				$('#password-recover-fail').fadeIn();
			}			
		});
	},
	
	addBasketItem: function(classifierPath, productId, count, fn){
		
		if(isNaN(productId)){
			return false;
		}
		
		if(isNaN(count)){
			count = 1;
		}
		
		var svc = new SiteService();
		svc.addBasketItem(classifierPath, productId, count, function(resp){
			
			if(resp.error){
				return Site.handleError(resp);
			}
			
			if(typeof fn == 'function'){
				fn.call(this, resp, classifierPath, productId, count);
			}
		});
		
		return false;
	},
	
	removeBasketItem: function(productId, fn){
		
		if(isNaN(productId)){
			return false;
		}
		
		var svc = new SiteService();
		svc.removeBasketItem(productId, function(resp){
			
			if(resp.error){
				return Site.handleError(resp);
			}
			
			if(typeof fn == 'function'){
				fn.call(this, resp, productId);
			}
		});
		
		return false;
	},
	
	setBasketItemCount: function(productId, count, fn){
		
		if(isNaN(productId) || isNaN(count)){
			return;
		}
		
		var svc = new SiteService();
		svc.setBasketItemCount(productID, count, function(resp){
		
			if(resp.error){
				return Site.handleError(resp);
			}
		
			if(typeof fn == 'function'){
				fn.call(this, resp, productId, count);
			}
		});
	},
	
	recalcBasket: function(fn){
	
		$('#basket-form').submit();
	},
	
	clearBasket: function(){
		
		var clear = confirm('Вы действительно хотите очистить корзину?');
		
		if(clear === true){			
			var svc = new SiteService();
			svc.clearBasket(function(resp){
				
				if(resp.error){
					return Site.handleError(resp);
				}
			
				Site.reloadPage();
			});
		}
	},
	
	showBasketPopup: function(){
		var elem = $('#add-basket-item');
		var pos = elem.position();
		var width = elem.width();
		
		var popup = $('#basket-popup');
		var pWidth = popup.width();
		var pHeight = popup.height();
		
		var x = Math.round(pos.left + (width/2) - (pWidth/2));
		var y = pos.top - pHeight - 2;
		
		popup.css({
			left: x,
			top: y
		});
		popup.fadeIn('fast', function(){
			setTimeout(function(){
				popup.fadeOut('slow');
			}, 3000);
		});
	},
	
	onAddBasketItem: function(resp){
		var result = resp.result;
		
		var bi = $('#basket-info');
		bi.html(result);
		
		Site.showBasketPopup();
	},
	
	checkOrderForm: function(){
	
		var name = $value('#contact-name');
		if(name.length == 0){
			$('#contact-name').focus();
			return false;
		}
		
		var email = $value('#contact-email');
		var phone = $value('#contact-phone');	

		if(email.length == 0 && phone.length == 0){
			$('#contact-email').focus();
			return false;
		}
		
		var address = $value('#delivery-address');
		if(address.length == 0){
			$('#delivery-address').focus();
			return false;
		}
		
		return true;
	}
};
