String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

function setItemCount() {
	var cookie = readCookie('order');
	
	var itemCount = 0;
	
	if (cookie != null) {
		var items = new Array();
		items = cookie.split("|");
		for (var i = 0; i < items.length; i++) {
			var qIndex = items[i].lastIndexOf('~~');
			var quantity = parseInt(items[i].substring(qIndex+2));
			itemCount += quantity;	
		}
	}
	document.getElementById('itemCount').innerHTML = itemCount;
}

function switchImage(image,toColor) {
	var imageFile = image.src;
	var dotIndex = imageFile.lastIndexOf('.');
	var imageFileStem = imageFile.substring(0,dotIndex);
	var imageSuffix = imageFileStem.substring(imageFileStem.length-3);
	var extension = imageFile.substring(dotIndex,imageFile.length);

	if (imageSuffix == '-bw') {
		if (toColor) {
			var newStem = imageFileStem.substring(0, imageFileStem.length-3);
			image.src = newStem+extension;
		}
	} else {
		if (!toColor) {
			image.src = imageFileStem+'-bw'+extension;
		}
	}
}
  
function displayDate() {
	var months = new Array();
	months[0] = 'January';
	months[1] = 'February';
	months[2] = 'March';
	months[3] = 'April';
	months[4] = 'May';
	months[5] = 'June';
	months[6] = 'July';
	months[7] = 'August';
	months[8] = 'September';
	months[9] = 'October';
	months[10] = 'November';
	months[11] = 'December';
	var currentTime = new Date()
	var mins = currentTime.getMinutes();
	if (mins < 10) {
		mins = '0' + mins;
	}
	var hours = currentTime.getHours();
	var day = currentTime.getDate();
	var month = currentTime.getMonth();
	var year = currentTime.getFullYear();
	document.write(hours + ":" + mins + ", " + day + " " + months[month] + " " + year);
}
	
function ImageOk(img) {
	if (!img.complete) return false;
	if (typeof img.naturalWidth != "undefined" && img.naturalWidth == 0) return false;
	return true;
}

function BrokenImageCheck() {
	var replacementImg = "/img/default.png";
	for (var i = 0; i < document.images.length; i++) {
		if (!ImageOk(document.images[i])) {
			document.images[i].src = replacementImg;
		}
	}
}

function highlightPrice(priceId) {
    var pd = document.getElementById('priceDesc'+priceId);
    if (pd.className == 'priceDesc') {
    	pd.className = 'priceDescHighlighted';
    } else {
    	pd.className = 'priceDescHighlighted priceDescHeader';
    }
}

function removeHighlightFromPrice(priceId) {
    var pd = document.getElementById('priceDesc'+priceId);
    if (pd.className == 'priceDescHighlighted') {
    	pd.className = 'priceDesc';
    } else {
    	pd.className = 'priceDesc priceDescHeader';
    }
}

/////////////////////////// Code for orders page //////////////////////////////////////////////
function continueWithOrder() {
	var prodDetails = document.getElementById("productDetails");
	var schoolDetails = document.getElementById("schoolDetails");
	prodDetails.style.display = 'none';
	schoolDetails.style.display = 'block';
}

function continueShopping() {
	var cookie = readCookie('order');
	
	var targetPage = "/products";
	
	if (cookie != null) {
		var items = new Array();
		items = cookie.split("|");
		var lastItem = items[items.length-1];
		var categoryEndIndex = lastItem.indexOf('__');
		var category = lastItem.substring(0,categoryEndIndex).trim();
		var rest = lastItem.substring(categoryEndIndex+2);
		var product = rest.substring(0,rest.indexOf("__")).trim();		
		targetPage = '/products/'+category+'/'+product;
	}
	document.location = targetPage;
}

function backWithOrder() {
    var prodDetails = document.getElementById("productDetails");
    var schoolDetails = document.getElementById("schoolDetails");
	prodDetails.style.display = 'block';
	schoolDetails.style.display = 'none';
}

function submitOrder() {
	clearField("realname");
	clearField("school");
	clearField("address");
	clearField("email");

	var missingText = document.getElementById("missingText");
	missingText.style.display = "none";

    if (checkfield("realname","your name") &&
        checkfield("school","the name of your school") &&
        checkfield("address","your school's address") &&
        checkfield("email","an email address")) {
    
    	var submitelement = document.getElementById("submitbutton");
    	document.submitel = eval('submitelement');
    	document.submitel.innerHTML="<h3>Sending Order. Please wait...</h3>";
    	document.orderform.submit();
    }
}

function checkfield(fieldName,errorText) {
    var field = document.getElementById(fieldName);
    if (field.value.trim()=="") {
	    var fieldLabel = document.getElementById(fieldName+'Label');
	    var missingText = document.getElementById("missingText");
		fieldLabel.className = "fieldlabel inputMissing";
		fieldLabelText = fieldLabel.innerHTML;
	    var fieldDisplayName = fieldLabelText.substring(fieldLabelText.indexOf('*')+1,fieldLabelText.lastIndexOf(':'));
		missingText.innerHTML = "Please complete the required field: '" + fieldDisplayName + "'";
		missingText.style.display = "block";
        return false;
    }

	return true;
}

