// 人海联合开发分页组件 参与人员：许诺，郑进添
// 心得 : 代码如诗。
AE.namespace('AE.app');

//////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 翻页组件
//////////////////////////////////////////////////////////////////////////////////////////////////////////////

AE.app.pages = function(){
 this.config = {
 		defaultPageNum : 3,											// 当前页
 		
 		// 显示模块配置	[郑进添编写]
 		pageBox : get("page-box"),							// 页面容器
 		
 		// 导航模块配置	[许诺编写]
		pageNav	:	get("page-nav"),							// 导航区域元素
		pageNavItemCloneTplClass : "nav-clone",	// 导航区元素克隆体模板Class
		pageNavFireEvent : "click",							// 导航元素触发事件
		pageNavCurrentClass: "current",					// 导航元素当前触发样式
		pageNavNextBtnClass : "next",						// 下一个元素类名
		pageNavPrevBtnClass : "prev",						// 上一个元素类名
		pageNavCurrentNumClass : "current-num",	// 当前页标签类名
		pageNavCountClass		:	"page-count",			// 页码计数类名
		pageNavRangeLeft		:	1,								// 页码范围 左侧
		pageNavRangeRight		:	1,								// 页码范围 右侧
		pageNavLeftElpClass	:	"left-ellipsis",	// 页面左侧省略元素类名
		pageNavRightElpClass:	"right-ellipsis",	// 页面右侧省略元素类名
		pageNavHideClass		:	"hide"						// 页码隐藏样式
 };

 this.temp = {
 	pageBoxItems : [],									// 页面元素
  pageNavItems : [],           				// 导航区页码元素
  pageNavLast	: null,									// 上一个页码元素
	pageNextBtn : null,									// 下一页按钮
	pagePrevBtn	:	null,									// 上一页按钮
	pagePrevItem	: null,								// 上一页元素
	pageNextItem: null,									// 下一页元素
	pageNavLeftElp	: null,							// 页面左侧省略元素
	pageNavRightElp	: null,							// 页面右侧省略元素
	lastHideItems : []									// 隐藏的页码元素
 };

 return this;
};


