/***********************************************************************************
 *
 *
 * funzioni per la gestione di URL/URI
 *
 * Massimo Viti, 2006-10-11 Firenze, mviti@lamma.rete.toscana.it, IBIMET Firenze Italy
 *
 *
 ***********************************************************************************/
 

// fnzione che rende un parametro URI: <nome-parametro>=<dati_parametro>
// i dati vengono codificati con encodeURIComponent()
function getURIPram(key, data)
{
	return trim(key) + "=" + trim(encodeURIComponent(data));
}



/**************************************************************************************
 * 
 * Separa l'indirizzo dai paramrtri presenti in un URI: <indirizzo>?<parametri>
 *  
 * uri: rappresenta un URI: <indirizzo>?<parametri>
 *
 * la funzione rende un array in cui il primo elemento e' l'URL (indirizzo)
 * ed il secondo la striga dei parametri.
 * es.: 
 * aret = splitURIComponent("http://miohost.it/pagina.html?param1=PrimoParametro&param2=SecondoParametro")
 * l'array 'ret' sara' composto da:
 * aret[0]: "http://miohost.it/pagina.html"
 * aret[1]: "param1=PrimoParametro&param2=SecondoParametro"
 *  
 **************************************************************************************/
function splitURIComponent(URI)
{
	var ret;
	
	var n = URI.indexOf('?');
	if (n >= 0)
		ret = new Array(URI.substr(0, n), URI.substr(n+1));
	else
		ret = new Array(URI, "");
		
	return ret;
}



/**************************************************************************************
 * 
 * assembla la stringa-parametri per la connessione HTTP.
 *
 * Un parametro-uri e' formato da: nome_parametro=valore_parametro;
 * valore_parametro deve essere gia stato codificato con encodeURIComponent().
 * Si usi getURIPram(nome_parametro, valore_parametro) per ottenere un parametro-uri 
 * correttamente assemblato e codificato.
 * 
 *
 * param: primo parametro-uri da assemblare
 * ...: si possono indicare altri parametri. 
 * 
 * Viene resa la stringa che rappresenta la stringa-parametri da inviare 
 * strparam = getHTTPGETParam("param1=pipo-1", "param2=topolino");
 * strparam sara': 'param1=pipo-1&param2=topolino';
 * Attenzione non viene posto il punto interrogativo (?) iniziale, quello da inserire
 * dopo l'URL ed il nome delprimo parametro, questo per permettere la concatenazone di 
 * queste stringhe
 *
 **************************************************************************************/
//
function joinURIParam(param)
{	
	var uriparam = "";
	
	// array in cui ogni elemento e' un parametri-uri
	var aPrms = new Array();
	
	// si importano il/i parametri da 'param'
	if (isArray(param))
		aPrms = param.concat(aPrms);
	else 
		aPrms.push(param);
		
	// si importano gli eventuali parametri opzionali
	for (var i = 1; i < arguments.length; i++)
	{
		if (isArray(arguments[i]))
			aPrms = aPrms.concat(arguments[i])
		else
			aPrms.push(arguments[i]);
	}	
	
	// assemblaggio della stringa come URI-parametro-string
	//for (var i = 0; i < aPrms.length; i++)
	for (var i in aPrms)
	{
		var actParam = trim(aPrms[i]);
		if (actParam.length)
		{
			if (uriparam.length)
				uriparam += '&';
			uriparam += actParam;
		}
	}
		
	return uriparam;
}

function joinURIParam_test()
{
	alert("niente: \n" + "#" + joinURIParam("  		") + "#");
	/*
	alert("uno=duno, due=ddue: \n" + joinURIParam('uno=duno', 'due=ddue'));
	alert("array-2: \n" + joinURIParam(new Array("uno=dati_uno", "due=dati-due")));
	alert("array[2], tre=dtre: \n" + joinURIParam(new Array("uno=dati_uno", "due=dati-due"), "tre=dtre"));
	*/
	alert("array[2], array[2]: \n" + joinURIParam(new Array("uno=dati_uno", "due=dati-due"), Array("tre=dtre", "qua=dqua")));
	alert("array[2], array[2], pio=nono: \n" + joinURIParam(new Array("uno=dati_uno", "due=dati-due"), Array("tre=dtre", "qua=dqua"), "pio=nono"));
	alert("vuoto, array[2], pio=nono: array[2]\n" + joinURIParam('', new Array("uno=dati_uno", "due=dati-due"), "pio=nono", Array("tre=dtre", "qua=dqua")));
}


/**************************************************************************************
 *  
 * unisce le due componenti di un URI: indirizzo - parametri
 *  
 * URL: indirizzo della pagina
 * param: stringa dei parametri da passare con metodo GET
 * ...: eventuali parametri, opzionali, succesivi sarranno 
 *      assemblati tramite joinURIParam() a param
 * 
 **************************************************************************************/
function joinURIComponent(URL, param)
{	
	uriparam = joinURIParam(param, subarray(arguments, 2));
	
	if (URL.length > 0 && uriparam.length > 0)
		URI = URL + '?' + uriparam;
	else if (URL.length > 0)
		URI = URL;
	else
		URI = '?' + uriparam;
	
	return URI;
}

function joinURIComponent_test()
{
	alert("www.lamma, '  	  '\n" + "#" + joinURIComponent("www.lamma", "		") + "#");
	alert("www.lamma, 'a=da'\n" + joinURIComponent("www.lamma", "a=da"));
	alert("www.lamma, array[2]\n" + joinURIComponent("www.lamma", new Array("a1=da1", "a2=da2")));
	alert("www.lamma, 'a=da', array[2]\n" + joinURIComponent("www.lamma", "a=da", new Array("p1=dp1", "p2=dp2")));
	alert("www.lamma, array[2], 'a=da'\n" + joinURIComponent("www.lamma", new Array("a1=ap1", "a2=ap2"), "p=dp"));
	alert("www.lamma, array[2], array[2]\n" + joinURIComponent("www.lamma", new Array("a1=ap1", "a2=ap2"), new Array("p1=dp1", "p2=dp2")));
	
	alert("www.lamma, uno\n" + joinURIComponent("www.lamma", "uno"));
	alert("www.lamma, uno, due\n" + joinURIComponent("www.lamma", "uno", "due"));
	alert("www.lamma, '', tre\n" + joinURIComponent("www.lamma", "    ", "tre"));
}
