// JavaScript Document

/**
 * Trim elimina gli spazi bianchi dall'inizio e dalla fine di una stringa
 * @param {String} str: valore a cui togliere gli spazi
 */
function Trim(str) 
{
//	return str.replace(/\s+$|^\s+/g,""); 
	return str.gsub(/\s+$|^\s+/,""); 
} 

/**
 * itera tutti gli elementi di un form e li metto in un hash
 * setta come chiave l'id del campo del form e come valore il value del campo del form.
 *
 * @param String idform id del form da iterare
 * @return HashMap myhash: mappa(id,value) del form
 */
function getFormFields(idform) {
	var myhash = new Hash();
	
	var form = $(idform);
	if( form ) {
		var key = "";
		var elements  = form.getElements();
		for(i=0; i < elements.length; i++) {
			var values = new Array();
			switch(elements[i].type) {

				case "reset":
				case "button":
				case "submit": { break; }
		    	case "radio": {
		    		
					try { key = elements[i].id; } catch(e) {  }
					if( key.blank() ) try { key = elements[i].name; } catch(e) { }
					if( !key.blank() && myhash.keys().indexOf(key) == -1) {
						var radios = document.getElementsByName(key);
						for(k=0; k<radios.length; k++) {
							if(radios[k].checked) {
								myhash.set(key, radios[k].value);
								break;
							}
						}
					}
					break;
				}
		    	default: 	{
		    		try { key = elements[i].id; } catch(e) {  }
					if( key.blank() ) try { key = elements[i].name; } catch(e) { }
					
					if( !key.blank() ) {
						if(  myhash.keys().indexOf(key) != -1) values = myhash.get(key);
						values.push($F(elements[i]));
						myhash.set(key, values);			
					}
		    	}
		    }
			key = "";
		}
	}
	
	return myhash;
}

/**
 * checkAll: seleziona/deseleziona tutti i checkbox del form "form"
 * @param (Object) form da cui prendere i campi 
 */
function checkAll(form)
{
	for (i = 0; i < form.elements.length; i++) 
	{
		var e = form.elements[i]; //elemento i-esimo del form
		if (e.type == 'checkbox' ) 
		{ // se e e' un checkbox
			if( e.name.indexOf ('all') == -1 )
				e.checked = form.allbox.checked; //se allbox e' selezionato seleziona e altrimenti lo deseleziona
			else if( e.name != 'allbox' && form.allbox.checked)
				e.checked = !form.allbox.checked;
		}
	}
}

function colorSpan(prefix)
{
	var colors = $$('[id^='+prefix+'custom]');
	colors.each(function(s) {
		var pattern = new RegExp("custom[0-9]+$");
		if( pattern.test(s.id) )
		{																					  
			var span = new Element('span', { 'id': 'span_'+s.id, 'class': 'colorpreview', 'style': 'background-color:'+$(s.id).innerHTML}).update('&nbsp;');
			$(s.id).update(span);
		}
	});
}

/*
 *	mostraElem: mostra/nasconde dei div nascosti, l'effetto e' quello di aprire/chiudere dei div
 *			Input: elemCorrente e' l'id del div da mostrare
 */
function mostraElem(elemCorrente) 
{
	//intShow=setInterval("mostraElem()",10000);
	if (document.getElementById) 
	{
		questoElem = document.getElementById(elemCorrente).style; //recupero lo stato del div
		
		if (questoElem.display == "block") questoElem.display = "none"; //se il div e' mostrato(menu aperto), lo nascondo(div chiuso)
		else	questoElem.display = "block"; // altrimenti lo mostro
		
		return false;
	}
	else return true;
}

/*
 *	mostraNascondi: mostra il div 'divMostra' nasconde i div 'divNascondi', l'effetto e' quello di aprire/chiudere dei menu
 *			Input:
 *				- divMostra e' l'id del div da mostrare
 *			    - divNascondi e' un Array di id dei div da nascondere
 */
