function StringToXML ( str )
{
	try //Firefox, Mozilla, Opera, etc.
	{
		parser = new DOMParser();
		xmlDoc = parser.parseFromString ( str, "text/xml" );
		return xmlDoc;
	}
	catch(e)
	{
		try //Internet Explorer
		{
			xmlDoc = new ActiveXObject ( "Microsoft.XMLDOM" );
			xmlDoc.async = "false";
			xmlDoc.loadXML ( str );
			return xmlDoc;
		}
		catch ( e )
		{
			alert ( e.message );
		}
	}
	return null;
}

function XMLToString ( xml )
{
	try
	{
		var serializer = new XMLSerializer();
		return serializer.serializeToString ( xml );
	}
	catch ( e )
	{
		return null;
	}
	return null;
}

function CreateXMLRequester()
{
	var requester;
	if ( window.XMLHttpRequest )
	{
		requester = new XMLHttpRequest();
		if ( requester.overrideMimeType ) requester.overrideMimeType ( "text/xml" );
	}
	else if ( window.ActiveXObject )
	{
		try { requester = new ActiveXObject ( "Msxml2.XMLHTTP" ); }
		catch ( e )
		{
			try { requester = new ActiveXObject ( "Microsoft.XMLHTTP" ); }
			catch ( e )
			{
				requester = false;
				alert ( "XML Request Not Supported" );
			}
		}
	}
	return requester;
}

function XMLRequestSync ( url )
{
	var xmlhttp = CreateXMLRequester();
	xmlhttp.open ( "GET", url, false );
	xmlhttp.send ( null );
	return xmlhttp.responseXML;
}

function XMLRequestAsync ( url, callback, userVar )
{
	var xmlhttp = CreateXMLRequester();
	xmlhttp.open ( "GET", url, true );
    xmlhttp.onreadystatechange = function() { if ( xmlhttp.readyState != 4 ) { return; } callback ( xmlhttp.responseXML, userVar ); };
    xmlhttp.send ( null );
}

