
    function trim(s)
    {
        /// 
        /// 
        /// http://msdn.microsoft.com/library/en-us/script56/html/js56jsoprtypeof.asp?frame=true
        /// typeof returns "number" "string" "boolean" "object" "function" and "undefined"
        /// 
        var type = typeof(s);
        switch (type)
        {
            case "number":
                return "" + s;
            case "boolean":
                return "" + s;
            case "string":
                var returnString = "";
                var start = 0;
                var end = s.length;
                
                while ((start < s.length) && (s.charAt(start) == ' ')) 
                {
                    ++start;
                }
                
                while ((end > 0) && (s.charAt(end - 1) == ' ')) 
                {
                    --end;
                }
                
                returnString = s.substring(start, end);
                return returnString;
                //return s.replace(/^\s+/g,"").replace(/\s+$/g,"");
            default:
                return "";
        }
    }
    
    function moneyFormat(number)
    {
        // ensure that we have a number
        number -= 0;
        
        // round to nearest penny
        number = (Math.round(number * 100)) /100;
        
        if (number == Math.floor(number)) // number == 24
        {
            return number + '.00';
        }
        else
        {
            if (number * 10 == Math.floor(number * 10)) // number == 20.4
            {
                return number + '0';
            }
            else
            {
                return number + '';
            }
        }
    }
    
    function formatAsMoney(number)
    {
        return (number == Math.floor(number)) ? number + '.00' 
                : ( (number * 10 == Math.floor(number * 10)) ? 
                        number + '0' : number);
    }
    
    function popup(mylink, windowname)
    {
        if (! window.focus) return true;

        var href;
        if (typeof(mylink) == 'string') { href=mylink; }
        else { href=mylink.href; }

        window.open(href, windowname, 'width=780,height=450,scrollbars=yes');
        // window.open(href, windowname, 'width=570,height=320,scrollbars=yes');
        return false;
    }

    function new_window(url)
    {
        var ms;
        Today = new Date();
        ms = Today.getMilliseconds();
        window.open(url, "window_" + ms, "height=600,width=800,status=yes,toolbar=no,menubar=no,location=no,scrollbars=yes");
        void(0);
    }

    function stripBadChars(s)
    {
        re = /[-\s\.\(\)]/g;
        s = s.replace(re, "");
        return s;
    }

    /*
    function stripBadChars(s)
    {
        re = /[-\s\.\(\)]*(\w+)[-\s\.\(\)]*(\w*)[-\s\.\(\)]*(\w*)/;
        s = s.replace(re, "$1$2$3");
        return s;
    }
    */

    function isBadEmail(s)
    {
        //re = /[-\s\.\(\)]*([^\s]+)@([^\s]+)[-\s\.\(\)]*/;
        //s = s.replace(re, "$1@$2");
        //alert(s);
        if (s.length > 4 && s.indexOf("@") > 0)
        {
            return false;
        }
        else
        {
            return true;
        }
    }

    function isCanadianProvince(prov)
    {
        if ( prov == "AB" || prov == "BC" || prov == "MB" || prov == "NB" || prov == "NF" || prov == "NT" ||
             prov == "NS" || prov == "ON" || prov == "PE" || prov == "PQ" || prov == "QC" || prov == "SK" ||
             prov == "YT" )
            return true;
        else
            return false;
    }
	
	function highlightOuterTd()
	{
		
	}
	