function clearField(fieldName) {
    var fieldLabel = document.getElementById(fieldName+'Label');
	fieldLabel.className = "fieldlabel";
}

function displayOrderItems(summerise) {
	var cookie = readCookie('order');
	if (cookie == null) {
		if (summerise) {
			document.location = "/order.shtml";
		} else {
			hideOrder();
		}
		return;
	}

	var grandTotal = 0;
	var items = new Array();
	items = cookie.split("|");
	for (var i = 0; i < items.length; i++) {
		var item = items[i];

		var fullnameEndIndex = item.indexOf('~~');
		var fullname = item.substring(0,fullnameEndIndex).trim();

		var categoryEndIndex = fullname.indexOf('__');
		var category = fullname.substring(0,categoryEndIndex).trim();

		var nameAndDesc = fullname.substring(categoryEndIndex+2,fullname.length);
		var name = nameAndDesc.substring(0,nameAndDesc.indexOf("__")).trim();
		var desc = nameAndDesc.substring(nameAndDesc.indexOf("__")+2,nameAndDesc.length).trim();

		var rest = item.substring(fullnameEndIndex+2,item.length);
		var priceEndIndex = rest.indexOf('~~');
		var price = parseFloat(rest.substring(0,priceEndIndex));

		var quantity = parseInt(rest.substring(priceEndIndex+2,rest.length));

		var productTotal = price*quantity;
		grandTotal += productTotal;


		if (summerise) {
			document.write('<div class="summaryItem"><div class="summaryQuantity">'+quantity+' x </div>');
			document.write('<div class="summaryName">'+name+desc+'</div>');
			document.write('<div class="summaryProdTotal">'+productTotal.toFixed(2)+'</div></div>');
		} else {
			var orderTotal = document.getElementById('orderTotal');
			orderTotal.value = grandTotal.toFixed(2);
			document.write('<div style="display:none" id="name'+i+'">'+fullname+'</div>');
			document.write('<tr class="productData" id="prod'+i+'"><td>');
			document.write('<a href="/products/'+category+'/'+name+'">'+name+'</a>'+desc+'</td>');
			document.write('<td class="textAlignRight">'+price.toFixed(2)+'</td>');
			document.write('<td class="textAlignRight"><div class="orderFormArrows">');
			document.write('<a class="imageAnchor" href="javascript:increaseQuantity('+i+','+price+')"><img src="/img/orderFormUp.png"/></a>');
			document.write('<a class="imageAnchor" href="javascript:decreaseQuantity('+i+','+price+')"><img src="/img/orderFormDown.png"/></a></div>');
			document.write('<div class ="quantity" id="quantity'+i+'">'+quantity+'</div>');
			document.write('<td id="total'+i+'" class="textAlignRight">'+productTotal.toFixed(2)+'</td>');
			document.write('<td><span class="deleteItem"><a href="javascript:deleteItem('+i+')">Delete</a></span></td></tr>');
			document.write('<input id="input'+i+'" type="hidden" name="'+name+desc+'" value="'+quantity+'"/>');
		}
	}
	if (summerise) {
	    document.write('<div id="summaryGrandTotal"><b>Total:</b>&nbsp; &nbsp; £<span id="grandTotal">'+grandTotal.toFixed(2)+'</span></div>');
		eraseCookie('order');
	} else {	
	    document.write('<tr class="orderTableFooter"><td colspan="4" align="right"><b>Grand Total:</b>&nbsp; &nbsp; £<span id="grandTotal">'+grandTotal.toFixed(2)+'</span></td>');
	    document.write('<td><span class="deleteItem"><a href="javascript:deleteAll()">Delete All</a></span></td></tr>');		
	}
}

function deleteItem(itemId) {
	var nameElement = document.getElementById('name'+itemId);
	var quantityElement = document.getElementById('quantity'+itemId);
	var itemName = nameElement.innerHTML;
	var quantity = parseInt(quantityElement.innerHTML);
	modifyOrder(itemName,null,-quantity);
	document.location = "/order.shtml";
}

function deleteAll() {
	eraseCookie('order');
	document.location = "/order.shtml";
}	
	
function increaseQuantity(itemId,price) {
	var nameElement = document.getElementById('name'+itemId);
	var quantityElement = document.getElementById('quantity'+itemId);
	var inputElement = document.getElementById('input'+itemId);
	var itemName = nameElement.innerHTML;
	var quantity = parseInt(quantityElement.innerHTML);

	modifyOrder(itemName,null,1);

	quantity += 1;
	quantityElement.innerHTML = quantity;
	inputElement.value = quantity;
	var prodTotal = document.getElementById('total'+itemId);
	prodTotal.innerHTML =  (price*quantity).toFixed(2);

	var grandTotalElement = document.getElementById('grandTotal');
	var grandTotal = parseFloat(grandTotalElement.innerHTML);
	grandTotal += price;
	grandTotalElement.innerHTML = grandTotal.toFixed(2);	
	setItemCount();
}

