function clearKeystone(dropname)
{
	var parent = document.getElementById(dropname)
	parent.innerHTML = ""
	var optionnode = document.createElement('option')
	optionnode.value = ''
	switch(dropname)
	{
		case 'keystoneYear':
			optionnode.innerHTML = "Select a Year"
			break;
		case 'keystoneMake':
			optionnode.innerHTML = "Select a Make"
			break;
		case 'keystoneModel':
			optionnode.innerHTML = "Select a Model"
			break;
		case 'keystonePartType':
			optionnode.innerHTML = "Select a Part Type"
			break;
	}
	parent.appendChild(optionnode)
}

function clearFilters()
{
	var filterdiv = document.getElementById('filters')
	filterdiv.innerHTML = ''
}

function callKeystoneMake(selectbox)
{
	if(selectbox.options[selectbox.selectedIndex].value == "") return;
	clearKeystone('keystoneMake')
	clearKeystone('keystoneModel')
	clearKeystone('keystonePartType')
	clearFilters()
	var yearCode = selectbox.options[selectbox.selectedIndex].value
	var yearText = selectbox.options[selectbox.selectedIndex].text

	var accum = "____" + yearCode
	var accumText = yearText
	var accumYMM = yearCode.substring(0,4)
	document.getElementById('accum').value = accum
	document.getElementById('accumText').value = accumText
	document.getElementById('accumYMM').value = accumYMM

	getQAYMM(accum,accumText,accumYMM,false,'keystoneMake')

}

function callKeystoneModel(selectbox)
{
	if(selectbox.options[selectbox.selectedIndex].value == "") return;
	clearKeystone('keystoneModel')
	clearKeystone('keystonePartType')
	clearFilters()
	yearbox = document.getElementById('keystoneYear')
	var yearCode = yearbox.options[yearbox.selectedIndex].value
	var yearText = yearbox.options[yearbox.selectedIndex].text.toUpperCase()
	var makeCode = selectbox.options[selectbox.selectedIndex].value
	var makeText = selectbox.options[selectbox.selectedIndex].text.toUpperCase()

	var accum = "____" + yearCode.substring(0,4) + makeCode
	var accumText = yearText + '|' + makeText
	var accumYMM = yearCode.substring(0,4) + makeCode.substring(0,3)

	document.getElementById('accum').value = accum
	document.getElementById('accumText').value = accumText
	document.getElementById('accumYMM').value = accumYMM

	getQAYMM(accum,accumText,accumYMM,false,'keystoneModel')
}

function callKeystonePart(selectbox)
{
	clearKeystone('keystonePartType')
	clearFilters()
	if(selectbox.options[selectbox.selectedIndex].value == "") return;
	yearbox = document.getElementById('keystoneYear')
	makebox = document.getElementById('keystoneMake')
	var yearCode = yearbox.options[yearbox.selectedIndex].value
	var yearText = yearbox.options[yearbox.selectedIndex].text.toUpperCase()
	var makeCode = makebox.options[makebox.selectedIndex].value
	var makeText = makebox.options[makebox.selectedIndex].text.toUpperCase()
	var modelCode = selectbox.options[selectbox.selectedIndex].value
	var modelText = selectbox.options[selectbox.selectedIndex].text.toUpperCase()

	var accum = "_"
	var accumText = yearText + '|' + makeText + '|' + modelText
	var accumYMM = yearCode.substring(0,4) + makeCode.substring(0,3) + modelCode.substring(0,4)

	document.getElementById('accum').value = accum
	document.getElementById('accumText').value = accumText
	document.getElementById('accumYMM').value = accumYMM

	getQAYMM(accum,accumText,accumYMM,false,'keystonePartType')
}

function loadkeystonePartType(optionvals,optioncodes,xmlanswerCode,xmlanswerText,isLastQuestion)
{
	clearKeystone('keystonePartType')
	var parent = document.getElementById('keystonePartType')
	var accumYMM = document.getElementById('accumYMM').value
	
	for(var i = 0; i < optionvals[0].childNodes.length; i++)
	{
		var optionText = optionvals[0].childNodes[i].childNodes[0].nodeValue.toLowerCase()
		if((trim(optionText) != 'reese') && (trim(optionText) != 'draw tite') && (trim(optionText) != 'hidden hitch'))
		{
			var optionnode = document.createElement('option')
			var nodespl = optioncodes[0].childNodes[i].childNodes[0].nodeValue.split('N')
			optionnode.value = nodespl[0] + accumYMM + nodespl[1]
			optionnode.innerHTML = optionText
			parent.appendChild(optionnode)
		}
	}
}

function callKeystoneType(selectbox)
{
	if(selectbox.options[selectbox.selectedIndex].value == "") return;
	clearFilters()
	yearbox = document.getElementById('keystoneYear')
	makebox = document.getElementById('keystoneMake')
	modelbox = document.getElementById('keystoneModel')
	var yearCode = yearbox.options[yearbox.selectedIndex].value
	var yearText = yearbox.options[yearbox.selectedIndex].text.toUpperCase()
	var makeCode = makebox.options[makebox.selectedIndex].value
	var makeText = makebox.options[makebox.selectedIndex].text.toUpperCase()
	var modelCode = modelbox.options[modelbox.selectedIndex].value
	var modelText = modelbox.options[modelbox.selectedIndex].text.toUpperCase()
	var partCode = selectbox.options[selectbox.selectedIndex].value
	var partText = selectbox.options[selectbox.selectedIndex].text.toUpperCase()

	var accumText = yearText + '|' + makeText + '|' + modelText + '|' + partText
	var accumYMM = document.getElementById('accumYMM').value
	var accum = partCode

	document.getElementById('accum').value = accum
	document.getElementById('accumText').value = accumText

	var parent = document.getElementById('filters')
	var filterTitle = document.createElement('p')
	filterTitle.id = 'filterTitle'
	filterTitle.className = 'filterTitle'
	filterTitle.innerHTML = 'Narrow your search'
	filterTitle.style.display = 'none'
	var filter = document.createElement('select')
	filter.id = 'keystoneFilter1'
	filter.style.display = 'none'
	filter.onchange = new Function('evt','callKeystoneFilter1(this)')
	parent.appendChild(filterTitle)
	parent.appendChild(filter)
	parent.style.display = 'block'
	
	getQAYMM(accum,accumText,accumYMM,true,'keystoneFilter1')

}

