/******************************************************************
 *  sll-bookmark.js
 *  SLL.Bookmark - ブックマーク画像取得クラス
 *  (c) 2008 shiz
 *  mail   : shiz.h.feedback+shizlabs@gmail.com
 *  URL    : http://shizlabs.amonya.com/
 *  version: 1.0.0 (2008-06-02)
 ******************************************************************/
if (typeof(SLL) == 'undefined'){
	var SLL = {};
}

/**
 * ブックマーク画像取得クラス（コンストラクタ）
 * 引数を省略した場合、Javascriptの呼び出し元のURLを設定
 * 
 * @param string url ブックマーク数を表示するURL
 */
SLL.Bookmark = function(url){
	this.url = url ? url : document.location.href;
	this.md5 = typeof(CybozuLabs) != 'undefined';
}

SLL.Bookmark.Info = {
	"del.icio.us":{
		name: 'del.icio.us',
		link: 'http://del.icio.us/url/',
		src: 'http://del.icio.us/feeds/img/savedcount/',
		height: 17
	},
	"hatena": {
		name: 'はてなブックマーク',
		link: 'http://b.hatena.ne.jp/entry/',
		src: {
			S: 'http://b.hatena.ne.jp/entry/image/small/',
			M: 'http://b.hatena.ne.jp/entry/image/normal/',
			L: 'http://b.hatena.ne.jp/entry/image/large/'
		},
		height: {
			S: 11,
			M: 13,
			L: 15
		}
	},
	"livedoor": {
		name: 'livedoor clip',
		link: 'http://clip.livedoor.com/page/',
		src: {
			S: 'http://image.clip.livedoor.com/counter/small/',
			M: 'http://image.clip.livedoor.com/counter/medium/',
			L: 'http://image.clip.livedoor.com/counter/large/'
		},
		height: {
			S: 12,
			M: 16,
			L: 20
		}
	},
	"yahoo": {
		name: 'Yahoo!ブックマーク',
		link: 'http://bookmarks.yahoo.co.jp/url?url=',
		src: {
			S: 'http://num.bookmarks.yahoo.co.jp/image/small/',
			M: 'http://num.bookmarks.yahoo.co.jp/image/medium/',
			L: 'http://num.bookmarks.yahoo.co.jp/image/large/'
		},
		height: {
			S: 15,
			M: 17,
			L: 20
		}
	},
	"buzzurl":{
		name: 'Buzzurl',
		link: 'http://buzzurl.jp/entry/',
		src: 'http://api.buzzurl.jp/api/counter/',
		height: 12
	},
	"fc2":{
		name: 'fc2',
		link: 'http://bookmark.fc2.com/search/detail?url=',
		src: 'http://bookmark.fc2.com/image/users/',
		height: 12
	}
};

SLL.Bookmark.prototype = {
	/**
	 * リンク付きのIMGタグのHTML文字列を取得
	 *
	 * @param string bookmark ブックマークの種類（SLL.Bookmark.Infoで定義）
	 * @param string size "S"・"M"・"L"。省略時は"S"。サイズが無いものは効果なし
	 * @return string HTML文字列
	 */
	getImageHTML: function(bookmark, size){
		if (bookmark == 'del.icio.us' && !this.md5){return '';}
		var html = '';
		var info = SLL.Bookmark.Info[bookmark];
		html += '<a href="'+this.getImageLink(bookmark)+'" target="_blank">';
		html += '<img src="'+this.getImageSrc(bookmark, size)+'"';
		html += ' alt="'+info.name+'"';
		html += ' title="'+info.name+'"';
		html += ' style="border:0;margin:1px;vertical-align:middle;"';
		html += ' />';
		html += '</a>';
		return html;
	},
	/**
	 * ブックマークを取得するURLの取得
	 *
	 * @return string 対象のURL
	 */
	getURL: function(){
		return this.url;
	},
	getImageSrc: function(bookmark, size){
		size = size ? size : 'S';
		var src = '';
		var info = SLL.Bookmark.Info[bookmark];
		switch (bookmark){
		case "del.icio.us":
			src += info.src;
			src += CybozuLabs.MD5.calc(this.url) + '?aggregate';
			break;
		case "hatena":
		case "livedoor":
		case "yahoo":
			src += info.src[size];
			src += this.url;
			break;
		case "buzzurl":
			src += info.src;
			src += this.url;
			break;
		case "fc2":
			src += info.src;
			src += this.url;
			break;
		}
		
		return src;
	},
	getImageHeight: function(bookmark, size){
		size = size ? size : 'S';
		var info = SLL.Bookmark.Info[bookmark];
		
		switch (bookmark){
		case "hatena":
		case "livedoor":
		case "yahoo":
			return info.height[size];
		default:
			return info.height;
		}
		
		return src;
	},
	getImageLink: function(bookmark){
		var info = SLL.Bookmark.Info[bookmark];
		switch (bookmark){
		case "del.icio.us":
			return info.link + CybozuLabs.MD5.calc(this.url);
		case "fc2":
			return info.link + encodeURIComponent(this.url);
		default:
			return info.link + this.url;
		}
	}
};

