function jXmlDom(){}

jXmlDom.VERSION = "0.9.9.4";
jXmlDom.PARSED_OK = "Document contains no parsing errors";
jXmlDom.PARSED_EMPTY = "Document is empty";
jXmlDom.PARSED_UNKNOWN_ERROR = "Not well-formed or other error";
jXmlDom.IS_ENABLED_TRANSFORM_NODE = false;
jXmlDom.REMOTE_CALL_FLAG = "jXmlDom.REMOTE_CALL_FLAG";
jXmlDom.ActiveXError = "loading DOM ActiveX error";
jXmlDom.TransformError = "页面生成错误";
jXmlDom._lastUniqueSuffix = 0;
jXmlDom._getUniqueSuffix = function(){return jXmlDom._lastUniqueSuffix++;};
jXmlDom._IEPREFIX4XSLPARAM = "";
jXmlDom._HAS_DOM_IMPLEMENTATION = document.implementation && true;
jXmlDom._HAS_DOM_CREATE_DOCUMENT = jXmlDom._HAS_DOM_IMPLEMENTATION && document.implementation.createDocument;
jXmlDom._HAS_DOM_FEATURE = jXmlDom._HAS_DOM_IMPLEMENTATION && document.implementation.hasFeature;
jXmlDom._IS_MOZ = jXmlDom._HAS_DOM_CREATE_DOCUMENT && jXmlDom._HAS_DOM_FEATURE;
jXmlDom._IS_SAFARI = navigator.userAgent.toLowerCase().indexOf("safari") != -1 || navigator.userAgent.toLowerCase().indexOf("konqueror") != -1;
jXmlDom._IS_SAFARI_OLD = jXmlDom._IS_SAFARI && (parseInt((navigator.userAgent.match(/AppleWebKit\/(\d+)/)||{})[1], 10) < 420);
jXmlDom._IS_IE = document.all && window.ActiveXObject && navigator.userAgent.toLowerCase().indexOf("msie") > -1  && navigator.userAgent.toLowerCase().indexOf("opera") == -1;
jXmlDom._IS_OPERA = navigator.userAgent.toLowerCase().indexOf("opera") != -1;
jXmlDom.processor = null;

if (!window.Node || !Node.ELEMENT_NODE)
{
    Node =
		{
		ELEMENT_NODE: 1,
		ATTRIBUTE_NODE: 2,
		TEXT_NODE: 3,
		CDATA_SECTION_NODE: 4,
		ENTITY_REFERENCE_NODE: 5,
		ENTITY_NODE: 6,
		PROCESSING_INSTRUCTION_NODE: 7,
		COMMENT_NODE: 8,
		DOCUMENT_NODE: 9,
		DOCUMENT_TYPE_NODE: 10,
		DOCUMENT_FRAGMENT_NODE: 11,
		NOTATION_NODE: 12
		};
}

if (jXmlDom._IS_SAFARI_OLD)
{
	HTMLHtmlElement = document.createElement("html").constructor;
	Node = HTMLElement = {};
	HTMLElement.prototype = HTMLHtmlElement.__proto__.__proto__;
	HTMLDocument = Document = document.constructor;

	var x = new DOMParser();

	XMLDocument = x.constructor;
	Element = x.parseFromString("<single/>", "text/xml").documentElement.constructor;
	x = null;
}

if (typeof(XMLDocument) == "undefined" && typeof(Document) !="undefined")
{
    XMLDocument = Document;
}