function loadkeystoneFilter(optionvals,optioncodes,xmlanswerCode,xmlanswerText,isLastQuestion,filterNum)
{
	var fNum = Number(filterNum) + 1
	while (document.getElementById('keystoneFilter' + fNum))
	{
		var removeFilter = document.getElementById('keystoneFilter' + fNum)
		removeFilter.parentNode.removeChild(removeFilter)
		fNum++
	}
	var parent = document.getElementById('keystoneFilter' + filterNum)
	parent.innerHTML = ''
	var accumYMM = document.getElementById('accumYMM').value
	var answerCode = xmlanswerCode[0].childNodes[0].nodeValue
	
	for(var i = 0; i < optionvals[0].childNodes.length; i++)
	{
		var optionText = optionvals[0].childNodes[i].childNodes[0].nodeValue.toLowerCase()
		if((trim(optionText) != 'reese') && (trim(optionText) != 'draw tite') && (trim(optionText) != 'hidden hitch') && (trim(optionText) != 'valley tow'))
		{
			var optionnode = document.createElement('option')
			optionnode.value = answerCode + optioncodes[0].childNodes[i].childNodes[0].nodeValue
			optionnode.innerHTML = optionText
			parent.appendChild(optionnode)
		}
	}
	parent.style.display = 'block'
}

function callKeystoneFilter1(selectbox)
{
	if(selectbox.options[selectbox.selectedIndex].value == "")
	{
		return;
	}
	
	yearbox = document.getElementById('keystoneYear')
	makebox = document.getElementById('keystoneMake')
	modelbox = document.getElementById('keystoneModel')
	var answercode = document.getElementById('answerCode').value
	var yearCode = yearbox.options[yearbox.selectedIndex].value
	var makeCode = makebox.options[makebox.selectedIndex].value
	var modelCode = modelbox.options[modelbox.selectedIndex].value
	var brandCode = selectbox.options[selectbox.selectedIndex].value
	var brandText = selectbox.options[selectbox.selectedIndex].text.toUpperCase()

	var accum = brandCode
	var accumText = brandText
	var accumYMM = document.getElementById('accumYMM').value

	document.getElementById('accum').value = accum
	document.getElementById('accumText').value = accumText
	document.getElementById('accumYMM').value = accumYMM

	var parent = document.getElementById('filters')
	var filter = document.createElement('select')
	filter.id = 'keystoneFilter2'
	filter.style.display = 'none'
	filter.onchange = new Function('evt','callKeystoneFilter2(this)')
	parent.appendChild(filter)

	getQAYMM(accum,accumText,accumYMM,true,'keystoneFilter2')
}

function callKeystoneFilter2(selectbox)
{
	if(selectbox.options[selectbox.selectedIndex].value == "")
	{
		return;
	}
	yearbox = document.getElementById('keystoneYear')
	makebox = document.getElementById('keystoneMake')
	modelbox = document.getElementById('keystoneModel')
	brandbox = document.getElementById('keystoneFilter1')
	var answercode = document.getElementById('answerCode').value
	var yearCode = yearbox.options[yearbox.selectedIndex].value
	var makeCode = makebox.options[makebox.selectedIndex].value
	var modelCode = modelbox.options[modelbox.selectedIndex].value
	var brandText = brandbox.options[brandbox.selectedIndex].text.toUpperCase()
	var filter1Code = selectbox.options[selectbox.selectedIndex].value
	var filter1Text = selectbox.options[selectbox.selectedIndex].text.toUpperCase()

	var accum = filter1Code
	var accumText = brandText + "|" + filter1Text
	var accumYMM = document.getElementById('accumYMM').value

	document.getElementById('accum').value = accum
	document.getElementById('accumText').value = accumText
	document.getElementById('accumYMM').value = accumYMM

	var parent = document.getElementById('filters')
	var filter = document.createElement('select')
	filter.id = 'keystoneFilter3'
	filter.style.display = 'none'
	filter.onchange = new Function('evt','callKeystoneFilter3(this)')
	parent.appendChild(filter)

	getQAYMM(accum,accumText,accumYMM,true,'keystoneFilter3')

}

function callKeystoneFilter3(selectbox)
{
	if(selectbox.options[selectbox.selectedIndex].value == "")
	{
		return;
	}
	
	yearbox = document.getElementById('keystoneYear')
	makebox = document.getElementById('keystoneMake')
	modelbox = document.getElementById('keystoneModel')
	brandbox = document.getElementById('keystoneFilter1')
	filterbox = document.getElementById('keystoneFilter2')
	var answercode = document.getElementById('answerCode').value
	var yearCode = yearbox.options[yearbox.selectedIndex].value
	var makeCode = makebox.options[makebox.selectedIndex].value
	var modelCode = modelbox.options[modelbox.selectedIndex].value
	var brandText = brandbox.options[brandbox.selectedIndex].text.toUpperCase()
	var filter1Text = filterbox.options[filterbox.selectedIndex].text.toUpperCase()
	var filter2Code = selectbox.options[selectbox.selectedIndex].value
	var filter2Text = selectbox.options[selectbox.selectedIndex].text.toUpperCase()

	var accum = filter2Code
	var accumText = brandText + "|" + filter1Text + "|" + filter2Text
	var accumYMM = document.getElementById('accumYMM').value

	document.getElementById('accum').value = accum
	document.getElementById('accumText').value = accumText
	document.getElementById('accumYMM').value = accumYMM

	var parent = document.getElementById('filters')
	var filter = document.createElement('select')
	filter.id = 'keystoneFilter4'
	filter.style.display = 'none'
	filter.onchange = new Function('evt','callKeystoneFilter4(this)')
	parent.appendChild(filter)

	getQAYMM(accum,accumText,accumYMM,true,'keystoneFilter4')

}

