// ==UserScript==
// @name          mixi hotkey
// @namespace     http://blog.fkoji.com/
// @description	  add hotkey of mixi to your firefox
// @include       http://mixi.jp/*
// ==/UserScript==

(function() {

 document.addEventListener("keydown", my_key_down, true);
 document.addEventListener("keyup", my_key_up, true);
 var id = false;
 if (!location.href.match(/view_album\.pl/) &&
     !location.href.match(/view_bbs\.pl/) &&
     !location.href.match(/view_item\.pl/) &&
     !location.href.match(/view_community\.pl/) ) {
  location.href.match(/[&\?]owner_id=(\d+)/);
  if (RegExp.$1) {
   id = RegExp.$1;
  } else {
   location.href.match(/[&\?]id=(\d+)/);
   if (RegExp.$1) {
    id = RegExp.$1;
   }
  }
 }
 var ignore = false;

 var input = document.getElementsByTagName("input");
 var textarea = document.getElementsByTagName("textarea");
 for (i = 0; i < input.length; i++) {
  input[i].addEventListener("focus", ignore_key, true);
  input[i].addEventListener("blur", listen_key, true);
 }
 for (i = 0; i < textarea.length; i++) {
  textarea[i].addEventListener("focus", ignore_key, true);
  textarea[i].addEventListener("blur", listen_key, true);
 }

 function ignore_key() {
  ignore = true;
 }
 function listen_key() {
  ignore = false;
 }

 function my_key_up(evt) {
  if (evt.keyCode == 17) {
   ignore = false;
  }
 }

 function my_key_down(evt) {
  if (ignore) {
   return;
  }
  if (evt.keyCode == 17) {
   ignore = true;
   return;
  }
  // a : add mymixi
  if (evt.keyCode == 65) {
   if (id) {
    location.href = 'http://mixi.jp/add_friend.pl?id=' + id;
   }
  }
  // b : bookmark
  else if (evt.keyCode == 66) {
   if (id) {
    location.href = 'http://mixi.jp/add_bookmark.pl?id=' + id;
   } else {
    location.href = 'http://mixi.jp/list_bookmark.pl';
   }
  }
  // c : community
  else if (evt.keyCode == 67) {
   if (id) {
    location.href = 'http://mixi.jp/list_community.pl?id=' + id;
   } else {
    location.href = 'http://mixi.jp/list_community.pl';
   }
  }
  // d : diary
  else if (evt.keyCode == 68) {
   if (id) {
    location.href = 'http://mixi.jp/list_diary.pl?id=' + id;
   } else {
    location.href = 'http://mixi.jp/list_diary.pl';
   }
  }
  // f : photo
  else if (evt.keyCode == 70) {
   if (id) {
    location.href = 'http://mixi.jp/list_album.pl?id=' + id;
   } else {
    location.href = 'http://mixi.jp/list_album.pl';
   }
  }
  // h : home
  else if (evt.keyCode == 72) {
   location.href = 'http://mixi.jp/home.pl';
  }
  // i : invite
  else if (evt.keyCode == 73) {
   location.href = 'http://mixi.jp/invite.pl';
  }
  // j : next id
  else if (evt.keyCode == 74) {
   if (id) {
    var nextId = id - 0 + 1;
    location.href = 'http://mixi.jp/show_friend.pl?id=' + nextId;
   }
  }
  // k : previous id
  else if (evt.keyCode == 75) {
   if (id) {
    var prevId = id - 1;
    location.href = 'http://mixi.jp/show_friend.pl?id=' + prevId;
   }
  }
  // l : log
  else if (evt.keyCode == 76) {
   location.href = 'http://mixi.jp/show_log.pl';
  }
  // m : message
  else if (evt.keyCode == 77) {
   if (id) {
    location.href = 'http://mixi.jp/send_message.pl?id=' + id;
   } else {
    location.href = 'http://mixi.jp/list_message.pl';
   }
  }
  // n : news
  else if (evt.keyCode == 78) {
   location.href = 'http://news.mixi.jp/list_news.pl';
  }
  // p : profile
  else if (evt.keyCode == 80) {
   if (id) {
    location.href = 'http://mixi.jp/show_friend.pl?id=' + id;
   } else {
    location.href = 'http://mixi.jp/show_profile.pl';
   }
  }
  // r : review
  else if (evt.keyCode == 82) {
   if (id) {
    location.href = 'http://mixi.jp/list_review.pl?id=' + id;
   } else {
    location.href = 'http://mixi.jp/list_review.pl';
   }
  }
  // s : search
  else if (evt.keyCode == 83) {
   location.href = 'http://mixi.jp/search.pl';
  }
  // t : top
  else if (evt.keyCode == 84) {
   if (id) {
    location.href = 'http://mixi.jp/show_friend.pl?id=' + id;
   } else {
    location.href = 'http://mixi.jp/home.pl';
   }
  }
  // u : music
  else if (evt.keyCode == 85) {
   if (id) {
    location.href = 'http://music.mixi.jp/list_music.pl?id=' + id;
   } else {
    location.href = 'http://music.mixi.jp/list_music.pl';
   }
  }
 }
})();
