﻿function TabCommon_ChangeShow(showIndex, totalIndex, tab_Pre, content_Pre)
{
	var i;
	for(i = 1; i <= totalIndex; i++)
	{
		changeBG(tab_Pre + i, "tab_common_not_chosen");
		changeBG(content_Pre + i, "disn");
	}
	changeBG(tab_Pre + showIndex, "tab_common_chosen");
	changeBG(content_Pre + showIndex, "disb");
}

function TabCommon_ChangeShow4Proj(showIndex, totalIndex, tab_Pre, content_Pre)
{
	var i;
	for(i = 1; i <= totalIndex; i++)
	{
		changeBG(tab_Pre + i, "tab_common_not_chosen");
		changeBG(content_Pre + i, "disn");
	}
	changeBG(tab_Pre + showIndex, "tab_common_chosen");
	changeBG(content_Pre + showIndex, "disb");
	
	if(showIndex==1)
	{
		 for(i = 1; i <= totalIndex; i++)
		 {
		    changeBG(content_Pre + i, "disb");
		 }
	}
}

function TabBig_ChangeShow(showIndex, totalIndex, tab_Pre, content_Pre)
{
	var i;
	for(i = 1; i <= totalIndex; i++)
	{
		changeBG(tab_Pre + i, "not_chosen");
		changeBG(content_Pre + i, "disn");
	}
	changeBG(tab_Pre + showIndex, "chosen");
	changeBG(content_Pre + showIndex, "disb");
}

function resetSubLevel(mainName, subName, allName, hiddenName)
{
    var ctrlMain = document.getElementById(mainName);
    var ctrlSub = document.getElementById(subName);
    var ctrlAll = document.getElementById(allName);
    var ctrlHidden = document.getElementById(hiddenName);
    var i;
    var value = "-";
    ctrlSub.options.length = 0;
    
    ctrlSub.options.add(new Option("请选择","-"));
    for( i = 0; i < ctrlMain.options.length; i++)
    {
        if(ctrlMain.options[i].selected == true)
        {
            value = ctrlMain.options[i].value;
        }
    }
    ctrlHidden.value = value;
    if(value != "-")
    {
        for( i = 0; i < ctrlAll.options.length; i++)
        {
            if(ctrlAll.options[i].value.substr(0,3) == value.substr(0,3) && ctrlAll.options[i].value != value)
            {
                ctrlSub.options.add(new Option(ctrlAll.options[i].text,ctrlAll.options[i].value));
            }
        }
    }
}

function selectLevel(subName,hiddenName)
{
    var ctrlSub = document.getElementById(subName);
    var ctrlHidden = document.getElementById(hiddenName);
    var i;
    for( i = 0; i < ctrlSub.options.length; i++)
    {
        if( ctrlSub.options[i].selected == true)
        {
            ctrlHidden.value = ctrlSub.options[i].value;
        }
    }
}

function setLevel(mainName,subName,hiddenName,selectValue,allName)
{
    var ctrlMain = document.getElementById(mainName);
    var ctrlSub = document.getElementById(subName);
    var ctrlHidden = document.getElementById(hiddenName);
    var i, j;
    if(selectValue == null || selectValue.length <= 0)
    {
        setDdlValue(ctrlMain,"-");
        setDdlValue(ctrlSub,"-");
    }
    else if(selectValue.substr(3,6) == "000")
    {
        setDdlValue(ctrlMain,selectValue);
        resetSubLevel(mainName,subName,allName,hiddenName);
        setDdlValue(ctrlSub,"-");
    }
    else
    {
        setDdlValue(ctrlMain,selectValue.substr(0,3)+"000");
        resetSubLevel(mainName,subName,allName,hiddenName);
        setDdlValue(ctrlSub,selectValue);
    }
    ctrlHidden.value = selectValue;
}

function setDdlValue(ctrl, value)
{
    var i ,j;
    for( i = 0; i < ctrl.options.length; i++)
    {
        if(ctrl.options[i].value == value)ctrl.options[i].selected = true;
    }
}

