function ov(selobj)
{
    return selobj.options[selobj.selectedIndex].value;
}

function rv(radobj)
{
    for (var i = 0; i < radobj.length; ++i) {
        if (radobj[i].checked) {
            return radobj[i].value;
        }
    }
    return "";
}

// maintains an map of arrays by element name.  each array contains
// one or more elements from the specified form with the specified name.
// used for portable, efficient access to all elements with a given name.
function elements_for_name(form, name)
{
    if (!form) {
        return null;
    }
    if (!form._gl_elements) {
        var elements_by_name = new Object();
        for (var i=0,ii=form.elements.length;i<ii;++i) {
            var e = form.elements[i];
            var named_elements = elements_by_name[e.name];
            if (!named_elements) {
                named_elements = new Array();
                elements_by_name[e.name] = named_elements;
            }
            named_elements[named_elements.length] = e;
        }
        form._gl_elements = elements_by_name;
    }
    return form._gl_elements[name];
}

/**
 * Rebulds the element name map created by elements_for_name
 *  Execute this function, everytime you dynamically modify a form
 *
 */
function rebuildElementNameMap(form){
    if (form._gl_elements){
        form._gl_elements = undefined;
    }
}

function find_form_element(form, name)
{
    var elements = elements_for_name(form, name);
    if (elements) {
        for (var i = 0; i < elements.length; ++i) {
            var e = elements[i];
            if (e.name == name) {
                return e;
            }
        }
    }
    return null;
}

function clear_value(form, name)
{
    var elements = elements_for_name(form, name);
    if (elements) {
        for (var i = 0; i < elements.length; ++i) {
            var e = elements[i];
            if (e.type == "select-one") {
                e.selectedIndex = -1;
            }
            if (e.type == "radio" || e.type == "checkbox") {
                e.checked = false;
            }
            if (e.type == "text" || e.type == "password" || e.type == "hidden") {
                e.value = "";
            }
        }
    }
}

function clear_values(form, field_names)
{
    for (var i = 0; i < field_names.length; ++i) {
        clear_value(form, field_names[i]);
    }
}

function set_radio_value(form, name, value)
{
    var elements = elements_for_name(form, name);
    if (elements) {
        for (var i = 0; i < elements.length; ++i) {
            var e = elements[i];
            if (e.type == "radio" && e.value == value) {
                e.checked = true;
            }
        }
    }
}

function get_value(form, name, default_value)
{
    var radio_present = false;
    var elements = elements_for_name(form, name);
    if (elements) {
        for (var i = 0; i < elements.length; ++i) {
            var e = elements[i];
            if (e.type == "select-one" && e.selectedIndex >= 0) {
                return ov(e);
            }
            if (e.type == "radio" || e.type == "checkbox") {
                radio_present = true;
                if (e.checked) {
                    return e.value;
                }
            }
            if (e.type == "text" || e.type == "password" || e.type == "hidden") {
                return e.value;
            }
        }
    }
    if (radio_present) {
        return "";
    }
    return default_value;
}

function set_value(form, name, value)
{
    var value_present = false;
    var elements = elements_for_name(form, name);
    if (elements) {
        for (var i = 0; i < elements.length && !value_present; ++i) {
            var e = elements[i];
            if (e.type == "select-one") {
                for (var k = 0; k < e.options.length; ++k) {
                    var o = e.options[k];
                    if (o.value == value) {
                        e.selectedIndex = k;
                        value_present = true;
                    }
                }
            } else if ((e.type == "radio" || e.type == "checkbox") && e.value == value) {
                value_present = true;
                e.checked = true;
            } else if (e.type == "text" || e.type == "password" || e.type == "hidden") {
                value_present = true;
                e.value = value;
            }
        }
    }
    return value_present;
}

function setTextFieldValue(form, name, value)
{
    var element = find_form_element(form, name);
    if (element && (element.type == "text" || element.type == "password" || element.type == "hidden")) {
        element.value = value;
    }
}

function setInnerHTML(element_name, value)
{
    var element = getObject(element_name);
    if (element) {
        element.innerHTML = value;
    }
}

function findAnswer(f, name)
{
    return get_value(f, name, "");
}

function isFilled(f, name)
{
    var value = get_value(f, name, null);
    return (value != null) && (value.match(/\S/));
}

