/***************************************************************************************************
* Utility functions                                                                                *
***************************************************************************************************/
function radioValue(form,field_name)
{
   var i;
   for (i=0;i<form.elements.length;i++)
   {
      if ((form.elements[i].checked) && (form.elements[i].name==field_name)) return form.elements[i].value;
   }
   return '';
}

/***************************************************************************************************
* Active menu highlighting                                                                         *
***************************************************************************************************/
function activate() {
	handle_menu();
}

function handle_menu(event,ob) {
	var anchors=document.getElementById('menu').getElementsByTagName('a');
	for (var i=0;i<anchors.length;i++) {
		if (((anchors[i].getAttribute('href')==window.location.href) && (!ob)) || ((ob) && (ob==anchors[i]))) {
			anchors[i].className='selected';
		} else {
			anchors[i].className='';
		}
		anchors[i].parentNode.onmouseover=build_mouseover(anchors[i]);
		anchors[i].parentNode.onmouseout=handle_menu;
	}
}

function build_mouseover(ob) {
	return function() { handle_menu(null,ob); };
}

/***************************************************************************************************
* Ajax                                                                                             *
***************************************************************************************************/
var request;
function loadXMLDoc(url, processReqChange) {
	request = false;
    if (window.XMLHttpRequest && !(window.ActiveXObject)) { // branch for native XMLHttpRequest object
    	try {
			request = new XMLHttpRequest();
        } catch(e) {
			request = false;
        }
    } else if (window.ActiveXObject) { // branch for IE/Windows ActiveX version
       	try {
        	request = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		request = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		request = false;
        	}
		}
    }
	if (request) {
		request.onreadystatechange = processReqChange;
		request.open("GET", url, true);
		request.send("");
	}
}

/***************************************************************************************************
* Rating stuff                                                                                     *
***************************************************************************************************/
function addRating(product, rating) {
	loadXMLDoc("ajaxresponse_nocache.php?function=addrating&product="+window.encodeURIComponent(product)+"&rating="+window.encodeURIComponent(rating), process_addrating);
	if (window.event) window.event.cancelBubble = true;
	return false;
}

function process_addrating() {
	// Update the current rating with the new rating
	if (request.readyState == 4) {
		alert('Your rating has been added');
	}
}

/***************************************************************************************************
* Basket module                                                                                    *
***************************************************************************************************/
function addToBasket(product, quantity) {
	if (!quantity) { quantity = '1'; }
	loadXMLDoc("ajaxresponse_nocache.php?function=addtobasket&product="+window.encodeURIComponent(product)+"&quantity="+window.encodeURIComponent(quantity), process_addtobasket);
	if (window.event) window.event.cancelBubble = true;
	return false;
}

function process_addtobasket() {
	if (request.readyState == 4) {
		alert(request.responseXML.documentElement.getElementsByTagName('result')[0].childNodes[0].nodeValue);
		updateBasket();
	}
}

function removeFromBasket(product) {
	loadXMLDoc("ajaxresponse_nocache.php?function=removefrombasket&product="+window.encodeURIComponent(product), process_removefrombasket);
	if (window.event) window.event.cancelBubble = true;
	return false;
}

function process_removefrombasket() {
	if (request.readyState == 4) {
		alert(request.responseXML.documentElement.getElementsByTagName('result')[0].childNodes[0].nodeValue);
		updateBasket();
	}
}

function updateBasket() {
	loadXMLDoc("ajaxresponse_nocache.php?function=updatebasket", process_updatebasket);
	if (window.event) window.event.cancelBubble = true;
	return false;
}

