var imgPreload = new Array();

function addLoadListener(fn) {
    if (typeof window.addEventListener != 'undefined')
        window.addEventListener('load', fn, false);
    else if (typeof document.addEventListener != 'undefined')
        document.addEventListener('load', fn, false);
    else if (typeof window.attachEvent != 'undefined')
        window.attachEvent('onload', fn);
    else {
        var oldfn = window.onload;
        if (typeof window.load != 'function')
            window.onload = fn;
        else {
            window.onload = function() {
                oldfn();
                fn();
            };
        }
    }
}

function attachEventListener(target, eventType, funcRef) {
    var capture = false;
    if (typeof target.addEventListener != 'undefined')
        target.addEventListener(eventType, funcRef, capture);
    else if (typeof target.attachEvent != 'undefined') {
        var fstr = eventType + funcRef;
        target["e"+ fstr] = funcRef;
        target[fstr] = function(event) {
            if (typeof event == 'undefined')
                event = window.event;
            target["e"+ fstr](event);
        };
        target.attachEvent("on"+ eventType, target[fstr]);
    }
    else {
        eventType = "on"+ eventType;
        if (typeof target[eventType] == 'function') {
            var oldListener = target[eventType];
            target[eventType] = function() {
                oldListener();
                return funcRef();
            };
        }
        else
            target[eventType] = funcRef;
    }
}

function detachEventListener(target, eventType, funcRef) {
    var capture = false;
    if (typeof target.removeEventListener != 'undefined')
        target.removeEventListener(eventType, funcRef, capture);
    else if (typeof target.detachEvent != 'undefined') {
        var fstr = eventType + funcRef;
        target.detachEvent("on"+ eventType, target[fstr]);
        target["e"+ fstr] = null;
        target[fstr] = null;
    }
    else target["on"+ eventType] = null;
}

function getElementsByAttribute(attr, attrValue) {
    var elems = new Array();
    var matches = new Array();
    if (document.all)
        elems = document.all;
    else
        elems = document.getElementsByTagName("*");
    for (var i = 0; i < elems.length; i++) {
        if (attr == "class") {
            var pattern = new RegExp("(^| )"+ attrValue +"( |$)");
            if (pattern.test(elems[i].className))
                matches[matches.length] = elems[i];
        }
        else if (attr == "for") {
            if (elems[i].getAttribute("htmlFor") || elems[i].getAttribute("for")) {
                if (elems[i].htmlFor == attrValue)
                    matches[matches.length] = elems[i];
            }
        }
        else if (elems[i].getAttribute(attr) == attrValue)
            matches[matches.length] = elems[i];
    }
    return matches;
}

function hasClass(elem, cls) {
    var p = new RegExp("(^| )"+ cls +"( |$)");
    if (p.test(elem.className)) return true;
    else return false;
}

function addClass(target, cls) {
    var pattern = new RegExp("(^| )"+ cls +"( |$)");
    if (!pattern.test(target.className)) {
        if (target.className == "")
            target.className = cls;
        else
            target.className += " "+ cls;
    }
    return true;
}

function removeClass(target, cls) {
    var cls2 = target.className;
    var pattern = new RegExp("(^| )"+ cls +"( |$)");
    cls2 = cls2.replace(pattern, "$1");
    cls2 = cls2.replace(/ $/, "");
    target.className = cls2;
    return true;
}

function getEventTarget(event) {
    var t = null;
    if (typeof event.target != 'undefined')
        t = event.target;
    else
        t = event.srcElement;
    while (t.nodeType == 3 && t.parentNode != null)
        t = t.parentNode;
    return t;
}

function stopDefaultAction(event) {
    event.returnValue = false;
    if (typeof event.preventDefault != 'undefined')
        event.preventDefault();
}

function randomBetween(min, max) {
    return min + Math.floor(Math.random() * (max - min + 1));
}

function imagePreload(imgs) {
    if (document.images) {
        for (var i = 0; i < imgs.length; i++) {
            var im = new Image();
            im.src = imgs[i];
            imgPreload[imgPreload.length] = im;
        }
        return true;
    }
    else
        return false;
}