if (jXmlDom._IS_IE)
{
  jXmlDom._IEPREFIX4XSLPARAM = "xsl:";

  var _DOM_PROGID = "";
  var _XMLHTTP_PROGID = "";
  var _DOM_XMLWRITER = "";

  jXmlDom.pickRecentProgID = function (idList)
  {
    var found = false, e;
    var store = null;

    for(var i = 0; i < idList.length && !found; i++)
    {
      try
      {
        var obj = new ActiveXObject(idList[i]);
        
        obj = null;
        found = true;
        store = idList[i];
      }
      catch (objException)
      {
        e = objException;
      }
    }

    if (!found)
      throw "Could not retrieve a valid progID of Class: " + idList[idList.length-1] + ". (original exception: " + e + ")";
    
    idList = null;
    return store;
  };

  _DOM_PROGID = null;
  _THREADEDDOM_PROGID = null;
  _XSLTEMPLATE_PROGID = null;
  _XMLHTTP_PROGID = null;

  jXmlDom.XMLHttpRequest = function()
  {
    if(!_XMLHTTP_PROGID)
        _XMLHTTP_PROGID = jXmlDom.pickRecentProgID(["MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP.2.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"]);

		try
		{
			return new ActiveXObject(_XMLHTTP_PROGID);
		}
		catch(e)
		{
			alert(jXmlDom.ActiveXError);
		}
  };

	jXmlDom.getThreadedDom = function(url, xml) 
	{
    if (!_THREADEDDOM_PROGID)
      _THREADEDDOM_PROGID = jXmlDom.pickRecentProgID(["MSXML2.FreeThreadedDOMDocument.6.0", "MSXML2.FreeThreadedDOMDocument.5.0", "MSXML2.FreeThreadedDOMDocument.4.0", "MSXML2.FreeThreadedDOMDocument.3.0", "MSXML2.FreeThreadedDOMDocument.2.0", "MSXML2.FreeThreadedDOMDocument"]);

		try
		{
			var dom = new ActiveXObject(_THREADEDDOM_PROGID);
	    dom.async = true;
			dom.resolveExternals = true;
			dom.setProperty("AllowDocumentFunction", true); 
	    dom.setProperty("SelectionNamespaces", "xmlns:xsl='http://www.w3.org/1999/XSL/Transform'");
	    dom.onreadystatechange = function(){};
	        
	    if (url)
		    dom.load(url);
	    else if (xml)
		    dom.loadXML(xml);

	    return dom;
		}
		catch(e)
		{
			alert(jXmlDom.ActiveXError);
		}
  };

  jXmlDom.getDomDocument = function(uri, name)
  {
    if (!_DOM_PROGID)
        _DOM_PROGID = jXmlDom.pickRecentProgID(["MSXML2.DOMDocument.6.0", "MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0", "MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument.2.0", "MSXML2.DOMDocument", "MSXML.DOMDocument", "Microsoft.XMLDOM"]);
  
	  try
	  {
		  var dom = new ActiveXObject(_DOM_PROGID);
		  dom.async = false;

		  if (name)
		  {
			  var prefix = "";

			  if (uri)
			  {
				  if (name.indexOf(":") > 1)
				  {
					  prefix = name.substring(0, name.indexOf(":"));
					  name = name.substring(name.indexOf(":") + 1);
				  }
				  else
				  {
					  prefix = "a" + jXmlDom._getUniqueSuffix();
				  }
			  }

			  if(uri)
				  dom.loadXML("<" + prefix + ":" + name + " xmlns:" + prefix + "=\"" + uri + "\"" + " />");
			  else 
				  dom.loadXML("<" + name + "/>");
		  }
          
		  return dom;
	  }
	  catch(e)
	  {
		  alert(jXmlDom.ActiveXError);
	  }
  };
    
  jXmlDom.getParseErrorText = function (doc)
  {
    var parseErrorText = jXmlDom.PARSED_OK;

    if (doc && doc.parseError && doc.parseError.errorCode && doc.parseError.errorCode != 0)
    {
      parseErrorText = 
          "XML Parsing Error: " + doc.parseError.reason + 
          "\nLocation: " + doc.parseError.url + 
          "\nLine Number " + doc.parseError.line + ", Column " + doc.parseError.linepos + 
          ":\n" + doc.parseError.srcText +
          "\n";
  
      for(var i = 0;  i < doc.parseError.linepos;i++)
          parseErrorText += "-";

      parseErrorText +=  "^\n";
    }
    else if (doc.documentElement === null)
      parseErrorText = jXmlDom.PARSED_EMPTY;

    return parseErrorText;
  };

  jXmlDom.setXpathNamespaces = function(doc, ns)
  {
      doc.setProperty("SelectionLanguage", "XPath");
      doc.setProperty("SelectionNamespaces", ns);
  };
    
  XSLTProcessor = function()
  {
    if(!_XSLTEMPLATE_PROGID)
      _XSLTEMPLATE_PROGID = jXmlDom.pickRecentProgID(["MSXML2.XSLTemplate.6.0", "MSXML2.XSLTemplate.5.0", "MSXML2.XSLTemplate.4.0", "MSXML2.XSLTemplate.3.0", "MSXML2.XSLTemplate.2.0", "MSXML2.XSLTemplate"]);

		try
		{
			this.template = new ActiveXObject(_XSLTEMPLATE_PROGID);
			this.processor = null;
		}
		catch(e)
		{
			alert(jXmlDom.ActiveXError);
		}
  };

  XSLTProcessor.prototype.importXsltFile = function(url)
  {
    if(!_THREADEDDOM_PROGID)
        _THREADEDDOM_PROGID = jXmlDom.pickRecentProgID(["MSXML2.FreeThreadedDOMDocument.6.0", "MSXML2.FreeThreadedDOMDocument.5.0", "MSXML2.FreeThreadedDOMDocument.4.0", "MSXML2.FreeThreadedDOMDocument.3.0", "MSXML2.FreeThreadedDOMDocument.2.0", "MSXML2.FreeThreadedDOMDocument"]);

    xslDoc.setProperty("SelectionLanguage", "XPath");
    xslDoc.setProperty("SelectionNamespaces", "xmlns:xsl='http://www.w3.org/1999/XSL/Transform'");

		var converted = null;
		
		try
		{
			converted = new ActiveXObject(_THREADEDDOM_PROGID);
		}
		catch(e)
		{
			alert(jXmlDom.ActiveXError);
		}

		try
		{
			converted.resolveExternals = true;
			converted.setProperty("AllowDocumentFunction", true); 
		}
		catch(e)
		{
	  }

	  converted.async = false;
	  converted.load(url);
	  converted.setProperty("SelectionNamespaces", "xmlns:xsl='http://www.w3.org/1999/XSL/Transform'");
        
	  var output = converted.selectSingleNode("//xsl:output");
        
	  if (output) 
		  this.outputMethod = output.getAttribute("method");
	  else
	  {
		  delete this.outputMethod;
		  this.outputMethod = null;
	  }
  	
	  this.template.stylesheet = converted;
	  this.processor = this.template.createProcessor();
	  this.paramsSet = [];
  };

  XSLTProcessor.prototype.importStylesheet = function(xslDoc)
  {
    if(!_THREADEDDOM_PROGID)
        _THREADEDDOM_PROGID = jXmlDom.pickRecentProgID(["MSXML2.FreeThreadedDOMDocument.6.0", "MSXML2.FreeThreadedDOMDocument.5.0", "MSXML2.FreeThreadedDOMDocument.4.0", "MSXML2.FreeThreadedDOMDocument.3.0", "MSXML2.FreeThreadedDOMDocument.2.0", "MSXML2.FreeThreadedDOMDocument"]);

    this.template.stylesheet = xslDoc;
    this.processor = this.template.createProcessor();
    this.paramsSet = [];
  };

  XSLTProcessor.prototype.transformToDocument = function(sourceDoc)
  {
    if (_THREADEDDOM_PROGID)
    {
			try
			{
				this.processor.input = sourceDoc;
				this.processor.transform();
      }
      catch(e)
      {
				alert(jXmlDom.TransformError);
      }

			try
			{
				return jXmlDom.get(this.processor.output);
			}
			catch(e)
			{
				alert(jXmlDom.ActiveXError);
			}
    }
    else
    {
      if (!_DOM_XMLWRITER)
          _DOM_XMLWRITER = jXmlDom.pickRecentProgID(["Msxml2.MXXMLWriter.3.0", "MSXML2.MXXMLWriter", "MSXML.MXXMLWriter", "Microsoft.XMLDOM"]);

      this.processor.input = sourceDoc;
      
      var outDoc = new ActiveXObject(_DOM_XMLWRITER);
      
      this.processor.output = outDoc;
      this.processor.transform();
      
      var retDoc = new ActiveXObject(_DOM_PROGID);
      
      retDoc.loadXML(outDoc.output + "");
      return retDoc;
    }
  };
    
  XSLTProcessor.prototype.transformToFragment = function (sourceDoc, ownerDoc)
  {
    this.processor.input = sourceDoc;
    this.processor.transform();
    
    var s = this.processor.output;
    var f = ownerDoc.createDocumentFragment();
    var container;

    if (this.outputMethod == "text")
      f.appendChild(ownerDoc.createTextNode(s));
    else if (ownerDoc.body && ownerDoc.body.innerHTML)
    {
      container = ownerDoc.createElement("div");
      container.innerHTML = s;
      
      while (container.hasChildNodes())
        f.appendChild(container.firstChild);
    }
    else 
    {
      var doc = new ActiveXObject(_DOM_PROGID);
  
      if (s.substring(0, 5) == "<?xml")
          s = s.substring(s.indexOf("?>") + 2);

      var xml = "".concat("<my>", s, "</my>");
      
      doc.loadXML(xml);
      container = doc.documentElement;

      while (container.hasChildNodes())
        f.appendChild(container.firstChild);
    }

    return f;
  };
  
  XSLTProcessor.prototype.setParameter = function(uri, name, value)
  {
    value = value ? value : "";

    if (uri)
      this.processor.addParameter(name, value, uri);
    else
      this.processor.addParameter(name, value);
   
    uri = "" + (uri || "");

    if (!this.paramsSet[uri])
      this.paramsSet[uri] = [];

    this.paramsSet[uri][name] = value;
  };

  XSLTProcessor.prototype.getParameter = function(uri, name)
  {
    uri = "" + (uri || "");
    
    if(this.paramsSet[uri] && this.paramsSet[uri][name])
      return this.paramsSet[uri][name];
    
    return null;
  };
    
  XSLTProcessor.prototype.clearParameters = function()
  {
    for(var uri in this.paramsSet)
    {
        for(var name in this.paramsSet[uri])
        {
            if (uri != "")
                this.processor.addParameter(name, "", uri);
            else
                this.processor.addParameter(name, "");
        }
    }

    this.paramsSet = [];
  };
}
else
{
  jXmlDom.XMLHttpRequest = function()
  {
    return new window.XMLHttpRequest();
  };
  
  if (jXmlDom._HAS_DOM_CREATE_DOCUMENT)
  {
    jXmlDom.__handleLoad__ = function(doc)
    {
      jXmlDom.__setReadyState__(doc, 4);
    };
    
    _jXmlDom_XMLDocument_onload = function()
    {
      jXmlDom.__handleLoad__(this);
    };
    
    jXmlDom.__setReadyState__ = function(doc, readyState)
    {
      doc.readyState = readyState;
      doc.readystate = readyState;
  
      if (doc.onreadystatechange != null && typeof doc.onreadystatechange == "function") 
        doc.onreadystatechange();
    };
    
    jXmlDom.getDomDocument = function(uri, name)
    {
      var doc = document.implementation.createDocument(uri ? uri : "", name ? name : "", null);
  
      if (!doc.onreadystatechange)
        doc.onreadystatechange = null;

      if(!doc.readyState)
        doc.readyState = 0;

      doc.addEventListener("load", _jXmlDom_XMLDocument_onload, false);
      
      return doc;
    };

    if (window.XMLDocument)
    {
    }
    else if (jXmlDom._HAS_DOM_FEATURE && window.Document && !Document.prototype.load && document.implementation.hasFeature('LS', '3.0'))
    {
      jXmlDom.getDomDocument = function(uri, name)
      {
        return document.implementation.createDocument(uri? uri : "", name? name : "", null);
      }
    }
    else
    {
      jXmlDom.getDomDocument = function(uri, name)
      {
        var doc = document.implementation.createDocument(uri? uri : "", name ? name : "", null);

        if (doc && (uri || name) && !doc.documentElement)
          doc.appendChild(doc.createElementNS(uri, name));

        return doc;
      };
    }
  }
}

