function ajaxRequest()
{
  var xmlhttp=false;

  try 
  {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } 

  catch (e) 
  {
    try 
    {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } 

    catch (e) 
    {
      xmlhttp = false;
    }
  }

  if (!xmlhttp && typeof XMLHttpRequest!='undefined') 
  {
	  try 
    {
		  xmlhttp = new XMLHttpRequest();
  	} 
    catch (e) 
    {
		  xmlhttp=false;
  	}
  }

  if (!xmlhttp && window.createRequest) 
  {
	  try 
    {
		  xmlhttp = window.createRequest();
  	} 
    catch (e) 
    {
  		xmlhttp=false;
	  }
  }

  return xmlhttp;
}

function get_xml_element(xml,name,index)
{
  if (!xml)
    return '';

  if (index==null) index = 0;
  var tree = xml.responseXML.getElementsByTagName(name);

  if (!tree)
    return '';

  var ele = tree[index];

  if (ele && ele.firstChild) 
    return ele.firstChild.nodeValue;
  else
    return '';
}

var xmlhttp = ajaxRequest();

function ajax(url,resultcallback,progresscallback) // both parameters optional
{
  if (xmlhttp == null)
  {
    return false;
  }

  xmlhttp.open('GET', url, true);

  xmlhttp.onreadystatechange = function() 
  {
    if (progresscallback != null)
    {
      progresscallback(xmlhttp.readyState);
    }
  
    if (xmlhttp.readyState==4) 
    {
      busy = false;

      if (xmlhttp.status==200) 
      {
        resultcallback(xmlhttp);
      }
      else
      {
        resultcallback(null);
      }

      delete xmlhttp;
    }
  }

  xmlhttp.send(null);

  return true;
}

