// ==UserScript==
// @name           bura3_user_link
// @namespace      http://www.ai-mai.net/
// @description    add user link
// @include        http://m*.3gokushi.jp/*
// ==/UserScript==
(function(){
  //XPath
  function xpath(query) {return document.evaluate(query, document, null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);}
  //データ取得
  function GetData(){var getData = eval(GM_getValue(location.host + "userLink"));return getData}
  //データ追加
  function AddData(getData){
    //入力用ダイアログ
    var linkTitle = window.prompt("ショートカットの名前を入力してください。","");
    var linkUri = window.prompt("ショートカットのURLを入力してください。",location.href);
    if(!linkTitle || !linkUri){return;}
    //undefinedの判定
    if(getData){getData[getData.length] = {"userLink":{"No":getData.length - 1,"title":linkTitle, "link":linkUri}};}
    else {getData = [{"userLink":{"No":0,"title":linkTitle, "link":linkUri}}];}
    //データセット
    GM_setValue(location.host + "userLink",getData.toSource());
  };
  //データ削除
  function DelData(i){
    var dgd = GetData();
    if(confirm(dgd[i].userLink.title + "を削除しますか？"))
    {
      delete dgd[i];
      var k = 0;
      var setData = new Array();
      for(j=0; j<dgd.length; j++){
        if(dgd[j])
        {
          setData[k] = {"userLink":{"No":k,"title":dgd[j].userLink.title, "link":dgd[j].userLink.link}};
          k++;
        }
      }
      if(setData.length){GM_setValue(location.host + "userLink",setData.toSource());}
      else{GM_setValue(location.host + "userLink","");}
    }
    else{
      return;
    }
  }
  //表示用
  function disp(){
    //#sidebar取得
    var getSideBar = xpath("//div[@id='sidebar']");
    if(getSideBar){
      //ヘッダー
      var newElemHtmlHead = "<div class='sideBox' name='usrl'><div class='sideBoxHead'>" +
                            "<h3><strong>ユーザーリンク</strong></h3>" +
                            "</div>" + 
                            "<div class ='sideBoxInner'>" +
                            "<ul>";
      //リンク部分
      userLinkData = GetData();
      var newElemBody = "";
      if(userLinkData){
        for(i=0; i < userLinkData.length; i++)
        {
          newElemBody += "<li> <a href ='" + userLinkData[i].userLink.link + "'>" + userLinkData[i].userLink.title + "</a> </li>";
        }
      }
      else{
        newElemBody = "<li>データ無し</li>";
      }
      //フッター
      var newElemHtmlFoor = "</div> </div>";
      //InnerHTMLの設定
      var newElemHtml = newElemHtmlHead + newElemBody + newElemHtmlFoor;
      //オブジェクトの作成
      var newElem = document.createElement('div');
      newElem.innerHTML = newElemHtml;
      newElem = newElem.firstChild;
      var ce = xpath("//div[@name='usrl']")
      //オブジェクトを#sidebarに追加
      if(ce.snapshotItem(0)){
        ce.snapshotItem(0).innerHTML = newElem.innerHTML;
      }
      else{
        getSideBar.snapshotItem(0).insertBefore(newElem ,getSideBar.snapshotItem(0).firstChild)
      }
    }
    var ce = xpath("//div[@name='usrl']");
    ce.snapshotItem(0).firstChild.addEventListener("dblclick",function(){AddData(GetData());disp();},false);
    var ceDel = xpath("//div[@name='usrl']/div[2]/ul/li")
    for(i=0; i < ceDel.snapshotLength; i++)
    {
      (function(n){
        ceDel.snapshotItem(n).addEventListener("dblclick",function(){DelData(n);disp();},false);
      })(i);
    }
  }
disp();

})();
