function readCookie(name)
{
	var cookies = document.cookie.split('; ');

	for(var i in cookies)
	{
		var cookie = cookies[i].split('=');
		var currName = cookie.shift();
		var currVal = cookie.join('=');

		if(currName == name) return currVal;
	}

	return false;
}

function arrayIndexOf(arr, a)
{
	for(var i in arr) if(arr[i] == a) return i;
	return -1;
}

function ellipsis(str, size, font, width)
{
	var obj = document.getElementById('ellipsisContainer');
	
	obj.style.fontFamily = font;
	obj.style.fontSize = size;
	
	var ellipsis = '...';
	var subStr = '';
	var cont = true;
	for(var i = 0; cont; i++)
	{
		if(i + 1 == str.length)
		{
			cont = false;
			subStr += str.substr(i, 1);
			ellipsis = '';
		}
		else
		{
			obj.innerHTML = subStr + str.substr(i, 1) + '...';
			if(obj.offsetWidth > width) cont = false;
			else subStr += str.substr(i, 1);
		}
	}
	
	subStr = subStr + ellipsis;
	
	return subStr;
}

var defaultShippingOption = 1;

if(!readCookie('shipping_option')) document.cookie = 'shipping_option=' + defaultShippingOption + '; path=/';
var shippingOption = readCookie('shipping_option');

function updateShippingOption(option)
{
	document.cookie = 'shipping_option=' + option + '; path=/';
	shippingOption = readCookie('shipping_option');
	updateCart();
}

var freeDeliveryLimit = getVariable('Free_Delivery_Limit');

function getVariable(v)
{
	return ajax('../ajax/get_var.php', 'v=' + v, 'get');
}

function calcShipping(orderPrice)
{
	shipping = 0;
	
	if(orderPrice > freeDeliveryLimit) return shipping;
	
	var cart = getCart();
	
	var option = shippingOption;
	if(arguments[1]) option = arguments[1];
	
	var highestShippingBand = 0;
	for(var i in cart)
	{
		shipping += shippingMatrix[option]['Shipping_Bands'][cart[i]['Shipping_Band']]['Additional_Price'] * cart[i]['Quantity'];
		if(cart[i]['Shipping_Band'] > highestShippingBand) highestShippingBand = cart[i]['Shipping_Band'];
	}
	
	shipping += (shippingMatrix[option]['Shipping_Bands'][highestShippingBand]['Price'] - shippingMatrix[option]['Shipping_Bands'][highestShippingBand]['Additional_Price']);

	return shipping;
}


// Cart building

function updateMiniCart()
{
	var cart = getCart();
	
	if(!cart.length)
	{	
		document.getElementById('miniCart').innerHTML = '<table cellspacing="1px" cellpadding="0"><tr><td style="background-color: RGB(245,245,245)">Items: <strong>0</strong></td><td>Total: <strong>&pound;0.00</strong></td></tr></table>';
		return;
	}
	
	var items = 0;
	var subtotal = 0;
	
	var str = '';
	str += '<table cellspacing="1px" cellpadding="0"><tr>';
	
	for(var i in cart)
	{
		var itemQty = cart[i]['Quantity'];
		var itemPrice = cart[i]['Price']*1;
		
		items += itemQty;
		subtotal += itemQty * itemPrice;
		
		//str += '<tr><td><a href="" title="' + cart[i]['Description'] + '">' + ellipsis(cart[i]['Description'], '10px', 'sans-serif', 100) + '</a></td><td style="text-align: right">&pound;' + itemPrice.toFixed(2) + '</td></tr>';
	}
	
	var shipping = calcShipping(subtotal);
	var total = subtotal + shipping;
	
	str += '<td style="background-color: RGB(255,255,255); background-image: URL(\'../template/button_background.png\'); background-position: bottom; background-repeat: repeat-x;">Items: <strong>' + items + '</strong></td>';
	str += '<td>Total: <strong>&pound;' + total.toFixed(2) + '</strong></td>';
	str += '<td style="background-color: RGB(255,255,255); background-image: URL(\'../template/button_background.png\'); background-position: bottom; background-repeat: repeat-x;"><a href="../shop/cart.php">Go to cart</a></td>';
	
	str += '</tr></table>';
	
	document.getElementById('miniCart').innerHTML = str;
}

