/**
 * @author ZhangYi
 * @fileoverview 公用的tab选项卡，支持自动播放、延时播放及自定义事件处理
 * 		目前支持的事件仅:mouseover、click
 */
GTJ.namespace("UI");
GTJ.UI.Tab = function() {
	this.initialize.apply(this, arguments);
}

/**
 * Tab选项卡
 * @defaultConfig: {
 * 	tabs 触发tabs切割的HTMLElement对象
 *  panels 触发tabs时对应的panels对象
 *  tabClass 切换时tab的样式配置，normal、selected
 *  panelClass 切换时panel的样式配置
 *  start 选项卡开始的索引值
 *  event 触发tab选项卡的事件
 *  animate 触发选项卡滑动时，动画类型
 *  interval 自动切换时的时间间隔
 *  delay 延时触发tab选项卡的时间间隔
 *  autoChange 是否自动进行切换
 *  allowRepeat 是否允许重复调用同一选项卡事件
 * }
 * @example 
 * 	new GTJ.UI.Tab({
 * 		tabs : $("#gameInfo_tabs > li"),
 * 		panels : $("#gameInfo_panel > div"),
 * 		panelClass : {
 * 			'normal' : 'none',
 * 			'selected' : ''
 * 		},
 * 		start : 0,
 * 		event : 'mouseover',
 * 		interval : 3000,
 * 		delay : 100,
 * 		allowRepeat : false,
 * 		autoChange : false
 * });
 * 
 * @callEvents : 
 * 	$beforeHandler	触发tabs选项卡前的事件
 * 	$onHandler  返回true，则不进行默认的显示与隐藏操作
 * 	$afterHandler 触发选项卡后的事件
 */