function getQAYMM(accum,accumText,accumYMM,getParts,parentName)
{
	document.getElementById('answerCode').value = ''
	document.getElementById('answerText').value = ''
	document.getElementById('keystoneSorter').selectedIndex = 0

  var loadAjax = ajaxRequester();

  if( loadAjax != null)
  {
		var strQueryString = 'index.cfm/event/keystoneGetQAYMM/accum/' + xmlencode(trim(accum)) + '/accumText/' + xmlencode(trim(accumText)) + '/accumYMM/' + xmlencode(trim(accumYMM))
		loadAjax.open("GET", strQueryString, true);
		loadAjax.onreadystatechange = function (aEvt) {
			if( loadAjax.readyState == 4)
			{ //The load is complete when readyState equals 4
				if( loadAjax.status != "200" &&  loadAjax.status != undefined)
				{
					alert('There was an error')
				} else {
          var xmlDoc; 
          if(window.ActiveXObject)
          {
              //Internet Explorer
              xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
              xmlDoc.async = false;
              xmlDoc.loadXML( loadAjax.responseText);
          }
          else if(document.implementation && document.implementation.createDocument)
          {
              //Mozilla
              xmlDoc =  loadAjax.responseXML;
          }
 					var parent = document.getElementById(parentName)
					var optionvals = xmlDoc.documentElement.getElementsByTagName('OptionText')
					var optioncodes = xmlDoc.documentElement.getElementsByTagName('OptionCode')
					
					var xmlanswerCode = xmlDoc.documentElement.getElementsByTagName('AnswerCode')
					var xmlanswerText = xmlDoc.documentElement.getElementsByTagName('AnswerText')
					var isLastQuestion = xmlDoc.documentElement.getElementsByTagName('IsLastQuestion')[0].childNodes[0].nodeValue
					
					if((xmlanswerCode.length > 0) && (xmlanswerCode[0].hasChildNodes()))
					{
						document.getElementById('answerCode').value = xmlanswerCode[0].childNodes[0].nodeValue
					}
					
					if((xmlanswerText.length > 0) && (xmlanswerText[0].hasChildNodes()))
					{
						document.getElementById('answerText').value = xmlanswerText[0].childNodes[0].nodeValue
					}
					
					if(isLastQuestion == 'DONE')
					{
						parent.parentNode.removeChild(parent)
						getPartsInfo(document.getElementById('answerCode').value,'2')
						return;
					}
					if(parentName == 'keystoneYear' || parentName == 'keystoneMake' || parentName == 'keystoneModel')
					{
						for(var i = 0; i < optionvals[0].childNodes.length; i++)
						{
							var optionText = optionvals[0].childNodes[i].childNodes[0].nodeValue.toLowerCase()
							if((trim(optionText) != 'reese') && (trim(optionText) != 'draw tite') && (trim(optionText) != 'hidden hitch'))
							{
								var optionnode = document.createElement('option')
								optionnode.value= optioncodes[0].childNodes[i].childNodes[0].nodeValue
								optionnode.innerHTML = optionText
								parent.appendChild(optionnode)
							}
						}
						parent.style.display = 'block'
					} else {
						if(parentName == 'keystonePartType')
						{
							loadkeystonePartType(optionvals,optioncodes,xmlanswerCode,xmlanswerText,isLastQuestion)
						} else {
							var filterNum = parentName.replace('keystoneFilter','')
							loadkeystoneFilter(optionvals,optioncodes,xmlanswerCode,xmlanswerText,isLastQuestion,filterNum)
						}
					}
					if(document.getElementById('filterTitle')) document.getElementById('filterTitle').style.display = 'block'
					if(getParts) getPartsInfo(document.getElementById('answerCode').value,'2')
 				}
			}
		}
		loadAjax.send(null);
	}
}

var searchResults = null;
var perpage = 15
var featuredParts = new Array()

function getPartsInfo(searchKey,searchStyle)
{
	var parent = document.getElementById('items')
	parent.innerHTML = ""
	var loading = document.createElement('img')
	loading.className = 'loadinggif'
	loading.src = 'images/ajax-loader.gif'
	loading.alt = 'Your results are loading. Please wait.'
	parent.appendChild(loading)
	var skipSoldOut = document.getElementById('hideSoldOut').checked

	var sorter = document.getElementById('keystoneSorter')
	var sorterval = sorter.options[sorter.selectedIndex].value

  var loadAjax = ajaxRequester();

  if( loadAjax != null)
  {
		var strQueryString = 'index.cfm/event/keystoneGetPartsInfo/searchStyle/' + xmlencode(trim(searchStyle)) + '/searchKey/' + xmlencode(trim(searchKey)) + '/sortby/' + sorterval + '/skipSoldOut/' + skipSoldOut
		loadAjax.open("GET", strQueryString, true);
		loadAjax.onreadystatechange = function (aEvt) {
			if( loadAjax.readyState == 4)
			{ //The load is complete when readyState equals 4
				if( loadAjax.status != "200" &&  loadAjax.status != undefined)
				{
					alert('There was an error in retreiving the parts.')
				} else {
          var xmlDoc; 
          if(window.ActiveXObject)
          {
              //Internet Explorer
              xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
              xmlDoc.async = false;
              xmlDoc.loadXML( loadAjax.responseText);
          }
          else if(document.implementation && document.implementation.createDocument)
          {
              //Mozilla
              xmlDoc =  loadAjax.responseXML;
          }
					
					searchResults = xmlDoc
 					
					var header = document.createElement('p')
					header.className = 'pageHeader'
					header.innerHTML = 'Search Results'
					parent.appendChild(header)

					var parts = searchResults.documentElement.getElementsByTagName('Part')

					if(parts.length == 0)
					{
						var message = document.createElement('p')
						message.innerHTML = 'No Items Found'
						parent.appendChild(message)
					} else {
						
						document.getElementById('sorter').style.display = 'block'
						replaceInventory()
						displayItemsByPage(1)
						
					}
 				}
			}
		}
		loadAjax.send(null);
	}
}

