filtersDelay = 14;

function GetSearchXmlHttpObject() {
	var xmlHttp=null;
	try {
	 // Firefox, Opera 8.0+, Safari
	 xmlHttp=new XMLHttpRequest();
	 } catch (e) {
	 // Internet Explorer
	 try {
	  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
	  } catch (e) {
	  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
	  }
	}


	if (xmlHttp==null) {
		alert ("Browser does not support HTTP Request")
		return;
	} 
	
	return xmlHttp;
}


function sendAndLoad(ajx, url, callMe) {
	ajx.onreadystatechange = callMe;
	ajx.open("GET",url,true);
	ajx.send(null);


}

// send product filters
function pageButtonClick(p) {
	getProductResults({page:p});
}


function getProductResults(mode, wait, count, thisVar) {
	if (count==undefined) count = 0;
	
	if (wait==undefined) { 
		var count = 0; 
		starting++;
		var thisVar = starting;
		
	}
	count++;
	

	
	if (count < filtersDelay) setTimeout("getProductResults('"+mode+"',1,"+count+","+thisVar+")",100);
	else if(starting==thisVar) getActualResults(mode);
	else { return; }
	
}



function getActualResults(mode) {	
	starting = 0;
	url = document.getElementById('urlRef').value;
	
	searchRes = Array();	
	loadingDiv = document.getElementById('loading');
	loadingDiv.style.display = '';

	liveResultsBox = document.getElementById("product-results");
	

	queries = url.split("&");

	url = queries[0];
	startwith =  (queries.length > 1) ? '&' : '?';
	
	if (queries.length) {
		for (i in queries) {
			q = queries[i];
			r =  (q.indexOf("=") !=-1) ? q.split("=") : Array();
			if (r.length) {
				k = r[0];
				v = r[1];
				if (k.indexOf("search[")==-1 || (k=="page" && v=='-1')) {
				if (searchRes[k]==undefined) searchRes[k] = Array();
				searchRes[k].push(v);
				}
			}
		} // end for
	} // end if
	
	
	// foreach form element
	if (f = document.getElementById('f-filter')) {
	
	for(i=0; i<f.elements.length; i++) {
		if (f.elements[i].checked || f.elements[i].name=='filter[minprice]' || f.elements[i].name=='filter[maxprice]') {
		

			k = f.elements[i].name.replace("filter[","").split("]");
			v = f.elements[i].value;
			
			key = "search[" + k[0] + "]";
			if (searchRes[key]==undefined) searchRes[key] = Array();
			searchRes[key].push(v);
			
			

		} // end if
	} // end for
	
	} // end if
	
	if (f = document.getElementById('f-view-by')) {

		for(i=0; i<f.elements.length; i++) {
			if (f.elements[i].options) {
				k = f.elements[i].name;
				v = f.elements[i].options[f.elements[i].selectedIndex].value;


				searchRes[k] = Array();
				searchRes[k].push(v);

			} // end if
		} // end for
	
	}// end if
	
	
	xmlHttp = GetSearchXmlHttpObject();


	out = startwith;
	for (i in searchRes) out+= i+"="+searchRes[i].join("@@") + "&";
	
	sendAndLoad(xmlHttp, url + out + "displaymode=liveresults&sid="+ Math.round(Math.random() * 1000), outputProductResults);
	
	if (mode=='filters') {
		xmlHttpFilter = GetSearchXmlHttpObject();
		sendAndLoad(xmlHttpFilter, url + out + "displaymode=filter_results&sid="+ Math.round(Math.random() * 1000), outputFilterResults);	
	
	}
	
} 

// send search item
function showResult(str) {
	if (str.length<3) {
		hideSearchResults();
		return;
	}
	
	
	xmlHttp = GetSearchXmlHttpObject();

	var url="/product/list.php?mode=livesearch&searchStr="+str+"&sid="+Math.random();
	sendAndLoad(xmlHttp, url, searchResultFound);
} 


