var t = undefined;
function show_tip_mode(mode){
   clearTimeout(t);
   switch(mode){
   case ALPHA:
      tip.innerText = "A";
      tip.style.backgroundColor = "Gainsboro";
      break;
   case HIRA:
      tip.innerText = "あ";
      tip.style.backgroundColor = "orange";
      break;
   case KATA:
      tip.innerText = "ア";
      tip.style.backgroundColor = "GreenYellow";
      break;
   }
   tip.style.opacity = "1";
   t = setTimeout(function(){ tip.style.opacity = "0";}, 1000);
}

function getKey(e){
   if (65 <= e.keyCode && e.keyCode <= 90){
      if (e.shiftKey)
         return "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[e.keyCode-65];
      else
         return "abcdefghijklmnopqrstuvwxyz"[e.keyCode-65];
   }
   if (48 <= e.keyCode && e.keyCode <= 57){
      if (e.shiftKey)
         return ")!@#$%^&*("[e.keyCode-48];
      else
         return "0123456789"[e.keyCode-57];
   }
   if (186 <= e.keyCode && e.keyCode <= 192){
      if (e.shiftKey)
         return ":_<_>?~"[e.keyCode-186];
      else
         return ";=,-./`"[e.keyCode-186];
   }
   if (219 <= e.keyCode && e.keyCode <= 222){
      if (e.shiftKey)
         return "{|}\""[e.keyCode-219];
      else
         return "[\\]'"[e.keyCode-219];
   }
   if (e.keyCode == 32)
      return " "
   return undefined;
}

function exec_text_operator(textop_orig){
   var textop = {kana:textop_orig.kana, num:textop_orig.num};
   if (typeof(textop_orig.kana) == typeof([])) {
      textop.kana = textop_orig.kana[0];
   }

   var target = document.activeElement;
   start = target.selectionStart;
   target.value =
      (target.value.slice(0,start-textop.num)+
       textop.kana+target.value.slice(start));
   target.selectionStart = start-textop.num+textop.kana.length;
   target.selectionEnd = target.selectionStart;
}

function input_handler(e){
   c = getKey(e);

   if (c=='j' && e.ctrlKey && skk.input_mode == ALPHA){
      e.preventDefault();
      skk.switch_to_hira();
      skk.last_translated_kanji_list = undefined;
      show_tip_mode(HIRA);
   } else if (c=='l' && (skk.input_mode == HIRA ||
                         skk.input_mode == KATA )) {
      e.preventDefault();
      skk.switch_to_alpha();
      skk.last_translated_kanji_list = undefined;
      show_tip_mode(ALPHA);
   } else if (c=='q' && skk.input_mode == HIRA) {
      e.preventDefault();
      skk.switch_to_kata();
      skk.last_translated_kanji_list = undefined;
      show_tip_mode(KATA);
   } else if (c=='q' && skk.input_mode == KATA) {
      e.preventDefault();
      skk.switch_to_hira();
      skk.last_translated_kanji_list = undefined;
      show_tip_mode(HIRA);
   } else if (c==' '){
      e.preventDefault();
      exec_text_operator(skk.hit_space());
   } else if (e.keyCode == 8){
      e.preventDefault();
      exec_text_operator(skk.hit_backspace());
      skk.last_translated_kanji_list = undefined;
   } else if ((isAlpha(c) || c=="-"||c=="!"||c=="?"||c=="."||c==",")
              && !e.ctrlKey && !e.metaKey){
      e.preventDefault();
      exec_text_operator(skk.input_char(c));
   }
}

var textareas = document.getElementsByTagName("textarea");
for (var i=0;i<textareas.length;i++){
   textareas[i].addEventListener("keydown", input_handler, true);
}
var tip = document.createElement("div");
tip.style.backgroundColor = "orange";
tip.style.position = "fixed";
tip.style.left = "5px";
tip.style.top  = "5px";
tip.style.fontSize = "4em";
tip.style.WebkitBorderRadius = "5px";
tip.style.opacity = "0";
tip.style.WebkitTransition = "opacity 0.3s linear";
tip.innerText = "A";
document.body.appendChild(tip);

var skk = new SKK();