function process_updatebasket() {
	if (request.readyState == 1) {
		// Display updating message
		document.getElementById('updateMessage').style.display = 'block';
	}
	if (request.readyState == 2) {
		
	}
	if (request.readyState == 3) {
		
	}
	if (request.readyState == 4) {
		var xml = request.responseXML.documentElement;
		var tableBasket = document.getElementById('basket_contents');
		
		// Delete existing rows
		for (i=(tableBasket.rows.length-1); i > 1; i--) {
			tableBasket.deleteRow(i-1);
		}

		// Insert the totals
		var newTotal = xml.getElementsByTagName('total');
		tableBasket.rows[1].cells[1].innerHTML = newTotal[0].childNodes[0].nodeValue;
		
		// Insert the items
		var row = null;
		var items = xml.getElementsByTagName('item');
		var leftCell = null;
		var rightCell = null;
		for (i=0; i < items.length; i++) {
			row = tableBasket.insertRow(i+1);
			row.className = 'product_row';
			leftCell = row.insertCell(0);
			rightCell = row.insertCell(1);
			// Set the cells
			leftCell.innerHTML = items[i].getElementsByTagName('title')[0].childNodes[0].nodeValue;
			rightCell.className = 'right';
			rightCell.innerHTML = items[i].getElementsByTagName('vouchers')[0].childNodes[0].nodeValue+'<br /><a href="#" onclick="javascript: return removeFromBasket(\''+items[i].getElementsByTagName('product')[0].childNodes[0].nodeValue+'\')">remove</a>';
		}
		
		var cell = null;
		if (items.length == 0) {
			row = tableBasket.insertRow(i+1);
			row.className = 'product_row';
			cell = row.insertCell(0);
			cell.colSpan = '2';
			cell.innerHTML = '<em>Your basket is empty</em>';
		}
		
		document.getElementById('updateMessage').style.display = 'none';
		
		if (window.event) window.event.cancelBubble = true;
		return false;
	}
}

/***************************************************************************************************
* Catalogue stuff                                                                                  *
***************************************************************************************************/

function showMainImage(imageFile) {
	document.getElementById('main_image').src = 'img/catalogue/'+imageFile;
	if (window.event) window.event.cancelBubble = true;
	return false;
}

function doScrollA(direction, set) {
	if (set == 'MostPopularCells') {
		if (direction=='right' && totalProducts_mostPopular > currentProduct_mostPopular) {
			document.getElementById(set+currentProduct_mostPopular).style.display = 'none';
			currentProduct_mostPopular++;
		} else if (direction=='left' && currentProduct_mostPopular > 1) {
			currentProduct_mostPopular--;
			document.getElementById(set+currentProduct_mostPopular).style.display = 'inline';
		}
		// Hide arrows
		if (currentProduct_mostPopular == 1) {
			document.getElementById('MostPopularLeft').style.visibility = 'hidden';
			document.getElementById('MostPopularRight').style.visibility = 'visible';
		}
		if (currentProduct_mostPopular > 1) {
			document.getElementById('MostPopularLeft').style.visibility = 'visible';
		}
		if (currentProduct_mostPopular == 10) {
			document.getElementById('MostPopularLeft').style.visibility = 'visible';
			document.getElementById('MostPopularRight').style.visibility = 'hidden';
		}
		if (currentProduct_mostPopular < 10) {
			document.getElementById('MostPopularRight').style.visibility = 'visible';
		}
	} else {
		if (direction=='right' && totalProducts_topRated > currentProduct_topRated) {
			document.getElementById(set+currentProduct_topRated).style.display = 'none';
			currentProduct_topRated++;
		} else if (direction=='left' && currentProduct_topRated > 1) {
			currentProduct_topRated--;
			document.getElementById(set+currentProduct_topRated).style.display = 'inline';
		}
		// Hide arrows
		if (currentProduct_topRated == 1) {
			document.getElementById('topRatedLeft').style.visibility = 'hidden';
			document.getElementById('topRatedRight').style.visibility = 'visible';
		}
		if (currentProduct_topRated > 1) {
			document.getElementById('topRatedLeft').style.visibility = 'visible';
		}
		if (currentProduct_topRated == 10) {
			document.getElementById('topRatedLeft').style.visibility = 'visible';
			document.getElementById('topRatedRight').style.visibility = 'hidden';
		}
		if (currentProduct_topRated < 10) {
			document.getElementById('topRatedRight').style.visibility = 'visible';
		}
	}

	if (window.event) window.event.cancelBubble = true;
	return false;
}

/***************************************************************************************************
* Basket stuff                                                                                     *
***************************************************************************************************/
function basketQuantity(operation, field, warn) {
	if (warn == null) {
		warn = true;
	}
	var product = document.getElementById(field);
	if (operation == 'remove') {
		if (product.value < 2) {
			if (warn == true) {
				alert('Please click remove to remove this item from your basket');
			}
		} else {
			product.value = Number(product.value) - 1;
		}
	} else {
		product.value = Number(product.value) + 1;
	}
	
	if (window.event) window.event.cancelBubble = true;
	return false;

}