﻿var errors = new Array();


function init() {
	if (document.getElementById) {
		for (id in cart) {
			updateValue(id);
		}
		if (document.getElementById('currency-select'))
			document.getElementById('currency-select').value = country;
		if (document.getElementById('country-select'))
			document.getElementById('country-select').value = country;
		setTimeout(updateCounter, 5000);
	}
}


function updateCounter() {
	document.getElementById("topping-icon").setAttribute('src',
		'http://122801202449.c.mystat-in.net/?i122801202449&t4&g13&w' + screen.width + '&c' + screen.colorDepth + '&r' + escape(document.referrer) + '&v4&j' + (navigator.javaEnabled()?"1":"0") + '&random=' + Math.random()
	);
}


function hover(id) {
	if (errors[id] == true)
		return;
	if (document.getElementById) {
		if (document.getElementById('cart-' + id).checked)
			document.getElementById('preview-' + id).className = 'preview cart hover';
		else
			document.getElementById('preview-' + id).className = 'preview hover';
	}
}

function unhover(id) {
	if (errors[id] == true)
		return;
	if (document.getElementById) {
		if (document.getElementById('cart-' + id).checked)
			document.getElementById('preview-' + id).className = 'preview cart';
		else
			document.getElementById('preview-' + id).className = 'preview';
	}
}


function changeCart(id) {
	if (document.getElementById) {
		if (document.getElementById('cart-' + id).checked) {
			quantity = 1;
			if (document.getElementById('quantity-' + id)) {
				var quantity = parseInt(document.getElementById('quantity-' + id).value);
				if ((quantity != quantity) || (quantity <= 0)) {
					errors[id] = false;
					document.getElementById('quantity-' + id).value = 1;
				}
				document.getElementById('quantity-' + id).disabled = false;
				if (document.getElementById('mouline-' + id))
					document.getElementById('mouline-' + id).disabled = false;
				quantity = parseInt(document.getElementById('quantity-' + id).value);
			}
			if (errors[id] != true)
				document.getElementById('preview-' + id).className = 'preview cart hover';
		} else {
			quantity = 0;
			errors[id] = false;
			if (document.getElementById('quantity-' + id))
				document.getElementById('quantity-' + id).disabled = true;
			if (!(document.getElementById('mouline'))) {
				if (document.getElementById('mouline-' + id))
					document.getElementById('mouline-' + id).disabled = true;
			} else {
				if (document.getElementById('mouline-' + id)) {
					document.getElementById('mouline-' + id).checked = false;
				}
			}
			document.getElementById('preview-' + id).className = 'preview hover';
		}
		if (!cart[id])
			cart[id] = new Object();
		cart[id].quantity = quantity;
		document.getElementById(getAJAXId()).setAttribute('src', '/files/cart.php?quantity=' + cart[id].quantity + '&id=' + id + '&random=' + Math.random());
		updateValue(id);
	}
}

function changeQuantity(id) {
	if (document.getElementById) {
		var quantity = parseInt(document.getElementById('quantity-' + id).value);
		if ((quantity != quantity) || (quantity < 0)) {
			document.getElementById('preview-' + id).className = 'preview alert';
			errors[id] = true;
			cart[id].quantity = 0;
		} else {
			cart[id].quantity = quantity;
			document.getElementById('preview-' + id).className = 'preview cart hover';
			errors[id] = false;

			document.getElementById('cart-' + id).checked = (quantity > 0);
			changeCart(id);
		}

		document.getElementById(getAJAXId()).setAttribute('src', '/files/cart.php?quantity=' + cart[id].quantity + '&id=' + id + '&random=' + Math.random());
		updateValue(id);
	}
}

function formatNumber(number) {
	var first, second, integer, fraction;
	integer = parseInt(number);
	fraction = Math.round((number - integer) * 100);
	if (fraction < 10)
		fraction = '0' + fraction;
	first = '';
	second = integer;
	if (number > 1000) {
		first = parseInt(number/1000);
		second = parseInt((number - first * 1000) + 0.5);
		if ('000' + second < 10)
			second = '0' + second;
		if ('000' + second < 100)
			second = '0' + second;
	}
	return first + ' ' + second + ',' + fraction;
}

function getTotal() {
	var canvas = 0;
	var weight = 0;
	for (id in cart) {
		cart[id].value = cart[id].price;
		if (cart[id].mouline > 0) {
			cart[id].value += cart[id].mouline * mouline.price;
			weight += cart[id].mouline * cart[id].quantity * mouline.weight;
		}
		cart[id].value *= cart[id].quantity;
		canvas += cart[id].value;
		weight += cart[id].weight * cart[id].quantity;
	}
	this.canvas = canvas;
	this.weight = weight;
	this.shipping = getShipping(weight, canvas);
	return this;
}

