function getXMLHTTPRequest() {
  var req;
  try {
    req = new XMLHttpRequest();
  } catch(err1) {
     var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
                                    "MSXML2.XMLHTTP.5.0",
                                    "MSXML2.XMLHTTP.4.0",
                                    "MSXML2.XMLHTTP.3.0",
                                    "MSXML2.XMLHTTP",
                                    "Microsoft.XMLHTTP");
    var size = XmlHttpVersions.length;
    for(var i = 0; i < size && !req; i++) {
      try {
        req = new ActiveXObject(XmlHttpVersions[i]);
      } catch(e) { }
    }
  }
  if(!req) alert("Error creating the XMLHttpRequest object.");
  else return req;
}

function doCallback(callback, item, element) {
  eval(callback + '(item,element)');
}

function requestGET(url, query, req) {
  myRand = parseInt(Math.random()*999999999999999999);
  req.open("GET", url+"?rand="+myRand+"&"+query, true);
  req.send(null);
}

function requestPOST(url, query, req) {
  req.open("POST", url, true);
  req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  req.send(query);
}

function doAjax(url, query, callback, reqtype, getxml,element,indicator) {
  var myreq = getXMLHTTPRequest();
  myreq.onreadystatechange = function () {
    if(myreq.readyState == 1) {
       /* Request opened */
      if(indicator == 1) {
        document.getElementById(element).innerHTML = '<img src="/ajax/indicator-big.gif">';
      }
    } else if(myreq.readyState == 2) {
      /* Request sent */
    } else if(myreq.readyState == 3) {
      /* Request loading */
    } else if(myreq.readyState == 4) {
      /* Request loaded */
      if(myreq.status == 200) {
        var item = myreq.responseText;
        if(getxml == 1) {
          item = myreq.responseXML;
        }
        doCallback(callback, item, element);
      } else if(myreq.status == 404) {
        return;
      } else if(myreq.status == 500) {
        document.getElementById(element).innerHTML = '<p>There was an error at the server.</p>';
        return;
      }
    }
  }
  if(reqtype == "post") requestPOST(url, query, myreq);
  else requestGET(url, query, myreq);
}

function UpdatePermissionCallback(item) {
  var ResultData = item.getElementsByTagName('result');
  var ResultId = document.getElementById('result');

  ResultId.innerHTML = ResultData[0].attributes.getNamedItem('value').value;
  ResultId.style.display = "block";
}

function paymentCallback(item, element) {
  var output = document.getElementById(element);
  output.innerHTML = item;
}

function DisplayACLCallback(item, element) {
  var ResultID = document.getElementById(element);
  var Data = item.getElementsByTagName('call');

  var cols = 8;

  var c = new Array();
  for(var x = 0; x < cols; x++) {
    c[x] = document.createElement('div');
    c[x].id = "ACLcontent"+x;
  }

  if(Data.length != 0) {
    ResultID.innerHTML = "";
    var avail = "There are "+Data.length+" callsigns available";
    var AO = document.createElement('div');
    AO.id = "ACLavailcalls";
    AO.innerHTML = avail;
    ResultID.appendChild(AO);
    
    var x = 0;
    for(var j = 0; j < Data.length; j++) {
      var Text = document.createTextNode(Data[j].childNodes[0].nodeValue+"\r\n");
      c[x++].appendChild(Text);
      if(x == cols) x = 0;
    }
    for(x = 0; x < cols; x++) {
      ResultID.appendChild(c[x]);
    }
  } else {
    alert("No data returned.");
  }
}

function aclwrap(char, prov) {
  doAjax('/ajax/getAvailable.php', 'search='+char+'&prov='+prov+'', 'DisplayACLCallback', 'get', 1, 'ACLcontent', 1);
}