GTJ.UI.Tab.prototype = {
	_intervalTimer : null,
	_delayTimer : null,
	initialize : function() {
		this.opts = jQuery.extend({
			tabs : [],
			panels : [],
			tabClass : {},
			panelClass : {},
			start : 0,
			event : 'click',
			animate : '',
			interval : 300,
			delay : 300,
			autoChange : false,
			allowRepeat : false
		}, arguments[0]);
		
		if( !this.opts.tabs || !this.opts.tabs.length ||  !/(mouseover|click)/.test(this.opts.event) ) {
			return ;
//			throw new Error("参数传递有误");
		}
		
		this.opts.start = Number(this.opts.start);
		this.currentIndex = Math.min(this.opts.tabs.length-1, this.opts.start) || 0;//当前选中的项的索引值
		this.maxIndex = this.opts.tabs.length - 1;
		
		this._intervalTimer = null;//重置定时器
		this._delayTimer = null;//重置延时器
		
		this.$beforeHandler = function() {};
		this.$onHandler = function() {};
		this.$afterHandler = function() {};
		
		this._initEvent();
	},
	_initEvent : function() {
		var $pointer = this;
		
		this.opts.tabs.bind(this.opts.event, function() {
			$pointer.eventHandler.apply($pointer, Array.prototype.slice.call(arguments).concat(this));//event、domElement
		});
		
		$(window).bind("unload", function() {
			$pointer.stopIntervalTimer();
			$pointer.stopDelayTimer();
			
			$pointer.opts.tabs.unbind();
			
			$pointer = null;
		});
		
		this._initClass(this.opts.tabs, this.opts.tabClass, this.currentIndex);
		
		if(this.opts.panels.jquery) {//可能没有传入指定的panels
			this._initClass(this.opts.panels, this.opts.panelClass, this.currentIndex);
		}
		
		this.startIntervalTimer();
	},
	/**
	 * 
	 * @param {Object} a Elements对象数组
	 * @param {Object} b 样式配置对象，包含属性：normal正常样式及selected选中的样式
	 * @param {Object} index 当前的索引值
	 */
	_initClass : function(a, b, index) {
		if(b && a && a.eq) {
			if(b.selected) {
				a.eq(index).addClass(b.selected);
				a.not(a.eq(index)).removeClass(b.selected);
			}
			
			if(b.normal) {
				a.eq(index).removeClass(b.normal);
				a.not(a.eq(index)).addClass(b.normal);
			}
		}
	},
	/**
	 * 
	 * @param {Object} a Elements对象数组
	 * @param {Object} b 样式配置对象
	 * @param {Object} i 需要设置选中的项
	 * @param {Object} j 需要去除的选中项
	 */
	_setClass : function(a, b, i, j) {
		if(i == j) {
			return ;
		}
		
		if(b && a && a.eq) {
			if(b.selected) {//设置选中样式
				a.eq(i).addClass(b.selected);
				a.eq(j).removeClass(b.selected);
			}
			
			if(b.normal) {//设置普通样式
				a.eq(i).removeClass(b.normal);
				a.eq(j).addClass(b.normal);
			}
		}
	},
	_setTabClass : function(index) {
		this._setClass(this.opts.tabs, this.opts.tabClass, index, this.currentIndex);
	},
	_setPanelClass : function(index) {
		this._setClass(this.opts.panels, this.opts.panelClass, index, this.currentIndex);
	},
	setClass : function(index) {
		this._setTabClass(index);
		this._setPanelClass(index);
		
		this.currentIndex = index;
	},
	eventHandler : function() {
		var index = typeof arguments[1] == 'number' ? arguments[1] : this.opts.tabs.index(arguments[1]);
		
		if(!this.opts.allowRepeat && index === this.currentIndex) {//不允许重复进行选中
			return ;
		}
		
		//清除定时器、延时器
		this.stopIntervalTimer();
		this.stopDelayTimer();
		
		/**
		 * 用户触发的事件，第一个参数为event对象、系统定时器触发时为null
		 */
		if(arguments[0] && this.opts.autoChange) {
			this.opts.tabs.eq(index).unbind("mouseout").bind("mouseout", function($pointer) {
				return function() {
					$pointer.startIntervalTimer();
					$(this).unbind("mouseout");
				}
			}(this));
		} else {
			this.startIntervalTimer();
		}
		
		this.startDelayTimer(index);
	},
	startIntervalTimer : function() {
		this.stopIntervalTimer();
		
		if(this.opts.interval && this.opts.autoChange) {
			var $pointer = this;
			
			this._intervalTimer = setInterval(function() {									
										var index = (index = $pointer.currentIndex + 1) > $pointer.maxIndex ? 0 : index;
										$pointer.eventHandler(null, index);	
										$pointer = null;					
									}, this.opts.interval);
		}
	},
	startDelayTimer : function(index) {
		this.stopDelayTimer();
		
		var $pointer = this;
		
		//调用函数
		function fn() {
			if( !$pointer.$onHandler.call($pointer, index) ) {//返回true则自定义进行处理，默认false(设置样式)
				if($pointer.opts.animate === "fade") {//渐隐渐现
					$pointer._setTabClass(index);
					
					$pointer.opts.panels.eq($pointer.currentIndex).stop(true, true).fadeOut(500);
					$pointer.opts.panels.eq(index).fadeIn(1000);
					
					$pointer.currentIndex = index;
				} else {
					$pointer.setClass(index);
				}
			}
			
			$pointer.$afterHandler.call($pointer, index);//事件触发完成
			
			$pointer = fn = index = null;
		}
		
		
		this.$beforeHandler.call($pointer, index);//响应事件前
		
		if(this.opts.delay) {
			this._delayTimer = setTimeout(fn, this.opts.delay);
		} else {
			fn();
		}
	},
	//清除定时器
	stopIntervalTimer : function() {
		if(this._intervalTimer) {
			clearInterval(this._intervalTimer);
			this._intervalTimer = null;
		}
	},
	//清除延时器
	stopDelayTimer : function() {
		if(this._delayTimer) {
			clearTimeout(this._delayTimer);
			this._delayTimer = null;
		}
	}
}


