AE.widget.pageNavBlock=function(){

	var _self=this;
	var oDefConfig={
		sTabClass:"",
		sItemClass:"",
		oParentNode:document.body,
		sSwitchEvent:"click",
		sCurrentClass:"current",
		sPrevId:"",
		sNextId:"",
					
		autoBlock:true,
		sFormatTab:"{0}-{1}",
		sItemId:"",
		sItemTagName:"*",
		sTabId:"",
		iShowNum:10,

		onShow:new Function,
		unShow:new Function
		}
	var oParent,config,dataLength;
	var currentIndex=0;
	var aItems=[];
	var aTabs=[];

	_self.init=function(oConfig){

		config = TB.applyIf(oConfig||{},oDefConfig);
		
		if( config.iShowNum < 1 ) config.iShowNum=10;		
		if(config.autoBlock){
			createItemBlock();
		} else {
			aTabs = YUD.getElementsByClassName(config.sTabClass,'*',config.oParentNode);
			aItems = YUD.getElementsByClassName(config.sItemClass,'*',config.oParentNode);
		}

		oParent=config.oParentNode;
		dataLength=Math.min(aTabs.length,aItems.length);
		if(config.sOrder=="desc"){currentIndex=dataLength-1;}		
		for(i=0;i<dataLength;i++){
			YUE.on(aTabs[i],config.sSwitchEvent,_self.show,i);
			};
		};

	  _self.show = function(e,iIndex){
	  	if(!YL.isNumber(iIndex) || iIndex<0 || iIndex>=dataLength ){return false;};

		config.onShow.apply(_self);
		
	  	currentIndex=iIndex;
	  	var f1 = function(element){
	  		return YUD.removeClass(element,config.sCurrentClass);
	  	}
	  	YUD.batch(aTabs, f1);
	  	YUD.addClass(aTabs[iIndex],config.sCurrentClass);
	  	YUD.setStyle(aItems,"display","none");
	  	YUD.setStyle(aItems[iIndex],"display",""); 

			config.unShow.apply(_self);	
	  };
	  
	  _self.gotoPage=function(pageNum){
	  		if( aTabs.length == 0 || config.iShowNum <=0 )	return ;
			
			(pageNum == null || pageNum <1 ) ? pageNum=1 : null;

			var iNum=parseInt(pageNum/config.iShowNum);
			(iNum!=0 && pageNum%config.iShowNum == 0 ) ? iNum-- : null;			
			( iNum > aTabs.length-1 ) ? iNum = aTabs.length-1 : null;
			_self.show(null,iNum);
	  };

	  var createItemBlock=function(){
	  
	  	var oTarget,aTagName,aNode,iNum,oBlock,curNode,nextNode,tagName,iShowNum;

			tagName=config.sItemTagName;
			iShowNum=config.iShowNum;

			oTarget=get(config.sItemId);
			if( oTarget == null || !oTarget.hasChildNodes() || oTarget.getElementsByTagName('A').length<iShowNum-1 ) return false;
			if( tagName =='' || tagName==null ) tagName='*';

			aTagName=tagName.split(',');
			aNode=oTarget.childNodes;
			if(aNode.length==0) return ;
			
			oBlock=createBlock(config.sItemClass);
			aItems[aItems.length]=oBlock;
			iNum=0;

			curNode=nextNode=oTarget.firstChild;
			YUD.insertBefore(oBlock,curNode);
			
			while(nextNode != null){
				if(curNode.nodeName=='#text'){
					nextNode=curNode.nextSibling;
					if(nextNode!=null)
						oBlock.appendChild(curNode);
					curNode=nextNode;
					continue;
				}
				for(var j = 0;j < aTagName.length;j++)
				{
					if(curNode.nodeName == aTagName[j]||aTagName[j] == '*'){
						nextNode=curNode.nextSibling;
						oBlock.appendChild(curNode);
						
						curNode=nextNode;
						iNum++;	
						if(iNum >= iShowNum){
							iNum=0;
						}
						if(iNum == 0&&curNode != null){
							var t=oBlock;
							oBlock=createBlock(config.sItemClass);
							aItems[aItems.length]=oBlock
							YUD.insertAfter(oBlock,t);
						}
						break;
					}
				}
			};
			createTabItem();
	  };

	var createTabItem = function(){
			if(aItems.length <= 1  ) return ;
			
			var sPrev,sNext,oTarget,tabBlock;

			oTarget=get(config.sTabId);
			if(oTarget == null){
				oTarget = createBlock();
				YUD.insertAfter(oTarget,aItems[aItems.length-1]);				
			}

			for(var i = 0; i<aItems.length; i++){			
				var sPrev = YUD.getFirstChild(aItems[i]);
				var sNext = YUD.getLastChild(aItems[i]);	
				if( !sNext || !sPrev) break ;
				var sText = toFormat(config.sFormatTab,sPrev.innerHTML,sNext.innerHTML);
				
				var tabLink = document.createElement("A");
				tabLink.href="javascript:void(0)";
				tabLink.innerHTML = sText;

				tabLink.className = config.sItemClass;

				oTarget.appendChild(tabLink);
				aTabs[aTabs.length] = tabLink;				
			}
		};

		var createBlock = function(className){
			var spnBlock = document.createElement('span');
			if( className && className != '') spnBlock.className = className;
			return spnBlock;
		};
	  
		var toFormat = function() {		
			if( arguments.length <= 0) return str;	
			var str = arguments[0];	
			for(var i = 1; i < arguments.length; ++i) {
			str = str.replace('{' + (i-1) + '}',arguments[i]);
			}
			return str;
		};
};