/* グローバル変数の初期化 */
var alphanumonly = new Object;
alphanumonly.params = new Object;

/* ------------------------------------------------------------ */
/* 入力開始処理 */
/* ------------------------------------------------------------ */
alphanumonly.textInputStart = function(evt) {
  var target = dom.event.target(evt);
  dom.event.addEventListener(target, 'keydown', alphanumonly.textInputCheck);
  dom.event.addEventListener(target, 'keyup', alphanumonly.textInputCheck);
  alphanumonly.params['target'] = target;
  alphanumonly.textInputCheck();
};

/* ------------------------------------------------------------ */
/* 入力終了処理
/* ------------------------------------------------------------ */
alphanumonly.textInputEnd = function(evt) {
  var target = dom.event.target(evt);
  dom.event.removeEventListener(target, 'keydown', alphanumonly.textInputCheck);
  dom.event.removeEventListener(target, 'keyup', alphanumonly.textInputCheck);
  alphanumonly.textInputCheck();
  alphanumonly.params['target'] = null;
};

/* ------------------------------------------------------------ */
/* 入力文字のチェック */
/* ------------------------------------------------------------ */
alphanumonly.textInputCheck = function(evt) {
  var elm = alphanumonly.params['target'];
  /* 半角英数以外の文字を除外 */
  if( elm && elm.value && elm.value.match(/[^\da-zA-Z\-\_]/) ) {
    /* 数字以外の文字の位置を特定 */
    var pos = elm.value.search(/[^\da-zA-Z\-\_]/);
    /* 数字以外の文字を削除 */
    elm.value = elm.value.replace(/[^\da-zA-Z\-\_]/g, '');
    /* カーソルの位置を変更 */
    if(elm.setSelectionRange) {
      /* Firefox,Opera,Safariの場合 */
      elm.setSelectionRange(pos,pos); 
    } else if(elm.createTextRange) {
      /* Internet Explorerの場合 */
      var range = elm.createTextRange();
      range.move('character', pos);
      range.select();
    }
  }
};

/* ------------------------------------------------------------ */
/* デフォルトアクションの抑止 */
/* ------------------------------------------------------------ */
alphanumonly.forbidAction = function(evt) {
  dom.event.preventDefault(evt);
};

/* ------------------------------------------------------------ */
/* HTML文書が読み込まれたときに実行させる処理 */
/* ------------------------------------------------------------ */
alphanumonly.initDocument = function() {
  /* テキストボックスのリストを取得 */
  var inputs = document.getElementsByTagName('INPUT');
  /* class属性値に'numonly'がセットされたテキストボックスに */
  /* イベントリスナーをセット */
  for( var i=0; i<inputs.length; i++ ) {
    var elm = inputs.item(i);
    if(elm.className == 'alphanumonly') {
      /* 入力開始時の処理 */
      dom.event.addEventListener(elm, 'focus', alphanumonly.textInputStart);
      /* 入力終了時の処理 */
      dom.event.addEventListener(elm, 'blur', alphanumonly.textInputEnd);
      /* 右クリックによるコンテキストメニュー表示を禁止 */
      /* （ペーストを禁止するため） */
      // dom.event.addEventListener(elm, 'contextmenu', alphanumonly.forbidAction);
      /* ペーストの禁止（Internet Explorerのみ有効） */
      // dom.event.addEventListener(elm, 'paste', alphanumonly.forbidAction);
      /* IME起動を禁止（Internet Explorerのみ有効） */
      elm.style.imeMode = 'disabled';
    }
  }
};

dom.event.addEventListener(window, 'load', alphanumonly.initDocument);

