var http_request = null;  //ActiveXObject, XMLHttpRequest
var retValue = false; //调用服务成功true,失败false
var errMsg = '';
var errCode = 0;
var xmlDoc = '';
var xmlText = '';
var sessCust = null;
var _ajaxDealFunction = null;

document.write('<SCRIPT src="/js/popupclass.js" type="text/javascript" language="javascript"></SCRIPT>');

function initHttpRequest() {
    http_request = null;
    if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    } else if (window.XMLHttpRequest) { // Mozilla FF, Safari,...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/xml');
        }
    }
    if (http_request == null) {
        return false;
    } else {
	return true;
    }
}

function getAjaxServlet(servletURL) {
  var servlet;
  var idx = servletURL.indexOf('?');
  if (idx == -1) {
    servlet = servletURL;
  } else {
     var tmpArr = servletURL.split('?');
     servlet = tmpArr[0];
  }
  return servlet;
}

function getAjaxPara(servletURL, sendPara) {
  var servlet, para;
  var idx = servletURL.indexOf('?');
  if (idx == -1) {
    servlet = servletURL;
    para = sendPara;
  } else {
     var tmpArr = servletURL.split('?');
     servlet = tmpArr[0];
     para = tmpArr[1];
     if (sendPara != null && sendPara != '') {
       para += "&" + sendPara;
     }
  }
  return para;
}

//同步步处理的ajax
function sendDo(servletURL, sendPara) {
    _ajaxDealFunction = null;
    if (!initHttpRequest()) {
      retValue = false;
      errMsg = "装载XMLHTTP(ajax)失败";
      return false;
    }
    if (window.ActiveXObject) { // IE
        http_request.onreadystatechange = getServletResultAsyn;
    } else if (window.XMLHttpRequest) { //FF
        http_request.onload = function () {
          getServletResultFF();
        };
    }
    http_request.open('POST', getAjaxServlet(servletURL), false);
    http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
    http_request.send(getAjaxPara(servletURL, sendPara));
    return true;
}

function getServletResultFF() {
      xmlDoc = http_request.responseXML;
      xmlText = http_request.responseText;
      errMsg = getNodeValue(xmlDoc, "root/rows/errMsg");
      errCode = getNodeValue(xmlDoc, "root/rows/errCode");
      var tmpValue = getNodeValue(xmlDoc, "root/rows/retValue");
      if (errMsg == null || tmpValue == null) {
        retValue = false;
        errMsg = "XML消息报文头错误";
        return;
      }
      if (tmpValue.match("true")) {
        retValue = true;
      } else {
        retValue = false;
      }
}

//异步处理的ajax
function sendDoAsyn(servletURL, sendPara, func, bHidePopDialog) {
    _ajaxDealFunction = func;
    if (!initHttpRequest()) {
      retValue = false;
      errMsg = "装载XMLHTTP(ajax)失败";
      return false;
    }
    _J_pop = null;
    if (bHidePopDialog == null) {
        showHint('正在处理，请稍候……', 300, 50);
    }
    http_request.onreadystatechange = getServletResultAsyn;
    http_request.open('POST', getAjaxServlet(servletURL), true);
    http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
    http_request.send(getAjaxPara(servletURL, sendPara));
    return true;
}

function repacknode(nodeP) {
  if (window.ActiveXObject) {
    return nodeP;
  }
  var idxS = nodeP.indexOf("[");
  var idxE = nodeP.indexOf("]");
  var numStr = nodeP.substring(idxS+1, idxE);
  var numInt = parseInt(numStr, 10);
  var newString = new String(numInt);
  var retNode = nodeP;
  if (numStr.match(newString) && numStr.length == newString.length) {
    retNode = nodeP.replace("[" + numStr + "]", "[" + (numInt - (-1)) + "]");
  }
  return retNode;
}

function getNodeValue(doc, xmlPath) {
  xmlPath = repacknode(xmlPath);
  var retVal = "";
  var node = doc.selectSingleNode(xmlPath);
  if (node != null) {
    retVal = node.getAttribute("text");
  }
  return retVal;
}

function getServletResultAsyn() {
  //响应完成后，接收服务器返回的数据
  if (http_request.readyState == 4) {
    if (http_request.status == 200) {
      xmlDoc = http_request.responseXML;
      xmlText = http_request.responseText;
      errMsg = getNodeValue(xmlDoc, "root/rows/errMsg");
      errCode = getNodeValue(xmlDoc, "root/rows/errCode");
      var tmpValue = getNodeValue(xmlDoc, "root/rows/retValue");
      if (errMsg == null || tmpValue == null) {
        retValue = false;
        errMsg = "XML消息报文头错误";
        return;
      }
      if (tmpValue.match("true")) {
        retValue = true;
      } else {
        retValue = false;
      }
    } else {
    	errMsg = "调用服务交易失败[可能未发现servlet或servlet执行异常][status=" + http_request.status + "]";
      	retValue = false;
    }
    closeHint();
    if (_ajaxDealFunction != null && _ajaxDealFunction != "") {
      setTimeout(_ajaxDealFunction, 500);
    }
  }

}