function mostraNascondi(divMostra, divNascondi) 
{
	if (document.getElementById) 
	{
		
		if (document.getElementById(divMostra).style.display == "block") document.getElementById(divMostra).style.display = "none"; //se divMostra e' mostrato lo nascondo.. 
		else	document.getElementById(divMostra).style.display = "block"; //..altrimenti lo mostro
		
		for (i = 0; i<divNascondi.length; i++)
			if ( divNascondi[i] != divMostra ) document.getElementById(divNascondi[i]).style.display = "none"; //nascondo gli altri div
			
		return false;
	}
	else return true;
}


/* function blink link */
if ( document.all )
{
	function blink_show()
	{
		blink_tags  = document.all.tags('blink');
		blink_count = blink_tags.length;
		for ( i = 0; i < blink_count; i++ )
		{
			blink_tags[i].style.visibility = 'visible';
		}
		
		window.setTimeout( 'blink_hide()', 700 );
	}
	
	function blink_hide()
	{
		blink_tags  = document.all.tags('blink');
		blink_count = blink_tags.length;
		for ( i = 0; i < blink_count; i++ )
		{
			blink_tags[i].style.visibility = 'hidden';
		}
		
		window.setTimeout( 'blink_show()', 250 );
	}
	
	window.onload = blink_show;
}


/*	switch della classe css di un elemento
 *			
 *				
 *	
 */
function changeClass(questoElem) 
	{
		if (questoElem.className == "none") { 
			questoElem.className = "imgZoom";
		}
		else {	
			questoElem.className = "none";
		}
		return true;
	}

/* modifica il valore di un testo */

function changeTxt(id, textOpen, textClose)
{
	var obj = document.getElementById(id);
	if (obj.innerHTML == textClose)
	{
		obj.innerHTML = textOpen;
	}
	else 
	{
		obj.innerHTML = textClose;
	}
}

/* scroll orizzontale e verticale del contenuto di un elemento */

var scrollStep=1;
var timerScroll="";

	function scrollDiv(id, direction)
	{
		clearTimeout(timerScroll);
		var div = document.getElementById(id);
		switch( direction )
		{
			case 'up'	: div.scrollTop  -= scrollStep; break;
			case 'down' : div.scrollTop  += scrollStep; break;
			case 'left'	: div.scrollLeft -= scrollStep; break;
			case 'right': div.scrollLeft += scrollStep; break;
		}
		timerScroll=setTimeout("scrollDiv('"+id+"','"+direction+"')",4);
	}

	function toTop(id)
	{
	document.getElementById(id).scrollTop=0;
	}
	
	function toLeft(id)
	{
	document.getElementById(id).scrollLeft=0;
	}
	
	function toBottom(id)
	{
		document.getElementById(id).scrollTop=document.getElementById(id).scrollHeight;
	}
	
	function toRight(id)
	{
		document.getElementById(id).scrollLeft=document.getElementById(id).scrollWidth;
	}
		
	function stopMe()
	{
		clearTimeout(timerScroll);
	}
	
	function loadImage(el) {
		//alert(el.value);
		$('imageChanged').value ="T";
		$('currentImage').src = el.value;
	}
	
/**
 * funzione che manda in post i parametri dei link
 * 
 * @param ctx
 * @param controller_name
 * @param pag
 * @return
 */
function post(ctx, controller_name, pag) {
	var form = document.getElementById("_urlref");
	var obj  = document.getElementById("_page");
	obj.value=pag;
	form.action= ctx + controller_namer +pag;
	form.submit();
}

/**
 * 
 * @param hideDiv
 * @return
 */
function hideNoSearch(hideDiv)
{
	try 
	{ 
		if( !hideDiv ) 
		{
			var divResults = $("results");
			if( !Object.isBlank(divResults) ) divResults.hide();
		}
	}
	catch(e) { }
}

/**
 * 
 * @param pg: pagina da mostrare se i contenuti sono paginati | 1
 * @param urltarget obbligatorio: url a cui fare richiesta ajax
 * @param params stringa della forma {'id1':value, ..., 'idn': value } contenente i parametri da inviare
 * @param idform: id del form contente i valori da inviare a urltarget
 * @param divId: id del div da aggiornare via ajax se diverso da index
 * @return
 */
