function isValidEmail(s) {
    var org = s;
    s = trim(s);
    
    if (s.length == 0) return(true);

    if (s.match(/(\w|[-~])+\@(\w|[-~])+[.](\w|[-~])+/)) return(true);

    var msg = "Email addresses must contain only letters, numbers, or '.', '-', '~', and '_'.\n";
    msg += 'They must also have the form x@y.something.\n';
    alert(msg);
    return(false);
}

function isEmpty(s) {
    if (s == null) return(true);

    s = trim(s);
    if (s.length == 0) return(true);
}

function trim(s) {
    s = s.replace(/^\s+/,'');
    s = s.replace(/\s+$/,'');
    return(s);
}

//addresses a shortcoming of IE which does not have a getElementById() function
function getEltByID(id,tagName) {
    var nodeList = document.getElementsByTagName(tagName);
    var node;
    var i;
    for (i = 0; i < nodeList.length; i++) {
        var node = nodeList[i];
        if (node.id == id) {
            return(node);
        }
    }

    return(null);
}

function getFormEltByID(frm,id) {
    var elt = null;
    for (var i = 0; i < frm.elements.length; i++) {
        if (frm.elements[i].id == id) {
            elt = frm.elements[i];
            break;
        }
    }
    return(elt);
}

function showItemAsActive(id,tagName) {
    var elt = getEltByID(id,tagName);
    if (elt == null) return;
    
    if (elt.className.indexOf('_hover') > 0) return;

    elt.className += '_hover';
}

function showItemAsNormal(id,tagName) {
    var elt = getEltByID(id,tagName);
    if (elt == null) return;

    if (elt.className.indexOf('_hover') < 0) return;

    var className = elt.className;
    className = className.substring(0,className.length - '_hover'.length);
    elt.className = className;
}

