
emmapp.string = {
		
	// these string functions are from http://lawrence.ecorp.net/inet/samples/regexp-format.php
	 ltrim: function(str){
	     return str.replace(/^\s+/, '');
	 },
	 
	 rtrim: function(str) {
	     return str.replace(/\s+$/, '');
	 },
	 
	 alltrim: function(str) {
	     return str.replace(/^\s+|\s+$/g, '');
	 },
	
	 padleft: function(val, ch, num) {
	     var re = new RegExp(".{" + num + "}$");
	     var pad = "";
	     if (!ch) ch = " ";
	     do  {
	         pad += ch;
	     }while(pad.length < num);
	     return re.exec(pad + val)[0];
	 },
	 
	 padright: function(val, ch, num){
	     var re = new RegExp("^.{" + num + "}");
	     var pad = "";
	     if (!ch) ch = " ";
	     do {
	         pad += ch;
	     } while (pad.length < num);
	     return re.exec(val + pad)[0];
	 },
	
	 padcenter: function(str, ch, size, extra2right) {
		var pad = "";
	    var len = str.length;
	    var re;
	
	    if (extra2right)
	        re = new RegExp("^(.*)(.{" + len + "})(\\1)");
	    else
	        re = new RegExp("(.*)(.{" + len + "})(\\1)$");
	
	    do {
	        pad += ch;
	    } while (--size);
	
	    return str.replace(re, "$1" + str + "$3");
	}, 

	extractMiddle: function(str, size, extra2right) {
		var len = Math.floor( (str.length - size)/2);

		if (extra2right)
			re = new RegExp("(.{" + len + "})(.{" + size + "})(.*)");
		else
			re = new RegExp("(.*)(.{" + size + "})(.{" + len + "})");

		return str.replace(re, "$2");
	},

	centerInStr: function(inStr, outStr, extra2right) {
		var re;
		var len = inStr.length;
		var size = outStr.length;
		var rtrnVal;

		if (len <= size) {
			if (extra2right)
				re = new RegExp("^(.*)(.{" + len + "})(\\1)");
			else
				re = new RegExp("(.*)(.{" + len + "})(\\1)$");

			rtrnVal = outStr.replace(re, "$1" + inStr +"$3");
		} else {
			rtrnVal = extractMiddle(inStr, size, extra2right);
		}
		return rtrnVal;
	},

	centerInStr2: function(inStr, outStr, extra2right) {
		var inSize = inStr.length;
		var outSize = outStr.length;
		var len = Math.floor( (outSize - inSize) /2);
		var re;
		var rtrnVal;

		if (inSize <= outSize) {
			if (extra2right)
				re = new RegExp("(.{"+len+"})(.{" + inSize + "})(.*)");
			else
				re = new RegExp("(.*)(.{" + inSize + "})(.{"+len+"})");

			rtrnVal = outStr.replace(re, "$1" + inStr + "$3");
		} else {
			rtrnVal = extractMiddle(inStr, outSize, extra2right);
		}

		return rtrnVal;
	},

	centerInStr3: function(inStr, outStr, extra2right) {
	    var outSize = outStr.length;
		var inSize = inStr.length;
	    var len = Math.floor(outSize/2);
		var re;

		if (extra2right)
			re = new RegExp("(.{" + len + "})(.*)");
		else
			re = new RegExp("(.*)(.{" + len + "})");

		return outStr.replace(re, "$1" + inStr + "$2");
	},
	

    back2forward: function(dataStr) {
        return dataStr.replace(/\\/g, "/");
    },

    forward2back: function(dataStr) {
        return dataStr.replace(/\//g, "\\");
    },

    return2br: function(dataStr) {
        return dataStr.replace(/(\r\n|\r|\n)/g, "<br />");
    },

    
    //Convert MS new lines CRLF
    ms_return2br: function(dataStr) {
        return dataStr.replace(/\r\n/, '<br />');
    },
    
    //Itemize characters to remove
    cleanString: function (str) {
        return str.replace(/[\(\)\.\-\s,]/g, "");
    },

    //Remove all non-digits
    remove_non_digits: function (str) {
        return str.replace(/[^\d]/g, "");
    },

    alpha2numericPhone: function(phoneStr) {
        var newStr = phoneStr.replace(/[a-zA-Z]/g, alpha2number);
        
        return this.checkReplaceParm(newStr);
        function alpha2number(char) {
            var rtrnVal = null;
            switch (char.toLowerCase()) {
            case "a": case "b": case "c":
                rtrnVal = "2";
                break;
            case "d": case "e": case "f":
                rtrnVal = "3";
                break;
            case "g": case "h": case "i":
                rtrnVal = "4";
                break;
            case "j": case "k": case "l":
                rtrnVal = "5";
                break;
            case "m": case "n": case "o":
                rtrnVal = "6";
                break;
            case "p": case "q": case "r": case "s":
                rtrnVal = "7";
                break;
            case "t": case "u": case "v":
                rtrnVal = "8";
                break;
            case "w": case "x": case "y": case "z":
                rtrnVal = "9";
                break;
            }
            return rtrnVal;
        }
    },

    checkReplaceParm: function(str) {
        /* Check browser supports functions in replace */
        if (/^\s*function\s+alpha2number/.test(str)) {
            alert("This browser does not support using a function as a parameter for replace.");
            return "";
        }
        else {
            return str;
        }
    },

    cnvrt2Upper: function(str) {
        return str.toLowerCase().replace(/\b[a-z]/g, cnvrt);
        function cnvrt() {
            return arguments[0].toUpperCase();
        }
    },

    // this version is less efficient than the other one
    cnvrt2title2: function(str) {
        return str.toLowerCase().replace(/\b\w+\b/g, cnvrt);
        function cnvrt() {
            if (arguments[arguments.length -2] == 0)
                return arguments[0].replace(/^[a-z]/, cnvrt2);
            else if (/^(a|about|after|an|and|at|by|for|from|in|into|nor|of|on|onto|over|the|to|up|with|within)$/.test(arguments[0]) )
                return arguments[0];
            else
                return arguments[0].replace(/^[a-z]/, cnvrt2);
        }
        function cnvrt2() {
            return arguments[0].toUpperCase();
        }
    },

    
    cnvrt2title: function(str) {
        var re = new RegExp(/^(a|about|after|an|and|at|by|for|from|in|into|nor|of|on|onto|over|the|to|up|with|within)$/);        
        // don't convert upper case to lower!
        // return str.toLowerCase().replace(/\b([a-z])(\w*)\b/g, cnvrt);
        return str.replace(/\b([a-z])(\w*)\b/g, cnvrt);
        function cnvrt() {
            if (re.test(arguments[0]) && arguments[arguments.length-2])
                return arguments[0];
            else
                return arguments[1].toUpperCase() + arguments[2];
        }
    },

    normalize: function(str, replaceWith) {
		if ( replaceWith == null || typeof replaceWith == 'undefined' ) {
			replaceWith = ' ';
		}
		var regExp = /\s+/g;
		return str.replace(regExp, replaceWith);
    }
};