function updateCart()
{
	var cart = getCart();
	
	if(!cart.length)
	{
		document.getElementById('checkout').style.display = 'none';
		document.getElementById('cart').innerHTML = '<span style="font-size: 18px">Your shopping cart is empty</span>';
		updateMiniCart();
		return;
	}
	
	var str = '';
	str += '<table cellspacing="0" cellpadding="0">';
	str += '<tr>';
	str += '<td><b>Item(s)</b></td>';
	str += '<td align="right" style="width: 100px"><b>Shipping<br />band (<a href="../shop/shipping.php" title="Click here to view details of shipping options" target="_blank">?</a>)</b></td>';
	str += '<td align="right" style="width: 140px"><b>Price</b></td>';
	str += '<td style="border: 0; width: 60px">&nbsp;</td>';
	str += '</tr>';
	
	var subtotal = 0;
	var payPalItemNum = 1;
	
	for(var i in cart)
	{
		var itemID = cart[i]['System_ID'];
		var itemName = cart[i]['Description'];
		var itemQty = cart[i]['Quantity'];
		var itemPrice = cart[i]['Price']*1;
		var itemShippingBand = cart[i]['Shipping_Band'];
		var itemCategory = cart[i]['Category'];
		var itemUserOptions = cart[i]['User_Options'];
		
		str += '<tr>';
		str += '<td>' + itemName + '&nbsp;&nbsp;&nbsp;';
		str += '<span class="small">';
		itemUserOptionsArr = [];
		for(var j in cart[i]['User_Options']) itemUserOptionsArr.push(j + ': ' + cart[i]['User_Options'][j]);
		var itemUserOptionsStr = itemUserOptionsArr.join(', ');
		str += itemUserOptionsStr;
		str += '<span>';
		str += '</td>';
		str += '<td align="right">' + itemShippingBand + ' </td>';
		str += '<td align="right">&pound;' + (itemPrice * itemQty).toFixed(2) + ' </td>';
		str += '<td style="border: 0; font-size: 10px; padding-left: 10px">[<a href="javascript:removeFromCart(' + i + ')" style="font-size: 10px">remove</a>]</td>';
		str += '</tr>';
		
		subtotal += itemPrice * itemQty;
	}
	
	var shipping = calcShipping(subtotal);
	
	str += '<tr>';
	str += '<td colspan="4" style="border: 0; padding: 10px">&nbsp;</td>';
	str += '</tr>';
	
	str += '<tr>';
	str += '<td style="border: 0"></td>';
	str += '<td style="border: 0"><b>Subtotal</b></td>';
	str += '<td align="right" style="border: 0"><b>&pound;' + subtotal.toFixed(2) + '</b></td>';
	str += '<td style="border: 0"></td>';
	str += '</tr>';
	
	str += '<tr>';
	str += '<td style="border: 0"></td>';
	str += '<td colspan="2">';
	str += '<table cellspacing="0" cellpadding="0" style="width: 100%"><tr>';
	str += '<td>';
	str += '<b>Shipping (<a href="../shop/shipping.php" title="Click here to view details of shipping options" target="_blank">?</a>)</b>&nbsp;&nbsp;';
	
	if(subtotal > freeDeliveryLimit) str += 'Free Special Delivery';
	else
	{
		str += '<select id="shippingOption" onChange="updateShippingOption(this.value)" style="width: 200px">';
		for(var i in shippingMatrix)
		{
			var optionShippingPrice = calcShipping(subtotal, i);
			str += '<option value="' + i + '">' + shippingMatrix[i]['Description'] + ' &pound;' + optionShippingPrice.toFixed(2) + '</option>';	
		}
		str += '</select>';
	}
	
	str += '</td><td align="right">';
	str += '<b>&pound;' + shipping.toFixed(2) + '</b>';
	str += '</td>';
	str += '</tr></table>';
	str += '</td>';
	str += '<td style="border: 0"></td>';
	str += '</tr>';
	
	total = subtotal + shipping;
	
	str += '<tr>';
	str += '<td style="border: 0"></td>';
	str += '<td style="border: 0"><b>Total</b></td>';
	str += '<td align="right" style="border: 0"><b><span style="font-size: 16px">&pound;' + total.toFixed(2) + '</span></b></td>';
	str += '<td style="border: 0"></td>';
	str += '</tr>';
	
	str += '</table>'
	
	document.getElementById('cart').innerHTML = str;
	document.getElementById('shippingOption').value = shippingOption;
	document.getElementById('checkout').style.display = 'inline';
	
	updateMiniCart();
	changeCountry(document.checkoutForm.addressCountry.value);
}


// Cart modification

function addToCart(id, qty)
{
	var optArr = [];
	var cont = true;
	for(var i = 1; cont; i++)
	{
		if(document.getElementById('product' + id + 'option' + i)) optArr.push(document.getElementById('product' + id + 'option' + i).value);
		else cont = false;
	}
	
	var opt = optArr.join(',');
	
	ajax('../ajax/add_to_cart.php', 'id=' + id + '&qty=' + qty + '&opt=' + opt, 'get');
	
	var product = getProduct(id);
	
	alert(product['Description'] + ' added to your cart');

	updateMiniCart();
}

function updateQty(id, qty)
{
	ajax("../ajax/update_qty.php", "id=" + id + "&qty=" + qty, "get");
	
	updateCart();
}

function removeFromCart(id)
{
	ajax("../ajax/remove_from_cart.php", "id=" + id, "get");
	
	updateCart();
}

function emptyCart()
{
	ajax("../ajax/empty_cart.php", "", "get");
	
	updateCart();
}


//

function getProduct(id)
{
	eval(ajax('../ajax/get_product.php', 'id=' + id, 'get'));
	return tmp;
}

