
/**
 * Interactive order form.
 *
 * @author moorcock
 * Date: 27.11.10
 */

/*
if(!Array.prototype.indexOf) {
    Array.prototype.indexOf = function(searchElement, fromIndex){
        for(var i = fromIndex||0, length = this.length; i<length; i++)
            if(this[i] === searchElement) return i;
        return -1
    };
}
*/

var OrderForm = {
	/**
	 * Id элемента формы.
	 */
	formId: 'order-form',

	/**
	 * класс собщений об ошибках.
	 */
	errClass: 'error-hint',

	/**
	 * класс для ошибочного поля ввода.
	 */
	errFieldClass: 'error-field',

	/**
	 * префикс Id собщений об ошибках.
	 */
	errId: 'error-',

	validateEmail: function (email) {
		var pattern = /^[a-zA-Z0-9._%+-]+@(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,4}$/;
		return email.trim().match(pattern);
	},

	validateIndex: function (index) {
		var pattern = /^[0-9]{6}$/;
		return index.trim().match(pattern);
	},

	validateField: function (field) {
		return field.trim().length;
	},

	validateDiscountCode: function (code) {
		if (!code.trim().length) return true;
		return (OrderForm.getDiscount(code));
	},

	/**
	 * Возвращает процент скидки по коду.
	 * @param code
	 */
	getDiscount: function (code) {
		var discount = 0;
		if (code == 617) { discount = 30; }
		return discount;
	},

	/**
	 * Переключает доступность способов оплаты при смене способа доставки.
	 * @param id
	 */
	selectDeliveryMethod: function (id) {

		if (id=='foreign_package') {
			if ($('input#payment-post:checked')) {
				$('input#payment-yandex').attr('checked', 'checked')
			};
			$('input#payment-post').attr('disabled', 'disabled').removeAttr('checked');
		}
		else {
			$('input#payment-post').removeAttr('disabled');
		}
	},

	/**
	 * Подсчет итогой стоимости.
	 */
	calculate: function () {
		var form = $('#'+OrderForm.formId);
		var products = 0; // итоговая цена
		var amount = 0; // итоговая цена

		var product_count=0; // число позиций в заказе; нужно для вычисления стоимости доставки

		// Цены товаров берутся из полей 'hidden'
		form.find('input[name|="amount"]').each(function() {
			var val = parseInt(!$(this).data('new-val') ? $(this).attr('value') : $(this).data('new-val'));
			if (!val) val = 0;
			var id = $(this).attr('name').split('-');
			var price = parseFloat(form.find('input[name="price-'+id[1]+'"]').attr('value'));
			amount += price*val;
			product_count += val;
		});
		products = amount;
		
		// Скидка
		
		var discount;
		
		if (amount > 0) {
			var inputDiscount = form.find('input[name="discount-code"]');
			discount = parseFloat(OrderForm.getDiscount(
				!inputDiscount.data('new-val') ? inputDiscount.attr('value') : inputDiscount.data('new-val')
			));
			var discountMessage = form.find('#discount-message');
			var discountMessagePercent = form.find('#discount-message-percent');
			discountMessagePercent.html(discount);
			if (discount > 0) discountMessage.show(100);
			else discountMessage.hide();
			
			var ErrorDiscountCode = form.find('#error-discount-code');
			ErrorDiscountCode.hide();
			inputDiscount.removeClass(OrderForm.errFieldClass);
		}

		// Список id предоплаты
		
		if ( form.find('input[name=payment]:checked').val() == 'yandex' ) {
			// -10 % по предоплате
			if (discount<10) discount = 10;
		}
		if ( form.find('input[name=payment]:checked').val() == 'wm' ) {
			// -10 % по предоплате
			if (discount<10) discount = 10;
		}
		
		var discountv = 0;
		if (discount > 0) discountv = Math.round(amount*(discount/100));
		if (discount > 0) amount -= Math.round(amount*(discount/100));
		var discountSumInput = form.find('input[name="discount"]');
		var discountPercentInput = form.find('input[name="discount-percent"]');
		discountSumInput.attr('value', discountv);
		discountPercentInput.attr('value', discount);
		
		amount = Math.round(amount);
		// Запишем общую стоимость товаров со скидкой
		$('#amount-goods').html(products);
		form.find('input[name=sum-goods]').attr('value',amount);

		// Цена за способ доставки и оплаты
		var delivery = 0;
		if (amount > 0) {

			$('span#delivery-first-class-price').html(120+product_count*30+' руб.')
			$('span#delivery-parcel-price').html(70+product_count*20+' руб.')
			$('span#delivery-foreign-package-price').html(120+product_count*30+' руб.')
			
			// Курьер
			if (form.find('input[name=delivery]:checked').val() == 'first_class') {
				delivery = 120+product_count*30;
			} else if (form.find('input[name=delivery]:checked').val() == 'parcel') {
				delivery = 70+product_count*20;
			} else if (form.find('input[name=delivery]:checked').val() == 'foreign_package') {
				delivery = 120+product_count*30;
			}	
		}

		// Добавим 60 рублей, если выбрана коробка
		if (form.find('input[name=package]:checked').val() == 'box') {
			delivery += 60;
		}

		
		// Запишем стоимость доставки
		form.find('input[name=sum-delivery]').attr('value', delivery);
		
		amount += delivery;
		var amount1 = amount;
		// уменьшим стоимость, чтобы она заканчивалась на "1"
		amount1 = Math.floor( (amount1-1)/10 ) * 10  + 1;

		if (amount-amount1 ==0) {
			$('.bonus').hide();
		}
		else {
			$('.bonus_val').html(amount-amount1);
			$('.bonus').show();
		}

		$('#amount-all').html(amount1);
		$('#amount-all-2').html(amount1);
		var ai = form.find('input[name="sss"]');
		ai.attr('value', amount1);
		
		
		// включим/выключим ремарку про 3-8 процентов на почте
		if ( form.find('input[name=payment]:checked').val() == 'post' ) {
			$('p#post_percent').show();
		}
		else {
			$('p#post_percent').hide();
		}
		

	},

	/**
	 * Проверка правильности заполнения полей.
	 */
	validate: function () {
		var form = $('#'+OrderForm.formId);
		var errors = new Array;

		$('#'+OrderForm.formId+' input[type=submit]').attr('disabled', 'disabled');
		$('.'+OrderForm.errClass).hide(); 
		form.find('input[type=text]').removeClass(OrderForm.errFieldClass);

		if (!OrderForm.validateField(form.find('input[name=surname]').val())) errors.push('surname');
		if (!OrderForm.validateField(form.find('input[name=name]').val())) errors.push('name');
		if (!OrderForm.validateField(form.find('input[name=patronymic]').val())) errors.push('patronymic');
		if (!OrderForm.validateEmail(form.find('input[name=mail]').val())) errors.push('mail');
		if (!OrderForm.validateField(form.find('input[name=city]').val())) errors.push('city');
		if (!OrderForm.validateField(form.find('input[name=address]').val())) errors.push('address');
		if (!OrderForm.validateIndex(form.find('input[name=postal-code]').val())) errors.push('postal-code');
		if (!OrderForm.validateField(form.find('input[name=phone]').val())) errors.push('phone');
		if (!OrderForm.validateDiscountCode(form.find('input[name=discount-code]').val())) errors.push('discount-code');

		if (errors.length) {
			$('#'+OrderForm.formId+' input[type=submit]').removeAttr('disabled');

			$(errors).each(function (key, err) {
				$('#'+OrderForm.errId+err).show();
				form.find('input[name='+err+']').addClass(OrderForm.errFieldClass);
			});
			if (!OrderForm.validateDiscountCode(form.find('input[name=discount-code]').val())) {
				location.href = "/order/#discount-anchor";
			} else {
				location.href = "/order/#person";
			}
		}

		return !errors.length;
	},

	/**
	 * Инициализация формы.
	 */
	init: function () {
		var form = $('#'+OrderForm.formId);

		// Событие на отправку формы
		form.submit(function () {
			OrderForm.calculate();
			return OrderForm.validate();
		});

		// Пересчет итога при изменении количества
		form.find('input[name|="amount"]').each(function() {
			$(this).keypress(function (event) {
				var ch = String.fromCharCode(event.which);
				if (ch) $(this).data('new-val', $(this).attr('value')+ch);
				OrderForm.calculate();
				$(this).data('new-val', false);
			})
			.keyup(function (event) {
				OrderForm.calculate();
			})
			.change(function (event) {
				OrderForm.calculate();
			});
		});

		// Пересчет итога при изменении кода скидки
		form.find('input[name="discount-code"]').change(function() {
			OrderForm.calculate();
		})
		.keypress(function (event) {
			var ch = String.fromCharCode(event.which);
			if (ch) $(this).data('new-val', $(this).attr('value')+ch);
			OrderForm.calculate();
			$(this).data('new-val', false);
		})
		.keyup(function (event) {
			OrderForm.calculate();
		});

		// Пересчет итога при изменении способа доставки
		form.find('input[name=delivery]').click(function() {
			OrderForm.selectDeliveryMethod($(this).val());
			OrderForm.calculate();
		});

		// Пересчет итога при изменении способа оплаты
		form.find('input[name=payment]').click(function() {
			OrderForm.calculate();
		});

		// Пересчет итога при изменении способа упаковки
		form.find('input[name=package]').click(function() {
			OrderForm.calculate();
		});
		
		OrderForm.calculate();
	}
};