if (!window.DOMParser)
{
  if (jXmlDom._IS_SAFARI)
  {
    DOMParser = function() {};
    DOMParser.prototype.parseFromString = function(xml, contentType)
    {
      var xmlhttp = new jXmlDom.XMLHttpRequest();
      
      xmlhttp.open("GET", "data:text/xml;charset=utf-8," + encodeURIComponent(xml), false);
      xmlhttp.send(null);
      return xmlhttp.responseXML;
    };
  }
  else if (jXmlDom.getDomDocument)
  {
		DOMParser = function() {};
		DOMParser.prototype.parseFromString = function(xml, contentType)
		{
			var doc = jXmlDom.getDomDocument();
			
			try
			{
				doc.loadXML(xml);
				return doc;
			}
			finally
			{
				doc = null;
			}
		};
  }
}

/*
if (typeof(document.xml) == "undefined")
{
  document.xml = function()
  {
  }
}
*/

if ((typeof(document.importNode) == "undefined") && jXmlDom._IS_IE)
{
  try
  {
    document.importNode = function(node, children)
    {
      var tmp;
  
      if (node.nodeName == '#text')
          return document.createTextNode(node.data);
      else 
      {
        if (node.nodeName == "tbody" || node.nodeName == "tr")
            tmp = document.createElement("table");
        else if (node.nodeName == "td")
            tmp = document.createElement("tr");
        else if (node.nodeName == "option")
            tmp = document.createElement("select");
        else
            tmp = document.createElement("div");

        if (children)
            tmp.innerHTML = node.xml ? node.xml : node.outerHTML;
        else
            tmp.innerHTML = node.xml ? node.cloneNode(false).xml : node.cloneNode(false).outerHTML;

        return tmp.getElementsByTagName("*")[0];
      }
    };
  }
  catch(e)
  {
  }
}