function getShipping(weight, canvasCost) {
	if (!document.getElementById('payment-select'))
		return 0;
	if (weight == 0)
		return 0;
	weight += 50;
	var sum = 0;
	for (id in cart) {
		cart[id].value = cart[id].price;
		if (cart[id].mouline > 0) {
			cart[id].value += cart[id].mouline * mouline.price;
		}
		cart[id].value *= cart[id].quantity;
		sum += cart[id].value;
	}
	switch (country) {
		case 'ua':
			switch (document.getElementById('payment-select').selectedIndex) {
				case 1:
					// Наложенный платёж, Украина
					var delivery = 4.8 * Math.ceil(weight / 1000);
					delivery += 6.72;
					var insurance = 0.018 * sum;
					if (insurance < 3)
						insurance = 3;
					delivery += insurance + 0.46;
					delivery = Math.ceil(delivery / 5) * 5;
					return delivery;
					break;
				case 0:
					// Предоплата, Украина
					var delivery = 0;
					if (weight <= 100) delivery = 5.30;
					else if (weight <= 250) delivery = 6.40;
					else if (weight <= 500) delivery = 7.50;
					else if (weight <= 1000) delivery = 10.10;
					else if (weight <= 2000) delivery = 14.60;
					if (weight > 2000)
						delivery = 7.55 * Math.ceil(weight / 1000);
					delivery += 1.00;
					delivery *= 1.20;

					var insurance = 0.018 * sum;
					if (insurance < 3)
						insurance = 3;
					delivery += insurance + 0.46;
					delivery = Math.ceil(delivery);
					return delivery;
					break;
			}
		case 'ru':
			switch (document.getElementById('payment-select').selectedIndex) {
				case 0:
					// Предоплата, Россия
					var delivery = 0;
					delivery = 1.15 * Math.ceil(weight / 1000); // За кг
					delivery += 13.70; // За посылку
					delivery += getInternationalInsurance(sum) + 2 + 0.5; // Страховка, оценка и конверт 4₴
					delivery *= 1.2 / rate * rates['us']; // НДС и пересчёт валюты
					delivery *= 0.8; // Учитываем «курс»
					delivery = Math.ceil(delivery / 50) * 50;
					return delivery;
					break;
			}
		case 'kz':
			switch (document.getElementById('payment-select').selectedIndex) {
				case 0:
				// Предоплата, Казахстан
					var delivery = 0;
					delivery = 2.15 * Math.ceil(weight / 1000); // За кг
					delivery += 8.20; // За посылку
					delivery += getInternationalInsurance(sum) + 2 + 0.5; // Страховка, оценка и конверт 4₴
					delivery *= 1.2 / rate * rates['us']; // НДС и пересчёт валюты
					delivery = Math.ceil(delivery / 50) * 50;
					return delivery;
					break;
			}
		case 'by':
			switch (document.getElementById('payment-select').selectedIndex) {
				case 0:
				// Предоплата, Беларусь
					var delivery = 0;
					delivery = 1.70 * Math.ceil(weight / 1000); // За кг
					delivery += 8.40; // За посылку
					delivery += getInternationalInsurance(sum) + 2 + 0.5; // Страховка, оценка и конверт 4₴
					delivery *= 1.2 / rate * rates['us']; // НДС и пересчёт валюты
					delivery = Math.ceil(delivery / 250) * 250;
					return delivery;
					break;
			}
		case 'eu':
			switch (document.getElementById('payment-select').selectedIndex) {
				case 0:
				// Предоплата, ЕС
					var delivery = 0;
					delivery = 1.85 * Math.ceil(weight / 1000); // За кг
					delivery += 16.00; // За посылку
					delivery += getInternationalInsurance(sum) + 2 + 0.5; // Страховка, оценка и конверт 4₴
					delivery *= 1.2 / rate * rates['us']; // НДС и пересчёт валюты
					delivery = Math.ceil(delivery);
					return delivery;

					break;
			}
		case 'us':
			switch (document.getElementById('payment-select').selectedIndex) {
				case 0:
				// Предоплата, США
					var delivery = 0;
					delivery = 2.80 * Math.ceil(weight / 1000); // За кг
					delivery += 10.00; // За посылку
					delivery += getInternationalInsurance(sum) + 2 + 0.5; // Страховка, оценка и конверт 4₴
					delivery *= 1.2 / rate * rates['us']; // НДС и пересчёт валюты
					delivery = Math.ceil(delivery);
					return delivery;
					break;
			}
	}
	return 0;
}

