if(typeof(_sysDom)=="undefined")alert("Can not find the _sysDom object!");
if(typeof(_sysXml)=="undefined")
{
    var _sPath=_sysDom.getPath("/Ajax.js",null,self);
    _sysDom.importFile(_sPath+"/Xml.js",self);
}
function ETSOOAjax()
{
    var sLanguage=_sysDom.parseUrl().BL;
    if(sLanguage==null||sLanguage=="")
    {
        sLanguage=_sysDom.getCookie("BL");
        if(sLanguage==null)sLanguage=_sysDom.browser.language;
    }
    else
    {
        var dNow=new Date();
        dNow.setFullYear(dNow.getFullYear()+10);
        _sysDom.setCookie("BL",sLanguage,dNow);
    }
    this.isAllowUpdated=true;
    this.language=sLanguage;
    this.languageText={};
    this.data={};
    this.runningStatus=0;
    this.isReporting=false;
	this.coverFrame=null;
	this.coverFrameOpacity=80;
	this.coverFrameLevel=10;
	this.reportDiv=null;
}
ETSOOAjax.prototype.getText=function(id)
{
    if(id==null||id=="")return id;
    var code=id.charCodeAt(0);
    if(code>160)return id;
    var text=this.languageText[id];
    if(text==null)text=id;
    return text;
}
ETSOOAjax.prototype.errorReport=function(oReq,oFrame,oForm)
{
    if(this.isReporting)return;
    var iStatus=oReq.status;
    if(oFrame==null)oFrame=self;
    if(oForm==null)oForm=oReq.args[0];
    if(iStatus>4)
    {
        this.runningStatus=-1;
        var oAjax=oFrame._sysAjax||this;
        var sKey=(iStatus==12029)?"R_Offline":"R_UnknownError";
        var sText=oAjax.getText[sKey];
        sText+='\r\nAjax: '+oReq.name+' (error code: '+iStatus+')';
		try{
			sText+="\r\n"+oReq._req.responeText;
		}catch(e){}
        this.isReporting=true;
        alert(sText);
        this.isReporting=false;
        if(oForm&&oForm.OK)oForm.OK.disabled=false;
    }
}
ETSOOAjax.prototype.getLoadingText=function(oWin)
{
    var sText=this.languageText.R_Loading;
    if(sText==null&&oWin&&oWin._sysAjax)sText=oWin._sysAjax.languageText.R_Loading;
    if(sText==null)sText="Loading data...";
    return sText;
}
ETSOOAjax.prototype.createCoverFrame=function(oDoc,sBgColor)
{
	if(oDoc==null)oDoc=document;
	if(sBgColor==null)sBgColor="#ffffff";
    var oFrame=oDoc.createElement(_sysDom.browser.isCover?"div":"iframe");
    oFrame.id=_sysDom.getID("ajaxCoverFrame");
    with(oFrame.style)
    {
        position="absolute";
		if(_sysDom.browser.subName=="safari")visibility="hidden";
		else display="none";
        zIndex=this.coverFrameLevel;
        left="0px";
        top="0px";
        border="0px none";
    } 
	_sysDom.setOpacity(oFrame,0);
	oDoc.body.appendChild(oFrame);
    this.coverFrame=oFrame;
	if(oFrame.nodeName=="IFRAME")_sysDom.setIFrameBg(window.frames[oFrame.id],sBgColor);
	else oFrame.style.backgroundColor=sBgColor;
}
ETSOOAjax.prototype.popupCoverFrame=function(bShow)
{
	if(this.coverFrame==null)return;
	if(bShow==null)bShow=true;
	if(bShow)
	{
		var aS=_sysDom.getMaxSize();
        with(this.coverFrame.style)
        {
            width=aS[0]+"px";
            height=aS[1]+"px";
        }
		_sysDom.setOpacity(this.coverFrame,this.coverFrameOpacity);
	}
	if(_sysDom.browser.subName=="safari")this.coverFrame.style.visibility=bShow?"visible":"hidden";
	else this.coverFrame.style.display=bShow?"block":"none";
}
ETSOOAjax.prototype.report=function(sText,oDoc)
{
	if(oDoc==null)oDoc=document;
	var eDiv=this.reportDiv;
	if(eDiv==null)
	{
        eDiv=oDoc.createElement("div");
		eDiv.className="ajaxReportDiv";
        eDiv.style.position="absolute";
		eDiv.style.zIndex=this.coverFrameLevel+1;
        eDiv.style.left="4px";
        eDiv.style.top="4px";
		oDoc.body.appendChild(eDiv);
		
		this.reportDiv=eDiv;
	}
	else eDiv.style.visibility="visible";
	eDiv.innerHTML=sText;
	return eDiv;
}
ETSOOAjax.prototype.getLoadingBar=function(oWin,eDiv,sText)
{
    if(oWin==null)oWin=self;
    if(sText==null)sText=this.getLoadingText(oWin);
    var oDoc=oWin.document;
    if(eDiv==null)
    {
		eDiv=this.report(sText,oDoc);
        eDiv.id=_sysDom.getID("LoadingBar");
        eDiv.style.visibility="visible";
        eDiv.style.display="block";
    }
    else eDiv.innerHTML=sText;
    oWin.latestLoadingBar=eDiv;
    return eDiv;
}
ETSOOAjax.prototype.setSameText=function(sTagName,sId,oContainer)
{
    if(oContainer==null)oContainer=document.body;
    var aEs=oContainer.getElementsByTagName(sTagName);
    var iLen=aEs.length;
    var sText=_sysAjax.getText(sId);
    for(var i=0;i<iLen;i++)
    {
        var oOne=aEs[i];
        if(oOne.id!=sId&&oOne.className!=sId)continue;
        if(oOne.value==null)oOne.innerHTML=sText;
        else oOne.value=sText;
    }
}
ETSOOAjax.prototype.removeLoadingBar=function(oWin,eBar)
{
    if(oWin==null)oWin=self;
    var oDoc=oWin.document;
    if(eBar==null)eBar=oWin.latestLoadingBar;
    if(eBar&&eBar.parentNode)eBar.parentNode.removeChild(eBar);
    oDoc.body.style.visibility="visible";
}
ETSOOAjax.prototype.addStyle=function(oWin,sLanguage)
{
    if(oWin==null)oWin=self;
	var sStyle="font-family:"+((sLanguage=="zh-cn")?"ËÎÌå":"Arial, Helvetica, sans-serif");
	_sysDom.addRule(oWin.document.styleSheets[0],"body",sStyle);
}
ETSOOAjax.prototype.importResources=function(sName,sUrl,oFun,aArgs,sEndIndex,sPara,sMethod,bUpdate,bCoverError)
{
    if(bUpdate==null)bUpdate=false;
    if(bCoverError==null)bCoverError=false;
    var oReq=_sysXml.reqs[sName];
    if(oReq)oReq._req.abort();
    oReq=_sysXml.createRequest(sName,aArgs);
    if(oReq)
    {
        if(sEndIndex!=null)_sysXml.addEnd(sEndIndex,sName,oFun);
        var oReqT=oReq._req;
        var o=this;
        oReqT.onreadystatechange=function()
        {
            if(typeof(_sysXml)=="undefined")return false;
            var oR=oReq.getRequest();
            if(oR)
            {
                o.runningStatus=0;
                if(!oReq.testInterval())return false;
                if(sEndIndex==null)
				{
					if(oFun)oFun(oR,oReq);
				}
                else _sysXml.testEnd(sEndIndex);
            }
            else if(!bCoverError)
            {
                if(o.errorReport)o.errorReport(oReq);
            }
            if(o.myAjax)o.myAjax(oR,oReq);
        }
        if(oReqT.overrideMimeType)oReqT.overrideMimeType('text/xml');
        oReq.loadUrl(sUrl,true,sMethod,sPara,bUpdate);
    }
}
ETSOOAjax.prototype.importLanguageText=function(sLanguage,sFile,aArgs,sEndIndex,bUpdate)
{
    if(sLanguage==null)return false;
    var sName;
    var iPos=sFile.lastIndexOf("/");
    if(iPos==-1)sName=sFile;
    else sName=sFile.substr(iPos+1);
    sName=sName.replace(".","_");
    iPos=sFile.lastIndexOf(".");
    if(aArgs==null)aArgs=[];
    aArgs[4]=this;
    var sUrl=sFile.substr(0,iPos)+"_"+sLanguage+sFile.substr(iPos);
    this.importResources(sName,sUrl,this._importLanguageText,aArgs,sEndIndex,null,null,bUpdate,this.coverError);
    return sName;
}
ETSOOAjax.prototype._importLanguageText=function(oR,oReq)
{
    var aArgs=oReq.args;
    var oDoc=oReq.getDocument();
    if(oDoc==null)return;
    var aNodes=oDoc.getElementsByTagName("data");
    var oWin=aArgs[0];
    if(oWin==null)oWin=self;
    var oFun=aArgs[1];
    var iMust=aArgs[2];
    var o=aArgs[4];
    var index=0;
    while(true)
    {
        var eOne=aNodes[index];
        if(eOne==null)break;
        
        var sName=eOne.getAttribute("name");
        var sMust=eOne.getAttribute("must");
        var sRef=eOne.getAttribute("ref");
        var eF=_sysXml.getFirstChild(eOne);
        var sValue=""
        if(eF)
        {
            sValue=_sysXml.getNodeText(eF);
            if(sRef!=null&&o.languageText[sRef]!=null)sValue=o.languageText[sRef]+sValue;
            if(sMust=="true"&&iMust==1)sValue='<span class="Focus">*</span>'+sValue;
        }
        o.languageText[sName]=sValue;
        index++;      
    }
    if(oFun)oFun(oWin,oR,oReq);
    else o.commonEnd(oWin,oR,oReq);
}
ETSOOAjax.prototype.commonEnd=function(oWin,oR,oReq)
{
    if(oWin==null)oWin=self;
	this.setPageText(oWin);
	this.removeLoadingBar(oWin);
	if(oWin.AjaxEndActionNotice)oWin.AjaxEndActionNotice(oR,oReq);
}
ETSOOAjax.prototype.setPageText=function(oWin)
{
    if(oWin==null)oWin=self;
    for(var sName in this.languageText)
    {
        if(sName.substr(0,2)!="R_")this.setValue(sName,this.languageText[sName],oWin);
    }
}
ETSOOAjax.prototype.setValue=function(sName,sValue,oWin)
{
    if(oWin==null)oWin=self;
    var aParts=sName.split(".");
    var sId=aParts[0];
    var eT=oWin.document.getElementById(sId);
    if(eT==null)
    {
        switch(sId)
        {
            case "window":
                eT=oWin;
                break;
            case "document":
                eT=oWin.document;
                break;
            case "body":
                eT=oWin.document.body;
                break;
        }
    }
    if(eT)
    {
        var sA=aParts[1];
        if(sA==null)
        {
            try
            {
                if(eT.value==null)eT.innerHTML=sValue;
            }
            catch(e){
            }
        }
        else
        {
            if(sA=="value")eT.value=sValue;
            else if(sA=="title")eT.title=sValue;
            else if(eT.setAttribute)eT.setAttribute(sA,sValue);
        }
    }
}
ETSOOAjax.prototype.copyText=function(aF)
{
    for(var sName in aF)
    {
        if(this.languageText[sName]!=null)break;
        this.languageText[sName]=aF[sName];
    }
}
ETSOOAjax.prototype.updateValue=function(sXml,aArgs,sIdAdd,sReportId,oWin)
{
    if(sIdAdd==null)sIdAdd="Value";
    if(sReportId==null)sReportId="ViewTitleValue";
    if(oWin==null)oWin=self;
    var o=this;
    var aAdds=[o,sIdAdd,sReportId,oWin]
    if(aArgs==null)aArgs=aAdds;
    else aArgs=aArgs.concat(aAdds);
    var iPos=sXml.lastIndexOf("/");
    var sId="updateValue";
    if(iPos!=-1)sId+=sXml.substr(iPos+1).replace(/[\.|\?|\#]/g,"_");
    if(sReportId)
    {
        var eCaption=document.getElementById(sReportId);
        if(eCaption)
        {
            var sText=this.getLoadingText(oWin);
            eCaption.innerHTML=sText;
        }
    }
    this.data={};
    this.importResources(sId,sXml,this._updateValue,aArgs,null,null,null,true,true);
}
ETSOOAjax.prototype._updateValue=function(oR,oReq)
{
    var aArgs=oReq.args;
    var iLen=aArgs.length
    var oDoc=oReq.getDocument();
    if(oDoc==null)return;
    var eData=_sysXml.getNode(oDoc,"Data");
	var bSetNewError=false;
	var oWin=aArgs[iLen-1];
	var sErrorReportID=aArgs[iLen-2];
	var sIdAdd=aArgs[iLen-3];
	var o=aArgs[iLen-4];
    if(eData)
    {
        var sKeyField=eData.getAttribute("KeyField");
        var aData=_sysXml.getListText(eData);
        var sReportId;
        var sKeyValue=aData[sKeyField];
        if(sKeyValue==""||sKeyValue==null)sReportId="sysNoIndex";
		else
		{
		    bSetNewError=true;
        
            for(var sName in aData)
            {
                var sValue=aData[sName];
                var sId=sName+sIdAdd;
                var eT=oWin.document.getElementById(sId);
                if(eT)
                {
                    var bUpdate=true;
                    if(eT.nodeName=="INPUT"||eT.nodeName=="TEXTAREA")
                    {
                        if(eT.type=="hidden")bUpdate=false;
                        eT.value=sValue;
                    }
                    else if(eT.nodeName=="SELECT")
                    {
                        _sysDom.setDefault(eT,sValue);
                    }
                    else
                    {
					    eT.innerHTML=sValue;
                        bUpdate=false;
                    }
                    if(bUpdate&&o.isAllowUpdated)
                    {
                        try
                        {
                            if(eT.getAttribute("_ETSOOUpdated")==null)eT.setAttribute("_ETSOOUpdated","N")
                            _sysDom.attachEvent(eT,"onpropertychange",_sysDom.updateStatus);
                        }
                        catch(e)
                        {
                        }
                    }
                }
            }
            o.data=aData;
            if(oWin.AjaxUpdateValueNotice)oWin.AjaxUpdateValueNotice(sReportId,sKeyValue,aData,aArgs);
        }
    }
    else
    {
        sReportId="sysNoPower";
    }
    if(sReportId!=null)
    {
        o.setValue(sReportId,oWin._sysAjax.languageText[sReportId],oWin);
    }
	if(!bSetNewError&&sErrorReportID!=null)
	{
		o.setValue(sErrorReportID,oWin._sysAjax.languageText["sysNoIndex"],oWin);
	}
}
ETSOOAjax.prototype.transform=function(eForm)
{
    var sPara="";
    var iLen=eForm.elements.length;
    var index=0;
    for(var i=0;i<iLen;i++)
    {
        var eOne=eForm.elements[i];
        if(this.isAllowUpdated&&eOne.getAttribute("_ETSOOUpdated")=="N")continue;
        
        var sName=eOne.name;
        if(sName==null||sName=="")sName=eOne.id;
        if(sName=="")continue;
        
        if(eOne.type=="checkbox"||eOne.type=="radio")if(!eOne.checked)continue;
        
        if(index>0)sPara+="&";
        sPara+=sName;
        sPara+="="+_sysDom.escape(eOne.value);
        
        index++;
    }
    return sPara;
}
ETSOOAjax.prototype.refreshCode=function(oImage)
{
    var src=oImage.src;
    var autoid=Math.round(100000*Math.random()).toString()+Math.round(100000*Math.random()).toString();
    if(src.indexOf("_autoid")==-1)
    {
        if(src.indexOf("?")==-1)src+="?";
        else src+="&";
        src+="_autoid="+autoid;
    }
    else src=src.replace(/(_autoid=)\d+/g,"$1"+autoid);
    oImage.src=src;
}
ETSOOAjax.prototype.checkFeedback=function(eForm,eIFrame,oFun)
{
	if(eIFrame==null)eIFrame=self;
    var sUrl=_sysDom.calculatePath(eForm.getAttribute("action"),eIFrame);
    var sMethod=eForm.getAttribute("method");
    if(sMethod==null||sMethod=="")sMethod="GET";
    sMethod=sMethod.toUpperCase();
    var sPara=this.transform(eForm);
    if(sPara=="")sPara=null;
    var sName="Form_"+(eForm.name||eForm.id);
    this.importResources(sName,sUrl,this._CheckFeedback,[eForm,eIFrame,oFun,this],null,sPara,sMethod,true);
}
ETSOOAjax.prototype._CheckFeedback=function(oR,oReq)
{
    var aArgs=oReq.args;
    var oDoc=oReq.getDocument();
    var o=aArgs[3];
    if(oDoc)o._checkFeedbackForm(aArgs[0],aArgs[1],aArgs[2],oDoc);
}
ETSOOAjax.prototype.parseReport=function(oDoc)
{
	var report=new Object();
    var aDatas=oDoc.getElementsByTagName("data");
    var eOne=aDatas[0];
    if(eOne)
    {
        var sName=eOne.getAttribute("name");
        var eF=_sysXml.getFirstChild(eOne);
        var sValue=""
        if(eF)sValue=_sysXml.getNodeText(eF);
		report.value=sValue;
        var aParts=sName.indexOf("|")==-1?sName.split("."):sName.split("|");
		report.kind=aParts[0];
		report.target=aParts[1];
		report.add=aParts[2];
	}
	return report;
}
ETSOOAjax.prototype._checkFeedbackForm=function(eForm,eIFrame,oFun,oDoc)
{
	var report=this.parseReport(oDoc);
	var sValue=report.value;
	var sKind=report.kind, sTarget=report.target, sAdd=report.add;
	if(oFun)
	{
		if(oFun(eForm,eIFrame,report,sKind,sTarget,sAdd,sValue)==false)return false;
	}
	if(sKind=="Redirect")
	{
		if(sTarget==null)sTarget="_self";
		var oWin=_sysDom.getTargetWindow(sTarget,eIFrame);
		if(sValue!="")sValue=_sysDom.calculatePath(sValue,eIFrame);
		if(oWin==null)oWin=window;
		if(sAdd!=null)
		{
			var sAddText=this.getText(sAdd);
			if(sAddText)alert(sAddText);
		}
		if(sValue=="")
		{
			var oListForm=oWin.document.forms["ETSOOHideForm"];
			if(oListForm)oListForm.submit();
			else oWin.location.reload();
		}
		else oWin.location.href=sValue;
	}
	else if(sKind=="Report")
	{
		var aParts=sValue.indexOf("|")==-1?sValue.split("."):sValue.split("|");
		var sReason=aParts[0], sShowId=aParts[1];
		var sText=this.getText(sReason);
		if(sAdd!=null)
		{
		    if(sText.indexOf("{0}")==-1)sText='['+sAdd+'] '+sText;
		    else sText=sText.replace("{0}",sAdd);
		}
		if(sShowId!=null&&sShowId!="")
		{
			var eT=eIFrame.document.getElementById(sShowId);
			if(eT)eT.innerHTML=sText;
			else sShowId=null;
		}
		var eA=eForm.elements[sTarget];
		if(eA)
		{
			if(sAdd=="RESET")eA.value="";
		}
		else
		{
			eA=eForm;
		}
		if(sShowId==null)_sysDom.reportValid(eA,sText,null,false);
		if(eForm.OK)eForm.OK.disabled=false;
	}
}
function ETSOODSObject(eT,sXml,sDefaultValue)
{
    this.object=eT;
    this.window=_sysDom.getWindow(eT);
    this.xml=sXml;
    this.textField=(_sysAjax.language=="zh-cn"?"Name":"EnglishName");
	this.textFunction=null;
    this.valueField=null;
    this.myUpdate=null;
    this.refresh=false;
    this.coverError=true;
    this.defaultValue=sDefaultValue;
    this.defaultValueType=0;
	this.isAddBlankRow=true;
    this.isLoading=false;
    this.listNode="Data";
    this.isListChild=false;
    this.isAttribute=false;
    this.languageText=null;
    this.lastReq=null;
}
ETSOODSObject.prototype.update=function()
{
	if(this.window==null)return;
    var sName=this.object.name;
    if(sName==null)sName=this.object.id;
    this._setLoading();
    _sysAjax.importResources(sName,this.xml,this._update,[this],null,null,null,this.refresh,this.coverError);
}
ETSOODSObject.prototype._setLoading=function()
{
    this.isLoading=true;
    var sText=_sysAjax.getLoadingText(this.window);
    switch(this.object.nodeName)
    {
        case "SELECT":
            this.object.options.length=0;
            _sysDom.createOption(this.object,sText,"");
            break;
        case "INPUT":
            this.object.value=sText;
            break;
        default:
            this.object.innerHTML=sText;
    }
}
ETSOODSObject.prototype._getCollection=function(oDoc,oReq)
{
    if(this.isListChild)
    {
        var oNode;
        if(oDoc.nodeName==this.listNode)oNode=oDoc;
        else oNode=oDoc.getElementsByTagName(this.listNode)[0];
        if(oNode==null)return [];
        else return oNode.childNodes;
    }
    else return oDoc.getElementsByTagName(this.listNode);
}
ETSOODSObject.prototype._getValue=function(oData,sA,iType)
{
    var sValue;
    if(sA==null)sValue=_sysXml.getNodeText(oData);
    else
    {
        if(sA=="#nodename")sValue=oData.nodeName;
        else
        {
            if(this.isAttribute)sValue=oData.getAttribute(sA);
            else sValue=_sysXml.getListText(oData)[sA];
        }
    }
	if(iType==1&&sValue!=null)
	{
		if(this.textFunction!=null)
		{
			sValue=this.textFunction(sValue);
		}
		else if(this.languageText!=null)
		{
			var sTemp=this.languageText[sValue];
			if(sTemp!=null)sValue=sTemp;
		}
	}
    return sValue;
}
ETSOODSObject.prototype._update=function(oR,oReq)
{
    var oDoc=oReq.getDocument();
    if(oDoc)
    {
        var o=oReq.args[0];
        o.lastReq=oReq;
        var aDatas=o._getCollection(oDoc,oReq);
        var iLen=aDatas.length;
        var sList='';
        if(o.object.nodeName=="SELECT")
        {
            o.object.options.length=0;
            if(o.isAddBlankRow)_sysDom.createOption(o.object,"---","");
        }
		var iIndex=0;
        for(var i=0;i<iLen;i++)
        {
            var oData=aDatas[i];
            if(oData.nodeType!=1)continue;
            var sId=oData.getAttribute("id");
            var sText=o._getValue(oData,o.textField,1);
            var sValue;
            if(o.valueField==null)sValue=sId;
            else if(o.valueField=="#index")sValue=iIndex;
			else sValue=o._getValue(oData,o.valueField);
            
            if(o.object.nodeName=="SELECT")
            {
                var bSelected=false;
                if((o.defaultValueType==0&&sValue==o.defaultValue)||(o.defaultValueType==1&&sText==o.defaultValue))bSelected=true;
                var oOption=_sysDom.createOption(o.object,sText,sValue,bSelected,o.window.document);
                if(oOption)
				{
					oOption.setAttribute("id",sId);
					oOption.data=oData;
				}
            }
            else
            {
                sList+='<div title="'+sValue+'">'+sText+'</div>\r\n';
            }
			iIndex++;
        }
        o.isLoading=false;
        if(o.object.onchange)o.object.onchange(1);
        if(o.myUpdate)o.myUpdate(aDatas);
    }
}
var _sysAjax=new ETSOOAjax();
