var Generators = {

  "delicious": function( pagedata ) {
    return {
      type     : "type1",
      name     : "delicious",
      get_url  : "http://badges.del.icio.us/feeds/json/url/data"+ pagedata.hash,
      book_url : 'http://del.icio.us/post?url=";' + encodeURIComponent( pagedata.url ) + '"&title="' + encodeURIComponent( pagedata.title ) + '"',
      num_url  : "",
      img_url  : "http://hilink.info/bookmark.icon/bookmark_delicious.gif"
    }
  },
  "yahoo": function( pagedata ) {
    return {
      type     : "type2",
      name     : "yahoo",
      get_url  : "http://bookmarks.yahoo.co.jp/url?url=" + pagedata.url_after,
      book_url : "http://bookmarks.yahoo.co.jp/bookmarklet/showpopup?t=" + encodeURIComponent( pagedata.title ) +  "&u=" + encodeURIComponent( pagedata.url ) + "&ei=UTF-8",
      num_url  : "<img src='http://num.bookmarks.yahoo.co.jp/image/small/" + pagedata.url_after + "' />",
      img_url  : "http://hilink.info/bookmark.icon/bookmark_yahoo.gif"
    }
  },
  "hatena": function( pagedata ) {
    return {
      type     : "type1",
      name     : "hatena",
      get_url  : "http://api.b.st-hatena.com/entry.count?url=" + pagedata.url + "&callback=?",
      book_url : 'http://b.hatena.ne.jp/add?mode=confirm&amp;url="' + encodeURIComponent( pagedata.url ) + '"&title="' + encodeURIComponent( pagedata.title ) + '"',
      num_url  : "http://b.hatena.ne.jp/entry/" + pagedata.host_pathname,
      img_url  : "http://hilink.info/bookmark.icon/bookmark_hatena.gif"
    }
  },
  "livedoor": function( pagedata ) {
     return {
       type     : "type2",
       name     : "livedoor",
       get_url  : "http://clip.livedoor.com/page/" + pagedata.url_after,
       book_url : 'http://clip.livedoor.com/redirect?link=' + encodeURIComponent( pagedata.url ) + '&title=' + encodeURIComponent( pagedata.title ),
       num_url  : "<img src='http://image.clip.livedoor.com/counter/" + pagedata.url_after + "' />",
       img_url  : "http://hilink.info/bookmark.icon/bookmark_livedoor.gif"
     }
  },
  "twitter": function( pagedata ) {
    return {
      name     : "twitter",
      book_url : 'http://twitter.com/home?status=タイトル：' + pagedata.title + "%20URL：" + pagedata.url,
      //img_url  : "http://a1.twimg.com/a/1259091217/images/favicon.ico"
      img_url  : "http://a2.twimg.com/a/1259091217/images/download_t_logo_outline.png"
    }
  },
  "fc2": function( pagedata ) {
     return {
       type     : "type2",
       name     : "fc2",
       get_url  : "http://bookmark.fc2.com/search/detail?url=" + pagedata.url,
       book_url : 'http://bookmark.fc2.com/user/post?url=' + encodeURIComponent( pagedata.url ) + '&title=' + encodeURIComponent( pagedata.title ),
       num_url  : "<img src='http://bookmark.fc2.com/image/users/" + pagedata.url + "' />",
       img_url  : "http://hilink.info/bookmark.icon/bookmark_fc2.gif"
     }
  }
};

function checkType( service, pagedata ) {

  if ( !Generators[service] ) {
      alert( "無効引数 ： " + service );
      return false;
  }
  return true;
}

function socialBookmark() {

  for( var j = 0; j < $(".bookmark-list").length; j++  ){

    var pagedata = {
      index_num      : j,
      url            : $(".sbm-title").eq(j).attr("href"),
      url_after      : $(".sbm-title").eq(j).attr("href").replace(/#/g,"%23"),
      hash           : "?hash=" + $.md5( $(".sbm-title").eq(j).attr("href") ) + "&callback=?", //delicious用
      host_pathname  : $(".sbm-title").eq(j).attr("href").replace(/http(s)?:\/\//g,""),
      title          : $(".sbm-title").eq(j).text(),
      regist         : "regist",
      num            : "num"
    };

    for( var i = 0; i < arguments.length; i++ ) {

      var service = arguments[i];

      if( checkType( service, pagedata ) ) {
        var data = Generators[service]( pagedata );
        var make = new BookmarkRregistration( data, pagedata );
        make.imagButton();
        make.bookmarkNum();
      } else {
        return;
      }
    }
  }
  $(".twitter-regist img").attr("title", "twitterでつぶやく").attr("width", "13").attr("height", "16");
};

var BookmarkRregistration = function( data, pagedata ) {

  this.data = data;
  this.pagedata = pagedata;
};

BookmarkRregistration.prototype.imagButton = function() {

  $( ".bookmark-list" ).eq( this.pagedata.index_num ).append(
    $( "<li></li>" ).addClass( this.data.name ).append(
      $( "<a></a>" ).addClass( this.data.name + "-" + this.pagedata.regist + " " + this.pagedata.regist )
        .attr( "href", this.data.book_url )
        .attr( "target", "_blank" ).append(
          $( "<img>" )
            .attr( "src", this.data.img_url )
            .attr( "title", this.data.name + "ブックマークに登録" )
        )
    )
  )
};

BookmarkRregistration.prototype.bookmarkNum = function() {

  if( this.data.type == "type1" ) {
    this.returnJson( this.data, this.pagedata );
  }
  if( this.data.type == "type2" ) {
    this.returnImage( this.data, this.pagedata );
  }
  if( !this.data.type ) {
    //処理なし
  }
};

//【type1】結果を数値で返す
BookmarkRregistration.prototype.returnJson = function( data, pagedata ) {

  $.ajax({

    url  : data.get_url,
    type : 'GET',
    dataType: 'json',
    timeout: 1000,
    success: function(jsondata) {

      if( jsondata ) {

        if( data.name == "delicious" && jsondata[0] ) {

          $( ".bookmark-list ." + data.name ).eq( pagedata.index_num ).append(
            $( "<a></a>" ).addClass( data.name + pagedata.num )
              .html( jsondata[0].total_posts + "USERS" )
              .attr("href", 'http://del.icio.us/url/' + jsondata[0].hash )
              .attr("target", "_blank")
          )
        }

        if( data.name == "hatena" ) {
          $( ".bookmark-list ." + data.name ).eq( pagedata.index_num ).append(
            $( "<a></a>" ).addClass( data.name + pagedata.num )
              .html(jsondata + "USERS")
              .attr("href", data.num_url)
              .attr("target", "_blank")
          )
        }
      }

    },
    error: function() {
      alert("Ajax err");
    }
  });
};

//【type2】結果を画像で返す
BookmarkRregistration.prototype.returnImage = function( data, pagedata ) {

  $( ".bookmark-list ." + data.name ).eq( pagedata.index_num ).append(
    $( "<a></a>" ).addClass( data.name + pagedata.num )
    .attr("href", data.get_url)
    .attr("target", "_blank")
    .append(data.num_url)
  )
};