function getCart()
{
	eval(ajax('../ajax/get_cart.php', 'nocache=' + new Date().getTime(), 'get'));
	return tmp;
}

function getCartStr()
{
	var out = ajax('../ajax/get_cart_str.php', 'nocache=' + new Date().getTime(), 'get');
	return out;
}

var shippingMatrix = getShippingMatrix();

var vat = ajax('../ajax/get_vat.php', '', 'get')*1;
var maxQty = ajax('../ajax/get_max_qty.php', '', 'get')*1;

function VATfromPrice(a)
{
	var out = a * vat;
	return out;
}

function VATfromTotal(a)
{
	var out = a * (vat/(1 + vat));
	return out;
}

function priceFromTotal(a)
{
	var out = a - VATfromTotal(a);
	return out;
}

function totalFromPrice(a)
{
	var out = a + VATfromPrice(a);
	return out;
}

function getShippingMatrix()
{
	eval(ajax('../ajax/get_shipping_matrix.php', '', 'get'));
	return tmp;
}

function getProduct(id)
{
	eval(ajax('../ajax/get_product.php', 'id=' + id, 'get'));
	return tmp;
}

function getShippingOptions()
{
	eval(ajax('../ajax/get_shipping_options.php', '', 'get'));
	return tmp;
}


//
function confirmOrder()
{
	if(!document.orderForm.customerName.value)
	{
		alert('Please enter your name');
		return;
	}
	
	if(!validateEmail(document.orderForm.customerEmail.value))
	{
		alert('Please enter a valid email address');
		return;
	}
	
	if(document.getElementById('paymentMethodCheque').checked || !document.getElementById('usePayPalShippingAddress').checked)
	{
		if(
			!document.orderForm.shippingAddressLine1.value ||
			!document.orderForm.shippingAddressCity.value ||
			!document.orderForm.shippingAddressCounty.value ||
			!document.orderForm.shippingAddressPostCode.value ||
			!document.orderForm.shippingAddressCountry.value
		) {
			alert('Please complete the required address fields');
			return;
		}
	}
	
	document.orderForm.submit();
}

function toggleShippingAddress()
{
	if(document.getElementById('paymentMethodPayPal').checked)
	{
		document.getElementById('usePayPalShippingAddressSelect').style.display = 'inline';
		
		if(document.getElementById('usePayPalShippingAddress').checked) document.getElementById('shippingAddressSpan').style.display = 'none';
		else document.getElementById('shippingAddressSpan').style.display = 'inline';
	}
	else
	{
		document.getElementById('usePayPalShippingAddressSelect').style.display = 'none';
		document.getElementById('shippingAddressSpan').style.display = 'inline';
	}
}

function colourField(obj, type)
{
	if(validateField(obj.value, type)) obj.style.backgroundColor = 'RGB(255,255,255)';
	else obj.style.backgroundColor = 'RGB(255,220,220)';
}

var currCountry = '';
function changeCountry(country)
{
	document.getElementById('addressRegionCustom').style.display = 'none';
	if(currCountry) document.getElementById('addressRegion' + currCountry).style.display = 'none';
	
	if(document.getElementById('addressRegion' + country))
	{
		document.getElementById('addressRegion' + country).style.display = 'inline';
		currCountry = country;
	}
	else
	{
		currCountry = '';
		document.getElementById('addressRegionCustom').style.display = 'inline';
	}
}

function validateCheckoutForm()
{
	var obj = document.checkoutForm;
	
	if(!validateField(obj.customerFirstName.value, 'text'))
	{
		alert('Please enter your first name');
		return;
	}
	
	if(!validateField(obj.customerLastName.value, 'text'))
	{
		alert('Please enter your last name');
		return;
	}
	
	if(!validateField(obj.customerEmail.value, 'email'))
	{
		alert('Please enter a valid email address');
		return;
	}
	
	if(obj.customerTelephone.value && !validateField(obj.customerTelephone.value, 'phone'))
	{
		alert('Please enter a valid phone number');
		return;
	}
	
	if(!validateField(obj.addressLine1.value, 'text'))
	{
		alert('Please enter your address');
		return;
	}
	
	if(!validateField(obj.addressCity.value, 'text'))
	{
		alert('Please enter your town/city');
		return;
	}
	
	if(
		obj.addressCountry.value != 'GB' &&
		obj.addressCountry.value != 'US'
	) {
		if(!validateField(obj.addressRegionCustom.value, 'text'))
		{
			alert('Please enter your county/state');
			return;
		}
	}
	
	if(!validateField(obj.addressPostCode.value, 'text'))
	{
		alert('Please enter your postal/ZIP code');
		return;
	}
	
	obj.cart.value = getCartStr();
	obj.shippingOption.value = readCookie('shipping_option');
	
	//if(obj.paymentMethod[0].checked) obj.action += '/shop/payment.php';
	//else obj.action += '/shop/order.php';
	obj.action += '/shop/order.php';
	
	obj.submit();
}