function fillIndex(pg, urltarget, params, idform, divId) {
	
	try{ var hideDiv = $('hideDive').value; }
	catch(e) { hideDiv = ""; }
	
	if( Object.isBlank(urltarget) || urltarget.blank() ) urltarget = ctx + "/tiles/generic/indexLogic.jsp";
	if(idform == null) idform = "searchFilter";
	
	var myhash = new Hash();
	myhash = getFormFields(idform);
	myhash.set('page', pg);	
	
	if( !Object.isBlank(params) && !params.blank())
	{	
		params = params.evalJSON();
		if( Object.isObject(params) ) myhash = myhash.merge(params); 
	}
	
	if( Object.isBlank(divId) || divId.blank() ) divId="index";
	
	new Ajax.Updater(divId, urltarget, { 
		method: 'post',
		parameters: myhash,
		onComplete: function() { 
						hideNoSearch(hideDiv);   
						try{initialize(); } catch(e) {} 
		}
	});
	
	return false;
}

function fillHelpComments(pg, urlTarget, params) 
{
	if( Object.isBlank(urlTarget) || urlTarget.blank() ) urlTarget = ctx + "/tiles/help/helpComments.jsp";	
	return fillIndex(pg, urlTarget, params, "", "helpComments");
}

/**
 * @param selectToEmpty
 * @param addEmptyOption
 * @return select_option: array delle options
 */
function emptySelect(selectToEmpty, addEmptyOption)
{
	var select_option = new Array();
	var select = $(selectToEmpty);
	if( !Object.isBlank(select) )
	{
		select_option =  select.options; 
		select_option.length = 0;
		if( !Object.isBlank(addEmptyOption) && addEmptyOption ) 
		{
			select_option[0] = new Option("----------", "-1");
		}
	}
	return select_option;
}

function addOption(JSONobj, selectsToFill, addEmptyOption) 
{ 
	try 
	{ 
		for( j = 0; j<selectsToFill.length; j++)
		{
			try
			{ 
				var divToShow = $('div'+selectsToFill[j]);
				if( !Object.isBlank(divToShow) ) divToShow.show(); 
			}
			catch(e) {}
					
			select_option = emptySelect(selectsToFill[j], addEmptyOption)
			var selectObj = JSONobj[selectsToFill[j]];
			var i = select_option.length;
			for( var keyvalue in selectObj)
			{
				var label = selectObj[keyvalue];
				select_option[i] = new Option(label, keyvalue);	
				i++
			}
		}
	}
	catch(e) { }
}

/**
 * 
 * @param selectsToFill array delle select da riempire con le options
 * @param selectedId id del contenuto selezionato
 * @param urlTarget servlet/jsp che effettua le operazioni
 * @param addEmptyOption true se si deve aggiungere la option -1 | false altrimenti
 * @param idForm
 * @return
 */
function fillSelect(selectsToFill, selectedId, urlTarget, addEmptyOption, idForm) {
	if( Object.isBlank(urlTarget) || urlTarget.blank()) urlTarget = ctx+"/tiles/search/searchOptions.jsp";
	
	for(j=0; j<selectsToFill.length; j++)
	{
		emptySelect(selectsToFill[j], addEmptyOption);
	}
	
	var myhash = new Hash();
	if( !Object.isBlank(idForm) && !idForm.blank() ) myhash = $H($(idForm).serialize(true));
	myhash.set('selectsToFill', selectsToFill);
	myhash.set('selectedId', selectedId);
	new Ajax.Request(urlTarget, { 
		method: 'post',
		parameters: myhash,
		evalScripts: false,
		onSuccess: function(response) 
					{
						var JSONobj = response.responseJSON;
						if( JSONobj != null )
						{
							addOption(JSONobj, selectsToFill, addEmptyOption);
						}
					}
	});	
	
	return false;
}

/**
 * 
 * @param elem elemento da riempire
 * @param form form da cui ricavare i dati
 * @param urlTarget servlet/jsp che effettua le operazioni
 * @param selectToFill la select da riempire con le options
 * @param selectedId id del contenuto selezionato
 * @param addEmptyOption true se va aggiunta la option vuota | false altrimenti
 * @return
 */

