
var dom = (document.getElementById)?true:false;
var IE = document.all?true:false
var activateAlertBox = true;
var informActive = true;


//-- -------------------------------------------
//-- FUNCTION TO CLEAR THE SEARCH BOX TEXT
//-- -------------------------------------------
function clearField(Field,fieldValue) {
	if (Field.value	== fieldValue) {
		Field.value = '';
	}
}






//-- -------------------------------------------
//-- FUNCTION TO RESET THE SEARCH BOX TEXT
//-- -------------------------------------------
function resetField(Field,fieldValue) {
	if (Field.value	== '') {
		Field.value = fieldValue;
	}
}






//-- -------------------------------------------
//-- FUNCTION TO RESET THE SEARCH BOX TEXT
//-- -------------------------------------------
function swapCSS(cssHolder,which) {
	var CSSHolder = document.getElementById(cssHolder)
	CSSHolder.setAttribute('href','css/' + which + '.css');
}






//-- -------------------------------------------
//-- GENERIC ACCESSIBLE POPUP SCRIPT
//-- -------------------------------------------
var _POPUP_FEATURES = 'width=790,height=525,scrollbars=no';

function raw_popup(url, target, features) {
	if (isUndefined(features)) features = _POPUP_FEATURES;
	if (isUndefined(target)) target   = '_blank';
	var theWindow = window.open(url, target, features);
	theWindow.focus();
	return theWindow;
}

function link_popup(src, features) {
	return raw_popup(src.getAttribute('href'), src.getAttribute('target') || '_blank', features);
}

function isUndefined(v) {
	var undef;
	return v===undef;
}






//-- -------------------------------------------
//-- FUNCTION TO PRINT PAGE
//-- -------------------------------------------
function printPage() {
	if (window.print) { window.print(); }
	else {
		alert ("To print this page please select the 'Print' option from your browser's 'File' menu.")
	}
	return;
}



function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	}
	else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}






//-- -------------------------------------------
//-- FUNCTION TO VALIDATE EMAIL SUBSCRIPTION FORM
//-- -------------------------------------------
function validateJoinForm() {

	var formObj = document.frmJoin;

	var	lineBreaker = "\n";
	var no_error = true
	var error_counter = 1
	var error_msg = "There seems to be a problem with the form." + lineBreaker + "Could you go back and check that you've entered:" + lineBreaker + lineBreaker;


	if(formObj.emailAddress.value == "") {
		error_msg = error_msg + error_counter + ". Your email address"  + lineBreaker;
		error_counter = error_counter + 1
		no_error = false;
	}

	if(formObj.emailAddress.value != "") {
		var validEmail = validateEmail(formObj.emailAddress.value)
		if(validEmail == false) {
			error_msg = error_msg + error_counter + ". A valid email address"  + lineBreaker;
			error_counter = error_counter + 1
			no_error = false;
		}
	}

	error_msg = error_msg + lineBreaker + "Thank you"

	if (no_error == true) {
		return true;
	}
	else {
		alert(error_msg);
		return false;
	}
}






//-- -------------------------------------------
//-- GENERIC EMAIL ADDRESS VALIDATION FUNCTION
//-- -------------------------------------------
function validateEmail(addr) {
	var invalidChars = '\/\'\\ ";:?!()[]\{\}^|';
	for (i=0; i<invalidChars.length; i++) {
		if (addr.indexOf(invalidChars.charAt(i),0) > -1) {
			return false;
		}
	}

	for (i=0; i<addr.length; i++) {
		if (addr.charCodeAt(i)>127) {
		return false;
		}
	}

	var atPos = addr.indexOf('@',0);
	if (atPos == -1) {
		return false;
	}

	if (atPos == 0) {
		return false;
	}

	if (addr.indexOf('@', atPos + 1) > - 1) {
		return false;
	}

	if (addr.indexOf('.', atPos) == -1) {
		return false;
	}

	if (addr.indexOf('@.',0) != -1) {
		return false;
	}

	if (addr.indexOf('.@',0) != -1){
		return false;
	}

	if (addr.indexOf('..',0) != -1) {
		return false;
	}

	var suffix = addr.substring(addr.lastIndexOf('.')+1);
	if (suffix.length != 2 && suffix != 'com' && suffix != 'net' && suffix != 'org' && suffix != 'edu' && suffix != 'int' && suffix != 'mil' && suffix != 'gov' & suffix != 'arpa' && suffix != 'biz' && suffix != 'aero' && suffix != 'name' && suffix != 'coop' && suffix != 'info' && suffix != 'pro' && suffix != 'museum') {
		return false;
	}
	return true;
}






function toggleProductTabs(which) {

	if (document.getElementById) {

		var infoTab = document.getElementById("prodInfoTab");
		var intoDiv = document.getElementById("prodInfoDiv");
		var specTab = document.getElementById("prodSpecTab");
		var specDiv = document.getElementById("prodSpecDiv");

		if (which == "prodInfoDiv") {
			infoTab.className = "here";
			intoDiv.className = "show";
			specTab.className = "";
			specDiv.className = "hide";
		}
		else {
			infoTab.className = "";
			intoDiv.className = "hide";
			specTab.className = "here";
			specDiv.className = "show";
		}
	}
}