function get_date(f, base_name)
{
    var month = get_value(f, "value(" + base_name + "_MONTH)", "");
    var day   = get_value(f, "value(" + base_name + "_DAY)", "");
    var year  = get_value(f, "value(" + base_name + "_YEAR)", "");
    return (month == "" || day == "" || year == "") ? null : new Date(year, month - 1, day);
}

var bValidationDisabled = true;

function disableValidation()
{
    bValidationDisabled = true;
}

function isValidationDisabled()
{
    return bValidationDisabled;
}

var portalForm = null;

function setPortalForm(f)
{
    portalForm = f;
}

function portalJump(pagenum)
{
    if (portalForm) {
        disableValidation();
        portalForm.gotoPage.value = pagenum;
        portalForm.submit();
    }
}

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

function isDisplayed(divId)
{
    try {
        var d = getObject(divId);
        if (d == null) {
            return false;
        }

        if (d.style == null) {
            return false;
        }
        
        if (d.style.display != 'none') {
            return true;
        } else {
            return false;
        }
        
    }
    catch (e) {
        alert(e.message);
        return false;
    }
}

function setDisplayed(divId, value)
{
    var d = getObject(divId);
    if (d) {
        d.style.display = value ? 'block' : 'none';
    }

}

function setVisibility(divId, value)
{
    var d = getObject(divId);
    if (d) {
        d.style.visibility = value ? 'visible' : 'hidden';
    }
}

function setInlineDisplayed(divId, value)
{
    var d = getObject(divId);
    if (d) {
        d.style.display = value ? 'inline' : 'none';
    }
}

function toggleDisplay(divId)
{
    var d = getObject(divId);
    if (d) {
        if (d.style.display == 'none') {
            d.style.display = 'block';
        } else {
            d.style.display = 'none';
        }
    }
}

function sendXMLRequest(url, result_func)
{
    var req;

    if (window.XMLHttpRequest) {
        // branch for native XMLHttpRequest object
        req = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        // branch for IE/Windows ActiveX version
        req = new ActiveXObject("Microsoft.XMLHTTP");
    }

    if (req) {
        req.onreadystatechange = function() {
            if (req.readyState == 4 && req.status == 200) {
                result_func(req);
            }
        };
        req.open("GET", url, true);
        req.send(null);
    }

    return req;
}

function sendSynchronousXMLRequest(url, max_delay)
{
    var req;

    var stoptime = new Date().getTime() + max_delay * 1000;
    var handler = function() {
        stoptime = 0;
    };

    sendXMLRequest(url, handler);
    while (true) {
        var now = new Date().getTime();
        if (now > stoptime) {
            break;
        }
    }

    /*
    if (stoptime == 0) {
	alert("finished: " + url);
    } else {
	alert("timeout");
    }
*/

    return req;
}

function postXMLRequest(url, params, result_func)
{
    var req;

    if (window.XMLHttpRequest) {
        // branch for native XMLHttpRequest object
        req = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        // branch for IE/Windows ActiveX version
        req = new ActiveXObject("Microsoft.XMLHTTP");
    }

    if (req) {
        req.onreadystatechange = function() {
            //alert("ready: " + req.readyState + "/" + req.status);
            if (req.readyState == 4 && req.status == 200) {
                result_func(req);
            }
        };
        req.open("POST", url, true);
        req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        req.setRequestHeader("Content-length", params.length);
        req.setRequestHeader("Connection", "close");
        req.send(params);
    }

    return req;
}

function postSynchronousXMLRequest(url, params, max_delay)
{
    var req;

    if (window.XMLHttpRequest) {
        // branch for native XMLHttpRequest object
        req = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        // branch for IE/Windows ActiveX version
        req = new ActiveXObject("Microsoft.XMLHTTP");
    }

    if (req) {
        req.open("POST", url, false);
        req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        req.setRequestHeader("Content-length", params.length);
        req.setRequestHeader("Connection", "close");
        req.send(params);
    }

    return req;
}

function addOnLoadHandler(target_field,
    new_handler)
{
    if (target_field.onchange) {
        var old_handler = target_field.onload;
        target_field.onload = function() {
            old_handler();
            new_handler();
        }
    } else {
        target_field.onload = new_handler;
    }
}

