/*

	GPX Gemini Group Main Javascript Routines

*/

var thiscat = 0;
var divs_to_fade  = new Array('featured-cat-01', 'featured-cat-02', 'featured-cat-03', 'featured-cat-04', 'featured-cat-05');
var i=0;

var basketCounter = 0;

if (document.getElementById('gpx-basket-side-tbody') != null) {
	basketCounter = $('gpx-basket-side-tbody').rows.length;
}

// initialise



function gpxinit(){
	$("featured-cat-02").style.display="none";
	$("featured-cat-03").style.display="none";
	$("featured-cat-04").style.display="none";
	$("featured-cat-05").style.display="none";
	setInterval('fade()', 5000);
}

function fade(){
	Effect.Fade(divs_to_fade[i], {duration:2.5, from:1.0, to:0.0, transition: Effect.Transitions.sinoidal});
	i++;
	if(i==divs_to_fade.length){
		i=0;
	}
	Effect.Appear(divs_to_fade[i], {duration:2.5, from:0.0, to:1.0, transition: Effect.Transitions.sinoidal});
}

// pops a new dependant window with chrome removed
function popwin(surl) {
	var newwin = window.open(surl, 'newwin', 'dependent=yes,directories=no,location=no,menubar=no,resizable=yes,scrollbars=yes,status=yes,toolbar=no'); 
	newwin.innerWidth = 555;
	newwin.innerHeight = 475;
	return false;	
}

//image zoom functions
function showLargeImage(img, id){
	$('zoomimagecontainer').style.display = 'block';
	//set the screen position (id of product image)
	var pos = Position.cumulativeOffset($(id));
	$('zoomimagecontainer').style.left = pos[0] + 'px';
	$('zoomimagecontainer').style.top = pos[1] + 'px';
	//add the title
	$('zoomimagedesc').innerHTML = $('product-name-' + id).innerHTML;
	//add the large image
	$('large-image').setAttribute('src', '/user_resources/Image/prod_imgs/' + $F('product-large-' + id));
	//add the description + button
	$('zoomimagedescription').innerHTML = $('product-desc-' + id).innerHTML;
	$('zoomimagedescription').innerHTML += '<br /><br /><a id="close-button-inline" class="gpx-button" onclick="closeLargeImage()"><span>close window</span></a>';
}

function closeLargeImage(){
	$('zoomimagecontainer').style.display = 'none';
}

// pops a new dependant window for print order page
function popprintorder(surl) {
	window.open(surl, 'newwin', 'height=600,width=510,dependent=yes,directories=no,location=no,menubar=yes,resizable=no,scrollbars=yes,status=yes,toolbar=no'); 
	return false;	
}


// pops a new browser window for external websites - suppresses href by returning false
function popsite(surl) {
	window.open(surl, 'newsite', ''); 
	return false;
}

// email checker
function isEmailFormatCorrect(strAddr) { 
	var ptn = /^[\w\d._%-]+@[\w\d._%-]+\.[\w\d._%-]{2,4}$/;
	return ptn.test(strAddr);
}

function trim(sVal) {
	while(sVal.charAt(sVal.length-1)==' ')
		sVal=sVal.substring(0,sVal.length-1);

	while(sVal.charAt(0)==' ')
		sVal=sVal.substr(1,sVal.length);

	return sVal;
}

// generic error message display
function showError(fld, msg)
{
	fld.focus();
	alert(msg);
	return false;
}

