/* <![CDATA[ */
/* 
	@ 作者：奔哥
	@ v1.3
	@ 2011-11-23  增加ajax效果 与高度自适应 代码整理  loading
*/
//$("#inNews").trigger("tabShow",["0"])	 外部调用方式
$.fn.tab = function(options) {
	var org = {
		tabId: ".title",
		tabTag: "a",
		conId: ".panes",
		conTag: "ol",
		curClass: "on",    
		act: "click",       //自定事件：delayOver【鼠标停留在标签上200毫秒后执行】
		height:"",
		dft: 0,             //起始显示项,默认为第一项
		heightAuto:false,  //当遇到各标签内容高度不一致时，点击切换高度动画自伸缩。
		delaytime: 200,     //配合 delayOver的属性 200毫秒后执行
		effect: null,
		auto: false,       //自动切换
		autotime: 6000,
		aniSpeed: 500,
		exeReady:function(){},      //当tag划动时 自定义事件
		
		//loading           //有ajax事件时   定义loading
		loadingTop:150,
		loadingImg:""
    }
	$.extend(org, options);
	
	
    var k = 0;
	var first   = true;    //判断第一次点击
    var _this   = $(this);
    var tagwrp  = $( "#"+_this.attr("id")+" "+org.tabId);
    var conwrp  = $( "#"+_this.attr("id")+" "+org.conId);
    var tag     = tagwrp.contents(org.tabTag).not(".alone");
    var con     = conwrp.contents(org.conTag);
    var conwh   = conwrp.width();
	var conlrPD = parseInt(con.css("padding-left")) + parseInt(con.css("padding-right"));
	var contdPD = parseInt( con.css("padding-top")) + parseInt(con.css("padding-bottom") );
	var hArray    = new Array();
	var ajaxArray = new Array();
	
	var loading={
		tag:"",
		flag:false,
		show:function(){
			loading.tag.fadeIn();
		},
		hide:function(){
			loading.tag.fadeOut();	
		},
		txt:function(){
			conwrp.prepend("<div class='navLoading'>加载中...</div>");
			loading.tag = $( "#"+_this.attr("id")+" .navLoading" );
			loading.tag.css({position:"absolute", left:conwh/2-74/2+"px", top:parseInt(org.loadingTop)+"px", "z-index":100, background:"#757575", color:"#fff", padding:"3px 15px 3px 15px", display:"none"})
			conwrp.css({position:"relative"});
		},
		img:function(){
			conwrp.prepend("<img src="+org.loadingImg+" class='imgLoading' />");
			loading.tag = $( "#"+_this.attr("id")+" .imgLoading" );
			loading.tag.css({position:"absolute", left:(conwh/2)-(this.tag.width())/2+"px", top:parseInt(org.loadingTop)+"px", "z-index":100, display:"none"})
			conwrp.css({position:"relative"});
		}
	}
	var setH={
		flash:function(i){
			if(!org.heightAuto) return
			conwrp.animate({height:hArray[i]+"px"},org.aniSpeed/2);
			con.animate({height:hArray[i]-contdPD},org.aniSpeed/2);
		},
		normal:function(i){
			if(!org.heightAuto) return
			conwrp.css({height:hArray[i]+"px"});
			con.css({height:hArray[i]-contdPD});
		}
	}
	var move={
		fade:function(i){
			if(org.heightAuto){ 
				setH.flash(i) 
			}else{
				if(org.height=="") conwrp.css("height", con.outerHeight() ); 
			}
			con.eq(i).css("z-index","3").siblings(org.conTag).css("z-index","1");
			con.eq(lastNum).css("z-index","2")
			con.eq(i).hide();
			con.eq(i).fadeIn(org.aniSpeed);
			lastNum = i;
		},
		scrollx:function(i){
			setH.flash(i);
			$("."+kCss).stop();
			$("."+kCss).animate({"margin-left":-i*conwh + "px"},org.aniSpeed);
		},
		scrollxNoEffect:function(i){
			setH.flash(i);
			$("."+kCss).stop();
			$("."+kCss).css({"margin-left":-i*conwh + "px"},org.aniSpeed);
		}
	}
	var ajax={
		flag:function(i){
			if( ajaxArray[i]!= false )
				return true;
			return false;
		},
		load:function(i){
			ajax.ready(i);
			con.eq(i).load(ajaxArray[i], function(){ 
				var A = ajax.timeout(i);
				setTimeout(A, 1000);
			})
		},
		
		ready:function(i){
			loading.show();
		},
		timeout:function(i){
			return function(){ ajax.exe(i) }	
		},
		exe:function(i){
			if(org.height=="") con.css({height:"auto"})
			hArray[i] = con.eq(i).outerHeight();
			loading.hide();
			switch(org.effect){
			case "scrollx"	:
				if( first ){
					move.scrollxNoEffect(i); first = false;
				}else{
					move.scrollx(i);
				}
				break;
			case "fade":
				move.fade(i);
				break;
			default:
				con.eq(i).show().siblings(org.conTag).hide();
				break;
			}
			ajaxArray[i] = false;
		}
	}
	
	con.each(function(i){
		if( con.eq(i).attr("data-tabUrl") == undefined ){
			ajaxArray[i] = false;
			hArray[i] = con.eq(i).outerHeight();
		}else{
			ajaxArray[i] = con.eq(i).attr("data-tabUrl");
			loading.flag = true;
		}
	})
	
	/* - - - - - - - - - - - - - -  -
		初始化定义  
	- - - - - - - - - - - - - - */
	if( loading.flag ){ org.loadingImg==""?loading.txt():loading.img(); }
	if( org.act =="delayOver" ){ var _event = org.act; org.act = "mouseover"; }
    if (org.effect == "scrollx"){
		var kCss  = _this.attr("id").substr(1)+"k";
		$(con).wrapAll("<div class='"+ kCss +"'></div>");
		conwrp.css({ width:conwh+"px", overflow:"hidden", position:"relative"});
        $("."+kCss).css({ width:tag.length*conwh+"px", overflow:"hidden"});
        con.css({float:"left", width:conwh-conlrPD+"px", display:"block"});
		if( org.height!="" ){ conwrp.css("height",parseInt(org.height)) }
    }
	if( org.effect == "fade" || org.effect == "show" ){
		var lastNum = -1;
		con.css({ position:"absolute", width:conwh-conlrPD+"px", "z-index":"1", overflow:"hidden"})
		con.show();	
		setH.normal();
		if( org.height!="" ){ 
			conwrp.css("height",parseInt(org.height));
			con.css({height:parseInt(org.height)-contdPD});
		}
	}
	/* - - - 初始化定义 end  - - - */
	
	exe( org.dft );	
	_this.bind("tabShow", function(event,i){ exe( i ) })
	_this.bind("tabNext", function(event){ 
		var extN = k+1;
		if (extN == tag.length) extN = 0;
		exe(extN);
		return false;
	})
	_this.bind("tabPrev", function(event){ 
		var extN = k-1;
		if (extN < 0) extN = tag.length-1;
		exe(extN);
		return false;
	})
	
	/* - - - - - - - - - - - - - -  -
		自定义delayOver 延迟划过事件  
	- - - - - - - - - - - - - - */
	var isOver  = new Array();
    tag.each(function(i){
		if( _event == "delayOver" ){
			tag.eq(i).hover(function(){
				var setTimeOut = timeOut( i );
				isOver[i] = setTimeout(setTimeOut, org.delaytime);
			},function(){
				clearTimeout( isOver[i] );
			})
		}else{
			tag.eq(i).bind(org.act, function(){ exe(i) })
		}
    })
	function timeOut( i ){ return function(){ exe(i); } }	
	/* - - - 自定义delayOver 延迟划过事件 end  - - - */
	
	function exe( i,isTrue ){
		
		org.exeReady(i);
		cur(tag.eq(i), org.curClass);
		k = i;
		switch (org.effect) {
		case "scrollx":
			if(ajax.flag(i)){
				ajax.load(i)
			}else{
				if(first){
					move.scrollxNoEffect(i);
					first = false;
				}else{
					move.scrollx(i);
				}
			}
			break;
		case "fade":
			if(lastNum==i){ return }
			ajax.flag(i) ? ajax.load(i) : move.fade(i);
			break;
		default:
			ajax.flag(i) ? ajax.load(i) : con.eq(i).show().siblings(org.conTag).hide();
			break;
		}
	}
	
    if (org.auto) {
		_this.hover(function(){
			clearInterval( setLoop );
		},function(){
			setLoop = setInterval(drive, org.autotime);
		})
        var drive = function(){
			k++ ; if(k > tag.length-1) k = 0;
			exe(k);
        }
        var setLoop = setInterval(drive, org.autotime);
    }
	
    function cur(ele, currentClass, tag) {
        ele = $(ele) ? $(ele) : ele;
        if (!tag) {
            ele.addClass(currentClass).siblings().removeClass(currentClass);
        } else {
            ele.addClass(currentClass).siblings(tag).removeClass(currentClass);
        }
    }
}
/* ]]> */
