/** Public source code for mini ajax functions snipped from http://www.bigbold.com/snippets/posts/show/2025 **/

var searchBox = null;
var fts_ajax = {};
var fts_active_search = null;

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;
}

fts_ajax.x = function() {
	try {
		return new ActiveXObject("Msxml2.XMLHTTP");
	} catch(ex1) {
		try {
			return new ActiveXObject("Microsoft.XMLHTTP");
		} catch(ex2) {
			return new XMLHttpRequest();
		}
	}
};

fts_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("&");
	};
};

fts_ajax.send = function(u, f, m, a) {
	if (fts_active_search !== undefined && fts_active_search != null) {
		fts_active_search.abort();
		fts_active_search = null;
	}
	fts_active_search = fts_ajax.x();
	fts_active_search.open(m, u, true);
	fts_active_search.onreadystatechange = function() {
		if (fts_active_search.readyState == 4) {
			f(fts_active_search.responseText);
		}
	};
	if (m == "POST") {
		fts_active_search.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	}
	fts_active_search.send(a);
};

fts_ajax.get = function(url, func) {
	fts_ajax.send(url, func, "GET");
};

fts_ajax.post = function(url, func, args) {
	fts_ajax.send(url, func, "POST", args);
};

fts_ajax.update = function(url, elm) {
	var e = $$$$(elm);
	var f = function(r) {
		e.innerHTML = r;
	};
	fts_ajax.get(url, f);
};

fts_ajax.submit = function(url, elm, frm) {
	var e = $$$$(elm);
	var f = function(r) {
		e.innerHTML = r;
	};
	fts_ajax.post(url, f, fts_ajax.serialize(frm));
};

function getAbsPos(el,which) {
 var iPos = 0;
 while (el !== null) {
  iPos += el["offset" + which];
  el = el.offsetParent;
 }
 return iPos;
}

function getAbsX(el) {
	return el.x ? el.x : getAbsPos(el,"Left");
}

function getAbsY(el) {
	return el.y ? el.y : getAbsPos(el,"Top");
}

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;
	}
}

function killSearch() {
	$$$$("searchResultsDiv").style.display = "none";
}

function addResultsDiv() {
	var 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) + "px";
	}
	d1.style.width = dropDownWidth + "px";
	document.body.appendChild(d1);
}

function setSearchValue(v) {
	location.href = searchPath + "product.php?productid=" + v;
	killSearch();
}

function updateSearchResults(r) {
	fts_active_search = null;
	var products = r.split("\n");
	var resultCount = 0;
	var o = $$$$("searchResultsDiv");
	var str = "<table cellpadding=\"0\" cellspacing=\"0\">";
	var limit = (products.length > productLimit) ? productLimit : products.length;
	for (var i = 0 ; i < limit ; i++) {
		if (products[i] !== "") {
			resultCount++;
			var tmp = products[i].split("::", 3);
			str += "<tr class=\"ftsSearchResult\" onMouseDown=\"setSearchValue(" + tmp[0] + ");\" style=\"; cursor: pointer\" onMouseOver=\"this.className='ftsSearchResultSelected';\" onMouseOut=\"this.className='ftsSearchResult';\">";
			str += "<td style=\"text-align: left;\"><img src=\"" + tmp[1] + "\" border=\"0\"></td>";
			str += "<td style=\"text-align: left;\" width=\"100%\">" + tmp[2] + "</td></tr>\n";
		}
	}
	if (products.length > productLimit) {
			var formName = "";
			if (document.productsearchform !== undefined) {
				formName = "document.productsearchform";
			} else if (document._search !== undefined) {
				formName = "document._search";
			}
			str += "<tr class=\"ftsSearchResult\" onMouseDown=\"" + formName + ".submit();\" style=\"cursor: pointer\" onMouseOver=\"this.className='ftsSearchResultSelected';\" onMouseOut=\"this.className='ftsSearchResult';\">";
			str += "<td colspan=\"2\">More results...</td></tr>\n";
	}
	str += "</table>";
	o.innerHTML = str;
	if (resultCount > 0 && !(resultCount == 1 && products[0].toLowerCase() == searchBox.value.toLowerCase())) {
		o.style.display = "block";
	} else {
		killSearch();
	}
}

function getResults(v) {
	fts_ajax.get(searchPath + "fts_instant_product_search.php?__p=" + v, updateSearchResults);
}

function execSearch() {
	if (searchBox.value !== "") {
		getResults(searchBox.value);
	} else {
		killSearch();
	}
}

function watchSearchBox() {
	addEvent(searchBox, "keyup", execSearch);
	addEvent(searchBox, "focus", execSearch);
	addEvent(searchBox, "blur",  killSearch);
}

function pInit() {
	if (document.productsearchform !== undefined) {
		searchBox = document.productsearchform.elements["substring"];
	} else if (document._search !== undefined) {
		searchBox = document._search.elements.q;
	}
	addResultsDiv();
	watchSearchBox();
}

addEvent(window, "load", pInit);