// get product filters
function outputProductResults() { 
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") { 
	
		liveResultsBox = document.getElementById("product-results");		
		liveResultsBox.innerHTML = xmlHttp.responseText;
		document.getElementById('loading').style.display = 'none';
		if (d = document.getElementById('page-results')) document.getElementById('viewing-items').innerHTML = (d.innerHTML==1) ? 'Showing 1 Result' : 'Showing ' + d.innerHTML + " Results";
	
	} 
}

function outputFilterResults() { 
	if (xmlHttpFilter.readyState==4 || xmlHttpFilter.readyState=="complete") { 
	
		res = document.getElementById("filter-results");		
		res.innerHTML = xmlHttpFilter.responseText;
		//document.getElementById('filter-loading').style.display = 'none';

	
	} 
}

// get search results
function searchResultFound() { 
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") { 
		liveSearchBox = document.getElementById("livesearch");		
		liveSearchBox.innerHTML = xmlHttp.responseText;
		liveSearchBox.style.border = "1px solid #ffffff";
		liveSearchBox.style.backgroundColor = "#000000";		
		if (liveSearchBox.style.opacity) liveSearchBox.style.opacity = 0.9;
		if (liveSearchBox.style.filter) liveSearchBox.style.filter = 'alpha(opacity=90)'; 
	} 
}


function hideSearchResults() {
	d = document.getElementById("livesearch");
	d.innerHTML="";
	d.style.border="0px";
}

function getSearchResults() {

}

function setSearchBox(s, colour) {

	if (s.value =='Looking for something? Search for it here...') {
		s.style.fontStyle = 'normal';
		s.style.color = (colour==undefined) ? '#000000' : colour;
		s.value = '';
	}

}

function setSignupBox(s, colour) {

	if (s.value =='Enter email address') {
		s.style.fontStyle = 'normal';
		s.style.color = (colour==undefined) ? '#000000' : colour;
		s.value = '';
	}

}


var browser = new Browser();

// Global object to hold drag information.

var dragObj = new Object();
dragObj.zIndex = 0;
dragObj.width = 250;

/* functions for price dragger */

function Browser() {

	var ua, s, i;
	
	this.isIE    = false;
	this.isNS    = false;
	this.version = null;

	ua = navigator.userAgent;

	s = "MSIE";
	if ((i = ua.indexOf(s)) >= 0) {

	this.isIE = true;
	this.version = parseFloat(ua.substr(i + s.length));
	return;
	}

	s = "Netscape6/";
	if ((i = ua.indexOf(s)) >= 0) {
	this.isNS = true;

	this.version = parseFloat(ua.substr(i + s.length));
	return;
	}

	// Treat any other "Gecko" browser as NS 6.1.

	s = "Gecko";

	this.isNS = true;
	this.version = 6.1;
	return;

}

function dragStart(event, id) {

  var el;
  var x, y;

  // If an element id was given, find it. Otherwise use the element being
  // clicked on.

  if (id)
    dragObj.elNode = document.getElementById(id);
  else {
    if (browser.isIE)
      dragObj.elNode = window.event.srcElement;
    if (browser.isNS)
      dragObj.elNode = event.target;

    // If this is a text node, use its parent element.

    if (dragObj.elNode.nodeType == 3)
      dragObj.elNode = dragObj.elNode.parentNode;
     
  }

  // Get cursor position with respect to the page.

  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  // Save starting positions of cursor and element.

  dragObj.cursorStartX = x;
  dragObj.cursorStartY = y;
  dragObj.elStartLeft  = parseInt(dragObj.elNode.style.left, 10);
  dragObj.elStartTop   = parseInt(dragObj.elNode.style.top,  10);

  if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
  if (isNaN(dragObj.elStartTop))  dragObj.elStartTop  = 0;

  // Update element's z-index.

  dragObj.elNode.style.zIndex = ++dragObj.zIndex;

  // Capture mousemove and mouseup events on the page.

  if (browser.isIE) {
    document.attachEvent("onmousemove", dragGo);
    document.attachEvent("onmouseup",   dragStop);
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS) {
    document.addEventListener("mousemove", dragGo,   true);
    document.addEventListener("mouseup",   dragStop, true);
    event.preventDefault();
  }
}


