/*
 * Returns an new XMLHttpRequest object, or false if the browser
 * doesn't support it
 */
 var lastCartUpdate = 0;
function newXMLHttpRequest() {

  var xmlreq = false;

  // Create XMLHttpRequest object in non-Microsoft browsers
  if (window.XMLHttpRequest) {
    xmlreq = new XMLHttpRequest();

  } else if (window.ActiveXObject) {

    try {
      // Try to create XMLHttpRequest in later versions
      // of Internet Explorer

      xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
      
    } catch (e1) {

      // Failed to create required ActiveXObject
      
      try {
        // Try version supported by older versions
        // of Internet Explorer
      
        xmlreq = new ActiveXObject("Microsoft.XMLHTTP");

      } catch (e2) {

        // Unable to create an XMLHttpRequest by any means
        xmlreq = false;
      }
    }
  }
 if (!xmlreq) { // Unable to create XMLHttpRequest
		window.alert("Unable to create XMLHttpRequest.Check your Internet Explorer!");
		return false;
  }
return xmlreq;
}

 /*
	* Returns a function that waits for the specified XMLHttpRequest
	* to complete, then passes it XML response to the given handler function.
  * req - The XMLHttpRequest whose state is changing
  * responseXmlHandler - Function to pass the XML response to
  */
 function getReadyStateHandler(req, responseXmlHandler) {

   // Return an anonymous function that listens to the XMLHttpRequest instance
   return function () {

     // If the request's status is "complete"
     if (req.readyState == 4) {
       
       // Check that we received a successful response from the server
       if (req.status == 200) {

         // Pass the XML payload of the response to the handler function.
         responseXmlHandler(req.responseXML);

       } else {

         // An HTTP problem has occurred
         alert("HTTP error "+req.status+": "+req.statusText);
       }
     }
   }
 }

 /**   handler Xml   */
 function getReadyXmlHandler(req, responseXmlHandler) {
   // Return an anonymous function that listens to the XMLHttpRequest instance
   return function () {
     // If the request's status is "complete"
     if (req.readyState == 4) {
       // Check that we received a successful response from the server
       if (req.status == 200) {
         // Pass the XML payload of the response to the handler function.
		 var xmlDoc = new ActiveXObject("Microsoft.xmldom"); 
  		 xmlDoc.async = "false";
 		 xmlDoc.loadXML(req.responseText);
         //responseXmlHandler(req.responseXML);
		 responseXmlHandler(xmlDoc);
       } else {
		 errHandle("HTTP error "+req.status+": "+req.statusText);
       }
     }
   }
 }

 /**   handler Text   */
 function getReadyTextHandler(req, responseTextHandler) {
   // Return an anonymous function that listens to the XMLHttpRequest instance
   return function () {
     // If the request's status is "complete"
     if (req.readyState == 4) {
       // Check that we received a successful response from the server
       if (req.status == 200) {
       	  var str = req.responseText;
		  str = str.replace(/(\n[\s|\t]*\r*\n)/g, '');
		  str = str.replace(/(^\s*)|(\s*$)/g,"");
         // Return text of the response to the handler function.
		if(str.indexOf("#ERR:")>=0){
			 alert(str.substring(str.indexOf("#ERR:")+5));
			 //responseTextHandler('');
		 } else {
			 responseTextHandler(str);
		 }
       } else {
		 errHandle("HTTP error "+req.status+": "+req.statusText);
       }
     }
   }
 }
  
 /**   send url for Ajax   */
 function $sendURL(url,callBack,handlerType){
	var req = newXMLHttpRequest();
	if(!handlerType || handlerType=="")handlerType="xml";
	handlerType = handlerType.toLowerCase();
	if(handlerType=="xml"){
 	   req.onreadystatechange = getReadyXmlHandler(req, callBack);
 	} else if(handlerType=="text") {
 	   req.onreadystatechange = getReadyTextHandler(req, callBack);
 	}
 	req.open("POST", url, true);
 	req.send(null); 
 }
 
 function $getNodeValue(obj,nodeName) {
	 if(!obj) return "";
	 if(nodeName){
		var node = obj.getElementsByTagName(nodeName);
		if(node) {
			node = node[0];
		}else {
			//alert("节点 " + nodeName + " 不存在");
		}
		if(node) {
			node = node.firstChild;
		}else {alert(nodeName);
			//var msg = "节点 " + nodeName + " 不存在";
			//alert(msg);		
		}
		//var node = obj.getElementsByTagName(nodeName)[0].firstChild;
		if(node) {
			return node.nodeValue;
		} else {
			return "";
		}
	 } else {
		 var value = "";
		 if(obj &&  obj.firstChild)
		 	value = obj.firstChild.nodeValue;
		 return value;
	 }
}
function $(str){
	  return document.getElementById(str);
	}
