var jCaches = function(cacheLength,isDebug){
		
	cacheData = [{}];
	
	/**
	 * 添加
	 * @param {String} id 标识ID
	 * @param {Object} value 值
	 */
	this.add = function(id, value){
		/* 检查是否存在，有的话就不存 */
		if (this.exist(id)) {
			if (isDebug) {
				console.log("cache existed.");
			}
			return ;
		}

		/* 如果满了，就删除第一个 */
		if(cacheData.length > cacheLength){
			var oldItem = cacheData[0];
			cacheData.shift();
			var newItem = cacheData[0];
			if(isDebug){
				console.log("old first id:" +oldItem.id);
				console.log("new first id:" +newItem.id);
			}
		}
		
		if(isDebug){
			console.log("cache size:" + cacheData.length);
		}		
		
		/* 向缓存数据添加一项 */
		cacheData.push({id:id,value : value});
	}
	
	/**
	 * 根据“标识ID”检查缓存是否存在
	 * @param {String} id 标识ID
	 */
	this.exist = function(id){

		/* 通过循环找ID是否存在 */
		for(var i = 0; i < cacheData.length; i++){
			var item = cacheData[i];
			if(item.id == id){
				if(	isDebug){				
					console.log("found an exist item: " + item.id);
				}
				return true;
			}
		}
		
		return false;
	}
	

	/**
	 * 取缓存
	 * @param {String} id 标识ID
	 */
	this.get = function(id){

		for(var i = 0; i < cacheData.length; i++){
			var item = cacheData[i];
			if(item.id == id){
				return item.value;
			}
		}
		
		return null;
	}
	
	/**
	 * 清空缓存
	 */
	this.clear = function(){
		cacheData =  new Array();
	}

};

/*
 * 定义公共缓存，对查询数据进行缓存，定义缓存数据长度为100。
 */
var Cache  = new jCaches(20,false);
var ConfigCache = new jCaches(100,false);
/*
 *初始化函数，请取Tab标签值 
 */
function Init(ModuleID, TabID, Status,lang,IsMultilingual){
	if(Status) { 
		//Status 为true 表示默认Tab选项卡 显示默认Tab内容
		var DefaultDivObj = document.getElementById("Dialog_"+ModuleID+"_Default");
		if(DefaultDivObj!="undefined")
		{
			document.getElementById("Dialog_"+ModuleID).style.display="none";
			DefaultDivObj.style.display="";			
		}
	}else {
		//显示非默认的Tab内容
		var DataSource =null;
		if(!Cache.exist(ModuleID.toString()+"_"+TabID.toString()+(IsMultilingual==1?"_"+lang:"")))
		{
			var Data = KMBILLJC.Modules.DataCollect.ViewDataCollect.GetData(ModuleID,TabID,lang,IsMultilingual).value;
			Cache.add(ModuleID.toString()+"_"+TabID.toString()+(IsMultilingual==1?"_"+lang:""),Data);
		}
		DataSource = Cache.get(ModuleID.toString()+"_"+TabID.toString()+(IsMultilingual==1?"_"+lang:""));
		ShowDailog(DataSource,ModuleID,TabID);
	}
}

/*
 * 填充数据到表格
 */
