function add_event(target, event, func) {
    eval('var old_event = target.' + event + ';');
    if (typeof old_event != 'function') {
        eval('target.' + event + ' = func;');
    } else {
        eval('target.' + event + ' = function() { old_event(); func(); }');
    }
}

function popup(url, name, w, h, scrollbars)
{
    if (self.screen) {
        sw = screen.width;
        sh = screen.height;
        cx = (sw * 0.5) - (w * 0.5);
        cy = (sh * 0.5) - (h * 0.5);
                
        var options = 'width=' + w + ',height=' + h + ',screenX=' + cx + ',screenY=' + cy +
                      ',left=' + cx + ',top=' + cy + ',toolbar=0,location=0,directories=0' +
                      ',status=1,menubar=0,resizable=1';
        if (scrollbars != null) {
            options += ',scrollbars=' + scrollbars;
        }

    }
    
    remote = window.open(url, name, options);
    remote.focus();
    
    if (remote.opener == null) {
        remote.opener = window;
    }
    remote.opener.name = 'opener';
}

function add_class(target, value) {
    if (target.className.indexOf(value) != -1) {
        return;
    }
    target.className += ' ' + value;
}

function remove_class(target, value) {
    if (!target.className) {
        alert('no class');
        return;
    }
    if (target.className.indexOf(value) == -1) {
        alert('not found');
        return;
    }
    var start = target.className.indexOf(value);
    var before = target.className.substr(0, start);
    var new_length = target.className.length - value.length;
    var after = target.className.substr(start + value.length, new_length);
    target.className = before + after;
    alert(target.className);
}

function element(id) {
    if (document.getElementById) {
        return document.getElementById(id);
    } else if (document.all) {
        return document.all[id];
    } else {
        return null;
    }
}

// Adapted from QuirksMode.com
function find_pos(target) {
    var left = 0;
    var top = 0;
    if (target.offsetParent) {
        while (target.offsetParent) {
            left += target.offsetLeft;
            top += target.offsetTop;
            target = target.offsetParent;
        }
    } else if (target.x && target.y) {
        left += target.x;
        top += target.y;
    }
    return [left, top];
}

function get_cookie(name) {
    var start = document.cookie.indexOf(name + "=");
    if (start == -1) {
        return null;
    }
    start += name.length + 1;
    var end = document.cookie.indexOf(";", start);
    if (end == -1) {
        end = document.cookie.length;
    }
    return unescape(document.cookie.substring(start, end));
}
    
function set_cookie(name, value, expires) {
    if (typeof(expires) == 'undefined') {
        // Default to a one-year lifespan
        var now = new Date();
        var expires = now.getTime() + 1000 * 60 * 60 * 24 * 365;
    }
    var expires = new Date(expires);
    document.cookie = name + "=" + escape(value) + "; path=/; expires=" + expires.toGMTString();
}

function addEvent(target, event, func) {
    eval('var oldEvent = target.' + event + ';');
    if (typeof oldEvent != 'function') {
        eval('target.' + event + ' = func;');
    } else {
        eval('target.' + event + ' = function() { oldEvent(); func(); }');
    }
}

function debug(msg) {
    setTimeout('throw("' + msg + '");', 0);
}

