function sendErrorMail(e) {
	var msg = '';
	for(var i in e){
		var tmp = '(error)'
		if(i.match(/^(expose|header|footer|ivn|dygolk|ad_)/))
			tmp = '(excluding as a known custom method or property)'
		else{
			try{ tmp = e[i] } catch(e2){}
		}
		msg += tmp + '[br]';
	}
	
	var re = new RegExp ('/', 'gi') ;
	var url = URLencode(document.URL);
	//var xml = getPostXML('<message text="page: ' + url + '[br] function: addGoal[br]' + msg + '" />');
	//postXML('/xml/jserror.asp', xml);
}

function getUserNode() {
		return '<user valid="yes" />'; //'<user ed=\"' + ed + '\" rf=\"' + rf + '\" tg=\"' + tg + '\" />';
}
function getXmlHttp() {
	if (is_ie4up)
	    var httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); //new XMLHttpRequest();
	else
		var httpRequest = new XMLHttpRequest();
		
	return httpRequest;
}

function getXmlDocument() {
	if (is_ie4up)
		var xmlDoc = new ActiveXObject('Msxml2.DOMDocument');
	else
		var xmlDoc = document.implementation.createDocument("","", null);
		
	return xmlDoc;
}

function loadXmlString(xmlDoc) {
	if (is_ie4up)	
        var objDOMParser = new DOMParser();
        
        //create new document from string
        var objDoc = objDOMParser.parseFromString(strXML, "text/xml");	
}

function postXML (url, xmlDocument) {
	try {
		if (xmlDocument != null) {
			var httpRequest = getXmlHttp();
			httpRequest.open('POST', url, false);
			
			httpRequest.send(xmlDocument);

			if (httpRequest.responseText != '') {
				var responseXml = createXMLFromString(httpRequest.responseText);

				if (responseXml == null)  {
					//alert('Error while trying to update your records');
					return null;
				}
				else {
					if (responseXml.documentElement.childNodes[0].getAttribute('value') != '1') {
						return responseXml.documentElement.childNodes[0].getAttribute('value');
					} 
					else {
						return 1;
					}
				
					return 1;
				}
			}
			
			return httpRequest.responseXML;
		}
	}
		
	catch (e) {
		sendErrorMail(e);
		return null;
	}
}

function getHtml(url) {
  try {
    var httpRequest = getXmlHttp();
    httpRequest.open('POST', url, false);
    httpRequest.send(null);
	
	return httpRequest.responseText;
  }
  catch (e) {
    sendErrorMail(e);
    return null;
  }	
}

function getXmlAsString(xmlDoc) {
	if (is_ie4up)
		return xmlDoc.xml;
	else {
		//create a new XMLSerializer
		var objXMLSerializer = new XMLSerializer;
		
		//get the XML string
		var strXML = objXMLSerializer.serializeToString(xmlDoc);
		
		//return the XML string
		return strXML;
	}
}

function getPostXML(string) {
	try {
		return  createXMLFromString('<xml>' + getUserNode() + string + '</xml>');	
	}
	catch (e) {
		sendErrorMail(e);
		return null;
	}
}

function createXMLFromString (string) {
  var xmlDocument;
  try {
    xmlDocument = getXmlDocument();
    xmlDocument.async = false;

	if (is_ie4up) {
	    if (!xmlDocument.loadXML(string)) {
			return null;
		}
	}
	else {
        var objDOMParser = new DOMParser();
        
        //create new document from string
        var objDoc = objDOMParser.parseFromString(string, "text/xml");		

        //make sure to remove all nodes from the document
		while (xmlDocument.hasChildNodes())
			xmlDocument.removeChild(this.lastChild);
            
        //add the nodes from the new document
        for (var i=0; i < objDoc.childNodes.length; i++) {
            
            //import the node
            var objImportedNode = xmlDocument.importNode(objDoc.childNodes[i], true);
            
            //append the child to the current document
            xmlDocument.appendChild(objImportedNode);
        
        } //End: for
        
        //we can't fire the onload event, so we fake it
        //handleOnLoad(xmlDocument);
	}
	
    return xmlDocument;
  }
  catch (e) {
    alert(e.message);
    return null;
  }
}