/** 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.top = $(searchBox).position().top + 10 + $('#header').height() + $(searchBox).height() + "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["posted_data[substring]"];
    } else if (document._search !== undefined) {
        searchBox = document._search.elements.q;
    }
    addResultsDiv();
    watchSearchBox();
}
addEvent(window, "load", pInit);

