/**
 * @author poly 89490364a@gmail.com
 */
(function($){
	
	/**
	 * 获取信息面板
	 */
	function getPanel()
	{
		var panel=$("#panel");
		if (!panel.length) 
		{
			panel=$("<div id='panel'><span>您还可以输入<em>0</em>个字符</span></div>")
					.bind("show",showNotice)
					.bind("hide",hideNotice)
					.bind("txtChanged",showMsg);
			$("body").append(panel);
		}
		return panel;
	}
	
	/**
	 * 面板显示
	 */
	function showNotice(e)
	{
		var that=$(this);
		that.css({left:e.x,top:e.y}).stop(true,true).fadeIn(600);
	}
	
	/**
	 * 面板隐藏
	 */
	function hideNotice()
	{
		var that=$(this)
		that.hide();
	}
	
	
	/**
	 * 显示面板信息
	 */
	function showMsg(e)
	{
		var span=$("em",this);
		span.html(e.freeLength).removeClass().addClass(e.state);
	}
	
	$.fn.txtLenCtrl=function(){
		var panel=getPanel();
		
		/**
		 * 显示面板
		 */
		function showPanel()
		{
			var that=$(this);
			var event=new jQuery.Event("show");
			var offset=that.offset();
			event.x=offset.left;
			event.y=offset.top+that.outerHeight(true)-1;//-panel.outerHeight(true);
			that.trigger("keyup");
			panel.trigger(event);
		}
		
		/**
		 * 隐藏面板
		 */
		function hidePanel()
		{
			var that=$(this);
			if(that.is(":text"))
			{
				that.val($.trim(that.val()));
			}
			panel.trigger("hide");
		}
		
		/**
		 * 检查内容长度
		 */
		function checkLength(e){
			var that=$(this);
			var trueValue=$.trim(that.val());
			var maxsize=that.attr("maxsize");
			var freeLength=maxsize-trueValue.length;
			var state="";
			if(freeLength<0)
			{
				that.val(trueValue.slice(0,freeLength));
				freeLength=0;
			}
			if(freeLength<maxsize/4)
			{
				state="quarter";
			}
			else if(freeLength<maxsize/2)
			{
				state="half";
			}
			var event=new jQuery.Event("txtChanged");
			event.freeLength=freeLength;
			event.state=state;
			panel.trigger(event);
		}
		
		this.bind("focus",showPanel).bind("blur",hidePanel).bind("keyup change",checkLength);
		return this;
	};
})(jQuery);

$(function(){
	$("textarea").each(function(){
		var that=$(this);
		if(!that.attr("maxsize"))
		{
			that.attr("maxsize",10000);
		}
	});
	
	$(".mini").attr("maxsize","3");
	
	$(":text").each(function(){
		var that=$(this);
		if(!that.attr("maxsize") && !that.attr("readonly") && that.attr("name")!="keyword" && !that.is(".date,.birthday") && !that.is(".noLenCtrl"))
		{
			that.attr("maxsize",140);
		}
	});
	
	
	$(":text[maxsize],textarea[maxsize]").txtLenCtrl();
});

		

