function loadList(targetDivId,callbackName,callbackDetail,filterParams,startPage,numResult,order){
	$.getJSON("ajax_backend.php?action="+callbackName 
				+ "&filterParams="+filterParams
				+ "&startPage="+startPage
				+ "&numResult="+numResult
				+ "&order="+order
				,function(data) {
		paginatore = makePages(data.num_result,targetDivId,callbackName,callbackDetail,filterParams,startPage,numResult,order)
		html = '<table cellpadding="5" cellspacing="0" border="0" class="goalGameListTable" width="100%">';
		
		html += '<tr  style="height:0px;"><td  colspan="' + data.fields_name.length*2 + '" style="padding:0px;"><div id="goalGame_divDettaglio_'+targetDivId+'" ></div></td></tr>'; 
		html += '</table>';
		html += '<div id="contenitoreLista_'+targetDivId+'">';
		var valoreFiltro = filterParams.match(/^\*=.+/g,'');
		if(valoreFiltro){
			valoreFiltro = valoreFiltro[0].replace(/^\*=/g,'');
			valoreFiltro = unescape(valoreFiltro.replace(/;/g,''));
		}
		else{
			valoreFiltro = '';
		}
		
		html += '<table cellpadding="5" cellspacing="0" border="0" class="goalGameListTable" width="100%" style="border-top:0px;">';
		html += '<tr height="25" class="goalGameOperationsBar">'
					+'<td colspan=" ' + (data.fields_name.length)*2 + ' " class="goalGameListBorderRB" style="padding-top:0px; padding-bottom:0px;">'
						+'<div style="float:left;width:95%;height:100%;">'
							+'<div class="goalGameListBorderR" style="height:25px;float:left;width:50%;padding-bottom:7px;padding-top:5px;">'
								+'<img src="img/new.png" id="button_new_'+targetDivId+'" alt="Nuovo" title="Nuovo" class="goalGameListButtonNew" style="cursor:pointer;" onclick="setDetail(\'goalGame_divDettaglio_'+targetDivId+'\',\'nuovo\',\''+ targetDivId +'\',\''+ callbackName +'\',\''+ callbackDetail +'\',\''+ filterParams +'\',\''+ startPage +'\',\''+ numResult +'\',\''+ order +'\');" />'
							+'</div>'
							+'<div style="float:right;width:45%;padding-bottom:5px;padding-top:0px;text-align:right;">'
								+'Search&nbsp;&nbsp;<input class="goalGameList_filter_box" value="'+valoreFiltro+'" type="text" id="searchField_'+targetDivId+'" onkeyup="applyFilter(\'searchAll_input\',event,this,\'\',\''+targetDivId+'\',\''+callbackName+'\',\''+callbackDetail+'\',\''+filterParams+'\',\''+startPage+'\',\''+numResult+'\',\''+order+'\');" /> '
								+'<img src="img/search.png" alt="Cerca" title="Cerca" style="position:relative;top:9px;left:5px;cursor:pointer" onclick="applyFilter(\'searchAll\',event,this,\'\',\''+targetDivId+'\',\''+callbackName+'\',\''+callbackDetail+'\',\''+filterParams+'\',\''+startPage+'\',\''+numResult+'\',\''+order+'\');" />'
							+'</div>'
						+'</div>'
						+'<div style="text-align:right;float:right;width:5%;padding-bottom:5px;padding-top:5px;">'
							+'<img style="cursor:pointer;" src="img/refresh.png" alt="Reset Filtri" title="Reset Filtri" onclick="loadList(\''+targetDivId+'\',\''+callbackName+'\',\''+callbackDetail+'\',\'\',\''+startPage+'\',\''+numResult+'\',\''+order+'\')" />'
						+'</div>'
					+'</td>'
				+'</tr>';
		html += '<tr class="goalGameListHeaderRow">';
			
		for(var i = 0; i < data.fields_name.length ; i++){
			var id_record;
			var label = data.info_elem[data.fields_name[i]].label
			var type = data.info_elem[data.fields_name[i]].type
			var params = data.info_elem[data.fields_name[i]].params
			var width = data.info_elem[data.fields_name[i]].width
			if(type=="#id_record")
				id_record = data.fields_name[i];
			if(type == "#id_record" || width == "0")
				continue;
			var additionalHtml = getParamsForFilter(type,params,label,data.fields_name[i],targetDivId,callbackName,callbackDetail,filterParams,startPage,numResult,order);
			
			var srcOrdinatore = '';
			var condOrder = '';
			
			
			var oldOrder = order.split(',');
			if(oldOrder.length > 0){
				var found = false;
				for(var j = 0; j < oldOrder.length; j++){
					if(oldOrder[j] == data.fields_name[i]){
						found = true;
						srcOrdinatore = 'ordina';
						condOrder += data.fields_name[i] + ' DESC';
					}
					else if(oldOrder[j] == data.fields_name[i]+ ' DESC'){
						found = true;
						srcOrdinatore = 'ordinadesc';
						if(j == oldOrder.length-1){
							condOrder = condOrder.substr(0,condOrder.length-1);
						}
						continue;
					}
					else{
						condOrder+= oldOrder[j];
					}
					condOrder+= (j < (oldOrder.length-1) ) ? ',' : '';
				}
				
				if(!found){
					srcOrdinatore = 'nonordinato';
					if(order != '')
						condOrder = order + ',' + data.fields_name[i];
					else
						condOrder = data.fields_name[i];
				}
			}
			var regExNoOrder = new RegExp("_noOrder","g");
			
			html += '<td  class="goalGameListCell" colspan="2">';
				html += '<table cellpadding="0" cellspacing="0" border="0">';
					html += '<tr>';
						html += '<td>'
										+'<div id="'+label+'_cell_'+targetDivId+'" onclick="filterField(\'' + type + '\', \'' + label + '\',\'' + data.fields_name[i] + '\',\''+targetDivId+'\')">'
											+'<b>'+ label +'</b>'
										+'</div>'
										+ additionalHtml 
								+'</td>'
								+'<td width="10"></td>'
								+ '<td>';
		html +=((!type.match(regExNoOrder)) ? '<img style="cursor:pointer;" src="img/'+srcOrdinatore+'.gif" onclick="setOrder(\''+ targetDivId +'\',\''+ callbackName +'\',\'' + callbackDetail + '\',\''+ filterParams +'\',\''+ startPage +'\',\''+ numResult +'\',\''+ condOrder +'\')" />' : '&nbsp;');
								html += '</td>';
					html += '</tr>';
				html += '</table>';
			html += '</td>';
			
		}
		html += '</tr>';
		
		for(var i = 0; i < data.valori.length ; i++){
			var cssRiga = (i % 2 == 0) ? 'goalGameListRowPair' : 'goalGameListRowOdd';
			var record = data.valori[i][id_record];
			
			html += '<tr id="goalGame_riga_'+i+'_'+targetDivId+'" onclick="setDetail(\'goalGame_divDettaglio_'+targetDivId+'\',\''+ record +'\',\''+ targetDivId +'\',\''+ callbackName +'\',\''+ callbackDetail +'\',\''+ filterParams +'\',\''+ startPage +'\',\''+ numResult +'\',\''+ order +'\');" style="cursor:pointer;" class="' + cssRiga +'" onmouseover="evidenceRow(\'goalGame_riga_'+i+'_'+targetDivId+'\');" onmouseout="removeEvidence(\'goalGame_riga_'+i+'_'+targetDivId+'\',\'' + cssRiga +'\')" >';
			for(var j = 0; j < data.fields_name.length ; j++){
				
				var value = data.valori[i][data.fields_name[j]];
				var type = data.info_elem[data.fields_name[j]].type
				var params = data.info_elem[data.fields_name[j]].params
				var width = data.info_elem[data.fields_name[j]].width
				
				
				value = manageType(type,params,value);
				if(type == "#id_record" || width == "0")
					continue;
				html += '<td colspan="2" width="' + width + '%" class="goalGameListCell">'+ value +'</td>'; 
			}
			html += '</tr>';
			
		}
		if(data.valori.length == 0){
			html += '<tr class="goalGameListRowPair" style="height:50px" ><td class="goalGameListCell" colspan="' + (data.fields_name.length*2) + '" align="center"><b>Elenco Vuoto</b></td></tr>';
		}
		else{
			html += '<tr class="goalGameListRowPair"><td class="goalGameListCell goalGameListPaginatore" colspan="' + (data.fields_name.length*2) + '">'+paginatore+'</td></tr>'; 
		}
		html += '</table>';
		html += '</div>';
		$('#' + targetDivId).html(html);

		//Sposto il focus sulla casellina di testo del search rapido
		$('#searchField_'+targetDivId).focus()
		$('#searchField_'+targetDivId).select()
	});

}

