var he = {
    get : function (e) {
        if (typeof e === "object") {
            return e;
        } else if (typeof e === "string") {
            if (e === "body") {
                return document.body;
            } else {
                return document.getElementById(e);
            }
        } else {
			return false;
        }
    },
    getEs : function (tn) {
        return document.getElementsByTagName(tn);
    },
    create : function (tn, id, att, pos) {
        if (!this.get(id)) {
            var nt = document.createElement(tn);
            var t = document.body;
            if (id) { 
                nt.id = id; 
            }
            if (att) {
                if (typeof att === "object") {
                    t = att;
                } else if (typeof att === "string") {
                    t = document.getElementById(att);
                }
            }
            this.add(nt, t, pos);
        }
    },
    add : function (nn, pn, pos) {
        var n = this.get(nn);
        var p = this.get(pn);
		
        if (!pos || typeof pos === "string" || typeof pos !== "number") {
            if (!pos || pos !== "first") {
                pos = "last";
            }
        }
		
        if (pos === "first" || pos === 0) {
            p.insertBefore(n, p.firstChild);
        } else if (pos === "last" || !isNaN(pos) || pos >= p.childNodes.length) {
            p.appendChild(n);
        } else {
            p.insertBefore(n, p.childNodes[pos]);
        }
    },
    write : function (str, e, w) {
        if (this.get(e)) {
            if (w && w === "add") {
                this.get(e).innerHTML += str;
            } else {
                this.get(e).innerHTML = str;
            }
        }
    },
    getClass : function (cl, e) {
        var oc = he.get(e).className;
        var re = new RegExp("(^|\\s)(" + cl + ")(\\s|$)","g");
        return oc.match(re);
    },
    addClass : function (nc, e) {
        var oc = this.get(e).className;
        var re = new RegExp("(^|\\s)(" + nc + ")(\\s|$)","g");
        if (!oc) {
            this.get(e).className = nc;
        } else if (oc && !oc.match(re)) {
            this.get(e).className = oc + " " + nc;
        }
    },
    removeClass : function (nc, e) {
        var oc = this.get(e).className;
        var re = new RegExp("(^|\\s)(" + nc + ")(\\s|$)","g");
        this.get(e).className = oc.replace(re, " ").replace(/(\s{2,})/g, " ").replace(/^\s/, "").replace(/\s$/, "");
    },
    setAttr : function (atn, atv, e) {
        if (this.get(e)) {
            this.get(e).setAttribute(atn, atv);
        }
    },
    getAttr : function (atn, e) {
        if (this.get(e)) {
            return this.get(e).getAttribute(atn);
        } else {
			return false;
        }
    },
    remAttr : function (atn, e) {
		if (this.get(e)) {
            this.get(e).removeAttribute(atn);
        }
    },
    addEvent : function (evt, func, e) {
        if (window.attachEvent) {
            this.get(e).attachEvent("on" + evt, func);
        } else if (window.addEventListener) {
            this.get(e).addEventListener(evt, func, false);
        }
    },
    removeEvent : function (evt, func, e) {
        if (window.attachEvent) {
            this.get(e).detachEvent("on" + evt, func);
        } else if (window.addEventListener) {
            this.get(e).removeEventListener(evt, func, false);
        }
    }
};