if (!jXmlDom.getParseErrorText)
{
  jXmlDom.getParseErrorText = function (doc)
  {
    var parseErrorText = jXmlDom.PARSED_OK;

    if ((!doc) || (!doc.documentElement))
      parseErrorText = jXmlDom.PARSED_EMPTY;
    else if (doc.documentElement.tagName == "parsererror")
    {
      parseErrorText = doc.documentElement.firstChild.data;
      parseErrorText += "\n" +  doc.documentElement.firstChild.nextSibling.firstChild.data;
    }
    else if (doc.getElementsByTagName("parsererror").length > 0)
    {
      var parsererror = doc.getElementsByTagName("parsererror")[0];
      parseErrorText = jXmlDom.getText(parsererror, true) + "\n";
    }
    else if (doc.parseError && doc.parseError.errorCode != 0)
    {
      parseErrorText = jXmlDom.PARSED_UNKNOWN_ERROR;
    }
    
    return parseErrorText;
  };
}

jXmlDom.getText = function(node, deep)
{
  var s = "";
  var nodes = node.childNodes;

  for(var i = 0; i < nodes.length; i++)
  {
    var child = nodes[i];
    var nodeType = child.nodeType;

    if (nodeType == Node.TEXT_NODE || nodeType == Node.CDATA_SECTION_NODE)
      s += child.data;
    else if (deep === true && (nodeType == Node.ELEMENT_NODE || nodeType == Node.DOCUMENT_NODE || nodeType == Node.DOCUMENT_FRAGMENT_NODE))
      s += jXmlDom.getText(child, true);
  }

  return s;
};

