// A couple of helping functions around the XMLHttpRequest object

var xmlloader_xmlhttp;
var xmlloader_configure = 1; // Configure xmlloader: 1 - uses mmartins.com proxy, 2 - uses Google Feed API
var xmlloader_apiResult = null;

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;

function xmlloader_checkValidtyOfHTTPRequest()
{
	if (xmlloader_configure==2)
		return true;

	if (xmlloader_xmlhttp.readyState==4)
	  {// 4 = "loaded"
	  if (xmlloader_xmlhttp.status==200)
		{// 200 = OK
			return true;
		}
	  else
		{
		alert("Problem retrieving XML data");
		return false;
		}
	  }
	return false;
 }

// Example URL: http://picasaweb.google.com/data/feed/api/user/marcelino.martins/album/BrazilPictures?max-results=10
function xmlloader_loadXMLDoc(url, cbFunction)
{
	if (xmlloader_configure==1)
		xmlloader_loadXMLDoc_WithMMartinsProxy("/brazilpictures/album_xml.asp?feed=" + escape(url), cbFunction);
	else
		xmlloader_loadXMLDoc_WithGoogleAPI(url, cbFunction);
}

function xmlloader_loadXMLDoc_WithMMartinsProxy(url, cbFunction)
{
	xmlloader_xmlhttp=null;

	if (window.XMLHttpRequest)
	  {// code for all new browsers
	  xmlloader_xmlhttp=new XMLHttpRequest();
	  }
	else if (window.ActiveXObject)
	  {// code for IE5 and IE6
	  xmlloader_xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	  }
	if (xmlloader_xmlhttp!=null)
	  {
		  xmlloader_xmlhttp.onreadystatechange=cbFunction;
		  xmlloader_xmlhttp.open("GET",url,true);
		  xmlloader_xmlhttp.send(null);
	  }
	else
	  {
		  alert("Your browser does not support XMLHTTP.");
	  }
}

function xmlloader_loadXMLDoc_WithGoogleAPI(feedURL, cbFunction) 
{
  //google.load("feeds", "1");

  var feed = new google.feeds.Feed(feedURL);
  feed.setResultFormat(google.feeds.Feed.XML_FORMAT);
  feed.setNumEntries(10000); // by default it loads 4 entries; ideally the code would load chunk by chunk, but for now I am ignoring that
  feed.includeHistoricalEntries();
  feed.load(function(result) 
		    {
				if (!result.error) 
				{
					xmlloader_apiResult = result;
					cbFunction();
				}
		    }
		   );
}

function xmlloader_xmlDocument()
{
	if (xmlloader_configure==1)
		return xmlloader_xmlhttp.responseXML;
	else
		return xmlloader_apiResult.xmlDocument;
}

  
// Differences in support between IE and Mozilla
function xmlloader_getElementsByTagCompat(parent, namespace, prefix, tag)
{
	var retCol = parent.getElementsByTagName(prefix + ":" + tag); // for IE

	if (retCol.length==0)
	{
		retCol = parent.getElementsByTagNameNS(namespace, tag); 
	}
	return retCol;
}