AE.app.pages.prototype = {

	// 分页导航模块 : 生成
	pageNavBuild : function(o){	// o.num[页数] 
		var _self = this,config = this.config,temp = this.temp;
	
		// 获取克隆体模板
		var cloneTpl = YUD.getElementsByClassName(config.pageNavItemCloneTplClass,"*",config.pageNav)[0];
		
		// 循环生成
		for(var i=0;i<o.num;i++){
			// 克隆页码元素
			var clone = cloneTpl.cloneNode(true);
			// 去除页码元素样式
			YUD.removeClass(clone,config.pageNavItemCloneTplClass);
			// 页码元素赋值
			clone.innerHTML = i+1;
			clone.page = i+1;
			// 最终插入
			config.pageNav.insertBefore(clone,cloneTpl);
			// 缓存页面元素
			temp.pageNavItems.push(clone);
		};
		
		// 移动配置左侧右侧省略元素
		temp.pageNavLeftElp = YUD.getElementsByClassName(config.pageNavLeftElpClass,"*",config.pageNav)[0];
		temp.pageNavRightElp = YUD.getElementsByClassName(config.pageNavRightElpClass,"*",config.pageNav)[0];
		YUD.insertAfter(temp.pageNavLeftElp,temp.pageNavItems[0]);
		YUD.insertBefore(temp.pageNavRightElp,temp.pageNavItems[temp.pageNavItems.length-1]);
		
		// 缓存前后按钮
		temp.pagePrevBtn = YUD.getElementsByClassName(config.pageNavPrevBtnClass,"*",config.pageNav)[0];
		temp.pageNextBtn = YUD.getElementsByClassName(config.pageNavNextBtnClass,"*",config.pageNav)[0];
		
		// 缓存页码显示区
		temp.pageNavCurrentNum =	YUD.getElementsByClassName(config.pageNavCurrentNumClass,"*",config.pageNav)[0];
		temp.pageNavCount =	YUD.getElementsByClassName(config.pageNavCountClass,"*",config.pageNav)[0];
		
		// 设定总页数
		if(temp.pageNavCount){
			temp.pageNavCount.innerHTML = o.num;
		}
		
		// 绑定导航事件
		_self.pageNavEvent({item:config.pageNav});
		
		// 清理
		cloneTpl = null, i = null, clone = null;
		
		// 返回导航元素
		return config.pageNav;
	},
	
	// 分页导航模块 : 触发动作执行
	pageNavFire : function(o){	// o.item[元素]
		var _self = this,config = this.config,temp = this.temp;
		
		// 如果点击当前页
		if(o.item == temp.pageNavLast)return;

		// 设定页码数
		if(temp.pageNavCurrentNum){
			temp.pageNavCurrentNum.innerHTML = o.item.page;
		}
	
		// 清除最后触发项激活显示样式
		if(temp.pageNavLast){
			YUD.removeClass(temp.pageNavLast,config.pageNavCurrentClass);
		}
		
		// 设定当前页样式
		YUD.addClass(o.item,config.pageNavCurrentClass);
		
		
		// 页码范围功能
		// - 恢复状态
		YUD.removeClass(temp.lastHideItems,config.pageNavHideClass);
		YUD.setStyle([temp.pageNavLeftElp,temp.pageNavRightElp],"display","none");
		
		// - 如果超出左侧范围
		if(o.item.page > config.pageNavRangeLeft+1){
			for(var i = 1; i < (o.item.page - config.pageNavRangeLeft - 1) ; i++){
				var hideItem = temp.pageNavItems[i];
				YUD.addClass(hideItem,config.pageNavHideClass);
				temp.lastHideItems.push(hideItem);
			}
			YUD.setStyle(temp.pageNavLeftElp,"display","block");
		}
		
		// - 如果超出右侧范围
		if((temp.pageNavItems.length - o.item.page) > (config.pageNavRangeRight+1) ){
			for(var i = (temp.pageNavItems.length - 2); i > (o.item.page + config.pageNavRangeRight - 1) ; i--){
				var hideItem = temp.pageNavItems[i];
				YUD.addClass(hideItem,config.pageNavHideClass);
				temp.lastHideItems.push(hideItem);
			}
			YUD.setStyle(temp.pageNavRightElp,"display","block");
		}
		
		// 设定前后页ITEM
		// - 如果是第一页
		var navItemsCount = temp.pageNavItems.length;
		temp.pagePrevItem = (o.item.page == 1) ? temp.pageNavItems[navItemsCount-1] : temp.pageNavItems[o.item.page-2];
		
		// - 如果是最后一页
		temp.pageNextItem = (o.item.page == temp.pageNavItems.length) ? temp.pageNavItems[0] : temp.pageNavItems[o.item.page];

		// 页面显示模块 ： 触发翻页
		_self.pageBoxShow({index:o.item.page-1});


		// 设定当前元素为最后触发项
		temp.pageNavLast = o.item;

	},
	
	// 分页导航模块 : 事件捆绑
	pageNavEvent	:	function(o){
		var _self = this,config = this.config,temp = this.temp;
		
		// 每一个页码元素
		YUE.on(temp.pageNavItems,config.pageNavFireEvent,function(){
			_self.pageNavFire({item:this});
		});
		
		// 上一页页码
		YUE.on(temp.pagePrevBtn,config.pageNavFireEvent,function(){
			_self.pageNavFire({item:temp.pagePrevItem});
		});
		
		// 下一页页码
		YUE.on(temp.pageNextBtn,config.pageNavFireEvent,function(){
			_self.pageNavFire({item:temp.pageNextItem});
		});
		
	},

	// 分页显示模块 : 显示页面
	pageBoxShow	:	function(o){	// o.index[页数]
		var _self = this,config = this.config,temp = this.temp;
		var els = temp.pageBoxItems,index = o.index;
		var l = els.length,index= index <=0 ? 0 : (index >=l-1 ? l-1 : index);
		for(var x=0;x<l;x++){
			YUD.setStyle(els[x],"display", x===index ? "" :"none");
		};
		return els[index];
	},

	// 页面显示模块 ： 翻页
	defineTemps : function(){
		var _self = this,config = this.config,temp = this.temp;
		temp.pageBoxItems = YUD.getChildren(config.pageBox);
	},
	
	defineEvents : function(){
		var _self = this,config = this.config,temp = this.temp;
	},

	RUN	:	function(){
		var _self = this,config = this.config,temp = this.temp;
		
		// 生成分页item
		_self.pageNavBuild({num:temp.pageBoxItems.length});
		
		// 选中默认页
		config.defaultPageNum = (config.defaultPageNum > temp.pageBoxItems.length)?1:config.defaultPageNum;
		_self.pageNavFire({item:temp.pageNavItems[config.defaultPageNum-1]});
		
	},
	
 init : function(customConfig){
  this.config = YL.merge(this.config,customConfig||{});
  var _self = this,config = this.config,temp = this.temp;

  _self.defineTemps();
  
  _self.defineEvents();
  
  _self.RUN();
  
  if(AE.bom.isIE){ CollectGarbage(); }
  return _self;
 }
 
};

