/*
 * MappaTo JavaScript Library v1.0.0
 * http://www.comune.torino.it/
 * Copyright (c) 2009 Comune di Torino
 * Module licensed under GNU Affero GPL licenses.
 * http://www.gnu.org/licenses/agpl.html
 * Date: 2009
 */
function CallDispatcher()
{
	this.calls = null;
	this.iterCalls = null;
	this.runLang = function(urlString,f,params)
	{
		//objLibs.printMsgBox("***********************");
		//objLibs.printMsgBox("CallDispatcher.runLang");
		objLang.containerLang.style.background = objLabels.colorReloadWaitGrey;
		if(objLibs.isObj(objAjaxModule))
			objAjaxModule.reloadLang(urlString,f,params);
		if(objCallDispatcher.calls == null)
		{
			/*if(objLibs.isObj(objLoaderWait))
				objLoaderWait.startReload();*/
			var i = 0;
			objCallDispatcher.calls = new Array();
			objContexts.containerContexts.style.background = objLabels.colorReloadWaitGrey;
			objCallDispatcher.calls[i++] = new Array("objContexts","reload","");
			objAzioni.containerAzioni.style.background = objLabels.colorReloadWait;
			objCallDispatcher.calls[i++] = new Array("objAzioni","reload","");
			objCallDispatcher.calls[i++] = new Array("objCanali","reloadAll","");
			objCallDispatcher.calls[i++] = null;
			objCallDispatcher.iterCalls = 0;
			//objLibs.printMsgBox("objCallDispatcher.iterCalls");
		}
	};
	this.runIconize = function(urlString,f,params)
	{
		//objLibs.printMsgBox("***********************");
		//objLibs.printMsgBox("CallDispatcher.runIconize start");
		if(objLibs.isObj(objAjaxModule))
			objAjaxModule.reloadIconize(urlString,f,params);
		if(objCallDispatcher.calls == null)
		{
			/*if(objLibs.isObj(objLoaderWait))
				objLoaderWait.startReload();*/
			var i = 0;
			objCallDispatcher.calls = new Array();
			objCallDispatcher.calls[i++] = null;
			objCallDispatcher.iterCalls = 0;
		}
		//objLibs.printMsgBox("CallDispatcher.runIconize end");
	};
	this.runCanali = function(urlString,f,params)
	{
		//objLibs.printMsgBox("***********************");
		//objLibs.printMsgBox("CallDispatcher.runCanali");
		if(objLibs.isObj(objAjaxModule))
			objAjaxModule.reloadCanali(urlString,f,params);
		if(objCallDispatcher.calls == null)
		{
			/*if(objLibs.isObj(objLoaderWait))
				objLoaderWait.startReload();*/
			objCallDispatcher.calls = new Array();
			//objLinks.containerLinks.style.background = objLabels.colorReloadWait;
			//objLibs.printMsgBox(urlString);
			var i = 0;
			//objCallDispatcher.calls[i++] = new Array("objAjaxModule","reloadToolbarProgetti", "'"+urlString+"', objToolbarProgetti.reload_, null");
			//objLibs.printMsgBox("CallDispatcher.reloadToolbarProgetti");
			//objCallDispatcher.calls[i++] = new Array("objAjaxModule","reloadLink", "'"+urlString+"', objLinks.reload_, null");
			objDiario.containerDiario.style.background = objLabels.colorReloadWait;
			objCallDispatcher.calls[i++] = new Array("objDiario","reload","");
			objCalendar.containerCalendar.style.background = objLabels.colorReloadWaitGrey;
			objCallDispatcher.calls[i++] = new Array("objCalendar","reload","null, document.getElementById(\"reload_link\")");
			objCallDispatcher.calls[i++] = null;
			objCallDispatcher.iterCalls = 0;
		}
	};
	this.runAllCanali = function(arrLink,f,params)
	{
		//objLibs.printMsgBox("***********************");
		//objLibs.printMsgBox("CallDispatcher.runAllCanali");
		if(objLibs.isObj(objAjaxModule))
		{
			if(objLibs.isObj(arrLink[0]))
			{
				objAjaxModule.reloadCanali(arrLink[0].href,f,params);
			}
		}
		if(objCallDispatcher.calls == null)
		{
			var i = 0;
			objCallDispatcher.calls = new Array();

			/*if(objLibs.isObj(objLoaderWait))
				objLoaderWait.startReload();*/

			objCallDispatcher.calls[i++] = new Array("objAjaxModule","reloadLink","'"+arrLink[0].href+"',objLinks.reload_,"+((params==null)?"null":""));
			objCallDispatcher.calls[i++] = new Array("objAjaxModule","reloadToolbarProgetti","'"+arrLink[0].href+"',objToolbarProgetti.reload_,"+((params==null)?"null":""));
			
			//objLibs.printMsgBox("CallDispatcher.arrLink.length: "+arrLink.length);
			for(var k = 1; k < arrLink.length; k++)
			{
				objCallDispatcher.calls[i++] = new Array("objAjaxModule","reloadCanali","'"+arrLink[k].href+"',objCanali.reload_,"+((params==null)?"null":""));
				objCallDispatcher.calls[i++] = new Array("objAjaxModule","reloadLink","'"+arrLink[k].href+"',objLinks.reload_,"+((params==null)?"null":""));
				objCallDispatcher.calls[i++] = new Array("objAjaxModule","reloadToolbarProgetti","'"+arrLink[k].href+"',objToolbarProgetti.reload_,"+((params==null)?"null":""));
				//objLibs.printMsgBox("CallDispatcher.arrLink: "+arrLink[k].href);
			}
			objDiario.containerDiario.style.background = objLabels.colorReloadWait;
			objCallDispatcher.calls[i++] = new Array("objDiario","reload","");
			objCalendar.containerCalendar.style.background = objLabels.colorReloadWaitGrey;
			objCallDispatcher.calls[i++] = new Array("objCalendar","reload","null, document.getElementById(\"reload_link\")");
			objCallDispatcher.calls[i++] = null;
			objCallDispatcher.iterCalls = 0;
		}
	};
	this.runCalendar = function(urlString,f,params)
	{
		//objLibs.printMsgBox("***********************");
		//objLibs.printMsgBox("CallDispatcher.runCalendar");
		if(objLibs.isObj(objAjaxModule))
			objAjaxModule.reloadCalendar(urlString,f,params);
		objCalendar.containerCalendar.style.background = objLabels.colorReloadWaitGrey;
		if(objCallDispatcher.calls == null)
		{
			/*if(objLibs.isObj(objLoaderWait))
				objLoaderWait.startReload();*/
			objCallDispatcher.calls = new Array();
			objCallDispatcher.calls[0] = null;
			objCallDispatcher.iterCalls = 0;
		}
	};
	this.runCalendarSel = function(urlString,f,params)
	{
		//objLibs.printMsgBox("***********************");
		//objLibs.printMsgBox("CallDispatcher.runCalendarSel");
		//objLibs.printMsgBox("urlString: "+urlString);
		
		if(objLibs.isObj(objAjaxModule))
			objAjaxModule.reloadCalendar(urlString,f,params);
		if(objCallDispatcher.calls == null)
		{
			/*if(objLibs.isObj(objLoaderWait))
				objLoaderWait.startReload();*/
			objCallDispatcher.calls = new Array();
			objDiario.containerDiario.style.background = objLabels.colorReloadWait;
			objCallDispatcher.calls[0] = new Array("objDiario","reload","");
			objCallDispatcher.calls[1] = null;
			objCallDispatcher.iterCalls = 0;
		}
	};
	this.checkEnd = function()
	{
		//objLibs.printMsgBox("***********************");
		//objLibs.printMsgBox("CallDispatcher.checkEnd");
		if(objCallDispatcher.iterCalls != null)
		{
			//objLibs.printMsgBox("CallDispatcher - typeof calls: "+(typeof objCallDispatcher.calls[objCallDispatcher.iterCalls]));
			if(!objLibs.isNull(objCallDispatcher.calls[objCallDispatcher.iterCalls]))
			{
				//objLibs.printMsgBox("CallDispatcher - typeof calls: "+(typeof eval(objCallDispatcher.calls[objCallDispatcher.iterCalls][0])));
				if(objLibs.isObj(eval(objCallDispatcher.calls[objCallDispatcher.iterCalls][0])))
				{
					var strCall = objCallDispatcher.calls[objCallDispatcher.iterCalls][0]
					              +"."+
					              objCallDispatcher.calls[objCallDispatcher.iterCalls][1]
					              +"("+objCallDispatcher.calls[objCallDispatcher.iterCalls][2]+");"
					//objLibs.printMsgBox(strCall);
					eval(strCall);
				}
				objCallDispatcher.iterCalls++;
			}
			else 
			{
				objCallDispatcher.iterCalls=null;
				objCallDispatcher.calls = null;
				/*if(objLibs.isObj(objLoaderWait))
					objLoaderWait.endReload();*/
			}
		}
		//objLibs.printMsgBox("iterCalls: "+objCallDispatcher.iterCalls);
	};
	this.run = function(fun,urlString,f,params)
	{
		//objLibs.printMsgBox("***********************");
		//objLibs.printMsgBox("CallDispatcher.run start");
		if(objCallDispatcher.iterCalls != null)
		{
				objCallDispatcher.iterCalls=null;
				objCallDispatcher.calls = null;
				/*if(objLibs.isObj(objLoaderWait))
					objLoaderWait.endReload();*/
				//objLibs.printMsgBox("CallDispatcher.clear run");
		}
		switch(fun)
		{
			case "iconize":
				objCallDispatcher.runIconize(urlString,f,params);
				break;
			case "canali":
				//objLibs.printMsgBox("CallDispatcher.run canali");
				objCallDispatcher.runCanali(urlString,f,params);
				break;
			case "allCanali":
				//objLibs.printMsgBox("CallDispatcher.run allCanali");
				//objLibs.printMsgBox("urlString: "+urlString);
				objCallDispatcher.runAllCanali(urlString,f,params);
				break;
			case "lang":
				//objLibs.printMsgBox("CallDispatcher.run lang");
				objCallDispatcher.runLang(urlString,f,params);
				break;
			case "calendar":
				objCallDispatcher.runCalendar(urlString,f,params);
				break;
			case "calendarSel":
				objCallDispatcher.runCalendarSel(urlString,f,params);
				break;
			default:
		}
	};
	this.check_ = function(htmlStr)
	{
		//objLibs.printMsgBox("***********************");
		//objLibs.printMsgBox("reload_ - start");
		if(objLibs.isObj(objCallDispatcher.containerCallDispatcher))
		{
			//objLibs.printMsgBox("reloadBody_ - class: "+box.className);
			objCallDispatcher.containerCallDispatcher.innerHTML = htmlStr;
			objCallDispatcher.initEvents();
		}
		//objLibs.printMsgBox("reload_ - end");
	};
	this.initEvents = function()
	{
	};
	this.init = function()
	{
		this.containerCallDispatcher = document.getElementById("containerCallDispatcher");
		this.initEvents();
	};
}

/* Initialize CallDispatcher sigleton */
function initCallDispatcher()
{
	objCallDispatcher = new CallDispatcher();
	objCallDispatcher.init();
}

function initCallDispatcherOnLoad()
{
	if (typeof oldOnLoadCallDispatcher == 'function') oldOnLoadCallDispatcher();
	initCallDispatcher();
}

/* Var sigleton instance*/
var objCallDispatcher;

/* Event initialize */
var oldOnLoadCallDispatcher;
if (typeof window.onload == 'function') 
	oldOnLoadCallDispatcher = window.onload;
window.onload = initCallDispatcherOnLoad;