function hideItems(xmlDocument)
{
	if (document.implementation && document.implementation.createDocument)
	{ 
		var newXML = document.implementation.createDocument("", "", null); 
	} else {
		var newXML = new ActiveXObject("MSXML2.DOMDocument"); 
	}
	var XMLroot = xmlDocument.documentElement.cloneNode(true)
	newXML.appendChild(XMLroot)
	
	$(newXML).find('Stock').each( function()
  {
		if($(this).text() == 0)
		{
			var target = this.parentNode
			target.parentNode.removeChild(target)
		}
  });
  return newXML
}

function resultValue(position, valuestr) {
    this.position = position;
    this.valuestr = valuestr;
}

function sortValuesAlpha(a,b)
{
	var x = a.valuestr.toLowerCase();
	var y = b.valuestr.toLowerCase();
	return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}

function sortValuesAlphaDesc(a,b)
{
	var x = a.valuestr.toLowerCase();
	var y = b.valuestr.toLowerCase();
	return ((x < y) ? 1 : ((x > y) ? -1 : 0));
}

function sortValuesNumeric(a,b)
{
	var x = Number(a.valuestr);
	var y = Number(b.valuestr);
	return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}

function sortValuesNumericDesc(a,b)
{
	var x = Number(a.valuestr);
	var y = Number(b.valuestr);
	return ((x < y) ? 1 : ((x > y) ? -1 : 0));
}

function sortXML(field,direction)
{
	if (document.implementation && document.implementation.createDocument)
	{ 
		var newXML = document.implementation.createDocument("", "", null); 
	} else {
		var newXML = new ActiveXObject("MSXML2.DOMDocument"); 
	}
	var newXMLDocEl = searchResults.documentElement.cloneNode(false)
	newXML.appendChild(newXMLDocEl)

	var parts = searchResults.documentElement.getElementsByTagName('Part')
	// replace stock numbers with correct inventory numbers
	
	
	var partlength = parts.length
	var sortArray = new Array();

	var i = 0;
	$(searchResults).find(field).each( function()
	{
		sortArray[i] = new resultValue(i, ((field != 'VendorName') ? Number($(this).text()) : $(this).text().toUpperCase()))
		i++
	});
	if(field != 'VendorName')
		(direction == 'asc') ? sortArray.sort(sortValuesNumeric) : sortArray.sort(sortValuesNumericDesc)
	else
		(direction == 'asc') ? sortArray.sort(sortValuesAlpha) : sortArray.sort(sortValuesAlphaDesc)
	
	for(var i = 0; i < sortArray.length; i++)
	{
		var newNode = parts[sortArray[i].position].cloneNode(true)
		newXMLDocEl.appendChild(newNode)
	}
	return newXML
}

function getSortInfo()
{
	var sortelement = document.getElementById('keystoneSorter')
	var sortstr = sortelement.options[sortelement.selectedIndex].value
	
	switch(sortstr)
	{
		case 'vendor':
			var a = 'VendorName'
			var b = 'asc'
			break;
		case 'vendor-desc':
			var a = 'VendorName'
			var b = 'desc'
			break;
		case 'price':
			var a = 'JobberPrice'
			var b = 'asc'
			break;
		case 'price-desc':
			var a = 'JobberPrice'
			var b = 'desc'
			break;
		case 'rank':
			var a = 'rank'
			var b = 'asc'
			break;
	} 
	return {field:a,direction:b}
}

function replaceInventory()
{
	// This function replaces the xml Stock value with inventory numbers from the right warehouses
	// It's commented out because it was deemed unnecessary due to the way drop shipping works.
	// Account shouldn't be limited by stock if it's drop shipped directly to customer.
	
	/*
	$(searchResults).find('Stock').each( function(intIndex)
  {
		if($(this).text() != 0)
		{
			var inventory = $(searchResults).find('Inventory')
			var east = $(inventory[intIndex]).find('EAST').text()
			var midwest = $(inventory[intIndex]).find('MIDWEST').text()
			$(this).empty()
			$(this).text((Number(east) + Number(midwest)))
		}
  });
	*/
}

