// © 2004-2008, Applied Geographics, Inc.  All rights reserved.

RestrictedTextBox_previousValue = null;
RestrictedTextBox_isCtrl = false;
RestrictedTextBox_isPaste = false;

function RestrictedTextBox_keyDown(event) {
  var keyCode = document.all ? event.keyCode : event.which;
  var target = document.all ? event.srcElement : event.target;

  if (event.keyCode == 13) {
    event.keyCode = 9;
    return true;
  }
  
  if (!RestrictedTextBox_isCtrl) {
    RestrictedTextBox_isCtrl = keyCode == 17;
  }
  else {
    if (!RestrictedTextBox_isPaste) {
      RestrictedTextBox_isPaste = keyCode == 86;
      if (RestrictedTextBox_isPaste) {
        RestrictedTextBox_previousValue = target.value;
      }
    }
  }
}

function RestrictedTextBox_keyPress(event) {
  var keyCode = document.all ? event.keyCode : event.which;
  var target = document.all ? event.srcElement : event.target;
  
  if (keyCode < 32) {
    return true;
  }
    
  return RestrictedTextBox_isCharValid(target, keyCode);
}

function RestrictedTextBox_keyUp(event) {
  var keyCode = document.all ? event.keyCode : event.which;
  var target = document.all ? event.srcElement : event.target;

  if (keyCode == 17) {
    RestrictedTextBox_isCtrl = false;
  }
  
  if (RestrictedTextBox_isPaste) {
    for (var i = 0; i < textBox.value.length; ++i) {
      keyCode = target.value.charCodeAt(i);
      if (!RestrictedTextBox_isCharValid(target, keyCode)) {
        target.value = RestrictedTextBox_previousValue;
        break; 
      }
    }
    
    RestrictedTextBox_isPaste = false;
  }
  
  return true;
}

function RestrictedTextBox_isCharValid(textBox, keyCode) {
  var validChars = eval(textBox.id + "_validChars");

  for (var i = 0; i < validChars.length; ++i) {
    if (validChars.charCodeAt(i) == keyCode) {
      return true;
    }
  }
  
  return false;
}

