/**
*/


/*@cc_on
(function(f){
 window.setTimeout =f(window.setTimeout);
 window.setInterval =f(window.setInterval);
})(
	function(f)
	{
		return function(c,t)
		{
			
			var a=[].slice.call(arguments,2);
			return f(function()
			{
				if(c.apply)
				{
				c.apply(this,a)
				}
				else
					eval(c);
			},
			t)
		}
	}
);
@*/
/**  Statikus fuggveny, portletek hozzadasahoz
  ez hozza letre a PortletRefresher objektumokat
  
@portletParams  -   portletID_refreshInterval
*/

ponte.Classes.PortletRefresher=
{
    //  Tomb amiben a PortletRefresher objektumokat taroljuk
    portlets : new Array()
    ,
	portlet_num : 0,
	nonRefreshable : new Object(),
	_refreshing : false,
	
    addPortlet : function(portletParams, refreshOnLoad)
    {
        portlet_id=portletParams.split("_")[0];
        portlet_refreshInt=portletParams.split("_")[1];
        if(document.getElementById(portletParams) != null)
        {
	        // TODO kiszedni
	        //portlet_refreshInt = 60;
	        
	        if(refreshOnLoad != null)
	        	refreshOnLoad=refreshOnLoad;
	        else
	        	refreshOnLoad=false;
	        	
	        if(this.getRefresherById(portlet_id)==null)
	        {
	            this.portlets.push(
	            new ponte.Classes.PortletRefresher.Refresher(portlet_id, portlet_refreshInt, refreshOnLoad));
	        }
	        // console.log("PORTLET REFRESHER {new portlet added}::addPortlet() protlet_id=" + portlet_id + " class=" + document.getElementById(portletParams).className + " interval=" + portlet_refreshInt + "sec");
        }
    }
    ,
    // hogy mindig
    addNullPortlet : function()
    {
    	this.portlets.push(null);
    },
    
    startRefreshing : function()
    {
		nonrefresh_cnt = 0;
        for (k=0; k<this.portlets.length; k++) 
        {
        	if(this.portlets[k] != null)
        	{
				if(this.nonRefreshable[this.portlets[k]._id]==null)
				{
					//this.portlets[k].Start();
				}
				else
				{
					this.portlets[k].StartWithoutAutoRefresh(this.nonRefreshable[this.portlets[k]._id]);
					nonrefresh_cnt++;
				}
        	}
		}
		portlet_num = this.portlets.length - nonrefresh_cnt;
		_btn = document.getElementById("refreshButton");
		switchRefreshMode(_btn);
    },
    turnRefresh : function()
    {
    	this._refreshing=!this._refreshing;
    	if(!this._refreshing)
    	{
	        for (k=0; k<this.portlets.length; k++) {
	        	if(this.portlets[k] != null)
	        	{
					if(this.nonRefreshable[this.portlets[k]._id]==null)
					{
						if(this.portlets[k] != null)
							this.portlets[k].Stop();
					}
	        	}
			}
    	}
    	else
    	{
    		for (k=0; k<this.portlets.length; k++) {
    			if(this.portlets[k] != null)
    			{
					if(this.nonRefreshable[this.portlets[k]._id]==null)
					{
						if(this.portlets[k] != null)
							this.portlets[k].Start();
					}
    			}
			}
    	}
		//_btn = document.getElementById("refreshButton");
		//switchRefreshMode(_btn);
    },
    getRefresherById : function(ID)
    {
         for (k=0; k<this.portlets.length; k++) 
        {
            if(this.portlets[k]._portlet_id==ID)
            {
                return this.portlets[k];
            }
        }
    },
	addNonRefreshablePortlet : function (portletID, buttonNode)
	{
		this.nonRefreshable[portletID]=buttonNode;
	},
	getPortletNumber : function()
	{
		return portlet_num;
	}
}