function onChangeHandler()
{
    if (this.glonchange1) {
        this.glonchange1();
    }
    if (this.glonchange2) {
        this.glonchange2();
    }
    if (this.glonchange3) {
        this.glonchange3();
    }
    if (this.glonchange4) {
        this.glonchange4();
    }
    if (this.glonchange5) {
        this.glonchange5();
    }
    if (this.glonchange6) {
        this.glonchange6();
    }
    if (this.glonchange7) {
        this.glonchange7();
    }
    if (this.glonchange8) {
        this.glonchange8();
    }
    if (this.glonchange9) {
        this.glonchange9();
    }
    if (this.glonchange10) {
        this.glonchange10();
    }
    if (this.glonchange11) {
        this.glonchange11();
    }
}

function addOnChangeHandler(target_field,
    new_handler)
{
    if (target_field.type == "radio") {
        addOnClickHandler(target_field, new_handler);
        return;
    }

    if (target_field.glonchange10) {
        target_field.glonchange11 = new_handler;
    } else if (target_field.glonchange9) {
        target_field.glonchange10 = new_handler;
    } else if (target_field.glonchange8) {
        target_field.glonchange9 = new_handler;
    } else if (target_field.glonchange7) {
        target_field.glonchange8 = new_handler;
    } else if (target_field.glonchange6) {
        target_field.glonchange7 = new_handler;
    } else if (target_field.glonchange5) {
        target_field.glonchange6 = new_handler;
    } else if (target_field.glonchange4) {
        target_field.glonchange5 = new_handler;
    } else if (target_field.glonchange3) {
        target_field.glonchange4 = new_handler;
    } else if (target_field.glonchange2) {
        target_field.glonchange3 = new_handler;
    } else if (target_field.glonchange1) {
        target_field.glonchange2 = new_handler;
    } else if (target_field.onchange) {
        target_field.glonchange2 = new_handler;
        target_field.glonchange1 = target_field.onchange;
        target_field.onchange = onChangeHandler;
    } else {
        target_field.glonchange1 = new_handler;
        target_field.onchange = onChangeHandler;
    }
}

function addOnChangeHandlerUsingName(form,
    target_field_name,
    handler)
{
    var elements = elements_for_name(form, target_field_name);
    if (elements) {
        for (var i = 0; i < elements.length; ++i) {
            var target_field = elements[i];
            addOnChangeHandler(target_field, handler);
        }
    }
}

function onClickHandler()
{
    if (this.glonclick1) {
        this.glonclick1();
    }
    if (this.glonclick2) {
        this.glonclick2();
    }
    if (this.glonclick3) {
        this.glonclick3();
    }
    if (this.glonclick4) {
        this.glonclick4();
    }
    if (this.glonclick5) {
        this.glonclick5();
    }
    if (this.glonclick6) {
        this.glonclick6();
    }
    if (this.glonclick7) {
        this.glonclick7();
    }
    if (this.glonclick8) {
        this.glonclick8();
    }
    if (this.glonclick9) {
        this.glonclick9();
    }
    if (this.glonclick10) {
        this.glonclick10();
    }
    if (this.glonclick11) {
        this.glonclick11();
    }
}

function addOnClickHandler(target_field,
    new_handler)
{

    if (target_field.glonclick10) {
        target_field.glonclick11 = new_handler;
    } else if (target_field.glonclick9) {
        target_field.glonclick10 = new_handler;
    } else if (target_field.glonclick8) {
        target_field.glonclick9 = new_handler;
    } else if (target_field.glonclick7) {
        target_field.glonclick8 = new_handler;
    } else if (target_field.glonclick6) {
        target_field.glonclick7 = new_handler;
    } else if (target_field.glonclick5) {
        target_field.glonclick6 = new_handler;
    } else if (target_field.glonclick4) {
        target_field.glonclick5 = new_handler;
    } else if (target_field.glonclick3) {
        target_field.glonclick4 = new_handler;
    } else if (target_field.glonclick2) {
        target_field.glonclick3 = new_handler;
    } else if (target_field.glonclick1) {
        target_field.glonclick2 = new_handler;
    } else if (target_field.onclick) {
        target_field.glonclick2 = new_handler;
        target_field.glonclick1 = target_field.onclick;
        target_field.onclick = onClickHandler;
    } else {
        target_field.glonclick1 = new_handler;
        target_field.onclick = onClickHandler;
    }
}

function addOnClickHandlerUsingName(form,
    target_field_name,
    handler)
{
    var elements = elements_for_name(form, target_field_name);
    if (elements) {
        for (var i = 0; i < elements.length; ++i) {
            var target_field = elements[i];
            addOnClickHandler(target_field, handler);
        }
    }
}

