// létrehozza az XMLHttpRequest objektumot
// minden ajax kéréshez egy új fog létrejönni, így többszálú a végrehajtás
// esetén sem futnak egymásra a kérések
function makeRequest() {
  try {
    req = new XMLHttpRequest(); // Firefox  
  } catch(err1) {
    try {
      req = new ActiveXObject('Msxml2.XMLHTTP'); // Explorer 
    } catch (err2) {
      try {
        req = new ActiveXObject("Microsoft.XMLHTTP"); // Explorer 
      } catch (err3) {
        req = false;
      }
    }
  }
  return req;
}

// ha a paraméter átadás GET móddal történik, akkor ezt használjuk
//  - url: a cím, amin a végrehajtandó kód van
//  - params: átadandó paraméterek
//  - r: a létrehozott XMLHttpRequest objektumunk
function modeGET(url, params, r) {
  myr = parseInt(Math.random()*99999999);
  r.open("GET", url+'?'+params+'&rand='+myr, true);
  r.send(null);
}

// ha meg POST-oljuk a paramétereket, akkor meg ez hívódik meg
//  - url: a cím, amin a végrehajtandó kód van
//  - params: átadandó paraméterek
//  - r: a létrehozott XMLHttpRequest objektumunk
function modePOST(url, params, r) {
  r.open("POST", url, true);
  r.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  r.send(params);
}

// ez a funkció fogja meghívni a visszakapott értékeket feldolgozó funkciót
function doCallback(callback, item) {
  eval(callback + '(' + item + ')');
}

// ez a főfunkció, paraméterei:
//  - url: a cím, amin a végrehajtandó kérés van
//  - params: átadandó paraméterek az előző címre
//  - callback: a funkció, ami majd feldolgozza a visszakapott adatokat
//  - mode: 'post' vagy 'get', attól függően, hogy milyen módot szeretnénk használni
//  - returnXML: ha 0, akkor stringet kapunk vissza, ha 1, akkor meg xml-t
function doAjax(url, params, callback, mode, returnXML) {
  var r = makeRequest();
  r.onreadystatechange = function() {  
    if (r.readyState == 4) {
      if (r.status == 200) {
        var item = r.responseText;
        if (returnXML == 1) {
          item = r.responseXML;
        }        
        doCallback(callback, item);
      }
    }
  }
  if (mode == 'post') {
    modePOST(url, params, r);
  } else {
    modeGET(url, params, r);
  }
}