if (!window.XMLSerializer && jXmlDom.getDomDocument)
{
  XMLSerializer = function(){};
  XMLSerializer.prototype.serializeToString = function(node)
  {
    return node.xml;
  };
}

jXmlDom.stripTags = function (s) 
{
    return s ? s.replace(/<[^>]+>/g,"") : s;
};

jXmlDom.clearChildNodes = function(node)
{
    while(node.firstChild)
        node.removeChild(node.firstChild);
};

jXmlDom.copyChildNodes = function(from, to, preserveExisting)
{
  if (jXmlDom._IS_SAFARI && to.nodeType == Node.DOCUMENT_NODE)
  	to = to.documentElement;
  
  if((!from) || (!to))
    throw "Both source and destination nodes must be provided";

  if(!preserveExisting)
    jXmlDom.clearChildNodes(to);

  var ownerDoc = to.nodeType == Node.DOCUMENT_NODE ? to : to.ownerDocument;
  var nodes = from.childNodes;
  var i;

  if (typeof(ownerDoc.importNode) != "undefined")
  {
    for(i = 0; i < nodes.length; i++)
      to.appendChild(ownerDoc.importNode(nodes[i], true));
  }
  else
  {
    for(i = 0; i < nodes.length; i++)
      to.appendChild(nodes[i].cloneNode(true));
  }
};