$(function() {

	//焦点切换
	var focusTab = new GTJ.UI.Tab({
		tabs : $("#pic_focus_change>div.count>a"),
		panels : $("#pic_focus_change>div[class^=img]"),
		tabClass : {
			'normal' : '',
			'selected' : 'current'
		},
		panelClass : {
			'normal' : 'none',
			'selected' : ''
		},
		start : 0,
		event : 'mouseover',
		interval : 3000,
		delay : 10,
		animate : 'fade',
		allowRepeat : false,
		autoChange : true
	});
	
	focusTab.$beforeHandler = function(index) {
		if(!this._imgArr) {
			this._imgArr = [];
			this._imgArr[this.currentIndex] = true;
		}
		
		if(this._imgArr[index]) {
			return ;
		}
		
		var panel = this.opts.panels.eq(index);
			panel.html([
				'<a href="'+panel.attr("_href")+'" title="'+panel.attr("_title")+'" target="_blank">',
					'<img src="'+panel.attr("_src")+'" alt="'+panel.attr("_title")+'" />',//width="146px" height="177px" 
				'</a>'
			].join(""));
		
		this._imgArr[index] = true;
	}
	
	//最新、公告、维护、活动
	var newsTab = new GTJ.UI.Tab({
		tabs : $("#news_tabs > a"),
		panels : $("#news_panels > ul"),
		tabClass : {
			'normal' : '',
			'selected' : 'current'
		},
		panelClass : {
			'normal' : 'none',
			'selected' : ''
		},
		start : 0,
		event : 'mouseover',
		interval : 3000,
		animate : '',
		delay : 100,
		allowRepeat : false,
		autoChange : false
	});
	
	newsTab.$beforeHandler = function(index) {
		var urlConfig = {
			0 : '/news/index.htm',
			1 : '/notice/index.htm',
			2 : '/assert/index.htm',
			3 : '/activity/index.htm'
		}
		
		$("#news_more").attr("href", urlConfig[index]);
	}
	
	//游戏资料
	var gameInfoTab = new GTJ.UI.Tab({
		tabs : $("#gameInfo_tabs > li"),
		panels : $("#gameInfo_panel > div"),
		tabClass : {
			'normal' : '',
			'selected' : 'current'
		},
		panelClass : {
			'normal' : 'none',
			'selected' : ''
		},
		start : 0,
		event : 'mouseover',
		interval : 3000,
		delay : 100,
		allowRepeat : false,
		autoChange : false
	});
	
	gameInfoTab.$beforeHandler = function(index) {
		var urlConfig = {
			0 : '/xszy/index.htm',
			1 : '/yxjs/index.htm',
			2 : '/jszn/index.htm',
			3 : '/mzad/index.htm'
		}
		
		$("#gameInfo_more").attr("href", urlConfig[index]);
	}
	
	//游戏攻略：玩家心得、常见问题
	var yxglTab = new GTJ.UI.Tab({
		tabs : $("#yxgl_tabs > a"),
		panels : $("#yxgl_panels > ul"),
		tabClass : {
			'normal' : '',
			'selected' : 'current'
		},
		panelClass : {
			'normal' : 'none',
			'selected' : ''
		},
		start : 0,
		event : 'mouseover',
		interval : 3000,
		delay : 100,
		allowRepeat : false,
		autoChange : false
	});
	
	yxglTab.$beforeHandler = function(index) {
		var urlConfig = {
			0 : '/exper/index.htm',
			1 : '/faq/index.htm'
		}
		
		$("#yxgl_more").attr("href", urlConfig[index]);
	};
	
	//美图欣赏：游戏原画、游戏截图
	var picTab = new GTJ.UI.Tab({
		tabs : $("#picList_tabs > a"),
		panels : $("#picList_panels > ul"),
		tabClass : {
			'normal' : '',
			'selected' : 'current'
		},
		panelClass : {
			'normal' : 'none',
			'selected' : ''
		},
		start : 0,
		event : 'mouseover',
		interval : 3000,
		delay : 100,
		allowRepeat : false,
		autoChange : false
	});
	
	picTab.$beforeHandler = function(index) {
		if(index == 1) {
			this.opts.panels.eq(index).find(">li").each(function(index, elem) {
				elem.innerHTML = [
					'<img src="'+elem.getAttribute("_src", 2)+'" alt="'+elem.getAttribute("_title", 2)+'"/>'
				].join('');
			});
			
			picTab.$beforeHandler = function() {};
			picTab = null;
		}
	};

});