function changeMouline(id, quantity) {
	if (document.getElementById) {
		if (!cart[id])
			cart[id] = new Object();
		if (document.getElementById('mouline-' + id).checked) {
			cart[id].mouline = quantity;
			if (document.getElementById('mouline'))
				document.getElementById('mouline').className = 'cart';
			if (document.getElementById('cart-' + id))
				document.getElementById('cart-' + id).checked = true;
				changeCart(id);
			if (errors[id] != true)
				document.getElementById('preview-' + id).className = 'preview cart';
			changeCart(id);
		} else {
			cart[id].mouline = 0;
			if (document.getElementById('mouline'))
				document.getElementById('mouline').className = '';
		}
		document.getElementById(getAJAXId()).setAttribute('src', '/files/cart.php?mouline=' + cart[id].mouline + '&id=' + id + '&random=' + Math.random());
		updateValue(id);
	}
}

function updateValue(id) {
		if (id) {
			cart[id].value = cart[id].price;
			if (cart[id].mouline > 0)
				cart[id].value += cart[id].mouline * mouline.price;
	
			if (document.getElementById('price-' + id))
				document.getElementById('price-' + id).innerHTML = formatNumber(cart[id].value);
	
			cart[id].value *= cart[id].quantity;
	
			if (document.getElementById('value-' + id)) {
				document.getElementById('value-' + id).childNodes[1].innerHTML = formatNumber(cart[id].value);
				if (cart[id].quantity > 1) {
					document.getElementById('value-' + id).style.display = '';
				} else {
					document.getElementById('value-' + id).style.display = 'none';
				}
			}
		}

		var total = getTotal();

		if (document.getElementById('canvas-value'))
			document.getElementById('canvas-value').innerHTML = formatNumber(total.canvas) + ' ' + currency;
		if (document.getElementById('shipping-value'))
			document.getElementById('shipping-value').innerHTML = formatNumber(total.shipping) + ' ' + currency + ' (посылка весом ' + weight + ' г, ' + (document.getElementById('payment-select').selectedIndex == 1 ? 'наложенный платёж' : 'предоплата') + ').';
		if (document.getElementById('shipping-value'))
			document.getElementById('total-value').innerHTML = formatNumber(total.canvas + total.shipping) + ' ' + currency;

		if (document.getElementById('submit'))
			document.getElementById('submit').disabled = !(total > 0);

		if (document.getElementById('money'))
			document.getElementById('money').value = formatNumber(total.canvas) + ' + ' + formatNumber(total.shipping) + ' = ' + formatNumber(total.canvas + total.shipping);
}

function updateCurrency(object) {
	location.replace('/files/cart.php?country=' + object.value + '&location=' + location);
}

var disable = true;
function check(input) {
	switch (input.getAttribute('id')) {
		case 'name':
			if (input.value == '') {
				disable = true;
				input.className = 'alert';
				document.getElementById('name-alert').innerHTML = 'Введите свои имя и фамилию.';
			} else {
				disable = false;
				input.className = '';
				document.getElementById('name-alert').innerHTML = '';
			}
			break;
		case 'email':
		case 'phone':
			if ((document.getElementById('email').value == '') && (document.getElementById('phone').value == '')) {
				disable = true;
				document.getElementById('email').className = 'alert';
				document.getElementById('phone').className = 'alert';
				document.getElementById('email-alert').innerHTML = 'Введите свой адрес электронной почты (E-mail).';
				document.getElementById('phone-alert').innerHTML = 'Введите контактный телефон (вместе с кодом города).';
			} else {
				disable = false;
				document.getElementById('email').className = '';
				document.getElementById('phone').className = '';
				document.getElementById('email-alert').innerHTML = '';
				document.getElementById('phone-alert').innerHTML = '';
			}
			break;
		case 'zip':
			if (input.value == '') {
				input.className = 'alert';
				document.getElementById('zip-alert').innerHTML = 'Указание почтового индекса ускорит получение посылки.';
			} else {
				input.className = '';
				document.getElementById('zip-alert').innerHTML = '';
			}
			break;
		case 'city':
			if (input.value == '') {
				disable = true;
				input.className = 'alert';
				document.getElementById('city-alert').innerHTML = 'Введите город и, при необходимости, область и район.';
			} else {
				disable = false;
				input.className = '';
				document.getElementById('city-alert').innerHTML = '';
			}
			break;
		case 'street':
			if (input.value == '') {
				disable = true;
				input.className = 'alert';
				document.getElementById('street-alert').innerHTML = 'Введите улицу и номер дома, квартиры.';
			} else {
				disable = false;
				input.className = '';
				document.getElementById('street-alert').innerHTML = '';
			}
			break;
	}
	document.getElementById('submit').disabled = disable;
}

function getInternationalInsurance(amount) {
	var insurance = amount * rate / rates['us'] * 0.005;
	if (insurance <= 1)
		insurance = 1;
	return insurance;
}



var AJAXCounter = 0;

function getAJAXId() {
	if (AJAXCounter >= 5)
		AJAXCounter = 0
	AJAXCounter++;
	return 'server-request-' + AJAXCounter;
}
