/* $(...)
    Returns DOM node or array of nodes (if more then one argument passed).
    If argument is node object allready then do nothing.
    // Stolen from Prototype
*/
function $() {
    var elements = new Array();

    for (var i = 0; i < arguments.length; i++) {
        var element = arguments[i];
        if (typeof element == 'string')
            element = document.getElementById(element);

        if (arguments.length == 1)
            return element;

        elements.push(element);
    }

    return elements;
}

/* Visibility */

function show(id) { delClass( id, 'hidden' ) }
function hide(id) { addClass( id, 'hidden' ) }

function hideshow(id) { return toggleVisibility( id ) }
function toggleVisibility(id) {
    var e = $(id);

    if ( e.className.match( /\bhidden\b/ ) )
        show(e);
    else
        hide(e);

    return false;
}

function setVisibility(id, visibility) {
    if ( visibility ) show(id);
    else hide(id);
}

function switchVisibility(id1, id2) {
    // Show both and then hide the one we want
    show(id1);
    show(id2);
    hide(id2);
    return false;
}

/* Classes */

function addClass(id, value) {
    var e = $(id);
    if ( e.className.match( new RegExp('\b'+ value +'\b') ) )
        return;
    e.className += e.className? ' '+value : value;
}

function delClass(id, value) {
    var e = $(id);
    e.className = e.className.replace( new RegExp('\\s?\\b'+ value +'\\b', 'g'), '' );
}

/* Rollups */

function rollup(id) {
    var e   = $(id);
    var e2  = e.parentNode;
    
    if (e.className.match(/\bhidden\b/)) {
        set_rollup_state(e,e2,'shown');
        createCookie(id,1,365);
    }
    else {
        set_rollup_state(e,e2,'hidden');
        createCookie(id,0,365);
    }
    return false;
}

function set_rollup_state(e,e2,state) {
    if (e && e2) {
        if (state == 'shown') {
            show(e);
            delClass( e2, 'rolled-up' );
        }
        else if (state == 'hidden') {
            hide(e);
            addClass( e2, 'rolled-up' );
        }
    }
}


/* onload handlers */

var onLoadStack     = new Array();
var onLoadLastStack = new Array();
var onLoadExecuted  = 0;

function onLoadHook(commandStr) {
    if(typeof(commandStr) == "string") {
        onLoadStack[ onLoadStack.length ] = commandStr;
        return true;
    }
    return false;
}

// some things *really* need to be done after everything else
function onLoadLastHook(commandStr) {
    if(typeof(commandStr) == "string"){
        onLoadLastStack[onLoadLastStack.length] = commandStr;
        return true;
    }
    return false;
}

function doOnLoadHooks() {
    if(onLoadExecuted) return;

    var i;
    for ( i in onLoadStack ) { 
        eval( onLoadStack[i] );
    }
    for ( i in onLoadLastStack ) { 
        eval( onLoadLastStack[i] );
    }
    onLoadExecuted = 1;
}

window.onload = doOnLoadHooks;

/* calendar functions */

function openCalWindow(field) {
    var objWindow = window.open('/demos/oldstable/Helpers/CalPopup.html?field='+field, 
                                'RT_Calendar', 
                                'height=235,width=285,scrollbars=1');
    objWindow.focus();
}

function createCalendarLink(input) {
    var e = $(input);
    if (e) {
        var link = document.createElement('a');
        link.setAttribute('href', '#');

        clickevent = function clickevent(e) { openCalWindow(input); return false; };
        if (! addEvent(link, "click", clickevent)) {
            return false;
        }
        
        var text = document.createTextNode('Choose a date');
        link.appendChild(text);

        var space = document.createTextNode(' ');
        
        e.parentNode.insertBefore(link, e.nextSibling);
        e.parentNode.insertBefore(space, e.nextSibling);

        return true;
    }
    return false;
}

/* other utils */

function focusElementById(id) {
    var e = $(id);
    if (e) e.focus();
}

function updateParentField(field, value) {
    if (window.opener) {
        window.opener.$(field).value = value;
        window.close();
    }
}

function addEvent(obj, sType, fn) {
    if (obj.addEventListener) {
        obj.addEventListener(sType, fn, false);
    } else if (obj.attachEvent) {
        var r = obj.attachEvent("on"+sType, fn);
    } else {
        return false;
    }
    return true;
}

function setCheckbox(form, name, val) {
    var myfield = form.getElementsByTagName('input');
    for ( var i = 0; i < myfield.length; i++ ) {
        if ( name && myfield[i].name != name ) continue;
        if ( myfield[i].type != 'checkbox' ) continue;

        myfield[i].checked = val;
    }
}

