	var reOneOrMoreDigits = /[\d+]/;
	var reNoDigits = /[^\d]/gi;

	function doMask(textBox) 
	{
		var keyCode = event.which ? event.which : event.keyCode;
	
		// enter, backspace, delete and tab keys are allowed thru
		if(keyCode == 13 || keyCode == 8 || keyCode == 9 || keyCode == 46) return true;	
	
		// get character from keyCode....dealing with the "Numeric KeyPad" keyCodes so that it can be used
		var keyCharacter = cleanKeyCode(keyCode);
	
		// grab the textBox value and the mask
		var val = textBox.value;
		var mask = textBox.mask;
	
		// simple Regex to check if key is a digit
		if(reOneOrMoreDigits.test(keyCharacter) == false) return false;
	
		// get value minus any masking by removing all non-numerics
		val = val.replace(reNoDigits,'');			
	
		// add current keystroke
		val += keyCharacter;
	
		// mask it...val holds the existing TextBox.value + the current keystroke
		textBox.value = val.maskValue(mask);
		setCaretAtEnd(textBox);
		return false;
	}
	
	// puts starting chars in field
	function onFocusMask(textBox) 
	{
		var val = textBox.value;
		var mask = textBox.mask;
	
		if(val.length == 0 || val == null) {
			var i = mask.indexOf('#');
			textBox.value = mask.substring(0,i);
		}
	
		setCaretAtEnd(textBox);
		// set just in case.
		textBox.maxlength = mask.length;
	}
	
	// blank field if no digits entered
	function onBlurMask(textBox) 
	{
		var val = textBox.value;
	
		// if no digits....nada entered.....blank it.
		if(reOneOrMoreDigits.test(val) == false) {
			textBox.value = '';
		}
	}
	
	String.prototype.maskValue = function(mask) 
	{
		var retVal = mask;
		var val = this;
	
		//loop thru mask and replace #'s with current value one at a time
		for(var i=0;i<val.length;i++) {
			retVal = retVal.replace(/#/i, val.charAt(i));
		}
	
		// get rid of rest of #'s
		retVal = retVal.replace(/#/gi, "");
		return retVal;
	}
	
	// The Numeric KeyPad returns keyCodes that ain't all that workable.
	// ie: KeyPad '1' returns keyCode 97 which String.fromCharCode converts to an 'a'.
	// This cheesy way allows the Numeric KeyPad to be used
	function cleanKeyCode(key) 
	{
		switch(key) {
			case 96: return "0"; break;
			case 97: return "1"; break;
			case 98: return "2"; break;
			case 99: return "3"; break;
			case 100: return "4"; break;
			case 101: return "5"; break;
			case 102: return "6"; break;
			case 103: return "7"; break;
			case 104: return "8"; break;
			case 105: return "9"; break;
			default: return String.fromCharCode(key); break;
		}
	}
	
	function setCaretAtEnd (field) 
	{
		if (field.createTextRange) {
			var r = field.createTextRange();
			r.moveStart('character', field.value.length);
			r.collapse();
			r.select();
		}
	}

	function currencyFormat(fld, milSep, decSep, e) 
	{
		var sep = 0;
		var key = '';
		var i = j = 0;
		var len = len2 = 0;
		var strCheck = '0123456789';
		var aux = aux2 = '';
		var whichCode = (window.Event) ? e.which : e.keyCode;
	
		if (whichCode == 13) return true;  // Enter
		if (whichCode == 8) return true;  // Delete (Bug fixed)
		key = String.fromCharCode(whichCode);  // Get key value from key code
		if (strCheck.indexOf(key) == -1) return false;  // Not a valid key
		len = fld.value.length;
		for(i = 0; i < len; i++)
			if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break;
		aux = '';
		for(; i < len; i++)
			if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i);
		aux += key;
		len = aux.length;
		if (len == 0) fld.value = '';
		if (len == 1) fld.value = '0'+ decSep + '0' + aux;
		if (len == 2) fld.value = '0'+ decSep + aux;
		if (len > 2) {
			aux2 = '';
			for (j = 0, i = len - 3; i >= 0; i--) {
				if (j == 3) {
					aux2 += milSep;
					j = 0;
				}
				aux2 += aux.charAt(i);
				j++;
			}
			fld.value = '';
			len2 = aux2.length;
			for (i = len2 - 1; i >= 0; i--)
				fld.value += aux2.charAt(i);
			fld.value += decSep + aux.substr(len - 2, len);
		}
		return false;
	}

	function removeCommas(strValue) {
  	var objRegExp = /,/g; //search for commas globally

  	//replace all matches with empty strings
  	return strValue.replace(objRegExp,'');
	}

	function addCommas(nStr)
	{
		nStr += '';
		x = nStr.split('.');
		x1 = x[0];
		x2 = x.length > 1 ? '.' + x[1] : '';
		var rgx = /(\d+)(\d{3})/;
		while (rgx.test(x1)) {
			x1 = x1.replace(rgx, '$1' + ',' + '$2');
		}
		return x1 + x2;
	}