function decreaseQuantity(itemId,price) {
	var nameElement = document.getElementById('name'+itemId);
	var quantityElement = document.getElementById('quantity'+itemId);
	var inputElement = document.getElementById('input'+itemId);
	var itemName = nameElement.innerHTML;
	var quantity = parseInt(quantityElement.innerHTML);

	modifyOrder(itemName,null,-1);

	quantity -= 1;
	quantityElement.innerHTML = quantity;
	inputElement.value = quantity;
	var prodTotal = document.getElementById('total'+itemId);
	prodTotal.innerHTML =  (price*quantity).toFixed(2);

	var grandTotalElement = document.getElementById('grandTotal');
	var grandTotal = parseFloat(grandTotalElement.innerHTML);
	grandTotal -= price;
	grandTotalElement.innerHTML = grandTotal.toFixed(2);	

	if (quantity == 0) {
		var prodElement = document.getElementById('prod'+itemId);
		prodElement.style.display = 'none';
	}
	
	var cookie = readCookie('order');
	if (cookie == null) {
		hideOrder();
	}	
	setItemCount();
}

function addToOrder(newItemName,newItemPrice) {
	modifyOrder(newItemName,newItemPrice,1);
	document.location = '/order.shtml';
}

function modifyOrder(newItemName,newItemPrice,changeInQuantity) {
	newItemName = newItemName.trim();
	var cookie = readCookie('order');
	if (cookie != null && cookie.length > 4000) {
		alert('Sorry, you cannot add any more items to your order. Large orders must be made by telephone.');
	} else {
		modifyCookie(cookie,newItemName,newItemPrice,changeInQuantity);
	}
}

function modifyCookie(cookie,newItemName,newItemPrice,changeInQuantity) {

	if (cookie == null) {
		createCookie('order',newItemName + "~~" + newItemPrice + "~~1",1);
	} else {

		var newCookie = '';
		var newItemAlreadyInCookie = false;
		var items = new Array();
		items = cookie.split("|");
		for (var i = 0; i < items.length; i++) {
			var item = items[i];

			var nameEndIndex = item.indexOf('~~');
			var name = item.substring(0,nameEndIndex);

			var rest = item.substring(nameEndIndex+2,item.length);
			var priceEndIndex = rest.indexOf('~~');
			var price = rest.substring(0,priceEndIndex);

			var quantity = rest.substring(priceEndIndex+2,rest.length);

			if (name == newItemName) {
				var newItemQuantity = parseInt(quantity) + changeInQuantity;
				if (newItemQuantity > 0) {
					var newItem = newItemName + '~~' + price + '~~' + newItemQuantity;
					newCookie += newItem;
					newCookie += '|';
				}
				newItemAlreadyInCookie = true;
			} else {
				newCookie += item;
				newCookie += '|';
			}
		}
		
		if (!newItemAlreadyInCookie) {
			var newItem = newItemName + '~~' + newItemPrice + '~~1|';
			newCookie += newItem;
		}
		newCookie = newCookie.substring(0,newCookie.length-1);
		if (newCookie == "") {
			eraseCookie('order');
		} else {
			createCookie('order',newCookie,1);
		}
	}
}

function hideOrder() {
	var basket = document.getElementById('basket');
	basket.style.display = 'none';
	var noitems = document.getElementById('noitems');
	noitems.style.display = 'block';
}
///////////////////////////////////////////////////////////////////////////////////////////////


/////////////////////////// Cookie handling functions ////////////////////////////////////////
function createCookie(name,value,days) {
	value = value.replace(/,/g,"```")
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) {
			var value = c.substring(nameEQ.length,c.length);
			value = value.replace(/```/g,",");
			return value;
		}
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}
///////////////////////////////////////////////////////////////////////////////////////////////


/////////////////////////// Code for menu /////////////////////////////////////////////////////
function selectMenuItem() {
	var path = window.location.pathname;
	path = path.replace("/admin","");
	var file = path.substring(path.lastIndexOf('/') + 1);
	var fileNoExt = file.substring(0,file.lastIndexOf("."));

	if (path.length <= 1) {
		fileNoExt = "index";
	}
	var menuItem = document.getElementById(fileNoExt+'-menu');
	if (menuItem == null) {
		
		var queryString = window.location.search.substring(1);
		if (queryString == "whatsnew") {
			menuItem = document.getElementById("whatsnew-menu");
		} else {
			menuItem = document.getElementById("store-menu");
		}
		menuItem.className = 'menuItem menuItemSelected';
		return;
	}
	menuItem.className = 'menuItem menuItemSelected';
	var contentTitle = document.getElementById('contentTitle');
	if (fileNoExt == 'index') {
		fileNoExt = '';
	}
	if (contentTitle != null) {
		contentTitle.innerHTML = fileNoExt.charAt(0).toUpperCase() + fileNoExt.slice(1);
	}
}
///////////////////////////////////////////////////////////////////////////////////////////////