function clearAnchorLinks() {

	if (document.getElementById) {

		var prodInfoTabLink = document.getElementById("prodInfoTab").firstChild;
		var prodSpecTabLink = document.getElementById("prodSpecTab").firstChild;
		prodInfoTabLink.setAttribute("href","#pageTop");
		prodSpecTabLink.setAttribute("href","#pageTop");

	}
}






function makeComparisonCheckboxes() {

	if ((document.getElementById) && (typeof http == "object")) {

		// Initiate the event capture
		initEventCapture();

		if(document.getElementById("frmSearchRes")) {

			var allTds = document.getElementById("frmSearchRes").getElementsByTagName("td");

			for (var i=0; i<allTds.length; i++) {

				if(allTds[i].className == "productComparisonLink") {

					var thisComparisonCell = allTds[i];
					var thisComparisonLink = allTds[i].firstChild;
					var args = getArgs(thisComparisonLink.href);

					if (thisComparisonLink.className == "linkGreyed") {
						thisComparisonCell.className = "productComparisonInactive";
						var newHTML = '<input class="nofloat" type="checkbox" name="inform' + args.this_id + '" id="inform' + args.this_id + '" value="0" onmouseover="prepInform();" onclick="informUserOfComparisonSelection(this);" />';

					}
					else {

						var newHTML = '<input class="nofloat" type="checkbox" name="compare' + args.this_id + '" id="compare' + args.this_id + '"'
						if (args.action == "remove") {
							newHTML += ' value="1" onclick="checkIDsForComparison(\'' + args.this_id + '\', this);" checked="checked" />';
						}
						else {
							newHTML += ' value="0" onclick="checkIDsForComparison(\'' + args.this_id + '\', this);" />';
						}
					}

					thisComparisonCell.innerHTML = newHTML;
				}
			}
			//document.getElementById("currentSESSION1").innerHTML = document.getElementById("selectedIDsToCompare").value;
			//document.getElementById("currentSESSION2").innerHTML = document.getElementById("noOfselectedIDs").value;
		}
	}

	return true;
}






getArgs = function(query) {
		var args = new Object();
		var pairs = query.split("&");
		for (var i=0; i<pairs.length; i++) {
			var pos = pairs[i].indexOf('=');
			if (pos == -1) continue;
			var argname = pairs[i].substring(0,pos);
			var value = pairs[i].substring(pos+1);
			args[argname] = unescape(value);
		}
		this.max = i;
		return args;
}






function checkIDsForComparison(id, object) {

	var thisProduct =  document.getElementById("compare" + id);
	var thisProductValue = thisProduct.value;

	var currentSelectedIDs = document.getElementById("selectedIDsToCompare").value;
	var noOfselectedIDs = document.getElementById("noOfselectedIDs").value;
	if (noOfselectedIDs.length == 0) {
		noOfselectedIDs = 0;
	}
	else {
		noOfselectedIDs = parseInt(noOfselectedIDs);
	}


	// If the current value of the node is 0, then we are adding it so it needs to be added to the string
	if(thisProductValue == 0) {

		currentSelectedIDs = addToString(currentSelectedIDs, id)
		noOfselectedIDs = noOfselectedIDs + 1;
		thisProduct.value = 1;
		thisProduct.checked = true;
	}

	// If the current value of the node is 1 - it needs to be removed from the string
	else {

		currentSelectedIDs = removeFromString(currentSelectedIDs, id)
		noOfselectedIDs = noOfselectedIDs - 1;
		thisProduct.value = 0;
		thisProduct.checked = false;
	}

	document.getElementById("selectedIDsToCompare").value = currentSelectedIDs;
	document.getElementById("noOfselectedIDs").value = noOfselectedIDs;

	var AJAXurl;
	AJAXurl = "updateProductComparisonIDs.asp?action=replace&allCurrentIDs=" + escape(currentSelectedIDs) + "&noOfCurrentIDs=" + escape(noOfselectedIDs);

	//document.write(AJAXurl);

	if (noOfselectedIDs < 4) {

		http.open("GET", AJAXurl, true);
		http.onreadystatechange = updateDisplay;
		http.send(null);
	}
	else {

		informUserOfComparisonSelection(object)
		updateDisplay();
	}

	//alert("IDS " + document.getElementById("selectedIDsToCompare").value);
	//alert("no of IDS " + document.getElementById("noOfselectedIDs").value);

	//document.getElementById("currentSESSION1").innerHTML = document.getElementById("selectedIDsToCompare").value
	//document.getElementById("currentSESSION2").innerHTML = document.getElementById("noOfselectedIDs").value
}