function ShowDailog(DataSource,ModuleID,TabID){
	var DialogObj = findTblObj("ShowDialogTbl_"+ModuleID,document);
	//取样式文件及连接地址
	var key = "Config_"+ModuleID.toString()+"_"+TabID.toString();
	var DataConfig = null;
	if(!ConfigCache.exist(key))
	{
		var ConfigDataObj = KMBILLJC.Modules.DataCollect.ViewDataCollect.GetConfig(ModuleID, TabID).value; //取配置样式
		ConfigCache.add(key,ConfigDataObj);
	}
	DataConfig = ConfigCache.get(key);
	
	try{
		if(DataConfig.Tables.length>0)
		{
			DialogObj.className = DataConfig.Tables[0].Rows[0][DataConfig.Tables[0].Columns[1].Name];
		}
	}catch(e)
	{
	
	//alert(e.message);
	
	}

	try{
		var row = null;
		var cell = null;
		//清除数据
		while(DialogObj.rows.length>0){
			DialogObj.deleteRow(0);
		}
		//填充数据
		if(DataSource!=null&&DataSource.Tables.length>0)
		{
			for (var i = 0; i < DataSource.Tables[0].Rows.length; i++) {
				row = DialogObj.insertRow(DialogObj.rows.length);
				for (j = 0; j < DataSource.Tables[0].Columns.length; j++) {
					cell = row.insertCell(j);
					cell.id = "id"+i.toString()+j.toString();
					cell.className="td"+j.toString();
					cell.innerHTML =DataSource.Tables[0].Rows[i][DataSource.Tables[0].Columns[j].Name];//toString();
				}
			}
		}else{
			row = DialogObj.insertRow(0);
			cell = row.insertCell(0);
			cell.id="NoContent"+ModuleID.toString();
			cell.style.textAlign="center";
			cell.innerHTML="<font color='red'>很抱歉，没有相关内容....</font>";
		}
	}catch(e){}
	
	//加一行显示更多链接
	try{
		if(DataConfig.Tables[0].Rows[0]["moreState"]=="True")
		{
			row = DialogObj.insertRow(DialogObj.rows.length);
			cell = row.insertCell(0);
			cell.colSpan=((DataSource==null)?1:DataSource.Tables[0].Columns.length);
			cell.align="right";
			var more = "更多...";
			var objs = document.getElementById(DataConfig.Tables[0].Rows[0]["More"].toString());
			if(objs!="undefined")
			{
				if(objs.value!="zh-CN")
				{
					more = "more...";
				}
			}        
			cell.innerHTML = "<a href=\""+DataConfig.Tables[0].Rows[0]["moreUrl"].toString()+"\" target=\"_blank\">"+more+"</a>";
		}
	}catch(e){}

	if(document.getElementById("Dialog_"+ModuleID).style.display == "none")
	{
		document.getElementById("Dialog_"+ModuleID+"_Default").style.display="none";
		document.getElementById("Dialog_"+ModuleID).style.display = "";
	}
}

/*
 * 取表格对象
 * 主要作用是兼容IE和FireFox两种浏览器，主要原理中在不同听浏览器下
 * 得到的对象不同引起
 */
function findTblObj(theObj, theDoc)    
{    
    var p, i, foundObj;      
    if(!theDoc) theDoc = document;    
    if( (p = theObj.indexOf("?")) > 0 && parent.frames.length)    
    {    
        theDoc = parent.frames[theObj.substring(p+1)].document;    
        theObj = theObj.substring(0,p);    
    }    
    if(!(foundObj = theDoc[theObj]) && theDoc.all) foundObj = theDoc.all[theObj];    
    for (i=0; !foundObj && i < theDoc.forms.length; i++)    
        foundObj = theDoc.forms[theObj];    
    for(i=0; !foundObj && theDoc.layers && i < theDoc.layers.length; i++)    
        foundObj = findObj(theObj,theDoc.layers.document);    
    if(!foundObj && document.getElementById) foundObj = document.getElementById(theObj);    
    return foundObj;    
} 

/*
 * 设置Tab标签样式及显示内容
 */
function SetStatus(ModuleID,obj,TabID,Status,lang,IsMultilingual){
    try
    {
	    Do(ModuleID,obj);
	    alertEx(ModuleID);
	    SetMask(ModuleID);
	    Init(ModuleID,TabID,Status,lang,IsMultilingual);
	    ClearMask(ModuleID);
	    UnDo(ModuleID);
	}catch(e)
	{
	    //alert(e.message);
	}
}

function Do(ModuleID,obj)
{
	try{
		var TabObj = document.getElementById("Tab_"+ModuleID.toString());
		var TabItems = TabObj.getElementsByTagName("li");
		for(var i=0;i<TabItems.length;i++)
		{
			if (TabItems[i].className=="active") {
				TabItems[i].className = "default";
			}
		}
		obj.className = "active";
	}catch(e){}
}

/*
 * 清除Tab样式及显示内容
 */
function ClearStatus(obj)
{
	obj.className ="default";
}

/*
 * 显示数据获取等待提示信息
 */
function alertEx(ModuleID){
	try{
		var dv = document.getElementById('msg'+ModuleID.toString()); 
		if (dv == null)
		{
			dv = document.createElement("div"); 
			dv.setAttribute('id','msg'+ModuleID.toString());
			dv.style.position = "absolute";
			dv.style.border = "1px solid #adce23";
			dv.style.marginLeft = "30px";
			dv.style.paddingTop = "5px";
			dv.style.fontsize = "10px";
			dv.style.paddingLeft = "10px";
			dv.style.top="10px";
			dv.style.left = "10px";		
			dv.style.color = "red";
			dv.style.background = "#EEFFEE";
			dv.style.width = "260px";
			dv.style.index = "10000";
			dv.innerHTML = " <img src='/Content/Tab/loading.gif' style='float:left;'>  请稍候,正在读取数据.....</font>";
			document.getElementById("Dialog_"+ModuleID).appendChild(dv);  
		}
	}catch(e){
		}
}

/*
 * 清除数据获取等待提示信息
 */
