function searchLoader()
{
	/* populateVendors();*/
	searchResults();
}


function loadSearchXMLDoc(url,callback) 
{
	// branch for native XMLHttpRequest object
	if (window.XMLHttpRequest) {
		rreq = new XMLHttpRequest();
		rreq.onreadystatechange = eval(callback);
		rreq.open("GET", url, true);
		rreq.send(null);
	// branch for IE/Windows ActiveX version
	} else if (window.ActiveXObject) {
		rreq = new ActiveXObject("Microsoft.XMLHTTP");
		if (rreq) {
			rreq.onreadystatechange = eval(callback);
			rreq.open("GET", url, true);
			rreq.send();
		}
	}
}

var page = 1;

function searchResults(spage)
{
	if(spage === undefined)
		page=1;
	else if(spage=='t')
		page++;
	else
		page=1;

	$('AjaxSearchBusy_top').style.display = 'block';
	$('AjaxSearchBusy_bottom').style.display = 'block';
	$('GetMoreSearchResults').style.display = 'none';

	/* We need to get selected id's from the right most box that has selected id's. The last in the list
	 may not necessarily have selections, so take note of that. We also need to build the structure of 
	 which categories are selected in the chain in order to repopulate after a navigate away / return. */
	var categoryIds = '';
	var categoryArray = Array();
	var i=0;
	while($('CategoryLevel'+i))
	{
		var currentSelections = '';
		var categoryArrayTmp = new Array();
		
		for (j = 0; j < $('CategoryLevel'+i).length; j++)
		{
			if($('CategoryLevel'+i).options[j].selected && $('CategoryLevel'+i).options[j].value !== 'x')
			{
				categoryArrayTmp[j]=$('CategoryLevel'+i).options[j].value;
			
				if(currentSelections.length > 0)
					currentSelections = currentSelections+','+$('CategoryLevel'+i).options[j].value;
				else
					currentSelections = $('CategoryLevel'+i).options[j].value;
			}
			else if($('CategoryLevel'+i).options[j].value == 'x' && $('CategoryLevel'+i).options[i].selected )
			{
				clearListBox('CategoryLevel'+i);
				$('CategoryLevel'+i).options[i].selected = true;
			}
		}
		
		if(categoryArrayTmp.length > 0)
			categoryArray[i] = categoryArrayTmp;
		
		i++;
		// If currentSelections is not empty, make it the assign it to the most currently selected select box
		if(currentSelections.length > 0)
			categoryIds = currentSelections;
	}

	vendorIds = '';
	var vendorArray = new Array();
	for (i = $('VendorFilter').length - 1; i>=0; i--) 
	{
		if($('VendorFilter').options[i].selected && $('VendorFilter').options[i].value !== 'x')
		{
			vendorArray[i] = $('VendorFilter').options[i].value;
			
			if(vendorIds.length > 0)
				vendorIds = vendorIds+','+$('VendorFilter').options[i].value;
			else
				vendorIds = $('VendorFilter').options[i].value;
		}
		else if($('VendorFilter').options[i].value == 'x' && $('VendorFilter').options[i].selected )
		{
			clearListBox('VendorFilter');
			$('VendorFilter').options[i].selected = true;
		}
	}	
	

	if(document.SearchForm.Pref[0].checked)
		var url = '?rset=p';
	else
		var url = '?rset=n';
		
	url = url + '&p='+page;

	kw = escape($('Keyword').value);
	
	if(categoryIds.length > 0)
		url = url + '&cgid='+categoryIds;
		
	if(vendorIds.length > 0)
		url = url + '&vgid='+vendorIds;
	
	if(kw.length > 0)
		url = url + '&kw='+kw;
	
	/* This is dependant on the selectionArray which is defined in another file */
	var toJSON = {contents: categoryArray};
	url = url + '&cs='+Object.toJSON(toJSON);
	
	var toJSON = {contents: vendorArray};
	url = url + '&vs='+Object.toJSON(toJSON);
	
	var prot = (("https:" == document.location.protocol) ? "https://" : "http://");
	var loc = location.href;
	if(loc.search('www.klickkitchen.com') != -1)
	{
		loadSearchXMLDoc(prot+'www.klickkitchen.com/Catalog/AJAXSearch' + url,'searchResultsHandler');
	}
	else if(loc.search('localdev.klickkitchen.com') != -1)
	{
		loadSearchXMLDoc(prot+'localdev.klickkitchen.com/Catalog/AJAXSearch' + url,'searchResultsHandler');
	}
	else if(loc.search('stage.klickkitchen.com') != -1)
	{
		loadSearchXMLDoc(prot+'stage.klickkitchen.com/Catalog/AJAXSearch' + url,'searchResultsHandler');
	}
	else
	{
		loadSearchXMLDoc(prot+'demo.klickkitchen.com/Catalog/AJAXSearch' + url,'searchResultsHandler');
	}		
}

function searchResultsHandler()
{
	// only if req shows "complete"
	if (rreq.readyState == 4) 
	{
		// only if "OK"
		if (rreq.status == 200) 
		{
			$('AjaxSearchBusy_top').style.display = 'none';
			$('AjaxSearchBusy_bottom').style.display = 'none';

			response = rreq.responseText;

			if (window.ActiveXObject) 
			{
				xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
				xmlDoc.async="false";
				xmlDoc.loadXML(response);			
			}
			else
			{
				parser=new DOMParser();	
				xmlDoc=parser.parseFromString(response,"text/xml");
			}

			if (window.ActiveXObject)
			{						
				resultCount = xmlDoc.getElementsByTagName('resultcount')[0].childNodes[0].nodeValue;
				resultsPerSet = xmlDoc.getElementsByTagName('resultsperset')[0].childNodes[0].nodeValue;
				resultsInSet = xmlDoc.getElementsByTagName('resultsinset')[0].childNodes[0].nodeValue;
				tableText = xmlDoc.getElementsByTagName('outputtable')[0].childNodes[0].nodeValue;
			}
			else
			{
				resultCount = xmlDoc.getElementsByTagName('resultcount')[0].textContent;
				resultsPerSet = xmlDoc.getElementsByTagName('resultsperset')[0].textContent;
				resultsInSet = xmlDoc.getElementsByTagName('resultsinset')[0].textContent;
				tableText = xmlDoc.getElementsByTagName('outputtable')[0].textContent;			
			}

			if(page > 1)
			{
				$('SearchResultsTable').innerHTML = $('SearchResultsTable').innerHTML+tableText;
			}
			else
			{
				$('SearchResultsTable').innerHTML = tableText;
				$('SearchResultsTable').style.display = 'block';
			}

			if(resultCount==0 || Number(resultsInSet)<Number(resultsPerSet))
				$('GetMoreSearchResults').style.display = 'none';
			else
				$('GetMoreSearchResults').style.display = 'block';
		}
		else 
		{
			if(rreq.status!=0)
				alert("There was a problem retrieving the XML data:\n" + rreq.statusText);
		}
	}
}
