﻿

/*

                 #################### Common Functions 功能区 #############################
 
*/

function isArray(obj) {
   return obj.constructor == Array ?  true :  false;
}
function isUNEString (aStr){
	if (aStr == undefined || aStr == null){
		return true;
	}
	if ( aStr.constructor == String) {
		return (aStr == "") ? true : false;
	}
	return false;
}

function isNull(aStr,aDefValue){
	if (aStr == null || aStr == undefined) 
		return aDefValue;
	return aStr;
}

/*

                 #################### Ajax 功能区 #############################
 
*/
// Ajax 需要的全局变量：
// _ajaxProcessError4(errorMessage) Ajax 错误处理
// _ajaxProcess2(ajaxObj) Ajax 处理处理 readyState = 2 时
function nodo(){}
var _ajaxREQUEST = false; // 使用用Ajax的方式 true:异步，false: 同步 可选
var _ajaxURL = ""; //连接地址 (必须初始化)
var _ajaxMETHOD = "post" // ajax 获取方法，当为post方法时，ajax调用页面必须读取上传的数据，否则发生 12030 错误或12031错误
var _ajaxCMD = ""; //连接命令 (必须初始化)
var _ajaxCONTENT = ""; //传入参数 (必须初始化)
var _ajaxERROR = 0;