function evidenceRow(id){
	$('#'+id).attr('class','goalGameListRowEvidence');
}
function removeEvidence(id,oldCss){
	$('#'+id).attr('class',oldCss);
}

function manageType(type,params,value){
	switch(type){
		case 'Enum': 
			var value = params[value];
			break
		case 'Date':
			var value = mysql2date(value);
			break
		case 'Datetime':
			var value = mysql2datetime(value);
			if(value == '00/00/0000 00:00:00')
				value = '---';
			break
		default : 
	}
	if(value == null || value == '')
		value = '&nbsp;';
	if(params['formattazione_html'] != null)
		value = params['formattazione_html'].replace(/#{VALUE}/g,value);
	return value;
}
function adjustDate(dom){
	var data = dom.value;
	var valori = data.split('-');
	var zeri = '';
	for(var i = 0; i < (4 - valori[0].length); i++){
		zeri += '0';
	}
	valori[0] = zeri + valori[0];
	zeri = '';
	for(var i = 0; i < (2 - valori[1].length); i++){
		zeri += '0';
	}
	valori[1] = zeri + valori[1];
	zeri = '';
	for(var i = 0; i < (2 - valori[2].length); i++){
		zeri += '0';
	}
	valori[2] = zeri + valori[2];
	
	dom.value = valori[0] + '-' +  valori[1] + '-' + valori[2];
}

function mysql2date(data){
	var valori = data.split('-');
	return valori[2] + '/' + valori[1] + '/' + valori[0];
}
function mysql2datetime(mysqlDate){
	if(mysqlDate == null || mysqlDate == '' || mysqlDate == undefined){
		return 'ND';
	}
	var giornoOra = mysqlDate.split(' ');
	var giornoMeseAnno = giornoOra[0].split('-');
	giornoOra[1] = giornoOra[1].substr(0,5);
	var datetime = giornoMeseAnno[2] + '/' + giornoMeseAnno[1] + '/' + giornoMeseAnno[0] + ' ' + giornoOra[1];
	return datetime;
}

function getParamsForFilter(type,params,label,name_field,targetDivId,callbackName,callbackDetail,filterParams,startPage,numResult,order) {
	
	arrayFiltri = filterParams.split(';');
	for(var j = 0; j < arrayFiltri.length; j++){
		arrayFiltri[j] = '_' + arrayFiltri[j];
	}
	filterParams = arrayFiltri.join(';');
	
	
	var regExVal = new RegExp('_'+name_field+".[^;]+;","g"); 
	var valoreFiltro = filterParams.match(regExVal,'');
	
	filterParams = filterParams.replace(/_/g,'');
	
	if(valoreFiltro){
		var regExVal2 = new RegExp('_'+name_field+"=","g");
		valoreFiltro = valoreFiltro[0].replace(regExVal2,'');
		valoreFiltro = unescape(valoreFiltro.replace(/;/g,''));
	}
	else{
		valoreFiltro = '';
	}
	switch(type){
		case 'Enum':
			additionalHtml = '';
			additionalHtml += '<select class="filterSelect" size="3" name="' + name_field + '" onchange="applyFilter(\'select\',event,this,this.options[this.selectedIndex].value,\''+targetDivId+'\',\''+callbackName+'\',\''+callbackDetail+'\',\''+filterParams+'\',\''+startPage+'\',\''+numResult+'\',\''+order+'\');" >';
			for(var elem in params ){
				additionalHtml += '<option value="' + elem + '" '+((elem == valoreFiltro)? 'selected' : '' )+'>' + params[elem] + '</option>';
			}
			additionalHtml+= '</select>';
			break;
		case 'Date':
			  var scriptCode  = '<script type="text/javascript">\nCalendar.setup({\n';
		      scriptCode += 'inputField     :    "'+name_field+'",\n';
		      scriptCode += 'ifFormat       :    "%Y-%m-%e",\n';
		      scriptCode += 'button         :    "'+name_field+'_trigger",  // trigger for the calendar (button ID)\n';
		      scriptCode += 'align          :    "Tl",           // alignment (defaults to "Bl")\n';
		      scriptCode += 'singleClick    :    true,\n';
		      scriptCode += 'showsTime      :    false,\n';
		      scriptCode += 'electric       :    false,\n';
		      scriptCode += 'timeFormat     :    "24"});\n';
		      scriptCode += '</script>';
			  additionalHtml = '<input type="hidden"  id="' + name_field + '" readonly name="' + name_field + '" value="'+valoreFiltro+'" onchange="adjustDate(this);applyFilter(\'select\',\'\',this,this.value,\''+targetDivId+'\',\''+callbackName+'\',\''+callbackDetail+'\',\''+filterParams+'\',\''+startPage+'\',\''+numResult+'\',\''+order+'\');" />'
			  				+'<a href="javascript:NewCal(\'filt_from_date\',\'ddmmyyyy\', false,24)">'
			  					+'<img id="'+name_field+'_trigger" src="img/icon_cal.gif" alt="Da" border="0" height="16" width="16">'
			  				+'</a>' + scriptCode;
			break;
		default:
			additionalHtml = '<input size="12" value="'+valoreFiltro+'" class="filterText" name="' + name_field + '" onkeyup="applyFilter(\'text\',event,this,this.value,\''+targetDivId+'\',\''+callbackName+'\',\''+callbackDetail+'\',\''+filterParams+'\',\''+startPage+'\',\''+numResult+'\',\''+order+'\');" />';
			
			break;
	}
	var regEx = new RegExp(name_field+".[^;]+;","g"); 
	if(filterParams.match(regEx) && type != 'Text')
		additionalHtml += '<br /><input class="filterButton" type="button" size="10" onclick="applyFilter(\'select\',event,this,\'RESET\',\''+targetDivId+'\',\''+callbackName+'\',\''+callbackDetail+'\',\''+filterParams+'\',\''+startPage+'\',\''+numResult+'\',\''+order+'\');" name="' + name_field + '" value="Reset" />';
	additionalHtml = '<div class="filterList" id="filter_' + name_field + '_div_'+targetDivId+'" style="display:none;position:absolute;" >' + additionalHtml + '</div>';
	return additionalHtml;
}

function filterField(type,label,name_field,targetDivId) {
	if($('#filter_' + name_field + '_div_'+targetDivId).css('display') == 'block'){
		$('.filterList').css('display','none');
	}
	else{
		$('.filterList').css('display','none');
		$('#filter_' + name_field + '_div_'+targetDivId).css('display','block');
		$('#filter_' + name_field + '_div_'+targetDivId + ' input').select();
	}
	
}


function applyFilter(typeDom,event,dom,value,targetDivId,callbackName,callbackDetail,filterParams,startPage,numResult,order){
	if(typeDom == 'searchAll' || (typeDom == 'searchAll_input' && event!= '' && event.keyCode == 13)){
		value = $('#searchField_'+targetDivId).val();
		value = value.replace(/;/g,'');
		value = value.replace(/&/g,'');
		value = value.replace(/=/g,'');
		value = value.replace(/_/g,'');
		if(value != '')
			filterParams = '*=' + escape(value) + ';';
		else
			filterParams = '';
		loadList(targetDivId,callbackName,callbackDetail,filterParams,0,numResult,order);
	}
	else if ( (event!= '' && event.keyCode == 13) || typeDom == 'select'){
		if(value != '' && value != 'RESET'){
			value = value.replace(/;/g,'');
			value = value.replace(/&/g,'');
			value = value.replace(/=/g,'');
			value = value.replace(/_/g,'');
			 
			
			arrayFiltri = filterParams.split(';');
			for(var j = 0; j < arrayFiltri.length; j++){
				arrayFiltri[j] = '_' + arrayFiltri[j];
			}
			filterParams = arrayFiltri.join(';');
			
			var regEx = new RegExp('_'+dom.name+".[^;]+;","g");
			filterParams = filterParams.replace(regEx,'');
			filterParams = filterParams.replace(/\*=.[^;]+;/g,'');
			filterParams = filterParams.replace(/_/g,'');
			filterParams += dom.name + '=' + escape(value) + ';';
		}
		else{
			arrayFiltri = filterParams.split(';');
			for(var j = 0; j < arrayFiltri.length; j++){
				arrayFiltri[j] = '_' + arrayFiltri[j];
			}
			filterParams = arrayFiltri.join(';');
			
			var regEx = new RegExp('_'+dom.name+".[^;]+;","g"); 
			filterParams = filterParams.replace(regEx,'');
			filterParams = filterParams.replace(/_/g,'');
			
			filterParams = filterParams.replace(/\*=.[^;]+;/g,'');
		}
		loadList(targetDivId,callbackName,callbackDetail,filterParams,0,numResult,order);
	}
}

function setOrder(targetDivId,callbackName,callbackDetail,filterParams,startPage,numResult,order){
	loadList(targetDivId,callbackName,callbackDetail,filterParams,startPage,numResult,order);
}

function setDetail(idDivContainer,idField,targetDivId,callbackName,callbackDetail,filterParams,startPage,numResult,order){
	if(idField == 'undefined')
		return;
	html ='<div style="text-align:right;"><img src="img/close_sm.png" alt="chiudi" class="button" title="chiudi" id="button_close_'+targetDivId+'" style="position:relative; top:0px; z-index:100;cursor:pointer;" onclick="closeDetail(\''+idDivContainer+'\',\''+targetDivId+'\');" /></div><div id="containerForDetailedRecord_'+targetDivId+'"></div>';
 	$('#' + idDivContainer).html(html);
 	$('#' + idDivContainer).css({
 		'padding': '5px'
 		});
 		
 	$('#' + idDivContainer).addClass('goalGameListCell');
 	$('#contenitoreLista_'+targetDivId).css('display','none');

 	
	eval( callbackDetail + "('" + idField + "','view')");
	
}

function closeDetail(idDivContainer,targetDivId){
 	$('#' + idDivContainer).css({
 		'border-bottom': '0px',
 		'padding': '0px'
 		});
 	$('#' + idDivContainer).html('');
 	$('#contenitoreLista_'+targetDivId).css('display','block');

}


var arrayPagesVisible;
function makePages(qtRecord,targetDivId,callbackName,callbackDetail,filterParams,startPage,numResult,order){
	var numPages = Math.ceil(qtRecord/numResult);
	var html = '<div id="paginatoreRisultati_'+targetDivId+'">';
	var localStart = 0;
	
	var lastPage = (numPages-1)*parseInt(numResult);
	
	html += '<img style="cursor:pointer; padding-left:3px;padding-right:3px;" src="img/p-first.gif" alt="inizio" title="inizio" onclick="loadList(\''+ targetDivId +'\',\''+ callbackName +'\',\''+ callbackDetail +'\',\''+ filterParams +'\',\'0\',\''+ numResult +'\',\''+ order +'\');" />&nbsp;&nbsp;&nbsp;';
	html += '<img style="cursor:pointer; padding-left:3px;padding-right:3px;" src="img/p-prev.gif" alt="prev" title="prev" onclick="scorriPagineLista(\'prev\','+(numPages-1)+',\''+targetDivId+'\')" />&nbsp;&nbsp;&nbsp;';
	
	for(var i = 0; i < numPages; i++ ){
		
		var idPage = i+1;
		var paginaCorrente = Math.ceil(startPage/numResult);
		var cssDisplay = "style='display:none;'";
		if(i==paginaCorrente || i==( paginaCorrente - 1) || i==( paginaCorrente + 1) || (paginaCorrente == 0 && i == 2) || (paginaCorrente == numPages - 1 && i == numPages - 3)){
			cssDisplay = '';
			arrayPagesVisible = new Array(paginaCorrente-1,paginaCorrente,paginaCorrente+1);
		}
		
		var etichetta = (paginaCorrente == i) ? '&nbsp;<b>' + idPage + '</b>&nbsp;' : '&nbsp;'+idPage+'&nbsp;';
		
		html += '<a  id="paginatore_classifica_'+targetDivId+'_'+i+'" '+cssDisplay+' href="javascript:void(0);" onclick="loadList(\''+ targetDivId +'\',\''+ callbackName +'\',\''+ callbackDetail +'\',\''+ filterParams +'\',\''+ localStart +'\',\''+ numResult +'\',\''+ order +'\');">'+etichetta+'</a>';
		localStart += parseInt(numResult);
	}
	html += '&nbsp;&nbsp;&nbsp;<img style="cursor:pointer; padding-left:3px;padding-right:3px;" src="img/p-next.gif" alt="next" title="next" onclick="scorriPagineLista(\'next\','+(numPages-1)+',\''+targetDivId+'\')" />&nbsp;&nbsp;&nbsp;';
	html += '<img style="cursor:pointer; padding-left:3px;padding-right:3px;" src="img/p-last.gif" alt="fine" title="fine" onclick="loadList(\''+ targetDivId +'\',\''+ callbackName +'\',\''+ callbackDetail +'\',\''+ filterParams +'\',\''+ lastPage +'\',\''+ numResult +'\',\''+ order +'\');" />&nbsp;&nbsp;&nbsp;</div>';
	return html;
}

function scorriPagineLista(direction,total,targetDivId){
	switch(direction){
		case 'prev':
			
			if(arrayPagesVisible[0] > 0){
				$('#paginatore_classifica_'+targetDivId+'_'+(arrayPagesVisible[0] - 1)).css('display','inline');
				$('#paginatore_classifica_'+targetDivId+'_'+(arrayPagesVisible[2])).css('display','none');
				arrayPagesVisible[0]--;
				arrayPagesVisible[1]--;
				arrayPagesVisible[2]--;
			}
			break;
		case 'next':
			if(arrayPagesVisible[2] < total){
				$('#paginatore_classifica_'+targetDivId+'_'+(arrayPagesVisible[2] + 1)).css('display','inline');
				$('#paginatore_classifica_'+targetDivId+'_'+(arrayPagesVisible[0])).css('display','none');
				arrayPagesVisible[0]++;
				arrayPagesVisible[1]++;
				arrayPagesVisible[2]++;
			}
			break;
	}
	
}

