/**
*/


/*@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
*/

portal.Classes.PortletRefresher=
{
    //  Tomb amiben a PortletRefresher objektumokat taroljuk
    portlets : new Array(),
	nonRefreshable : new Object(),
	_refreshing : true,
	_navigationBoxesToDisplay : new Array(),
	
    addPortlet : function(portletParams)
    {
        portlet_id=portletParams.split("_")[0];
        portlet_refreshInt=portletParams.split("_")[1];
        if(this.getRefresherById(portlet_id)==null)
        {
            this.portlets.push(
            new portal.Classes.PortletRefresher.Refresher(portlet_id, portlet_refreshInt));
        }
    }
    ,
    startRefreshing : function()
    {
        for (k=0; k<this.portlets.length; k++) {
			if(this.nonRefreshable[this.portlets[k]._id]==null)
				this.portlets[k].Start();
			else
				this.portlets[k].StartWithoutAutoRefresh(this.nonRefreshable[this.portlets[k]._id]);
		}
    },
    turnRefresh : function()
    {
    	this._refreshing=!this._refreshing;
    	if(!this._refreshing)
    	{
	        for (k=0; k<this.portlets.length; k++) {
				if(this.nonRefreshable[this.portlets[k]._id]==null)
					this.portlets[k].Stop();
			}
    	}
    	else
    	{
    		for (k=0; k<this.portlets.length; k++) {
				if(this.nonRefreshable[this.portlets[k]._id]==null)
					this.portlets[k].Start();
			}
    	}
    },
    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, buttonIds)
	{
		btns=new Array();
		for(a=1; a<arguments.length; a++)
			btns.push(arguments[a]);
		this.nonRefreshable[portletID]=btns;
	},
	// Ajax lapozás
	// Az itt beállított navigációs sávok a script lefutása után lesznek csak láthatóak
	// Azért kell, mert egyébként a script teljes lefutása elott a lapozásra kattintva " $URLPREFIX$/# " oldalt hozná be
	addNavigationBoxDisplayEvent : function (portletID)
	{
		var _portletRefresher = this.getRefresherById(portletID);
		if(_portletRefresher != null) {
			_portletRefresher.setNavigationBox('NavigationBox_' + portletID);
		}
	}
}

/**  PortletRefresherObjektum
Megadott idonkent AJAX keressel frissiti a megadott ID-ju porteltet

@portlet_id -   portlet node id-ja
@portlet_refreshInt -   frissitesi gyakorisag
*/
portal.Classes.PortletRefresher.Refresher = function(portlet_id, portlet_refreshInt)
{
    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
        _intervalHandler : null,                    //  
        _portletNode : null,                        //  frissitendo NODE
        _enabled : true,                            //  frissites kikapcsolasa
        _buttons : new Array(),
		_buttonIDs : null,
		_navigationBox : null,						// lapozásnál a lapozó sáv
		
        getRefreshInterval : function ()
        {
            return this._refreshInt;
        },
        
        setRefreshInterval : function(interval)
        {
            this._refreshInt=interval;
        },
        
        Stop : function ()
        {
            clearInterval(this._intervalHandler);
        },
        
        Start : function()
        {
            // timeout-al csinalja, mert igy 
            this._intervalHandler=setTimeout(this.Refresh, this._refreshInt, this);
            this._portletNode=document.getElementById(this._id).parentNode;
        },
		
		SetButtonEvent : function()
		{
			function copyFunction(func, arg, arg2){
                return function(){
                    func(arg, arg2);
                    return false;
                }
            }
			function refreshEvent(obj, id)
			{
				obj.RefreshNow(obj, id);
			}
			for(b=0; b<this._buttons.length; b++)
			{
				this._buttons[b].onclick=copyFunction(refreshEvent,this, b);
			}
			if(this._navigationBox != null) {
				var _myNaviBox = document.getElementById(this._navigationBox);
				if(_myNaviBox != null) {
					_myNaviBox.style.display = '';
				}
			}
		},
		
		// automatikus frissites leallitasa
		StartWithoutAutoRefresh : function(buttonIds)
		{
			this._portletNode=document.getElementById(this._id).parentNode;
			this._buttonIDs=buttonIds;
			
			for(b=0; b<this._buttonIDs.length; b++)
			{
				btn=document.getElementById(this._buttonIDs[b]);
				if(btn!=null)
				this._buttons.push(btn);
			}
			this.SetButtonEvent();
		},
		
		// portlet azonnali frissitese, tortli az intervalt
        RefreshNow : function(obj, 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 portal.Classes.PortletRefresher.callbacks)
                    		portal.Classes.PortletRefresher.callbacks[c](obj._id);
                    }catch(e){}
					// gomb esemeny tarsitasa
					obj._buttons=new Array();
					for(b=0; b<obj._buttonIDs.length; b++)
					{
						btn=document.getElementById(obj._buttonIDs[b]);
						if(btn!=null)
							obj._buttons.push(btn);
					}
					obj.SetButtonEvent();
                }
            }
            function errorHandler(e)
            {
            }
            //obj._portletNode.style.border="1px solid red";
	    
	    req_url=window.location.href;
	    req_url=req_url.split("?")[0];
		req_url=req_url.split("#")[0];
	    
	    // opcionalis parameterek hozzafuzese
            req_url+="?portletid="+obj._portlet_id;
        params=obj._buttons[id].getElementsByTagName("INPUT");
        for(p=0; p<params.length; p++)
        {
        	req_url+="&"+params[p].name+"="+params[p].value;
        }
        
            req=portal.Services.AjaxService.createRequest(req_url, onReady, errorHandler, 'GET', null);
            req.makeRequest();
		},
		
        Refresh : 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 portal.Classes.PortletRefresher.callbacks)
                    		portal.Classes.PortletRefresher.callbacks[c](obj._id);
                    }catch(e){}
                }
            }
            function errorHandler(e)
            {
            }
            //obj._portletNode.style.border="1px solid red";
	    
	    req_url=window.location.href;
	    req_url=req_url.split("?")[0];
		req_url=req_url.split("#")[0];
	    
            req_url+="?portletid="+obj._portlet_id;
            req=portal.Services.AjaxService.createRequest(req_url, onReady, errorHandler, 'GET', null);
            req.makeRequest();
            
            obj._intervalHandler=setTimeout(obj.Refresh, obj._refreshInt, obj);
        },
		
		setNavigationBox : function(naviBoxID) {
			this._navigationBox = naviBoxID;
		}
    };
}

/**
 * Az ajax keres valaszanak beerkezesekor meghivja ezeket a fuggvenyeket
 * A frissitett tabla ID-val hivja meg oket !!
 */
portal.Classes.PortletRefresher.callbacks = new Array();
portal.Classes.PortletRefresher.addReadyCallback = function(func)
{
	portal.Classes.PortletRefresher.callbacks.push(func);
}


//	load fuggveny
portal.Classes.PortletRefresher.loadEvent=function()
{
    portal.Classes.PortletRefresher.startRefreshing();
}

addLoadEvent(portal.Classes.PortletRefresher.loadEvent);