function displayItemsByPage(page)
{

	// Get featured parts list that matches api returned parts
	var featuredItems = checkFeatured()

	// Sort the api returned results based on the sort by drop down
	var sortInfo = getSortInfo()
	var displayXML = sortXML(sortInfo.field,sortInfo.direction)

	// Hide the sold out items if the box is checked
	var hideSoldOut = document.getElementById('hideSoldOut').checked
	if(hideSoldOut)
	{
		var displayXML = hideItems(displayXML)
	}
	
	// Clear items div on page to replace with new content
	var parent = document.getElementById('items')
 	parent.innerHTML = ""
 	
 	// Get parts from sorted xml doc
	var parts = displayXML.documentElement.getElementsByTagName('Part')
	
	// Calculate pagination
	var partlength = parts.length
	var pages = Math.ceil(partlength / perpage)
	if(page > pages) page = pages
	if(page < 1) page = 1
	if(pages == 1)
	{
		var loopstart = 0
		var looptop = parts.length
	} else {
		if(page == pages)
		{
			var loopstart = (page - 1) * perpage
			var looptop = partlength
		} else {
			var loopstart = (page - 1) * perpage
			var looptop = page * perpage
		}
	}

	// create page Links
	
	if(pages != 1)
	{
		var pagediv = document.createElement('div')
		pagediv.className = 'itemPagination'
		for(var x = 1; x <= pages; x++)
		{
			var pagenum = document.createElement('div')
			pagenum.className = 'pageNum'
			if(x == page)
				pagenum.className = 'pageNum-c'
			else
				pagenum.onclick = new Function ("evt",'displayItemsByPage(' + x + ')')
			pagenum.innerHTML = x
			pagediv.appendChild(pagenum)
		}
		var cleardiv = document.createElement('div')
		cleardiv.style.clear = 'both'
		pagediv.appendChild(cleardiv)
		parent.appendChild(pagediv)
	}
	
	if(partlength == 0)
	{
		var noitems = document.createElement('p')
		noitems.innerHTML = 'No items were found'
		parent.appendChild(noitems)
	}

	// create featured items on the page
	
	loadFeatured(featuredItems)

	// create items on the page
	if(parts.length > 0)
	{
		for(var i = loopstart; i < looptop; i++)
		{
			// create container
			var rowletter = 'b'
			if(i % 2 == 1) rowletter = 'a'
			var row = document.createElement('div')
			row.className = 'prolistProduct' + rowletter
			
			// create image anchor tag
			var imglink = document.createElement('a')
			imglink.className = 'prolistimage2'
			
			// create image
			var xmlIntUrl = parts[i].getElementsByTagName('IntURL')
			var img = document.createElement('img')
			img.alt = 'Part Number: ' + parts[i].getElementsByTagName('TrimmedPartID')[0].childNodes[0].nodeValue
			var vendorCode = parts[i].getElementsByTagName('VenCode')[0].childNodes[0].nodeValue
			imglink.appendChild(img)
			if((xmlIntUrl.length > 0) && (xmlIntUrl[0].hasChildNodes()))
			{
				img.src = 'images/img-loader.gif'
				img.style.margin="auto"
				img.id = 'partimg_' + i
				var imageName = xmlIntUrl[0].childNodes[0].nodeValue
				keystoneImageUrl(vendorCode,imageName,img.id)
				imglink.href = 'images/keystone/' + vendorCode + '/large/' + imageName
			} else {
				img.style.width = '100px'
				img.src = 'images/ecommerce/template/11/noItemImageThumb.jpg'
				imglink.href = 'images/ecommerce/template/11/noItemImageThumb.jpg'
			}
			
			// create text div
			var namediv = document.createElement('div')
			namediv.className = 'prolistProductDetail2'
			
			// create title link
			var titleanchor = document.createElement('p')
			titleanchor.className = 'prolistProductName'
			titleanchor.innerHTML = parts[i].getElementsByTagName('VendorName')[0].childNodes[0].nodeValue + ' ' + parts[i].getElementsByTagName('LongDescription')[0].childNodes[0].nodeValue
			namediv.appendChild(titleanchor)
			
			// create product info
			var price = parts[i].getElementsByTagName('Retail')[0].childNodes[0].nodeValue
			var jobber = parts[i].getElementsByTagName('Jobber')[0].childNodes[0].nodeValue
			var stock = parts[i].getElementsByTagName('Stock')[0].childNodes[0].nodeValue
			var partnum = parts[i].getElementsByTagName('PartNumber')[0].childNodes[0].nodeValue
			var weight = parts[i].getElementsByTagName('Weight')[0].childNodes[0].nodeValue
			var ilength = parts[i].getElementsByTagName('Length')[0].childNodes[0].nodeValue
			var iwidth = parts[i].getElementsByTagName('Width')[0].childNodes[0].nodeValue
			var iheight = parts[i].getElementsByTagName('Height')[0].childNodes[0].nodeValue
			var fullpartnum = parts[i].getElementsByTagName('TrimmedPartID')[0].childNodes[0].nodeValue
	
			var detaildiv = document.createElement('div')
			detaildiv.className = 'keystoneitemdetails'
			namediv.appendChild(detaildiv)
			
			var columnA = document.createElement('div')
			columnA.className = 'column'
			detaildiv.appendChild(columnA)
	
			var pprice = document.createElement('p')
			var spanprice = document.createElement('span')
			spanprice.innerHTML = 'MSRP:'
			pprice.appendChild(spanprice)
			pprice.innerHTML = pprice.innerHTML + price
			columnA.appendChild(pprice)
	
			var pvendor = document.createElement('p')
			var spanvendor = document.createElement('span')
			spanvendor.innerHTML = 'Vendor:'
			pvendor.appendChild(spanvendor)
			pvendor.innerHTML = pvendor.innerHTML + parts[i].getElementsByTagName('VendorName')[0].childNodes[0].nodeValue
			columnA.appendChild(pvendor)
	
			var columnB = document.createElement('div')
			columnB.className = 'column'
			detaildiv.appendChild(columnB)
	
			var ppart = document.createElement('p')
			var spanpart = document.createElement('span')
			spanpart.innerHTML = 'Part Number:'
			ppart.appendChild(spanpart)
			ppart.innerHTML = ppart.innerHTML + partnum
			columnB.appendChild(ppart)
	
			var pdim = document.createElement('p')
			var spandim = document.createElement('span')
			spandim.innerHTML = 'Dimensions:'
			pdim.appendChild(spandim)
			pdim.innerHTML = pdim.innerHTML + ilength + '" x ' + iwidth + '" x ' + iheight + '"'
			columnB.appendChild(pdim)
	
			var columnC = document.createElement('div')
			columnC.className = 'column'
			detaildiv.appendChild(columnC)
	
			if(Number(stock) > 0)
			{
				var pyourPrice = document.createElement('p')
				pyourPrice.className = 'yourPrice'
				var spanYP = document.createElement('span')
				spanYP.className = 'yourPriceSpan'
				spanYP.innerHTML = 'Your Price:'
				pyourPrice.appendChild(spanYP)
				pyourPrice.innerHTML = pyourPrice.innerHTML + jobber
				columnC.appendChild(pyourPrice)
	
				var buynow = document.createElement('img')
				buynow.className = 'keystoneBuy'
				buynow.id = 'buy_' + parts[i].getElementsByTagName('TrimmedPartID')[0].childNodes[0].nodeValue
				buynow.src = 'images/ecommerce/template/11/buynow.gif'
				buynow.onclick = new Function ('evt','addItemToCart(' + i + ')')
				columnC.appendChild(buynow)
				
				var qtyinput = document.createElement('input')
				qtyinput.type = 'text'
				qtyinput.id = 'qty_' + i
				qtyinput.name = parts[i].getElementsByTagName('TrimmedPartID')[0].childNodes[0].nodeValue
				qtyinput.value = '1'
				qtyinput.className = 'keystoneItemQty'
				columnC.appendChild(qtyinput)
	
				var nameinput = document.createElement('input')
				nameinput.type = 'hidden'
				nameinput.id = 'name_' + i
				nameinput.value = parts[i].getElementsByTagName('LongDescription')[0].childNodes[0].nodeValue
				columnC.appendChild(nameinput)
	
				var skuinput = document.createElement('input')
				skuinput.type = 'hidden'
				skuinput.id = 'sku_' + i
				skuinput.value = parts[i].getElementsByTagName('SKUNumber')[0].childNodes[0].nodeValue
				columnC.appendChild(skuinput)
	
				var partnuminput = document.createElement('input')
				partnuminput.type = 'hidden'
				partnuminput.id = 'partnumber_' + i
				partnuminput.value = fullpartnum
				columnC.appendChild(partnuminput)
	
				var weightinput = document.createElement('input')
				weightinput.type = 'hidden'
				weightinput.id = 'weight_' + i
				weightinput.value = weight
				columnC.appendChild(weightinput)
	
				var jobberinput = document.createElement('input')
				jobberinput.type = 'hidden'
				jobberinput.id = 'price_' + i
				jobberinput.value = jobber
				columnC.appendChild(jobberinput)
	
				var msrpinput = document.createElement('input')
				msrpinput.type = 'hidden'
				msrpinput.id = 'msrp_' + i
				msrpinput.value = price
				columnC.appendChild(msrpinput)
	
				var codeinput = document.createElement('input')
				codeinput.type = 'hidden'
				codeinput.id = 'code_' + i
				codeinput.value = partnum
				columnC.appendChild(codeinput)
	
				var vendorinput = document.createElement('input')
				vendorinput.type = 'hidden'
				vendorinput.id = 'vendor_' + i
				vendorinput.value = 'KEYSTONE'
				columnC.appendChild(vendorinput)
	
				var stockinput = document.createElement('input')
				stockinput.type = 'hidden'
				stockinput.id = 'stock_' + i
				stockinput.value = stock
				columnC.appendChild(stockinput)
	
				var qtylbl = document.createElement('label')
				qtylbl.value = parts[i].getElementsByTagName('TrimmedPartID')[0].childNodes[0].nodeValue
				qtylbl.innerHTML = 'Qty:'
				columnC.appendChild(qtylbl)
	
			} else {
				var nostock = document.createElement('img')
				nostock.className = 'keystoneOutofStock'
				nostock.src = 'images/ecommerce/template/11/outofstock.gif'
				columnC.appendChild(nostock)
			}
											
			// create clearing div
			var clearer = document.createElement('div')
			clearer.style.clear = 'both'
			
			// append all items to screen
			row.appendChild(imglink)
			row.appendChild(namediv)
			row.appendChild(clearer)
			row.style.display = 'none'
			parent.appendChild(row)
			$(row).fadeIn()
		}
	}
	if(pages != 1)
	{
		var pagediv = document.createElement('div')
		pagediv.className = 'itemPagination'
		for(var x = 1; x <= pages; x++)
		{
			var pagenum = document.createElement('div')
			pagenum.className = 'pageNum'
			if(x == page)
				pagenum.className = 'pageNum-c'
			else
				pagenum.onclick = new Function ("evt",'displayItemsByPage(' + x + ')')
			pagenum.innerHTML = x
			pagediv.appendChild(pagenum)
		}
		var cleardiv = document.createElement('div')
		cleardiv.style.clear = 'both'
		pagediv.appendChild(cleardiv)
		parent.appendChild(pagediv)
	}
}