/**  PortletRefresherObjektum
Megadott idonkent AJAX keressel frissiti a megadott ID-ju porteltet

@portlet_id -   portlet node id-ja
@portlet_refreshInt -   frissitesi gyakorisag
*/
ponte.Classes.PortletRefresher.Refresher = function(portlet_id, portlet_refreshInt, refreshOnLoad)
{
    return{
        _portlet_id : portlet_id,                   //  portlet id-ja, az elso frissites után már ez lesz
        _id : portlet_id+"_"+portlet_refreshInt,    //  portletet tartalmazo node id-ja
        _refreshInt : portlet_refreshInt,           //  frissites gyakorisaga ms-ben megadva
        _refreshOnLoad : refreshOnLoad,
        _intervalHandler : null,                    //  
        _portletNode : null,                        //  frissitendo NODE
        _enabled : true,                            //  frissites kikapcsolasa
        _button : null,
		_buttonID : null,
		
        getRefreshInterval : function ()
        {
            return this._refreshInt;
        },
        
        setRefreshInterval : function(interval)
        {
            this._refreshInt=interval;
        },
        
        Stop : function ()
        {
            clearInterval(this._intervalHandler);
        },
        
        Start : function()
        {
            // timeout-al csinalja, mert igy 
			if(this._refreshInt < 60)
				this._refreshInt = 60;
			
			this._portletNode=document.getElementById(this._id).parentNode;
			// azonnali frissites
			if(this._refreshOnLoad!=false)
            	this.RefreshNow(this)	
				
            //this._intervalHandler=setTimeout(this.Refresh, this._refreshInt * 10000, this);            
            this._intervalHandler=setTimeout(this.Refresh, 30000, this);
        },
		
		SetButtonEvent : function()
		{
			function copyFunction(func, arg){
                return function(){
                    func(arg);
                    return false;
                }
            }
			function refreshEvent(obj)
			{
				obj.RefreshNow(obj);
			}
			this._button.onclick=copyFunction(refreshEvent,this);
		},
		
		// automatikus frissites leallitasa
		StartWithoutAutoRefresh : function(buttonNode)
		{
			this._portletNode=document.getElementById(this._id).parentNode;
			this._button=buttonNode;
			this._buttonID=this._button.id;
			this.SetButtonEvent();
		},
		
		// portlet azonnali frissitese, tortli az intervalt
        RefreshNow : function(obj)
		{
			function onReady(resp)
            {   
                //obj._portletNode.style.border="none";
                portlet_html=resp.responseText;
                if(portlet_html.length > 37)
                {
                    //  a kezdo es zaro tr td tagek eltavolitasa
                    portlet_html=portlet_html.substr(portlet_html.indexOf("<table"),portlet_html.lastIndexOf("</table>")+8);
                    obj._portletNode.innerHTML=portlet_html;
                    //	callback fuggvenyek meghivasa
                    try
                    {
                    	for(c in ponte.Classes.PortletRefresher.callbacks)
                    		ponte.Classes.PortletRefresher.callbacks[c](obj._id);
                    }catch(e){}
					// gomb esemeny tarsitasa
					if(obj._button != null)
					{
						obj._button=document.getElementById(obj._buttonID);
						obj.SetButtonEvent();
					}
                }
            }
            function errorHandler(e)
            {
            }
            
         	table = obj._portletNode.getElementsByTagName("table");
         	table = ( table.length > 1) ? table[1] : null;
            
            if(table != null)
            {
	         	if(table.id.indexOf('AJ') > -1)
	         	{
	         		ponte.ajaxdata.Service.portlets[table.id].generateData();
	         	}
            }
	    	else
	    	{
			    req_url=window.location.href;
				if(req_url.indexOf('#') > -1) req_url = req_url.split('#')[0];
			    req_url=req_url.split("?")[0] + '?';
			    req_url+="portletid="+obj._portlet_id;
			    // ha van hozzafuzi
			    if(obj._refreshOnLoad!=false)
		    		req_url += '&' + obj._refreshOnLoad;
		    		
	            req=ponte.Services.AjaxService.createRequest(req_url, onReady, errorHandler, 'GET', null);
	            req.makeRequest();
	    	}
		},
		
        Refresh : function(obj)
        {
        	//console.log("PORTLET REFRESHER {refresh started}::Refresh() protlet_id=" + obj.portlet_id);
        	
            function onReady(resp)
            {   
                //obj._portletNode.style.border="none";
                portlet_html=resp.responseText;
                if(portlet_html.length > 37)
                {
                    //  a kezdo es zaro tr td tagek eltavolitasa
					portlet_html=portlet_html.substr(portlet_html.indexOf("<table"),portlet_html.lastIndexOf("</table>")+8);
                    obj._portletNode.innerHTML=portlet_html;
                    //	callback fuggvenyek meghivasa
                    try
                    {
                    	for(c in ponte.Classes.PortletRefresher.callbacks)
                    		ponte.Classes.PortletRefresher.callbacks[c](obj._id);
                    }catch(e){}
                }
            }
            function errorHandler(e)
            {
            }
            
            table = obj._portletNode.getElementsByTagName("table");
            table = ( table.length > 1) ? table[1] : null;
            
            if(table != null)
            {
	         	if(table.id.indexOf('AJ') > -1)
	         	{
	         	//	console.log("PORTLET REFRESHER {ajax refresh}::Refresh() protlet_id=" + table.id);
	         		ponte.ajaxdata.Service.portlets[table.id].generateData();
	         	}
            }
	    	else
	    	{
		    	req_url=window.location.href;
				if(req_url.indexOf('#') > -1) req_url = req_url.split('#')[0];
		    	req_url=req_url.split("?")[0] + '?';
		    	req_url+="portletid="+obj._portlet_id;
		    	
		    	// ha van hozzafuzi
			    if(obj._refreshOnLoad!=false)
		    		req_url += '&' + obj._refreshOnLoad;
		    
	            req=ponte.Services.AjaxService.createRequest(req_url, onReady, errorHandler, 'GET', null);
	            req.makeRequest();
	    	}
            obj._intervalHandler=setTimeout(obj.Refresh, obj._refreshInt*1000, obj);
        }
    };
}

/**
 * Az ajax keres valaszanak beerkezesekor meghivja ezeket a fuggvenyeket
 * A frissitett tabla ID-val hivja meg oket !!
 */
ponte.Classes.PortletRefresher.callbacks = new Array();
ponte.Classes.PortletRefresher.addReadyCallback = function(func)
{
	ponte.Classes.PortletRefresher.callbacks.push(func);
}


//	load fuggveny
ponte.Classes.PortletRefresher.loadEvent=function()
{
    ponte.Classes.PortletRefresher.startRefreshing();
}

addLoadEvent(ponte.Classes.PortletRefresher.loadEvent);
