function writeEMLink(id, text, subj, dom) {
	if (!dom) dom = "matthewcgood";
	var url = id + unescape("%40") + dom + "." + "com";
	document.write("<a href=\"ma" + "ilto:" + url);
	if (subj) document.write("?" + "sub" + "ject=" + escape(subj));
	document.write("\" onmouseover=\"window.status=''; return true;\">");
	if (text) document.write(text);
	else document.write(url);
	document.write("</a>");
}

// Generic Window Opener
function openWindow(uri,mx,w,h,n,c,s,r) {
    /*
    uri = string : report URL
    mx  = boolean: set window size dynamically based on screen size
    w   = integer: window width (if mx then used only for browsers that don't recognize screen property) 
    h   = integer: window height (if mx then used only for browsers that don't recognize screen property)
    n   = string : the name property for window.open()
    c   = boolean: center the window within the user's screen 
    s   = boolean: enable scrollbars
    r   = boolean: allow resizing
    */
    var features = "dependent=1,directories=0,location=0,menubar=0,status=0,toolbar=0,scrollbars=";
    features += (s) ? "1" : "0"; 
    features += ",resizable=";
    features += (r) ? "1" : "0";
    if (window.screen && navigator.appVersion.indexOf("AOL") == -1) {
        var aw = screen.availWidth - 10;
        var ah = screen.availHeight - 30;
        if (mx) {
            w = aw - 100;
            h = ah - 100;
        }
        features += ",width=" + w + ",height=" + h;
        if (mx || c) {
            var xc = (aw - w) / 2;
            var yc = (ah - h) / 2;
            features += ",left=" + xc + ",screenX=" + xc;
            features += ",top=" + yc + ",screenY=" + yc; 
        }
    }
    return window.open(uri,n,features,true);
}

/* Generic image roll over control.
 * Handles rollover and rolloff, but obviates need for explicit onmouseout
 * event assignment in HTML by taking care of this event handler assignment 
 * automatically at runtime. Function does expect that the over state of the
 * image be named as follows:
 * defaultStateFileName_over.gif
 */
function imgRollOver(imgObj) {
    var anchorTag;
    if ( imgObj.parentNode.nodeName == "A") anchorTag = imgObj.parentNode;
    if (anchorTag && anchorTag.disabled) return false;
    var oldSrc = imgObj.src;
    var isRollOver = (oldSrc.indexOf("_over") == -1); 
    var newSrc;
    if (isRollOver) {
        newSrc = oldSrc.substring(0,oldSrc.lastIndexOf("."));
        newSrc += "_over";
        newSrc += oldSrc.substring(oldSrc.lastIndexOf("."), oldSrc.length);
    } else {
        newSrc = oldSrc.substring(0,oldSrc.lastIndexOf("_"));
        newSrc += oldSrc.substring(oldSrc.lastIndexOf("."),oldSrc.length);
    }
    // window.alert ("isRollOver = " + isRollOver + "\nnewSrc = " + newSrc);
    imgObj.src = newSrc;
    if (isRollOver) {
        imgObj.onmouseout = function() {imgRollOver(imgObj);};
    } else {
        imgObj.onmouseout = function() {return false;};
    }
}

function trimString(s) {
  return s.replace(/^\s+|\s+$/g, ''); 
//    while (s.charAt(0) == " ") s = s.substring(1, s.length);
//    while (s.charAt(s.length - 1) == " ") s = s.substring(0, s.length - 2);
//    return s;
}

function trim(str) 
{ 
  return str.replace(/^\s+|\s+$/g, ''); 
}

function isString(s) { 
  return s && s.charAt;
//    return (trimString(s).length > 0); 
}

// Test a string to make sure it is a numeric value
function isNumber(n) {
    var objRegExp  =  /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/; 
    return objRegExp.test(n);
}

// Test a string to make sure it conforms to date format m/d/yyyy
function isDate(d) {
    var objRegExp = /^\d{1,2}(\/)\d{1,2}\1\d{4}$/;
    // check to see if in correct format 
    if(!objRegExp.test(d)) {
        return false; //doesn't match pattern, bad date
    } else {
        var inputDateArray = d.split("/"); //split date into month, day, year
        
        // remove leading zeros if any... 
        for (var i = 0; i < inputDateArray.length - 1; i++) {
            if (inputDateArray[i].charAt(0) == "0") {
                inputDateArray[i] = inputDateArray[i].charAt(1);
            }
        }
        
        var intMonth = parseInt(inputDateArray[0]);
        var intDay = parseInt(inputDateArray[1]);
        var intYear = parseInt(inputDateArray[2]);
        
        if (isNaN(intMonth) || isNaN(intDay) || isNaN(intYear) || 
            intDay == 0 || intMonth == 0 || intYear <= 2000) {
            return false;
        }
        
        if (intMonth != 2) {        
            // create a lookup for months not equal to Feb. 
            var monthLastDaysLookup = {1:31, 3:31, 4:30, 5:31, 6:30, 7:31, 8:31, 9:30, 10:31, 11:30, 12:31};
            var monthLastDay = monthLastDaysLookup[intMonth];        
        
            // check if month value and day value agree 
            if (monthLastDay != null && intDay <= monthLastDay) {
                return true;
            }
        } else {
            if ((intYear % 4 == 0 && intDay <= 29) ||
                (intYear % 4 != 0 && intDay <=28))
                return true; //Feb. had valid number of days
        }
    }
    
    return false; //any other values, bad date
}

function isCurrency(a) { 
    if (isString(a)) {
        var testStr = "";
        var valid = "0123456789";
        var nStartIndex = (a.charAt(0) == "$") ? 1 : 0;
        var s = a.substring(nStartIndex, a.length);
        for (var i = 0; i < s.length; i++) {
            if (valid.indexOf(s.charAt(i)) != -1)
                testStr += s.charAt(i);
        }
        return isNumber(testStr);
    }
    return false; 
}

function isPhoneNumber(s) {
    if (isString(s)) {
        var testStr = "";
        var valid = "0123456789";
        for (var i = 0; i < s.length; i++) {
            if ( valid.indexOf(s.charAt(i)) != -1)
                testStr += s.charAt(i);
        }
        return (testStr.length == 10);
    }
    return false;
}

function isEmailAddress(s) {
    if (isString(s)) { 
        if (s.indexOf("@") > 0 &&
            s.lastIndexOf(".") > s.indexOf("@") + 1) {
            return true;
        }
    }
    return false;
}