function onBlurHandler()
{
    if (this.glonblur1) {
        this.glonblur1();
    }
    if (this.glonblur2) {
        this.glonblur2();
    }
    if (this.glonblur3) {
        this.glonblur3();
    }
    if (this.glonblur4) {
        this.glonblur4();
    }
    if (this.glonblur5) {
        this.glonblur5();
    }
    if (this.glonblur6) {
        this.glonblur6();
    }
    if (this.glonblur7) {
        this.glonblur7();
    }
    if (this.glonblur8) {
        this.glonblur8();
    }
    if (this.glonblur9) {
        this.glonblur9();
    }
    if (this.glonblur10) {
        this.glonblur10();
    }
    if (this.glonblur11) {
        this.glonblur11();
    }
}

function addOnBlurHandler(target_field,
    new_handler)
{
    if (target_field.glonblur10) {
        target_field.glonblur11 = new_handler;
    } else if (target_field.glonblur9) {
        target_field.glonblur10 = new_handler;
    } else if (target_field.glonblur8) {
        target_field.glonblur9 = new_handler;
    } else if (target_field.glonblur7) {
        target_field.glonblur8 = new_handler;
    } else if (target_field.glonblur6) {
        target_field.glonblur7 = new_handler;
    } else if (target_field.glonblur5) {
        target_field.glonblur6 = new_handler;
    } else if (target_field.glonblur4) {
        target_field.glonblur5 = new_handler;
    } else if (target_field.glonblur3) {
        target_field.glonblur4 = new_handler;
    } else if (target_field.glonblur2) {
        target_field.glonblur3 = new_handler;
    } else if (target_field.glonblur1) {
        target_field.glonblur2 = new_handler;
    } else if (target_field.onblur) {
        target_field.glonblur2 = new_handler;
        target_field.glonblur1 = target_field.onblur;
        target_field.onblur = onBlurHandler;
    } else {
        target_field.glonblur1 = new_handler;
        target_field.onblur = onBlurHandler;
    }
}

function addOnBlurHandlerUsingName(form,
    target_field_name,
    handler)
{
    var elements = elements_for_name(form, target_field_name);
    if (elements) {
        for (var i = 0; i < elements.length; ++i) {
            var target_field = elements[i];
            addOnBlurHandler(target_field, handler);
        }
    }
}

function addNotificationHandler(target_field,
    handler)
{
    if (target_field) {
        addOnChangeHandler(target_field, handler);
        addOnBlurHandler(target_field, handler);
    }
}

function addNotificationHandlerUsingName(form,
    target_field_name,
    handler)
{
    var elements = elements_for_name(form, target_field_name);
    if (elements) {
        for (var i = 0; i < elements.length; ++i) {
            var target_field = elements[i];
            addNotificationHandler(target_field, handler);
        }
    }
}

function createNameFillOnChangeHandler(form,
    target_text_field_name,
    first_name_text_field_name,
    last_name_text_field_name,
    middle_initial_text_field_name)
{
    var target_field = find_form_element(form, target_text_field_name);
    var first_name_field = find_form_element(form, first_name_text_field_name);
    var last_name_field = find_form_element(form, last_name_text_field_name);
    var middle_initial_field = find_form_element(form, middle_initial_text_field_name);
    if (target_field && first_name_field && last_name_field && middle_initial_field) {
        var on_changer = function() {
            var first_name = first_name_field.value;
            var last_name = last_name_field.value;
            var middle_initial = middle_initial_field.value;
            if (middle_initial != "") {
                target_field.value = first_name + " " + middle_initial + " " + last_name;
            } else {
                target_field.value = first_name + " " + last_name;
            }
        };
        addNotificationHandler(first_name_field, on_changer);
        addNotificationHandler(last_name_field, on_changer);
        addNotificationHandler(middle_initial_field, on_changer);
        addOnLoadHandler(form, on_changer);
        on_changer();
    }
}

function createCityStateFillOnChangeHandler(form,
    target_text_field_name,
    city_text_field_name,
    state_text_field_name)
{
    var target_field = find_form_element(form, target_text_field_name);
    var city_field = find_form_element(form, city_text_field_name);
    var state_field = find_form_element(form, state_text_field_name);
    if (target_field && city_field && state_field) {
        var on_changer = function() {
            var city = city_field.value;
            var state = state_field.value;
            target_field.value = city + ", " + state;
        };
        addNotificationHandler(city_field, on_changer);
        addNotificationHandler(state_field, on_changer);
        addOnLoadHandler(form, on_changer);
        on_changer();
    }
}