function fill(elem, form, urlTarget, selectToFill, selectedId, addEmptyOption) {
	
	new Ajax.Updater(elem, urlTarget, { 
		method: 'post',
		evalScripts: false,
		parameters: form.serialize(true),
		onComplete: function(response) 
					{
						if(!selectToFill.blank()) {
							fillSelect(selectToFill, selectedId, '', addEmptyOption); 
						}
						var JSONobj = response.responseJSON;
						if( JSONobj == null )
						{
							if(addEmptyOption) emptyOption = "<option value=\"-1\">----------</option>";
							else emptyOption = "";
							$(elem).show();
							$(elem).innerHTML = emptyOption+Trim(response.responseText); 
						}
						else if( JSONobj != null )
						{
							addOption(JSONobj, elem, addEmptyOption); 
						}
					}

			/* DA CANCELLARE 
				function() {
					if(!selectToFill.blank()) {
						fillSelect(selectToFill, selectedId, '', addEmptyOption); 
					}
					
					if( !Object.isBlank(addEmptyOption) && addEmptyOption ) 
					{
						if(addEmptyOption) emptyOption = "<option value=\"-1\">----------</option>";
						else emptyOption = "";
						
						var options = $(elem).innerHTML;
						$('div'+elem).show();
						$(elem).innerHTML = emptyOption+Trim(options); 
						
					}
				}
			*/
	});
	
	return false;
}

function fillBox(teamId) {
	
	var urltarget = ctx + "/tiles/teams/manageTeams.jsp";

	var myhash = new Hash();
	myhash.set('id', teamId);
	
	new Ajax.Updater('box', urltarget, { 
		method: 'post',
		parameters: myhash
	});
	
	return false;
}


// ---------------------
// FUNCTION MANAGEMENT
// ---------------------


/**
 * @param String f
 * @param saveUrl
 * @param successAction
 * @param failureAction
 * @param pg
 */
function save(f, saveUrl, successAction, failureAction, pg) {
	var myhash = new Hash();
	$('lbError').style.display= "none";
	var allData = Form.getElements(f);
	for(i = 0; i < allData.length; i++) {
		if($F(allData[i]) != null && $F(allData[i])!="" && $F(allData[i])!="null")
			myhash.set($(allData[i]).name, $F(allData[i]));
	}
	
	new Ajax.Updater({success: '', failure: 'lbError'}, saveUrl, { 
		method: 'post',
		parameters: myhash,
		onSuccess: function()  { eval(successAction); closePopup(); },
		onFailure: function()  { eval(failureAction); $('lbError').style.display= "block"; }
		
	});
}

/**
 * 
 * @param itemsList
 * @param alertString
 * @param noItemAlert
 * @param saveUrl
 * @param successAction
 * @param pg
 * @return
 */
function removeItems(itemsList, alertString, noItemAlert, saveUrl, successAction, pg) {
	var itemsToRemove= "";
	var counter = 0;
	for(i=0; i<itemsList.length; i++) {

		if(itemsList[i].checked) {

			if((counter++) > 0 ) removeItems+=";";
			itemsToRemove+= itemsList[i].value;
		}
	}
	if(itemsToRemove.length > 0) {
		if (confirm(alertString)) {

			var myhash = new Hash();
			myhash.set('action', 'remove');
			myhash.set('ids', itemsToRemove);
		
			new Ajax.Updater({success: '', failure: 'errorMsg'}, saveUrl, { 
				method: 'post',
				parameters: myhash,
				onSuccess: function() { eval(successAction) }
			});
		}
	}
	else {
		alert(noItemAlert);
	}
}

function removePlayers(pg) {
	var tmp = document.getElementsByName('checkPlayer');		
	
	removeItems(tmp, 'Vuoi procedere con la rimozione dalla squadra dei giocatori selezionati?', 'Devi selezionare almeno un utente', '<%= ctx %>/tiles/players/savePlayer.jsp', 'location.replace("<%= ctx+CONTROLLER_NAME %>player")', pg);
}
function removeTeam(targetUrl, queryString, pg, params) 
{
	if( confirm('Vuoi procedere con la rimozione delle squadre selezionate?') ) 
	{
		var myhash = new Hash();
		myhash = getFormFields("teams");
		myhash.set("pg", pg);
		if( !Object.isBlank(params) ) myhash.set("checkTeam", params);
		new Ajax.Updater({success: '', failure: 'errorMsg'}, targetUrl, { 
			method: 'post',
			parameters: myhash,
			onSuccess: function() { location.replace(ctx+'/jl/teams'+queryString); }
		});
	}
}

