/**
* xmlhttp.loader.onReadyState fuggvenyben a kimenettol fuggoen atiranyitas vagy tartalom betoltese:
*
* responseText=="REDIRECT url"
* ebben az esetben egy documene.location.href=url-t csinal
*
* responseText=="AJAX__LOAD xmlhttpobj url"
* ebben az eseben egy ajax__load(xmlhttpobj, url) fuggvenyhivast csinal.
* AZ ajax__load() KULSO FUGGVENYNEK LETEZNIE KELL!!!!!! 
*
*/

var xmlhttp = new Object();

xmlhttp.READY_STATE_UNINITIALIZED=0;
xmlhttp.READY_STATE_LOADING=1;
xmlhttp.READY_STATE_LOADED=2;
xmlhttp.READY_STATE_INTERACTIVE=3;
xmlhttp.READY_STATE_COMPLETE=4;
xmlhttp.PROGRESSBAR= 1;

xmlhttp.loader=function(onload, onerror, loadprogress, loadprogressstyle, loadprogresstext, loadprogressid) {
	this.req = null;
  this.progressId=(loadprogressid) ? loadprogressid : "loadProgress"; // az id -je annak a divnek ami  this.progressId=(loadprogressid) ? loadprogressid : "loadProgress"; // az id -je annak a divnek ami kiirja hogy loading
	xmlhttp.currentLoader=this; // ??? ezt nem tudom mi lehet es miert kell...  
	this.onload= onload; // ez ami megfogja a visszjovo adatokat
	this.onerror=(onerror) ? onerror : this.defaultError; // ez a hibauzi
	this.loadProgress=(loadprogress) ? loadprogress : this.defaultloadProgress; // ez ami mutatja hogy loading avgy amit mutat
	this.loadProgressStyle=loadprogressstyle; // a css stylusa a loading nak 
	this.loadProgressText=loadprogresstext; // a szovege a loadingnak
	this.clearProgress=this.clearProgress; // ez torli azt hogy loading

	this.setloadparam=this.setLoadParam; // ez beallitja hogy honnan, milyen methoddal, milyen parameterekkel, milyen headerekkel
	this.load=this.load; // ez maga a betoltoke...
	this.celDiv = null; // kompatibiltas az elozo verziohoz
  this.loadProgressId= "";
	// ezek this.valami = this.valami -k feltetelzhetoen feleslegesek... 
}
xmlhttp.loader.prototype.setLoadParam=function(url, method, params, contentType) {
	this.url = url;
	this.method = method;
	this.params = params;
	this.contentType = contentType;
}
xmlhttp.loader.prototype.setdiv = function (aDiv) {
	this.celDiv = aDiv;
	this.onload = this.defaultLoad;
}
xmlhttp.loader.prototype.defaultLoad = function () {
	var div = document.getElementById(this.celDiv);
	var retText = this.req.responseText;
	div.innerHTML = retText;
}
xmlhttp.loader.prototype.load = function(url,method,params,contentType) {
	var turl = (url) ? url : this.url;
	var tmethod = (method) ? method : this.method;
	var tparams = (params) ? params : this.params;
	var tcontentType = (contentType) ? contentType : this.contetType;

	this.loadXMLDoc(turl, tmethod, tparams, tcontentType)
}
xmlhttp.loader.prototype.loadXMLDoc=function(url,method,params,contentType) {
	if (!method) {
		method="GET";
	}
	if(!contentType && method=="POST") {
		contentType='application/x-www-form-urlencoded; charset=ISO-8859-2';
		//contentType='application/x-www-form-urlencoded';
	}
	if (window.XMLHttpRequest) {
		this.req=new XMLHttpRequest();
	} 
	else if (window.ActiveXObject) {
		try {
			this.req = new ActiveXObject("Msxml2.XMLHTTP");
	}
		catch (err) {
			this.req = new ActiveXObject("Microsoft.XMLHHTP");
		}
	}
  if (this.req) {
		try {
			var ldr=this;
			this.req.onreadystatechange=function() {
				xmlhttp.loader.onReadyState.call(ldr);
			}
			this.req.open(method,url,true);
			this.req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); // ezt kuldtuk az elozo verzioban is, biztos fontos volt... 
			if (contentType) {
				this.req.setRequestHeader('Content-Type', contentType);
			}
      this.req.send(params);
            
      if(this.loadProgressId!="") //xmlhttp.PROGRESSBAR==1)
			 this.loadProgress.call(this);
  	} catch (err) {
			this.onerror.call(this);
		}
	}
}