function buttonSwitcher()
{
	this.bgoff = Array();
	this.bghover = Array();
	
	this.bgoff["esp-contact-submit"] = 'contactbutton.gif';
	this.bghover["esp-contact-submit"] = 'contactbutton_hover.gif';

	this.bgoff["esp-newdelivery-show"] = 'plusbutton.gif';
	this.bghover["esp-newdelivery-show"] = 'plusbutton_hover.gif';

	this.bgoff["esp-newdelivery-hide"] = 'plusbutton.gif';
	this.bghover["esp-newdelivery-hide"] = 'plusbutton_hover.gif';

	this.bgoff["esp-basket-update"] = 'contactbutton.gif';
	this.bghover["esp-basket-update"] = 'contactbutton_hover.gif';

	this.bgoff["esp-basket-save"] = 'contactbutton.gif';
	this.bghover["esp-basket-save"] = 'contactbutton_hover.gif';

	this.bgoff["esp-basket-checkout"] = 'contactbutton.gif';
	this.bghover["esp-basket-checkout"] = 'contactbutton_hover.gif';

	this.bgoff["esp-go-btn-code"] = 'black.gif';
	this.bghover["esp-go-btn-code"] = 'offblack.gif';

	this.bgoff["esp-go-btn-phrase"] = 'black.gif';
	this.bghover["esp-go-btn-phrase"] = 'offblack.gif';

	this.bgoff["esp-close-window"] = 'green.gif';
	this.bghover["esp-close-window"] = 'offblack.gif';

	this.hover = function(bgid) { $(bgid).style.backgroundImage = 'url(\'../assets/' + this.bghover[bgid] + '\')'; };
	this.reset = function(bgid) { $(bgid).style.backgroundImage = 'url(\'../assets/' + this.bgoff[bgid] + '\')'; };
}

var btnswitcher = new buttonSwitcher();

// opens and closes the menu if we're on a landing page for "cat" or in prodlist for that "cat"
function check_menu_page(cat)
{
	if(thiscat == cat)
	{
		if($(('espnav-plst-sub-' + thiscat)).style.display == '')
			$(('espnav-plst-sub-' + thiscat)).style.display = 'none'
		else
			$(('espnav-plst-sub-' + thiscat)).style.display = ''
			
		return false
	}
	return true;
}


function clear_search(what)
{
	if(what == 'code')	{
		if ($('catno').value == '') {
			$('catno').value = 'enter a catalogue code';
		} 
		else { 
			if ($('catno').value == 'enter a catalogue code') {
				$('catno').value = '';
			}
		}
	}
	else {
		if ($('searchword').value == '') {
			$('searchword').value = 'enter word or phrase';
		} 
		else { 
			if ($('searchword').value == 'enter word or phrase') {
				$('searchword').value = '';
			}
		}
	}
	
}

function submitSearchFormPhrase() {
	$('frm-prod-phrase').submit();
	return false;
}

function submitSearchFormCode() {
	$('frm-prod-code').submit();
	return false;
}

function validateContactForm() {
	if ($F('frm-ContFName') == '') {
		return showError($('frm-ContFName'), 'Please enter your first name');
	}

	if ($F('frm-ContLName') == '') {
		return showError($('frm-ContLName'), 'Please enter your last name');
	}

	if ($F('frm-ContEmail') == '') {
		return showError($('frm-ContEmail'), 'Please enter your email address');
	}

	if ($F('frm-ContEmail') != '') {
		if (!isEmailFormatCorrect($F('frm-ContEmail'))) {
			return showError($('frm-ContEmail'), 'Please enter a valid email address');
		}
	}

	if ($F('frm-ContTelephone') == '') {
		return showError($('frm-ContTelephone'), 'Please enter your telephone number');
	}
	
	if ($F('frm-ContMessage') == '') {
		return showError($('frm-ContMessage'), 'Please enter your message');
	}
	$('contact-form').submit();
	return false;
}

function validateCatalogueForm() {
	if ($F('frm-ContFName') == '') {
		return showError($('frm-ContFName'), 'Please enter your first name');
	}
	if ($F('frm-ContLName') == '') {
		return showError($('frm-ContLName'), 'Please enter your last name');
	}

	if ($F('frm-ContEmail') == '') {
		return showError($('frm-ContEmail'), 'Please enter your email address');
	}

	if ($F('frm-ContEmail') != '') {
		if (!isEmailFormatCorrect($F('frm-ContEmail'))) {
			return showError($('frm-ContEmail'), 'Please enter a valid email address');
		}
	}
	if ($F('frm-ContCompany') == '') {
		return showError($('frm-ContCompany'), 'Please enter your company name');
	}
	if ($F('frm-ContAddress1') == '') {
		return showError($('frm-ContAddress1'), 'Please enter your address');
	}

	if ($F('frm-ContTown') == '') {
		return showError($('frm-ContTown'), 'Please enter your town/city');
	}

	if ($F('frm-ContCounty') == '') {
		return showError($('frm-ContCounty'), 'Please enter your county');
	}


	if ($F('frm-ContPostCode') == '') {
		return showError($('frm-ContPostCode'), 'Please enter your postal code');
	}	
	$('catalogue-form').submit();
	return false;
	
}

