// $Id: helpers.js 30 2010-01-30 05:01:48Z tboronczyk $

// getElementById convenience function
function $(id) {
    return document.getElementById(id);
}

// convenience function to get elements by classname
function $$(search) {
    var classElements = new Array();
    var els = document.getElementsByTagName("*");
    var pattern = new RegExp("(^|\\s)" + search + "(\\s|$)");

    for (var i = 0, j = 0; i < els.length; i++) {
        if (pattern.test(els[i].className)) {
            classElements[j] = els[i];
            j++;
        }
    }

    return classElements;
}

// perform a request using the XMLHttpRequest object
function doXMLHttpRequest(method, url, data, callback) {
    // obtain an XmlHttpRequest object
    var http = null;
    if (typeof XMLHttpRequest != "undefined") {
        http = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        var vers = [
            "Microsoft.XmlHttp",
            "MSXML2.XmlHttp",
            "MSXML2.XmlHttp.3.0",
            "MSXML2.XmlHttp.4.0",
            "MSXML2.XmlHttp.5.0"
        ];

        for (var i in vers) {
            try {
                http = new ActiveXObject(vers[i]);
                break;
            }
            catch (e) { }
        }
    }

    switch (method) {
        // perform GET request
        case "GET":
            http.open(method, url, true);
            http.setRequestHeader("HTTP_X_REQUESTED_WITH", "XMLHttpRequest");
            http.onreadystatechange = function () { callback(http); };
            http.send(null);
            break;

        // perform POST request
        case "POST":
            http.open(method, url, true);
            http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            http.setRequestHeader("Content-Length", data.length);
            http.setRequestHeader("Connection", "close");
            http.setRequestHeader("HTTP_X_REQUESTED_WITH", "XMLHttpRequest");
            http.onreadystatechange = function () { callback(http); };
            http.send(data);
            break;

        // perform other request methods here...
    }
}

// show or hide the page's loading icon
function showLoading(state) {
    $("loadingIcon").style.display = (state) ? "" : "none";
}
