var http;
var http_busy = false;

function addEvent(obj, evType, fn) {
  if (obj.addEventListener) {
    obj.addEventListener(evType, fn, true);
    return true;
  } else if (obj.attachEvent) {
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
    return false;
  }
}


function createRequestObject() {
	var ro;
	var browser = navigator.appName;
	if(browser == "Microsoft Internet Explorer"){
		ro = new ActiveXObject("Microsoft.XMLHTTP");
	}else{
		ro = new XMLHttpRequest();
	}
	return ro;
}

//var http;			// Ajax obj
var module = '';	// Modul neve



function loadXML(url)
{
	var mozilla = (typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined'); 
	var ie = (typeof window.ActiveXObject != 'undefined');
	if(mozilla)
	{
		this.xmlDoc = document.implementation.createDocument("", "", null);
		this.xmlDoc.strictErrorChecking = false;
		this.xmlDoc.async = false;
		this.fail = false;
	}
	else if(ie)
	{
		this.xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
		this.xmlDoc.async = false; 
		while(this.xmlDoc.readyState != 4) {};
		this.fail = false;
	}
	else
	{
		this.xmlDoc = '';
		this.fail = true;
	}

	if(this.fail != true)
	{
		try
		{
			// Minden egyeb (IE6-7,FX,O,stb.)
			if (ie || this.xmlDoc.load)
			{			
				this.xmlDoc.load(url);
			}
			// Webkites vackok (Safari, Google Chrome..)
			else
			{
				var xmlhttp = new window.XMLHttpRequest();
				xmlhttp.open("GET",url,false);
				xmlhttp.send(null);
				this.xmlDoc = xmlhttp.responseXML.documentElement;
				this.fail = false;
			}
		}
		catch(e)
		{
			this.fail = true;

			alert(e.name+"\n\n"+e.message);
		}
	}
}

function ExecAjaxCmd(url)
{
	var xml = new loadXML(url);

	if(xml.fail == true) {
		alert('ExecAjaxCmd Hiba! ('+url+')');
	} 
    else 
    {
		processXMLDocDocument(xml.xmlDoc);		
	}
	return true;
}


function processXMLDocDocument(xmlDoc)
{
	http_busy = false;
	x = xmlDoc.getElementsByTagName('item');
	
	if(x.length != 0) 
    {	
		var k,v,o,t,z;
		
		for(var i = 0; i < x.length; i++) 
        {
			try 
            {
				k = x[i].getElementsByTagName('k')[0].firstChild.nodeValue;
			} catch(e) {
				alert(e);
			}
			
			try 
            {
				v = x[i].getElementsByTagName('v');
			} catch(e) {
				v = null;
				alert('vPerr:' + e);
			}

			if (v != null) 
            {
				t = '';
				for (var j = 0; j < v.length; j++) 
                {
					try 
                    {
						z = (v[j].firstChild)
							? v[j].firstChild.nodeValue
							: '';
					} catch (e) 
					{
						z = '';
					}
					t += z;
				}
				v=t;

			}
			
			if (k == 'overlayForeground')
			{
				k += overlay.getNum();
			}

			
			if (k == '!JS') {
				try {
					eval(v);
				} catch(e) {
					alert('Hiba a kiszolgálótól érkezett válasz értelmezése során!');
					
					if (window.console)
					{
						console.log(e);
						console.log(v);
					}
				}
			} else if (k == '!ERR') {
				alert('A kérés végrehajtása közben a következő hiba lépett fel:\n\n:' + v);
			} else if (o = $$(k)) {
				o.innerHTML = v;
			} else {
				alert('ExecAjaxCmd Hiba, ID nem található! (' + k + ')');
			}
		}
	}
	showOrHideInd(false);
}


function showOrHideInd(o)
{
	var t = $$('ajaxIndBox');
	
	if (t)
	{ 
		if(o)
		{
			t.style.display = 'block'
			popup_div_kozepre('ajaxIndBox'); 
		}
		else
		{
			t.style.display = 'none';
		}
	}
}


/*

 */
function AjaxInit( mod ) {	
	module = mod;
}

/*

 */
function sndReq(action) {
//	if (window.console) {
//		console.log('/rpc-' + action);
//	}
	
	
	showOrHideInd(true);
	  
	if (http_busy)
	{
		alert('Kérem várjon!');
		return false;
	}

	try
	{
		http_busy = true;
		ExecAjaxCmd('/rpc-' + action);
	}
	catch (e)
	{
		if(e == 'ReferenceError: processXMLDocDocument is not defined')
		{
			// BUGFIX #1627
			// Ha kattint a user, mint az őrült, akkor se írjunk hibát
			// Egyéb hibánál mehet az üzenet
			alert('Kérem várjon!');
		}
		else
		{
			alert('Hiba: ' + e);
		}
	}
}

/*
 
 */
function postReq(oForm) 
{
	showOrHideInd(true);

	if (!http) {
		http = createRequestObject();
	}

	if (http_busy)
	{
		alert('Kérem várjon!');
		return false;
	}

	try
	{
	    var sBody = getRequestBody(oForm);
	
	    http.open('post', '/rpc.php');
	    http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf8');
	    http.onreadystatechange = handlePostResponse;
	    http.send(sBody);
	    http_busy = true;
	}
	catch (e)
	{
		alert('Hiba: ' + e);
	}
} //function


function postReqById(id)
{
	var o = $$(id);
	
	if (o)
	{
		postReq(o);
	}
	else
	{
		alert('Nem találom a(z) ' + id + ' űrlapot!');
	}
}


/*

 */
function handlePostResponse() {
	if(http.readyState == 4)
	{
		processXMLDocDocument(http.responseXML);
	}
}

/*

 */
function getRequestBody(oForm) {
    var aParams = new Array();

    for (var i=0 ; i < oForm.elements.length; i++) {
    	if (((oForm.elements[i].type == 'radio') || (oForm.elements[i].type == 'checkbox')) && oForm.elements[i].checked == false) 
    		continue;
    		
    	
    	
        aParams.push(
        	encodeURIComponent(oForm.elements[i].name) +'='+ 
        	encodeURIComponent(oForm.elements[i].value)
        );
    }

    return aParams.join("&");
}


function $$(id)
{
	return document.getElementById(id);
}




//"Popup-div"
function popup_div_kozepre(objid, obj2id)
{
	var y;
	var obj = $$(objid);
	var off = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;
	//y = off;
	//y += document.body.clientHeight/2;
	//y -= obj.offsetHeight/2;
	
	//obj.style.display = '';
	if(obj2id && window.ActiveXObject)
	{
		obj2 = $$(obj2id);
		var pos = getAbsPos(obj2);
		//y = obj2.pageYOffsetTop + obj2.offsetHeight;
		//alert(pos.y);
		y = pos.y;
		obj.style.left = pos.x+"px";
	}
	else if(obj2id)
	{
		obj2 = $$(obj2id);
		y = obj2.offsetTop + obj2.offsetHeight;
		obj.style.left = obj2.offsetLeft+"px";
	}
	else if (window.ActiveXObject)
	{
		y = off+(document.documentElement.clientHeight/2);
		//y = (off + document.body.clientHeight/2) - obj.offsetHeight/2;
	}
	else
	{
		y = (off + window.innerHeight/2) - obj.offsetHeight/2 -20;
	}
	//alert(document.documentElement.clientHeight);
	//alert(obj.offsetHeight);
	//obj.style.display = 'block';
	obj.style.top = y+"px";
	//alert(off + " + " + window.innerHeight + " = " + y);
}

function popup_div_close(objid)
{
	$$(objid).style.display = "none";
}






var ajax = new function ajaxCtor()
{
	this._ro = null; 

	var ro;
	var browser = navigator.appName;
	
	if(browser == "Microsoft Internet Explorer"){
		this._ro = new ActiveXObject("Microsoft.XMLHTTP");
	}else{
		this._ro = new XMLHttpRequest();
	}			
	
	
	
	
	this._loadXML = function(url)
	{
		var mozilla = (typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined'); 
		var ie = (typeof window.ActiveXObject != 'undefined');
		if(mozilla)
		{
			this.xmlDoc = document.implementation.createDocument("", "", null);
			this.xmlDoc.strictErrorChecking = false;
			this.xmlDoc.async = false;
			this.fail = false;
		}
		else if(ie)
		{
			this.xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
			this.xmlDoc.async = false; 
			while(this.xmlDoc.readyState != 4) {};
			this.fail = false;
		}
		else
		{
			this.xmlDoc = '';
			this.fail = true;
		}
	
		if(this.fail != true)
		{
			try
			{
				// Minden egyeb (IE6-7,FX,O,stb.)
				if (ie || this.xmlDoc.load)
				{			
					this.xmlDoc.load(url);
				}
				// Webkites vackok (Safari, Google Chrome..)
				else
				{
					var xmlhttp = new window.XMLHttpRequest();
					xmlhttp.open("GET",url,false);
					xmlhttp.send(null);
					this.xmlDoc = xmlhttp.responseXML.documentElement;
					this.fail = false;
				}
			}
			catch(e)
			{
				this.fail = true;
	
				alert(e.name+"\n\n"+e.message);
			}
		}
	} // loadXML
	




	this._execAjaxCmd = function(url)
	{
		var xml = new this._loadXML(url);
	
		if(xml.fail == true) {
			alert('ExecAjaxCmd Hiba! ('+url+')');
		} else {			
			this.processXMLDocDocument(xml.xmlDoc);		
		}
		return true;
	} // _execAjaxCmd	
	
	
	
	
	this.processXMLDocDocument = function(xmlDoc)
	{
		this._set_http_busy(false);

		x = xmlDoc.getElementsByTagName('item');
		if(x.length != 0) {	
			var k, v, o, t, z;
			
			for(var i = 0; i < x.length; i++) {
				try {
					k = x[i].getElementsByTagName('k')[0].firstChild.nodeValue;
				} catch(e) {
					alert(e);
				}
				
				try {
					v = x[i].getElementsByTagName('v');
				} catch(e) {
					v = null;
					alert('vPerr:' + e);
				}
				
				if (v != null) {
					t = '';
					for (var j = 0; j < v.length; j++) {
						try {
							if (v[j].firstChild)
							{
								z = v[j].firstChild.nodeValue;
							}
						} catch (e) {
							z = '';
						}
						t += z;
					}
					v = t;
				}
				else
				{
					v = null;
				}
				
				if (k == 'overlayForeground')
				{
					k += overlay.getNum();
				}
				
				if (k == '!JS') {
					try {
						eval(v);
					} catch(e) {
						alert('Hiba a kiszolgálótól érkezett válasz értelmezése során!');
					}
				} else if (k == '!ERR') {
					alert('A kérés végrehajtása közben a következő hiba lépett fel:\n\n:' + v);
				} else if (o = $$(k)) {
					o.innerHTML = v;
				} else {
					alert('ExecAjaxCmd Hiba, ID nem található! (' + k + ')');
				}
			}
		}

	} // processXMLDocDocument
	
	
	this._set_http_busy = function(status)
	{
		this._http_busy = status;
		
		var o = $$('ajax_indicator_wrapper');
		
		if (o)
		{
			o.style.display = (status)
				? '' : 'none';
			
			if (status)
			{
				this._setIndicatorPosition();
			}
		}	
	}
	
	this._http_busy = false;
	
	
	
	
	 // handlePostResponse
	
	
	
	this.sndReq = function (action) 
	{
		action = (action.substring(0,4) == 'obj$')
			? '/' + action
			: '/rpc$' + action;
	
	
		if (window.console) {
			console.log(action);
		}
		
		
		
		if (this._http_busy)
		{
			alert('Kérem várjon!');
			return false;
		}
		
		try
		{		
			this._set_http_busy(true);
			this._execAjaxCmd(action);
		}
		catch (e)
		{
			alert('Hiba: ' + e);
		}
	} // sndReq
	
	
	
	
	
	this.postReq = function(oForm) 
	{		
		if (this._http_busy)
		{
			alert('Kérjem várjon!');
			return false;
		}
		
		if (oForm.enctype == 'multipart/form-data')
		{
			this._postReqFile(oForm);
		}
		else
		{
			this._postReqStandard(oForm);
		}
	} // postReq
	
	
	
	this._postReqStandard = function(oForm) 
	{

		// Ez a manager.js fájlban fájlban lehet. (CKEditor miatt kell.)
//		try
//		{
//			managerHandler.beforeSubmit();
//		}
//		catch (e)
//		{
//			if (window.console) {
//				console.log('A manager.js fájl nincs betöltve!');
//			}
//		}

		try
		{
		    var sBody = this._getRequestBody(oForm);
		
		    this._ro.open('post', '/rpc.php');
		    this._ro.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf8');
		    this._ro.onreadystatechange = function () {
		    	if (this.readyState == 4) {		
		    		ajax.processXMLDocDocument(this.responseXML);
		    	}
		    }
		    this._ro.send(sBody);
		    this._set_http_busy(true);
		}
		catch (e)
		{
			alert('Hiba: ' + e);
		}		   
	}
	
	
	
	this._postReqFile = function(oForm)
	{
		var trgt = this._initializeFileUploadTarget();
		
		oForm.target = '___ajaxFileUploadTarget';
		
		trgt.onload = function(){
			ajax.processFileUploadTargetResult();
		};
	}
	
	
	
	this._initializeFileUploadTarget = function()
	{
		var o = $$('___ajaxFileUploadTarget');
		
		if (!o)
		{
			var target = document.createElement('iframe');
			//target.setAttribute('style', 'height: 500px; width: 100%;');
			target.setAttribute('style', 'display: none;');
			target.setAttribute('id', '___ajaxFileUploadTarget');			
			target.setAttribute('name', '___ajaxFileUploadTarget');			
			document.body.appendChild(target);
			
			return target;
		}
		else
		{
			return o;
		}
	}
	
	
	this._destroyFileUploadTarget = function()
	{
		var o = $$('___ajaxFileUploadTarget');
		
		if (o)
		{
			document.getElementById('___ajaxFileUploadTarget');
		}		
	}
	
	
	this.processFileUploadTargetResult = function()
	{
		var o = $$('___ajaxFileUploadTarget');
		
		if (o)
		{
			this.processXMLDocDocument(o.contentDocument);
			this._destroyFileUploadTarget();
		}	
		else
		{
			// TODO: Hibakezeles
		}
	}
	
	
	
	this.postReqById = function (id)
	{
		var o = $$(id);
		
		if (o) 	{
			this.postReq(o);
		} else  {
			alert('Nem találom a(z) ' + id + ' űrlapot!');
		}
	} // postReqById
	
	
	
	
	
	
	
	this._getRequestBody = function (oForm) {
	    var aParams = new Array();
	
	    for (var i=0 ; i < oForm.elements.length; i++) {
	    	if (((oForm.elements[i].type == 'radio') || (oForm.elements[i].type == 'checkbox')) && oForm.elements[i].checked == false) 
	    		continue;
	    	
	        aParams.push(
	        	encodeURIComponent(oForm.elements[i].name) +'='+ 
	        	encodeURIComponent(oForm.elements[i].value)
	        );
	    }
	
	    return aParams.join("&");
	} // _getRequestBody
		
	
	this._setIndicatorPosition = function() 
	{	
		this._placeObjectInCenter('ajax_indicator');
		this._placeObjectInCenter('ajax_indicator_text');
	}
		
	this._placeObjectInCenter = function(o) 
	{
		var obj = $$(o);
	
		var x;
		var y;		
			
		if (!obj)
		{
			return;
		}
		
		var offy = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;
		var offx = window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft;

		if (window.ActiveXObject)
		{
			y = offy+(document.documentElement.clientHeight/2);
			x = offx+(document.documentElement.clientWidth/2);
		}
		else
		{
			y = (offy + window.innerHeight/2) - obj.offsetHeight/2;
			x = (offx + window.innerWidth/2) - obj.offsetWidth/2;
		}

		obj.style.top = Math.round(y)+"px";
		obj.style.left = Math.round(x)+"px";		
	}
	
	
	return this;
}







