/** Public source code for mini ajax functions snipped from http://www.bigbold.com/snippets/posts/show/2025 **/

function $(e){if(typeof e=='string')e=document.getElementById(e);return e};
function collect(a,f){var n=[];for(var i=0;i<a.length;i++){var v=f(a[i]);if(v!=null)n.push(v)}return n};

ajax={};
ajax.x=function(){try{return new ActiveXObject('Msxml2.XMLHTTP')}catch(e){try{return new ActiveXObject('Microsoft.XMLHTTP')}catch(e){return new XMLHttpRequest()}}};
ajax.serialize=function(f){var g=function(n){return f.getElementsByTagName(n)};var nv=function(e){if(e.name)return encodeURIComponent(e.name)+'='+encodeURIComponent(e.value);else return ''};var i=collect(g('input'),function(i){if((i.type!='radio'&&i.type!='checkbox')||i.checked)return nv(i)});var s=collect(g('select'),nv);var t=collect(g('textarea'),nv);return i.concat(s).concat(t).join('&');};
ajax.send=function(u,f,m,a){var x=ajax.x();x.open(m,u,true);x.onreadystatechange=function(){if(x.readyState==4)f(x.responseText)};if(m=='POST')x.setRequestHeader('Content-type','application/x-www-form-urlencoded');x.send(a)};
ajax.get=function(url,func){ajax.send(url,func,'GET')};
ajax.gets=function(url){var x=ajax.x();x.open('GET',url,false);x.send(null);return x.responseText};
ajax.post=function(url,func,args){ajax.send(url,func,'POST',args)};
ajax.update=function(url,elm){var e=$(elm);var f=function(r){e.innerHTML=r};ajax.get(url,f)};
ajax.submit=function(url,elm,frm){var e=$(elm);var f=function(r){e.innerHTML=r};ajax.post(url,f,ajax.serialize(frm))};

function watchSearchBox() {
	addEvent(searchBox, "keyup", execSearch);
	addEvent(searchBox, "focus", execSearch);
	addEvent(searchBox, "blur",  killSearch);
}

function addResultsDiv() {
	d1 = document.createElement("div");
	d1.id = "searchResultsDiv";
	d1.style.display = "none";
	d1.style.position = "absolute";
	d1.style.zIndex = "1000";
	d1.style.top = (getAbsY(searchBox) + 2 + searchBox.offsetTop + searchBox.clientHeight) + "px";
	d1.style.left = getAbsX(searchBox) + "px";
	if (dropDownAlignment == "right") {
		d1.style.marginLeft = "-" + (dropDownWidth - searchBox.offsetWidth);
	}
	d1.style.width = dropDownWidth + "px";
	document.body.appendChild(d1);
}

function killSearch() {
	$("searchResultsDiv").style.display = "none";
}

function execSearch() {
	if (searchBox.value != "") {
		getResults(searchBox.value);
	} else {
		killSearch();
	}
}

function getResults(v) {
	ajax.get(searchPath + "fts_instant_product_search.php?__p=" + v, updateSearchResults);
}

function setSearchValue(v) {
	location.href = searchPath + "product.php?productid=" + v;
	killSearch();
}

function updateSearchResults(r) {
	products = r.split("\n");
	resultCount = 0;
	o = $("searchResultsDiv");
	str = "";
	limit = (products.length > productLimit) ? productLimit : products.length;
	for (i = 0 ; i < limit ; i++) {
		if (products[i] != "") {
			resultCount++;
			tmp = products[i].split("::", 3);
			str += "<div class=\"ftsSearchResult\" style=\"cursor: pointer; text-align: left; width: 99%\" onMouseDown=\"setSearchValue(" + tmp[0] + ");\" onMouseOver=\"this.className='ftsSearchResultSelected';\" onMouseOut=\"this.className='ftsSearchResult';\">" + tmp[1] + "</div>\n";
		}
	}
	if (products.length > productLimit) {
			str += "<div class=\"ftsSearchResult\" style=\"text-align: left; width: 99%\" onMouseDown=\"document.productsearchform.submit();\" style=\"cursor: pointer\" onMouseOver=\"this.className='ftsSearchResultSelected';\" onMouseOut=\"this.className='ftsSearchResult';\">More results...</div>\n";
	}
	o.innerHTML = str;
	if (resultCount > 0 && !(resultCount == 1 && products[0].toLowerCase() == searchBox.value.toLowerCase())) {
		o.style.display = "block";
	} else {
		killSearch();
	}
}

function getAbsX(el) {
	return (el.x) ? el.x : getAbsPos(el,"Left");
}

function getAbsY(el) {
	return (el.y) ? el.y : getAbsPos(el,"Top");
}

function getAbsPos(el,which) {
 iPos = 0;
 while (el != null) {
  iPos += el["offset" + which];
  el = el.offsetParent;
 }
 return iPos;
}

function pInit() {
	searchBox = document.productsearchform.elements["posted_data[substring]"];
	addResultsDiv();
	watchSearchBox();
}

function addEvent(o, e, f) {
	if (o.addEventListener) {
		o.addEventListener(e, f, true);
		return true;
	} else if (o.attachEvent) {
		o.attachEvent('on' + e, f);
		return true;
	} else {
		return false;
	}
}

var searchBox = null;

addEvent(window, "load", pInit);
