// Inicializacio
Namespace.Register("ponte.ajaxdata");
Namespace.Register("ponte.ajaxdata.Service");

// Config

ponte.ajaxdata.servletPath = "http://" + location.href.split("/")[2]+"/ajaxdata";

/**
 * Ebbe a service-be kell beregisztralni az ajax-es adat lekeroket.
 * A beregisztralt portletek az oldal betolteset kovetoen lesznek feldolgozva:
 * 	-	ajax hivas a portlet adatok lekeresere
 * 	-	a beregisztralt fuggveny meghivasa az adatok feldolgozasara
 * 
 * 
 * @version 1.0
 * @author Bandesz 
*/
ponte.ajaxdata.Service = 
{
	// DataObj-teket tarolo tomb
	portletList : new Array(),
	portlets : new Object(),
	queryParams : null,
	
	/**	@argument {ponte.ajaxdata.DataObj} data_obj	-	Uj portlet beregisztralasa */
	registerPortlet : function(data_obj)
	{
		this.portletList.push(data_obj);
		this.portlets[data_obj.portletID] = data_obj;
	},	
	
	/**	A page betoltodesekor meghivodo fuggveny */
	onPageLoad : function()
	{
		for(var i = 0; i < ponte.ajaxdata.Service.portletList.length; i ++)
		{
			try
			{
				ponte.ajaxdata.Service.portletList[i].generateData();
			}catch(e)
			{
				//alert("AJAXDATA ERRROR::ponte.ajaxdata.Service.onPageLoad" + " PortletID=" + ponte.ajaxdata.Service.portletList[i].portletID);
			}
		}
		ponte.Classes.PortletRefresher.addNullPortlet();
	},
	
	/**
	 * Visszaadja a page query parametereit, mindig olyan formatumban, hogy ujabb qery param legyen utana fuzheto.
	 * @return {String} - paramok string formatumba
	 */
	getQueryParams : function()
	{
		if(this.queryParams == null)
		{
			var windowLocation = window.location.href;
			if(windowLocation.indexOf('#') > -1) windowLocation = windowLocation.split('#')[0];
			this.queryParams = windowLocation.split("?");
			this.queryParams = (this.queryParams.length > 1) ? "?" + this.queryParams[1] + "&" : "?";
		}
		return this.queryParams;
	}
}

/**
 * A beregisztralt adatok tarolasara szolgalo objektum.
 * @argument {int} portlet_id	-	portlet azonosito
 * @argument {function} fill_function	-	a portlet HTML-jet kitolto fuggveny
 * 
 * @return	-	A letrehozott objektumot adja vissza
 * 
 * 
 * @version 1.0
 * @author Bandesz 
 */
ponte.ajaxdata.DataObj = function(portlet_id, fill_function)
{
	return{
		portletID : portlet_id,
		portletNode : document.getElementById(portlet_id),
		fillFunction : fill_function,
		_request : new ponte.Services.AjaxService.HttpRequest(),
		
		/**	A portlet adatainak lekerese, es a tartalom kiirasa
		 * @argument obj - csak ha frissiteskori visszahivas van kell megadni (sajat object)!	
		 * */
		generateData : function(obj)
		{		
			if(obj != null)
				t = obj;
			else
				t = this;
			t.fillFunction = eval(t.fillFunction);
			// egy kis trukkozes, mivel a readyEvent az ajax eventje, ezert nemfog latszodni ez az objektum, sem annak valtozoi
			// ezert egy uj valtozot definialunk neki, utolag
			t._request.DataObj = t;
			//console.log("AjaxDataService::generateData() {sending ajax request to server} portletID=" + t.portletID);
			
			t._request.init(ponte.ajaxdata.servletPath + ponte.ajaxdata.Service.getQueryParams() + "pid=" + t.portletID, t.onReadyEvent, t.onErrorEvent, "GET", "");
			t._request.makeRequest();
		},
		
		/**	
		 * Az ajax valasz megerkezesekor meghivodo esemeny
		 * 
		 * @argument {ponte.Services.AjaxService.HttpRequest}	-	Az adatot tartalmaza request objektum.	
		 * */
		onReadyEvent : function (httpRequestObj)
		{
			try
			{
				if(httpRequestObj.status == 200 && httpRequestObj.responseText != '' && httpRequestObj.responseXML != null && httpRequestObj.responseXML.getElementsByTagName('tbody').length > 0) 
				{
					//console.log("AjaxDataService::onReadyEvent() {ajax response arrived} portletID=" + this.DataObj.portletNode.id);
					this.DataObj.fillFunction(this.DataObj.portletNode, httpRequestObj.responseXML);
					// tablak ujrarendezese
					sortId = this.DataObj.portletNode.id + "sort";
					this.DataObj.portletNode.offsetParent.setAttribute("id", sortId);
					ponte.Classes.TableSorter.refreshCallback(sortId);
				}
				if(document.getElementById('refreshButton').className.indexOf('disabled') == -1)
				{
					interval = parseInt(httpRequestObj.responseXML.getElementsByTagName("root")[0].attributes[0].nodeValue);
					if(interval < 60000) interval = 60000;
					setTimeout(copyFunction(this.DataObj.generateData, this.DataObj), interval);
				}
					
			}
			catch(e)
			{
				
			}
		},
		
		/**	Hiba eseten meghivodo esemeny	*/
		onErrorEvent : function (portletNode, httpRequestObj)
		{
			//alert("ERROR van.");
		}
	}
}

addLoadEvent(ponte.ajaxdata.Service.onPageLoad);