jXmlDom.moveChildNodes = function(from, to, preserveExisting)
{
    if((!from) || (!to))
        throw "Both source and destination nodes must be provided";

    if(!preserveExisting)
        jXmlDom.clearChildNodes(to);

    var nodes = from.childNodes;

    if (from.ownerDocument == to.ownerDocument)
    {
        while(from.firstChild)
            to.appendChild(from.firstChild);
    }
    else
    {
        var ownerDoc = to.nodeType == Node.DOCUMENT_NODE ? to : to.ownerDocument;
        var i;
    
        if (typeof(ownerDoc.importNode) != "undefined")
        {
           for(i = 0; i < nodes.length; i++)
               to.appendChild(ownerDoc.importNode(nodes[i], true));
        }
        else
        {
           for(i = 0; i < nodes.length; i++)
               to.appendChild(nodes[i].cloneNode(true));
        }

        jXmlDom.clearChildNodes(from);
    }
};

jXmlDom.xmlize = function(anyObject, objectName, indentSpace)
{
    indentSpace = indentSpace ? indentSpace : "";
    
    var s = indentSpace  + "<" + objectName + ">";
    var isLeaf = false;

    if (!(anyObject instanceof Object) || anyObject instanceof Number || anyObject instanceof String || anyObject instanceof Boolean || anyObject instanceof Date)
    {
        s += jXmlDom.escape("" + anyObject);
        isLeaf = true;
    }
    else
    {
        s += "\n";
        
        var isArrayItem = anyObject instanceof Array;
        
        for(var name in anyObject)
            s += jXmlDom.xmlize(anyObject[name], (isArrayItem? "array-item key=\"" + name + "\"": name), indentSpace + "   ");

        s += indentSpace;
    }

    return (s += (objectName.indexOf(' ') != -1? "</array-item>\n" : "</" + objectName + ">\n"));
};

jXmlDom.escape = function(xml)
{
    return xml.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
};

jXmlDom.unescape = function(xml)
{
    return xml.replace(/&apos;/g,"'").replace(/&quot;/g,"\"").replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/&amp;/g,"&");
};

jXmlDom.updateCursor = function(target, value)
{
    if (target && target.style && target.style.cursor != undefined)
        target.style.cursor = value;
};