/**
 * 
 * @param targetUrl
 * @param queryString
 * @param pg
 * @return
 */
function removeTeams(targetUrl, queryString, pg) 
{
	var itemsList = $$("[name=checkTeam]");
	var selected = false;
	for(i=0; i<itemsList.length; i++) 
	{
		if(itemsList[i].checked) 
		{
			selected = true; 
			break;
		}
	}
	
	if ( selected )
	{ 
		removeTeam(targetUrl, queryString, pg);
	}
	else
	{
		alert('Devi selezionare almeno una squadra');
	}
};

function changeCurrentClub(clubId, param_name, urltarget) 
{
    var myhash = new Hash();
    myhash.set(param_name, clubId);
            
    new Ajax.Updater('', urltarget, { 
                method: 'post',
                parameters: myhash, 
                onComplete: function() { window.location.reload(); }
            });
}

/*
	funzione che apre il popup per inviare un messaggio
*/
function writeMessage(userId, targetUrl) {
	var hash = new Hash();
	hash.set("userId", userId);
	openPopup(hash, "Invia un messaggio", targetUrl);
}

/**
 * Apre un div simulando un popup
 * e lo riempie via ajax con la risposta ottenuta da  urlContentDiv
 * 
 * @param urlContentDiv: jsp da caricare via ajax dentro il popup
 * @param id oggetto da modificare | '' se e' un inserimento
 * @param title popup | '' per il title di default "Gestione Dati"
 * @param fz da chiamare all'oncomplete | '' se non si deve chiamare nessuna funzione
 * @return void
 */
function manageData(urlContentDiv, id, title, fz)
{
    var myhash = new Hash();
    myhash.set('id', id);
    
    if( Object.isBlank(title) || title.blank() ) title = "Gestione Dati"; 
    
    openPopup(myhash, title, urlContentDiv, fz);
}

function saveData(urlTarget, divId, myhash, formFields)
{
	new Ajax.Updater({ success: divId } , urlTarget, { 
		method: 'post',
        parameters: myhash,
        onSuccess: function() { 
        				try { closePopup(); } //chiudo il popup 
        				catch(e) {}
                        window.location.reload(); // ricarico la pagina
					},
		onFailure: function(response) {
						resetAllError(formFields);

						var JSONobj = response.responseJSON;
						if( JSONobj != null )//&& JSONobj.isJSON() )
						{
							for( var id in JSONobj)
							{
								var idERR = id+"_ERR";
								$(id).parentNode.className="erroreForm";
								$(idERR).innerHTML = JSONobj[id];
								idERR.className = "erroreForm displayNone";
							}
                              
							$("popupError").innerHTML= "";
						}
						else 
						{
							$('lbError').innerHTML = response.responseText;
                          	$('lbError').style.display= "block";
						}
					}
	});
}

/**
 * Effettua la validazione del form clubData_1,
 * fa la chiamata ajax a saveClub.jsp
 * ricarica la pagina o mostra un errore
 * 
 * @param urlTarget
 * @return
 */
function saveClub(urlTarget)
{
    if( validateElements(clubFields) )
    {
        var idForm = "clubData_1";
        var myhash = new Hash();
        myhash = getFormFields(idForm);
    
        saveData(urlTarget, 'index', myhash, clubFields);
    }
    
    return false;
}

/**
 * Effettua la validazione del form organizationChart,
 * fa la chiamata ajax a saveOrganizationChart.jsp
 * ricarica la pagina o mostra un errore
 *
 * @param urlTarget: url che effettua il salvataggio dell'organigramma
 * @param id: id dell' oggetto a cui appartiene l'organigramma
 * @return false
 */