//通过AJAX获取用户简要信息的函数
var httpRequest = createRequest();        //XMLHttpRequest对象
var currentAccountCtrl;                   //当前显示信息的控件名
var loading = "<img src='/RZ_Client/RZImage/clock.gif' alt='loading' />载入中，请稍候...";
function sendAccountRequest(accountID, ctrlID)        //发送请求，accoutID是等待获取信息的用户的ID，ctrlID是显示获取回来的用户信息的ID
{
	var ctrl = document.getElementById(ctrlID);
	if(ctrl && ctrl.innerHTML.length > 0 && ctrl.innerHTML != loading)             //如果控件中已载入过用户信息，则不再重新发送请求
	{
		return;
	}
	httpRequest.open("POST","/Account/ShortInfo.aspx", true);
	httpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	httpRequest.onreadystatechange = getData;
	httpRequest.send("AccountID=" + encodeURIComponent(accountID) + "&CtrlID=" + encodeURIComponent(ctrlID));
}
function getData()
{
	var ctrl = document.getElementById(currentAccountCtrl);
	if(ctrl)
	{
		if(httpRequest.readyState == 4 && httpRequest.status == 200)               //信息已载入的情况下，显示载入的信息
		{
			ctrl.innerHTML = httpRequest.responseText;
		}
		else
		{
			ctrl.innerHTML = loading;
			loading = ctrl.innerHTML;                //innerHTML可能会因环境不同而有所转换，修改之避免出错
		}
	}
}

function showAccountInfo(ctrlName)      //显示信息
{
	currentAccountCtrl = ctrlName;
	changeDisplay(ctrlName, true);
}
function leaveAccountInfo(ctrlName)
{
	currentAccountCtrl = "";
	setTimeout("waitAndHideAccountInfo('" + ctrlName + "')", 300);          //等待一定的时间再隐藏，让鼠标有机会在显示出来的控件中悬停
}
function waitAndHideAccountInfo(ctrlName)
{
	if(currentAccountCtrl != ctrlName) changeDisplay(ctrlName, false);
}