jXmlDom.updateContentFromURI = function(url, target, xsltProc, callback, skipCache)
{
    try
    {
        jXmlDom.updateCursor(target, "wait");
       
        var xmlhttp = new jXmlDom.XMLHttpRequest();
       
        xmlhttp.open("GET", url, true);
        xmlhttp.onreadystatechange = function()
        {
            if (xmlhttp.readyState == 4)
            {
            	try
            	{
            		var dom = xmlhttp.responseXML;
	            
	            	if (dom && jXmlDom.getParseErrorText(dom) == jXmlDom.PARSED_OK)
	            	{
		                jXmlDom.updateContentFromNode(xmlhttp.responseXML, target, xsltProc);
		                
        				if(callback)
		                	callback(url, target);
	            	}
	            	else
	            	{
	            		throw jXmlDom.getParseErrorText(dom);
	            	}
            	}
            	catch(e)
            	{
            		if (callback)
			        	callback(url, target, e);
			        else
			        {
			        	throw e;
			        }
            	}
            }
        };
        
        if (skipCache)
        {
             var oldage = "Sat, 1 Jan 2000 00:00:00 GMT";
             xmlhttp.setRequestHeader("If-Modified-Since", oldage);
        }
        
        xmlhttp.send("");
    }
    catch(e)
    {
        jXmlDom.updateCursor(target, "auto");
    
        if (callback)
        {
        	callback(url, target, e);
        }
        else
        {
        	throw e;
        }
    }
};

jXmlDom.updateContentFromNode = function(node, target, xsltProc)
{
    try
    {
        jXmlDom.updateCursor(target, "wait");
        jXmlDom.clearChildNodes(target);
    
        var ownerDoc = node.nodeType == Node.DOCUMENT_NODE? node : node.ownerDocument;
        
        if (ownerDoc.parseError && ownerDoc.parseError.errorCode != 0)
        {
            var pre = document.createElement("pre");
            pre.appendChild(document.createTextNode(jXmlDom.getParseErrorText(ownerDoc)));
            target.appendChild(pre);
        }
        else
        {
            if (xsltProc)
                node = xsltProc.transformToDocument(node);

            if (target.tagName.toLowerCase() == "textarea" || target.tagName.toLowerCase() == "input")
                target.value = new XMLSerializer().serializeToString(node);
            else
            {
                try
                {
                    target.appendChild(target.ownerDocument.importNode(node, true));
                }
                catch(e)
                {
                    target.innerHTML = new XMLSerializer().serializeToString(node);
                }
            }
        }
    }
    catch(e)
    {
    	throw e;
    }
    finally
    {
        jXmlDom.updateCursor(target, "auto");
    }
};

jXmlDom.formToQueryString = function(form)
{
    var qs = "";
    
    for(var i = 0;i < form.elements.length;i++)
    {
        var field = form.elements[i];
        var fldName = field.getAttribute("name") ? field.getAttribute("name") : field.getAttribute("id"); 
    
        if (fldName && ((!field.disabled) || field.type == "hidden"))
        {
            switch(field.type)
            {
                case "hidden":
                case "text":
                case "textarea":
                case "password":
                    qs += fldName + "=" + encodeURIComponent(field.value) + "&";
                    break;
                case "select-one":
                    qs += fldName + "=" + encodeURIComponent(field.options[field.selectedIndex].value) + "&";
                    break;
                case "select-multiple":
                    for(var j = 0; j < field.length; j++)
                    {
                        var item = field.options[j];
                        
                        if (item.selected === true)
                            qs += fldName + "[]" + "=" + encodeURIComponent(item.value) + "&";
                     }
                     break;
                case "checkbox":
                case "radio":
                    if (field.checked)
                        qs += fldName + "=" + encodeURIComponent(field.value) + "&";

                    break;
            }
        }
    }

    return qs.substr(0, qs.length - 1); 
};


