function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;

}

function MM_preloadImages() { //v3.0
 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
   var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
   if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
// end mm
var alerts=false; 
var shownDept;
var shownSubDept;
var closedSubDept;
function showDept(deptId){
	var dept2show;
//		alert("deptId="+deptId +",shownDept"+shownDept+",shownSubDept"+shownSubDept+",closedSubDept"+closedSubDept);
	dept2show = document.getElementById('cat_'+deptId);
	if (dept2show != null){
		if (shownDept != null){
			if (dept2show == shownDept){
				if (shownSubDept == null){	// don't close parent if children visible
					if (closedSubDept == null){
						shownDept.style.display='none';
						shownDept = null;
					}else{
						closedSubDept = null;
					}
				}
			}else{	// change top level
				shownDept.style.display='none';
				dept2show.style.display='block';
				shownDept = dept2show;
			}
		}else{
			dept2show.style.display='block';
//ok on firefix/iex			dept2show.style.display='inline';
//ok on mac					dept2show.style.display='inherit';
			shownDept = dept2show;
		}
	}
//		window.scroll(0,2000);	// a large number to scroll to the bottom. The only way I could get external links to directly work
}
function showSubDept(deptId, subDeptId){
//		alert("deptId, subDeptid="+deptId +"," + subDeptId);
	var dept2show;
	dept2show = document.getElementById('cat_'+subDeptId);
	if (dept2show != null){
		if (shownSubDept != null){
			if (shownSubDept == dept2show){ 
				shownSubDept.style.display='none';
				closedSubDept = shownSubDept; // tell parent what we've just done.
				shownSubDept = null;
			}else{	// a different sub dept.
				shownSubDept.style.display='none';
				dept2show.style.display='block';
				shownSubDept = dept2show;
			}
		}else{
			dept2show.style.display='block';
			shownSubDept = dept2show;
		}
		// Ajax stuff here
		if (shownSubDept != null){
			tryit(subDeptId);
		}
	}
}
function tryit(deptId){
	var req;
	if (alerts)
		alert("deptId=" +deptId);

//				 var idField = document.getElementById("userid");
//				 var url = "validate?id=" + escape(idField.value);
		 if (window.XMLHttpRequest) {
				 req = new XMLHttpRequest();
		 } else if (window.ActiveXObject) {
				 req = new ActiveXObject("Microsoft.XMLHTTP");
		 }
		 var url="fred.htm?ajax=" + deptId;
		 resp= req.open("GET", url, false);
//				 req.onreadystatechange = callback;
		 req.send(null);
//alert(req.readyState);
	if (alerts)
		alert(req.responseText);
//alert(req.responseXML);
	var msg = req.responseXML.getElementsByTagName("message");
//alert("msg="+msg);
 	var cats=msg[0];	// this is an Element. and it contains all the Categories
 	var cats2= cats.getElementsByTagName("category");
 	if (alerts)
 		alert("c2len=" + cats2.length);	
//			mdiv = document.getElementById("ajaxtest1");
//      mdiv.innerHTML = msg.childNodes[0].nodeValue;
//			mdiv.style.color='blue';
	var tab = document.getElementById('ajaxslot');
	var nodes = tab.childNodes;
	var ix = 0;
	for (ix = 0; ix < nodes.length;ix++){
		tab.removeChild(nodes[ix]);
	}
	ix = 0; 
	for (var i = 0;i < cats2.length;i++){
	 	if (alerts)
			alert("msgI="+cats2[i]);
		var x = cats2[i];
		var id = x.getElementsByTagName("id")[0].firstChild.data; 
		var name = x.getElementsByTagName("name")[0].firstChild.data; 
		var desc = x.getElementsByTagName("description")[0].firstChild.data; 
		var row = tab.insertRow(i);
		row.insertCell(0).appendChild(document.createTextNode(id));
		row.insertCell(1).appendChild(document.createTextNode(name));
		row.insertCell(1).appendChild(document.createTextNode(desc));
	}
}
function toggleElement(el, id, showtext, hidetext){
	var x = document.getElementById(id);
	var y = x.style.display;
	if (y == 'block'){
		x.style.display = 'none';
		el.innerHTML=showtext;
	}else{
		x.style.display = 'block';
		el.innerHTML=hidetext;
	}
	return false;
}
// end deptmenu
function isNumeric(value){
	if (value.length > 0){
		var digits="0123456789.";
		var i;
		for (i = 0;i < value.length;i++){
			if (digits.indexOf(value.charAt(i)) < 0){
				return false;
			}
		}
	}
	return true;
}
function stripComma(val){
	var x = val.indexOf(',');
	if (x == 0){
		return stripComma(val.substring(1));
	}else if (x > 0){
		if (x < (val.length - 1)){
			return stripComma(val.substring(0, x) + val.substring(x+1));
		}else{	// comma at end
			return val.substring(0, x);
		}
	}else{
		return val;
	}
}
function showMoney(val){
	var rval;
	var valp = Math.round(val * 100);
	if ((valp % 100) == 0){
		rval = Math.round(val) +".00";
	}else if ((valp % 10) == 0){
		rval = valp / 100 + "0";
	}else{
		rval = Math.round(valp)/100;
	}
	return rval;
}
function fCheck(theForm) {
	if (alerts)
		alert(theForm.name);
	if (theForm.name == "search"){
		return valSearch(theForm);
	}
	return true;	// default is OK
}
function valSearch(theForm){
	var min = 0;
	var max = 0;
	if (theForm.minprice != null){
		min = stripComma(theForm.minprice.value);
		if (!isNumeric(min) || min < 0){
			alert("Price must be a positive number");
			theForm.minprice.focus();
			return false;
		}
		min = Number(min);
	}
	if (theForm.maxprice != null){
		max = stripComma(theForm.maxprice.value);
		if (!isNumeric(max) || max < 0){
			alert("Price must be a positive number");
			theForm.maxprice.focus();
			return false;
		}
		max = Number(max);
	}
	if (max > 0 && max < min){
		alert("Minimum price may not exceed maximum");
		theForm.minprice.focus();
		return false;
	}
	return true;
}
function keyUp(event, form){
	if (event.keyCode == 13){
		form.submit();
		return false;
	}
	return true;
}
function checkEmailAddress(mailaddr) {
	at2 = mailaddr.lastIndexOf("@");
	dot = mailaddr.lastIndexOf(".");

	if (at2 < 1 || dot < (at2+2) || (dot + 3) > mailaddr.length){
		return false;
	}
	return true;
}
function checkEmail(theForm) {
	var x = checkEmailAddress(theForm.email.value);
	if (!x){
		alert ("Please enter a valid email address");
	}
	return x;
}
// end forms
var bsw;	// this is a global variable.
function m_open(url){
window_open(url, 'MerchantDetail', 2);
}
function r_product_open(url){
window_open(url, 'RemoteDetail', 1);
}
function product_open(url){
window_open(url, 'ProductDetail', 0);
}
function r2_product_open(url){
return window_open(url, 'RemoteDetail', 1);
}
function window_open(url, wname, type){
	var offset  = 0;
	var w = 1024;
	var h = 640;
	switch (type){
		case 1:
			offset = 100;
			break;
		case 2:
			offset = 200;
			w = 512;
			h = 320;
			break;
	}
	window.name='main'+new Date().getTime(); 
	var x = '&';
	if (url.indexOf('?') == -1){
		x = '?';
	}
	var y = '';
	if (type != 1){
		var z = 'popup=true';
		if (bsw == null || bsw.closed){
			y=x+'wNew=true' + '&' + z;
		}else{
			y=x + z;
		}
	}

	var common = ',resizable=yes,scrollbars=yes,menubar=yes';
	if (window.screen != null){
		var top=window.screen.availTop;
		if (top == null){
			top = 100; 
		}
		var left=window.screen.availWidth-w;
		if (offset > 0){
			left = left - offset;
			top += offset;
		} 
		if (window.navigator.userAgent.indexOf('MSIE') > 0){
			bsw=open(url+y, wname, 'width='+w+',height='+h+',left='+left+',top='+top+common);
		}else{
			bsw=open(url+y, wname, 'width='+w+',height='+h+',screenX='+left+',screenY='+top+common);
		}
	}else{
		bsw=open(url+y, wname, 'width=660,height=650' + common);
	}
	bsw.focus();
	return bsw;
}
function initComps(){
	if (isOpera()){	// if this was read from the cache we'll need to clear ticks that we've removed
		history.navigationMode='compatible';
		//opera.setOverrideHistoryNavigationMode('compatible');
	}
	// clear the checkboxes in case the settings have been restored from a cache
	var list = document.getElementsByName("pcmp");
	for (var i = 0;i < list.length;i++){
		if (list[i].type=="checkbox"){
			list[i].checked = false;
		}
	}
	var kpfcobj = get_kpfc_elements();
	if (kpfcobj != null){
		kpfc = kpfcobj.kpfc;
		if (kpfc != null){
			for (var i = 0;i < kpfc.length;i++){
				var x = document.getElementById('_'+kpfc[i]);
				if (x != null){
					x.checked = true;
				}
			}
		}
	}
}
function compremove(path, list1, list2, type, id){
	var ch = 'p';
	if (type == 2){
		ch = 'c';
	}
	var sId = '_' + ch + id;
	var tmpObj = new Object;
	tmpObj.checked=false;
	if (window.opener != null){
		var x = window.opener.document.getElementById(sId);
		if (x != null){
			x.checked = false;
		}
	}
	compClickB(tmpObj, ch + id, window.opener);
	var kpfc = new Array;
	var j = 0;
	for (var i = 0;i < list1.length;i++){
		if (list1[i] != id){
			kpfc[j++] = 'p' + list1[i];
		}
	}
	for (var i = 0;i < list2.length;i++){
		if (list2[i] != id){
			kpfc[j++] = 'c' + list2[i];
		}
	}
	if (j > 0){
		docomp(path, kpfc, true);
	}else{
		window.close();
	}
}
function docomp(path, kpfc, replace){
	if (kpfc == null){
		var kpfcobj = get_kpfc_elements();
		if (kpfcobj != null){
			kpfc = kpfcobj.kpfc;
		}
	}
	if (kpfc == null){
		kpfc = new Array;
		var inputs = document.getElementsByName('pcmp');
		var j = 0;
		for (i = 0;i < inputs.length;i++){
			if (inputs[i].checked){
				kpfc[j++] = 'p' + inputs[i].value;
			}
		}
		inputs = document.getElementsByName('ccmp');
		for (i = 0;i < inputs.length;i++){
			if (inputs[i].checked){
				kpfc[j++] = 'c' + inputs[i].value;
			}
		}
	}
	var out = "";
	var j = 0;
	for (i = 0;i < kpfc.length;i++){
		if (kpfc[i].length > 0){
			var sid = kpfc[i].substring(1);
			var type = 1;
			var paramname='pdetails'
			if (kpfc[i].substring(0,1) == 'c'){
				type = 2;
				paramname='cid';
			}
			var ch = '&';
			if (j++ == 0){
				ch = '?';
			}
			out = out + ch + paramname + '=' + sid;
		}
	}
	if (j > 0){
		if (replace != null && replace){
			window.location = path+out;
		}else{
			product_open(path+out);
//			bsw.focus();
		}
	}else{
		alert("Please select some products to compare");
	}
}
function get_kpfc(win, cookiename){
	if (win == null){
		win = window;
	}
	var cooks = win.document.cookie.split(";");
	var cookval=null;
	for (var i = 0;i < cooks.length;i++){
		var cooka = cooks[i].split("=");
		if (cooka.length > 1){
			if (cooka[0].replace(/^\s+|\s+$/g, '') == cookiename){
				cookval=cooka[1];
				break;
			}
		}
	}
	return cookval;
}
function get_kpfc_elements(win){
	var answer = null;
	var obj = get_kpfc(win, "_kpfc");
	if (obj != null){
		var ob2 = obj.split(".");
		if (ob2 != null && ob2.length > 1){
			answer = new Object;
			answer.catname = ob2[0];
			answer.kpfc = ob2[1].split(":");
		}
	}
	return answer;
}
function compClick(ob, pId, catname){
	return compClickB(ob, pId, window, catname);
} 
function compClickB(ob, pId, win, catname){
	if (win == null)
		win = window;
	var localCatname = null;
	var newList = new Array;
	var kpfcobj = get_kpfc_elements(win);
	if (kpfcobj != null){
		localCatname = kpfcobj.catname;
		if (catname == null){
			catname = localCatname;
		}		
		var prods = kpfcobj.kpfc; 
		if (prods.length > 0){
			if (catname == localCatname){ 
				for (var i=0,j=0;i < prods.length;i++){
					if (prods[i] != pId){
						newList[j++] = prods[i];
					}
				}
			}
		}
		if (ob.checked){
			newList[newList.length] = pId;
		}
	}else if (ob.checked){
		newList[0] = pId;
	}
	setCompCookie(catname, newList, win);
}
function setCompCookie(catname, newList, win){
	var newcook = "";
	if (newList != null && newList.length > 0){
		for (var i=0, j=0;i < newList.length;i++){
			if (newList[i].length > 0){
				if (j > 0){
					newcook += ":";
				}
				newcook += newList[i];
				j++;
			}
		}
	}
	cookval="_kpfc=" + catname + "." + newcook + ";path=/";
	win.document.cookie=cookval;
}
function initForms(){
	showAS();
	if (isOpera()){
		window.setTimeout('initComps()', 100);
	}else{
		initComps();
	}
/*	showall(false,'cbbrands'); */

	var el2 = document.getElementById("brandmenuwait");
	if (el2 != null){
		el2.style.display="none";
	}
	var el1 = document.getElementById("brandmenu");
	if (el1 != null){
		el1.style.display="block";
	}
	var el3 = document.getElementById("comparediv");
	if (el3 != null){
		el3.style.display="block";
	}
	return true;
}
function isOpera(){
	return navigator.appName == 'Opera';
}
function showAS(){
	var it0 = document.getElementById("search_advanced");
	var it2 = document.getElementById("search_t2");
	var it4 = document.getElementById("search_t4");
	if (it0 != null){
		if (it0.checked){
			it2.style.display="block";
			it4.style.display="block";
		}else{
			it2.style.display="none";
			it4.style.display="none";
		}
	}
	return true;
}
function finalize(){
}
function showProduct(obj, disp, h){
	obj.style.overflow=disp;
	obj.style.height=h;
}
function showhide(showtf, brand){
	var els = window.document.getElementById('b_' + brand);
	var tick = "none";
	if (showtf){
		tick = "block";
	}
	els.style.display = tick;
}
function showall(showtf, elname){
	var els = window.document.getElementsByName(elname);
	var i;
	for (i = 0;i < els.length;i++){
		els[i].checked=showtf;
		showhide(showtf, els[i].value);
	}
}
function selectall(showtf, elname){
	var els = window.document.getElementsByName(elname);
	if (els != null){
		var i;
		for (i = 0;i < els.length;i++){
			els[i].checked=showtf;
		}
	}
}
// end product
function newOffer(id, url, expiry){
	var o = new Object();
	o.id = id;
	o.url = url.replace("&amp;", "&");
	o.expiry = expiry;
	if (!document.offers)
		document.offers = new Array();
	document.offers[document.offers.length] = o;
}
function getOffer(id){
	var i;
	for(i = 0;i < document.offers.length;i++){
		var o = document.offers[i];
		if (o.id == id){
			return o;
		}
	}
	return null;
}
function showOffer(id){
	offer = getOffer(id);
	if (offer != null){
		element = document.getElementById("offer"+ id);
		element.style.display="inline";
		element = document.getElementById("aoffer"+ id);
		element.href='javascript: r_product_open(\'' + offer.url +'\');';
		elVal= element.innerHTML;
		element = document.getElementById("showcode"+ id);
		element.style.display="none";
		win = r2_product_open(offer.url);
		var str = "Voucher code is " + elVal + ".";
		if (offer.expiry != null && offer.expiry.length > 0){
			str = str + " It expires  on " + offer.expiry + ".";
		}
		str = str + "\n\nThe voucher code is now displayed on the offer page and a new window has opened on the vendor site.\n\nClick OK to continue on the vendor site or cancel to close the vendor window and return to the offer page"; 	
		if (confirm(str)){
			win.focus();
		}else{
			win.close();
		}
	}
}
// end offer
// begin ajax offers stuff

function displayOffers(elementId, categoryId, shopId){
	var test=false;
	var catId = 0;
	var msg;
	if (test){
		var text = "<message>" +
				"<offer>" +
				"<id>1</id>" +
				"<name>OFFER1</name>" +
				"<description>Save 3% on orders over £150</description>" +
				"</offer>" +
				"</message>";
		if (window.DOMParser)
		  {
		  parser=new DOMParser();
		  xmlDoc=parser.parseFromString(text,"text/xml");
		  }
		else // Internet Explorer
		  {
		  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		  xmlDoc.async="false";
		  xmlDoc.loadXML(text);
		  }
		msg = xmlDoc.getElementsByTagName("message");
		showOffersData(msg);
	}else{
		if (window.XMLHttpRequest) {
			req = new XMLHttpRequest();
		} else if (window.ActiveXObject) {
			req = new ActiveXObject("Microsoft.XMLHTTP");
		}
		if (categoryId > 0)
			catId = categoryId;
		var url="/ajax/offers?elementId=" + elementId + "&catId=" + catId;
		if (document.domain.indexOf("192.168") == 0)
			url="/AffWindow/ajax/offers?elementId=" + elementId + "&catId=" + catId;
		if (shopId > 0)
			url = url + "&merchantId=" + shopId;
		if (alerts)
			alert(url);
		req.onreadystatechange=checkOffersData;
		req.open("GET", url, true);
		req.send(null);
	}
	//alert("msg="+msg);
}
function checkOffersData(){
	if(req.readyState != 4)
		return;
	msg = req.responseXML.getElementsByTagName("message");
	showOffersData(msg);
}
function showOffersData(msg){
 	var cats=msg[0];	// this is an Element. and it contains all the Categories
 	var elementId = 'ajaxtab';
 	try{
 		elementId = cats.getElementsByTagName("elementId")[0].firstChild.data;
 	}catch(err){
 		if (alerts)
 			alert("error getting elementId:"+err);
 	}
	var cats2= cats.getElementsByTagName("offer");
 	if (alerts)
 		alert("c2len=" + cats2.length);	
		
	var tab = document.getElementById(elementId);
	
	while (tab.firstChild) {
		  tab.removeChild(tab.firstChild);
		}

	
	var nodes = tab.childNodes;
	var ix = 0;
	for (ix = 0; ix < nodes.length;ix++){
		tab.removeChild(nodes[ix]);
	}
	ix = 0;
	var names = new Array("voucher", "description", "expiresDisplayString");
	
	/* Create the header row */
	var row = tab.insertRow(0);
	var th = row.appendChild(document.createElement('th'));
	th.appendChild(document.createTextNode("Voucher Code"));
	th = row.appendChild(document.createElement('th'));
	th.appendChild(document.createTextNode("Description"));
	th = row.appendChild(document.createElement('th'));
	th.appendChild(document.createTextNode("Expiry"));
	
	for (var i = 0;i < cats2.length;i++){
	 	if (alerts)
			alert("msgI="+cats2[i]);
	 	var tabIx = i + 1;
	 	try{
	 		var x = cats2[i];
			var row = tab.insertRow(tabIx);
	 		for (var y = 0;y < names.length;y++){
		 			var thisvar = "";
		 			try{
		 				thisvar = x.getElementsByTagName(names[y])[0].firstChild.data;
		 			}catch(err1){
		 				if (alerts)
		 					alert("error accessing column data:" + err1);
		 			}
		 			var cell = row.insertCell(y);
		 			if (y == 1){
		 				try {
			 				var clickurl = x.getElementsByTagName("clickUrl")[0].firstChild.data;
			 				var el = document.createElement("a");
//			 				el.textContext=thisvar;
//			 				el.innerText=thisvar;
			 				el.href = clickurl;
			 				el.target = "_blank";
			 				el.title="Visit site. Opens in new window";
			 				cell.appendChild(el);
			 				el.appendChild(document.createTextNode(thisvar));
		 				}catch (err2){
			 				cell.appendChild(document.createTextNode(thisvar));
		 				}
		 			}else{
		 				cell.appendChild(document.createTextNode(thisvar));
		 			}
	 		}
	 	}catch(err){
			if (alerts)
				alert("error in voucher display" + err.description);
	 	}
	}
	var textId = elementId.replace("id", "offerPrompt")
	var textElement = document.getElementById(textId);
	textElement.style.display="block";

}
