/**
 * @return
 */
function registerLoader(divLoading)
{
	if( !divLoading ) divLoading = "ajaxLoaderBox";
	Ajax.Responders.register({
		  onCreate: function() {
		    Ajax.activeRequestCount++;
		    $(divLoading).style.visibility="visible";
			$(divLoading).style.display="block";
		  },
		  onComplete: function() {
		    Ajax.activeRequestCount--;
		    if(Ajax.activeRequestCount <= 0)
			{
				$(divLoading).style.visibility="hidden";
				$(divLoading).style.display="none";
			}
		  }
		});
}

function removeMenu(secId)
{
	var ulId = "li_"+secId;
	var parent = ""; 
	try
	{	
		$(ulId).up();
	
		var subsections = $$(".subsections");
		// controllo il livello in cui mi trovo
		if( parent.identify() == "mainsections" && subsections.size() > 0) // se sono al primo livello
		{
			subsections.invoke("remove"); // rimuovo tutti sottomenu aperti di primo livello
		}
		else
		{
			// rimuovo tutti i miei sottomenu
			var children = $(ulId).childElements();
			if( children && children.first() ) 
			{
				children.each(function(e,i) 
						{
							if( e.tagName == "ul" || e.tagName == "UL")
							{
								e.remove();
							}
						});
			}
		}
	}
	catch(e) {}
}

/**
 * Chiamata che aggiorna solo il sottomenu base al link del menu cliccato
 *
 * @param string secId: id sezione del menu cliccato
 * @return void
 */
function menuCall(secId)
{
	removeMenu(secId);
	var ulId = "li_"+secId;
	// preparo i parametri da passare a ajax
	var myhash = new Hash();
	myhash.set("sec", secId);
	var history={};
	myhash.set("history", history);
	var menuUrl = ctx+controllerName+"subsections";
	
	// aggiorno il sottomenu
	makeCall(menuUrl, ulId, myhash, null, "bottom");
}

/**
 * Chiamata che aggiorna sottomenu e corpo pagina in base al link del menu cliccato
 *
 * @param string urltarget url da chiamare per caricare il body
 * @param string divId: id del div da aggiornare (es. body) con i risultati di urltarget
 * @param string secId: id sezione del menu cliccato
 * @param hashmap params: params hashmap dei parametri necessari a urltarget
 * @param string formId: id form di cui fare il submit
 * @param string insertion: top|bottom|before|after 
 * @return false
 */
function menuAjaxCall(urltarget, divId, secId, params, formId, insertion)
{
//	menuCall(secId);
	
	// aggiungo sec_id ai parametri
	if( params == null || Object.isUndefined(params) ) params = new Hash();
	
	if( Object.isHash(params) ) params.set("sec", secId);
			
	//aggiorno il corpo della pagina
	makeCall(urltarget, divId, params, formId, insertion);
	
	return false;
}

/**
 * @param urltarget
 * @param divId
 * @param params
 * @param formId
 * @param insertion
 * @return
 */
function makeCall(urltarget, divId, params, formId, insertion)
{
	var myhash = new Hash();
    if( formId != null && !Object.isUndefined(formId)  )
	{
		//var tmp = $(formId);
         myhash = $H($(formId).serialize(true));         
	}
   
    if( Object.isString(params) && Trim(params) == '' ) params = null;
   
	if( params!= null && !Object.isUndefined(params) )
	{
		myhash = myhash.merge(params); 
	}
	
	registerLoader();
	
	var options = {
			method : 'post',
			evalScripts: true,
			insertion: insertion,
			parameters : myhash,
			onFailure : function(response) { alert("Errore!"); }			  
		};
	
	var history = { history: { id: "ownhistory"	}};
	Object.extend(options, myhash.get("history") || history );
	

	if (!Object.isUndefined(myhash.get("onFailure")))
		Object.extend(options, { onFailure: myhash.get("onFailure")});
	if (!Object.isUndefined(myhash.get("onSuccess")))
		Object.extend(options, { onSuccess: myhash.get("onSuccess")});
	if (!Object.isUndefined(myhash.get("onComplete")))
		Object.extend(options, { onComplete: myhash.get("onComplete")});
	
	new Ajax.History.Updater(divId, urltarget, options);
	
	return false;
}

/**
 * @param urltarget
 * @param divId
 * @param params - nome dei parametri separati da virgola
 * @param values - valori separati da virgola
 * @param formId - id del form
 * @return
 */
function ajaxCall2(urltarget, divId, params, values, formId)
{
    
    var paramsMap = new Hash();
    var paramsArray = params.split(",");
    var valuesArray = values.split(",");
    if(valuesArray.length == paramsArray.length) 
    {
        for (i=0; i<paramsArray.length ; i++ ) 
        {
            paramsMap.set(paramsArray[i],valuesArray[i]);
        }
    }
	
    return makeCall(urltarget, divId, paramsMap, formId);
}

/**
 * @param formId
 * @param params
 * @param divId
 * @param successTargetUrl
 * @return
 */
function ajaxSubmit(formId, params, successTargetUrl) {
    
	registerLoader();
	
	var myform = $(formId);
    myform.request({
    	parameters: params,
    	evalScripts: true,
    	onComplete: function(response) 
                    { 
				    	var text = response.responseText.strip(); 
				    	displayMessage(text);
				    	if( response.status == 200 )
        				{
				    		lightbox.prototype.deactivate();
				    		if(successTargetUrl != null && !Object.isUndefined(successTargetUrl) && !successTargetUrl.blank() ) 
			                {
				    			//location.href=successTargetUrl;
								//displayMessage('ciao');
			                }
				    		
				    		makeCall(ctx+controllerName+'header', 'header');
				    		if( formId == "activeServiceForm") makeCall(ctx+controllerName+'activeServices', 'content');
        				}
				    	else
				    	{
				    		makeCall(ctx+'/tiles/commons/captcha.jsp', 'divCaptcha');
				    	}
                    }
    });
    
    return false;
}
 