function checkSoldOut(obj)
{
	parttype = document.getElementById('keystonePartType')
	isselected = parttype.options[parttype.selectedIndex].value
	if(isselected != '') displayItemsByPage(1)//getPartsInfo(document.getElementById('answerCode').value,'2')
}

function xmlencode(string) 
{
    return string.replace(/\&/g,'&'+'amp;').replace(/</g,'&'+'lt;')
        .replace(/>/g,'&'+'gt;').replace(/\'/g,'&'+'apos;').replace(/\"/g,'&'+'quot;');
}

function trim(str) {
    return str.replace(/^\s+|\s+$/g, '');
}

function keystoneImageUrl(vendorCode,imageName,imgid)
{
  var loadAjax = ajaxRequester();

  if( loadAjax != null)
  {
		var strQueryString = 'index.cfm/event/keystoneGetImage/vendorCode/' + xmlencode(trim(vendorCode)) + '/imageName/' + xmlencode(trim(imageName))
		loadAjax.open("GET", strQueryString, true);
		loadAjax.onreadystatechange = function (aEvt) {
			if( loadAjax.readyState == 4)
			{ //The load is complete when readyState equals 4
				if( loadAjax.status != "200" &&  loadAjax.status != undefined)
				{
					// There was an error
				} else {
					var oldimg = document.getElementById(imgid)
					var parent = oldimg.parentNode
					var imgsrc = trim(loadAjax.responseText)
					var newimg = document.createElement('img')
					newimg.alt = oldimg.alt
					newimg.style.width = '100%'
          newimg.style.display = 'none'
          newimg.style.cursor = 'pointer'
          newimg.src = imgsrc
          parent.appendChild(newimg)
					parent.removeChild(oldimg)
					$(newimg).fadeIn()
					$("a.prolistimage2").fancybox()
 				}
			}
		}
		loadAjax.send(null);
	}
}

function getFeaturedParts()
{
  var loadAjax = ajaxRequester();

  if( loadAjax != null)
  {
		var strQueryString = 'index.cfm/event/keystoneGetFeatured'
		loadAjax.open("GET", strQueryString, true);
		loadAjax.onreadystatechange = function (aEvt) {
			if( loadAjax.readyState == 4)
			{ //The load is complete when readyState equals 4
				if( loadAjax.status != "200" &&  loadAjax.status != undefined)
				{
					alert('There was an error')
				} else {
          var xmlDoc; 
          if(window.ActiveXObject)
          {
              //Internet Explorer
              xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
              xmlDoc.async = false;
              xmlDoc.loadXML( loadAjax.responseText);
          }
          else if(document.implementation && document.implementation.createDocument)
          {
              //Mozilla
              xmlDoc =  loadAjax.responseXML;
          }
					
					var parts = xmlDoc.documentElement.getElementsByTagName('Part')
					for(var i = 0; i < parts.length; i++)
					{
						featuredParts[i] = $(parts[i]).find('partNum').text()
					}
 				}
			}
		}
		loadAjax.send(null);
	}
}

function checkFeatured()
{
	var parts = searchResults.documentElement.getElementsByTagName('Part')

	if (document.implementation && document.implementation.createDocument)
	{ 
		var newXML = document.implementation.createDocument("", "", null); 
	} else {
		var newXML = new ActiveXObject("MSXML2.DOMDocument"); 
	}
	var newXMLDocEl = searchResults.documentElement.cloneNode(false)
	newXML.appendChild(newXMLDocEl)

	for(var i = 0; i < parts.length; i++)
	{
		var partNum = $(parts[i]).find('TrimmedPartID').text()
		for(var x = 0; x < featuredParts.length; x++)
		{
			if(partNum == featuredParts[x])
			{
				var newNode = parts[i].cloneNode(true)
				newXMLDocEl.appendChild(newNode)
			}
		}
	}
	return newXML
}

function loadFeatured(xmlDocument)
{
	var parent = document.getElementById('items')
	var featuredXML = hideItems(xmlDocument)
	var featuredParts = featuredXML.documentElement.getElementsByTagName('Part')
	var indexArray = new Array()
	for(var i = 0; i < featuredParts.length; i++)
	{
		indexArray[i] = i
	}

	if(featuredParts.length > 3)
		looptop = 3
	else
		looptop = featuredParts.length

	if(looptop > 0)
	{
		var featuredHeader = document.createElement('p')
		var featuredFooter = document.createElement('p')
		featuredHeader.className = 'prolistHeader'
		featuredFooter.className = 'prolistHeader'
		featuredHeader.innerHTML = 'Featured Products in this Category'
		featuredFooter.innerHTML = 'Search Results'
		parent.appendChild(featuredHeader)
		
		for(var x = 0; x < looptop; x++)
		{
			var i = indexArray[(Math.floor(Math.random()* (indexArray.length - 1)))]

			// create container
			var row = document.createElement('div')
			row.className = 'prolistFeaturedProduct'
			
			// create image anchor tag
			var imglink = document.createElement('a')
			imglink.className = 'prolistimage2'
			
			// create image
			var xmlIntUrl = featuredParts[i].getElementsByTagName('IntURL')
			var img = document.createElement('img')
			img.alt = 'Part Number: ' + featuredParts[i].getElementsByTagName('TrimmedPartID')[0].childNodes[0].nodeValue
			var vendorCode = featuredParts[i].getElementsByTagName('VenCode')[0].childNodes[0].nodeValue
			imglink.appendChild(img)
			if((xmlIntUrl.length > 0) && (xmlIntUrl[0].hasChildNodes()))
			{
				img.src = 'images/img-loader.gif'
				img.style.margin="auto"
				img.id = 'featuredPartimg_' + (x + 1)
				var imageName = xmlIntUrl[0].childNodes[0].nodeValue
				keystoneImageUrl(vendorCode,imageName,img.id)
				imglink.href = 'images/keystone/' + vendorCode + '/large/' + imageName
			} else {
				img.style.width = '100px'
				img.src = 'images/ecommerce/template/11/noItemImageThumb.jpg'
				imglink.href = 'images/ecommerce/template/11/noItemImageThumb.jpg'
			}
			
			// create text div
			var namediv = document.createElement('div')
			namediv.className = 'prolistProductDetail2'
			
			// create title link
			var titleanchor = document.createElement('p')
			titleanchor.className = 'prolistProductName'
			titleanchor.innerHTML = featuredParts[i].getElementsByTagName('VendorName')[0].childNodes[0].nodeValue + ' ' + featuredParts[i].getElementsByTagName('LongDescription')[0].childNodes[0].nodeValue
			namediv.appendChild(titleanchor)
			
			// create product info
			var price = featuredParts[i].getElementsByTagName('Retail')[0].childNodes[0].nodeValue
			var jobber = featuredParts[i].getElementsByTagName('Jobber')[0].childNodes[0].nodeValue
			var stock = featuredParts[i].getElementsByTagName('Stock')[0].childNodes[0].nodeValue
			var partnum = featuredParts[i].getElementsByTagName('PartNumber')[0].childNodes[0].nodeValue
			var fullpartnum = featuredParts[i].getElementsByTagName('TrimmedPartID')[0].childNodes[0].nodeValue
			var weight = featuredParts[i].getElementsByTagName('Weight')[0].childNodes[0].nodeValue
			var ilength = featuredParts[i].getElementsByTagName('Length')[0].childNodes[0].nodeValue
			var iwidth = featuredParts[i].getElementsByTagName('Width')[0].childNodes[0].nodeValue
			var iheight = featuredParts[i].getElementsByTagName('Height')[0].childNodes[0].nodeValue
	
			var detaildiv = document.createElement('div')
			detaildiv.className = 'keystoneitemdetails'
			namediv.appendChild(detaildiv)
			
			var columnA = document.createElement('div')
			columnA.className = 'column'
			detaildiv.appendChild(columnA)
	
			var pprice = document.createElement('p')
			var spanprice = document.createElement('span')
			spanprice.innerHTML = 'MSRP:'
			pprice.appendChild(spanprice)
			pprice.innerHTML = pprice.innerHTML + price
			columnA.appendChild(pprice)
	
			var pvendor = document.createElement('p')
			var spanvendor = document.createElement('span')
			spanvendor.innerHTML = 'Vendor:'
			pvendor.appendChild(spanvendor)
			pvendor.innerHTML = pvendor.innerHTML + featuredParts[i].getElementsByTagName('VendorName')[0].childNodes[0].nodeValue
			columnA.appendChild(pvendor)
	
			var columnB = document.createElement('div')
			columnB.className = 'column'
			detaildiv.appendChild(columnB)
	
			var ppart = document.createElement('p')
			var spanpart = document.createElement('span')
			spanpart.innerHTML = 'Part Number:'
			ppart.appendChild(spanpart)
			ppart.innerHTML = ppart.innerHTML + partnum
			columnB.appendChild(ppart)
	
			var pdim = document.createElement('p')
			var spandim = document.createElement('span')
			spandim.innerHTML = 'Dimensions:'
			pdim.appendChild(spandim)
			pdim.innerHTML = pdim.innerHTML + ilength + '" x ' + iwidth + '" x ' + iheight + '"'
			columnB.appendChild(pdim)
	
			var columnC = document.createElement('div')
			columnC.className = 'column'
			detaildiv.appendChild(columnC)
	
			var pyourPrice = document.createElement('p')
			pyourPrice.className = 'yourPrice'
			var spanYP = document.createElement('span')
			spanYP.className = 'yourPriceSpan'
			spanYP.innerHTML = 'Your Price:'
			pyourPrice.appendChild(spanYP)
			pyourPrice.innerHTML = pyourPrice.innerHTML + jobber
			columnC.appendChild(pyourPrice)

			var buynow = document.createElement('img')
			buynow.className = 'keystoneBuy'
			buynow.id = 'buy_' + featuredParts[i].getElementsByTagName('TrimmedPartID')[0].childNodes[0].nodeValue
			buynow.src = 'images/ecommerce/template/11/buynow.gif'
			buynow.onclick = new Function ('evt','addItemToCart(-' + (x + 1) + ')')
			columnC.appendChild(buynow)
			
			var qtyinput = document.createElement('input')
			qtyinput.type = 'text'
			qtyinput.id = 'qty_-' + (x + 1)
			qtyinput.name = featuredParts[i].getElementsByTagName('TrimmedPartID')[0].childNodes[0].nodeValue
			qtyinput.value = '1'
			qtyinput.className = 'keystoneItemQty'
			columnC.appendChild(qtyinput)

			var nameinput = document.createElement('input')
			nameinput.type = 'hidden'
			nameinput.id = 'name_-' + (x + 1)
			nameinput.value = featuredParts[i].getElementsByTagName('LongDescription')[0].childNodes[0].nodeValue
			columnC.appendChild(nameinput)

			var skuinput = document.createElement('input')
			skuinput.type = 'hidden'
			skuinput.id = 'sku_-' + (x + 1)
			skuinput.value = featuredParts[i].getElementsByTagName('SKUNumber')[0].childNodes[0].nodeValue
			columnC.appendChild(skuinput)

			var partnuminput = document.createElement('input')
			partnuminput.type = 'hidden'
			partnuminput.id = 'partnumber_-' + (x + 1)
			partnuminput.value = fullpartnum
			columnC.appendChild(partnuminput)

			var weightinput = document.createElement('input')
			weightinput.type = 'hidden'
			weightinput.id = 'weight_-' + (x + 1)
			weightinput.value = weight
			columnC.appendChild(weightinput)

			var jobberinput = document.createElement('input')
			jobberinput.type = 'hidden'
			jobberinput.id = 'price_-' + (x + 1)
			jobberinput.value = jobber
			columnC.appendChild(jobberinput)

			var msrpinput = document.createElement('input')
			msrpinput.type = 'hidden'
			msrpinput.id = 'msrp_-' + (x + 1)
			msrpinput.value = price
			columnC.appendChild(msrpinput)

			var codeinput = document.createElement('input')
			codeinput.type = 'hidden'
			codeinput.id = 'code_-' + (x + 1)
			codeinput.value = partnum
			columnC.appendChild(codeinput)

			var vendorinput = document.createElement('input')
			vendorinput.type = 'hidden'
			vendorinput.id = 'vendor_-' + (x + 1)
			vendorinput.value = 'KEYSTONE'
			columnC.appendChild(vendorinput)

			var stockinput = document.createElement('input')
			stockinput.type = 'hidden'
			stockinput.id = 'stock_-' + (x + 1)
			stockinput.value = stock
			columnC.appendChild(stockinput)

			var qtylbl = document.createElement('label')
			qtylbl.value = featuredParts[i].getElementsByTagName('TrimmedPartID')[0].childNodes[0].nodeValue
			qtylbl.innerHTML = 'Qty:'
			columnC.appendChild(qtylbl)

			// create clearing div
			var clearer = document.createElement('div')
			clearer.style.clear = 'both'
			
			// append all items to screen
			row.appendChild(imglink)
			row.appendChild(namediv)
			row.appendChild(clearer)
			row.style.display = 'none'
			parent.appendChild(row)
			$(row).fadeIn()
			
			indexArray.splice(i,1)
		}
		parent.appendChild(featuredFooter)
	}
}

function searchKeystone(searchStr)
{
	getPartsInfo(searchStr,'3')
}