function saveOrganizationChart(urlTarget, id)
{
	var fieldsName = new Array();
	fieldsName.push(new Array ("title", "7", "", ""));
	fieldsName.push(new Array ("role",  "7", "", ""));
	fieldsName.push(new Array ("name",  "7", "", ""));
	fieldsName.push(new Array ("email", "3", "", ""));
	
	// preparo l'array per validare il form
	var organizationChartFields = new Array();
	
	for(var i = 0; i< fieldsName.length; i++)
	{
		var elem = document.getElementsByName(fieldsName[i][0]);
		for(var j = 0; j< elem.length; j++)
		{
			organizationChartFields.push(new Array(elem[j].id, fieldsName[i][1], fieldsName[i][2], fieldsName[i][3]));
		}
	}
	
	if( validateElements(organizationChartFields) )
    {
        var idForm = "organizationChart";
        var myhash = new Hash();
        myhash = getFormFields(idForm);
        myhash.set('id', id);
        
        saveData(urlTarget, 'index', myhash, organizationChartFields);
    }
    
    return false;
}

function saveTeam(urlTarget, teamFields)
{
    if( validateElements(teamFields) )
    {
        var idForm = "teamData";
        var myhash = new Hash();
        myhash = getFormFields(idForm);
        
        saveData(urlTarget, 'index', myhash, teamFields);
    }
    
    return false;
}

function saveHelpComment(urlTarget)
{
	helpCommentsFields = new Array();
	//formField[field-id][check-type][function][reqExp]
	helpCommentsFields.push(new Array ("text",   "0", "", ""));
	
	if( validateElements(helpCommentsFields) )
    {
		// sanitize text
		myCleaner(document.getElementById("text").value);
        var idForm = "addComment";
        var myhash = new Hash();
        myhash = getFormFields(idForm);
        
        saveData(urlTarget, '', myhash, helpCommentsFields);
       // $('text').innerHTML = "";
    }
    
    return false;
}

/*
	funzione che apre il dettaglio di un messaggio 
	@param id identificatore del messaggio
*/
function messageDetail(id) {
	hash = new Hash();
	hash.set('id', id);
	try	{
		document.getElementById('msg_'+id).className = 'read';
	}
	catch (e) {	/*alert('errore:'+e.message)*/}
	openPopup(hash, 'Dettaglio Messaggio', ctx + '/tiles/messages/messageDetail.jsp');
};

function openUploadPage( parentOtype, parentId, otype, id, componentName, changeParentStatus) {
	var hash = new Hash();
	hash.set('parentOtype', parentOtype);
	hash.set('parentId', parentId);
	hash.set('otype', otype);
	hash.set('id', id);
	hash.set('componentName', componentName);
	if( Object.isBlank(changeParentStatus) || changeParentStatus.blank() ) changeParentStatus = "T";
	hash.set('changeParentStatus', changeParentStatus);
	
	openPopup(hash, "Upload file", ctx+'/tiles/commons/upload.jsp');
};

function addArea(idArea)
{
	var tbodyId = $$("tbody").last().id;
	idArea = tbodyId.sub("tbodyRuolo", "");
	
	// deve creare una tabella
	if( Object.isBlank(idArea) || (""+idArea).blank() || idArea>0 ) idArea = -1;// calcolo id ruolo e org
	else idArea--;
	
	var fields = new Array( new Array("role", "Ruolo"), new Array("name", "Nome"), new Array("surname", "Cognome"), new Array("email", "E-mail"));
	// elementi della tabella	
	var table = new Element("table", { "class": "tableList" });
	var thead = new Element("thead");
	var trHead = new Element("tr", { "class": "topGreen" });
	var tbody = new Element("tbody", { "id": "tbodyRuolo"+idArea });		
	// -- th Area --
	var th = new Element("th", { "colspan": "5" } ); // colspan 4
	var input = new Element("input", { "class": "noBg_green", "type": "text", "name": "title", "id": "title"+idArea, "size": "30" });
	var span = new Element("span", { "class": "displayNone", "id": "title"+idArea+"_ERR" });
	th.insert(input);
	th.insert(span);		
	trHead.update(th);
	// th bottone aggiungi area
	th = new Element("th");
	input = new Element("input", { "class": "buttonMore", "type": "button", "id": "more", "title": "aggiungi area" });
	input.onclick = function(){ addArea(); }
	th.update(input);

	trHead.insert(th);
	thead.update(trHead);
	table.insert(thead);
	table.insert(tbody); // aggiungo il tbody vuoto e poi chiamo addRole per riempire il tbody
	
	$("organigramma").insert(table); // aggiungo la tabella al DOM
	
	addRole(idArea);
}