function _getAjax2(){
	var tajax;
	var msxml_progid = ['MSXML2.XMLHTTP.8.0', 'MSXML2.XMLHTTP.7.0', 'MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP.2.6', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
	try{
		tajax = new XMLHttpRequest();
	}catch (e){
		for(var i = 0; i < msxml_progid.length; ++i){
			try{
				tajax = new ActiveXObject(msxml_progid[i]);
				break;
			}catch (e){
				window.alert("对不起，系统检测到您的浏览器暂不能使用Ajax，因此某此功能无法实现,建议您使用 Internet Explorer 6.0 浏览器。");
			}
		}
	}
	return tajax;
}


function _getAjax(){
    var tajax;
    try {
        tajax = new XMLHttpRequest()
    }catch (IEXMLHttp2){
        try {
            tajax = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (IEXMLHttp){
            try{
               tajax =  new ActiveXObject("Microsoft.XMLHTTP");
            } catch (ajaxError){
                tajax = false;
                throw "对不起，系统检测到您的浏览器暂不能使用Ajax，因此某此功能无法实现,建议您使用 Internet Explorer 6.0 浏览器。";
            }
        }
    }
    return tajax;
}

function DT(){
    var tmpdate = new Date();
    return "RefreshDT="+tmpdate.getMilliseconds();
}
function ajaxDefaultProcess4(aContent){
	document.write(aContent);
}


function useAjax(aURL,aCMD,aCONTENT,callbackfun,aErrorFun,callbackfun2,aREQUEST){
	try{
        if (isUNEString(aURL))  throw "** 请 aURL 参数";
        if (isUNEString(aCMD))  throw "** 请初始化 aCMD 参数";
        if (isUNEString(aCONTENT))  throw "** 请初始化 aCONTENT 参数";
    }catch (ex) {
		window.alert(ex);
		return;
    }
    var tREQUEST
    if (typeof(aREQUEST) != "boolean"){
		tREQUEST = false;
    } else {
		tREQUEST = aREQUEST;
    }

    var _tajax = _getAjax();
	if (aURL.indexOf("?") == -1){
		aURL += "?" + DT();
	} else {
		aURL += "&" + DT();
	}

	if (typeof(__webpageParam) != "undefined" && __webpageParam.constructor == webpagePackage){
		aURL += "&__WegPageParamPost="+ __webpageParam.toString();
	}
    _tajax.open("POST",aURL,tREQUEST);

    var tERROR = 0; // 没有错误
    _tajax.onreadystatechange = function(){
        if (_tajax.readyState == 4){
			try{
				if (_tajax.status <200 || _tajax.status > 299){
                    throw  _tajax.status +" : " + _tajax.statusText;
                }
                
                var tajaxdom = _tajax.responseXML;
                var tcmd = tajaxdom.selectSingleNode("/ajaxdoc/cmd").text;
                var tcontent = tajaxdom.selectSingleNode("/ajaxdoc/content").text;
                
                if (tcmd == "0") // 发生错误
                    throw tcontent;
            }catch (ex){
				if (typeof(aErrorFun) == "function"){
					aErrorFun(ex,_tajax);
				}else{
					if (ex.constructor == Error) {
						window.alert("*C* " + ex.description);
					} else {
						window.alert("*S* " + ex);
					}
				}
				tERROR = ex;
				return; // 出错时返回
            }
            if (typeof(callbackfun) != "undefined") {
				callbackfun(tcontent);
            } else {
				ajaxDefaultProcess4(tcontent)
            }
        } else if (_tajax.readyState == 2) {
            if (typeof(callbackfun2) == "function"){
                callbackfun2(_tajax)
            }
        }
    }
    var _sendpackage = _ajaxPackage(aCMD,aCONTENT);
    _tajax.send(_sendpackage);
    return tERROR;
}

//
function useAjaxEx(aURL,aCMD,aCONTENT,callbackfun,aErrorFun,callbackfun2,aREQUEST){
	try{
        if (isUNEString(aURL))
            throw "** 请 aURL 参数";
        if (isUNEString(aCMD))
            throw "** 请初始化 aCMD 参数";
        if (isUNEString(aCONTENT))
            throw "** 请初始化 aCONTENT 参数";
    }catch (ex) {
		showError(ex);
		return errObj(ex);
    }

    var _tajax = _getAjax();
	if (aURL.indexOf("?") == -1){
		aURL += "?" + DT();
	} else {
		aURL += "&" + DT();
	}

	if (typeof(__webpageParam) != "undefined" && __webpageParam.constructor == webpagePackage){
		aURL += "&__WegPageParamPost="+ __webpageParam.toString();
	}
    _tajax.open("POST",aURL,false); // 必须为异步模式

    var tERROR = 0; // 没有错误
    _tajax.onreadystatechange = function(){
        if (_tajax.readyState == 4){
			try{
				if (_tajax.status <200 || _tajax.status > 299){
                    throw  _tajax.status +" : " + _tajax.statusText;
                }
                var tajaxdom = _tajax.responseXML;
                var tcmd = tajaxdom.selectSingleNode("/ajaxdoc/cmd").text;
                var tcontent = tajaxdom.selectSingleNode("/ajaxdoc/content").text;
                if (tcmd == "0") // 发生错误
                    throw tcontent;
            }catch (ex){
				if (typeof(aErrorFun) == "function"){
					aErrorFun(ex,_tajax);
				} else {
					showError(ex);
				}
				tERROR = errObj(ex);
				return tERROR  // 出错时返回
            }
            if (typeof(callbackfun) != "undefined") {
				tERROR = callbackfun(tcontent);
            } else {
				tERROR = ajaxDefaultProcess4(tcontent)
            }
            return tERROR;
        } else if (_tajax.readyState == 2) {
            if (typeof(callbackfun2) == "function"){
                callbackfun2(_tajax)
            }
        }
        return tERROR;
    }
    var _sendpackage = _ajaxPackage(aCMD,aCONTENT);
    _tajax.send(_sendpackage);
    return tERROR;
}

function tmpuseAjaxEx(aURL,aCMD,aCONTENT,callbackfun,aErrorFun,callbackfun2,aREQUEST){
    try{
        if (isUNEString(aURL))
            throw "** 请 aURL 参数";
        if (isUNEString(aCMD))
            throw "** 请初始化 aCMD 参数";
        if (isUNEString(aCONTENT))
            throw "** 请初始化 aCONTENT 参数";
        var tREQUEST
        if (typeof(aREQUEST) != "boolean"){
			tREQUEST = false;
        } else {
			tREQUEST = aREQUEST;
        }

        var _tajax = _getAjax();
		if (aURL.indexOf("?") == -1){
			aURL += "?" + DT();
		} else {
			aURL += "&" + DT();
		}

		if (typeof(__webpageParam) != "undefined" && __webpageParam.constructor == webpagePackage){
			aURL += "&__WegPageParamPost="+ __webpageParam.toString();
		}
        _tajax.open("POST",aURL,tREQUEST);

        var tERROR = 0; // 没有错误
        _tajax.onreadystatechange = function(){
            if (_tajax.readyState == 4){
                try{
                    if (_tajax.status <200 || _tajax.status > 299){
                        throw  _tajax.status +" : " + _tajax.statusText;
                    }
                    var tajaxdom = _tajax.responseXML;
                    debugAlert(_tajax.responseText);
                    var tcmd = tajaxdom.selectSingleNode("/ajaxdoc/cmd").text;
                    var tcontent = tajaxdom.selectSingleNode("/ajaxdoc/content").text;
                    if (tcmd == "0") // 发生错误
                        throw tcontent;
                    if (typeof(callbackfun) != "undefined") {
						callbackfun(tcontent);
                    } else {
						ajaxDefaultProcess4(tcontent)
                    }
                 }catch (ex){
					if (typeof(aErrorFun) == "function"){
						aErrorFun(ex,_tajax);
                    }else{
                        window.alert("[Ajax 读取数据错误]: " + ex);
                        document.write(_tajax.responseText);
                    }
                    tERROR = _tajax.status;
                }
            } else if (_tajax.readyState == 2) {
                if (typeof(callbackfun2) == "function"){
                    callbackfun2(_tajax)
                }
            }
        }
        var _sendpackage = _ajaxPackage(aCMD,aCONTENT);
        _tajax.send(_sendpackage);
        return tERROR;
     }catch(msg){
        window.alert(msg);
     } 
}

// 返回在一个对象
// retObj.cmd = 0 : 结果错误 // 其他值, 结果正常
// retObj.content = 返回的结果
// retObj.item 返回结果有格式化为 attrValueObject 对象

function useAjax2(aURL,aCMD,aCONTENT){
	var retObj = new Object();
    var _tajax = _getAjax();
	if (aURL.indexOf("?") == -1){
		aURL += "?" + DT();
	} else {
		aURL += "&" + DT();
	}
    _tajax.open("POST",aURL,false);
    _tajax.onreadystatechange = function(){
        if (_tajax.readyState == 4){
            if (_tajax.status >= 200 && _tajax.status <= 299){

				var tajaxdom = _tajax.responseXML;
				var tcmd = tajaxdom.selectSingleNode("/ajaxdoc/cmd").text;
				var tcontent = tajaxdom.selectSingleNode("/ajaxdoc/content").text;
                
                if (tcmd == "0"){
					retObj = new Error();
                }
				retObj.cmd = tcmd
				retObj.content = tcontent;
				retObj.item = new attrValueObject(tcontent);
			} else {
				retObj = new Error();
				retObj.number = 0;
				retObj.descriptioin = "* "+  _tajax.status +":" + _tajax.statusText;
				
				// 兼容以前的版本
				retObj.cmd = 0
				retObj.content = "* "+  _tajax.status +":" + _tajax.statusText;
            }
         }
    }
    var _sendpackage = _ajaxPackage(aCMD,aCONTENT);
    _tajax.send(_sendpackage);
	 return retObj;
}


function _ajaxPackage(aCmd,aContent){
	var tReg = /&/g
	var tContent = aContent.replace(tReg,"&amp;")
	tReg = />/g
	tContent = tContent.replace(tReg,"&gt;");
	tReg = /</g
	tContent = tContent.replace(tReg,"&lt;");
	tReg = /"/g
	tContent = tContent.replace(tReg,"&quot;");
	tReg = /'/g
	tContent = tContent.replace(tReg,"&apos;");
	
    var tstr = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
    tstr += "<ajaxdoc>\n";
    tstr += "  <cmd>";
    tstr += aCmd;
    tstr += "</cmd>\n";
    tstr += "  <content>";
    tstr += tContent;
    tstr += "</content>\n";
    tstr += "</ajaxdoc>";
    return tstr;
}

/* 

                 #################  用户 userobject 对象 #############################

*/ 

var _separatorchar1 = '\u1001'
var _separatorchar2 = '\u1002'
var _separatorchar3 = '\u1003'

function separatorcharCheck(aString){
    if (aString.indexOf(_separatorchar1) != -1 || aString.indexOf(_separatorchar1) != -1 || aString.indexOf(_separatorchar1) != -1 ){
        throw "内容含有非法字符，请检查 ";
    }
}

function twoObject(aObj1,aObj2){
    this.obj1 = aObj1;
    this.obj2 = aObj2;
}

function attrValueObject(aStr){
    if(typeof(aStr) != "undefined" && aStr != null &&  aStr != "") {
        var tarr1 = aStr.split(_separatorchar1);
        for (var i=0; i<tarr1.length;i++){
            var tarr2 = tarr1[i].split(_separatorchar2);
            if ((typeof(tarr2[0]) == "undefined") || tarr2[0] == "") continue;
            if (typeof(tarr2[1]) == "undefined"){
                this[tarr2[0]] = "";
            } else {
                this[tarr2[0]] = tarr2[1];
            }
        }
    }
    this.addAttr = function (aAttr,aValue) {
        this[aAttr] = aValue;
    }
    
    this.addStrAttr = function (aStrAttr){
		var tAttrArr = aStrAttr.split("\u1002");
		if (tAttrArr.length == 2) {
			this[tAttrArr[0]] = tAttrArr[1];
		}
    }
    
    this.toString = function(){
        var tresult = "";
        var firstsign = true;
        for (var itemname in this){
            if (firstsign){
                if (typeof(this[itemname]) != "function"){
                    tresult += itemname + _separatorchar2 + this[itemname];
                    firstsign = false;
                }
            }else{
                if (typeof(this[itemname]) != "function"){
                    tresult += _separatorchar1 + itemname + _separatorchar2 + this[itemname];
                }
            }
        }
        return tresult;
    }
}

function uniteString3(aStringArr){
	if (isArray(aStringArr) == false) {
		if (typeof(aStringArr) == "undefined" || aStringArr == null){
			throw "传入的对象不能为空";
		}
		return aStringArr.toString();
	}
	var tstr = "";
	for(var titem in aStringArr){
		if ( tstr == "") {
			tstr = titem;
		} else {
			tstr += _separatorchar3 + titem;
		}
	}
	return tstr;
}
function uniteString1(aStringArr){
	if (isArray(aStringArr) == false) {
		if (typeof(aStringArr) == "undefined" || aStringArr == null){
			throw "传入的对象不能为空";
		}
		return aStringArr.toString();
	}
	var tstr = "";
	for(var titem in aStringArr){
		if ( tstr == "") {
			tstr = titem;
		} else {
			tstr += _separatorchar1 + titem;
		}
	}
	return tstr;
}

function uniteString2(aStr1,aStr2){
	if (isUNEString(aStr1) || isUNEString(aStr2))  throw "传入参数不正确，请检查";
	return aStr1 + _separatorchar2 + aStr2;
}

function uniteAttrValueObject(){
	var tRetStr = "";
	for(var iargs in arguments) {
		if (tRetStr == ""){
			tRetStr = iargs.toString();
		} else {
			tRetStr = "\u1001" + iargs.toString();
		}
	}
	return tRetStr;
}
/* 

                 #################  客户端 userdata 存储 #############################

*/ 


var _userdataObjNames //用,分割
var _userdataObjIDs  //用，分割
var _userdataObjTagNames //有，分割

var _userDataID = 0;
function openUserData(){
	if (_userDataID != 0){
		throw "UserData 对象已经打开，请选关闭 UserData";
	}
	_userDataID = document.body.addBehavior("#default#userData");
    var tuserdata = document.body;
    var tdate = new Date();
    tdate.setFullYear = tdate.getFullYear() + 1;
    tuserdata.expire = tdate;
    return tuserdata
}

function closeUserData(){
	if (_userDataID == 0 ) return;
	document.body.removeBehavior(_userDataID);
	_userDataID = 0;
}

function saveToUserData(aUDName,aValue){
	if (isUNEString(aUDName)){
		throw "请指定 UserData 名称";
	}
	if (isUNEString(aValue)){
		return;
	}
	var tuserdata = openUserData();
    tuserdata.setAttribute(aUDName + "Data",aValue.toString());
    tuserdata.setAttribute("___","___");
    tuserdata.save(aUDName);
    closeUserData();
}

function loadFromUserData(aUDName){
    if (isUNEString(aUDName)){
		throw "请指定 UserData 名称";
	}
	var tuserdata = openUserData();
    tuserdata.load(aUDName);
    var tdata = tuserdata.getAttribute(aUDName + "Data");
    closeUserData();
    return tdata;
}

function PageToUserData(aUDName){
    if (isUNEString(aUDName)){
		throw "请指定 UserData 名称";
	}
    var tdata = new attrValueObject();
    var tinputElems = document.getElementsByTagName("input");
    var itemElem;
    for(var i=0; i< tinputElems.length ; i++){
        itemElem = tinputElems[i];
        if (!(itemElem.type.toLowerCase() == "text" || itemElem.type.toLowerCase() == "hidden" || itemElem.type.toLowerCase() == "checkbox" ||itemElem.type.toLowerCase() == "radio" )) continue;
        if (typeof(itemElem.id)=="undefined" || itemElem.id == ""){
                throw "Input 元素含有无 id 的元素,请检查";
        }
       // if (itemElem.needSaveByUserData == true){
            if (itemElem.type.toLowerCase() == "text" || itemElem.type.toLowerCase() == "hidden"){
                tdata.addAttr(itemElem.id,itemElem.value);
            }else if(itemElem.type.toLowerCase() == "checkbox" || itemElem.type.toLowerCase() == "radio"){
                tdata.addAttr(itemElem.id,(itemElem.checked ? 1: 0 ));
            } 
       // }
    }
    
    /// 存储textarea 元素
    var ttextareas = document.getElementsByTagName("textarea");
    for(var i=0; i< ttextareas.length ; i++){
        itemElem = ttextareas[i];
        if (typeof(itemElem.id)=="undefined" || itemElem.id == ""){
            throw "TextArea 元素含有无 id 的元素,请检查";
        }
       // if (itemElem.needSaveByUserData == true){  
            separatorcharCheck(itemElem.innerHTML)  // 检查是否包含分隔字符; 
            tdata.addAttr(itemElem.id, itemElem.innerHTML); 
       // }
    }
    // 存储Select 元素  名称`值|名称`值
    var tselects = document.getElementsByTagName("select");
    for(var i=0 ; i < tselects.length ; i++){
        itemElem = tselects[i];
        if (typeof(itemElem.id)=="undefined" || itemElem.id == ""){
            throw "select 元素含有无 id 的元素,请检查";
        }
       // if (itemElem.needSaveByUserData == true){ 
           // separatorcharCheck(itemElem.innerHTML)  // 检查是否包含分隔字符;
           // tdata.addAttr(itemElem.id,itemElem.innerHTML );
            tdata.addAttr(itemElem.id,itemElem.value );
       // }
    }
    saveToUserData(aUDName,tdata.toString());
}

function UserDataToPage(aUDName){
    if (isUNEString(aUDName)){
		throw "请指定 UserData 名称";
	}
	var ttmpdata = loadFromUserData(aUDName);
	if (isUNEString(ttmpdata)) return;
	var tdata = new attrValueObject(ttmpdata);
    var telem;
    for(var titem in tdata){
        if (typeof(tdata[titem]) != "function"){
            telem = document.getElementById(titem);
            if (telem == null) {
				if (window.confirm("userData 无法写入[" + titem +"]元素, 是否继续写入其他元素? ")){
					continue;
				}
				return;
			}
            if (telem.tagName.toLowerCase() == "input"){
                if (telem.type.toLowerCase() == "text" || telem.type.toLowerCase() == "hidden"){
                    telem.value = tdata[titem];
                }else if (telem.type.toLowerCase() == "checkbox" || telem.type.toLowerCase() == "radio"){
                   telem.checked = tdata[titem] == 0 ? false : true;
                }
            } else if(telem.tagName.toLowerCase() == "select" ) {
                telem.value = tdata[titem];
            } else if ( telem.tagName.toLowerCase() == "textarea"){
                telem.innerHTML = tdata[titem];
            } else {
                if (window.confirm("userData [" + titem +"]元素的类型不能匹配, 是否继续写入其他元素? ")){
					continue;
				}
				return;
            }
        }
    }
    
}

/* 
       ABC选项
*/
function ABCSort(aABC){
    aABC = aABC.toLowerCase();
    var treturn = new Array();
    for(var i=0 ; i < aABC.length ; i++){
        treturn.push(aABC.charAt(i));
    }
    treturn.sort();
    return treturn.join("");
}

/*
    答案选择
*/

function daOfSelect(aName){
    var tret = "";
    var tlist = document.getElementsByName(aName);
    for(var i=0 ; i< tlist.length ; i++){
        if (tlist[i].checked){
            tret += tlist[i].value;
        }
    }
    return tret;
}

function daOfSelect(aBaseName){
    var tret = ""; 
    var i=0;
    var titem;
    var itemtagName;
    while( (titem = document.getElementById(aBaseName+"_"+ i ) )!= null){
        if (titem.checked)
           tret += titem.value;
        i++; 
    }
    if (tret.length < 2)
        return tret;
    return ABCSort(tret);
}


/*

 ###################### 存储函数 ##########################

*/

function _test(){
   // try{ 
   alert(daOfSelect("a1"));
   alert(daOfSelect("b1"));
   
   // saveToUserData("testdaa");
   /* } catch(ex){
        window.alert(ex);
    }
    /// userobject 测试 ;
    var tstr = "name"+ _separatorchar2+"张晓宏"+_separatorchar1+"age"+_separatorchar2+"15"
    var t = new attrValueObject(tstr);
    t.addAttr("sex","男");
    tstr = t.toString();
    window.alert(t);
    var s = new attrValueObject(tstr);
    window.alert(s["name"]);
    window.alert(s["sex"]); */
    
}

/*  Ajax Functions */
function ajaxFillDDLB(aDDLBID,aURL,aCMD,aCONTENT){
    var telem;

    if (typeof (aDDLBID) == "string") {
	    telem = document.getElementById(aDDLBID);
	    if (telem == null || telem.tagName != "SELECT") {
		    window.alert("没有找到要填充的元素");
		    return;
	    }
	}else {
	    if (aDDLBID.tagName != "select"){
	        window.alert("未找到指定控件");
	        return;
	    }
	}
	
	var __tcontent = "";
	function tcallback(aContent){
		__tcontent = aContent;
	}
	var tvalue;
	if (telem.selectedIndex > 0) {
		tvalue = telem.item(telem.selectedIndex).value
	} else {
		if (telem.LastValue != null) {
			tvalue = telem.LastValue;
		} else {
			tvalue = "";
		}
	}
	telem.options.length = 0;
	toption = document.createElement("option");
	toption.text = " 更新数据中 ... ";
	toption.style.color = "#EDEDED";
	telem.options.add(toption);
	
	if (useAjax(aURL,aCMD,aCONTENT,tcallback,null,null,false) == 0){
		var arr1,arr2;
		telem.options.length = 0;
		var toption;
		arr1 = __tcontent.split(_separatorchar1);
		for(var ti = 0 ;ti < arr1.length;ti++){
			arr2 = arr1[ti].split(_separatorchar2);
				toption = document.createElement("option");
				telem.options.add(toption)
			if (arr2.length > 1){
				toption.text = arr2[1];
				toption.value = arr2[0];
			} else{
				toption.text = arr2[0];
				toption.value = arr2[0];
			}
			if (tvalue != "" && toption.value == tvalue){
				toption.selected = true;
			}
		}
	}
}
//创建XMLRequest对象
var xmlHttp=false;
function CreateXmlHttpRequest()
{
	xmlHttp = _getAjax();
}