function validateJohnLewisForm() {
	if ($F('frm-JLUserName') == '') {
		return showError($('frm-JLUserName'), 'Please enter your user name');
	}

	if ($F('frm-JLPassword') == '') {
		return showError($('frm-JLPassword'), 'Please enter your password');
	}
	
	$('login-form').submit();
	return false;
}

function validateEmailForm() {
	if ($F('frm-ContYourName') == '') {
		return showError($('frm-ContYourName'), 'Please enter your name');
	}
	if ($F('frm-ContYourEmail') == '') {
		return showError($('frm-ContYourEmail'), 'Please enter your email address');
	}
	if ($F('frm-ContYourEmail') != '') {
		if (!isEmailFormatCorrect($F('frm-ContYourEmail'))) {
			return showError($('frm-ContYourEmail'), 'Please enter a valid email address');
		}
	}
	if ($F('frm-ContFriendName') == '') {
		return showError($('frm-ContFriendName'), 'Please enter your friend\'s name');
	}
	if ($F('frm-ContFriendEmail') == '') {
		return showError($('frm-ContFriendEmail'), 'Please enter your friend\'s email address');
	}
	if ($F('frm-ContFriendEmail') != '') {
		if (!isEmailFormatCorrect($F('frm-ContFriendEmail'))) {
			return showError($('frm-ContFriendEmail'), 'Please enter a valid email address');
		}
	}
	if ($F('frm-ContMessage') == '') {
		return showError($('frm-ContMessage'), 'Please enter your enquiry');
	}

	$('email-form').submit();
	return false;

}

function validateBespokeEnquiry() {
	if ($F('frm-ContFName') == '') {
		return showError($('frm-ContFName'), 'Please enter your first name');
	}
	if ($F('frm-ContLName') == '') {
		return showError($('frm-ContLName'), 'Please enter your last name');
	}

	if ($F('frm-ContEmail') == '') {
		return showError($('frm-ContEmail'), 'Please enter your email address');
	}

	if ($F('frm-ContEmail') != '') {
		if (!isEmailFormatCorrect($F('frm-ContEmail'))) {
			return showError($('frm-ContEmail'), 'Please enter a valid email address');
		}
	}

	if ($F('frm-ContMessage') == '') {
		return showError($('frm-ContMessage'), 'Please enter your enquiry');
	}

	$('bespoke-form').submit();
	return false;

}

function validateProductEnquire() {
	if ($F('frm-ContProduct') == '') {
		return showError($('frm-ContProduct'), 'Please enter your product name');
	}
	if ($F('frm-ContFName') == '') {
		return showError($('frm-ContFName'), 'Please enter your first name');
	}
	if ($F('frm-ContLName') == '') {
		return showError($('frm-ContLName'), 'Please enter your last name');
	}
	if ($F('frm-ContMessage') == '') {
		return showError($('frm-ContMessage'), 'Please enter your enquiry');
	}

	if ($F('frm-ContEmail') == '') {
		return showError($('frm-ContEmail'), 'Please enter your email address');
	}

	if ($F('frm-ContEmail') != '') {
		if (!isEmailFormatCorrect($F('frm-ContEmail'))) {
			return showError($('frm-ContEmail'), 'Please enter a valid email address');
		}
	}
	
	if ($F('frm-ContContact') == 'telephone') {
		if ($F('frm-ContTelephone') == '') {
			return showError($('frm-ContTelephone'), 'Please enter your telephone number');
		}
	}
	else if ($F('frm-ContContact') == 'post') {
		if ($F('frm-ContAddress1') == '') {
			return showError($('frm-ContAddress1'), 'Please enter your address');
		}
	}

	$('product-enquire-form').submit();
	return false;
		
}