function createRadioWithDetailsDivShowHide(form,
    radio_name,
    show_value,
    div_name,
    detail_field_names)
{
    var handler = function() {
        var radio_value = findAnswer(form, radio_name);
        if (radio_value && radio_value == show_value) {
            setDisplayed(div_name, true);
        } else {
            setDisplayed(div_name, false);
            clear_values(form, detail_field_names);
        }
    };
    addOnClickHandlerUsingName(form, radio_name, handler);
    handler();
}

function addOnUnloadHandler(new_handler) 
{
    if (window.onunload) {
        var oldHandler = window.onunload;
        window.onunload = function() {
            oldHandler();
            new_handler();
        }
    } else {
        window.onunload = new_handler;
    }
}

function haveValueForNamePrefix(form,
    prefix)
{
    if (!form) {
        return false;
    }
    for (var i = 0; i < form.elements.length; ++i) {
        var e = form.elements[i];
        if (e.name && e.name.indexOf(prefix) == 0 && isFilled(form, e.name)) {
            return true;
        }
    }
    return false;
}
/**
 * addDomEvent
 *      Cross Browser function to attach a DOM level event
 */
function addDomEvent(obj, evt, fn){
    if (obj.addEventListener){ // W3C
        obj.addEventListener(evt, fn, false); 
        return true; 
    } else if (obj.attachEvent){ // IE
        var r = obj.attachEvent("on"+evt, fn); 
        return r; 
    } else { 
        return false; 
    } 
}
/**
 * removeDomEvent
 *      Cross Browser function to remove a DOM level event
 */
function removeDomEvent(obj,evt,fn) {
    if (obj.removeEventListener)
        obj.removeEventListener(evt,fn,false);
    else if (obj.detachEvent)
        obj.detachEvent('on'+evt,fn);
}

/**
 *  getTarg
 *      Obtains a "Cross-browser" handle to the target element
 *      Note: this function is used inside of the addDomEvent callback to retrieve
 *          the Node that triggered the event
 */
function getEventTargetNode (event) {
    var targ;
    if (!event) {
        var event = window.event;
    }
    try {
		if (event.target) {
		    targ = event.target;
		} else if (event.srcElement) {
		    targ = event.srcElement;
		}
		if (targ.nodeType == 3) { // defeat Safari bug
		    targ = targ.parentNode;
		}

		return targ;
    } catch (e) {
    	return null;
    }
}

/*
 * Search for a form in the current document that contains a field with the specified name.
 * If a field is found then its text is highlighted and the focus is moved to that field.
 * If no match is found nothing happens.
 */
function highlight_field_named(name)
{
    for (var i = 0; i < document.forms.length; ++i) {
        var field = find_form_element(document.forms[i], name);
        if (field) {
            field.select();
            field.focus();
        }
    }
}

function findPos(obj) {
    var curleft = curtop = 0;
    if (obj.offsetParent) {
        do {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        } while (obj = obj.offsetParent);//Intentional Assignment
    }
    return [curleft,curtop];
}

/**
 * Return array of elements matching @classname, starting from @node
 * @classname String to match
 * @node Starting node, default: "body"
 */
function getElementsByClassName(classname, node) {
    if(!node) {
        node = document.getElementsByTagName("body")[0];
    }
    var a = [];
    var re = new RegExp('\\b'+classname+'\\b');
    var els = node.getElementsByTagName("*");
    for(var i=0,j=els.length; i<j; i++) {
        if(re.test(els[i].className)) {
            a.push(els[i]);
        }
    }
    return a;
}
/**
 * Return the first parentNode in the DOM tree of the given @node matching @tag
 * usefull for onclick handlers
 */
function findParentByTagName(node, tag) {
    try {
        var re = new RegExp(tag, 'i');
        while (node.parentNode) {
            if(re.test(node.parentNode.tagName)) {
                return node.parentNode;
            } else {
                node = node.parentNode;
            }
        }
    } catch (e) { //html element has no parentNode, and throws an exception
        return null;
    }
}
//Used in building urls for ajax requests
function addParam(form, prefix, name, url){
    return url + prefix + name + '=' + findAnswer(form, name);
}

function hasClass(ele,cls) {
	try {return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));}catch (e) {return false;} 
}
function addClass(ele,cls) {
	try {if (!this.hasClass(ele,cls)) ele.className += " "+cls+" ";}catch (e) {return false;} 
}
function removeClass(ele,cls) {
	try {
	  if (hasClass(ele,cls)) {
        var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
        ele.className=ele.className.replace(reg,'');
	  }
	}catch (e) {return false;} 
}