updateDisplay = function() {

	if (http.readyState == 4) {

		if(http.status != 200) {
			//alert(http.status);
		}

		if(http.responseText.indexOf("maximumreached")!= -1) {

			//alert(http.responseText);
		}

		else {

			var allTds = document.getElementById("frmSearchRes").getElementsByTagName("td");

			if (document.getElementById("noOfselectedIDs").value >= 3) {

				for (var i=0; i<allTds.length; i++) {

					if(allTds[i].className == "productComparisonLink") {

						var thisComparisonCell = allTds[i];
						var thisComparisonInput = allTds[i].firstChild;

						if(thisComparisonInput.value == 0) {

							thisComparisonCell.className = "productComparisonInactive"
							thisComparisonCell.innerHTML = '<input class="nofloat" type="checkbox" name="inform' + thisProdID+ '" id="inform' + thisProdID + '" value="0" onmouseover="prepInform();" onclick="informUserOfComparisonSelection(this);" />';
						}
					}
				}
			}

			else {

				for (var i=0; i<allTds.length; i++) {

					if(allTds[i].className == "productComparisonInactive") {

						var thisComparisonCell = allTds[i];
						var thisProdID = thisComparisonCell.id.substring(5,thisComparisonCell.id.length)

						thisComparisonCell.className = "productComparisonLink";
						thisComparisonCell.innerHTML = '<input class="nofloat" type="checkbox" name="compare' + thisProdID+ '" id="compare' + thisProdID + '" value="0" onclick="checkIDsForComparison(\'' + thisProdID + '\');" />';
					}
				}
			}
		}

	}
}






function informUserOfComparisonSelection(object) {

	var errorHolder;
	var MessageString = "";

	object.checked = false;
	activateAlertBox = false;
	informActive = false;

	if (document.getElementById("aspErrorMsg")) document.getElementById("aspErrorMsg").className = "hide";

	var selectedIDsToCompare = document.getElementById("selectedIDsToCompare").value;
	var noOfselectedIDs = document.getElementById("noOfselectedIDs").value;
	var updateReferer = document.getElementById("updateReferer").value;

	errorHolder = document.getElementById("ajaxErrorMsg")
	errorHolder.className = "error ajaxError"

	MessageString += 'You already have three products selected. You can:<br />'
	MessageString += '1. <a href="productCompare.asp?selectedIDsToCompare=' + selectedIDsToCompare + '&noOfselectedIDs=' + noOfselectedIDs + '&updateReferer=' + updateReferer + '">compare these products</a><br />'
	MessageString += '2. <a href="updateProductComparisonIDs.asp?action=abandon&amp;referer=productSearch[d]asp[q]page_id[e]16#advancedSearch">start a new search</a><br />'
	MessageString += '3. <a href="updateProductComparisonIDs.asp?action=abandon&amp;referer=' + updateReferer + '">clear this selection</a><br />'
	MessageString += '<span class="AlRight"><a href="javascript:hideInform();">OK</a></span>';

	errorHolder.innerHTML = MessageString;

}






hideInform = function() {
	if (!dom) return

	errorHolder = document.getElementById("ajaxErrorMsg")

	errorHolder.innerHTML = '';
	errorHolder.className = "hide";

	activateAlertBox = false;
	informActive = true;
}






function initEventCapture() {
	if (window.Event) {
		document.captureEvents(Event.MOUSEMOVE);
	}
	document.onmousemove = moveAlertBox;
}






function moveAlertBox(e) {

	if (!dom) return

	if (isUndefined(activateAlertBox)) {
		activateAlertBox = false;
	}

	var Xoffset = 385;
	var Yoffset = 75;

	try {

		if (activateAlertBox == true) {

			alertObj = document.getElementById("ajaxErrorMsg")

			if (IE) {
				tempX = event.clientX + document.documentElement.scrollLeft - Xoffset;
				tempY = event.clientY + document.documentElement.scrollTop - Yoffset;
			} else {
				tempX = e.pageX - Xoffset;
				tempY = e.pageY - Yoffset;
			}
			if (tempX < 0) {
				tempX = 0
				}
			if (tempY < 0) {
				tempY = 0
				}

			if(!IE) {
				tempX = tempX + "px"
				tempY = tempY + "px"
				}

			alertObj.style.left = tempX;
			alertObj.style.top = tempY;
		}

	}
	catch(err) {
		// Do nothing
	}
}






prepInform = function() {
	if (informActive == true) {
		activateAlertBox = true;
	}
}







function addToString(existingStr, valueToAdd) {

	var aRebuildString = "";

	if (existingStr == "") {

			aRebuildString = valueToAdd;
	}
	else {

		aRebuildString = existingStr + "," + valueToAdd;
	}

	return aRebuildString;
}






function removeFromString(existingStr, valueToRemove) {

	var rRebuildString = "";
	var existingStrArr = existingStr.split(",");

	for (var i=0; i < existingStrArr.length; i++) {

		if (existingStrArr[i] != valueToRemove) {

			rRebuildString = addToString(rRebuildString, existingStrArr[i])
		}
	}

	return rRebuildString;
}















