var xmlhttpauth = new Object();

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

xmlhttpauth.loader=function(onload, onerror, loadprogress, loadprogressstyle, loadprogresstext, loadprogressid) {
  this.message = ""; // ervenytelen felhasznalonev/jelszo uzenet
	this.req = null;
	this.progressId=(loadprogressid) ? loadprogressid : "loadProgress"; // az id -je annak a divnek ami kiirja hogy loading
	xmlhttpauth.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... 
}

// beallitjuk az uzenetet:
xmlhttpauth.loader.prototype.set_message= function(msg) {
  this.message= msg;
}

xmlhttpauth.loader.prototype.setLoadParam=function(url, method, params, contentType) {
	this.url = url;
	this.method = method;
	this.params = params;
	this.contentType = contentType;
}
xmlhttpauth.loader.prototype.setdiv = function (aDiv) {
	this.celDiv = aDiv;
	this.onload = this.defaultLoad;
}
xmlhttpauth.loader.prototype.defaultLoad = function () {
	var div = document.getElementById(this.celDiv);
	var retText = this.req.responseText;
	div.innerHTML = retText;
}
xmlhttpauth.loader.prototype.login = function(frm, url_root, url, username, password) {
  this.loadXMLDoc(frm, url_root, url, username, password)
}
xmlhttpauth.loader.prototype.loadXMLDoc=function(frm, url_root, url, username, password) {
  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 {      
      this.req.open("GET", url, false, username, password);
      this.req.send("");
      
      if(xmlhttpauth.PROGRESSBAR==1)
        this.loadProgress.call(this);
      if(this.req.status==200) {
        top.location.href= url_root;
        return false;
      }
      else {
        this.req.open("GET", url, false, "null", "null");
        this.req.send("");
        if(this.message=="")
          alert("Érvénytelen felhasználónév/jelszó!");
        else
          alert(this.message);
        frm.login.value="";
        frm.pwd.value="";
        frm.login.focus();
        return false;
      }  
    }
    catch (err) {
      this.onerror.call(this);
    }
  }
}

xmlhttpauth.loader.onReadyState = function() {
	var req=this.req;
	var ready=req.readyState;
	try {
		var httpStatus=req.status;
		//alert(ready);
		if (ready==xmlhttpauth.READY_STATE_LOADING || ready==xmlhttpauth.READY_STATE_LOADED) {
			//this.loadProgress.call(this);
		}
		else if (ready==xmlhttpauth.READY_STATE_COMPLETE) {
			if (httpStatus==200 || httpStatus == 0) {
				this.clearProgress(this);
				this.onload.call(this);
			}
			else {
				this.clearProgress(this);
				this.onerror.call(this);
			}
		}
	} 
	catch(e){ }
}

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

xmlhttpauth.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];
    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;

  document.body.appendChild(loading);
  //document.body.appendChild(loading);
   
  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;
	}
}

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