xmlhttp.loader.onReadyState = function() {
	var req=this.req;
	var ready=req.readyState;
	try {
		var httpStatus=req.status;
    
    if (ready==4) {
      if(req.responseText.match(/^REDIRECT/)) {
        url= req.responseText.replace(/^REDIRECT (.*)$/, "$1");
        if(url!="")
          document.location.href= url;
        req.responseText="";
      }
      else {
        try {
          if(req.responseText.match(/AJAX__LOAD/)) {
            obj= req.responseText.replace(/AJAX__LOAD (.*?) .*/, "$1\0");
            url= req.responseText.replace(/AJAX__LOAD (.*?) (.*?)]/, "$2\0");
            obj= obj.substr(0, obj.indexOf("\0"));
            url= url.substr(0, url.indexOf("\0"));
            if(obj!="" && url!="")
              eval("ajax__load("+obj+", '"+url+"')");
            // levagjuk a "direktivat":
            buff=  req.responseText.replace(/^AJAX__LOAD (.*?)](.*)/, "$2");
            req.responseText= "asfdgadfgjyb dlgfjb jhfgb aldbfg ajlbd adgb ajldg ";
          }
        }
        catch(e) {
          alert("Hiba a formon!\n\n("+err.message+": "+err.name+")");
        } 
      }
    }
    
		if (this.loadProgressId!="" && (ready==xmlhttp.READY_STATE_LOADING || ready==xmlhttp.READY_STATE_LOADED)) {
			;//this.loadProgress.call(this);
		}
		else if (ready==xmlhttp.READY_STATE_COMPLETE) {
			if (httpStatus==200 || httpStatus == 0) {
        if(this.loadProgressId!="")
				  this.clearProgress(this);
				this.onload.call(this);
			}
			else {
				//this.clearProgress(this);
				this.onerror.call(this);
			}
		}
	} 
	catch(e){ }
}

xmlhttp.loader.prototype.defaultError=function(){
	alert("error fetching data!"
		+"\n\nreadyState: "+this.req.readyState
		+"\nstatus: "+this.req.status
		+"\nheaders: "+this.req.getAllResponseHeaders());
}

xmlhttp.loader.prototype.defaultloadProgress=function(){
	var text = (this.loadProgressText) ? this.loadProgressText : "Töltés..."
  
  var loading = document.createElement("div");
  
  posY= 0;
  posX= 0;
  var p= null;
  if(this.loadProgressId!="" && (p= document.getElementById(this.loadProgressId))) {
    // gorgetes:
    //var viewPortO= getScrollXY();
    //posY= findPosY(p) + viewPortO[1];
    posY= findPosY(p);
    posX= findPosX(p);
  }
  
  //alert("x: "+posX+"\nY: "+posY);
    
  if(this.loadProrgessId!="" && p==null)
    return;
 
	var loadtxt = document.createTextNode(text);
	loading.appendChild(loadtxt);
	loading.id=this.progressId;
 
  if (this.loadProgressStyle) {
		loading.className=this.loadProgressStyle;
	}
	else {
    loading.style.border="1px";
    loading.style.borderColor="#f1eae4";
    loading.style.width="150px";
    loading.style.backgroundColor="#ff0000";
    loading.style.color="#ffffff";
    loading.style.fontFamily="Verdana"
    loading.style.fontSize = "8pt";
    loading.style.fontWeight="normal";
    loading.style.textAlign="center";
    loading.style.padding="5px 0px 5px 0px";
    loading.style.position="absolute";
		//loading.style._position="absolute";
    loading.style.zIndex="999";
//		loading.style.top=eval(document.body.scrollTop);
//    loading.style.top=window.pageYOffset;
    loading.style.top= posY;
    loading.style.left= posX;
	}
  
  //document.getElementById("__kereso_atc").appendChild(loading);
  document.getElementById(this.loadProgressId).appendChild(loading);
  //document.body.appendChild(loading);
}

xmlhttp.loader.prototype.clearProgress=function() {
	var elem = document.getElementById(this.progressId);
	if (elem) {
	 elem.parentNode.removeChild(elem);
	}
}