/* DefaultFormFieldValueHandler
 *      Removes the default value from an input of type text
 *      when the user clicks the field, if the user leaves the field unchanged
 *      the default value will return
 */
function DefaultFormFieldValueHandler (elem) {
    var input = document.getElementById(elem);
    var defaultText = input.value;

    addDomEvent(input, 'click', function () {
        if ( input.value ===  defaultText) {
            input.value = input.value = '';
        }
    });

    addDomEvent(input, 'select', function () {
        if ( input.value ===  defaultText) {
            input.value = input.value = '';
        }
    });

    addDomEvent(input, 'blur', function () {
        if ( !input.value.length > 0 ) {
            input.value = defaultText;
        }
    });
}
/**
 * Builds a query string from a javascript object
 */
function buildParameterStringFromJson(json) {
	var string = '';
	for (key in json) {
        string+=key+"="+json[key]+"&";
    }
    return string.replace(/&$/,"");
}

/**
 * Builds a query string from a javascript object
 */
function buildQueryStringFromJson(json) {
    return '?'+buildParameterStringFromJson(json);
}

/**
 *  buildQueryObjectFromForm()
 *      Builds an object with members as form element names,
 *      and values as form element values.
 *      Pass the resulting object to buildQueryStringFromJson() for
 *      generating url's, for ajax requests
 *
 *      TODO: Maybe add a regex filter parameter that would
 *          exclude certain fields.
 * @param form
 */
function buildQueryObjectFromForm(form) {
    var obj = new Object();
    for (var i=0,ii=form.elements.length;i<ii;i++) {
        obj[form.elements[i].name] = get_value(form, form.elements[i].name, "");
    }
    return obj;
}

function getQuerystring(key, dflt){
    if (dflt==null) dflt="";
    key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
    var qs = regex.exec(window.location.href);
    if(qs == null)
        return dflt;
    else
        return qs[1];
}

/**
 * RolloverImage
 *  Toggles the src of the img to filename_hover on mouse over
 * @param elem_str id name of the element
 */
function RolloverImage(elem_str) {
    var elem = document.getElementById(elem_str);

    //Preload the images, to prevent flashyness, when users cache is clear
    var img = {inactive: new Image(),hover: new Image()};
    img.inactive.alt = elem.alt;
    img.hover.alt = elem.alt;
    //src assignment triggers image download
    img.inactive.src = elem.src;
    img.hover.src = elem.src.replace(/\.(gif|jpg|png)$/, "_hover.$1");
    //Assign the hover handlers
    elem.over = function() {
        elem.src = img.hover.src;
    }
    elem.out = function() {
        elem.src = img.inactive.src;
    }

    addDomEvent(elem, 'mouseover', elem.over);
    addDomEvent(elem, 'mouseout', elem.out);
    return elem;
}

/**
 * installHelpBalloonHandlers()
 *
 * Add listeners for tooltip help text
 * Find elements with class names matching the name="" attribute for the image
 * that triggered the mouseover, if any elements are found, add the classname "show"
 * to those elements.  On mouseout do the reverse.
 *
 */
function installHelpBalloonHandlers(){
    var helpimgs = getElementsByClassName('helpimg');
    for (var i=0,ii=helpimgs.length;i<ii;i++){
        addDomEvent(helpimgs[i], 'mouseover', function(evt){
            var triggerImg = getEventTargetNode(evt);
            var helptexts = getElementsByClassName(triggerImg.name);
            for (var j=0,jj=helptexts.length;j<jj;j++){
                addClass(helptexts[j], 'show');
            }
        });
        addDomEvent(helpimgs[i], 'mouseout', function(evt){
            var triggerImg = getEventTargetNode(evt);
            var helptexts = getElementsByClassName(triggerImg.name);
            for (var j=0,jj=helptexts.length;j<jj;j++){
                removeClass(helptexts[j], 'show');
            }
        });
    }
}

/*
	copyValueAndSubmit
	
	Takes the value of the current field and injects it into the second field and submits the form
*/
function copyValueAndSubmit(field1_id,field2_id) {
	var field1 = document.getElementById(field1_id);
	var field2 = document.getElementById(field2_id);
	
	field2.value = field1[field1.selectedIndex].value;
	
	var form = field1.form;
	
	form.submit();
}
