// заглушка для общей функции по добавлению товара в корзину
var addToCart = $empty();
var removeFromCart = $empty();

window.addEvent('domready', function(){
	var cart_content = $$('#my-cart ul')[0];
	var total_price_container = $$('#my-cart .total')[0];
	var make_order_link = $$('.make-order')[0];
	var cart_description = $('cart-description');
	
	// при наведении на товар появляется ссылочка на удаление
	(function(){
		var cart_lis = $$('#my-cart ul.cart-content li');
		$each(cart_lis, function(li){
			var del_img = li.getFirst().getLast();
			li.addEvents({
				mouseenter: function(){
					del_img.show();
				},
				mouseleave: function(){
					del_img.hide();
				}
			})
		});
	})();
	
    // удаление из корзины
    var good_lis = $$('.cart-content a.del');
    good_lis.addEvent('click', function(e){
        new Event(e).stop();
        var li = this.getParent('li')
        li.setOpacity(.5);
        if(confirm('Вы действительно хотите удалить этот товар из корзины?')) {
            removeFromCart(this.get('href'), li);
        } else {
            li.setOpacity(1);
        }
    });
	
	function getPriceFromElement(element) {
		if(!element) return 0;
		var text = element.get('text');
		if(text.trim().length) {
			return text.match(/[\d\s\,]+/)[0].replace(/\s+/g, '').replace(/\,/, '.').toFloat();
		} else {
			return 0;
		}
	}

	addToCart = function(id, qty) {
		if(arguments.length > 2) {
			try{
				var el = $(arguments[2]);
			}catch(e){
			}
		}
		var request = new Request({
			url: '/cart/add/?json=true',
			onSuccess: function(response){
				response = JSON.decode(response);
				
				if(response.success) {
				
					if(cart_content){
						var exist = cart_content.getElement('li.good-' + response.data.id);
					
						if(exist) {
							var weight_price = exist.getElement('div.weight-price');
							var good_price = getPriceFromElement(weight_price.getElement('b'));
							var good_qty = weight_price.get('text').match(/^[^\s]+/)[0].toInt();
							good_qty += response.data.qty.toInt();
							weight_price.set('html', good_qty + ' ' + response.data.pack + ' / <b>' + ((response.data.price * response.data.qty) + good_price).formatMoney(0, '', ' ') + '</b>');
							exist.getLast().highlight();
						} else {
							var li = new Element('li', {
								'class': 'good-' + response.data.id,
								events: {
									mouseenter: function(){
										del.show();
									},
									mouseleave: function(){
										del.hide();
									}
								}
							});
							var del = new Element('a', {
								'class': 'del hide',
								events: {
									click: function(e){
										new Event(e).stop();
										li.setOpacity(.5);
							        	if(confirm('Вы действительно хотите удалить этот товар из корзины?')) {
							        		removeFromCart(this.get('href'), li);
							        	} else {
							        		li.setOpacity(1);
							        	}
									}
								},
								href: response.data.id
							});
							var delimg = new Element('img', {
								alt: '',
								src: '/images/delete-from-cart.gif'
							});
							var divc = new Element('div', {
								'class': 'c'
							});
							var atitle = new Element('a', {
								href: response.data.url,
								text: response.data.name
							});
							var weightprice = new Element('div', {
								'class': 'weight-price',
								html: response.data.qty + ' ' + response.data.pack + ' / <b>' + (response.data.price * response.data.qty).formatMoney(0, '', ' ') + ' руб.</b>'
							});
							
							del.adopt(delimg);
							li.adopt(divc);
							divc.adopt(atitle);
							divc.adopt(weightprice);
							divc.adopt(del);
							
							li.inject(cart_content, 'top');
							divc.highlight();
						}
					}
					
					if(cart_description) {
						var total = response.data.total.toFloat();
						var total_qty = response.data.total_qty.toInt();
						cart_description.set('html', 'Вы набрали ' + total_qty + ' ' + 'товар'.decline(total_qty, 'ов', 'ов', '', 'ов', 'а') + '<br />на сумму <b>' + total.formatMoney(0, '', ' ') + ' руб.</b>').highlight();
					}
					
					var total_price = getPriceFromElement(total_price_container);
					total_price += (response.data.price * response.data.qty);
					if(total_price_container) {
						total_price_container.set('html', 'Итого:<br />' + total_price.formatMoney(0, '', ' ') + ' руб.').show().highlight();
					}
					if(make_order_link){
						make_order_link.show();
					}
					try{
						el.set('text', 'добавлено').highlight();
						(function(){
							el.set('text', 'в корзину');
						}).delay(1000);
					}catch(e){
					}
				} else {
					alert(response.message);
				}
			}
		});
		request.send('item_id=' + id + '&qty=' + qty);
	}
	
	removeFromCart = function(id, element){
		var request = new Request({
			url: '/cart/remove/?json=true',
			onSuccess: function(response){
			
				response = JSON.decode(response);
				if(response.success) {
					var price = getPriceFromElement(element.getElement('b'));
					var total_price = getPriceFromElement(total_price_container);
					total_price -= price;
					if(total_price) {
						total_price_container.set('html', 'Итого:<br />' + total_price.formatMoney(0, '', ' ') + ' руб.').highlight();
					} else {
						total_price_container.set('html', '').hide();
						make_order_link.hide();
					}
					element.destroy();
				} else {
					element.setOpacity(1);
					alert(response.message);
				}
			}
		});
		
		request.send('item_id=' + id);
	}
	
	// тенька
	var overlay = $('form-overlay');
	
	// вход в систему
	(function(){
		var auth_block = $('form-auth');
		var auth_form = auth_block.getElement('form');
		
		var fields = auth_form.getElements('input[type=text],input[type=password]');

		var email_field = fields[0];
		var password_field = fields[1];
		
		var email_title = email_field.getPrevious('span');
		var password_title = password_field.getPrevious('span');
		
		var email_subtitle = email_field.getNext('span');
		var password_subtitle = password_field.getNext('span');
		
		var r = new Request({
			url: '/auth/login/',
			onSuccess: function(response){
				response = JSON.decode(response);
				// тут типа надо че-то делать с ответом, но пока что не ясно что
				if(response.success) {
					overlay.setStyle('display', 'none');
					auth_block.setStyle('display', 'none');
					
					var d = new Element('div', {
						'class': 'auth-lc',
						html: 'Добрый день,<br />' + response.data.name + '<br /><a href="/cabinet/">посмотреть историю заказов</a>&nbsp;&nbsp;<a href=\"/auth/logout/\">выйти</a>'
					}).replaces($('auth'));
					
					(function(){
						d.highlight();
					}).delay(500)
					
				} else {
					email_title.set('text', response.message).setStyle('color', '#f00')
				}
			}
		});

		auth_form.addEvent('submit', function(e){
			new Event(e).stop();
			var error = false;
			if(!email_field.get('value').trim().length || !email_field.get('value').trim().match(/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i)) {
				if(!email_subtitle) {
					email_subtitle = new Element('div', {
						'class': 'form-help-text'
					}).inject(email_field, 'after');
					new Element('br').inject(email_field, 'after');
				}
				email_subtitle.show().setStyle('color', 'red').set('text', 'пожалуйста, укажите электронную почту').getPrevious().show();
				email_title.highlight();
				error = true;
			} else {
				if(email_subtitle) {
					email_subtitle.hide().getPrevious().hide()
				}
			}
			if(!password_field.get('value').trim().length) {
				if(!password_subtitle) {
					password_subtitle = new Element('div', {
						'class': 'form-help-text'
					}).inject(password_field, 'after');
					new Element('br').inject(password_field, 'after');
				}
				password_subtitle.show().setStyle('color', 'red').set('text', 'пожалуйста, укажите пароль').getPrevious().show();
				password_title.highlight();
				error = true;
			} else {
				if(password_subtitle) {
					password_subtitle.hide().getPrevious().hide()
				}
			}
			if(!error) {
				r.send(auth_form.toQueryString());
			}
		});
	})();
	
	// регимся
	(function(){
		var reg_block = $('form-reg');
		var reg_form = reg_block.getElement('form');
		
		var fields = reg_form.getElements('input');
		
		var name_field = fields[0];
		var email_field = fields[1];
		var password_field = fields[2];
		
		var name_title = name_field.getPrevious('span');
		var email_title = email_field.getPrevious('span');
		var password_title = password_field.getPrevious('span');
		
		var name_subtitle = name_field.getNext('span');
		var email_subtitle = email_field.getNext('span');
		
		var r = new Request({
			url: '/auth/register/',
			onSuccess: function(response){
				response = JSON.decode(response);
				if(response.success) {
					overlay.setStyle('display', 'none');
					reg_block.setStyle('display', 'none');
					alert('Ура! Вы зарегистрировались!');
				}
			}
		});
		
		var email_r = new Request({
			url: '/auth/checkemail/',
			onRequest: function(){
				awaiting_email = true;
			},
			onSuccess: function(response){
				response = JSON.decode(response);
				
				name_field.disabled = false;
				email_field.disabled = false;
				
				if(response.success) {
					r.send(reg_form.toQueryString());
				} else {
					email_title.highlight();
					email_subtitle.setStyle('color', 'red').set('text', 'Такой пользователь уже зарегистрирован');
				}
				
				awaiting_email = false;
			}
		});
		
		var awaiting_email = false;
		
		reg_form.addEvent('submit', function(e){
			new Event(e).stop();
			
			var error = false;
			
			if(!awaiting_email) {
				email_subtitle.setStyle('color', '').set('text', 'nickname@domain.com');
			
				if(!name_field.get('value').trim().length) {
					name_subtitle.setStyle('color', 'red').set('text', 'пожалуйста, укажите имя');
					name_title.highlight();
					error = true;
				} else {
					name_subtitle.setStyle('color', '').set('text', 'например: Сергей Борисович Парфенов');
				}
				if(!email_field.get('value').trim().length || !email_field.get('value').trim().match(/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i)) {
					email_subtitle.setStyle('color', 'red').set('text', 'пожалуйста, укажите правильный адрес электронной почты');
					email_title.highlight();
					error = true;
				} else {
					email_subtitle.setStyle('color', '').set('text', 'nickname@domain.com');
				}
				
				if(!error) {
					// проверка почты
					var email = email_field.get('value').trim();
					email_field.disabled = true;
					name_field.disabled = true;
					
					email_r.send('email=' + email);
				}
			}
		});		
	})();
	
	// забыли пароль?
	(function(){
		try{
			var form = $('form-forgot');
			var email_field = form.getElement('input[type=text]');
			var email_title = email_field.getPrevious('span');
			var email_subtitle = email_field.getNext('div');

			var r = new Request({
				url: '/auth/recover/',
				onRequest: function(){
				
				},
				onSuccess: function(r){
					r = JSON.decode(r);
					if(r.success) {
						email_title.setStyle('color', '#078000').set('html', 'На указанный электронный ящик<br />выслан Ваш пароль.').highlight();
					} else {
						email_title.setStyle('color', 'red').set('html', 'Пользователь с указанным адресом<br />электронной почты не зарегистрирован.').highlight();
					}
				}
			});
			
			form.addEvent('submit', function(e){
				var event = new Event(e);
				
				if(!email_field.get('value').trim().length || !email_field.get('value').trim().match(/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i)) {
					if(!email_subtitle) {
						email_subtitle = new Element('div', {
							'class': 'form-help-text',
							text: 'пожалуйста, укажите электронную почту'
						}).setStyle('color', 'red').inject(email_field, 'after');
						new Element('br').inject(email_field, 'after');
					}
					email_subtitle.show();
					email_title.highlight();
					
				} else {
					var data = form.toQueryString();
					r.send(data);
				}
				event.stop();
			});
			
		}catch(e){
		}
	})();
});
