text: /**
   * @author 夏の寒风
   * @time 2012-12-14
   */
  
  //自定义hashtable
  function Hashtable() {
      this._hash = new Object();
      this.put = function(key, value) {
          if (typeof (key) != "undefined") {
              if (this.containsKey(key) == false) {
                  this._hash[key] = typeof (value) == "undefined" ? null : value;
                  return true;
              } else {
                  return false;
              }
          } else {
              return false;
          }
      }
      this.remove = function(key) { delete this._hash[key]; }
      this.size = function() { var i = 0; for (var k in this._hash) { i++; } return i; }
      this.get = function(key) { return this._hash[key]; }
      this.containsKey = function(key) { return typeof (this._hash[key]) != "undefined"; }
      this.clear = function() { for (var k in this._hash) { delete this._hash[k]; } }
  }
  
  
  var emotions = new Array();
  var categorys = new Array();// 分组
  var uSinaEmotionsHt = new Hashtable();
  
  // 初始化缓存，页面仅仅加载一次就可以了
  $(function() {
  	var app_id = '1362404091';
  	$.ajax( {
  		dataType : 'jsonp',
  		url : 'https://api.weibo.com/2/emotions.json?source=' + app_id,
  		success : function(response) {
  			var data = response.data;
  			for ( var i in data) {
  				if (data[i].category == '') {
  					data[i].category = '默认';
  				}
  				if (emotions[data[i].category] == undefined) {
  					emotions[data[i].category] = new Array();
  					categorys.push(data[i].category);
  				}
  				emotions[data[i].category].push( {
  					name : data[i].phrase,
  					icon : data[i].icon
  				});
  				uSinaEmotionsHt.put(data[i].phrase, data[i].icon);
  			}
  		}
  	});
  });
  
  //替换
  function AnalyticEmotion(s) {
  	if(typeof (s) != "undefined") {
  		var sArr = s.match(/\[.*?\]/g);
  		if(null!=sArr && '' != sArr){
  			for(var i = 0; i < sArr.length; i++){
  				if(uSinaEmotionsHt.containsKey(sArr[i])) {
  					var reStr = "<img src=\"" + uSinaEmotionsHt.get(sArr[i]) + "\" height=\"22\" width=\"22\" />";
  					s = s.replace(sArr[i], reStr);
  				}
  			}
  		}
  		
  	}
  	return s;
  }
  
  (function($){
  	$.fn.SinaEmotion = function(target){
  		var cat_current;
  		var cat_page;
  		$(this).click(function(event){
  			event.stopPropagation();
  			var eTop = target.offset().top + target.height() + 15;
  			var eLeft = target.offset().left - 1;
  			
  			if($('#emotions .categorys')[0]){
  				$('#emotions').css({top: eTop, left: eLeft});
  				$('#emotions').toggle();
  				return;
  			}
  			$('body').append('<div id="emotions"></div>');
  			$('#emotions').css({top: eTop, left: eLeft});
  			$('#emotions').html('<div>正在加载，请稍候...</div>');
  			$('#emotions').click(function(event){
  				event.stopPropagation();
  			});
  			$('#emotions').html('<div style="float:right"><a href="javascript:void(0);" id="prev">&laquo;</a><a href="javascript:void(0);" id="next">&raquo;</a></div><div class="categorys"></div><div class="containers"></div>');
  			$('#emotions #prev').click(function(){
  				showCategorys(cat_page - 1);
  			});
  			$('#emotions #next').click(function(){
  				showCategorys(cat_page + 1);
  			});
  			showCategorys();
  			showEmotions();
  			
  		});
  		$('body').click(function(){
  			$('#emotions').remove();
  		});
  		$.fn.insertText = function(text){
  			this.each(function() {
  				if(this.tagName !== 'INPUT' && this.tagName !== 'TEXTAREA') {return;}
  				if (document.selection) {
  					this.focus();
  					var cr = document.selection.createRange();
  					cr.text = text;
  					cr.collapse();
  					cr.select();
  				}else if (this.selectionStart || this.selectionStart == '0') {
  					var 
  					start = this.selectionStart,
  					end = this.selectionEnd;
  					this.value = this.value.substring(0, start)+ text+ this.value.substring(end, this.value.length);
  					this.selectionStart = this.selectionEnd = start+text.length;
  				}else {
  					this.value += text;
  				}
  			});        
  			return this;
  		}
  		function showCategorys(){
  			var page = arguments[0]?arguments[0]:0;
  			if(page < 0 || page >= categorys.length / 5){
  				return;
  			}
  			$('#emotions .categorys').html('');
  			cat_page = page;
  			for(var i = page * 5; i < (page + 1) * 5 && i < categorys.length; ++i){
  				$('#emotions .categorys').append($('<a href="javascript:void(0);">' + categorys[i] + '</a>'));
  			}
  			$('#emotions .categorys a').click(function(){
  				showEmotions($(this).text());
  			});
  			$('#emotions .categorys a').each(function(){
  				if($(this).text() == cat_current){
  					$(this).addClass('current');
  				}
  			});
  		}
  		function showEmotions(){
  			var category = arguments[0]?arguments[0]:'默认';
  			var page = arguments[1]?arguments[1] - 1:0;
  			$('#emotions .containers').html('');
  			cat_current = category;
  			for(var i = 0;  i < emotions[category].length; ++i){
  				$('#emotions .containers').append($('<a href="javascript:void(0);" title="' + emotions[category][i].name + '"><img src="' + emotions[category][i].icon + '" alt="' + emotions[category][i].name + '" width="22" height="22" /></a>'));
  			}
  			$('#emotions .containers a').click(function(){
  				target.insertText($(this).attr('title'));
  				$('#emotions').remove();
  			});
  			 
  			$('#emotions .categorys a.current').removeClass('current');
  			$('#emotions .categorys a').each(function(){
  				if($(this).text() == category){
  					$(this).addClass('current');
  				}
  			});
  		}
  	}
  })(jQuery);
  