function UnDo(ModuleID)
{
    try{
        //Concurrent.Thread.sleep(500);
	    var dv = document.getElementById('msg'+ModuleID.toString());
	    if(dv!=null)
	    {
		    document.getElementById("Dialog_"+ModuleID).removeChild(dv);
	    }
	}catch(e){}
}

/*
 * 创建遮罩层
 */
function  SetMask(ModuleID)
{
	try{
		var MaskObj = document.getElementById("Mask_"+ModuleID);
		MaskObj.style.width = document.getElementById("Tab_"+ModuleID).offsetWidth;
		MaskObj.style.height = document.getElementById("Tab_"+ModuleID).offsetHeight;
		MaskObj.style.display = "";
	}catch(e){}
}

/*
 * 清除遮罩层
 */
function ClearMask(ModuleID)
{
	var MaskObj = document.getElementById("Mask_"+ModuleID);
	if(MaskObj!=null||MaskObj!="undefined")
		MaskObj.style.display="none";
}

/*
 * Tab左边滚动
 */
function TabScrollToLeft(obj,MoldueID,Num)
{
	try{
		var TabObj = document.getElementById("Tab_"+MoldueID.toString());
		var TabItems = TabObj.getElementsByTagName("li");
		for(var i=TabItems.length-1;i>=0;i--)
		{
			if(i==TabItems.length-1) continue;
			if(i-Num==0) 
			{
				TabItems[TabItems.length-1].style.display="none";
				return;
			}
			if((TabItems[i].style.display=="block")&&(TabItems[i-Num].toString()!="undefined"))
			{
				TabItems[i].style.display="none";
				TabItems[i-Num].style.display="block";
				TabItems[0].style.display="block";
				return ;
			}
		}	
	}catch(e){}
}

/*
 * Tab右边滚动
 */
function TabScrollToRight(obj,MoldueID,Num)
{
	try{
		var TabObj = document.getElementById("Tab_"+MoldueID.toString());
		var TabItems = TabObj.getElementsByTagName("li");
		for(var i=0;i<TabItems.length;i++)
		{
			if(i==0) continue;
			if(i+Num==TabItems.length-1) 
			{
				TabItems[0].style.display="none";
				return;
			}
			if((TabItems[i].style.display=="block")&&(TabItems[i+Num].toString()!="undefined"))
			{
				TabItems[i].style.display="none";
				TabItems[i+Num].style.display="block";
				TabItems[TabItems.length-1].style.display="block";
				return ;
			}
		}	
	}catch(e){}
}

//function getElementPos(elementId) {
//	var ua = navigator.userAgent.toLowerCase();
//    var isOpera = (ua.indexOf('opera') != -1);
//	var isIE = (ua.indexOf('msie') != -1 && !isOpera); // not opera spoof
//	var el = document.getElementById(elementId);
//	if(el.parentNode === null || el.style.display == 'none'){
//	       return false;    
//	}
//	var parent = null;
//	var pos = [];
//	var box;
//	if(el.getBoundingClientRect)    //IE     
//	{
//		box = el.getBoundingClientRect();
//		var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
//        var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
//		return {x:box.left + scrollLeft, y:box.top + scrollTop};
//    }else if(document.getBoxObjectFor)    // gecko     
//    {
//		box = document.getBoxObjectFor(el);
//		var borderLeft = (el.style.borderLeftWidth)?parseInt(el.style.borderLeftWidth):0; 
//		var borderTop = (el.style.borderTopWidth)?parseInt(el.style.borderTopWidth):0;
//		pos = [box.x - borderLeft, box.y - borderTop];
//	}else    // safari & opera     
//	{
//		pos = [el.offsetLeft, el.offsetTop];
//		parent = el.offsetParent;
//		if (parent != el){
//			while (parent){
//				pos[0] += parent.offsetLeft;
//				pos[1] += parent.offsetTop;
//				parent = parent.offsetParent;
//			}
//	}
//	if (ua.indexOf('opera') != -1||( ua.indexOf('safari') != -1 && el.style.position == 'absolute' ))
//	{
//		pos[0] -= document.body.offsetLeft;
//		pos[1] -= document.body.offsetTop;
//	}
//	}
//	if (el.parentNode)
//	{
//		parent = el.parentNode;
//	}else{
//		parent = null;
//	}
//	while(parent && parent.tagName != 'BODY' && parent.tagName != 'HTML')
//	{ // account for any scrolled ancestors
//		pos[0] -= parent.scrollLeft;
//		pos[1] -= parent.scrollTop;
//		if (parent.parentNode)
//		{
//			parent = parent.parentNode;
//		}
//		else{
//			parent = null;
//		}
//	}
//	return{x:pos[0], y:pos[1]};
//}