$(function() {
	// On document loaded
	OrderForm.init();

});






function addBookmark(a) {
	title='Интернет-магазин интимных товаров';
	url='http://intimdoma.ru';
	try {
		// Internet Explorer
		window.external.AddFavorite(url, title);
	}
	catch (e) {
		try {
			// Mozilla
			window.sidebar.addPanel(title, url, "");
		}
		catch (e) {
			// Opera
			if (typeof(opera)=="object") {
				a.rel="sidebar";
				a.title=title;
				a.url=url;
				return true;
			} else {
				// Unknown
				brow = navigator.appVersion;
				ctrl = (brow.indexOf('Macintosh') == -1) ? 'Ctrl' : 'Command';
				alert('К сожалению, в в вашем браузере нет метода для программного добавления в закладки... нажмите, пожалуйста, '+ctrl+'+D после закрытия этого диалогового окна.');
			}
		}
	}
	return false;
}

$(function() {
	$("a#fav").click(function() {
		return addBookmark(this);
	});
});

function updateSearchSelect() {
	var c1;
	c1 = $('select#search_select_c1 option:selected').val();
	if (c1==0) {
		$('span#search_span_c2').fadeOut('fast');
		$('select#search_select_c2').fadeOut('fast');
	}
	else {
		$('span#search_span_c2').fadeIn('fast');
		$('select#search_select_c2').fadeIn('fast');

		$('select#search_select_c2 option').remove();
		$('select#search_select_c2').append('<option value="0">Все</option>');
		
		$('span#classifier2_hidden_data span.'+c1).each(function() {
			$('select#search_select_c2').append('<option value="'+$(this).attr('title')+'">'+$(this).text()+'</option>');
		})
		
		$('select#search_select_c2 option').each(function() {
			if ($(this).attr('value') == $('span#classifier2_hidden_data').attr('title')) {
				$(this).attr('selected','selected');
			}
		})
		
		
	}
	
	
}

/* поля поиска */
$(function() {
	updateSearchSelect();
	$('select#search_select_c1').change(function() {
		updateSearchSelect();
	});
});

/* сортировка */
$(function() {
	$('select#sort_select').change(function() {
		$('form[name=filter]').submit();
	});
});