var rz_httpRequest = createRequest();        //XMLHttpRequest对象
var rz_currentCtrl;                          //当前显示信息的控件名
var rz_loading = "载入中，请稍候...";
//载入指定页面内容
//pagePath:页面路径，不包含参数
//parm:参数列表，字符串格式为：   参数1=参数1值,参数2=参数2值,……
//ctrlID:载入页面内容的控件ID
function rz_loadPageInfo(pagePath, parm, ctrlID)
{
	var ctrl = document.getElementById(ctrlID);
	rz_currentCtrl = ctrlID;
	if(ctrl && ctrl.innerHTML.length > 0 && ctrl.innerHTML != rz_loading)             //如果控件中已载入过用户信息，则不再重新发送请求
	{
		return;
	}
	var parmListStr = "CtrlID=" + encodeURIComponent(ctrlID);
	var parmList = parm.split(",");
	var i;
	for(i = 0; i < parmList.length; i++)
	{
		var parmValue = parmList[i].split("=");
		parmListStr += "&" + parmValue[0] + "=" + encodeURIComponent(parmValue[1]);
	}
	rz_httpRequest.open("POST",pagePath, true);
	rz_httpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	rz_httpRequest.onreadystatechange = rz_getData;
	rz_httpRequest.send(parmListStr);
}
function rz_getData()
{
	var ctrl = document.getElementById(rz_currentCtrl);
	if(ctrl)
	{
		if(rz_httpRequest.readyState == 4 && rz_httpRequest.status == 200)               //信息已载入的情况下，显示载入的信息
		{
			ctrl.innerHTML = rz_httpRequest.responseText;
		}
		else
		{
			ctrl.innerHTML = rz_loading;
			rz_loading = ctrl.innerHTML;                //innerHTML可能会因环境不同而有所转换，修改之避免出错
		}
	}
}
var rz_httpRequest2 = createRequest();        //XMLHttpRequest对象
var rz_currentCtrl2;                          //当前显示信息的控件名
var rz_display2;                              //显示页面内容的控件名
//载入指定页面内容并添加到指定控件的末尾
//pagePath:页面路径，不包含参数
//parm:参数列表，字符串格式为：   参数1=参数1值,参数2=参数2值,……
//ctrlID:载入页面内容的控件ID
//displayID:显示页面内容的控件ID（用于部分有外层元素的情况，一般可为""）
function rz_loadPageInfoAdd(pagePath, parm, ctrlID, displayID)
{
	rz_currentCtrl2 = ctrlID;
	rz_display2 = displayID;
	var parmListStr = "CtrlID=" + encodeURIComponent(ctrlID);
	var parmList = parm.split(",");
	var i;
	for(i = 0; i < parmList.length; i++)
	{
		var parmValue = parmList[i].split("=");
		parmListStr += "&" + parmValue[0] + "=" + encodeURIComponent(parmValue[1]);
	}
	rz_httpRequest2.open("POST",pagePath, true);
	rz_httpRequest2.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	rz_httpRequest2.onreadystatechange = rz_getDataAdd;
	rz_httpRequest2.send(parmListStr);
}
function rz_getDataAdd()
{
	var ctrl = document.getElementById(rz_currentCtrl2);
	if(ctrl)
	{
		if(rz_httpRequest2.readyState == 4 && rz_httpRequest2.status == 200)               //信息已载入的情况下，显示载入的信息
		{
			if(rz_httpRequest2.responseText != "null" && rz_httpRequest2.responseText != "error" && rz_httpRequest2.responseText != "")
			{
				ctrl.innerHTML = ctrl.innerHTML + rz_httpRequest2.responseText;
				var displayCtrl = document.getElementById(rz_display2);
				if(displayCtrl) displayCtrl.scrollTop = ctrl.scrollHeight;
			}
		}
		else
		{
		}
	}
}
var rz_httpRequest3 = createRequest();        //XMLHttpRequest对象
//载入指定页面内容并替换指定控件的内容
//pagePath:页面路径，不包含参数
//parm:参数列表，字符串格式为：   参数1=参数1值,参数2=参数2值,……
//ctrlID:载入页面内容的控件ID
//displayID:显示页面内容的控件ID（用于部分有外层元素的情况，一般可为""）
function rz_getDataReplace(rz_currentCtrl3, rz_display3)
{
	var ctrl = document.getElementById(rz_currentCtrl3);
	if(ctrl)
	{
		if(rz_httpRequest3.readyState == 4 && rz_httpRequest3.status == 200)               //信息已载入的情况下，显示载入的信息
		{
			var disText = rz_httpRequest3.responseText;
			if(disText == "null") disText = "";
			if(disText != "error")
			{
				ctrl.innerHTML = disText;
				var displayCtrl = document.getElementById(rz_display3);
				if(displayCtrl) displayCtrl.scrollTop = ctrl.scrollHeight;
			}
		}
		else
		{
		}
	}
}
function rz_loadPageInfoReplace(pagePath, parm, ctrlID, displayID)
{
	rz_currentCtrl3 = ctrlID;                         //当前显示信息的控件名
	rz_display3 = displayID;                          //显示页面内容的控件名
	var parmListStr = "CtrlID=" + encodeURIComponent(ctrlID);
	var parmList = parm.split(",");
	var i;
	for(i = 0; i < parmList.length; i++)
	{
		var parmValue = parmList[i].split("=");
		parmListStr += "&" + parmValue[0] + "=" + encodeURIComponent(parmValue[1]);
	}
	rz_httpRequest3.open("POST",pagePath, true);
	rz_httpRequest3.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	rz_httpRequest3.onreadystatechange = function(){rz_getDataReplace(rz_currentCtrl3, rz_display3);};
	rz_httpRequest3.send(parmListStr);
}

