var $loading = '<img src="/images/common/blue-loading.gif" style="vertical-align:middle;width:20px;height:20px" />';
// 注册插件
jQuery.fn.extend({
	/**
	 * 通用选项卡Jquery 插件
	 *
	 * @param string event 事件类型 click|mouseover|........
	 * @param function callback 回调函数
	 * @param int currentItem 当前默认tab索引
	 *
	 * @author bottle hhyisw@163.com
	 */
	tab: function(event, callback, currentItem, currentClass){
		currentItem = currentItem ? currentItem : 0;
        currentClass = currentClass ? currentClass : 'selected';
		event = event ? event : 'click';
		var $tabnav = $('div#tabnav ul li', this);
		var $tabs   = $('div#tabs', this).children();
		// tab 默认状态
		$tabnav.eq(currentItem).addClass(currentClass).siblings().removeClass(currentClass);
		if(callback){
			callback($tabs.eq(currentItem), currentItem, $tabnav.eq(currentItem));
		}
		$tabs.eq(currentItem).show().siblings().hide();
		// tab 切换事件绑定
		$tabnav.each(function(item){
			$(this).bind(event, function(){
				$(this).addClass(currentClass).siblings().removeClass(currentClass);
				if(callback){
					// 回调函数 默认传递标签对象和标签索引 用以AJAX更新标签数据
					callback($tabs.eq(item), item, $(this));
				}
				$tabs.eq(item).show().siblings().hide();
			});
		});
	},

	/**
	 * 通用 checkbox 全选插件
	 *
	 * @param string childcheckbox 子 checkbox ID
	 *
	 */
	checkbox: function(childcheckbox, callback) {
        var checkall  = this;
        var childcheck = $("input[id='"+childcheckbox+"']");
	    checkall.click(function(){
			var ischecked = checkall.attr('checked');
			ischecked = ischecked == true ? true : false;
            childcheck.attr('checked', ischecked);
            if(callback){
                callback();
            }
		});

        childcheck.each(function() {
            $(this).click(function () {
                var ischecked = checkall.attr('checked');
                if(ischecked){
                    checkall.attr('checked', ischecked&0);
                }
                if(callback){
                    callback();
                }
            });
        });
	},

	/**
	 * 通用下拉列表莱单
	 *
	 * @param callback 回调函数
	 * @param many     最大多选数量
	 * @author bottle hhyisw@163.com
	 */
	dropdown: function(callback, many) {
		var $dropoption   = $('ul#dropoption', this);		// 下拉列表对象
		var $dropvalue    = $('input#dropvalue', this);     // 存放selected 值的input
		var $dropselected = $('div#dropselected', this);    // 存放selected 文本的div
		var $dropbotton   = $('a#dropbotton', this);		// 下拉框点击按钮对象
		var $dropclose    = false;							// 决定是否关闭下拉框的状态

		$dropbotton.click(function(){
			$dropoption.show('normal');
		});

		$dropoption.hover(
			function(){
				$dropclose = true;
			},
			function(){
				if($dropclose == true){
					$dropoption.hide('normal', function(){
						// 处理多选
						if(many){
							var $texts = $vals = $flag = '';
							$('input:checked', $dropoption).each(function(item){
								$texts = $texts + $flag + ' ' +$.trim($(this).parent().text());
								$vals  = $vals + $flag + $(this).val();
								$flag = ',';
								if(item == (many-1)) return false;
							});
							$dropselected.text($texts);
							$dropvalue.val($vals);
						}
					});
				}
				$dropclose = false;
			}
		);
		if(many) return false;
		$('li a', $dropoption).each(function(){
			$(this).click(function(){
				var $value = $(this).attr('val');
				var $text  = $(this).text();
				var $currentval = $dropvalue.val();
				$dropvalue.val($value);
				$dropselected.text($text);
				$dropoption.hide('normal');
				$dropclose = false;
				if(callback && !many){
					// 多选时不回调
					callback($value, $currentval); // 默认传递当前选择值和之前值
				}
			});
		});
	},

    Scroll: function(opt,callback){
        //参数初始化
        if(!opt) var opt={};
        var _this = this.eq(0).find("ul:first");
        var lineH = _this.find("li:first").height(),                                    // 获取行高
        line = opt.line ? parseInt(opt.line, 10) : parseInt(this.height() / lineH, 10), // 每次滚动的行数，默认为一屏，即父容器高度
        speed = opt.speed ? parseInt(opt.speed, 10) : 500,                              // 卷动速度，数值越大，速度越慢（毫秒）
        timer = opt.timer ? parseInt(opt.timer, 10) : 2000;                             // 滚动的时间间隔（毫秒）
        if(line==0) line = 1;
        var upHeight = 0 - line * lineH;
        if(isNaN(upHeight)){
            return false;
        }
        //滚动函数
        scrollUp = function(){
            _this.animate({
                marginTop: upHeight
            },speed,function(){
                for(i=1; i<=line; i++){
                    _this.find("li:first").appendTo(_this);
                }
                _this.css({marginTop:0});
            });
        }

        //鼠标事件绑定
        _this.hover(function(){
            clearInterval(timerID);
        },function(){
            timerID = setInterval("scrollUp()", timer);
        }).mouseout();
    }
});

(function($){
    $.postJSON = function(ajaxUrl, data, callback){
        $.ajax({
            type: 'POST',
            url:  ajaxUrl,
            dataType: 'json',
            data: data,
            success: function(json){
                if(callback){
                    callback(json);
                }else{
                    return json;
                }
            },
            error: function(e){
                console.dir(e);
                alert('请求服务器发生错误。');
                return false;
            }
        });
    };
})(jQuery);