function addCommas(nStr) {
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

function submitBasketForm() {
	$('gpx-basket-form').submit();
	return false;
}

/************************************************************************************************************
************** Ajax Calls ******************
************************************************************************************************************/

function addBasket(form) {
	var successAddBasket = function(q) {
		var formElements = $(form);
		var x = 0;
		//alert(q.responseText);
		basketCounter = $('gpx-basket-side-tbody').rows.length;
		x = 0;
		for (var i = 1; i <= formElements.rowCounter.value; i++) {
			if (formElements.elements['qty' + i].value != '' && formElements.elements['qty' + i].value != '0')	{
				if (q.responseXML.documentElement.getElementsByTagName("status").item(x).firstChild.data == 'ok') {
					var productID = q.responseXML.documentElement.getElementsByTagName("productid").item(x).firstChild.data;
					var piCode = q.responseXML.documentElement.getElementsByTagName("picode").item(x).firstChild.data;
				
					var CalcQuantity = q.responseXML.documentElement.getElementsByTagName("calculatedquantity").item(x).firstChild.data;
					var ProductLinePrice = q.responseXML.documentElement.getElementsByTagName("price").item(x).firstChild.data;
					
					if ($('price-' + productID + '-' + piCode)) {
						var total = Number(Number(CalcQuantity) * Number(ProductLinePrice));
						total = total.toFixed(2);
						
						$('price-' + productID + '-' + piCode).innerHTML = '&pound;' + addCommas(total);
						$('qty-' + productID + '-' + piCode).value = Number(CalcQuantity);
						CalcQuantity = formElements.elements['qty' + i].value;
					} 
					else {
						var trEl = document.createElement('tr');
						if (x % 2 != 0)	{
							trEl.className = "alt";
						}
						trEl.id = 'tr-' + productID + '-' + piCode;

						var tdQtyEl = document.createElement('td');
						tdQtyEl.innerHTML = '<input class="qty" type="text" name="qty_' + productID + '_' + piCode + '" id="qty-' + productID + '-' + piCode + '" value="' + CalcQuantity + '" />';
						trEl.appendChild(tdQtyEl);
						
						var tdProdEl = document.createElement('td');
						tdProdEl.innerHTML = '<input type="hidden" name="prod_id' + basketCounter + '" id="prod-id' + basketCounter + '" value="' + productID + '" /> <input type="hidden" name="pi_code' + basketCounter + '" id="pi-code' + basketCounter + '" value="' + q.responseXML.documentElement.getElementsByTagName("picode_display").item(x).firstChild.data + '" /> <a href="' + q.responseXML.documentElement.getElementsByTagName("productURL").item(x).firstChild.data + '" title="' + q.responseXML.documentElement.getElementsByTagName("picode_display").item(x).firstChild.data + ' - ' + q.responseXML.documentElement.getElementsByTagName("productname").item(x).firstChild.data + '">' + q.responseXML.documentElement.getElementsByTagName("picode_display").item(x).firstChild.data + ' - ' + q.responseXML.documentElement.getElementsByTagName("productname").item(x).firstChild.data + '</a>';
						trEl.appendChild(tdProdEl);
										
						var tdPriceEl = document.createElement('td');
						tdPriceEl.id = 'price-' + productID + '-' + piCode;
						tdPriceEl.innerHTML = '&pound;' + Number(Number(CalcQuantity) * Number(ProductLinePrice)).toFixed(2);
						trEl.appendChild(tdPriceEl);

						var tdDelEl = document.createElement('td');
						tdDelEl.innerHTML = '<a href="#" onclick="return removeItem(' + basketCounter + ');" onclick="return removeItem(' + x + ');" title="Remove this product from the basket" class="remove-icon"><span>Remove</span></a>';
						trEl.appendChild(tdDelEl);

						$('gpx-basket-side-tbody').appendChild(trEl);
					}
					var total = $('gpx-basket-total').innerHTML;
					
					total = Number(total.replace(',', ''));
					total += Number(CalcQuantity) * Number(ProductLinePrice);
		
					$('gpx-basket-total').innerHTML = addCommas(total.toFixed(2));
					
					formElements.elements['qty' + i].value = '0';
					x++;
					basketCounter++;
				}
				else {
					alert(q.responseText);
					return false;
				}	
			}
			else {
				formElements.elements['qty' + i].value = '0';
			}
		} 
		basketCounter = x;		
		sortTableStyles();
		return true;
	}

	var failureAddBasket = function(q) {
		alert(q.responseText);
		return false;
	}

	var a = new Object();
	
	a['seFunc'] = 'addBasket';

	var formElements = $(form);
	var bCheck = false;

	a['rowCounter'] = formElements.rowCounter.value;

	for (var i = 1; i <= formElements.rowCounter.value; i++) {
		if (formElements.elements['qty' + i].value != '' && formElements.elements['qty' + i].value != '0') {
			bCheck = true;
		}
		a['pi_code' + i] = formElements.elements['pi_code' + i].value;
		a['qty' + i] = formElements.elements['qty' + i].value;
		a['url' + i] = window.location.href;
		a['url' + i] = a['url' + i].replace(/[#]/g, '');
		a['url' + i] = a['url' + i].replace(/[product-][0-9]{1,10}/, '');
		a['url' + i] = a['url' + i].replace('product', '');
		a['url' + i] = a['url' + i].replace(/[&]/g, '&amp;') + '#product-name-' + formElements.elements['product_id'].value;

	}

	if (bCheck)	{
		var params = $H(a);
		new Ajax.Request('/_addbasket.asp', {parameters: params.toQueryString(), onSuccess:successAddBasket, onFailure:failureAddBasket});
	}
	else {
		alert('Please enter a quantity for at least one of the above items.');
		return false;
	}

	return false;
	
}

function updateBasket(form) {
	var successUpdateBasket = function(q) {
		var formElements = $(form);
		//alert(q.responseText);

		var productID;
		var piCode;
		var subTotal = 0;
			
		var x = 0;
		for (var i = 0; i < $('gpx-basket-side').rows.length - 1; i++) {
			piCode = formElements.elements['pi_code' + i].value;
			productID = formElements.elements['prod_id' + i].value;
			curQtyField = formElements.elements['qty_' + productID + '_' + piCode.replace(' ', '')];
			
			if (q.responseXML.documentElement.getElementsByTagName("status").item(x).firstChild.data == 'ok') {
				productID = q.responseXML.documentElement.getElementsByTagName("productid").item(x).firstChild.data;
				piCode = q.responseXML.documentElement.getElementsByTagName("picode").item(x).firstChild.data;
			
				var CalcQuantity = q.responseXML.documentElement.getElementsByTagName("calculatedquantity").item(x).firstChild.data;
				var ProductLinePrice = q.responseXML.documentElement.getElementsByTagName("price").item(x).firstChild.data;
				
				if ($('price-' + productID + '-' + piCode)) {
					var total = Number(Number(CalcQuantity) * Number(ProductLinePrice));
					total = total.toFixed(2);
					$('price-' + productID + '-' + piCode).innerHTML = '&pound;' + addCommas(total);
					$('qty-' + productID + '-' + piCode).value = Number(CalcQuantity);
				} 
				
				subTotal += Number(CalcQuantity) * Number(ProductLinePrice);

				if (x % 2 != 0)	{
					$('tr-' + productID + '-' + piCode).className = 'alt';
				}
				else {
					$('tr-' + productID + '-' + piCode).className = '';
				}

				x++;
			}
			else if (q.responseXML.documentElement.getElementsByTagName("status").item(x).firstChild.data == 'removed')	{
				piCode = piCode.replace(/\s/g, '');
				var trEl = $('tr-' + productID + '-' + piCode);
				$('gpx-basket-side-tbody').removeChild(trEl);
				x++;
			}
			else {
				alert(q.responseText);
				return false;
			}	
		} 

		sortTableStyles();
		$('gpx-basket-total').innerHTML = addCommas(Number(subTotal).toFixed(2));
		return true;
	}

	var failureUpdateBasket = function(q) {
		alert(q.responseText);
		return false;
	}

	var a = new Object();
	a['seFunc'] = 'updateBasket';

	var formElements = $(form);
	var bCheck = false;
	var productID;
	var piCode;

	for (var i = 0; i < $('gpx-basket-side').rows.length - 1; i++) {
		piCode = formElements.elements['pi_code' + i].value;
		productID = formElements.elements['prod_id' + i].value;

		a['pi_code' + i] = formElements.elements['pi_code' + i].value;
		a['qty' + i] = formElements.elements['qty-' + productID + '-' + piCode.replace(/\s/g, '')].value;
	}

	if ($('gpx-basket-side').rows.length - 1 == 0)	{
		alert('Your basket is empty');
	}
	else {
		var params = $H(a);
		new Ajax.Request('/_addbasket.asp', {parameters: params.toQueryString(), onSuccess:successUpdateBasket, onFailure:failureUpdateBasket});
	}
	return false;
	
}

function removeItem(id) {
	var successRemoveItem = function(q) {
		var formElements = $('gpx-basket-panel-form');
		//alert(q.responseText);
		
		if (q.responseXML.documentElement.getElementsByTagName("status").item(0).firstChild.data == 'removed')	{
			var CalcQuantity = q.responseXML.documentElement.getElementsByTagName("calculatedquantity").item(0).firstChild.data;
			var ProductLinePrice = q.responseXML.documentElement.getElementsByTagName("price").item(0).firstChild.data;
		
			piCode = q.responseXML.documentElement.getElementsByTagName("picode").item(0).firstChild.data;
			productID = q.responseXML.documentElement.getElementsByTagName("productid").item(0).firstChild.data;

			piCode = piCode.replace(/\s/g, '');
			var trEl = $('tr-' + productID + '-' + piCode);
			$('gpx-basket-side-tbody').removeChild(trEl);
			basketCounter--;
		}
		else {
			alert(q.responseText);
			return false;
		}	
		
		sortTableStyles();

		var total = $('gpx-basket-total').innerHTML;
		total = Number(total.replace(',', ''));
		total -= Number(CalcQuantity) * Number(ProductLinePrice);
		$('gpx-basket-total').innerHTML = addCommas(total.toFixed(2));
		return true;
	}

	var failureRemoveItem = function(q) {
		alert(q.responseText);
		return false;
	}

	var conUser = confirm('Are you sure you want to remove product from your basket?');
	if(conUser == true)	{
		var a = new Object();
		a['seFunc'] = 'removeItem';

		var formElements = $('gpx-basket-panel-form');

		piCode = formElements.elements['pi_code' + id].value;
		productID = formElements.elements['prod_id' + id].value;

		a['pi_code' + 0] = formElements.elements['pi_code' + id].value;
		a['qty' + 0] = formElements.elements['qty-' + productID + '-' + piCode.replace(/\s/g, '')].value;

		var params = $H(a);
		new Ajax.Request('/_addbasket.asp', {parameters: params.toQueryString(), onSuccess:successRemoveItem, onFailure:failureRemoveItem});
	}
	else {
		return false;
	}

	return false;
}

function emptyBasket() {
	var successEmptyBasket = function(q) {
		var element;
		var count = $('gpx-basket-side-tbody').rows.length
	
		for (var i = 0; i < count; i++) {
			element = $('gpx-basket-side-tbody').rows[0];
			$('gpx-basket-side-tbody').removeChild(element);		
		}

		var total = $('gpx-basket-total').innerHTML;
		total = '0.00';
		$('gpx-basket-total').innerHTML = total;

		return true;
	}

	var failureEmptyBasket = function(q) {
		alert(q.responseText);
		return false;
	}
	
	var conUser = confirm('Are you sure you want to empty your basket?');
	if(conUser == true)	{
		var a = new Object();
		a['seFunc'] = 'emptyBasket';

		var params = $H(a);
		new Ajax.Request('/_addbasket.asp', {parameters: params.toQueryString(), onSuccess:successEmptyBasket, onFailure:failureEmptyBasket});		
	}
	else {
		return false;
	}
	return false;
	
}

function sortTableStyles() {
	for (var i = 1; i < $('gpx-basket-side').rows.length; i++) {
		if (i % 2 != 0)	{
			$('gpx-basket-side').rows[i].className = '';
		}
		else {
			$('gpx-basket-side').rows[i].className = 'alt';
		}
	}
	new Effect.Highlight($('gpx-cart'), {startcolor:'#ffd9bf', endcolor:'#ffffff'});

}