var reOneOrMoreDigits = /[\d+]/;
var Pat1 = /^[0-9]*$/
var reNoDigits = /[^\d]/gi;
var status = false;

function doMask(textBox) {
	
	var keyCode = event.which ? event.which : event.keyCode;
	if(status && keyCode != 9){
		textBox.value = '';
		status = false;
	}
	
	
	// 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='';
	var maxLength = textBox.getAttribute('maxlength');
	for(var i=0;i<maxLength;i++) {
			mask = 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;
}

function onBlurMask(textBox) {

      var val = textBox.value;
      var rplval='';

      if(Pat1.test(val) == false || reOneOrMoreDigits.test(val) == false ) {
      for(i=0;i<val.length;i++)
                {
     if((val.charCodeAt(i)>=48 && val.charCodeAt(i)<=57))
  { 
       rplval=rplval+val.charAt(i);
  
  }
       
      }
      textBox.value = '';
}
if(rplval!='') {
textBox.value = rplval;
}
}


String.prototype.maskValue = function(mask) {
	
	var retVal = mask;

	var val = this;
	//loop thru mask and replace #'s with current value one at a time

	// better way of doing this ???

	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 setStatus(){
	status = true;
}
