var xmlHttp;
var ajaxOk=true;
var ajaxUrl='';
var ajaxUrlPar='';
var ajaxAsynchroFlag=true;
var ajaxFcNameState='ajx_handleReceiveXml';
var ajaxFcNameXml='';
//nazov prveho elementu v roote
var ajaxXmlElName='root'; 
var ajaxLoaderSrc=null,ajaxLoaderX=0,ajaxLoaderY=0;

function ajx_getXmlHttpObject(){
  var xmlHttp=null;
  try{
    //Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
  }catch (e){
    //IE
    try{
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }catch (e){
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  return xmlHttp;
}
function ajx_setUrl(url){
  ajaxUrl=url;
}
function ajx_setUrlPar(par){
  ajaxUrlPar=par;
}
function ajx_setXmlElName(par){
  ajaxXmlElName=par;
}
function ajx_setAsynchroFlag(par){
  ajaxAsynchroFlag=par;
  //pri asynchronnych spojeniach by makeRequest vracalo false
  //vtedy sa necaka na dokoncenie funkcie
  if (!par) ajaxOk=true;
}
//nazov fc pre spracovanie requestu
//fc musi byt definovana v inom module (podobne ako ajx_handleReceiveXml)
//default je ajx_handleReceiveXml vtedy treba definovat ajaxFcNameXml
function ajx_setFcNameState(par){
  ajaxFcNameState=par;
}
//nazov fc ak sa pouzije default
function ajx_setFcNameXml(par){
  ajaxFcNameXml=par;
}
//default wrapper pre spracovanie requestu
//musi byt definovana ajaxFcNameXml do ktorej sa posle na spracovanie xml (obsahuje elementy entry)
function ajx_handleReceiveXml(win,link){
  ajaxOk=false;
  jmsr_debug("ajx_handleReceiveXml "+xmlHttp.readyState);
  do{
 	  if(xmlHttp.readyState!=4 || ajaxFcNameXml.length==0){
 	    ajaxOk=false;
 	    //az 4 je komplet, do 4 by to robilo zbytocne dalej
 	    return false;
    }
 		if(!xmlHttp.responseXML){
 		  ajaxOk=false;
 		  break;
 		}
 		var items = xmlHttp.responseXML.getElementsByTagName(ajaxXmlElName)[0];
 		var items_count = items.length;
    eval("ajaxOk="+ajaxFcNameXml+"(win,items);");
    
 	}while(false);
 	jmsr_debug("ajaxOk "+ajaxOk);
 	//ak neprebehlo spracovanie xml do okna dat stranku z linky
 	if (!ajaxOk && win && link!=null){
     win.location.href=link.href;
  }
  return ajaxOk;
}
function ajx_getElementValue(node){
   return node.innerText || node.textContent || node.value || node.text; 
}
function ajx_setLoaderImg(loader,x,y){
  ajaxLoaderSrc=loader;
  ajaxLoaderX=x;
  ajaxLoaderY=y;
}
//default wrapper pre spracovanie async requestu ako textu
function ajx_handleReceiveText(win,link){
  var ret=false;
  ajaxOk='';

  jmsr_debug("ajx_handleReceiveText "+xmlHttp.readyState);
  do{
 	  if(xmlHttp.readyState!=4){
 	    //az 4 je komplet, do 4 by to robilo zbytocne dalej
 	    return false;
    }
 		if(!xmlHttp.responseText){
 		  break;
 		}
    ajaxOk=xmlHttp.responseText;
    ret=true;
    
 	}while(false);
 	jmsr_debug("ajaxOk "+ajaxOk);
 	//ak neprebehlo spracovanie xml do okna dat stranku z linky
 	if (!ajaxOk && win && link!=null){
     win.location.href=link.href;
  }
  return ret;
}
//pouzije sa ajaxFcName pre statechange
//ak je link null response je nezaujimava
function ajx_makeRequest(win,link,method,elName){
  if (ajaxFcNameState.length<=0 && link!=null)
    return false;

  xmlHttp=ajx_getXmlHttpObject();
  if (xmlHttp==null){
    return false;
  }
  if (elName!=null) ajx_setXmlElName(elName);
  if (method=='POST'){
    xmlHttp.open("POST", ajaxUrl, true);
    xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlHttp.setRequestHeader("Content-length", ajaxUrlPar.length);
    xmlHttp.setRequestHeader("Connection", "close");
    if (link!=null) eval("xmlHttp.onreadystatechange=function(){ "+ajaxFcNameState+"(win,link); }");
    xmlHttp.send(ajaxUrlPar);
  }else{
    xmlHttp.open("GET", ajaxUrl+(ajaxUrlPar.length>0 ? '?'+ajaxUrlPar : ''), ajaxAsynchroFlag);
    if (link!=null) eval("xmlHttp.onreadystatechange=function(){ "+ajaxFcNameState+"(win,link); }");
    xmlHttp.send(null);
  }
  return ajaxAsynchroFlag ? true : ajaxOk;
}
//synchronny request s responseText
function ajx_makeRequestSync(win,link){
  jmsr_debug("ajx_makeRequestSync");
  ajx_setAsynchroFlag(false);
  xmlHttp=ajx_getXmlHttpObject();
  if (xmlHttp==null){
    return '';
  }

  xmlHttp.open("GET", ajaxUrl+(ajaxUrlPar.length>0 ? '?'+ajaxUrlPar : ''), ajaxAsynchroFlag);
  xmlHttp.send(null);
  ajaxOk = xmlHttp.status==200 ? xmlHttp.responseText : '';
  return ajaxOk;
}
//async request s responseText
function ajx_makeRequestAsync(fcName,win,link){
  jmsr_debug("makeRequestFc");
  ajx_setAsynchroFlag(true);
  if (fcName!=null || fcName.length<=0)
    fcName='ajx_handleReceiveText';

  xmlHttp=ajx_getXmlHttpObject();
  if (xmlHttp==null){
    return false;
  }

  xmlHttp.open("GET", ajaxUrl+(ajaxUrlPar.length>0 ? '?'+ajaxUrlPar : ''), ajaxAsynchroFlag);
  eval("xmlHttp.onreadystatechange=function(){ "+fcName+"(win,link); }");
  xmlHttp.send(null);
  return true;
}
//otvori req a necaka na vysledok
function ajx_makeRequestClose(){
}