jXmlDom.updateContentFromForm = function(form, target, xsltProc, callback)
{
    try
    {
    	jXmlDom.updateCursor(target, "wait");
    	
        var params = jXmlDom.formToQueryString(form) + "&" + jXmlDom.REMOTE_CALL_FLAG + "=true";
        var xmlhttp = new jXmlDom.XMLHttpRequest();
        var bUseGet = form.getAttribute("method") && form.getAttribute("method").toLowerCase() == "get";
        
        if (bUseGet)
            xmlhttp.open("GET", form.getAttribute("action") + "?" + params, true);
        else
        {
            xmlhttp.open('POST', form.getAttribute("action"), true);
            xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xmlhttp.setRequestHeader("Content-length", params.length);
            xmlhttp.setRequestHeader("Connection", "close");
        }
        
        xmlhttp.onreadystatechange = function()
        {
        	try
        	{
	            if (xmlhttp.readyState == 4)
	            {
	            	var dom = xmlhttp.responseXML;
	            
	            	if (dom && jXmlDom.getParseErrorText(dom) == jXmlDom.PARSED_OK)
	            	{
		                jXmlDom.updateContentFromNode(xmlhttp.responseXML, target, xsltProc);
        			
        				if (callback)
		                	callback(form, target);
	            	}
	            	else
	            		throw jXmlDom.getParseErrorText(dom);
	            }
        	}
        	catch(e)
        	{
        		if(callback)
        			callback(form, target, e);
        		else
        			throw e;
        	}
        };
        
        xmlhttp.send(bUseGet? "" : params);
    }
    catch(e)
    {
        jXmlDom.updateCursor(target, "auto");
    
        if (callback)
        	callback(form, target, e);
        else
        {
        	throw e;
        }
    }

    return false;
};

jXmlDom.FUNCTION_NAME_REGEXP = new RegExp("");
jXmlDom.getFunctionName = function(f, force)
{
	var name;

	if(!name)
	{
		if (force)
		{
			name = "SarissaAnonymous" + jXmlDom._getUniqueSuffix();
			window[name] = f;
		}
		else
		{
			name = null;
		}
	}
	
	if (name)
		window[name] = f;

	return name;
};

jXmlDom.setRemoteJsonCallback = function(url, callback, callbackParam)
{
	if (!callbackParam)
		callbackParam = "callback";

	var callbackFunctionName = jXmlDom.getFunctionName(callback, true);
	var id = "jXmlDom_json_script_id_" + jXmlDom._getUniqueSuffix(); 
	var head = document.getElementsByTagName("head")[0];
	var scriptTag = document.createElement("script");

	scriptTag.type = "text/javascript";
	scriptTag.id = id;
	scriptTag.onload = function() {};

	if (url.indexOf("?") != -1)
		url += ("&" + callbackParam + "=" + callbackFunctionName);
	else
		url += ("?" + callbackParam + "=" + callbackFunctionName);

	scriptTag.src = url;
  	head.appendChild(scriptTag);
  	return id;
};

var DataXmlDom = jXmlDom.getDomDocument();

/*
var DomItemClass = function(){};
var XhrItemClass = function(){};
var XslItemClass = function(){};

extendEx(DomItemClass,
{
	dom: null,
	release: true
});

extendEx(XhrItemClass,
{
	xhr: null,
	release: true
});

extendEx(XslItemClass,
{
	xsl: null,
	release: true
});
*/

var DomPool = [];
var XhrPool = [];
var XlsPool = [];

jXmlDom.get = function(xml)
{
	var item = null;
	
	try
	{
		for(var i = 0; i < DomPool.length; i++)
		{
			if (DomPool[i].release)
			{
				DomPool[i].release = false;
				item = DomPool[i];
				break;
			}
		}

		try
		{
			if (!item)
			{
				item = {dom: null, release: true};
				item.dom = jXmlDom.getDomDocument();
				item.release = false;
				item.async = false;
				DomPool.push(item);
			}
				
			if (xml)
				item.dom.loadXML(xml);
		}
		catch(e)
		{
			alert("浏览器异常，请关闭浏览器后重新登录");
		}
		
		return item.dom;
	}
	finally
	{
		item = null;
	}
};

jXmlDom.free = function(dom)
{
	for(var i = 0; i < DomPool.length; i++)
	{
		if (DomPool[i].dom == dom)
		{
			if (DomPool[i].release)
				return true;

			DomPool[i].dom.loadXML("");
			DomPool[i].release = true;
			return true;
		}
	}
	
	return false;
};

jXmlDom.clear = function()
{
	for(var i = 0; i < DomPool.length; i++)
	  this.free(DomPool[i].dom);
};