function addRole(idArea)
{
	// deve creare un tr e aggiungerlo al tbody che sta chiamando la funzione 
	if( Object.isBlank(idArea) || (""+idArea).blank() )
	{
		 alert("Siamo spiacenti, si e' verificato un errore!"); 
		 return;
	}
	
	var idRole = -1;
	try
	{		
		var idRole = $$("[title=trRole"+idArea+"]").last().id;
	
		// deve creare una tabella
		if( Object.isBlank(idRole) || (""+idRole).blank() || idRole>0 ) idRole = -1;// calcolo id ruolo e org
		else idRole--;
	}
	catch(e) { idRole = -1; }
	
	// fields[i][0]=name del campo, fields[i][1]=label del campo
	var fields = new Array( new Array("role", "Ruolo"), new Array("name", "Nome"), new Array("surname", "Cognome"), new Array("email", "E-mail"));
	
	var trBody = new Element("tr", { "class": "topGreen", "title": "trRole"+idArea, "id": idRole });
	var td = "";
	
	var label = "";
	var id = "";
	
	for(i = 0; i<fields.length; i++)
	{
		id = fields[i][0]+idArea+"#"+idRole;
		td = new Element("td");		
		label = (new Element("label", {"for": id} )).update(fields[i][1]);
		input = new Element("input", { "type": "text", "name": fields[i][0], "id": id, "size": "18" });
		span = new Element("span", { "class": "displayNone", "id": id+"_ERR" });
		td.insert(label);
		td.insert(input);
		td.insert(span);
		trBody.insert(td); // inserisco il td alla riga
	}
	
	id = "login"+idArea+"#"+idRole;
	td = new Element("td");		
	var div = new Element("div", {"id": "infoLogin"+id, "class": "inputInfo"} );
	var a = (new Element("a", {"href": "javascript:void(0);", "class": "green"})).update("chiudi");
	a.onclick = function() { mostraElem('infoLogin'+id); }
	div.insert(a);
	div.insert(new Element("br"));
	div.insert(document.getElementById("infoLogin").innerHTML);
	div.insert(")");	
	td.insert(div);
	label = (new Element("label", {"for": id} )).update("Login <span class=\"green\">( ? )</span>");
	input = new Element("input", { "type": "text", "name": "login", "id": id, "size": "18" });
	input.onclick = function(){ mostraElem('infoLogin'+id); }
	span = new Element("span", { "class": "displayNone", "id": id+"_ERR" });
	td.insert(label);
	td.insert(input);
	td.insert(span);
	trBody.insert(td); // inserisco il td alla riga
	
	td = new Element("td");		
	input = new Element("input", { "class": "buttonMore", "type": "button", "id": "more", "title": "aggiungi ruolo" });
	input.onclick = function(){ addRole(idArea); }
	td.insert(input);
	trBody.insert(td);
	
	$("tbodyRuolo"+idArea).insert(trBody); 	
}

function openPopupContent(otype, id, action, title, targetUrl) {
	var hash = new Hash();
	hash.set('otype', otype);
	hash.set('id', id);
	hash.set('action', action);
	openPopup(hash, title, targetUrl);
}

function openPopupPlayer(id, action, title, targetUrl) {
	var hash = new Hash();
	hash.set('id', id);
	hash.set('action', action);
	openPopup(hash, title, targetUrl);
}

// funzione utilizzata in inviteFriend.jsp
function checkRole(el) {
	if(el.checked) {
		$('jr').checked = 'checked';
	}
	else {
		$('jr').checked = '';
		$('cju').checked = '';
	}
	return true;
}