//将全局变量返回调用者
function getErrMsg() {
  if (errMsg == '') {
    errMsg = "调用服务交易失败";
  }
  return errMsg;
}
function getErrCode() {
  return errCode;
}
function getRetValue() {
  return retValue;
}
function getXmlDoc() {
  return xmlDoc;
}
function getXmlText() {
  return xmlText;
}

function checkLogin() {
  sessCust = null;
  sendDo("/checkLoginServlet", "");
  if (!getRetValue()) {
    return false;
  }
  sessCust = new Object();
  sessCust.userName = getErrMsg();
  return true;
}

var GetNodeValue = function(obj)
{
    var str = "";
    if (window.ActiveXObject)    //IE
    {
        str = obj.text;
    }
    else //Mozilla
    {
        try
        {
            str = obj.childNodes[0].nodeValue;
        }
        catch(ex)
        {
            str = "";
        }
    }
    return str;
}

if (document.implementation && document.implementation.createDocument)
{
    XMLDocument.prototype.loadXML = function(xmlString)
    {
        var childNodes = this.childNodes;
        for (var i = childNodes.length - 1; i >= 0; i--)
            this.removeChild(childNodes[i]);

        var dp = new DOMParser();
        var newDOM = dp.parseFromString(xmlString, "text/xml");
        var newElt = this.importNode(newDOM.documentElement, true);
        this.appendChild(newElt);
    };

    // check for XPath implementation
    if( document.implementation.hasFeature("XPath", "3.0") )
    {
       // prototying the XMLDocument
       XMLDocument.prototype.selectNodes = function(cXPathString, xNode)
       {
          if( !xNode ) { xNode = this; }
          var oNSResolver = this.createNSResolver(this.documentElement)
          var aItems = this.evaluate(cXPathString, xNode, oNSResolver,
                       XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
          var aResult = [];
          for( var i = 0; i < aItems.snapshotLength; i++)
          {
             aResult[i] =  aItems.snapshotItem(i);
          }
          return aResult;
       }

       // prototying the Element
       Element.prototype.selectNodes = function(cXPathString)
       {
          if(this.ownerDocument.selectNodes)
          {
             return this.ownerDocument.selectNodes(cXPathString, this);
          }
          else{throw "For XML Elements Only";}
       }
    }

    // check for XPath implementation
    if( document.implementation.hasFeature("XPath", "3.0") )
    {
       // prototying the XMLDocument
       XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode)
       {
          if( !xNode ) { xNode = this; }
          var xItems = this.selectNodes(cXPathString, xNode);
          if( xItems.length > 0 )
          {
             return xItems[0];
          }
          else
          {
             return null;
          }
       }

       // prototying the Element
       Element.prototype.selectSingleNode = function(cXPathString)
       {
          if(this.ownerDocument.selectSingleNode)
          {
             return this.ownerDocument.selectSingleNode(cXPathString, this);
          }
          else{throw "For XML Elements Only";}
       }
    }
}

//return boolean
function getXmlObjectNodeValue() {
  var xmlRetObject = null;
  if (!getRetValue()) {
    alert(getErrMsg());
    return null;
  }
  var qryRst = getXmlDoc();
  var rows = qryRst.getElementsByTagName("records");
  if (rows == null) {
    alert("服务器返回的报文有误");
    return null;
  }
  G_RecordCount = getNodeValue(qryRst, "/root/rows/count");//total record number
  var iObjLen = rows.length;
  if (iObjLen == 0) {
    xmlRetObject = new Array();
    return xmlRetObject;
  }
  xmlRetObject = new Array(iObjLen);
  var headFieldList = getNodeValue(qryRst, "/root/rows/headFieldList");// field list
  if (headFieldList == null || headFieldList.length == 0) {
    alert('服务器返回的报文格式有误');
    return null;
  }
  var fields = headFieldList.split(";");
  for (var i = 0; i < iObjLen; i ++) {
      xmlRetObject[i] = new Object();
      for (var j = 0; j < fields.length; j ++) {
          eval('xmlRetObject[i].' + fields[j] + '= getNodeValue(qryRst, "/root/records[' + i + ']/' + fields[j] + '");');
      }
  }
  return xmlRetObject;
}

function getObjNodeListValue(fieldArr, destObj, nSerial) {
  for (var ij = 0; ij < fieldArr.length; ij ++) {
    if (fieldArr[ij] == null || fieldArr[ij] == '') {
      break;
    }
    var tmpCmd = 'destObj.' + fieldArr[ij] + ' = getNodeValue(xmlDoc, "/root/records[' + nSerial + ']/' + fieldArr[ij] + '");';
    eval(tmpCmd);
  }
  return;
}