$(function() {
	//排行配置
	var rankConfig = {
		'1' : ['角色名', '官衔'],
		'2' : ['角色名', '功勋值'],
		'3' : ['角色名', '等级值'],
		'4' : ['角色名', '银两值'],
		'5' : ['派系名称', '影响力']
	};
	//性别配置
	var sexConfig = {
		'0' : '女',
		'1' : '男'
	};
	//官品配置
	var gradeConfig = {
		'0':'无品',
		'1':'从九品下',
		'2':'从九品上',
		'3':'正九品下',
		'4':'正九品上',
		'5':'从八品下',
		'6':'从八品上',
		'7':'正八品下',
		'8':'正八品上',
		'9':'从七品下',
		'10':'从七品上',
		'11':'正七品下',
		'12':'正七品上',
		'13':'从六品下',
		'14':'从六品上',
		'15':'正六品下',
		'16':'正六品上',
		'17':'从五品下',
		'18':'从五品上',
		'19':'正五品下',
		'20':'正五品上',
		'21':'从四品下',
		'22':'从四品上',
		'23':'正四品下',
		'24':'正四品上',
		'25':'从三品下',
		'26':'从三品上',
		'27':'正三品下',
		'28':'正三品上',
		'29':'从二品下',
		'30':'从二品上',
		'31':'正二品下',
		'32':'正二品上',
		'33':'从一品下',
		'34':'从一品上',
		'35':'正一品下',
		'36':'正一品上',
		'37':'极品'
	};
	//官衔配置
	var officialConfig = {
		'0_0':'庶人',
		'0_1':'药童',
		'0_2':'膳童',
		'0_3':'书童',
		'1_1':'药生',
		'1_2':'膳生',
		'1_3':'书生',
		'2_1':'针助教',
		'2_2':'侍膳郎',
		'2_3':'书学博士',
		'3_1':'针博士',
		'3_2':'监膳',
		'3_3':'主薄',
		'4_1':'医正',
		'4_2':'膳正',
		'4_3':'校书郎',
		'5_1':'医署丞',
		'5_2':'膳司丞',
		'5_3':'评事',
		'6_1':'医博士',
		'6_2':'膳博士',
		'6_3':'律学博士',
		'7_1':'药副',
		'7_2':'食副',
		'7_3':'协律郎',
		'8_1':'药丞',
		'8_2':'食丞',
		'8_3':'县丞',
		'9_1':'掌药',
		'9_2':'掌膳',
		'9_3':'太史局丞',
		'10_1':'典药',
		'10_2':'典膳',
		'10_3':'太学助教',
		'11_1':'主药',
		'11_2':'主膳',
		'11_3':'太常博士',
		'12_1':'司药',
		'12_2':'司膳',
		'12_3':'司业',
		'13_1':'尚药',
		'13_2':'尚食',
		'13_3':'学士',
		'14_1':'侍御医',
		'14_2':'侍御厨',
		'14_3':'侍御史',
		'15_1':'御医',
		'15_2':'御厨',
		'15_3':'御史',
		'16_1':'太医令',
		'16_2':'御膳总管',
		'16_3':'员外郎',
		'17_0':'采女',
		'17_1':'太常丞',
		'18_0':'御女',
		'18_1':'秘书丞',
		'19_0':'宝林',
		'19_1':'内常侍',
		'20_0':'常在',
		'20_1':'谏议大夫',
		'21_0':'才人',
		'21_1':'少尹',
		'22_0':'美人',
		'22_1':'少监',
		'23_0':'贵人',
		'23_1':'右丞',
		'24_0':'婕妤',
		'24_1':'侍郎',
		'25_0':'贵嫔',
		'25_1':'太府卿',
		'26_0':'充容',
		'26_1':'御史大夫',
		'27_0':'充仪',
		'27_1':'中书令',
		'28_0':'充媛',
		'28_1':'尚书令',
		'29_0':'修仪',
		'29_1':'太傅',
		'30_0':'修容',
		'30_1':'太师',
		'31_0':'昭媛',
		'31_1':'太尉',
		'32_0':'昭仪',
		'32_1':'宰相',
		'33_0':'德妃',
		'33_1':'摄政王',
		'34_0':'贤妃',
		'34_1':'统正王',
		'35_0':'淑妃',
		'35_1':'辅政王',
		'36_0':'贵妃',
		'36_1':'参议王 ',
		'37_0':'皇后'
	};
	//角色配置
	var roleConfig = {
		0 : "庶人(未选职业)",
		1 : "尚药",
		2 : '尚食',
		3 : "学士"
	}
	
	var rankHandler = {
		allServerList : {},
		currentServerData : null,
		_currentSex : document.getElementById("sexSel").value,//当前选择的性别
		_currentpageId : 1,//当前的分页的页码数
		_currentServerId : null,//当前服务器的id
		_currentTabId : 1,//当前tab选项卡的索引值位置（需要转换，tab默认从0开始）
		perPageNum : 10,//每一页的数据数量
		loadData : function(sId) {
			this.setServerId(sId);
			
			this.currentServerData = this.allServerList[this.getServerId()];
			
			if(this.currentServerData) {
				this.renderData();//渲染数据
			} else {
				this.getData(sId);//获取数据
			}
		},
		getData : function(sId) {
			Ajax("/res/rank/"+sId+".json",{'method':'get'}, function(json) {
				rankHandler.allServerList[sId] = json;
				rankHandler.currentServerData = json;
				rankHandler.renderData();
				rankHandler.refreshTitle();
			}, function() {
//				alert('获取数据失败，请稍候重试！');
			});
		},
		renderData : function() {
			var dataList = this.getCurrentServerData(),
				totalPage = this.getTotalPage(dataList),
				currentPageId = this.getPageId(),
				currentTabId = this.getTabId();
			
			if(!dataList) {
				return ;
			}
			
			
			this.refreshPage(totalPage);
			
			var start = (currentPageId - 1)* this.perPageNum,
				end = Math.min(currentPageId*this.perPageNum, dataList.length),
				dataArr = [],
				tempItem = null,
				itemDes = null;
			
			for(;start<end;start++) {
				tempItem = dataList[start];
				
				//角色ID、角色名、官品、等级、职业、（功勋/银两）
				switch (currentTabId) {
					case 1 : //官品
						itemDes = this.getOfficialDes(tempItem[2], tempItem[4]);
						break;
					case 2 : //功勋
						itemDes = tempItem[5];
						break;
					case 3 : //等级
						itemDes = tempItem[3];
						break;
					case 4 : //财富
						itemDes = tempItem[5];
						break;
					case 5 : //派系
						itemDes = tempItem[1];
						break;
					default : 
						break;
				}
				
				dataArr.push([
					'<li'+(start == end-1 ? ' class="noLine"' : '')+' title="" _iden="'+start+'">',//最后一行去除下划线
						'<span class="list_1">'+(start+1)+'</span>',
						'<span class="list_2">'+((currentTabId == 5) ? tempItem[0] : tempItem[1])+'</span>',
						'<span class="list_3">'+itemDes+'</span>',
					'</li>'
				].join(""));
			}
			
			$("#rankList").empty().html(dataArr.join(""));
		},
		getOfficialDes : function(grade, work) {
			if(grade < 17) {
				return officialConfig[grade + "_" + work];
			} else {
				return officialConfig[grade + "_" + this.getSex()];
			}
		},
		getTotalPage : function(list) {
			if(list && list.length) {
				return Math.ceil(list.length / this.perPageNum);
			} else {
				return 0;
			}
		},
		getCurrentServerData : function() {
			
			if(!rankHandler.currentServerData) {
				return null;
			}
			
			var tId = this.getTabId(),
				pId = this.getPageId();
			
			var tabList = [];
			
			if(tId == "5") {//派系--与性别有关
				tabList = this.currentServerData[tId];
			} else {//与性别有关
				tabList = this.currentServerData[this.getSex() + String(tId)];
			}
			
			return tabList;
		},
		refreshTitle : function() {
			var	tabConfig = rankConfig[ this.getTabId() ];
			
			$("#rankTit").html(
				[
					'<span class="list_1">排名</span>',
					'<span class="list_2">'+tabConfig[0]+'</span>',
					'<span class="list_3">'+tabConfig[1]+'</span>'
				].join("")
			);
		},
		refreshPage : function(count) {
			var pagePanel = $("#rankPagination").empty(),
				currentPageId = this.getPageId(),
				totalPageId = count,
				displayNum = 3,//中间显示的数量
				edgeNum = 3;//边缘显示的数量
			
			//上一页
			if(currentPageId > 1) {
				pagePanel.append( 
					$('<a href="javascript:;" class="prev" title="上一页"></a>').click( 
						this._refreshPage(currentPageId-1) 
					)
				);
			}
			
			var addPage = function(_i) {
				if (_i == currentPageId) {
					pagePanel.append( 
						$('<a href="javascript:;" class="current" style="cursor:default;">'+_i+'</a>')
					);
				} else {
					pagePanel.append( 
						$('<a href="javascript:;" title="第'+_i+'页">'+_i+'</a>').click( 
							rankHandler._refreshPage(_i) 
						)
					);
				}
			}
			
			//显示所有页码
			if(totalPageId > 1) {
				for(var i=1; i<=totalPageId; i++) {
					addPage(i);
				}
			}
			
			addPage = null;
			
			//下一页
			if(totalPageId > 1 && currentPageId != totalPageId) {
				pagePanel.append( 
					$('<a href="javascript:;" class="next" title="下一页"></a>').click( 
						this._refreshPage(currentPageId+1) 
					)
				);
			}
		},
		_refreshPage : function(pId) {
			return function() {
				rankHandler.setPageId(pId);
				rankHandler.renderData();
				
				return false;
			}
		},
		setTabId : function(index) {
			this._currentTabId = index;
		},
		getTabId : function() {
			return this._currentTabId;
		},
		setServerId : function(sId) {
			this._currentServerId = sId;
		},
		getServerId : function() {
			return this._currentServerId;
		},
		setPageId : function(pId) {
			this._currentpageId = pId;
		},
		getPageId : function() {
			return this._currentpageId;
		},
		setSex : function(val) {
			this._currentSex = val;
		},
		getSex : function() {
			return this._currentSex;
		}
	};
	
	var rankTab = new GTJ.UI.Tab({
		tabs : $("#rankTabs > a"),
		tabClass : {
			'normal' : '',
			'selected' : 'current'
		},
		start : 0,
		event : 'click',
		interval : 3000,
		delay : 0,
		allowRepeat : false,
		autoChange : false
	});
	
	rankTab.$beforeHandler = function(index) {
		rankHandler.setTabId(index+1);
		rankHandler.setPageId(1);
		rankHandler.refreshTitle();
		rankHandler.renderData();
		
		document.getElementById("sexSel").style.visibility = index == 4 ? "hidden" : "visible";//派系时，隐藏性别
		
		typeof RoleDialogHandler.$hide === 'function' ? RoleDialogHandler.$hide() : null;//清除currentLiElement
	}
	
	//更改性别时，重新加载数据
	$("#sexSel").change(function() {
		rankHandler.setSex(this.value);
		
		if(rankHandler.getTabId() != "5") {//当前tab非派系，重新渲染数据
			rankHandler.setPageId(1);
			rankHandler.renderData();
		}
	});
	
	//更改服务器列表
	$("#serverListSel").change(function() {
		rankHandler.setPageId(1);
		rankHandler.loadData(this.value);
	});
	
	var currentLiElement = null;
	//显示角色信息
	$("#rankList").mouseover(function(ev) {
		
		if (rankHandler.getTabId() === 5) {//派系不进行处理
			return ;
		}
		
		var el = ev.target;
			
		if (el) {
			if (el.tagName.toLowerCase() != "li") {
				el = el.parentNode;
			}
			if (el.tagName.toLowerCase() == "li") {
				
				if (currentLiElement && currentLiElement == el) {//直接返回
					RoleDialogHandler.clearHideTimer();
					return ;
				}
				currentLiElement ? currentLiElement.className = "" : null;
				currentLiElement = el;
				currentLiElement.className = "Current";
				
				var offset = $(el).offset();
				
				updateRoleInfo(el.getAttribute("_iden"));//渲染内容
				
				RoleDialogHandler.show({
					x : offset.left,
					y : offset.top
				});
				
			}
		}
		
	}).mouseout(function(ev) {
		
		if (typeof RoleDialogHandler.$hide != 'function') {
			 RoleDialogHandler.$hide = function() {
			 	if (currentLiElement) {
					currentLiElement.className = "";
					currentLiElement = null;
				}
			 }
		}
		
		RoleDialogHandler.hide();
		
	});
	
	//加载所有服务器列表的数据  公网的地址：/res/rank/
	Ajax("/res/rank/gs.json", {'method':'get'}, function(json) {
		if(json && json.length) {
			var optsArr = [],
				tempItem = null,
				selElem = $("#serverListSel").empty();
			
			for(var i=0,len=json.length; i<len; i++) {
				tempItem = json[i];
				selElem.append('<option value="'+tempItem.id+'">'+tempItem.name+'</option>');
			}
			
			//加载数据
			rankHandler.loadData(json[0].id);
		}
	}, function() {});
	
	
	function updateRoleInfo(_index) {
		var dateItem = rankHandler.getCurrentServerData()[_index];
		
		var roleName = dateItem[1],
			jobDes = rankHandler.getOfficialDes(dateItem[2], dateItem[4]),//官衔
			grade = dateItem[3],
			guanpin = dateItem[2],
			imgURL = getResPath(dateItem[0]);
			
//		imgURL = "/style/box/_n.png";
		
		RoleDialogHandler.getInstance().empty().html([
			'<dl>',
				'<dt style="background:url('+imgURL+') no-repeat; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=crop, src=\''+imgURL+'\'); _background-image:none;"></dt>',
				'<dd><span>'+jobDes+'</span>·'+roleName+'</dd>',
				'<dd>官品:'+gradeConfig[guanpin]+'  等级:'+grade+'</dd>',
			'</dl>',
		].join(""));
	}
	
	/**
	 * 获取角色图片的存储地址
	 * 
	 * @param {角色ID} resId
	 */
	function getResPath(resId) {
		var LevelNum = 3,
			PerNum = 500,
			ResPath = "/avatar/s" + rankHandler.getServerId()+"/";
		
		var userRootStr = "";
		
		var gene = 1;
		for (var i = 1; i < LevelNum; i++) {
			gene *= PerNum;
		}
		var tempUserID = parseInt(resId);
		for (var i = 0; i < LevelNum; i++) {
			if (LevelNum != i + 1) {
				var temp = Math.floor(tempUserID / gene);
				tempUserID = tempUserID % gene;
				userRootStr += temp + "_";
				gene /= PerNum;
			} else {
				userRootStr += resId;
			}
		}
		return ResPath + userRootStr + ".png";
	}
});