function modifyUser()
{
	var urltarget = ctx+controllerName+'saveUser';
	var divId = 'lbContent';
	var params = $('registrationForm').serialize(true);
 	
	return makeCall(urltarget, divId, params);
}

/**
 * @param msisdn
 * @param id
 * @return
 */
function activateUser(msisdn, id)
{
	var params = new Hash();
	params.set("msisdn", msisdn);
	params.set("id", id);
		
	//new Ajax.History.Request(ctx+"/tiles/users/activateUser.jsp", {
	new Ajax.Request(ctx+"/tiles/users/activateUser.jsp", {
		history: { id: "ownhistory" },
		method: "post",
		parameters: params,
		onSuccess: function() { location.href=ctx+"/"; },
		onFailure: function(response) { 
			displayMessage(response.responseText);
		}
	});

	return false;
}

/**
 * @param text
 * @param params
 * @return
 */
function downloadContentNew(text, params)
{
	//if( confirm(text) ) { makeCall(ctx+"/tiles/products/download.jsp", "operationContent", params); }
	makeCall(ctx+"/tiles/products/buyAction.jsp", "operationContent", params);
	return false;
}


/**
 * @param text
 * @param params
 * @return
 */
function downloadContent(text, params)
{
	//if( confirm(text) ) { makeCall(ctx+"/tiles/products/download.jsp", "operationContent", params); }
	makeCall(ctx+"/tiles/products/download.jsp", "operationContent", params);
	return false;
}

/**
 * @param urltarget
 * @param divId
 * @return
 */
function logout(urltarget, divId)
{
	new Ajax.History.Request(ctx+"/tiles/users/logout.jsp", {
			history: { id: "ownhistory" },
			method: 'post',
			onComplete: function(transport) {
				//initialize();
				location.href=ctx+"/";
			}
	});
	
	return false;
}

/**
 * @param urltarget
 * @param divId
 * @param params
 * @return
 */
function setDevice(urltarget, divId, params)
{
	new Ajax.History.Updater(divId, urltarget, 
			{
				history: { id: "ownhistory" },
				method : 'post',
				evalScripts: true,
				parameters : params,
				onComplete: function(transport) 
				{ 
					makeCall( ctx+controllerName+'header', 'header' );
					lightbox.prototype.deactivate();
					location.href=host+ctx+"/";
				}	  
			});
	
	return false;
}

/**
 * 
 * @param urltarget
 * @param divId
 * @return
 */
function removeDevice(urltarget, divId)
{
	new Ajax.History.Updater(divId, urltarget, 
			{
				history: { id: "ownhistory" },
				method : 'post',
				evalScripts: true,
				onComplete: function(transport) { makeCall(ctx+controllerName+'header', 'header'); location.href=host+ctx+"/"; }	  
			});
	
	return false;
}
 
function lostPwd()
{
	var params = new Hash();
	try
	{
		params.set("prefix", $("prefix").value);
		params.set("msisdn", $("USRD_MOBILE").value);
	}
	catch(e) {}
	
	return makeCall(ctx+controllerName+'lostPwd', 'lbContent', params);
}

function login()
{
	return makeCall(ctx+controllerName+'login','lbContent', null, 'loginForm');
}


function callStats (url) {
    var now = new Date();
    var params = new Hash();
    piwikBaseURL = (("https:" == document.location.protocol) ? "https://stats.a-tono.com/" : "http://stats.a-tono.com/");
    piwik_action_name = '';
    piwik_idsite = '21';
    piwik_url = piwikBaseURL+"piwik.php";
    
    params.set("idsite", piwik_idsite);
    params.set("res", screen.width+"x"+screen.height);
    params.set("url", url);
    params.set("h", now.getHours());
    params.set("m", now.getMinutes());
    params.set("s", now.getSeconds());

    /*
    params.set("cookie", "");
    params.set("urlref", "");
    params.set("pdf", "");
    params.set("qt", "");
    params.set("realp", "");
    params.set("wma", "");
    params.set("dir", "");
    params.set("fla", "");
    params.set("java", "");
    params.set("ag", "");
    params.set("action_name", "");
    */
    new Ajax.Request(piwik_url, {
		method: "post",
		parameters: params
	});
}

function registerUserIT () {
	//document.getElementById('USRD_MOBILE').value
	if ($F('USRD_MOBILE')){
		//return makeCall(ctx+"/tiles/users/registerUser_it.jsp", "lbContent", params, "registrationForm");
		var params = $H($("registrationForm").serialize(true));
		//params = myhash.merge(params);
		new Ajax.Request(ctx+"/tiles/users/registerUser_it.jsp", {
			history: {},
			method: "post",
			parameters: params,
			onComplete:function(response) 
            { 
		    	var text = response.responseText.strip(); 
		    	if( response.status == 200 )
				{
		    		$('lbContent').update(text);
				}
		    	else
		    	{
		    		displayMessage(text);
		    		makeCall(ctx+'/tiles/commons/captcha.jsp', 'divCaptcha');
		    	}
            }
		});
	}
	else {
		var obj = ajaxSubmit("registrationForm", "", ctx+controllerName+"homepage");
	}
	
	return false;
}