function dragGo(event) {

	var x, y;

	// Get cursor position with respect to the page.

	if (browser.isIE) {
		x = window.event.clientX + document.documentElement.scrollLeft
		  + document.body.scrollLeft;
		y = window.event.clientY + document.documentElement.scrollTop
		  + document.body.scrollTop;
	}
	if (browser.isNS) {
		x = event.clientX + window.scrollX;
		y = event.clientY + window.scrollY;
	}

	// Move drag element by the same amount the cursor has moved.
	
	maxLeft = 0;
	maxRight = DivValueToNum(document.getElementById('filter_by_price_box').style.width)-10;
	
	leftLimit = (dragObj.elNode.id=='left-price')
		? maxLeft
		: DivValueToNum(document.getElementById('left-price').style.left) + DivValueToNum(document.getElementById('left-price').style.width);

	rightLimit = (dragObj.elNode.id=='left-price') 
		? DivValueToNum(document.getElementById('right-price').style.left) - DivValueToNum(document.getElementById('left-price').style.width) 
		: maxRight;

	newLeft = (dragObj.elStartLeft + x - dragObj.cursorStartX);
	
	if (newLeft < leftLimit) dragObj.elNode.style.left = leftLimit + "px";
	else if ( newLeft > rightLimit) dragObj.elNode.style.left = rightLimit + "px";
	
	else dragObj.elNode.style.left = newLeft + "px";
	initMinPrice = DivValueToNum(document.getElementById('search[startminprice]').value);
	initMaxPrice = DivValueToNum(document.getElementById('search[startmaxprice]').value);
	
	
	if (dragObj.elNode.id=='left-price') {
		v = Math.floor(((initMaxPrice-initMinPrice)/maxRight * DivValueToNum(dragObj.elNode.style.left)) + initMinPrice);
		document.getElementById('filter[minprice]').value = v;
		document.getElementById('price-min').innerHTML = "&pound;" + v;
	} else {
		v = Math.ceil(((initMaxPrice-initMinPrice)/maxRight * DivValueToNum(dragObj.elNode.style.left)) + initMinPrice);
		document.getElementById('filter[maxprice]').value = v;	
		document.getElementById('price-max').innerHTML = "&pound;" + v;
	}
	if (browser.isIE) {
		window.event.cancelBubble = true;
		window.event.returnValue = false;
	}
	if (browser.isNS)
		event.preventDefault();
}

function initPriceBars() {
	maxRight = DivValueToNum(document.getElementById('filter_by_price_box').style.width)-10;

	
	initMinPrice 	= DivValueToNum(document.getElementById('search[startminprice]').value);
	initMaxPrice 	= DivValueToNum(document.getElementById('search[startmaxprice]').value);
	LeftPrice 		= DivValueToNum(document.getElementById('filter[minprice]').value);
	RightPrice 		= DivValueToNum(document.getElementById('filter[maxprice]').value);
	
	document.getElementById('price-min').innerHTML = "&pound;" + LeftPrice;
	document.getElementById('price-max').innerHTML = "&pound;" + RightPrice;
	

	
	document.getElementById('left-price').style.left = ((LeftPrice - initMinPrice)/((initMaxPrice-initMinPrice) / maxRight)) + "px";
	document.getElementById('right-price').style.left = ((RightPrice - initMinPrice)/((initMaxPrice-initMinPrice) / maxRight)) + "px";
	
}

function dragStop(event) {

	// Stop capturing mousemove and mouseup events.

	if (browser.isIE) {
		document.detachEvent("onmousemove", dragGo);
		document.detachEvent("onmouseup",   dragStop);
	}
	if (browser.isNS) {
		document.removeEventListener("mousemove", dragGo,   true);
		document.removeEventListener("mouseup",   dragStop, true);
	}
	getProductResults();
}

/* end of functions for price dragger */

// for filters
starting = 0;
var t=0;