var DisplayFormat;
var moduleObj;
function putToInputCtrl(ctrlName)
{
	var i = 0;
	var array = new Array();
	while(document.getElementById("ModValue"+i))
	{
		array[i] = $("#ModValue"+i).val();
		i++;
	}
	var inputValue = ArrayFormat(DisplayFormat,array);
	$("#"+ctrlName).val(inputValue);
	$("#DivModuleCtrl").css("display","none");
			
}
function initModule(category,field, ctrlName)
{
	if($("#CbxHideModule").attr("checked")==true)return;
	showModule(category,field, ctrlName);
}
function showModule(category, field, ctrlName)
{
	$("#DivModuleCtrl").css("display","block");
	$.get("/CommonCtrl/Ajax/GetModule.ashx",{"Cate":category, rnd:Math.random()},
		function(data){
			moduleObj = eval("("+data+")");
			var i;
			var moduleNamesStr = "<span class='bold_small'>请选择应用的模板</span><br />";
			var fieldID = '';
			for(i = 0;i<moduleObj.length;i++)
			{
				if(field == moduleObj[i].TechnicalField) fieldID = moduleObj[i].ID;
				moduleNamesStr += "<input type=\"radio\" id=\"Module"+moduleObj[i].ID+"\" value=\""+moduleObj[i].ID+"\" name=\"ModuleCategory\" onclick=\"loadModule("+moduleObj[i].ID+",'"+ctrlName+"');\" /><label for=\"Module"+moduleObj[i].ID+"\">"+moduleObj[i].Name+"</label><br />";
			}
			$("#DivModuleNames").html(moduleNamesStr);
			$("#DivInputModule").html(moduleObj[0].InputFormat);
			if(fieldID != '')
			{
				loadModule(fieldID,ctrlName);                   //预先匹配合适的模板类型
			}
			var v = document.getElementById(ctrlName);
			var rightID = matchModule(v.value);
			loadModule(rightID,ctrlName);                       //若输入框中已有内容，则找出匹配的模板，并选中该模板
		}
		);
}
function loadModule(moduleID, ctrlName)
{
	var i;
	for(i = 0;i < moduleObj.length; i++)
	{
		if(moduleObj[i].ID == moduleID)
		{
			$("#Module"+moduleID).attr("checked",true);             //选中指定的模板
			$("#DivInputModule").html(moduleObj[i].InputFormat);
			DisplayFormat = moduleObj[i].OutputFormat;
			break;
		}
	}
	var v = document.getElementById(ctrlName);
	if(moduleID == matchModule(v.value)) fillModule(v.value, moduleID);    //若选中的模板正好与输入框内的内容匹配，则自动填充模板
}
function hideModule()
{
	$("#DivModuleCtrl").css("display","none");
}
//根据模板ID返回模板对象
function getModule(moduleID)
{
	var i;
	for(i = 0; i < moduleObj.length; i++)
	{
		if(moduleObj[i].ID == moduleID)
		{
			return moduleObj[i];
		}
	}
	return 0;
}
//找出符合的匹配的模板
function matchModule(str)
{
	for(var j = 0; j < moduleObj.length; j++)
	{
		var tempFormat = AllFormat(moduleObj[j].OutputFormat,".*");
		var re = new RegExp('(\r)*(\n)+','gm');
		var nStr = str.replace(re,'<br />');
		var nTemp = tempFormat.replace(re,'<br />');
		if(nStr.match(nTemp)) return moduleObj[j].ID;
	}
	return 0;
}
//将内容填充到指定模板内
function fillModule(str, moduleID)
{
	var module = getModule(moduleID);
	if(!module)return;
	var re1 = new RegExp('(\r)*(\n)+','gm');
	var nModule = module.OutputFormat.replace(re1,'<br />');
	var nStr = str.replace(re1,'<br />');
	var moduleSep = AllFormat(nModule,".*").split(".*");
	var i;
	var regStruct = "";
	//构造正则表达式
	for(i = 0; i < moduleSep.length; i++)
	{
		if(moduleSep[i].length > 0)
		{
			regStruct += moduleSep[i];
			regStruct += "|";
		}
	}
	regStruct = regStruct.substr(0,regStruct.length-1);
	var re = new RegExp(regStruct,'gm');
	var parms = nStr.split(re);               //用构造好的正则表达式分离出变量，以便填充到模板内
	for(i = 0; i < parms.length; i++)
	{
		if(parms[i]=='')
			arrayRemove(parms,i);
	}
	for(i = 0; i < parms.length; i++)
	{
		$("#ModValue"+i).val(parms[i]);      //为模板内的变量赋值
	}
}
//格式化字符串，第一个参数是待格式化的字符串，如xxxx{0}xxx{1}xxx；后续参数是字符串
StringFormat = function()
{
	if(arguments.length == 0)
		return null; 

	var str = arguments[0]; 
	for(var i=1;i<arguments.length;i++)
	{
		var re = new RegExp('\\{' + (i-1) + '\\}','gm');
		str = str.replace(re, arguments[i]);
	}
	return str;
}
//格式化字符串，第一个参数是待格式化的字符串，如xxxx{0}xxx{1}xxx；第二个参数是用来进行格式化的字符串的数组
ArrayFormat = function()
{
	if(arguments.length == 0)
		return null; 

	var str = arguments[0];
	var arr = arguments[1];
	for(var i=0;i<arr.length;i++)
	{
		var re = new RegExp('\\{' + (i) + '\\}','gm');
		str = str.replace(re, arr[i]);
	}
	return str;
}
//用指定的一个参数格式化字符串中的所有变量
function AllFormat(str, formatStr)
{
	var re = new RegExp('{\\d*}','gm');
	var newStr = str.replace(re,formatStr);
	return newStr;
}
//删除数组中指定位置的元素
function arrayRemove(arr, idx)
{
	for(var i = idx; i < arr.length; i++)
	{
		arr[i] = arr[i+1];
	}
	arr.length--;
}