//角色面板
var RoleDialogHandler = function() {
	var inner;
	
	var dialog = null,
		delayTimer = null,
		hideTimer = null;
	
	return inner = {
		isShow : false,
		clearTimer : function() {
			inner.clearShowTimer();
			inner.clearHideTimer();
		},
		clearShowTimer : function() {
			if (delayTimer) {
				clearTimeout(delayTimer);
				delayTimer = null;
			}
		},
		clearHideTimer : function() {
			if (hideTimer) {
				clearTimeout(hideTimer);
				hideTimer = null;
			}
		},
		show : function(para) {
			inner.clearTimer();
			
			if (para && typeof para === 'object') {
				
				inner.getInstance().stop(false, true);
				
				if (inner.isShow) {
					inner.getInstance().show().css({
						left : para.x - 180,
						top : para.y - 10,
						opacity : 1
					});
				} else {
					delayTimer = setTimeout(function() {
						inner.getInstance().show().css({
							opacity : .2,
							left : para.x - 180,
							top : para.y - 10
						}).animate({
							opacity : 1
						}, {
							duration : 300,
							complete : function() {
								inner.isShow = true;
							}
						});
					}, 100);
				}
				
			}
		},
		hide : function(fn) {
			inner.clearTimer();
			
			if (typeof inner.$hide !== 'function') {
				inner.$hide = function() {};
			}
			
			inner.getInstance().stop(false, true);
			
			if (!inner.isShow) {
				inner.isShow = false;
				inner.$hide();
				inner.getInstance().hide();
				return ;
			}
			
			hideTimer = setTimeout(function() {
				inner.$hide();
				inner.getInstance().css("opacity", .8).animate({
					opacity : .1
				}, {
					duration : 300,
					easing : "",
					complete : function() {
						inner.isShow = false;
						inner.getInstance().hide();
					}
				});
			}, 100);
		},
		$hide : null,
		getInstance : function() {
			if (dialog) {
				return dialog;
			}
			
			dialog = $('<div class="GameTips" />').appendTo(document.body);
			
			dialog.hover(inner.clearHideTimer, inner.hide);//鼠标在面板中清除延时器
			
			return dialog;
		}
	}
}();
