var $ = {
    
    //generates a new XMLHttpRequest object
    getXmlHttpRequestObject : function () {
        //from javascriptkit.com
        var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
        if (window.ActiveXObject){ //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
            for (var i = 0; i < activexmodes.length; i++){
                try{
                    return new ActiveXObject(activexmodes[i])
                }
                catch(e){
                    //suppress error
                }
            }
        }
        else if (window.XMLHttpRequest) {// if Mozilla, Safari etc
            return new XMLHttpRequest();
        }
        else {
            return false;
        }
    },
    
    tagMe : function (query) {
        if (/^(a|abbr|acronym|address|applet|area|b|base|basefont|bdo|big|blockquote|body|br|button|caption|center|cite|code|col|colgroup|dd|del|dfn|dir|div|dl|dt|em|fieldset|font|form|frame|frameset|h[1-6]|head|hr|html|i|iframe|img|input|ins|isindex|kbd|label|legend|li|link|map|menu|meta|noframes|noscript|object|ol|optgroup|option|p|param|pre|q|s|samp|script|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|title|tr|tt|u|ul|var|xmp)$/i.test(query)) {
            return document.getElementsByTagName(query);
        }
        else {
            return document.getElementById(query);
        }
    },
    
    makeAnchor : function (hrf, idn, css, txt) {
        var newa = document.createElement("a");
            newa.href = hrf;
            if (idn) newa.setAttribute("id", idn);
            if (css) newa.className = css;
            if (txt) {
                if (typeof txt == 'string') {
                    newa.innerHTML = txt;
                }
                else {
                    for (var p = 0; p < txt.length; p++) {
                        newa.appendChild(txt[p]);
                    }
                }
            }
        return newa;
    },
    
    makeDiv : function (idn, css, els) {
        var newdiv = document.createElement("div");
            if (idn) newdiv.setAttribute("id", idn);
            if (css) newdiv.className = css;
            if (els) {
                for (var p = 0; p < els.length; p++) {
                    newdiv.appendChild(els[p]);
                }
            }
        return newdiv;
    },
    
    makeP : function (txt, idn, css) {
        var newp = document.createElement("p");
            if (typeof txt == 'string'){
                newp.innerHTML = txt;
            }
            else {
                newp.appendChild(txt);
            }
            if (idn) newp.setAttribute("id", idn);
            if (css) newp.className = css;
        return newp;
    },
    
    makeSpan : function (txt, idn, css) {
        var newspan = document.createElement("span");
            newspan.innerHTML = txt;
            if (idn) newspan.setAttribute("id", idn);
            if (css) newspan.className = css;
        return newspan;
    },
    
    makeHR : function (css) {
        var newhr = document.createElement("hr");
            if (css) newhr.className = css;
        return newhr;
    },
    
    makeHdr : function (size, txt, idn, css) {
        try {
            var newhdr = document.createElement("h" + size);
                newhdr.innerHTML = txt;
                if (idn) newhdr.setAttribute("id", idn);
                if (css) newhdr.className = css;
        }
        catch (e) {
            return null;
        }
        return newhdr;
    },
    
    makeImg : function (imgsrc, alttxt, idn, css) {
        var newimg = document.createElement("img");
            newimg.src = imgsrc;
            newimg.alt = alttxt;
            newimg.setAttribute("title", alttxt);
            if (idn) newimg.setAttribute("id", idn);
            if (css) newimg.className = css;
        return newimg;
    },
    
    //removes all child elements from the given div or id
    purge : function (el) {
        if (typeof el == "string") {
            el = document.getElementById(el);
        }
        while (el.firstChild) el.removeChild(el.firstChild);
    }
    
}

