/*
 * @file: dx_schemi.js
 * @author: Andrea Raggi
 * @date: 13/11/2008
 * 
 * @descr: 
 * File main per la gestione degli schemi gridev
 *
 * @require:
 *		- wizcommon.js
 *
 * 		- /dhtmlxgrid/dhtmlxcommon_mod.js
 *
 * 		- /dhtmlxgrid/dhtmlxgrid_mod.js
 * 		- /dhtmlxgrid/ext/dhtmlxgrid_srnd.js
 * 		- /dhtmlxgrid/ext/dhtmlxgrid_filter.js
 * 		- /dhtmlxgrid/ext/dhtmlxgrid_splt.js
 * 		- /dhtmlxgrid/ext/dhtmlxgrid_nxml.js
 * 		- /dhtmlxgrid/excells/dhtmlxgrid_excell_cntr.js
 * 		- /dhtmlxgrid/excells/dhtmlxgrid_excell_dec.js
 * 		- /dhtmlxgrid/excells/dhtmlxgrid_excell_combo.js
 *
 *		- /dhtmlxtreegrid/dhtmlxtreegrid.js
 *		- /dhtmlxtreegrid/ext/dhtmlxtreegrid_filter.js
 * 		- /dhtmlxtreegrid/ext/dhtmlxtreegrid_lines.js
 * 		- /dhtmlxdataprocessor/dhtmlxdataprocessor.js
 *
 * 		- /dhtmlxcombo/dhtmlxcombo_mod.js
 *
 * 		- /dhtmlxtoolbar/dhtmlxtoolbar_mod.js
 *
 * 		- /dhtmlxmenu/dhtmlxmenu.js
 *
 * 		- /dhtmlxtree/dhtmlxtree.js
 * 		- /dhtmlxtree/ext/dhtmlxtree_kn.js
*/

//Variabili di comodo 
var tmp_path_dx_lib = "/dx/common_lib";
dhtmlwindow_pathimagefiles = tmp_path_dx_lib;
var tmp_path_dx_lib_php = tmp_path_dx_lib + "/php_schemi";
var gridev_global_img_path = tmp_path_dx_lib + "/imgs/";
var gridev_mymenus_def_path_img   = tmp_path_dx_lib + "/dhtmlxmenu/imgs/";
var gridev_mytoolbar_def_path_img = tmp_path_dx_lib + "/dhtmlxtoolbar/imgs/";
var gridev_mytree_def_path_img = tmp_path_dx_lib + "/dhtmlxtree/imgs/csh_winstyle/";
var gridev_mygrid_def_path_img = tmp_path_dx_lib + "/dhtmlxgrid/imgs/";
var gridev_ignora_menu_css_loading=false;

var gridev_xml_conf_file = "gridev_config.xml";
var gridev_usa_debug = false;

var gridev_mygrid = new Array();
var gridev_mytree = new Array();
var gridev_mytoolbar = new Array();
var gridev_mycombo = new Array();
var gridev_myresearch = new Array();
var gridev_myjswindows = new Array();
var gridev_myframes = new Array();
var gridev_mycalendars = new Array();
var gridev_mymenus = new Array();

var gridev_myactions = new Array();
var gridev_mydataprocessor = new Array();

var gridev_cookieGester = null;
var gridev_ckName = "";

dhtmlxCalendarLangModules = new Array();
dhtmlxCalendarLangModules['it'] = {
        langname: 'it',
        dateformat: '%d/%m/%Y',
        monthesFNames: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"],
        monthesSNames: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"],
        daysFNames: ["Domenica", "Lunedi", "Martedi", "Mercoledi", "Giovedi", "Venerdi", "Sabato"],
        daysSNames: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa"],
        weekend: [0, 6],
        weekstart: 1,
        msgClose: "Chiudi",
        msgMinimize: "Minimizza",
        msgToday: "Oggi"
    };			

var dh_tmp_timer = null;
var tmp_timerFooterMex= null;
var dh_loader = null;

var loading_img_container = "WLAY_DIV_CARICAMENTO";
var usa_caricamento = false;
var gridMOUSEOVERCOLOR = "#FFFFC4";

var ext_fnz_onCreate = null;


function gridev_debuggaTxt(mex){
	if(!cm_useDebug){
		var tmp_new_txt = ""+mex;
		try{
			tmp_new_txt = (""+mex).replace(new RegExp( "<br>", "g" ), "\n");
		}
		catch(ex2){
			tmp_new_txt = ""+mex;
		}
		
		//Inizio Andrea Modifica - un alert su FF può dare problemi se ci troviamo in una callback ajax mentre loadiamo un'altra pagina 
		//alert("Errore!\n" + tmp_new_txt);
		h_ff_doAlertErr("Errore!\n" + tmp_new_txt);
		//Fine Andrea Modifica - un alert su FF può dare problemi se ci troviamo in una callback ajax mentre loadiamo un'altra pagina 
	}
	else cm_debuggaTxt(mex);
}

function gridev_debuggaTxtXml(mex){
	if(!cm_useDebug){
		var tmp_new_txt = ""+mex;
		try{
			tmp_new_txt = (""+mex).replace(new RegExp( "<br>", "g" ), "\n");
		}
		catch(ex2){
			tmp_new_txt = ""+mex;
		}
		tmp_new_txt = tmp_new_txt + "\nSi desidera visualizzare il file XML Di Configurazione ? ";
		var risp = confirm("Errore!\n" + tmp_new_txt);
		if(risp){
			var hh=window.screen.height;
			var ww=window.screen.width;

			var new_h = Math.round( (90 * (parseInt(""+hh)-5))/100 );
			var new_w = Math.round( (90 * (parseInt(""+ww)-5))/100 );

			var new_t = Math.round( (hh/2) - (new_h/2) );
			var new_l = Math.round( (ww/2) - (new_w/2) );
			
			var tmp_url = checkAndCacheUrl(""+gridev_xml_conf_file);
			window.open(tmp_url,"WinXMLConf",'status=yes,toolbar=yes,location=yes,resizable=yes,scrollbars=yes,menubar=yes,top='+new_t+',left='+new_l+',height='+new_h+',width='+new_w);
		}
	}
	else cm_debuggaTxt(mex);
}

//Funzione di inizializzazione ... prova a caricare il file xml
function inizializzaSchemaGridev(){	
	attivaDebug(gridev_usa_debug);
		
	try{
		if(gridev_xml_conf_file==""){
			gridev_fatalError("File XML Di Configurazione non specificato!");
			return;
		}
		window.setTimeout(gridev_startConfigLoading, 150);
	}
	catch(ex1){
		gridev_debuggaTxt("Errore durante inizializzaSchemaGridev = " + ex1.message);
	}
}
addCompatibleLoadListener(inizializzaSchemaGridev);

function purgeObjectJs(obj){
	if(obj.prototype){
		for(var p2 in obj.prototype){
			try{
				delete obj.prototype[p2];
			}
			catch(exIgn1){}
		}
		try{
			obj.prototype=null;
			delete obj.prototype;
		}
		catch(exIgn2){}
	}
	for(var p in obj){
		try{
			delete obj[p];
		}
		catch(exIgn3){}
	}
	try{
		obj=null;
		delete obj;
	}
	catch(exIgn4){}		
}

function purgeObject(obj) {
	try{
	    var a = obj.attributes, i, l, n;
	    if (a) {
	        l = a.length;
	        for (i = 0; i < l; i += 1) {
	            n = a[i].name;
	            if (typeof obj[n] === 'function') {
	                obj[n] = null;
	            }
	        }
	    }
	    a = obj.childNodes;
	    if (a) {
	        l = a.length;
	        for (i = 0; i < l; i += 1) {
	            purgeObject(obj.childNodes[i]);
	        }
	    }
	}
	catch(exIgn1){}
}

var gridev_myaddedEvent = new Array();

function gridev_pushEventObj(obj, actName, fnz){
	gridev_myaddedEvent[gridev_myaddedEvent.length] = new Array(obj, actName, fnz);
}

function terminaSchemaGridev(){
	var tmp_arr = null;
	for(var i=0; i < gridev_myaddedEvent.length; i++){
		tmp_arr = gridev_myaddedEvent[i];
		if(tmp_arr[0]){
			window.removeEvent(tmp_arr[0], tmp_arr[1], tmp_arr[2]);
		}
	}

	var tmpI = gridev_mygrid.length;
	for(var i=0; i < tmpI; i++){
		//elimino gridev obj, oggetto  html , e vari riferimenti
		if(gridev_mygrid[i]){
			try{
				if(typeof(gridev_mygrid[i].clearAll)!="undefined"){
					gridev_mygrid[i].clearAll(true);
				}
			}
			catch(exIgn1){}
			
		}

		//elimino elemento container 
		var tmpDiv = document.getElementById(""+gridev_mygrid[i]._PERSCONTAINER);
		if(tmpDiv){
			var pNd = tmpDiv.parentNode;
			if(pNd)pNd.removeChild(tmpDiv);
			pNd=null;
			purgeObject(tmpDiv);
		}
		
		purgeObjectJs(gridev_mygrid[i]);
		gridev_mygrid[i] = null;
		
	}
	
	tmpI = gridev_mytree.length;
	for(var i=0; i < tmpI; i++){
		//elimino gridev obj, oggetto  html , e vari riferimenti
		if(gridev_mytree[i]){
			try{
				if(typeof(gridev_mytree[i].destructor)!="undefined"){
					gridev_mytree[i].destructor();
				}
			}
			catch(exIgn1){}
		}
		
		//elimino elemento container 
		var tmpDiv = document.getElementById(""+gridev_mytree[i]._PERSCONTAINER);
		if(tmpDiv){
			var pNd = tmpDiv.parentNode;
			if(pNd)pNd.removeChild(tmpDiv);
			pNd=null;
			purgeObject(tmpDiv);
		}
		
		purgeObjectJs(gridev_mytree[i]);
		gridev_mytree[i] = null;
	}
	
	tmpI = gridev_mytoolbar.length;
	for(var i=0; i < tmpI; i++){
		//elimino gridev obj, oggetto  html , e vari riferimenti
		
		var tmpDiv = document.getElementById(""+gridev_mytoolbar[i]._PERSCONTAINER);
		if(tmpDiv){
			var pNd = tmpDiv.parentNode;
			if(pNd)pNd.removeChild(tmpDiv);
			pNd=null;
			purgeObject(tmpDiv);
		}
		
		purgeObjectJs(gridev_mytoolbar[i]);
		gridev_mytoolbar[i] = null;
	}
	
	tmpI = gridev_mycombo.length;
	for(var i=0; i < tmpI; i++){
		try{
		//elimino gridev obj, oggetto  html , e vari riferimenti
			if(gridev_mycombo[i]){
				gridev_mycombo[i].DOMelem.combo = null;
				gridev_mycombo[i].DOMelem._self = null;
				if(gridev_mycombo[i].DOMelem){
					if(gridev_mycombo[i].DOMelem.childNodes){
						for(var c=0; c < gridev_mycombo[i].DOMelem.childNodes.length;c++){
							var tmpObj = gridev_mycombo[i].DOMelem.childNodes[c];
							purgeObject(tmpObj);
							gridev_mycombo[i].DOMelem.removeChild(tmpObj);
							tmpObj = null;
							delete tmpObj;
						}
					}
				}
				purgeObject(gridev_mycombo[i].DOMelem);
				
				
				try{
					if(typeof(gridev_mycombo[i].destructor)!="undefined"){
						gridev_mycombo[i].destructor();
					}
				}
				catch(exIgn1){}
				
				if(gridev_mycombo[i].DOMelem){
					gridev_mycombo[i].DOMelem = null;
					delete gridev_mycombo[i].DOMelem;
				}
			}

			var tmpDiv = document.getElementById(""+gridev_mycombo[i]._PERSCONTAINER);
			if(tmpDiv){
				var pNd = tmpDiv.parentNode;
				if(pNd)pNd.removeChild(tmpDiv);
				tmpDiv=null;
				pNd=null;
			}
			gridev_mycombo[i] = null;
			//delete gridev_mycombo[i];
		}
		catch(exIgn2){
			//Inizio Andrea Modifica - un alert su FF può dare problemi se ci troviamo in una callback ajax mentre loadiamo un'altra pagina 
			//alert("Errore in ciclo elimina combo = " + exIgn2);
			h_ff_doAlertErr("Errore in ciclo elimina combo = " + exIgn2);
			//Fine Andrea Modifica - un alert su FF può dare problemi se ci troviamo in una callback ajax mentre loadiamo un'altra pagina 
		}
	}
	
	for(var i=0; i < gridev_myresearch.length; i++){
		//elimino gridev obj, oggetto  html , e vari riferimenti
		var tmpDiv = document.getElementById(""+gridev_myresearch[i][0]);
		if(tmpDiv){
			var pNd = tmpDiv.parentNode;
			if(pNd)pNd.removeChild(tmpDiv);
			tmpDiv=null;
			pNd=null;
		}
		purgeObjectJs(gridev_myresearch[i]);
		gridev_myresearch[i] = null;
		
	}
	for(var i=0; i < gridev_myjswindows.length; i++){
		//elimino gridev obj, oggetto  html , e vari riferimenti
		
	}
	for(var i=0; i < gridev_myframes.length; i++){
		//elimino gridev obj, oggetto  html , e vari riferimenti
		
	}
	for(var i=0; i < gridev_mycalendars.length; i++){
		//elimino gridev obj, oggetto  html , e vari riferimenti
		var tmpDiv = document.getElementById(""+gridev_mycalendars[i][0]);
		if(tmpDiv){
			var pNd = tmpDiv.parentNode;
			if(pNd)pNd.removeChild(tmpDiv);
			tmpDiv=null;
			pNd=null;
		}
		purgeObjectJs(gridev_mycalendars[i]);
		gridev_mycalendars[i] = null;
		
	}
	for(var i=0; i < gridev_mymenus.length; i++){
		//elimino gridev obj, oggetto  html , e vari riferimenti
		
	}
	for(var i=0; i < gridev_myactions.length; i++){
		//elimino gridev obj, oggetto  html , e vari riferimenti
		
	}
	for(var i=0; i < gridev_mydataprocessor.length; i++){
		//elimino gridev obj, oggetto  html , e vari riferimenti
		
	}
	
	gridev_mygrid = null;
	gridev_mytree = null;
	gridev_mytoolbar = null;
	gridev_mycombo = null;
	gridev_myresearch = null;
	gridev_myjswindows = null;
	gridev_myframes = null;
	gridev_mycalendars = null;
	gridev_mymenus = null;
	gridev_myactions = null;
	gridev_mydataprocessor = null;
	
	
	tmp_path_dx_lib = null;
	dhtmlwindow_pathimagefiles = null;
	tmp_path_dx_lib_php = null;
	gridev_global_img_path = null;
	gridev_mymenus_def_path_img   = null;
	gridev_mytoolbar_def_path_img = null;
	gridev_mytree_def_path_img = null;
	gridev_mygrid_def_path_img = null;
	gridev_ignora_menu_css_loading=null;

	gridev_xml_conf_file = null;
	gridev_usa_debug = null;

	gridev_cookieGester = null;
	gridev_ckName = null;

	dhtmlxCalendarLangModules = null;
	dh_tmp_timer = null;
	tmp_timerFooterMex= null;
	dh_loader = null;

	loading_img_container = null;
	usa_caricamento = null;
	gridMOUSEOVERCOLOR = null;
	ext_fnz_onCreate = null;	
}
addCompatibleUnLoadListener(terminaSchemaGridev);


function gridev_startConfigLoading(){
	try{
		cm_debuggaTxt("Inizio loadingConfig!");
		var tmp_url = checkAndCacheUrl(""+gridev_xml_conf_file);
		dh_loader = dhtmlxAjax.get(tmp_url, dh_configLoaded);
	}
	catch(ex1){
		gridev_debuggaTxt("Errore durante gridev_startConfigLoading = " + ex1.message);
	}
}

var conta_dh_configLoaded = 0;
function dh_configLoaded(loader){
	try{
		//if(dh_loader==null)
		dh_loader = loader;
		
		//if(dh_loader==null)
		dh_loader = loader;
		var tmp_responce_text = loader.xmlDoc.responseText;
		var tmp_responce_clear = trimSpecialChars(""+tmp_responce_text);
		
		var result_configuration = new Array(null);
		var conf = null;
		if(loader.xmlDoc.responseXML){
			result_configuration = dh_loader.doXPath("//gridev");
			conf = result_configuration[0];
		}
		
		if(!conf){
			if(tmp_responce_clear!=""){
				var t = new dtmlXMLLoaderObject(function(){
				});
				
				t.loadXMLString(tmp_responce_clear);
				dh_loader=t;
				result_configuration = dh_loader.doXPath("//gridev");
				var conf = result_configuration[0];
			}
		}
		
		if(conf){
			window.dhx_globalImgPath = ConfGetStringAttribute(conf,"global_img_path", gridev_global_img_path);
			usa_caricamento = ConfGetBooleanAttribute(conf, "use_loading_img", true);
			
			loading_img_container = ConfGetStringAttribute(conf, "loading_img_container", "DIV_CARICAMENTO");
			
			
			gridev_ckName = ConfGetStringAttribute(conf, "cookie_name", "gridev");
			if(gridev_ckName!=""){
				try{
					var tmp_url = "" + window.location;
					gridev_cookieGester = new jscCookieGester(gridev_ckName, getHostFromUrl(tmp_url), getDirnameFromUrl(tmp_url));
				}
				catch(ex2){
					cm_debuggaTxt("Errore in istanzia CookieGester = " + getEx(ex2));
				}
			}
			
			mostra_caricamento();
		}
		dh_tmp_timer=window.setTimeout(dh_configLoaded_Start, 100);
	}
	catch(ex1){
		gridev_debuggaTxtXml("Errore nel programma n.01. XML Di Configurazione ERRATO.<br> Errore:" + ex1);
		nascondi_caricamento();
	}
}

function dh_configLoaded_Start(){
	if(dh_tmp_timer)clearTimeout(dh_tmp_timer);
	if(dh_loader==null)return;
	var txt_obj_failed = "gridev";
	try{
		var result_configuration = dh_loader.doXPath("//gridev");
		var conf = result_configuration[0];
		var tmp_txt = "XML INVALIDO";
		if(conf){
			var esito = true;
			txt_obj_failed = "gridev action_function";
			
			var tmp_act = dh_loader.doXPath("//gridev/action_function"); 
			if(tmp_act){
				if(tmp_act.length>=1)esito = gridev_creaAction(tmp_act);
			}	
			var tmp_win = dh_loader.doXPath("//gridev/jswindow");
			if(tmp_win){
				txt_obj_failed="gridev jswindow";
				if(tmp_win.length>=1)esito = gridev_creaWin(tmp_win);
			}

			if(esito){
				txt_obj_failed="gridev calendar";
				var tmp_cal = dh_loader.doXPath("//gridev/calendar");
				if(tmp_cal){
					if(tmp_cal.length>=1)esito = gridev_creaCalendars(tmp_cal);
				}
			}
			

			if(esito){
				txt_obj_failed="gridev menu";
				var tmp_men = dh_loader.doXPath("//gridev/menu");
				if(tmp_men){
					if(tmp_men.length>=1)esito = gridev_creaMenu(tmp_men);
				}
			}
			
			if(esito){
				txt_obj_failed="gridev iframe";
				var tmp_frm = dh_loader.doXPath("//gridev/iframe");
				if(tmp_frm){
					if(tmp_frm.length>=1)esito = gridev_creaIFrames(tmp_frm);
				}
			}

			// Proseguo con configurazione altri componenti 
			if(esito){
				txt_obj_failed="gridev toolbar";
				var tmp_tool = dh_loader.doXPath("//gridev/toolbar");
				if(tmp_tool){
					if(tmp_tool.length>=1)esito = gridev_creaTool(tmp_tool);
				}
			}

			if(esito){
				txt_obj_failed="gridev treeview";
				tmp_txt = "";
				var tmp_tree = dh_loader.doXPath("//gridev/treeview");
				if(tmp_tree){
					if(tmp_tree.length>=1)esito = gridev_creaTree(tmp_tree);
				}
			}

			if(esito){
				txt_obj_failed="gridev grid";
				var tmp_grid = dh_loader.doXPath("//gridev/grid");
				if(tmp_grid){
					if(tmp_grid.length>=1)esito = gridev_creaGrid(tmp_grid);
				}
			}

			if(esito){
				txt_obj_failed="gridev research_field";
				var tmp_research = dh_loader.doXPath("//gridev/research_field");
				if(tmp_research){
					if(tmp_research.length>=1)esito = gridev_creaResearch(tmp_research);
				}
			}

			if(esito){
				txt_obj_failed="gridev combobox";
				var tmp_combobox = dh_loader.doXPath("//gridev/combobox");
				if(tmp_combobox){
					if(tmp_combobox.length>=1)esito = gridev_creaCombo(tmp_combobox);
				}
			}
			
			if(esito){
				txt_obj_failed="gridev dataprocessor";
				var tmp_dtproc = dh_loader.doXPath("//gridev/dataprocessor");
				if(tmp_dtproc){
					if(tmp_dtproc.length>=1)esito = gridev_creaDataProcessor(tmp_dtproc);
				}
			}
			//Termino
		}
		//nascondi_caricamento();
	}
	catch(ex1){
		
		gridev_debuggaTxtXml("Errore nel programma n.02. XML Di Configurazione ERRATO.<br> Errore:" + getEx(ex1) + " . Avvenuto in fase di elaborazione di: " + txt_obj_failed);
		//nascondi_caricamento();
		return;
	}
	if(!esito){
		if(tmp_txt!=""){
			var tmp_txt = "Errore nel programma n.03. XML Di Configurazione ERRATO.<br> Url:" + gridev_xml_conf_file + " <br>probabile tag errato = " + txt_obj_failed;
			gridev_debuggaTxtXml(tmp_txt);
		}
		else gridev_debuggaTxtXml("Errore nel programma n.04. XML Di Configurazione ERRATO.<br>  Probabile tag errato :" + txt_obj_failed);
	}
	dh_tmp_timer=window.setTimeout(dh_configLoaded_End, 10);
	
}
function dh_configLoaded_End(){
	if(dh_tmp_timer)clearTimeout(dh_tmp_timer);
	if(dh_loader==null)return;
	
	//REGISTRO VARIABILI SU COOKIE
	if(gridev_cookieGester!=null){
		gridev_cookieGester.loadCookie();
	}
	
	try{		
		for(var i = 0; i < gridev_mygrid.length; i++){
			if(gridev_mygrid[i]._PERSLOADONSTART==true){
				doLoadGrid(gridev_mygrid[i]);
			}
			gridev_mygrid[i].setSizes();
		}
		for(var i =0;i<gridev_myjswindows.length;i++){
			if(gridev_myjswindows[i]._PERSLOADONSTART==true){
				gridev_myjswindows[i].show();
			}
		}
		for(var i =0;i<gridev_myframes.length;i++){
			if(gridev_myframes[i]._PERSLOADONSTART==true){
				doLoadIFrame(gridev_myframes[i]);
			}
		}

		//GESTISCO COOKIE GET VALUE
		if(gridev_cookieGester!=null){
			
			//EFFETTUO SU COMBO (se sono state già caricate)
			for(var i =0;i<gridev_mycombo.length;i++){
				if(gridev_mycombo[i]._PERSUSECOOKIE==true){
					if(gridev_mycombo[i]._PERSUSECOOKIEDONE==false){
						if(gridev_mycombo[i].optionsArr.length>0){
							//cerco di ottenere il cookie
							var tmp_val = gridev_cookieGester.getParam(gridev_mycombo[i]._PERSNAME);
							if(tmp_val!=""){
								var tmp_valInt = parseInt(""+ tmp_val, 10);
								try{
									combo_selezionaOpzioneByValue(gridev_mycombo[i]._PERSNAME, tmp_valInt);
									gridev_mycombo[i]._PERSUSECOOKIEDONE=true;
								}
								catch(exIgn1){
									cm_debuggaTxt("Errore in seleziona index[" + tmp_valInt + "] per combo[" + gridev_mycombo[i]._PERSNAME + "] da cookie = " + getEx(exIgn1));
								}
							}
						}
					}
				}
			}

			//EFFETTUO SU COMBO (se sono state già caricate)
			for(var i =0;i<gridev_myresearch.length;i++){
				if(gridev_myresearch[i]._PERSUSECOOKIE==true){
					if(gridev_myresearch[i]._PERSUSECOOKIEDONE==false){
						var tmp_val = gridev_cookieGester.getParam(gridev_myresearch[i]._PERSNAME);
						if(tmp_val!=""){
							try{
								research_setValue(gridev_myresearch[i]._PERSNAME, tmp_val);
								gridev_myresearch[i]._PERSUSECOOKIEDONE=true;
							}
							catch(exIgn1){
								cm_debuggaTxt("Errore in seleziona index[" + tmp_valInt + "] per research[" + gridev_myresearch[i]._PERSNAME + "] da cookie = " + getEx(exIgn1));
							}
						}
					}
				}
			}
			
		}
		
		
		//Inizio Modifica Andrea Per Differenziare eventi keydown su filtri grid
		//provo a recuperare filtri grid
		for(var i = 0; i < gridev_mygrid.length; i++){
		 	for(var c=0;c<gridev_mygrid[i]._PERSEVENTFILTER.length;c++){
				// gridev_mygrid[i]._PERSEVENTFILTER[c][0] > id
				// gridev_mygrid[i]._PERSEVENTFILTER[c][1] > true/false (true = su enter, false=su tasto )
				var tmp_obj = document.getElementById(""+gridev_mygrid[i]._PERSEVENTFILTER[c][0]);
				if(tmp_obj){
		 			var tmp_fn = window.addEvent(tmp_obj, 'keyup',function(e) {
						var elm = e.target || e.srcElement;
						if(elm){
							if(elm.id){
								var tmp_usaEnter=false;
								if(elm.getAttribute("persfilterkey")){
									if(elm.getAttribute("persfilterkey")=="true")tmp_usaEnter=true;
								}
								var tmp_gridname = "";
								if(elm.getAttribute("persgridname")){
									tmp_gridname=elm.getAttribute("persgridname");
								}
								
								if(tmp_gridname=="")return;
								
								if(tmp_usaEnter==true){
									if(cm_isEnter(getCompatibleKeyCode(e))){
										gridev_filtro_onKeyEnterPress(tmp_gridname);
									}
								}
								else {
									gridev_filtro_onKeyUp(tmp_gridname, elm.id, elm.value, elm._PERSOLDVALUE);
								}
							}
						}
		 			});
		 			gridev_pushEventObj(tmp_obj, 'keyup', tmp_fn);
		 			
		 			var tmp_fn2 = window.addEvent(tmp_obj, 'focus',function(e) {
						var elm = e.target || e.srcElement;
						if(elm){
							if(elm.id){
								elm._PERSOLDVALUE = elm.value;
							}
		 				}
		 			});
		 			gridev_pushEventObj(tmp_obj, 'focus', tmp_fn2);
		 					 			
				}
			}
			gridev_mygrid[i]._PERSEVENTFILTER=null;
		}
		//Fine Modifica Andrea Per Differenziare eventi keydown su filtri grid

		
		//Richiamo gridev_myactions
		var tmp_fnz = ottieniCodicePersFunctFromArray(gridev_myactions, "onEnd");
	
		if(tmp_fnz!=""){
			window.setTimeout(function(){ 
				try{
					eval(""+trimSpecialChars(tmp_fnz)); 
				}
				catch(ex1){
					gridev_debuggaTxt("Errore on eval gridev onEnd  = " + getEx(ex1));
				}
			}, 10);
		}
		
	}
	catch(ex1){
		gridev_debuggaTxt("Errore on dh_configLoaded_End = " + ex1);
	}
	nascondi_caricamento();
	dh_loader = dh_loader.destructor();
}

function gridev_creaAction(conf){
	gridev_myactions = new Array();
	var esito = true;
	var tmp_i = -1;
	for(var i =0;i<conf.length;i++){
		if(ConfGetBooleanAttribute(conf[i],"deleted_tag", false)==true)continue;
		
		tmp_i++;
		var tmp_id = ConfGetStringAttribute(conf[i], "id", "");
		if(tmp_id==""){
			gridev_fatalError("Errore in XML di Configurazione!\nManca attributo id per tag action_function!!");
			return false;
		}
		if(conf[i].childNodes){
			var tmp_dt = ottieniConfData(conf[i].childNodes[0].data);
			if(tmp_dt!="")gridev_myactions[gridev_myactions.length]=new Array(tmp_id, tmp_dt);
		}
	}
	return esito;
}

function gridev_creaWin(conf){
	var esito = true;
	var tmp_i = -1;
	for(var i =0;i<conf.length;i++){
		if(ConfGetBooleanAttribute(conf[i],"deleted_tag", false)==true)continue;

		tmp_i++;
		if(ConfGetStringAttribute(conf[i], "name")==""){
			gridev_fatalError("Errore in XML di Configurazione!\nManca attributo name per tag window!!");
			return false;
		}
		var tmp_modal = ConfGetBooleanAttribute(conf[i], "modal", false);
		var tmp_scroll = ConfGetBooleanAttribute(conf[i], "scroll", true);
		var tmp_showOnStart = ConfGetBooleanAttribute(conf[i], "show_on_start", false);
		var tmp_resize = ConfGetBooleanAttribute(conf[i], "resize", true);
		var tmp_close = ConfGetBooleanAttribute(conf[i], "close", true);
		var tmp_name = ConfGetStringAttribute(conf[i], "name");
		var tmp_title = ConfGetStringAttribute(conf[i], "title", "Untitled");
		
		var tmp_url = "";
		var act_fnz = new Array();
		
		for(var c=0;c<conf[i].childNodes.length;c++){
			if(!conf[i].childNodes[c].childNodes)continue;
			if(conf[i].childNodes[c].childNodes.length==0)continue;
			var tmp_dt = ottieniConfData(conf[i].childNodes[c].childNodes[0].data);
			
			switch(conf[i].childNodes[c].nodeName){
				case "url":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					if(tmp_dt==""){
						gridev_fatalError("Errore in XML di Configurazione!\nManca attributo url per tag window!!");
						return false;
					}
					tmp_url = tmp_dt;
					break;
				case "action_function":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					var tmp_id = ConfGetStringAttribute(conf[i].childNodes[c], "id", "");
					if((tmp_id!="")&&(tmp_dt!="")){
						act_fnz[act_fnz.length]=new Array(tmp_id, tmp_dt);
					}
					break;
			}
		}
		var tmp_top = ConfGetIntAttribute(conf[i], "top", 5);
		var tmp_left = ConfGetIntAttribute(conf[i], "left", 5);
		var tmp_width = ConfGetIntAttribute(conf[i], "width", 150);
		var tmp_height = ConfGetIntAttribute(conf[i], "height", 150);

		var parametri_win = "";
		parametri_win = parametri_win + "top=" + tmp_top + "px,";
		parametri_win = parametri_win + "left=" + tmp_left + "px,";
		parametri_win = parametri_win + "width=" + tmp_width + "px,";
		parametri_win = parametri_win + "height=" + tmp_height + "px,";
		
		parametri_win = parametri_win + "resize=" +((tmp_resize)? "1" : "0") +  ",";
		parametri_win = parametri_win + "scroll=" + ((tmp_scroll)? "1" : "0");
		//cm_debuggaTxt("parametri_win = " + parametri_win);
		
		try{
			if(tmp_modal==true){
				gridev_myjswindows[tmp_i]=dhtmlmodal.open(tmp_name, "iframe", tmp_url, tmp_title, parametri_win, null, false, true);
			}
			else{
				gridev_myjswindows[tmp_i]=dhtmlwindow.open(tmp_name, "iframe", tmp_url, tmp_title, parametri_win, null, true);
			}
		}
		catch(exIgn1){
			//occorre creare nell'html
			//<div id="dhtmlwindowholder"><span style="display:none">.</span></div>
			//<div id="interVeil" class="interVeil"></div>
			gridev_debuggaTxt("Errore in istanzia windows = " + getEx(exIgn1));
		}
				
		
		//cm_debuggaTxt("myjswindow is resize = " + gridev_myjswindows.isResize(gridev_myjswindows));
		gridev_myjswindows[tmp_i]._PERSNAME = tmp_name;
		gridev_myjswindows[tmp_i]._PERSACTFNZ = act_fnz;
		gridev_myjswindows[tmp_i].onclose=function(){ 
			try{
				gridev_onJsWindowClose(this._PERSNAME);
			}
			catch(exIgn1){}
			return true;
		}
		gridev_myjswindows[tmp_i].oncontentloaded=function(){ 
			try{
				gridev_onJsWindowContentLoaded(this._PERSNAME);
			}
			catch(exIgn1){}
			return true;
		}
		gridev_myjswindows[tmp_i]._PERSMODAL  = tmp_modal;
		gridev_myjswindows[tmp_i]._PERSSCROLL = tmp_scroll;
		gridev_myjswindows[tmp_i]._PERSRESIZE = tmp_resize;
		gridev_myjswindows[tmp_i]._PERSTITLE = tmp_title;
		gridev_myjswindows[tmp_i]._PERSURL = tmp_url;

		gridev_myjswindows[tmp_i]._PERSTOP = tmp_top;
		gridev_myjswindows[tmp_i]._PERSLEFT = tmp_left;
		gridev_myjswindows[tmp_i]._PERSHEIGHT = tmp_height;
		gridev_myjswindows[tmp_i]._PERSWIDTH = tmp_width;
		gridev_myjswindows[tmp_i]._PERSLOADONSTART = tmp_showOnStart;
		gridev_myjswindows[tmp_i].hadCloseButton(tmp_close);
	}
	return esito;	
}



function gridev_creaCalendars(conf){
	var esito = true;
	var tmp_i = -1;
	for(var i =0;i<conf.length;i++){
		if(ConfGetBooleanAttribute(conf[i],"deleted_tag", false)==true)continue;

		tmp_i++;
		if(ConfGetStringAttribute(conf[i], "name")==""){
			gridev_fatalError("Errore in XML di Configurazione!\nManca attributo name per tag calendar!!");
			return false;
		}
		
		var tmp_container = ConfGetStringAttribute(conf[i], "container");
		
		if(tmp_container==""){
			//procedo a creare io il container sul document
			var tmp_div = document.createElement("DIV");
			tmp_div.innerHTML='<div id="DX_CALD'+ConfGetStringAttribute(conf[i], "name")+'" style="display:none;position:absolute;left:5px;top:5px;width:300px;height:300px;"></div>';
			var tmp_div2 = tmp_div.childNodes[0];
			tmp_container = 'DX_CALD'+ConfGetStringAttribute(conf[i], "name");
			gridev_bodyAppendObject(tmp_div2, document);
			//gridev_fatalError("Errore in XML di Configurazione!\nManca attributo container per tag calendar!!");
			return false;
		}
		
		if(!(document.getElementById(tmp_container))){
			gridev_fatalError("Errore in XML di Configurazione!\nOggetto container per tag calendar non esiste sulla pagina html!");
			return false;
		}

		//Inizio Modifica Andrea - (210109) gestione calendar su edit grid (stoppo propagazione evento onclick sul div contenitore del calendario)
		var tmp_CaldCont = document.getElementById(tmp_container);
		tmp_CaldCont.onclick = function(e){ 
			e = e||event;
			if (e.stopPropagation) e.stopPropagation();
			else e.cancelBubble = true;		
		};
		//Fine Modifica Andrea - (210109) gestione calendar su edit grid (stoppo propagazione evento onclick sul div contenitore del calendario)
		
		
		var tmp_name = ConfGetStringAttribute(conf[i], "name");
		var tmp_year_editable = ConfGetBooleanAttribute(conf[i], "is_year_editable", true);
		var tmp_month_editable = ConfGetBooleanAttribute(conf[i], "is_month_editable", false);
		var tmp_win_header = ConfGetBooleanAttribute(conf[i], "is_win_header", true);
		var tmp_draggable = ConfGetBooleanAttribute(conf[i], "draggable", false);
		var tmp_lang_italian = ConfGetBooleanAttribute(conf[i], "lang_italian", true);
		var tmp_close_button = ConfGetBooleanAttribute(conf[i], "close_button", true);
		var tmp_today_button = ConfGetBooleanAttribute(conf[i], "today_button", true);
		
		var tmp_close_onBoody = ConfGetBooleanAttribute(conf[i], "close_on_bodyclick", false);
		
		var tmp_header_buttons = "";
		if(tmp_close_button)tmp_header_buttons=tmp_header_buttons+ "X";
		if(tmp_today_button)tmp_header_buttons=tmp_header_buttons+ "T";
		var tmp_params = {
			isYearEditable:tmp_year_editable,
			isMonthEditable:tmp_month_editable,
			isWinHeader:tmp_win_header,
			headerButtons:tmp_header_buttons,
			isWinDrag:tmp_draggable
		};

		gridev_mycalendars[tmp_i] = new dhtmlxCalendarObject(ConfGetStringAttribute(conf[i], "container"),true, tmp_params);
		gridev_mycalendars[tmp_i]._PERSNAME = tmp_name;
		gridev_mycalendars[tmp_i]._PERSCONTAINER = ConfGetStringAttribute(conf[i], "container", "");
		gridev_mycalendars[tmp_i]._clearHeaderButtons=false;
		gridev_mycalendars[tmp_i]._PERSATTACHEDID = "";
		gridev_mycalendars[tmp_i]._PERSISONFILTRI=false;
		
		gridev_mycalendars[tmp_i]._PERSHEADERBUTTON = tmp_header_buttons;
		gridev_mycalendars[tmp_i]._PERSDRAGGABLE = tmp_draggable;
		gridev_mycalendars[tmp_i]._PERSDHEADERVIS = tmp_win_header;
		gridev_mycalendars[tmp_i]._PERSCLOSEONBODYCLICK = tmp_close_onBoody;
		
		gridev_mycalendars[tmp_i].options.weekstart=1;
		var tmp_dateFormat = "%d/%m/%Y";
		var tmp_yearsRange = "";
		var tmp_headerTitle = "";
		
		for(var c=0;c<conf[i].childNodes.length;c++){
			if(!conf[i].childNodes[c].childNodes)continue;
			if(conf[i].childNodes[c].childNodes.length==0)continue;
			var tmp_dt = ottieniConfData(conf[i].childNodes[c].childNodes[0].data);
			
			switch(conf[i].childNodes[c].nodeName){
				case "defDateFormat":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					if(tmp_dt!=""){
						tmp_dateFormat = tmp_dt;
					}					
					break;
				case "yearsRange":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					if(tmp_dt!=""){
						tmp_yearsRange = tmp_dt;
					}
					break;
				case "headerTitle":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					if(tmp_dt!=""){
						tmp_headerTitle = tmp_dt;
					}
					break;
			}
		}
		
		if(tmp_lang_italian)gridev_mycalendars[tmp_i].loadUserLanguage("it");
		
		gridev_mycalendars[tmp_i].setDateFormat(tmp_dateFormat);
		gridev_mycalendars[tmp_i]._PERSDATEFORMAT = tmp_dateFormat;
		
		gridev_mycalendars[tmp_i].setYearsRange(tmp_yearsRange);
		gridev_mycalendars[tmp_i].winTitle = tmp_headerTitle;
		
		gridev_mycalendars[tmp_i].attachEvent("onClick", function(valDate){

			//Se c'è un oggetto id attaccato, procedo a settare la data
			if(this._PERSATTACHEDID!=""){
				// Setto la data
				var tmp_dtForm = this.getFormatedDate(this.options.dateformat, valDate);
				var tmp_obj = document.getElementById(this._PERSATTACHEDID);
				if(tmp_obj)tmp_obj.value = tmp_dtForm;				
				this.hide();
				
				//Provo a recuperare l'oggetto se è fra i research_field
				
				var tmp_nameId = this._PERSATTACHEDID;
				if(this._PERSISONFILTRI==true){
					window.setTimeout(function(){
						gridev_filtrogrid_chiusoCalendar(tmp_nameId);
						//Inizio Modifica Andrea - gestisco evento onKeyEnterPress su campo data anche per la data scelta dal calendario
						gridev_filtrogrid_endDataInsert(document.getElementById(tmp_nameId), true);
						//Fine Modifica Andrea - gestisco evento onKeyEnterPress su campo data anche per la data scelta dal calendario
					},10);
			
				}
				else{
					window.setTimeout(function(){
						gridev_research_chiusoCalendar(tmp_nameId);
						//Inizio Modifica Andrea - gestisco evento onKeyEnterPress su campo data anche per la data scelta dal calendario
						gridev_research_endDataInsert(document.getElementById(tmp_nameId), true);
						//Fine Modifica Andrea - gestisco evento onKeyEnterPress su campo data anche per la data scelta dal calendario
					},10);
				
				}
				return true;				
			}
			//Inizio Modifica Andrea - (210109) gestione calendar su edit grid
			else{
				if(this._PERSATTACCHEDFNZ){
					try{
						var tmp_dtForm = this.getFormatedDate(this.options.dateformat, valDate);
						this._PERSATTACCHEDFNZ(tmp_dtForm);
					}
					catch(ex1){
						gridev_debuggaTxt("Errore in tentativo di eval di = " + this._PERSATTACCHEDFNZ);
					}
				}
				return true;
			}
			//Fine Modifica Andrea - (210109) gestione calendar su edit grid
		});

		gridev_mycalendars[tmp_i].attachEvent("onClose", function(){
			this.hide();
			//Inizio Modifica Andrea - (210109) gestione calendar su edit grid
			if(this._PERSATTACCHEDFNZ){
				try{
					var tmp_dtForm = this.getFormatedDate(this.options.dateformat, valDate);
					this._PERSATTACCHEDFNZ(tmp_dtForm);
				}
				catch(ex1){
					gridev_debuggaTxt("Errore in tentativo di eval 2 di = " + this._PERSATTACCHEDFNZ);
				}
			}
			//Fine Modifica Andrea - (210109) gestione calendar su edit grid
		});
		gridev_mycalendars[tmp_i].attachEvent("onChangeMonth", function(curMonth,prevMonth){
			// Utilizzare se si desidera effettuare operazioni a fronte del cambio mese
			// Ad esempio settare le date dei giorni festivi
		});
		

	}

	//Aggiungo ascoltatore di eventi per il click del body che vada a nascondere il calendario aperto
	//qualora ne trovi uno (aperto ovviamente) e che abbia l'attributo close_on_bodyclick a true
	var fnz1 = window.addEvent(document.body, 'click', function(e) {
		try{
			var elm = e.target || e.srcElement;

			if(elm){
				//ottengo calendario aperto
				var cnt_fnd = "";
				for(var i = 0 ; i < gridev_mycalendars.length; i++){
					if(gridev_mycalendars[i]){
						if(gridev_mycalendars[i].isVisible()){
							if(gridev_mycalendars[i]._PERSCLOSEONBODYCLICK==true){
								cnt_fnd = gridev_mycalendars[i];
								break;
							}
						}
					}
				}
				if(cnt_fnd=="")return;
				
				//risalgo da elm fino a parent 
			    var temp = elm.parentNode;
			    var tmp_fnd = false;
    			while (temp != null) {
    				if(temp==null)break;
    				if(typeof (temp.id)=="undefined")break;
    				if(temp.id==""+cnt_fnd._PERSCONTAINER){
    					tmp_fnd=true;
    					break;
    				}
    				temp=temp.parentNode;
    			}
				if(tmp_fnd==true)return;
				if(elm.className){
					if(elm.className=="planeMonth")return;
					if(elm.className=="planeYear")return;
					if(elm.className=="winTitle")return;
					
				}
				if(elm.id){
					var tmp_txt = ""+elm.id;
					if(endsWith(tmp_txt, "_CALDIMG")){
						return;
					}
				}				
				if(cnt_fnd)cnt_fnd.hide();
			}
		}
		catch(ex1){}
	});
	gridev_pushEventObj(document.body, 'click', fnz1);
	
	return esito;	
}


function gridev_creaMenu(conf){
	
	var esito = true;
	var tmp_i = -1;
	for(var i =0;i<conf.length;i++){
		if(ConfGetBooleanAttribute(conf[i],"deleted_tag", false)==true)continue;

		tmp_i++;
		if(ConfGetStringAttribute(conf[i], "name")==""){
			gridev_fatalError("Errore in XML di Configurazione!\nManca attributo name per tag menu!!");
			return false;
		}
		var tmp_skin = ConfGetStringAttribute(conf[i], "skin", "standard");
		
		if(tmp_skin!="standard"){
			if(!gridev_ignora_menu_css_loading){
				var theRules = new Array();
				if(document.styleSheets){
					//Provo ad aggiungere lo stylesheet della skin automaticamente 
					var tmp_pathcss = tmp_path_dx_lib + "/dhtmlxmenu/skins/";
					var tmp_fnd = false;
					for(var z =0 ; z < document.styleSheets.length; z++){
						var stsh = document.styleSheets[z];
						if(stsh.href){
							var tmp_nomeFile = getFileFromUrl(""+stsh.href);
							if(startsWith(""+tmp_nomeFile, "dhtmlxmenu_")){
								if(endsWith(""+tmp_nomeFile, ".css")){
									tmp_pathcss = (""+stsh.href).replace(tmp_nomeFile , "");
								}
							}
							if(tmp_nomeFile==("dhtmlxmenu_" + tmp_skin + ".css")){
								tmp_fnd=true;
							}
						}
					}
					
					if(tmp_fnd==false){
						includeCSSFile(tmp_pathcss + "dhtmlxmenu_" + tmp_skin + ".css");
					}
				}
			}
		}
		
		var tmp_objDiv = null;
		if(ConfGetStringAttribute(conf[i], "container", "")!=""){
			tmp_objDiv = document.getElementById(""+ConfGetStringAttribute(conf[i], "container", ""));
			if(!tmp_objDiv)tmp_objDiv=null;
		}
		gridev_mymenus[tmp_i] = new dhtmlXMenuObject(tmp_objDiv, tmp_skin);
	    
		gridev_mymenus[tmp_i]._PERSNAME = ConfGetStringAttribute(conf[i], "name");
		gridev_mymenus[tmp_i]._PERSCONTAINER = ConfGetStringAttribute(conf[i], "name");
		if(ConfGetStringAttribute(conf[i], "container", "")!=""){
			gridev_mymenus[tmp_i]._PERSCONTAINER = tmp_objDiv.id;
		}
		
		var tmp_imgPath = ConfGetStringAttribute(conf[i], "img_path", gridev_mymenus_def_path_img);
		gridev_mymenus[tmp_i].setImagePath(tmp_imgPath);

		var tmp_imgIcoPath = ConfGetStringAttribute(conf[i], "img_ico_path", gridev_global_img_path);
		gridev_mymenus[tmp_i].setIconsPath(tmp_imgIcoPath);
		
		if(gridev_mymenus[tmp_i]._PERSCONTAINER==gridev_mymenus[tmp_i]._PERSNAME){
		    gridev_mymenus[tmp_i].renderAsContextMenu();
		}
	    gridev_mymenus[tmp_i].setOpenMode("web");
	    
		var act_fnz = new Array();
		var act_itm = new Array();

		var ciclaPerFigli = function(itm){
			
			var tmp_arrNodi = new Array();
			
			for(var c=0;c<itm.childNodes.length;c++){
				if(itm.childNodes[c].nodeName=="item"){
					var tmp_nodo = {};
					tmp_nodo._child = new Array();
					
					var tmp_id = ConfGetStringAttribute(itm.childNodes[c], "id", "");
					if(tmp_id==""){
						gridev_fatalError("Errore in XML di Configurazione!\nManca attributo id per tag item su menu!!");
						return false;
					}
					tmp_nodo._id = tmp_id;
					tmp_nodo._type = ConfGetStringAttribute(itm.childNodes[c], "type", "button");
					tmp_nodo._enabled = ConfGetBooleanAttribute(itm.childNodes[c], "enabled", true);
					tmp_nodo._child = ciclaPerFigli(itm.childNodes[c]);
					tmp_nodo._tooltip = "";
					tmp_nodo._descr = "Voce di menu";
					tmp_nodo._imgEn = "";
					tmp_nodo._imgDis = "";
					
					var new_conf = itm.childNodes[c];
					for(var z=0;z<new_conf.childNodes.length;z++){
						if(!new_conf.childNodes[z].childNodes)continue;
						if(new_conf.childNodes[z].childNodes.length==0)continue;
						var tmp_dt = ottieniConfData(new_conf.childNodes[z].childNodes[0].data);
						
						switch(new_conf.childNodes[z].nodeName){
							case "descr":
								tmp_nodo._descr = tmp_dt;
								break;
							case "img_en":
								tmp_nodo._imgEn = tmp_dt;
								break;
							case "img_dis":
								tmp_nodo._imgDis = tmp_dt;
								break;
							case "tooltip":
								if(tmp_dt!=""){
									tmp_nodo._tooltip = tmp_dt;
								}
								break;
						}
					}
					if(tmp_nodo._imgDis=="")tmp_nodo._imgDis = tmp_nodo._imgEn;
					tmp_arrNodi[tmp_arrNodi.length] = tmp_nodo;
				}
			}
			return tmp_arrNodi;
		};
		var itemNodo = ciclaPerFigli(conf[i]);
		

		var ciclaPerFigliDHTMLX = function(menu, itm, pNode){
			var tmp_oldSibl = null;
			for(var i=0; i < itm.length;i++){
				try{
					
					if(itm[i]._type=="separator"){
						menu.addNewSeparator(tmp_oldSibl, itm[i]._id);
					}
					
					if(itm[i]._type=="button"){
						menu.addNewChild(pNode, i, itm[i]._id, itm[i]._descr, !(itm[i]._enabled), itm[i]._imgEn, itm[i]._imgDis);
						if(itm[i]._tooltip){
							menu.setTooltip(itm[i]._id, itm[i]._tooltip);
						}
						if(itm[i]._child){
							if(itm[i]._child.length>=1){
								ciclaPerFigliDHTMLX(menu, itm[i]._child, itm[i]._id);
							}
						}
					}
					tmp_oldSibl = itm[i]._id;
				
				}catch(ex1){
					gridev_debuggaTxt("Errore in creazione menu!!! = " + getEx(ex1));
				}

			}
		};
		
		ciclaPerFigliDHTMLX(gridev_mymenus[tmp_i], itemNodo);

		var act_fnz = new Array();
		for(var c=0;c<conf[i].childNodes.length;c++){
			if(!conf[i].childNodes[c].childNodes)continue;
			if(conf[i].childNodes[c].childNodes.length==0)continue;
			var tmp_dt = ottieniConfData(conf[i].childNodes[c].childNodes[0].data);
			
			if(conf[i].childNodes[c].nodeName=="action_function"){
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					var tmp_id = ConfGetStringAttribute(conf[i].childNodes[c], "id", "");
					if((tmp_id!="")&&(tmp_dt!="")){
						act_fnz[act_fnz.length]=new Array(tmp_id, tmp_dt);
					}
				
			}
		}
		
		gridev_mymenus[tmp_i]._PERSACTFNZ = act_fnz;
		
		gridev_mymenus[tmp_i].attachEvent("onClick", function(itemId, zoneId){
			gridev_onMenuClick(this._PERSNAME, itemId, zoneId);
    	});
    	
    	
	}
	return esito;	
}

function gridev_creaIFrames(conf){
	var esito = true;
	var tmp_i = -1;
	for(var i =0;i<conf.length;i++){
		if(ConfGetBooleanAttribute(conf[i],"deleted_tag", false)==true)continue;

		tmp_i++;
		if(ConfGetStringAttribute(conf[i], "name")==""){
			gridev_fatalError("Errore in XML di Configurazione!\nManca attributo name per tag iframes!!");
			return false;
		}
		var tmp_id = ConfGetStringAttribute(conf[i], "id", "");
		if(tmp_id==""){
			gridev_fatalError("Errore in XML di Configurazione!\nManca attributo id per tag iframes!!");
			return false;
		}
		
		if(!(document.getElementById(tmp_id))){
			gridev_fatalError("Errore in XML di Configurazione!\nAttributo id (" + tmp_id + ") per tag iframes, non esiste in HTML");
			return false;			
		}
		
		var tmp_showOnStart = ConfGetBooleanAttribute(conf[i], "show_on_start", false);
		
		var tmp_url = "";
		var act_fnz = new Array();
		gridev_myframes[tmp_i] = {};
		gridev_myframes[tmp_i]._PERSNAME = ConfGetStringAttribute(conf[i], "name");
		gridev_myframes[tmp_i]._PERSID = tmp_id;
		gridev_myframes[tmp_i]._PERSCONTAINER = tmp_id;
		gridev_myframes[tmp_i]._PERSFILTRIPARAM = new Array();
		
		for(var c=0;c<conf[i].childNodes.length;c++){
			if(!conf[i].childNodes[c].childNodes)continue;
			if(conf[i].childNodes[c].childNodes.length==0)continue;
			var tmp_dt = ottieniConfData(conf[i].childNodes[c].childNodes[0].data);
			
			switch(conf[i].childNodes[c].nodeName){
				case "url":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					if(tmp_dt==""){
						gridev_fatalError("Errore in XML di Configurazione!\nManca attributo url per tag iframes!!");
						return false;
					}
					tmp_url = tmp_dt;
					break;
				case "action_function":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					var tmp_id = ConfGetStringAttribute(conf[i].childNodes[c], "id", "");
					if((tmp_id!="")&&(tmp_dt!="")){
						act_fnz[act_fnz.length]=new Array(tmp_id, tmp_dt);
					}
					break;
				case "params":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					var tmp_type = ConfGetStringAttribute(conf[i].childNodes[c], "type");
					var tmp_nome = ConfGetStringAttribute(conf[i].childNodes[c], "name");
					var tmp_need = ConfGetBooleanAttribute(conf[i].childNodes[c], "needed", false);
					if(controllaFixedTextName(tmp_type, tmp_nome)==false){
						gridev_fatalError("Errore in XML di Configurazione!\nManca attributo name per elemento params (type=FIXED_TEXT, value=" + tmp_dt + ") su tag iframes ");
						return false;						
					}
					if(tmp_dt!=""){
						gridev_myframes[tmp_i]._PERSFILTRIPARAM[gridev_myframes[tmp_i]._PERSFILTRIPARAM.length] = new Array(tmp_type, tmp_dt, tmp_nome, tmp_need);
					}
					break;
			}
		}
		
		//cm_debuggaTxt("myjswindow is resize = " + gridev_myjswindows.isResize(gridev_myjswindows));
		gridev_myframes[tmp_i]._PERSACTFNZ = act_fnz;
		gridev_myframes[tmp_i]._PERSURL = tmp_url;
		gridev_myframes[tmp_i]._PERSLOADONSTART = tmp_showOnStart;
	}
	return esito;	
}

function gridev_creaTool(conf){
	var esito = true;
	var tmp_i = -1;
	for(var i =0;i<conf.length;i++){
		if(ConfGetBooleanAttribute(conf[i],"deleted_tag", false)==true)continue;

		tmp_i++;
		var tmp_cont = ConfGetStringAttribute(conf[i], "container", "");		
		if(tmp_cont==""){
			gridev_fatalError("Errore in XML di Configurazione!\nManca attributo container per tag toolbar!!");
			return false;
		}
		if(!(document.getElementById(tmp_cont))){
			gridev_fatalError("Errore in XML di Configurazione!\nAttributo container (" + tmp_cont + ") per tag toolbar non esiste in HTML!");
			return false;
		}
		
		if(ConfGetStringAttribute(conf[i], "name")==""){
			gridev_fatalError("Errore in XML di Configurazione!\nManca attributo name per tag toolbar!!");
			return false;
		}
		gridev_mytoolbar[tmp_i] = new dhtmlXToolbarObject(tmp_cont, ConfGetStringAttribute(conf[i], "skin", "standard"));	
		gridev_mytoolbar[tmp_i].setIconsPath(ConfGetStringAttribute(conf[i], "img_path", gridev_mytoolbar_def_path_img));
		
		gridev_mytoolbar[tmp_i]._PERSNAME = ConfGetStringAttribute(conf[i], "name");
		gridev_mytoolbar[tmp_i]._PERSCONTAINER = tmp_cont;
		gridev_mytoolbar[tmp_i]._PERSMODE = ConfGetStringAttribute(conf[i], "mode", "QUERY");
		gridev_mytoolbar[tmp_i]._PERSNEEDEDMEX = "";
		gridev_mytoolbar[tmp_i]._PERSBLOCKACTION=false;
		gridev_mytoolbar[tmp_i]._PERSFILTRIPARAM = new Array();
		var act_fnz = new Array();
		var items = new Array();
		
		for(var c=0;c<conf[i].childNodes.length;c++){
			if(!conf[i].childNodes[c].childNodes)continue;
			if(conf[i].childNodes[c].childNodes.length==0)continue;
			var tmp_dt = ottieniConfData(conf[i].childNodes[c].childNodes[0].data);
			
			
			switch(conf[i].childNodes[c].nodeName){
				case "url":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					if(tmp_dt=="")tmp_dt = tmp_path_dx_lib_php + "/dx_datitool.php";
					gridev_mytoolbar[tmp_i]._PERSURL = tmp_dt;
					break;
				case "action_function":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					var tmp_id = ConfGetStringAttribute(conf[i].childNodes[c], "id", "");
					if((tmp_id!="")&&(tmp_dt!="")){
						act_fnz[act_fnz.length]=new Array(tmp_id, tmp_dt);
					}
					break;
				case "params":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					var tmp_type = ConfGetStringAttribute(conf[i].childNodes[c], "type");
					var tmp_nome = ConfGetStringAttribute(conf[i].childNodes[c], "name");
					var tmp_need = ConfGetBooleanAttribute(conf[i].childNodes[c], "needed", false);
					if(controllaFixedTextName(tmp_type, tmp_nome)==false){
						gridev_fatalError("Errore in XML di Configurazione!\nManca attributo name per elemento params (type=FIXED_TEXT, value=" + tmp_dt + ") sulla toolbar ");
						return false;						
					}
					if(tmp_dt!=""){
						gridev_mytoolbar[tmp_i]._PERSFILTRIPARAM[gridev_mytoolbar[tmp_i]._PERSFILTRIPARAM.length] = new Array(tmp_type, tmp_dt, tmp_nome, tmp_need);
					}
					break;
				case "needed_mex":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					gridev_mytoolbar[tmp_i]._PERSNEEDEDMEX = tmp_dt;
					break;
				case "item":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					var tmp_idx = items.length;
					var tmp_id = ConfGetStringAttribute(conf[i].childNodes[c], "id");
					var tmp_descr = "";
					var tmp_img_en = ""
					var tmp_img_dis = ""
					var tmp_ww = ""
					var tmp_hh = "";
					for(var z=0;z<conf[i].childNodes[c].childNodes.length;z++){
						if(!conf[i].childNodes[c].childNodes[z].childNodes)continue;
						if(conf[i].childNodes[c].childNodes[z].childNodes.length==0)continue;
						
						var tmp_dt2 = ottieniConfData(conf[i].childNodes[c].childNodes[z].childNodes[0].data);
						
						switch(conf[i].childNodes[c].childNodes[z].nodeName){
							case "descr":
								if(ConfGetBooleanAttribute(conf[i].childNodes[c].childNodes[z],"deleted_tag", false)==true)continue;
								
								tmp_descr = tmp_dt2;
								break;
							case "img_en":
								if(ConfGetBooleanAttribute(conf[i].childNodes[c].childNodes[z],"deleted_tag", false)==true)continue;
								
								tmp_img_en = tmp_dt2;
								break;
							case "img_dis":
								if(ConfGetBooleanAttribute(conf[i].childNodes[c].childNodes[z],"deleted_tag", false)==true)continue;
								
								tmp_img_dis = tmp_dt2;
								break;
							case "widthp":
								if(ConfGetBooleanAttribute(conf[i].childNodes[c].childNodes[z],"deleted_tag", false)==true)continue;
								
								tmp_width = tmp_dt2 + "%";
								break;
							case "heightp":
								if(ConfGetBooleanAttribute(conf[i].childNodes[c].childNodes[z],"deleted_tag", false)==true)continue;
								
								tmp_height = tmp_dt2 + "%";
								break;
						}
					}
					if((tmp_id!="")&&(tmp_descr!="")){
						items[tmp_idx] = new Array(tmp_id, ConfGetBooleanAttribute(conf[i].childNodes[c], "selected"),tmp_descr, tmp_img_en, tmp_img_dis, tmp_ww, tmp_hh);
					}
					break;
			}
		}
		gridev_mytoolbar[tmp_i]._PERSACTFNZ = act_fnz;
		gridev_mytoolbar[tmp_i]._PERSITEM = items;
		gridev_mytoolbar[tmp_i]._PERSITEMSEL = -1;

		// alla pressione di un tasto della toolbar la grid verrà filtrata
		// attaching "onStateChange" event handler (buttonTwoState only)
    	gridev_mytoolbar[tmp_i].attachEvent("onStateChange", function(itemIdSel, itemStateSel){
			gridev_onToolbarStateChange(this._PERSNAME, itemIdSel, itemStateSel);
    	});
	
    	gridev_mytoolbar[tmp_i].attachEvent("onXLE", function(){
		    gridev_onToolbarXLE(this._PERSNAME);
    	});
    	
    	// INIZIO - Modifica 03/03/09 Marco Nastasi - Introduzione evento onClick nella toolbar con type="buttonSelect"

    	// attaching "onClick" event can be applied to Button or Select Button items only.
    	gridev_mytoolbar[tmp_i].attachEvent("onClick", function(id){
			gridev_onToolbaronClick(this._PERSNAME, id);
    	});

    	// FINE - Modifica 03/03/09 Modifica Marco Nastasi - Introduzione evento onClick nella toolbar con type="buttonSelect"

    	
    	esito = doLoadTool(gridev_mytoolbar[tmp_i]);
		
	}
	return true;
}

function gridev_creaTree(conf){
	var esito = true;
	var tmp_i = -1;
	for(var i =0;i<conf.length;i++){
		if(ConfGetBooleanAttribute(conf[i],"deleted_tag", false)==true)continue;

		tmp_i++;
		
		var tmp_cont = ConfGetStringAttribute(conf[i], "container", "");		
		if(tmp_cont==""){
			gridev_fatalError("Errore in XML di Configurazione!\nManca attributo container per tag treeview!!");
			return false;
		}
		if(!(document.getElementById(tmp_cont))){
			gridev_fatalError("Errore in XML di Configurazione!\nAttributo container (" + tmp_cont + ") per tag treeview non esiste in HTML!");
			return false;
		}
		
		if(ConfGetStringAttribute(conf[i], "name")==""){
			gridev_fatalError("Errore in XML di Configurazione!\nManca attributo name per tag treeview!!");
			return false;
		}

		gridev_mytree[tmp_i] = new dhtmlXTreeObject(tmp_cont, ConfGetStringAttribute(conf[i], "widthp", "100") + "%", ConfGetStringAttribute(conf[i], "heightp", "100") + "%", 0);
		var tmp_imgPath = ConfGetStringAttribute(conf[i], "img_path", gridev_mytree_def_path_img);
		gridev_mytree[tmp_i].setImagePath(tmp_imgPath);

		gridev_mytree[tmp_i]._PERSLOADONSTART = ConfGetBooleanAttribute(conf[i],"load_on_start", true);
		
		gridev_mytree[tmp_i]._PERSNAME = ConfGetStringAttribute(conf[i], "name");
		gridev_mytree[tmp_i]._PERSCONTAINER = tmp_cont;
		gridev_mytree[tmp_i]._PERSSELECTONLYCHILD = ConfGetBooleanAttribute(conf[i], "selectonlychild", true);
		gridev_mytree[tmp_i]._PERSDYNAMICLOADING = ConfGetBooleanAttribute(conf[i], "usedynamicloading", false);

		gridev_mytree[tmp_i]._PERSAUTOSELECT = ConfGetBooleanAttribute(conf[i], "autoselect_firstchild", true);
		gridev_mytree[tmp_i]._PERSAUTOEXPAND = ConfGetBooleanAttribute(conf[i], "expand_on_rootclick", true);
		
		gridev_mytree[tmp_i]._PERSBLOCKACTION = false;
		gridev_mytree[tmp_i]._PERSOLDID = "";
		gridev_mytree[tmp_i]._PERSNEEDEDMEX = "";
    	

		gridev_mytree[tmp_i].enableDragAndDrop(ConfGetBooleanAttribute(conf[i],"dragdrop",false));
		gridev_mytree[tmp_i].enableKeyboardNavigation(ConfGetIntAttribute(conf[i],"keynav",true));
		
		var tmp_autotooltip = 0;
		if(ConfGetBooleanAttribute(conf[i],"autotooltip",true)==true)tmp_autotooltip=1;
		gridev_mytree[tmp_i].enableAutoTooltips(tmp_autotooltip);
		
		var tmp_highlighting = 0;
		if(ConfGetBooleanAttribute(conf[i],"highlighting",true)==true)tmp_highlighting=1;
		gridev_mytree[tmp_i].enableHighlighting(tmp_highlighting);
		
		gridev_mytree[tmp_i]._PERSFILTRIPARAM = new Array();
		gridev_mytree[tmp_i]._PERSUSECSV = ConfGetBooleanAttribute(conf[i],"load_csv", false);
		var tmp_smartXMLParsing = ConfGetBooleanAttribute(conf[i],"use_smartparsing",true);
		
		gridev_mytree[tmp_i].minusArray = new Array();
		gridev_mytree[tmp_i].plusArray = new Array();

		var act_fnz = new Array();
				
		for(var c=0;c<conf[i].childNodes.length;c++){
			if(!conf[i].childNodes[c].childNodes)continue;
			if(conf[i].childNodes[c].childNodes.length==0)continue;
			var tmp_dt = ottieniConfData(conf[i].childNodes[c].childNodes[0].data);
			switch(conf[i].childNodes[c].nodeName){
				case "url":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					if(tmp_dt==""){
						gridev_fatalError("Errore in XML di Configurazione!\nManca attributo url per tag treeview!!");
						return false;
					}
					gridev_mytree[tmp_i]._PERSURL = tmp_dt;
					break;
				case "params":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					var tmp_type = ConfGetStringAttribute(conf[i].childNodes[c], "type"); 
					var tmp_nome = ConfGetStringAttribute(conf[i].childNodes[c], "name");
					var tmp_need = ConfGetBooleanAttribute(conf[i].childNodes[c], "needed", false);
					if(controllaFixedTextName(tmp_type, tmp_nome)==false){
						gridev_fatalError("Errore in XML di Configurazione!\nManca attributo name per elemento params (type=FIXED_TEXT, value=" + tmp_dt + ") sulla treeview ");
						return false;						
					}
					if(tmp_dt!=""){
						gridev_mytree[tmp_i]._PERSFILTRIPARAM[gridev_mytree[tmp_i]._PERSFILTRIPARAM.length] = new Array(tmp_type, tmp_dt, tmp_nome, tmp_need);
					}
					break;
				case "action_function":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					var tmp_id = ConfGetStringAttribute(conf[i].childNodes[c], "id", "");
					if((tmp_id!="")&&(tmp_dt!="")){
						act_fnz[act_fnz.length]=new Array(tmp_id, tmp_dt);
					}
					break;
				case "needed_mex":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					gridev_mytree[tmp_i]._PERSNEEDEDMEX = tmp_dt;
					break;
				case "img_minus":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					for(var z=0;z<conf[i].childNodes[c].childNodes.length;z++){
						if(!conf[i].childNodes[c].childNodes[z].childNodes)continue;
						if(conf[i].childNodes[c].childNodes[z].childNodes.length==0)continue;
						
						if(conf[i].childNodes[c].childNodes[z].nodeName=="img"){
							var tmp_dt2 = ottieniConfData(conf[i].childNodes[c].childNodes[z].childNodes[0].data);
							if(tmp_dt2!=""){
								preloadImmagine(tmp_imgPath +  tmp_dt2);
								gridev_mytree[tmp_i].minusArray[gridev_mytree[tmp_i].minusArray.length] = tmp_dt2;
							}
						}
					}
					break;
				case "img_plus":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					for(var z=0;z<conf[i].childNodes[c].childNodes.length;z++){
						if(!conf[i].childNodes[c].childNodes[z].childNodes)continue;
						if(conf[i].childNodes[c].childNodes[z].childNodes.length==0)continue;
						
						if(conf[i].childNodes[c].childNodes[z].nodeName=="img"){
							var tmp_dt2 = ottieniConfData(conf[i].childNodes[c].childNodes[z].childNodes[0].data);
							if(tmp_dt2!=""){
								preloadImmagine(tmp_imgPath +  tmp_dt2);
								gridev_mytree[tmp_i].plusArray[gridev_mytree[tmp_i].plusArray.length] = tmp_dt2;
							}
						}
					}
					break;
			}
		}

		gridev_mytree[tmp_i]._PERSACTFNZ = act_fnz;
		gridev_mytree[tmp_i]._PERSOLDID="";
		
		// =================================================================
		// GESTIONE PERSONALIZZATA DEGLI EVENTI TREE
		// =================================================================
		gridev_mytree[tmp_i].attachEvent("onClick",function(nodeId){
				var tmp_name =  this._PERSNAME;
				var tmp_nodeId = nodeId;
			
				//  Se è un nodo parent, espando automaticamente 
				// (specificato da configurazione)
				if(this._PERSAUTOEXPAND==true){
					if(this.hasChildren(nodeId)>=1){
						var tmp_openState = this.getOpenState(nodeId);
						if(tmp_openState!=1){
							this._PERSTODETACH = this.attachEvent("onOpenEnd",this._PERSFNZ_OPENEND);
	
							window.setTimeout(function(){
								tree_openItem(tmp_name, tmp_nodeId); 
							},10);
							//ritorno false perchè vado a richiamare la funzione di apertura dell albero
							return false;
						}
					}
				}

				//Se l'elemento ha un solo nodo figlio, dovrò selezionare il nodo figlio quindi ritorno false
				//(specificato da configurazione)
				if(this._PERSAUTOSELECT==true){
					if(this.hasChildren(nodeId)>=1){
						//La selezione dell'unico nodo figlio è affidata all'evento onOpenEnd del nodo parent!
						this.clearSelection(nodeId);
						if(this._PERSOLDID!=""){
							this.selectItem(this._PERSOLDID,false,false);
						}
						return false;
					}
				}

				//Se l'elemento è un nodo padre interrompo la selezione 
				//(specificato da configurazione)
				if(this._PERSSELECTONLYCHILD==true){
					if(this.hasChildren(nodeId)>=1){
						this.clearSelection(nodeId);
						if(this._PERSOLDID!=""){
							this.selectItem(this._PERSOLDID,false,false);
						}
						return false;	
					}
				}
				
				var udat = this.getUserData(nodeId, "disabled");
				if(udat=="true"){
					this.clearSelection(nodeId);
					if(this._PERSOLDID!=""){
						this.selectItem(this._PERSOLDID,false,false);
					}
					return false;
				}
				this._PERSOLDID = nodeId;

				gridev_onTreeClick(this._PERSNAME, nodeId);
				return true;
		});
		
		gridev_mytree[tmp_i].attachEvent("onDblClick",function(nodeId){
				//  Se è un nodo parent, espando automaticamente 
				// (specificato da configurazione)
				if(this._PERSAUTOEXPAND==true){
					if(this.hasChildren(nodeId)>=1){
						var tmp_openState = this.getOpenState(nodeId);
						if(tmp_openState!=1){
							this._PERSTODETACH = this.attachEvent("onOpenEnd",this._PERSFNZ_OPENEND);
	
							window.setTimeout(function(){
								tree_openItem(tmp_name, tmp_nodeId); 
							},10);
							//ritorno false perchè vado a richiamare la funzione di apertura dell albero
							return false;
						}
					}					
				}

				//Se l'elemento ha un solo nodo figlio, dovrò selezionare il nodo figlio quindi ritorno false
				//(specificato da configurazione)
				if(this._PERSAUTOSELECT==true){
					if(this.hasChildren(nodeId)>=1){
						//La selezione dell'unico nodo figlio è affidata all'evento onOpenEnd del nodo parent!
						this.clearSelection(nodeId);
						if(this._PERSOLDID!=""){
							this.selectItem(this._PERSOLDID,false,false);
						}
						return false;
					}
				}

				//Se l'elemento è un nodo padre interrompo la selezione 
				//(specificato da configurazione)
				if(this._PERSSELECTONLYCHILD==true){
					if(this.hasChildren(nodeId)>=1){
						this.clearSelection(nodeId);
						if(this._PERSOLDID!=""){
							this.selectItem(this._PERSOLDID,false,false);
						}
						return false;	
					}
				}

				var udat = this.getUserData(nodeId, "disabled");
				if(udat=="true"){
					this.clearSelection(nodeId);
					if(this._PERSOLDID!=""){
						this.selectItem(this._PERSOLDID,false,false);
					}
					return false;
				}
		
				this._PERSOLDID = nodeId;
				gridev_onTreeDblClick(this._PERSNAME, nodeId);
				return true;
		});


		gridev_mytree[tmp_i].attachEvent("onOpenStart",function(nodeId){
				var udat = this.getUserData(nodeId, "disabledOpen");
				if(udat=="true"){
					return false;
				}
    			return true;
		});
		
		gridev_mytree[tmp_i]._PERSFNZ_OPENEND = function(nodeId){
			var tmp_name = this._PERSNAME;
			this.detachEvent(this._PERSTODETACH);
			
			var udat = this.getUserData(nodeId, "skip_autoselect_firstchild");
			if(udat=="true"){
				this.clearSelection(nodeId);
				if(this._PERSOLDID!=nodeId){
					if(this._PERSOLDID!=""){
						var tmp_newChildId = this._PERSOLDID;
						window.setTimeout(function(){
							tree_selectItem(tmp_name, tmp_newChildId, false, false);
						},10);
					}
				}
				return true;
			}
			
			if(this._PERSAUTOSELECT==true){
				var childIdArr = this.getAllSubItems(nodeId).split(",");
				var childId = childIdArr[0];
				if(this.hasChildren(nodeId)>=1){
					window.setTimeout(function(){
						tree_selectItem(tmp_name, childId, true, false); 
					},10);
					return true;
				}				
			}
					
		};

		gridev_mytree[tmp_i].attachEvent("onXLE",function(){
			gridev_onTreeXLE(this._PERSNAME);
		});
		
		//Carico tutto l'xml ma lo mostro un po alla volta
		gridev_mytree[tmp_i].enableSmartXMLParsing(tmp_smartXMLParsing);
		
		if(gridev_mytree[tmp_i]._PERSLOADONSTART==true){
		   	esito = doLoadTree(gridev_mytree[tmp_i]);
		}
	}
   	return esito;
}

function gridev_creaGrid(conf){
	var esito = true;
	var tmp_i=-1;
	for(var i =0;i<conf.length;i++){
		if(ConfGetBooleanAttribute(conf[i],"deleted_tag", false)==true)continue;
		tmp_i++;
		
		var tmp_cont = ConfGetStringAttribute(conf[i], "container", "");		
		if(tmp_cont==""){
			gridev_fatalError("Errore in XML di Configurazione!\nManca attributo container per tag grid!!");
			return false;
		}
		if(!(document.getElementById(tmp_cont))){
			gridev_fatalError("Errore in XML di Configurazione!\nAttributo container (" + tmp_cont + ") per tag grid non esiste in HTML!");
			return false;
		}
		if(ConfGetStringAttribute(conf[i], "name")==""){
			gridev_fatalError("Errore in XML di Configurazione!\nManca attributo name per tag grid!!");
			return false;
		}
		gridev_mygrid[tmp_i] = new dhtmlXGridObject(tmp_cont);
		gridev_mygrid[tmp_i].setImagePath(ConfGetStringAttribute(conf[i],"img_path", gridev_mygrid_def_path_img));

		gridev_mygrid[tmp_i]._PERSHIGHTLIGHT = ConfGetIntAttribute(conf[i],"highlighting",2);
		gridev_mygrid[tmp_i]._PERSNAME = ConfGetStringAttribute(conf[i], "name");		
		gridev_mygrid[tmp_i]._PERSMENUNAME = ConfGetStringAttribute(conf[i], "context_menu_name");
		//Inizio Modifica Marco - (190209) possibilità di disabilitare il reload nel sort della colonna
		gridev_mygrid[tmp_i]._PERSORTRELOAD = ConfGetBooleanAttribute(conf[i], "sort_reload", true);	
		//Fine Modifica Marco - (190209) possibilità di disabilitare il reload nel sort della colonna
		
		//Inizio Modifica Andrea - (210109) gestione calendar su edit grid
		gridev_mygrid[tmp_i]._PERSCALENDARNAME = ConfGetStringAttribute(conf[i], "calendar_name");
		//Fine Modifica Andrea - (210109) gestione calendar su edit grid
		
		var tmp_enableMultiSelect = ConfGetBooleanAttribute(conf[i],"enable_multi_selection", false);
		
		gridev_mygrid[tmp_i]._PERSCONTAINER = tmp_cont;
		
		
		gridev_mygrid[tmp_i]._PERSBLOCKACTION = false;
		gridev_mygrid[tmp_i]._PERSFILTRIPARAM = new Array();
		gridev_mygrid[tmp_i]._PERSUSECSV = ConfGetBooleanAttribute(conf[i],"load_csv", false);
		var tmp_csvDelim = ConfGetStringAttribute(conf[i],"csv_delimiter", ",");
		
		gridev_mygrid[tmp_i]._PERSLOADONSTART = ConfGetBooleanAttribute(conf[i],"load_on_start", false);
		gridev_mygrid[tmp_i]._ISTREEGRID = ConfGetBooleanAttribute(conf[i],"is_treegrid", false);
		gridev_mygrid[tmp_i]._PERSEUSEUNIQUEHEADER = ConfGetBooleanAttribute(conf[i],"use_unique_header", false);
		gridev_mygrid[tmp_i]._PERSFOOTERID= "";
		gridev_mygrid[tmp_i]._PERSFOOTERMEX= "";
		gridev_mygrid[tmp_i]._PERSURL="";
		//Inizio Modifica Andrea Per Differenziare eventi keydown su filtri grid
		gridev_mygrid[tmp_i]._PERSEVENTFILTER=new Array();
		//Fine Modifica Andrea Per Differenziare eventi keydown su filtri grid

		var header_grid = new Array("","","","","","","","","","");
		var act_fnz = new Array();
		var err_mex = new Array();
		
		var tmp_conta = 0;
		var tmp_enableTreeCellEdit = ConfGetBooleanAttribute(conf[i],"enable_treecell_edit", false);
		var tmp_almostFooter = false;
		
		var tmp_filtroToCompare = "";
		
		for(var c=0;c<conf[i].childNodes.length;c++){
			if(!conf[i].childNodes[c].childNodes)continue;
			if(conf[i].childNodes[c].childNodes.length==0)continue;
			var tmp_dt = ottieniConfData(conf[i].childNodes[c].childNodes[0].data);
			switch(conf[i].childNodes[c].nodeName){
				case "action_function":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					var tmp_id = ConfGetStringAttribute(conf[i].childNodes[c], "id", "");
					if((tmp_id!="")&&(tmp_dt!="")){
						act_fnz[act_fnz.length]=new Array(tmp_id, tmp_dt);
					}
					break;					
				case "dt_errorMex":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					var tmp_id = ConfGetIntAttribute(conf[i].childNodes[c], "id", -1);
					if((tmp_id!="")&&(tmp_dt!="")){
						err_mex[err_mex.length]=new Array(tmp_id, tmp_dt);
					}
					break;

				case "url":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					if(tmp_dt==""){
						gridev_fatalError("Errore in XML di Configurazione!\nManca attributo url per tag grid!!");
						return false;
					}
					gridev_mygrid[tmp_i]._PERSURL = tmp_dt;
					break;
				case "footer_mex":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					gridev_mygrid[tmp_i]._PERSFOOTERMEX = tmp_dt;
					break;
				case "footer_mex_area_id":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					gridev_mygrid[tmp_i]._PERSFOOTERID = tmp_dt;
					break;
					
				case "params":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					var tmp_type = ConfGetStringAttribute(conf[i].childNodes[c], "type");
					var tmp_nome = ConfGetStringAttribute(conf[i].childNodes[c], "name");
					var tmp_need = ConfGetBooleanAttribute(conf[i].childNodes[c], "needed", false);
					if(controllaFixedTextName(tmp_type, tmp_nome)==false){
						gridev_fatalError("Errore in XML di Configurazione!\nManca attributo name per elemento params (type=FIXED_TEXT, value=" + tmp_dt + ") sulla grid ");
						return false;						
					}
					if(tmp_dt!=""){
						gridev_mygrid[tmp_i]._PERSFILTRIPARAM[gridev_mygrid[tmp_i]._PERSFILTRIPARAM.length] = new Array(tmp_type, tmp_dt, tmp_nome, tmp_need);
					}
					break;
					
				case "column":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					var new_conf = conf[i].childNodes[c];
					
					var tmp_sep = ",";
					if(tmp_conta==0)tmp_sep = "";
					
					var tmp_id = ConfGetStringAttribute(new_conf, "id", "");
					var tmp_filter = ConfGetIntAttribute(new_conf, "filtro", 0);
					//Inizio Modifica Andrea Per Differenziare eventi keydown su filtri grid
					var tmp_filterKey  = ConfGetBooleanAttribute(new_conf , "filter_enterkey", false);
					var tmp_filterCalendar = ConfGetStringAttribute(new_conf, "filter_calendar", "");
					var tmp_dataTypeNum= ConfGetIntAttribute(new_conf, "filter_data_type", 8);
					//Fine Modifica Andrea Per Differenziare eventi keydown su filtri grid
					
					var tmp_widthp = ConfGetIntAttribute(new_conf, "widthp", "5");
					var tmp_dataAlign = ConfGetStringAttribute(new_conf , "data_align", "center");					
					var tmp_dataType = ConfGetStringAttribute(new_conf , "data_type", "ro");
					var tmp_dataSort = ConfGetStringAttribute(new_conf , "data_sort", "na");
					
                    var tmp_filtroname  = ConfGetStringAttribute(new_conf , "filtro_name", "");
					
					var tmp_abilitaTooltip  = ConfGetBooleanAttribute(new_conf , "abilita_tooltip", true);
					
					var tmp_label = "";
					var tmp_labelAlign = "";
					var tmp_footer = "";
					for(var z=0;z<new_conf.childNodes.length;z++){
						if(!new_conf.childNodes[z].childNodes)continue;
						if(new_conf.childNodes[z].childNodes.length==0)continue;
						
						var tmp_dt2 = ottieniConfData(new_conf.childNodes[z].childNodes[0].data);
						
						switch(new_conf.childNodes[z].nodeName){
							case "label":
								if(ConfGetBooleanAttribute(new_conf.childNodes[z],"deleted_tag", false)==true)continue;
								
								tmp_label = tmp_dt2;
								tmp_labelAlign = ConfGetStringAttribute(new_conf.childNodes[z], "label_align", "center");
								break;
							case "footer":
								if(ConfGetBooleanAttribute(new_conf.childNodes[z],"deleted_tag", false)==true)continue;
								
								
								tmp_footer= tmp_dt2;
								if(tmp_dt2!="")tmp_almostFooter = true;
								break;
						}
					}
					var tmp_filtro = "&nbsp;";
					
					var wrk_filtro_name = tmp_filtroname;
					if(tmp_filtroname==""){
						tmp_filtroname = tmp_conta;
					}
					var tmp_filtro_id = gridev_mygrid[tmp_i]._PERSNAME + "_filtro_" + tmp_filtroname;

					//Inizio Modifica Andrea Per Differenziare eventi keydown su filtri grid
					gridev_mygrid[tmp_i]._PERSEVENTFILTER[gridev_mygrid[tmp_i]._PERSEVENTFILTER.length]=new Array(tmp_filtro_id,tmp_filterKey);
					//Fine Modifica Andrea Per Differenziare eventi keydown su filtri grid
					
					
					switch(tmp_filter){
						case 0:
							tmp_filtro = "&nbsp;";
							break;
						case 1:
							//tmp_filtro = "<input onkeydown='dh_onKeyDown(\"" + gridev_mygrid[tmp_i]._PERSNAME + "\");' onclick='return !((arguments[0]||event).cancelBubble=true);' id='" + tmp_filtro_id +  "' type='text' style='width:100%' >";
							tmp_filtro = "<input onclick='return !((arguments[0]||event).cancelBubble=true);' id='" + tmp_filtro_id +  "' type='text' style='width:100%' persfilterkey='"+tmp_filterKey+"' persgridname='"+gridev_mygrid[tmp_i]._PERSNAME+"' >";
							if(wrk_filtro_name==""){
								gridev_mygrid[tmp_i]._PERSFILTRIPARAM[gridev_mygrid[tmp_i]._PERSFILTRIPARAM.length] = new Array("DOCUMENT_BYID",tmp_filtro_id,tmp_filtro_id, false);
							}
							else{
								gridev_mygrid[tmp_i]._PERSFILTRIPARAM[gridev_mygrid[tmp_i]._PERSFILTRIPARAM.length] = new Array("DOCUMENT_BYID",tmp_filtro_id,wrk_filtro_name, false);
							}
							break;
						case 2:
							//tmp_filtro = "<input onkeydown='dh_onKeyDown(\"" + gridev_mygrid[tmp_i]._PERSNAME + "\");' onclick='return !((arguments[0]||event).cancelBubble=true);' id='" + tmp_filtro_id + "' type='text' style='width:100%' >";
							tmp_filtro = "<input  onclick='return !((arguments[0]||event).cancelBubble=true);' id='" + tmp_filtro_id + "' type='text' style='width:100%' persfilterkey='"+tmp_filterKey+"' persgridname='"+gridev_mygrid[tmp_i]._PERSNAME+"'>";
							if(wrk_filtro_name==""){
								gridev_mygrid[tmp_i]._PERSFILTRIPARAM[gridev_mygrid[tmp_i]._PERSFILTRIPARAM.length] = new Array("DOCUMENT_BYID",tmp_filtro_id,tmp_filtro_id, false);
							}
							else{
								gridev_mygrid[tmp_i]._PERSFILTRIPARAM[gridev_mygrid[tmp_i]._PERSFILTRIPARAM.length] = new Array("DOCUMENT_BYID",tmp_filtro_id,wrk_filtro_name, false);
							}
							break;
						case 3:
							//combo
							if(wrk_filtro_name==""){
								gridev_fatalError("Errore in XML di Configurazione!\nSettato Filtro di tipo combo per column n. " + (tmp_conta+1) + " senza specificare il nome della combobox nel tag 'filtro_name' !!!");
								return false;
							}
							tmp_filtro = "<div id='" + tmp_filtroname + "_zone'/>";
							gridev_mygrid[tmp_i]._PERSFILTRIPARAM[gridev_mygrid[tmp_i]._PERSFILTRIPARAM.length] = new Array("DHTMLX_COMBO",tmp_filtroname, tmp_filtroname, false);
							break;
						case 4:
							//campo data
							var tmp_span_style = "";
							if(wizcommon_browser.msie)tmp_span_style = 'style="position:relative;top:0px;left:0px;height:100%;"';
							
							if(tmp_filterCalendar!=""){
								tmp_filtro = '<input id="' + tmp_filtro_id + '" type="text" style="width:80%;"/><img id="'+ tmp_filtro_id +'_CALDIMG" class="clickableImg" align="middle" src="' + window.dhx_globalImgPath +'calendar.gif" style="margin-top:-10px;padding:0px;">';
							}
							else{
								tmp_filtro = '<input id="' + tmp_filtro_id + '" type="text" style="width:100%;"/>';
							}
							
							if(wrk_filtro_name==""){
								gridev_mygrid[tmp_i]._PERSFILTRIPARAM[gridev_mygrid[tmp_i]._PERSFILTRIPARAM.length] = new Array("DOCUMENT_BYID", tmp_filtro_id, tmp_filtro_id, false, tmp_filterCalendar, tmp_dataTypeNum);
							}
							else{
								gridev_mygrid[tmp_i]._PERSFILTRIPARAM[gridev_mygrid[tmp_i]._PERSFILTRIPARAM.length] = new Array("DOCUMENT_BYID", tmp_filtro_id, wrk_filtro_name, false, tmp_filterCalendar, tmp_dataTypeNum);
							}
								
								
							break;
					}

					if(tmp_label==""){
						tmp_label="&nbsp;";
					}
			// INIZIO - MODIFICA MARCO NASTASI per consentire attachHeader
					var tmp_label2;
					if(tmp_label=="#cspan")
					{
						tmp_label2="#cspan";
					}
					else
					{
						tmp_label2 = "<div style='text-align:" + tmp_labelAlign + ";";
						if(tmp_dataSort!="na")tmp_label2=tmp_label2 + "cursor:pointer;";
						tmp_label2 = tmp_label2 + "'>" + tmp_label + "</div>";
						
					}
			// FINE - MODIFICA MARCO NASTASI 
			
			// INIZIO - Codice di Andrea commentato
//					var tmp_label2 = "<div style='text-align:" + tmp_labelAlign + ";";
//					if(tmp_dataSort!="na")tmp_label2=tmp_label2 + "cursor:pointer;";
//					tmp_label2 = tmp_label2 + "'>" + tmp_label + "</div>";
			// FINE - Codice di Andrea commentato					
			
			
					if(gridev_mygrid[tmp_i]._PERSEUSEUNIQUEHEADER==true){
						if(tmp_filtro!="&nbsp;"){
							//unisco l'header titolo al filtro per avere tutto su un solo header
							tmp_label2 = '<table style="height: 100%;width:100%;"><tr style="height:75%;width:100%;"><td style="height:75%;width:100%; text-align: center; vertical-align: bottom; cursor: default;padding-bottom:5px;">' + tmp_label2 + '</td></tr><tr style="height:25%;width:100%;"><td style="height: 25%;width:100%;padding:0px 0px;cursor: default;">' + tmp_filtro + '</td></tr></table>';
						}
						header_grid[0] = header_grid[0] + tmp_sep  + tmp_label2
						//header_grid[1] = header_grid[1] + tmp_sep  + tmp_filtro
					}
					else{
						header_grid[0] = header_grid[0] + tmp_sep  + tmp_label2;
						header_grid[1] = header_grid[1] + tmp_sep  + tmp_filtro;
					}
					
					tmp_filtroToCompare = tmp_filtroToCompare + tmp_sep + "&nbsp;";
					header_grid[2] = header_grid[2] + tmp_sep  + tmp_widthp;
					header_grid[3] = header_grid[3] + tmp_sep  + tmp_dataAlign;
					header_grid[4] = header_grid[4] + tmp_sep  + tmp_dataType;
					header_grid[5] = header_grid[5] + tmp_sep  + tmp_dataSort;
					
					header_grid[9] = header_grid[9] + tmp_sep + tmp_id;
					tmp_footer_2 = tmp_footer;
					if(tmp_footer==""){
						tmp_footer = "#cspan";
						tmp_footer_2 = tmp_footer;
						if(tmp_conta==0){
							tmp_footer_2 = "<span>&nbsp;</span>";
						}
					}
					header_grid[6] = header_grid[6] + tmp_sep  + tmp_footer;
					header_grid[8] = header_grid[8] + tmp_sep  + tmp_footer_2;
					
					header_grid[7] = header_grid[7] + tmp_sep + tmp_abilitaTooltip;
					tmp_conta++;				
					break;
			}
		}
		gridev_mygrid[tmp_i]._PERSACTFNZ = act_fnz;
		gridev_mygrid[tmp_i]._PERSERRMEX = err_mex;
		
		gridev_mygrid[tmp_i].setHeader(header_grid[0]);
		if(gridev_mygrid[tmp_i]._PERSEUSEUNIQUEHEADER==false){
			if(header_grid[1]!=tmp_filtroToCompare){
				gridev_mygrid[tmp_i].attachHeader(header_grid[1]);
			}		
		}
		
		gridev_mygrid[tmp_i].setInitWidthsP(header_grid[2]);
		gridev_mygrid[tmp_i].setColAlign(header_grid[3]);
		gridev_mygrid[tmp_i].setColTypes(header_grid[4]);
		gridev_mygrid[tmp_i].setColSorting(header_grid[5]);
		gridev_mygrid[tmp_i].setColumnIds(header_grid[9]);
		
		gridev_mygrid[tmp_i].setSkin(ConfGetStringAttribute(conf[i], "skin", "xp"));

		// INIZIO MARCO NASTASI 190209 Per gestire il reload della grid dopo ordinamento
		
		if(gridev_mygrid[tmp_i]._PERSORTRELOAD==true){
			gridev_mygrid[tmp_i].attachEvent("onBeforeSorting",function(col, tipo_sort, order){
				gridev_gestOrdinamento(col, tipo_sort, ottieniGridFromName(this._PERSNAME), order);
			});
		}
		else
		{
			gridev_mygrid[tmp_i].attachEvent("onAfterSorting",function(col, tipo_sort, order){
				//gridev_gestOrdinamento(indice, tipo_sort, ottieniGridFromName(this._PERSNAME));
				return gridev_onAfterSorting(this._PERSNAME,col,tipo_sort, order);
			});
		}
		// FINE MARCO NASTASI  190209 Per gestire il reload della grid dopo ordinamento

	//VECCHIO CODICE	
	//	gridev_mygrid[tmp_i].attachEvent("onBeforeSorting",function(indice, tipo_sort){
	//		gridev_gestOrdinamento(indice, tipo_sort, ottieniGridFromName(this._PERSNAME));
	//	});
		// ------------------------------------------------------------------------------------------------------------


		gridev_mygrid[tmp_i].attachEvent("onHeaderClick",function(indice){
			return gridev_onHeaderClick(this._PERSNAME,indice);
		});


		gridev_mygrid[tmp_i].attachEvent("onXLE",function(){
			nascondi_caricamento();
			
			if((this._PERSCOLSORT!=null)&&(this._PERSDIRECTIONSORT!=null)){
				this.setSortImgState(true,this._PERSCOLSORT,this._PERSDIRECTIONSORT);
			}
			else{
				this.setSortImgState(false);
			}
			gridev_doFootermex(this._PERSNAME);
			
			onGridXLE(this._PERSNAME);
			
		});

		gridev_mygrid[tmp_i].attachEvent("onEnter",function(rowId, cellIdx){
			 return gridev_onGridEnterKeyPressed(this._PERSNAME, rowId, cellIdx);
		});
		
		gridev_mygrid[tmp_i].attachEvent("onSelectStateChanged",function(rowId){
			 return gridev_onGridSelectStateChanged(this._PERSNAME, rowId);
		});
		
		gridev_mygrid[tmp_i].attachEvent("onRowSelect",function(rowId){
			 return gridev_onGridRowSelect(this._PERSNAME, rowId);
		});
		gridev_mygrid[tmp_i].attachEvent("onCheck",function(rowId,cellInd,state){
			 return gridev_onGridCheckbox(this._PERSNAME, rowId, cellInd,state);
		});
		
		gridev_mygrid[tmp_i].attachEvent("onRowDblClicked",function(rowId,cellIdx){
			 return gridev_onGridRowDblClick(this._PERSNAME, rowId,cellIdx);
		});

		gridev_mygrid[tmp_i].attachEvent("onEditCell",function(edtStatus, rowId, cellIdx, newValue, oldValue){
			switch(edtStatus){
				case 0:
					return gridev_onGridBeforeEditCell(this._PERSNAME, rowId, cellIdx);
					break;
				case 1:
					return gridev_onGridEditCell(this._PERSNAME, rowId, cellIdx);
					break;
				case 2:
					return gridev_onGridAfterEditCell(this._PERSNAME, rowId, cellIdx, newValue, oldValue);
					break;
			}
			return true;
		});
	
		if(gridev_mygrid[tmp_i]._PERSHIGHTLIGHT==2){
	   		gridev_mygrid[tmp_i].enableRowsHover(true,"cella_evidenziata");	
		}
		else{
			gridev_mygrid[tmp_i].attachEvent("onMouseOver",function(id, ind){
					onGridMouseOver(this._PERSNAME, id, ind);
					return true;
	   		});
   			var tmp_name = gridev_mygrid[tmp_i]._PERSNAME;
			if (_isIE){
				gridev_mygrid[tmp_i].obj.onmouseleave=function(evt){ onGridMouseOut(tmp_name); };
			}
			else{
				gridev_mygrid[tmp_i].obj.onmouseout=function(evt){ onGridMouseOut(tmp_name); };
			}
		}
		gridev_mygrid[tmp_i].enableTreeCellEdit(tmp_enableTreeCellEdit);
		
		gridev_doGenericFnz(gridev_mygrid[tmp_i], "grid " + gridev_mygrid[tmp_i]._PERSNAME, "onBeforeInit");
   		gridev_mygrid[tmp_i].init();
   		
		//Gestione Eventi per il Campo Data sui filtri
		for(var c=0; c < gridev_mygrid[tmp_i]._PERSFILTRIPARAM.length; c++){
			//new Array("DOCUMENT_BYID",tmp_filtro_id,wrk_filtro_name, false, tmp_filterCalendar);
			if(gridev_mygrid[tmp_i]._PERSFILTRIPARAM[c].length==6){
				//campo data
				var tmp_comodo_filtro_id = gridev_mygrid[tmp_i]._PERSFILTRIPARAM[c][1];
				var tmp_comodo_filtro_calendar_id = gridev_mygrid[tmp_i]._PERSFILTRIPARAM[c][4];
				var tmp_comodo_filtro_datatype = gridev_mygrid[tmp_i]._PERSFILTRIPARAM[c][5];
				if(tmp_comodo_filtro_calendar_id!=""){
					var tmpObjImg = document.getElementById(tmp_comodo_filtro_id +"_CALDIMG");
					if(tmpObjImg){
			 			var tmp_fn = window.addEvent(tmpObjImg, 'click',function(evt) {
			 				gridev_filtrogrid_mostraCalendar(evt);
			 			});
			 			gridev_pushEventObj(tmpObjImg, 'click', tmp_fn);
					}
				
					/*
						PER GESTIONE RIDIMENSIONAMENTO OGGETTO
					if(tmp_wlayevtres){
						tmp_wlayevtres = tmp_wlayevtres + " gridev_filtrogrid_reshowCald('"+ tmp_comodo_filtro_id +"');"
					}
					else tmp_wlayevtres =  "gridev_filtrogrid_reshowCald('"+ tmp_comodo_filtro_id +"');"
					
					document.getElementById(tmp_comodo_filtro_id).setAttribute("wlayevtres",tmp_wlayevtres);
					*/
				}
				
				var tmpObjDat  = document.getElementById(tmp_comodo_filtro_id);
	
				var msk = "39/19/9999";
				if(tmp_comodo_filtro_datatype==6)msk = "39/19/99";
				
				var tmp_fnz_dat = function(objTxt, tmp_isEnterPressed){
					return gridev_filtrogrid_endDataInsert(objTxt, tmp_isEnterPressed);
				}
				
				var tmp_vald = new jscMaskInput(tmp_comodo_filtro_id, msk, "_", true, tmp_fnz_dat );
				tmp_vald.applyListener(tmpObjDat);
			}
		
		}
			

   		
   		
		gridev_mygrid[tmp_i].setCSVDelimiter(tmp_csvDelim);
		
		if(tmp_almostFooter==true){
			gridev_mygrid[tmp_i].attachFooter(header_grid[6]);
		}
		else{
			//Se non è stato specificato alcun footer vado a settarne uno nuovo, con uno span fittizio
			//gridev_mygrid[tmp_i].attachFooter(header_grid[8]);
		}
		gridev_mygrid[tmp_i].enableTooltips(header_grid[7]);
		
		gridev_mygrid[tmp_i].enableSmartRendering(true);
	
		gridev_mygrid[tmp_i]._setAutoResize();
		
		if(gridev_mygrid[tmp_i]._PERSMENUNAME!=""){
			var tmp_menu = ottieniMenuFromName(gridev_mygrid[tmp_i]._PERSMENUNAME);
			if(tmp_menu!=null){
				gridev_mygrid[tmp_i].enableContextMenu(tmp_menu);
				//tmp_menu.addBaseIdAsContextZone
				
				//Quando mostro il menu contestuale sulla griglia, la riga selezionata non viene aggiornata
				//Funzione che fixa questo baco
				gridev_mygrid[tmp_i].attachEvent("onBeforeContextMenu", function(rowId, cellIdx, gridbox){
					if(rowId){
						gridbox.selectRowById(rowId,null,false,false);
						gridev_onGridRowSelect(this._PERSNAME, rowId);
					}
					return true;
	    		});
	    		
	    		if(document.body){
	    			document.body.onresize=function(){return true;};
	    			document.body.oncontextmenu=function(){return false;};
	    		}
			}			
		}
		gridev_mygrid[tmp_i].enableMultiselect(tmp_enableMultiSelect);
		
		if(tmp_enableMultiSelect==false){
			/*			
			gridev_mygrid[tmp_i].attachEvent("onBeforeSelect",function(){
				 this.clearSelection();
				 return true;
			});
			*/
		}
		
		
	}
   	return esito;	
}


function gridev_doGenericFnz(tmpObj, tmpObjName, tmpFnzAct){
    var tmp_fnz = ottieniCodicePersFunctForObj(tmpObj, tmpFnzAct);
	if(tmp_fnz!=""){
		try{
			eval(""+trimSpecialChars(tmp_fnz));
		}
		catch(ex1){
			gridev_debuggaTxt("Errore on eval " + tmpObjName + " su " + tmpFnzAct + " = " + getEx(ex1));
		}
	}
	
}

function gridev_creaResearch(conf){
	var esito = true;
	var tmp_arr_cont = new Array();
	var tmp_i = -1;
	for(var i =0;i<conf.length;i++){
		if(ConfGetBooleanAttribute(conf[i],"deleted_tag", false)==true)continue;
		tmp_i++;
		
		if(ConfGetStringAttribute(conf[i], "name")==""){
			gridev_fatalError("Errore in XML di Configurazione!\nManca attributo name per tag research_field!!");
			return false;
		}
		gridev_myresearch[tmp_i] = {};
		gridev_myresearch[tmp_i]._PERSTYPE = ConfGetIntAttribute(conf[i], "type", -1);
		if(gridev_myresearch[tmp_i]._PERSTYPE==-1){
			gridev_fatalError("Errore in XML di Configurazione!\nManca attributo type per tag research_field!!");
			return false;
		}
				
		gridev_myresearch[tmp_i]._PERSNAME = ConfGetStringAttribute(conf[i], "name");
		gridev_myresearch[tmp_i]._PERSCONTAINER = ConfGetStringAttribute(conf[i], "container", "");

		gridev_myresearch[tmp_i]._PERSUSECOOKIE = ConfGetBooleanAttribute(conf[i], "saveOnCookie", false);
		gridev_myresearch[tmp_i]._PERSUSECOOKIEDONE = false;
		if(gridev_myresearch[tmp_i]._PERSUSECOOKIE==true){
			if(gridev_cookieGester!=null){
				gridev_cookieGester.registerParam(""+gridev_myresearch[tmp_i]._PERSNAME);
			}
		}
		
		if(gridev_myresearch[tmp_i]._PERSCONTAINER==""){
			if(gridev_myresearch[tmp_i]._PERSTYPE!=99){
				gridev_fatalError("Errore in XML di Configurazione!\nManca attributo container per tag research_field, su type diverso da 99!!");
				return false;				
			}
			else{
				gridev_myresearch[tmp_i]._PERSCONTAINER = gridev_myresearch[tmp_i]._PERSNAME;
			}
		}
		
		if(gridev_myresearch[tmp_i]._PERSTYPE!=99){
			//Controllo la non esistenza di un precedente campo con lo stesso ID CONTAINER
			for(var c = 0; c < tmp_arr_cont.length;c++){
				if(tmp_arr_cont[c][0]==gridev_myresearch[tmp_i]._PERSCONTAINER){
					gridev_fatalError("Errore in XML di Configurazione!\nAttributo container (" + gridev_myresearch[tmp_i]._PERSCONTAINER + ") identico per due o più tag research_field (" + gridev_myresearch[tmp_i]._PERSNAME + " e " + tmp_arr_cont[c][1] + " ) !!! ");
					return false;					
				}
			}
			tmp_arr_cont[tmp_arr_cont.length] = new Array(gridev_myresearch[tmp_i]._PERSCONTAINER, gridev_myresearch[tmp_i]._PERSNAME);
			
			if(!(document.getElementById(gridev_myresearch[tmp_i]._PERSCONTAINER))){
				gridev_fatalError("Errore in XML di Configurazione!\nIl container specificato (" +  gridev_myresearch[tmp_i]._PERSCONTAINER + " per il tag research_field (" + gridev_myresearch[tmp_i]._PERSNAME + ") non esiste nella pagina HTML!!!!");
				return false;
			}
			
			if(document.getElementById(""+gridev_myresearch[tmp_i]._PERSNAME)){
				gridev_fatalError("Errore in XML di Configurazione!\nL'oggetto " + gridev_myresearch[tmp_i]._PERSNAME + " esiste gia' nell'html!! Eliminarlo! !!! ");
				return false;
			}
			var tmp_objCont = document.getElementById(""+gridev_myresearch[tmp_i]._PERSCONTAINER)
			var tmp_nodeName =("" + tmp_objCont.nodeName).toUpperCase();
			if(tmp_nodeName!="DIV"){
				gridev_fatalError("Errore in XML di Configurazione!\nIl container specificato (" +  gridev_myresearch[tmp_i]._PERSCONTAINER + " per il tag research_field (" + gridev_myresearch[tmp_i]._PERSNAME + ") non è un oggetto DIV!!!!");
				return false;
			}
		}
		else{
			if(!(document.getElementById(""+gridev_myresearch[tmp_i]._PERSNAME))){
				gridev_fatalError("Errore in XML di Configurazione!\nIl container specificato (" +  gridev_myresearch[tmp_i]._PERSCONTAINER + " per il tag research_field (" + gridev_myresearch[tmp_i]._PERSNAME + ") non esiste nella pagina HTML!!!!");
				return false;
			}			
		}
		gridev_myresearch[tmp_i]._PERSWIDTH = ConfGetIntAttribute(conf[i], "width", 0);
		gridev_myresearch[tmp_i]._PERSRADIODEF = ConfGetStringAttribute(conf[i], "radiodef", "");
		gridev_myresearch[tmp_i]._PERSRADIOGROUPID = ConfGetStringAttribute(conf[i], "radiogroupid", "");
		
		gridev_myresearch[tmp_i]._PERSNEEDEDMEX = "";
		gridev_myresearch[tmp_i]._PERSDESCR = "";
		gridev_myresearch[tmp_i]._PERSSHIFTZERO = ConfGetBooleanAttribute(conf[i], "shift_zero", false);
		
		gridev_myresearch[tmp_i]._PERSDATATYPE=ConfGetIntAttribute(conf[i], "data_type", 8);
		gridev_myresearch[tmp_i]._PERSUSECALD=ConfGetStringAttribute(conf[i], "calendar", "");
		gridev_myresearch[tmp_i]._PERSINPUTMASK=ConfGetStringAttribute(conf[i], "input_mask", "");
		gridev_myresearch[tmp_i]._PERSPLACEHOLDER=ConfGetStringAttributeNoTrim(conf[i], "input_placeholder", "_");
		
		var act_fnz = new Array();
		var err_mex = new Array();
		var tmp_conta = 0;
		
		for(var c=0;c<conf[i].childNodes.length;c++){
			if(!conf[i].childNodes[c].childNodes)continue;
			if(conf[i].childNodes[c].childNodes.length==0)continue;
			var tmp_dt = ottieniConfData(conf[i].childNodes[c].childNodes[0].data);
			switch(conf[i].childNodes[c].nodeName){
				case "descr":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					gridev_myresearch[tmp_i]._PERSDESCR = tmp_dt;
					break;
				case "needed_mex":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					gridev_myresearch[tmp_i]._PERSNEEDEDMEX = tmp_dt;
					break;
				case "action_function":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					var tmp_id = ConfGetStringAttribute(conf[i].childNodes[c], "id", "");
					if((tmp_id!="")&&(tmp_dt!="")){
						act_fnz[act_fnz.length]=new Array(tmp_id, tmp_dt);
					}
					break;
				case "errorMex":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					var tmp_id = ConfGetIntAttribute(conf[i].childNodes[c], "id", -1);
					if((tmp_id!="")&&(tmp_dt!="")){
						err_mex[err_mex.length]=new Array(tmp_id, tmp_dt);
					}
					break;

			}
		}
		if(gridev_myresearch[tmp_i]._PERSTYPE==6){
			if(gridev_myresearch[tmp_i]._PERSINPUTMASK==""){
				gridev_fatalError("Errore in XML di Configurazione!\nIl campo research_field di tipo 6 (" +  gridev_myresearch[tmp_i]._PERSNAME + " non possiede un elemento INPUT_MASK!!!");
				return false;				
			}
		}
		
		gridev_myresearch[tmp_i]._PERSACTFNZ = act_fnz;
		gridev_myresearch[tmp_i]._PERSERRMEX = err_mex;

		if(gridev_myresearch[tmp_i]._PERSTYPE!=99){
			var tmp_style = "";
			if(gridev_myresearch[tmp_i]._PERSWIDTH!=0){
				tmp_style = "style='width:" + gridev_myresearch[tmp_i]._PERSWIDTH + "px;'";
			}
			var testo_var = "";
			switch(gridev_myresearch[tmp_i]._PERSTYPE){
				case 0:
					testo_var = "<input id='" + gridev_myresearch[tmp_i]._PERSNAME + "' type='text' " + tmp_style + " >";
					break;
				case 1:
					testo_var = "<input id='" + gridev_myresearch[tmp_i]._PERSNAME + "' type='text' " + tmp_style + " >";
					break;
				case 2:
					testo_var = "";
					break;
				case 3:
					testo_var = "<input id='" + gridev_myresearch[tmp_i]._PERSNAME + "' type='checkbox' >";
					break;
				case 4:
					var tmp_arr_id = (""+gridev_myresearch[tmp_i]._PERSRADIOGROUPID).split(',');
					var tmp_arr_lab = (""+gridev_myresearch[tmp_i]._PERSDESCR).split(',');
					
					testo_var = "";
					var tmp_checked = "";
					if(gridev_myresearch[tmp_i]._PERSRADIODEF=="")gridev_myresearch[tmp_i]._PERSRADIODEF = tmp_arr_id[0];
					for(var c=0; c < tmp_arr_id.length; c++){
						if(tmp_arr_id[c]==gridev_myresearch[tmp_i]._PERSRADIODEF)tmp_checked="checked";
						else tmp_checked="";
						
						var tmp_lab = "";
						try{
							tmp_lab = tmp_arr_lab[c];
						}
						catch(ex2){
							tmp_lab = tmp_arr_id[c];
						}
						
						testo_var = testo_var + "<input id='" + tmp_arr_id[c] + "' value='" + tmp_arr_id[c] + "' name='" +  gridev_myresearch[tmp_i]._PERSNAME + "' type='radio' " + tmp_checked + ">";
						testo_var = testo_var + "&nbsp;" + tmp_lab;
						if(c<(tmp_arr_id.length-1))testo_var = testo_var + "<br>";
					}
					break;
				case 5:
					//campo data
					var tmp_span_style = "";
					if(wizcommon_browser.msie)tmp_span_style = 'style="position:relative;top:0px;left:0px;height:100%;"';
					
					//testo_var = "<input id='" + gridev_myresearch[tmp_i]._PERSNAME + "' type='text' " + tmp_style + " >";
				    testo_var = '<table cellpadding="0" cellspacing="0" style="position:absolute;table-layout:fixed;margin:0;padding:0;top:0px;left:0px;width:100%;height:100%;overflow:auto;">'+
							  '<tbody>'+
							  '<tr style="width:100%;height:100%;">'+
	   						  '<td style="height:100%;" vAlign="middle" align="center" height="100%" nowrap><span ' + tmp_span_style + '><input id="' + gridev_myresearch[tmp_i]._PERSNAME + '" type="text" style="width:100%;height:99%;"/></span></td>';
	   				if(gridev_myresearch[tmp_i]._PERSUSECALD!=""){
						testo_var = testo_var + '<td style="width:25px;height:25px;text-align:center;overflow:hidden;padding-right:2px;" vAlign="middle" align="center"><img id="'+ gridev_myresearch[tmp_i]._PERSNAME +'_CALDIMG" class="clickableImg" align="middle" src="' + window.dhx_globalImgPath +'calendar.gif" style="margin:0px;padding:0px;width:100%;height:100%;"></td>';
	   				}
					testo_var = testo_var + '</tr>'+
	 						 	'</tbody>'+
								'</table>';
					break;
				case 6:
					//campo generico con maschera di input
					testo_var = "<input id='" + gridev_myresearch[tmp_i]._PERSNAME + "' type='text' " + tmp_style + " >";
					
					break;
			}
			if(gridev_myresearch[tmp_i]._PERSTYPE==3){
				testo_var = testo_var + "&nbsp;&nbsp;" + gridev_myresearch[tmp_i]._PERSDESCR;
			}
			else{
				if( (gridev_myresearch[tmp_i]._PERSTYPE!=4) && (gridev_myresearch[tmp_i]._PERSTYPE!=5) ){
					testo_var = gridev_myresearch[tmp_i]._PERSDESCR + "&nbsp;&nbsp;" + testo_var;
				}
			}
			
			if(document.getElementById(gridev_myresearch[tmp_i]._PERSCONTAINER)){
				document.getElementById(gridev_myresearch[tmp_i]._PERSCONTAINER).innerHTML = "" + testo_var;
				
				if(gridev_myresearch[tmp_i]._PERSTYPE==5){
					//Gestione Eventi per il Campo Data
					
					if(gridev_myresearch[tmp_i]._PERSUSECALD!=""){
						var tmpObjImg = document.getElementById( gridev_myresearch[tmp_i]._PERSNAME +"_CALDIMG");
						if(tmpObjImg){
				 			var tmp_fn1 = window.addEvent(tmpObjImg, 'click',function(evt) { 
				 				gridev_research_mostraCalendar(evt);
				 			});
				 			gridev_pushEventObj(tmpObjImg, 'click', tmp_fn1);
						}
						
						//Aggiungo anche wlaytevtres su perscontainer
						var tmp_wlayevtres = document.getElementById(gridev_myresearch[tmp_i]._PERSCONTAINER).getAttribute("wlayevtres");
						if(tmp_wlayevtres){
							tmp_wlayevtres = tmp_wlayevtres + " gridev_research_reshowCald('"+ gridev_myresearch[tmp_i]._PERSNAME +"');"
						}
						else tmp_wlayevtres =  "gridev_research_reshowCald('"+ gridev_myresearch[tmp_i]._PERSNAME +"');"
						
						document.getElementById(gridev_myresearch[tmp_i]._PERSCONTAINER).setAttribute("wlayevtres",tmp_wlayevtres);
					}
					
					var tmpObjDat  = document.getElementById( gridev_myresearch[tmp_i]._PERSNAME);

					var msk = "39/19/9999";
					if(gridev_myresearch[tmp_i]._PERSDATATYPE==6)msk = "39/19/99";
					
					var tmp_fnz_dat = function(objTxt, tmp_isEnterPressed){
						return gridev_research_endDataInsert(objTxt, tmp_isEnterPressed);
					}
					
					var tmp_vald = new jscMaskInput(gridev_myresearch[tmp_i]._PERSNAME, msk, "_", true, tmp_fnz_dat );
					tmp_vald.applyListener(tmpObjDat);

				}
				if(gridev_myresearch[tmp_i]._PERSTYPE==6){
					//Gestione Eventi per il Campo Generico con Maschera Di Input
					var tmpObjDat  = document.getElementById( gridev_myresearch[tmp_i]._PERSNAME);
					
					var tmp_fnz_dat = function(objTxt, tmp_isEnterPressed){
						gridev_research_endInputMaskInsert(objTxt, tmp_isEnterPressed);
					}
					
					var tmp_vald = new jscMaskInput(gridev_myresearch[tmp_i]._PERSNAME, gridev_myresearch[tmp_i]._PERSINPUTMASK, gridev_myresearch[tmp_i]._PERSPLACEHOLDER,  gridev_myresearch[tmp_i]._PERSSHIFTZERO, tmp_fnz_dat );
					tmp_vald.applyListener(tmpObjDat);
				}
			}
		}
		
		if((gridev_myresearch[tmp_i]._PERSTYPE!=5)&&(gridev_myresearch[tmp_i]._PERSTYPE!=6)){
			var tmp_obj = document.getElementById(""+gridev_myresearch[tmp_i]._PERSNAME);
			if(tmp_obj){
				var tmp_nodeName =("" + tmp_obj.nodeName).toUpperCase();
				if(tmp_nodeName=="INPUT"){
					//button o text
					var tmp_type =("" + tmp_obj.type).toUpperCase();
					switch(tmp_type){
						case "BUTTON":
							gridev_myresearch[tmp_i]._PERSOBJTYPE = 0;
							break;
						case "TEXT":
							gridev_myresearch[tmp_i]._PERSOBJTYPE = 1;
							break;
						case "CHECKBOX":
							gridev_myresearch[tmp_i]._PERSOBJTYPE = 2;
							break;
						case "RADIO":
							gridev_myresearch[tmp_i]._PERSOBJTYPE = 3;
							break;
					}
				}
				if(tmp_nodeName=="TEXTAREA"){
					//link
					gridev_myresearch[tmp_i]._PERSOBJTYPE = 4;
				}
				if(tmp_nodeName=="A"){
					//link
					gridev_myresearch[tmp_i]._PERSOBJTYPE = 5;
				}
				if(tmp_nodeName=="IMG"){
					//link
					gridev_myresearch[tmp_i]._PERSOBJTYPE = 6;
				}
				
				var tmp_fn2 = null;
				switch(gridev_myresearch[tmp_i]._PERSOBJTYPE){
					case 0:
			 			tmp_fn2 = window.addEvent(tmp_obj, 'click',function(e) { 
			 				gridev_research_onClick(e); 
			 			});
			 			gridev_pushEventObj(tmp_obj, 'click', tmp_fn2);
						break;
					case 1:
			 			tmp_fn2 = window.addEvent(tmp_obj, 'keyup',function(e) { 
							var elm = e.target || e.srcElement;
							if(elm){
								if(elm.id){
									if(cm_isEnter(getCompatibleKeyCode(e))){
										gridev_research_onKeyEnterPress(e);
									}
									
								}
							}
			 			});
			 			gridev_pushEventObj(tmp_obj, 'keyup', tmp_fn2);
			 			
			 			 var tmp_fn3 = window.addEvent(tmp_obj, 'blur',function(e) { 
							var elm = e.target || e.srcElement;
							if(elm){
								if(elm.id){
									if(cm_isEnter(getCompatibleKeyCode(e))){
										gridev_research_onBlur(e);
									}
									
								}
							}
			 			});
			 			gridev_pushEventObj(tmp_obj, 'blur', tmp_fn3);
			 			
						break;
					case 2:
			 			tmp_fn2 = window.addEvent(tmp_obj, 'click',function(e) { 
			 				gridev_research_onClick(e); 
			 			});
			 			gridev_pushEventObj(tmp_obj, 'click', tmp_fn2);
						break;
					case 3:
			 			tmp_fn2 = window.addEvent(tmp_obj, 'click',function(e) { 
			 				gridev_research_onClick(e); 
			 			});
			 			gridev_pushEventObj(tmp_obj, 'click', tmp_fn2);
						break;
					case 4:
						//onKeyEnterPress
			 			tmp_fn2 = window.addEvent(tmp_obj, 'keyup',function(e) { 
							var elm = e.target || e.srcElement;
							if(elm){
								if(elm.id){
									if(cm_isEnter(getCompatibleKeyCode(e))){
										gridev_research_onKeyEnterPress(e);
									}
									
								}
							}
			 			});
			 			gridev_pushEventObj(tmp_obj, 'keyup', tmp_fn2);
			 			
			 			var tmp_fn3 = window.addEvent(tmp_obj, 'blur',function(e) { 
							var elm = e.target || e.srcElement;
							if(elm){
								if(elm.id){
									if(cm_isEnter(getCompatibleKeyCode(e))){
										gridev_research_onBlur(e);
									}
									
								}
							}
			 			});
			 			gridev_pushEventObj(tmp_obj, 'blur', tmp_fn3);
						break;
					case 5:
			 			tmp_fn2 = window.addEvent(tmp_obj, 'click',function(e) { 
			 				gridev_research_onClick(e); 
			 			});
			 			gridev_pushEventObj(tmp_obj, 'click', tmp_fn2);
						break;
					case 6:
			 			tmp_fn2 = window.addEvent(tmp_obj, 'click',function(e) { 
			 				gridev_research_onClick(e); 
			 			});
			 			gridev_pushEventObj(tmp_obj, 'click', tmp_fn2);
						break;
				}
			}
		}
		else{
			if(gridev_myresearch[tmp_i]._PERSTYPE==5){
				var tmp_obj = document.getElementById(""+gridev_myresearch[tmp_i]._PERSNAME);
				if(tmp_obj){
		 			var tmp_fn2 = window.addEvent(tmp_obj, 'keyup',function(e) { 
						var elm = e.target || e.srcElement;
						if(elm){
							if(elm.id){
								if(cm_isEnter(getCompatibleKeyCode(e))){
									gridev_research_onKeyEnterPress(e);
								}
								
							}
						}
		 			});
		 			gridev_pushEventObj(tmp_obj, 'click', tmp_fn2);
				}
			}
			
		}
		
	}
   	return esito;	
}


function gridev_creaCombo(conf){
	var esito = true;
	for(var i =0;i<conf.length;i++){
		if(ConfGetBooleanAttribute(conf[i],"deleted_tag", false)==true)continue;

		var generic_combo_url = tmp_path_dx_lib_php + "/dx_daticombo.php";
		for(var c=0;c<conf[i].childNodes.length;c++){
			if(conf[i].childNodes[c]){
				if(conf[i].childNodes[c].nodeName=="url"){
					var tmp_dt = ottieniConfData(conf[i].childNodes[c].childNodes[0].data);
					if(tmp_dt=="")tmp_dt = tmp_path_dx_lib_php + "/dx_dati_combo.php";
					generic_combo_url = tmp_dt;
					break;
				}
			}
		}
		
		var conta_combo = 0;
		for(var c=0;c<conf[i].childNodes.length;c++){
			if(conf[i].childNodes[c]){			
				var new_conf = conf[i].childNodes[c];
				if(new_conf.nodeName=="combo"){
					if(ConfGetBooleanAttribute(new_conf,"deleted_tag", false)==true)continue;
					
					var tmp_nm = ConfGetStringAttribute(new_conf, "name", "");
					if(tmp_nm==""){
						gridev_fatalError("Errore in XML di Configurazione!\nManca attributo name per tag combo!!");
						return false;
					}
					
					var tmp_cont = ConfGetStringAttribute(new_conf, "container", tmp_nm + "_zone");
					gridev_mycombo[conta_combo] = new dhtmlXCombo(tmp_cont,tmp_nm,ConfGetIntAttribute(new_conf, "widthp", 90) + "%", "image");
					gridev_mycombo[conta_combo]._PERSNAME = tmp_nm;
					gridev_mycombo[conta_combo]._PERSCONTAINER = tmp_cont;
					
					gridev_mycombo[conta_combo]._PERSMODE = ConfGetStringAttribute(new_conf, "mode", "QUERY");
					gridev_mycombo[conta_combo]._PERSLOADONSTART = ConfGetBooleanAttribute(new_conf,"load_on_start", true);
					
					gridev_mycombo[conta_combo]._PERSUSECOOKIE = ConfGetBooleanAttribute(new_conf, "saveOnCookie", false);
					gridev_mycombo[conta_combo]._PERSUSECOOKIEDONE = false;
					if(gridev_mycombo[conta_combo]._PERSUSECOOKIE==true){
						if(gridev_cookieGester!=null){
							gridev_cookieGester.registerParam(""+gridev_mycombo[conta_combo]._PERSNAME);
						}
					}
					
					
					gridev_mycombo[conta_combo]._PERSNEEDEDMEX = "";
					gridev_mycombo[conta_combo]._PERSBLOCKACTION=false;
					gridev_mycombo[conta_combo]._PERSOLDITEMID = "";

					
					gridev_mycombo[conta_combo]._PERSURL = generic_combo_url;
					gridev_mycombo[conta_combo]._PERSINITDESCR = "";
					gridev_mycombo[conta_combo]._PERSFILTRIPARAM = new Array();
					gridev_mycombo[conta_combo]._PERSINITSELECT="";
					
					var act_fnz = new Array();
					var items = new Array();
					
					for(var z=0;z<new_conf.childNodes.length;z++){
						if(!new_conf.childNodes[z].childNodes)continue;
						if(new_conf.childNodes[z].childNodes.length==0)continue;
						var tmp_dt=ottieniConfData(""+new_conf.childNodes[z].childNodes[0].data);
						
						switch(new_conf.childNodes[z].nodeName){
							case "url":
								if(ConfGetBooleanAttribute(new_conf.childNodes[z],"deleted_tag", false)==true)continue;
								
								if(tmp_dt!=""){
									gridev_mycombo[conta_combo]._PERSURL = tmp_dt;
								}
								break;
							case "params":
								if(ConfGetBooleanAttribute(new_conf.childNodes[z],"deleted_tag", false)==true)continue;
								
								var tmp_type = ConfGetStringAttribute(new_conf.childNodes[z], "type");
								var tmp_nome = ConfGetStringAttribute(new_conf.childNodes[z], "name");
								var tmp_need = ConfGetBooleanAttribute(new_conf.childNodes[z], "needed", false);
								if(controllaFixedTextName(tmp_type, tmp_nome)==false){
									gridev_fatalError("Errore in XML di Configurazione!\nManca attributo name per elemento params (type=FIXED_TEXT, value=" + tmp_dt + ") sulla combo = " + gridev_mycombo[conta_combo]._PERSNAME);
									return false;						
								}
								if(tmp_dt!=""){
									gridev_mycombo[conta_combo]._PERSFILTRIPARAM[gridev_mycombo[conta_combo]._PERSFILTRIPARAM.length] = new Array(tmp_type, tmp_dt, tmp_nome, tmp_need);
								}
								break;
							case "init_select":
								if(ConfGetBooleanAttribute(new_conf.childNodes[z],"deleted_tag", false)==true)continue;
								
								gridev_mycombo[conta_combo]._PERSINITSELECT = tmp_dt;
								break;
							case "init_descr":
								if(ConfGetBooleanAttribute(new_conf.childNodes[z],"deleted_tag", false)==true)continue;
								
								gridev_mycombo[conta_combo]._PERSINITDESCR = tmp_dt;
								break;
							case "needed_mex":
								if(ConfGetBooleanAttribute(new_conf.childNodes[z],"deleted_tag", false)==true)continue;
								
								gridev_mycombo[conta_combo]._PERSNEEDEDMEX = tmp_dt;
								break;
							case "action_function":
								if(ConfGetBooleanAttribute(new_conf.childNodes[z],"deleted_tag", false)==true)continue;
								
								var tmp_id = ConfGetStringAttribute(new_conf.childNodes[z], "id", "");
								if((tmp_id!="")&&(tmp_dt!="")){
									act_fnz[act_fnz.length]=new Array(tmp_id, tmp_dt);
								}
								break;
							case "item":
								if(ConfGetBooleanAttribute(new_conf.childNodes[z],"deleted_tag", false)==true)continue;
								
								var tmp_idx = items.length;
								var tmp_id = ConfGetStringAttribute(new_conf.childNodes[z],"id");
								var tmp_selected = ConfGetBooleanAttribute(new_conf.childNodes[z],"selected");
								var tmp_descr = "";
								var tmp_value = ""
								var tmp_img = ""
								for(var zx=0;zx<new_conf.childNodes[z].childNodes.length;zx++){
									if(!new_conf.childNodes[z].childNodes[zx].childNodes)continue;
									if(new_conf.childNodes[z].childNodes[zx].childNodes.length==0)continue;
									
									var tmp_dt2 = ottieniConfData(new_conf.childNodes[z].childNodes[zx].childNodes[0].data);
									
									switch(new_conf.childNodes[z].childNodes[zx].nodeName){
										case "descr":
											if(ConfGetBooleanAttribute(new_conf.childNodes[z].childNodes[zx],"deleted_tag", false)==true)continue;
											
											tmp_descr = tmp_dt2;
											break;
										case "value":
											if(ConfGetBooleanAttribute(new_conf.childNodes[z].childNodes[zx],"deleted_tag", false)==true)continue;
											
											tmp_value = tmp_dt2;
											break;
										case "img":
											if(ConfGetBooleanAttribute(new_conf.childNodes[z].childNodes[zx],"deleted_tag", false)==true)continue;
											
											tmp_img = tmp_dt2;
											break;
									}
								}
								if((tmp_id!="")&&(tmp_descr!="")){
									items[tmp_idx] = new Array(tmp_id, tmp_selected,tmp_value,tmp_descr, tmp_img);
								}
								break;
						}
					}
					gridev_mycombo[conta_combo]._PERSACTFNZ = act_fnz;
					gridev_mycombo[conta_combo]._PERSITEM = items;
			
					//effettuo il load xml 
					if(gridev_mycombo[conta_combo]._PERSLOADONSTART==true){
						esito = doLoadCombo(gridev_mycombo[conta_combo]);
					}
					
					gridev_mycombo[conta_combo].ListPosition = ConfGetStringAttribute(new_conf, "list_position" , "Bottom");
					gridev_mycombo[conta_combo].readonly(ConfGetBooleanAttribute(new_conf,"readonly", true),ConfGetBooleanAttribute(new_conf,"autosearch", true));

					//_PERSBLOCKACTION
					
					gridev_mycombo[conta_combo].attachEvent("onSelectionChange",function(){ 
		    			var tmp_name = this._PERSNAME;
		    									
						window.setTimeout(function(){ gridev_onComboChangeEffective(tmp_name); },10);
					});
					
					gridev_mycombo[conta_combo].attachEvent("onChange",function(){ 
		    			var tmp_name = this._PERSNAME;
		    									
						window.setTimeout(function(){ gridev_onComboChange(tmp_name); },10);
					});
					
					if(ConfGetBooleanAttribute(new_conf,"disabled", false)==true){
						gridev_mycombo[conta_combo].disable(true);
					}
					conta_combo++;
				}
			}			
		}		
	}
	return esito;	
}

function gridev_creaDataProcessor(conf){
	var esito = true;
	var tmp_i = -1;
	for(var i =0;i<conf.length;i++){
		if(ConfGetBooleanAttribute(conf[i],"deleted_tag", false)==true)continue;

		tmp_i++;
		var tmp_name = ConfGetStringAttribute(conf[i], "name", "");
		if(tmp_name==""){
			gridev_fatalError("Errore in XML di Configurazione!\nManca attributo name per tag dataprocessor!!");
			return false;
		}
		var tmp_gridname = ConfGetStringAttribute(conf[i], "gridname", "");		
		if(tmp_gridname==""){
			gridev_fatalError("Errore in XML di Configurazione!\nManca attributo gridname per tag dataprocessor!!");
			return false;			
		}
		if(!(ottieniGridFromName(tmp_gridname))){
			gridev_fatalError("Errore in XML di Configurazione!\nAttributo gridname per tag dataprocessor non corrisponde ad una grid esistente!");
			return false;			
			
		}
		
		var filtri_param = new Array();
		var act_fnz = new Array();
		
		for(var c=0;c<conf[i].childNodes.length;c++){
			if(!conf[i].childNodes[c].childNodes)continue;
			if(conf[i].childNodes[c].childNodes.length==0)continue;
			var tmp_dt = ottieniConfData(conf[i].childNodes[c].childNodes[0].data);
			
			
			switch(conf[i].childNodes[c].nodeName){
				case "url":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					if(tmp_dt==""){
						gridev_fatalError("Errore in XML di Configurazione!\nManca elemento url sul dataprocessor ");
						return false;						
					}
					tmp_url = tmp_dt;
					break;
				case "action_function":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					var tmp_id = ConfGetStringAttribute(conf[i].childNodes[c], "id", "");
					if((tmp_id!="")&&(tmp_dt!="")){
						act_fnz[act_fnz.length]=new Array(tmp_id, tmp_dt);
					}
					break;
				case "params":
					if(ConfGetBooleanAttribute(conf[i].childNodes[c],"deleted_tag", false)==true)continue;
					
					var tmp_type = ConfGetStringAttribute(conf[i].childNodes[c], "type");
					var tmp_nome = ConfGetStringAttribute(conf[i].childNodes[c], "name");
					var tmp_need = ConfGetBooleanAttribute(conf[i].childNodes[c], "needed", false);
					if(controllaFixedTextName(tmp_type, tmp_nome)==false){
						gridev_fatalError("Errore in XML di Configurazione!\nManca attributo name per elemento params (type=FIXED_TEXT, value=" + tmp_dt + ") sul dataprocessor ");
						return false;						
					}
					if(tmp_dt!=""){
						filtri_param[filtri_param.length] = new Array(tmp_type, tmp_dt, tmp_nome, tmp_need);
					}
					break;
			}
		}
		
		gridev_mydataprocessor[tmp_i] = new dataProcessor(tmp_url);
		var tmp_enableDataName = ConfGetBooleanAttribute(conf[i], "enableDataNames", true);
		gridev_mydataprocessor[tmp_i].enableDataNames(tmp_enableDataName);

		var tmp_transactionMode = ConfGetStringAttribute(conf[i], "transaction_mode", "GET");
		gridev_mydataprocessor[tmp_i].setTransactionMode(tmp_transactionMode);
		
		gridev_mydataprocessor[tmp_i].setUpdateMode("off");
		
		gridev_mydataprocessor[tmp_i]._PERSGRIDNAME = tmp_gridname
		gridev_mydataprocessor[tmp_i]._PERSURL = tmp_url;
		gridev_mydataprocessor[tmp_i]._PERSNAME = tmp_name;
		gridev_mydataprocessor[tmp_i]._PERSFILTRIPARAM = filtri_param;
		gridev_mydataprocessor[tmp_i]._PERSACTFNZ = act_fnz;

		// alla pressione di un tasto della toolbar la grid verrà filtrata
		// attaching "onStateChange" event handler (buttonTwoState only)
    	gridev_mydataprocessor[tmp_i].setOnAfterUpdate(function(originalRowId, commandType, newRowId){
    		return gridev_onDataProcessorAfterUpdate(this._PERSNAME, originalRowId, commandType, newRowId);
    	});
    	
    	gridev_mydataprocessor[tmp_i].defineAction("error",function(node){
    		if(!node)return;
    		var tmp_act = ConfGetStringAttribute(node.firstChild, "type", "unknow");
    		var tmp_sid = ConfGetStringAttribute(node.firstChild, "sid", "unknow");
    		var tmp_tid = ConfGetStringAttribute(node.firstChild, "tid", "unknow");
    		var tmp_mex = ottieniConfData(node.firstChild.data);
    		gridev_onDataProcessorError(this._PERSNAME, tmp_sid, tmp_act, tmp_tid, tmp_mex);
    		
    	});
    	gridev_mydataprocessor[tmp_i].setOnBeforeUpdateHandler(function(originalRowId, commandType){
    		return gridev_onDataProcessorBeforeUpdate(this._PERSNAME, originalRowId, commandType);
    	});
		
		var tmp_gridBox = ottieniGridFromName(gridev_mydataprocessor[tmp_i]._PERSGRIDNAME)
		if(tmp_gridBox){
			gridev_mydataprocessor[tmp_i].init(tmp_gridBox);
		}
	}
	return true;
}



// Gestione eventi dhtmlx
// Eventi Js Window
function gridev_onJsWindowClose(jswindowname){
	var jswindow = ottieniJsWindowFromName(jswindowname);
	if(!jswindow)return false;

	var DXRETURN = true;
	
	var tmp_fnz = ottieniCodicePersFunctForObj(jswindow, "onClose");
	if(tmp_fnz!=""){
		window.setTimeout(function(){ 
			try{
				eval(""+trimSpecialChars(tmp_fnz)); 
			}
			catch(ex1){
				gridev_debuggaTxt("Errore on eval jswindow onClose  = " + getEx(ex1));
			}
			jswindow._PERSBLOCKACTION=false;
		}, 10);
	}

	return DXRETURN;
}


function gridev_onJsWindowContentLoaded(jswindowname){
	var jswindow = ottieniJsWindowFromName(jswindowname);
	if(!jswindow)return false;

	var DXRETURN = true;
	
	var tmp_fnz = ottieniCodicePersFunctForObj(jswindow, "onContentLoaded");
	if(tmp_fnz!=""){
		window.setTimeout(function(){ 
			try{
				eval(""+trimSpecialChars(tmp_fnz)); 
			}
			catch(ex1){
				gridev_debuggaTxt("Errore on eval jswindow onContentLoaded  = " + getEx(ex1));
			}
			jswindow._PERSBLOCKACTION=false;
		}, 10);
	}

	return DXRETURN;
}



// Eventi Menu
function gridev_onMenuClick(menuName, itemId, zoneId){
	var tmpMenu = ottieniMenuFromName(menuName);
	if(!tmpMenu)return false;
	
	var DXRETURN = true;
	
    var tmp_fnz = ottieniCodicePersFunctForObj(tmpMenu, "onItemClick");
	if(tmp_fnz!=""){
		window.setTimeout(function(){ 
			try{
				eval(""+trimSpecialChars(tmp_fnz));
			}
			catch(ex1){
				gridev_debuggaTxt("Errore on eval menu onItemClick = " + getEx(ex1));
			}
		}, 10);
	}
	
	return DXRETURN;
}

function gridev_onMenuShow(menuName, zoneId){
	var tmpMenu = ottieniMenuFromName(menuName);
	if(!tmpMenu)return false;
	
	var DXRETURN = true;
	
    var tmp_fnz = ottieniCodicePersFunctForObj(tmpMenu, "onAfterShow");
	if(tmp_fnz!=""){
		window.setTimeout(function(){ 
			try{
				eval(""+trimSpecialChars(tmp_fnz));
			}
			catch(ex1){
				gridev_debuggaTxt("Errore on eval menu onAfterShow = " + getEx(ex1));
			}
		}, 10);
	}
	
	return DXRETURN;
}



// Eventi Dataprocessor
// Richiamato quando il data processor riceve un messaggio di errore dal server
function gridev_onDataProcessorError(dataprocessorname, originalRowId, commandType, newRowId, errorMessage){
	var dp = ottieniDataProcessorFromName(dataprocessorname);
	if(!dp)return false;
	
	var DXRETURN = true;
	
	var tmp_fnz = ottieniCodicePersFunctForObj(dp, "onError");
	if(tmp_fnz!=""){
		window.setTimeout(function(){ 
			try{
				eval(""+trimSpecialChars(tmp_fnz)); 
			}
			catch(ex1){
				gridev_debuggaTxt("Errore on eval dataprocessor onError = " + getEx(ex1));
			}
		}, 10);
	}

	return DXRETURN;
}

// Richiamato prima che il data processor invii i dati al server
function gridev_onDataProcessorBeforeUpdate(dataprocessorname, originalRowId, commandType){
	var dp = ottieniDataProcessorFromName(dataprocessorname);
	if(!dp)return false;
	
	var DXRETURN = true;
	
	var tmp_fnz = ottieniCodicePersFunctForObj(dp, "onBeforeUpdate");
	if(tmp_fnz!=""){
		try{
			eval(""+trimSpecialChars(tmp_fnz)); 
		}
		catch(ex1){
			gridev_debuggaTxt("Errore on eval dataprocessor onBeforeUpdate = " + getEx(ex1));
		}
		dp._PERSBLOCKACTION=false;
	}
	
	return DXRETURN;
}

// Richiamato dopo che il data processor invii i dati al server
function  gridev_onDataProcessorAfterUpdate(dataprocessorname, originalRowId, commandType, newRowId){
	var dp = ottieniDataProcessorFromName(dataprocessorname);
	if(!dp)return false;
	
	var DXRETURN = true;
	
	var tmp_fnz = ottieniCodicePersFunctForObj(dp, "onAfterUpdate");
	if(tmp_fnz!=""){
		try{
			eval(""+trimSpecialChars(tmp_fnz)); 
		}
		catch(ex1){
			gridev_debuggaTxt("Errore on eval dataprocessor onAfterUpdate = " + getEx(ex1));
		}
	}
	
	return DXRETURN;
}

// Eventi Toolbar
// Richiamato quando un bottone di una toolbar viene premuto
function gridev_onToolbarStateChange(toolname, itemIdSel, itemStateSel){
	var toolbar = ottieniToolFromName(toolname);
	if(!toolbar)return false;

	var DXRETURN = true;
	
	toolbar.forEachItem( function(itemId){
		//richiamare la funzione setItemState non genera una chiamata all evento onStateChange
		if(itemId!=itemIdSel)toolbar.setItemState(itemId,0);
		else{ 
			if(itemStateSel==false){
				toolbar.setItemState(itemId,1);
			}
		}
    }); 
	if(toolbar._PERSBLOCKACTION==true)return false;
	    
    if(itemStateSel==true){
    	toolbar._PERSITEMSEL = itemIdSel;
    	var tmp_fnz = ottieniCodicePersFunctForObj(toolbar, "onStateChange");
		if(tmp_fnz!=""){
			window.setTimeout(function(){ 
				try{
					eval(""+trimSpecialChars(tmp_fnz)); 
				}
				catch(ex1){
					gridev_debuggaTxt("Errore on eval toolbar onStateChange = " + getEx(ex1));
				}
				toolbar._PERSBLOCKACTION=false;
			}, 10);
		}
	}
	
	return DXRETURN;
}

//Richiamato quando la toolbar ha terminato di parserizzare l'xml
//e ha già creato gli elementi relativi
function gridev_onToolbarXLE(toolname){
	var toolbar = ottieniToolFromName(toolname);
	if(!toolbar)return false;
	if(toolbar._PERSBLOCKACTION==true)return false;
	
	var DXRETURN = true;
	
    var tmp_fnz = ottieniCodicePersFunctForObj(toolbar, "onXLE");
	if(tmp_fnz!=""){
		window.setTimeout(function(){ 
			try{
				eval(""+trimSpecialChars(tmp_fnz)); 
			}
			catch(ex1){
				gridev_debuggaTxt("Errore on eval toolbar onXLE = " + getEx(ex1));
			}
		}, 10);
	}
	return DXRETURN;
}

// INIZIO - Modifica 03/03/09 Marco Nastasi - Introduzione evento onClick nella toolbar con type="buttonSelect"

function gridev_onToolbaronClick(toolname, id)
{
	var toolbar = ottieniToolFromName(toolname);
	if(!toolbar)return false;
	if(toolbar._PERSBLOCKACTION==true)return false;
	
	var DXRETURN = true;
	
    var tmp_fnz = ottieniCodicePersFunctForObj(toolbar, "onClick");
	if(tmp_fnz!=""){
		window.setTimeout(function(){ 
			try{
				eval(""+trimSpecialChars(tmp_fnz)); 
			}
			catch(ex1){
				gridev_debuggaTxt("Errore on eval toolbar onClick = " + getEx(ex1));
			}
		}, 10);
	}
	return DXRETURN;
}
// FINE - Modifica 03/03/09 Marco Nastasi - Introduzione evento onClick nella toolbar con type="buttonSelect"

// Eventi Tree
// Richiamato quando si clikka su un nodo di un tree
function gridev_onTreeClick(treename, nodeId){
	var treeview = ottieniTreeFromName(treename);
	if(!treeview)return;
	if(treeview._PERSBLOCKACTION==true)return false;
	
	var DXRETURN = true;
	
    var tmp_fnz = ottieniCodicePersFunctForObj(treeview, "onItemClick");
	if(tmp_fnz!=""){
		window.setTimeout(function(){ 
			try{
				eval(""+trimSpecialChars(tmp_fnz));
			}
			catch(ex1){
				gridev_debuggaTxt("Errore on eval treeview onItemClick = " + getEx(ex1));
			}
		}, 10);
	}
	
	return DXRETURN;
}

// Richiamato quando si fa doppio click su un nodo di un tree
function gridev_onTreeDblClick(treename, nodeId){
	var treeview = ottieniTreeFromName(treename);
	if(!treeview)return;
	if(treeview._PERSBLOCKACTION==true)return false;
	
	var DXRETURN = true;
	
    var tmp_fnz = ottieniCodicePersFunctForObj(treeview, "onItemDblClick");
	if(tmp_fnz!=""){
		window.setTimeout(function(){ 
			try{
				eval(""+trimSpecialChars(tmp_fnz));
			}
			catch(ex1){
				gridev_debuggaTxt("Errore on eval treeview onItemDblClick = " + getEx(ex1));
			}
		}, 10);
	}
	
	return DXRETURN;
}

//Richiamato quando la treeview ha terminato di parserizzare l'xml
//e ha già creato gli elementi relativi
function gridev_onTreeXLE(treename){
	var treeview = ottieniTreeFromName(treename);
	if(!treeview)return;
	if(treeview._PERSBLOCKACTION==true)return false;
	
	var DXRETURN = true;
	//aggiungo classname manualmente ai nodi immagine segno
    var tmp_fnz = ottieniCodicePersFunctForObj(treeview, "onXLE");
	if(tmp_fnz!=""){
		window.setTimeout(function(){ 
			try{
				eval(""+trimSpecialChars(tmp_fnz));
			}
			catch(ex1){
				gridev_debuggaTxt("Errore on eval treeview onXLE = " + getEx(ex1));
			}
		}, 10);
	}
	
	return DXRETURN;
}

// Eventi Combo
// Richiamato quando la combo cambia valore
function gridev_onComboChangeEffective(comboname){
	cm_debuggaTxt("gridev_onComboChangeEffective = " + comboname);
	var combobox = ottieniComboFromName(comboname);
	if(!combobox)return;
	if(combobox._PERSBLOCKACTION==true)return;
	
	var DXRETURN = true;
	
	if(combobox.getSelectedValue()){
	    if(combobox._PERSOLDITEMID!=""){
	    	if(combobox._PERSOLDITEMID==combobox.getSelectedIndex()){
	    		return;
	    	}
	    }
	    combobox._PERSOLDITEMID = combobox.getSelectedIndex();
	    
	    var tmp_fnz = ottieniCodicePersFunctForObj(combobox, "onChange");
		if(tmp_fnz!=""){
			window.setTimeout(function(){ 
				try{
					eval(""+trimSpecialChars(tmp_fnz));
				}
				catch(ex1){
					gridev_debuggaTxt("Errore on eval combobox onChange = " + getEx(ex1));
				}
			}, 10);
		}
	}
	
	return DXRETURN;
}

function gridev_onComboChange(comboname){
	cm_debuggaTxt("gridev onSelection = " + comboname);
	var combobox = ottieniComboFromName(comboname);
	if(!combobox)return;
	if(combobox._PERSBLOCKACTION==true)return;
	
	var DXRETURN = true;
	
	if(combobox.getSelectedValue()){
		/*
	    if(combobox._PERSOLDITEMID!=""){
	    	if(combobox._PERSOLDITEMID==combobox.getSelectedIndex()){
	    		return;
	    	}
	    }
	    combobox._PERSOLDITEMID = combobox.getSelectedIndex();
	    */
	    
	    var tmp_fnz = ottieniCodicePersFunctForObj(combobox, "onSelection");
		if(tmp_fnz!=""){
			window.setTimeout(function(){ 
				try{
					eval(""+trimSpecialChars(tmp_fnz));
				}
				catch(ex1){
					gridev_debuggaTxt("Errore on eval combobox onSelection = " + getEx(ex1));
				}
			}, 10);
		}
	}
	
	return DXRETURN;
}


function gridev_filtrogrid_mostraCalendar(e){
	var elm = e.target || e.srcElement;
	if(elm){
		if(elm.id){
			var tmp_id = elm.id;
			tmp_id = tmp_id.replace("_CALDIMG", "");
			var tmp_obj = ottieniFiltroGridFromId(tmp_id);
			if(tmp_obj){
				cm_debuggaTxt("gridev_filtrogrid_mostraCalendar called this id = " + tmp_id);
				//_PERSUSECALD	(nome del calendar)
				//_PERSDATATYPE (dat da 6 o da 8)
				if(tmp_obj[4]!=""){
					
					var tmp_cald = ottieniCalendarFromName(tmp_obj[4]);
					
					var tmp_formato = "%d/%m/%Y";
					if(tmp_obj[5]==6)tmp_formato = "%d/%m/%y";
					tmp_cald.setDateFormat(tmp_formato);
					
					var txtObj = document.getElementById(tmp_obj[1]);
					
					if(txtObj){
						if(txtObj.value!="")tmp_cald.setDate(txtObj.value);

						var tmp_top = wiz_getAbsoluteTop(txtObj);
						var tmp_left = wiz_getAbsoluteLeft(txtObj);
						var tmp_height = getEffectiveHeight(txtObj);
						var new_pos = tmp_top + tmp_height + 5;
						new_pos = parseInt(""+new_pos,10);
						tmp_cald.setPosition(new_pos, tmp_left);
						tmp_cald._clearHeaderButtons=false;
						tmp_cald.setHeader(tmp_cald._PERSDHEADERVIS, tmp_cald._PERSDRAGGABLE, tmp_cald._PERSHEADERBUTTON);
						
						tmp_cald._PERSISONFILTRI = true;
						tmp_cald._PERSATTACHEDID=tmp_id;
						tmp_cald._PERSATTACCHEDFNZ=null;
						
						tmp_cald.parent.style.display="";
						
						tmp_cald.draw();
						
					}
				}

			}
		}
	}
}

function gridev_filtrogrid_reshowCald(researchName){
	var tmp_obj = ottieniFiltroGridFromId(researchName);
	if(tmp_obj){
		//_PERSUSECALD	(nome del calendar)
		//_PERSDATATYPE (dat da 6 o da 8)
		if(tmp_obj[4]!=""){
			
			var tmp_cald = ottieniCalendarFromName(tmp_obj[4]);
			if(tmp_cald.isVisible()){
				if(tmp_cald._PERSATTACHEDID==researchName){
					var txtObj = document.getElementById(tmp_obj[1]);
					
					if(txtObj){
						//if(txtObj.value!="")tmp_cald.setDate(txtObj.value);
						var tmp_top = wiz_getAbsoluteTop(txtObj);
						var tmp_left = wiz_getAbsoluteLeft(txtObj);
						var tmp_height = getEffectiveHeight(txtObj);
						var new_pos = tmp_top + tmp_height + 5;
						new_pos = parseInt(""+new_pos,10);
						
						tmp_cald.setPosition(new_pos, tmp_left);
						//tmp_cald._clearHeaderButtons=false;
						//tmp_cald.setHeader(tmp_cald._PERSDHEADERVIS, tmp_cald._PERSDRAGGABLE, tmp_cald._PERSHEADERBUTTON);
						//tmp_cald.draw();
					}
				}
			}						
		}
	}
}


//Evento generato a fronte di calendario chiuso e data inserita nella casella di testo 
function gridev_filtrogrid_chiusoCalendar(resId){
	var tmp_obj = ottieniFiltroGridFromId(resId);
	if(!tmp_obj)return;
	
	
	//on date change richiamo reload 
	//var tmp_grid = ottieniGridFromFiltroParam(obj[1]);

	//var nomegrid = tmp_grid._PERSNAME;

	//if(dh_tmp_timer) clearTimeout(dh_tmp_timer);
	//dh_tmp_timer=setTimeout(function(){
	//	reloadGrid(nomegrid);
	//},100);	
	
	return true;
}


//Evento generato a fronte di data validata formalmente da jscMaskInput
//isEnterKey=true vuol dire premuto il tasto enter
//isEnterKey=false vuol dire terminato di inserire il dato 
function gridev_filtrogrid_endDataInsert(objTxt, isEnterKey){
	if(!objTxt)return;
	var tmp_obj = ottieniFiltroGridFromId(objTxt.id);
	if(!tmp_obj)return;
	
	var tmp_valore = objTxt.value;
	var tmp_txt_mex = "";
	var ritCode = isDataValida(tmp_valore, "/", tmp_obj[6]);
	/*
	switch(ritCode){
		case 0:
			//tutto ok
			break;
		case 1:
			tmp_txt_mex = ottieniErrorMexForObj(tmp_obj , 0, "Il campo data risulta vuoto o contiene un valore non corretto!");
			//data vuota o invalida
			break;
		case 2:
			//giorno genericamente errato
			tmp_txt_mex = ottieniErrorMexForObj(tmp_obj , 1, "Il giorno inserito risulta errato!");
			break;
		case 3:
			//giorno errato rispetto al mese/anno
			tmp_txt_mex = ottieniErrorMexForObj(tmp_obj , 2, "Il giorno inserito risulta errato rispetto al mese/anno!");
			break;
		case 4:
			//mese errato
			tmp_txt_mex = ottieniErrorMexForObj(tmp_obj , 3, "Il mese inserito risulta errato!");
			break;
		case 5:
			//anno errato
			tmp_txt_mex = ottieniErrorMexForObj(tmp_obj, 4, "L'anno inserito risulta errato!");
			break;
	}
	if(tmp_txt_mex!=""){
		alert(tmp_txt_mex);	
	}
	*/
	

	if(ritCode!=0){
		objTxt.value = "";
		return false;
	}
	
	
	var tmp_grid = ottieniGridFromFiltroParam(tmp_obj[1]);
	var nomegrid = tmp_grid._PERSNAME;
	
	//Campo data ok, procedo con evento 
	
	if(dh_tmp_timer) clearTimeout(dh_tmp_timer);
	dh_tmp_timer=setTimeout(function(){
		reloadGrid(nomegrid);
	},100);	
		
	return true;	
}


function gridev_research_mostraCalendar(e){
	var elm = e.target || e.srcElement;
	if(elm){
		if(elm.id){
			var tmp_id = elm.id;
			tmp_id = tmp_id.replace("_CALDIMG", "");
			var tmp_obj = ottieniResearchFromId(tmp_id);
			if(tmp_obj){
				cm_debuggaTxt("gridev_research_mostraCalendar called this id = " + tmp_id);	
				//_PERSUSECALD	(nome del calendar)
				//_PERSDATATYPE (dat da 6 o da 8)
				if(tmp_obj._PERSUSECALD!=""){
					
					var tmp_cald = ottieniCalendarFromName(tmp_obj._PERSUSECALD);
					
					var tmp_formato = "%d/%m/%Y";
					if(tmp_obj._PERSDATATYPE==6)tmp_formato = "%d/%m/%y";
					tmp_cald.setDateFormat(tmp_formato);
					
					var txtObj = document.getElementById(tmp_obj._PERSNAME);
					
					if(txtObj){
						if(txtObj.value!="")tmp_cald.setDate(txtObj.value);

						var tmp_top = wiz_getAbsoluteTop(txtObj);
						var tmp_left = wiz_getAbsoluteLeft(txtObj);
						var tmp_height = getEffectiveHeight(txtObj);
						var new_pos = tmp_top + tmp_height + 5;
						new_pos = parseInt(""+new_pos,10);
						tmp_cald.setPosition(new_pos, tmp_left);
						tmp_cald._clearHeaderButtons=false;
						tmp_cald.setHeader(tmp_cald._PERSDHEADERVIS, tmp_cald._PERSDRAGGABLE, tmp_cald._PERSHEADERBUTTON);
						
						tmp_cald._PERSISONFILTRI = false;
						tmp_cald._PERSATTACHEDID=tmp_id;
						tmp_cald._PERSATTACCHEDFNZ=null;
						
						tmp_cald.parent.style.display="";
						
						tmp_cald.draw();
						
					}
				}

			}
		}
	}
}

function gridev_research_reshowCald(researchName){
	var tmp_obj = ottieniResearchFromId(researchName);
	if(tmp_obj){
		//_PERSUSECALD	(nome del calendar)
		//_PERSDATATYPE (dat da 6 o da 8)
		if(tmp_obj._PERSUSECALD!=""){
			
			var tmp_cald = ottieniCalendarFromName(tmp_obj._PERSUSECALD);
			if(tmp_cald.isVisible()){
				if(tmp_cald._PERSATTACHEDID==researchName){
					var txtObj = document.getElementById(tmp_obj._PERSNAME);
					
					if(txtObj){
						//if(txtObj.value!="")tmp_cald.setDate(txtObj.value);
						var tmp_top = wiz_getAbsoluteTop(txtObj);
						var tmp_left = wiz_getAbsoluteLeft(txtObj);
						var tmp_height = getEffectiveHeight(txtObj);
						var new_pos = tmp_top + tmp_height + 5;
						new_pos = parseInt(""+new_pos,10);
						
						tmp_cald.setPosition(new_pos, tmp_left);
						//tmp_cald._clearHeaderButtons=false;
						//tmp_cald.setHeader(tmp_cald._PERSDHEADERVIS, tmp_cald._PERSDRAGGABLE, tmp_cald._PERSHEADERBUTTON);
						//tmp_cald.draw();
					}
				}
			}						
		}
	}
}


//Evento generato a fronte di calendario chiuso e data inserita nella casella di testo 
function gridev_research_chiusoCalendar(resId){
	var tmp_obj = ottieniResearchFromId(resId);
	if(!tmp_obj)return;
	
	var DXRETURN = true;
	
	//Devo generare evento di scelta data da calendario 
    	var tmp_fnz = ottieniCodicePersFunctForObj(tmp_obj, "onDateChange");
	if(tmp_fnz!=""){
		window.setTimeout(function(){ 
			try{
				eval(""+trimSpecialChars(tmp_fnz));
			}
			catch(ex1){
				gridev_debuggaTxt("Errore on eval research_field onDateChange= " + getEx(ex1));
			}
		}, 10);
	}
	
	return DXRETURN;	
}

//Evento generato a fronte di data validata formalmente da jscMaskInput
//isEnterKey=true vuol dire premuto il tasto enter
//isEnterKey=false vuol dire terminato di inserire il dato 
function gridev_research_endDataInsert(objTxt, isEnterKey){
	if(!objTxt)return;
	var tmp_obj = ottieniResearchFromId(objTxt.id);
	if(!tmp_obj)return;
	
	var tmp_valore = objTxt.value;
	var tmp_txt_mex = "";
	var ritCode = isDataValida(tmp_valore, "/", tmp_obj._PERSDATATYPE);
	switch(ritCode){
		case 0:
			//tutto ok
			break;
		case 1:
			tmp_txt_mex = ottieniErrorMexForObj(tmp_obj , 0, "Il campo data risulta vuoto o contiene un valore non corretto!");
			//data vuota o invalida
			break;
		case 2:
			//giorno genericamente errato
			tmp_txt_mex = ottieniErrorMexForObj(tmp_obj , 1, "Il giorno inserito risulta errato!");
			break;
		case 3:
			//giorno errato rispetto al mese/anno
			tmp_txt_mex = ottieniErrorMexForObj(tmp_obj , 2, "Il giorno inserito risulta errato rispetto al mese/anno!");
			break;
		case 4:
			//mese errato
			tmp_txt_mex = ottieniErrorMexForObj(tmp_obj , 3, "Il mese inserito risulta errato!");
			break;
		case 5:
			//anno errato
			tmp_txt_mex = ottieniErrorMexForObj(tmp_obj, 4, "L'anno inserito risulta errato!");
			break;
	}
	if(tmp_txt_mex!=""){
		alert(tmp_txt_mex);	
	}

	if(ritCode!=0){
		objTxt.value = "";
		return false;
	}
	
	var DXRETURN = true;
	
	//Campo data ok, procedo con evento 
	if(isEnterKey==true){
	    var tmp_fnz = ottieniCodicePersFunctForObj(tmp_obj, "onKeyEnterPress");
		if(tmp_fnz!=""){
			window.setTimeout(function(){ 
				try{
					eval(""+trimSpecialChars(tmp_fnz));
				}
				catch(ex1){
					gridev_debuggaTxt("Errore on eval research_field onKeyEnterPress= " + getEx(ex1));
				}
			}, 10);
		}
	}
	else{
	    var tmp_fnz = ottieniCodicePersFunctForObj(tmp_obj, "onDateEnd");
		if(tmp_fnz!=""){
			window.setTimeout(function(){ 
				try{
					eval(""+trimSpecialChars(tmp_fnz));
				}
				catch(ex1){
					gridev_debuggaTxt("Errore on eval research_field onDateEnd= " + getEx(ex1));
				}
			}, 10);
		}
	}
	
	return DXRETURN;
}


//Evento generato a fronte di campo di input validat0 formalmente da jscMaskInput
//isEnterKey=true vuol dire premuto il tasto enter
//isEnterKey=false vuol dire terminato di inserire il dato 
function gridev_research_endInputMaskInsert(objTxt, isEnterKey){
	if(!objTxt)return;
	var tmp_obj = ottieniResearchFromId(objTxt.id);
	if(!tmp_obj)return;
	
	var tmp_valore = objTxt.value;
	var tmp_txt_mex = "";

	var DXRETURN = true;
	
	//Procedo con eventi
	// onKeyEnterPress
	if(isEnterKey==true){
	    var tmp_fnz = ottieniCodicePersFunctForObj(tmp_obj, "onKeyEnterPress");
		if(tmp_fnz!=""){
			window.setTimeout(function(){ 
				try{
					eval(""+trimSpecialChars(tmp_fnz));
				}
				catch(ex1){
					gridev_debuggaTxt("Errore on eval research_field onKeyEnterPress= " + getEx(ex1));
				}
			}, 10);
		}
	}
	else{
		// onInputMaskEnd
	    var tmp_fnz = ottieniCodicePersFunctForObj(tmp_obj, "onInputMaskEnd");
		if(tmp_fnz!=""){
			window.setTimeout(function(){ 
				try{
					eval(""+trimSpecialChars(tmp_fnz));
				}
				catch(ex1){
					gridev_debuggaTxt("Errore on eval research_field onInputMaskEnd= " + getEx(ex1));
				}
			}, 10);
		}
	}
	
	return DXRETURN;
	
}


function gridev_research_onClick(e){
	var DXRETURN = true;

	var elm = e.target || e.srcElement;
	if(elm){
		if(elm.id){
			var tmp_obj = ottieniResearchFromId(elm.id);
			if(tmp_obj){
			    var tmp_fnz = ottieniCodicePersFunctForObj(tmp_obj, "onClick");
				if(tmp_fnz!=""){
					window.setTimeout(function(){ 
						try{
							eval(""+trimSpecialChars(tmp_fnz));
						}
						catch(ex1){
							gridev_debuggaTxt("Errore on eval research_field onClick= " + getEx(ex1));
						}
					}, 10);
				}
			}
		}
	}	
	
	return DXRETURN;
}

function gridev_research_onKeyEnterPress(e){
	var DXRETURN = true;
	
	var elm = e.target || e.srcElement;
	if(elm){
		if(elm.id){
			var tmp_obj = ottieniResearchFromId(elm.id);
			if(tmp_obj){
			    var tmp_fnz = ottieniCodicePersFunctForObj(tmp_obj, "onKeyEnterPress");
				if(tmp_fnz!=""){
					window.setTimeout(function(){ 
						try{
							eval(""+trimSpecialChars(tmp_fnz));
						}
						catch(ex1){
							gridev_debuggaTxt("Errore on eval research_field onKeyEnterPress= " + getEx(ex1));
						}
					}, 10);
				}
			}
		}
	}
	
	return DXRETURN;
}

function gridev_research_onBlur(e){
	var DXRETURN = true;
	
	var elm = e.target || e.srcElement;
	if(elm){
		if(elm.id){
			var tmp_obj = ottieniResearchFromId(elm.id);
			if(tmp_obj){
			    var tmp_fnz = ottieniCodicePersFunctForObj(tmp_obj, "onFocusOut");
				if(tmp_fnz!=""){
					window.setTimeout(function(){ 
						try{
							eval(""+trimSpecialChars(tmp_fnz));
						}
						catch(ex1){
							gridev_debuggaTxt("Errore on eval research_field onFocusOut= " + getEx(ex1));
						}
					}, 10);
				}
			}
		}
	}
	
	return DXRETURN;
}

//Evento generato a fronte di data validata formalmente da jscMaskInput
//isEnterKey=true vuol dire premuto il tasto enter
//isEnterKey=false vuol dire terminato di inserire il dato 
function gridev_grid_endDataInsert(gridname, objTxt, isEnterKey, persDataType){
	if(!objTxt)return;
	var tmp_grid = ottieniGridFromName(gridname);
	if(!tmp_grid)return false;
	
	var tmp_valore = objTxt.value;
	var tmp_txt_mex = "";
	var ritCode = isDataValida(tmp_valore, "/", persDataType);
	switch(ritCode){
		case 0:
			//tutto ok
			break;
		case 1:
			tmp_txt_mex = ottieniErrorMexForObj(tmp_grid , 0, "Il campo data risulta vuoto o contiene un valore non corretto!");
			//data vuota o invalida
			break;
		case 2:
			//giorno genericamente errato
			tmp_txt_mex = ottieniErrorMexForObj(tmp_grid , 1, "Il giorno inserito risulta errato!");
			break;
		case 3:
			//giorno errato rispetto al mese/anno
			tmp_txt_mex = ottieniErrorMexForObj(tmp_grid , 2, "Il giorno inserito risulta errato rispetto al mese/anno!");
			break;
		case 4:
			//mese errato
			tmp_txt_mex = ottieniErrorMexForObj(tmp_grid , 3, "Il mese inserito risulta errato!");
			break;
		case 5:
			//anno errato
			tmp_txt_mex = ottieniErrorMexForObj(tmp_grid , 4, "L'anno inserito risulta errato!");
			break;
	}
	if(tmp_txt_mex!=""){
		alert(tmp_txt_mex);	
	}

	if(ritCode!=0){
		objTxt.value = "";
		return false;
	}
	
	//Campo data ok, procedo con evento 
	return true;
}

function onGridMouseOver(gridname, rowId, cellInd){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	if(gridbox._PERSHIGHTLIGHT==0)return;
	
    var cell=gridbox.cells(rowId,cellInd).cell;
	// se la cella è cambiata, ossia se mi sono spostato su una nuova cella
	if (cell!=gridbox._PERS_old_cell){
		if(gridbox._PERSHIGHTLIGHT==1){
			// alla cella che ho lasciato rimetto lo stile di default
		    if(gridbox._PERS_old_cell)gridbox._PERS_old_cell.className="";
			cell.className="cella_evidenziata";
		}
		gridbox._PERS_old_cell=cell;
		gridbox._PERS_old_row=rowId;
	}
}
function onGridMouseOut(gridname){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	if(gridbox._PERSHIGHTLIGHT==0)return;
	if(gridbox._PERS_old_cell){
		gridbox._PERS_old_cell.className="";
	}
}

function onGridXLE(gridname){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	if(gridbox._PERSBLOCKACTION==true)return false;
		
	var DXRETURN = true;
	
    var tmp_fnz = ottieniCodicePersFunctForObj(gridbox, "onXLE");
	if(tmp_fnz!=""){
		window.setTimeout(function(){ 
			try{
				eval(""+trimSpecialChars(tmp_fnz));
			}
			catch(ex1){
				gridev_debuggaTxt("Errore on eval grid onXLE= " + getEx(ex1));
			}
		}, 10);
	}
	
	return DXRETURN;
}


function gridev_onGridEnterKeyPressed(gridname, rowId, cellIdx){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	if(gridbox._PERSBLOCKACTION==true)return false;
	
	var DXRETURN = true;
	
    var tmp_fnz = ottieniCodicePersFunctForObj(gridbox, "onEnter");
	if(tmp_fnz!=""){
		try{
			eval(""+trimSpecialChars(tmp_fnz));
		}
		catch(ex1){
			gridev_debuggaTxt("Errore on eval grid onEnter= " + getEx(ex1));
		}
	}

	return DXRETURN;	
}

function gridev_onGridSelectStateChanged(gridname, rowId){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	if(gridbox._PERSBLOCKACTION==true)return false;
	
	var DXRETURN = true;
	
    var tmp_fnz = ottieniCodicePersFunctForObj(gridbox, "onSelectStateChanged");
	if(tmp_fnz!=""){
		try{
			eval(""+trimSpecialChars(tmp_fnz));
		}
		catch(ex1){
			gridev_debuggaTxt("Errore on eval grid onSelectStateChanged= " + getEx(ex1));
		}
	}

	return DXRETURN;
}

function gridev_onGridRowSelect(gridname, rowId){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	if(gridbox._PERSBLOCKACTION==true)return false;
	
	var DXRETURN = true;
	
    var tmp_fnz = ottieniCodicePersFunctForObj(gridbox, "onRowClick");
	if(tmp_fnz!=""){
		try{
			eval(""+trimSpecialChars(tmp_fnz));
		}
		catch(ex1){
			gridev_debuggaTxt("Errore on eval grid onRowClick= " + getEx(ex1));
		}
	}

	return DXRETURN;
}
function gridev_onGridCheckbox(gridname, rowId, cellInd, state){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	if(gridbox._PERSBLOCKACTION==true)return false;
	
	var DXRETURN = true;
	
    var tmp_fnz = ottieniCodicePersFunctForObj(gridbox, "onCheckbox");
	if(tmp_fnz!=""){
		try{
			eval(""+trimSpecialChars(tmp_fnz));
		}
		catch(ex1){
			gridev_debuggaTxt("Errore on eval grid onCheckbox= " + getEx(ex1));
		}
	}

	return DXRETURN;
}

function gridev_onHeaderClick(gridname,indice){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	if(gridbox._PERSBLOCKACTION==true)return false;
	
	var DXRETURN = true;
	
        var tmp_fnz = ottieniCodicePersFunctForObj(gridbox, "onHeaderClick");
	if(tmp_fnz!=""){
		try{
			eval(""+trimSpecialChars(tmp_fnz));
		}
		catch(ex1){
			gridev_debuggaTxt("Errore on eval grid onHeaderClick= " + getEx(ex1));
		}
	}

	return DXRETURN;
}


//Inizio Aggiunta evento onAfterSorting Marco Nastasi 190209
function gridev_onAfterSorting(gridname,indice,tipo_sort, order){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	if(gridbox._PERSBLOCKACTION==true)return false;
	
	var DXRETURN = true;
	
        var tmp_fnz = ottieniCodicePersFunctForObj(gridbox, "onAfterSorting");
	if(tmp_fnz!=""){
		try{
			eval(""+trimSpecialChars(tmp_fnz));
		}
		catch(ex1){
			gridev_debuggaTxt("Errore on eval grid onAfterSorting= " + getEx(ex1));
		}
	}

	return DXRETURN;
}
//FINE Aggiunta evento onBeforeSorting Marco Nastasi 190209


function gridev_onGridRowDblClick(gridname, rowId, cellIdx){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	if(gridbox._PERSBLOCKACTION==true)return false;
	
	var DXRETURN = true;
	
    var tmp_fnz = ottieniCodicePersFunctForObj(gridbox, "onRowDblClick");
	if(tmp_fnz!=""){
		try{
			eval(""+trimSpecialChars(tmp_fnz));
		}
		catch(ex1){
			gridev_debuggaTxt("Errore on eval grid onRowDblClick= " + getEx(ex1));
		}
	}
	
	return DXRETURN;
}

function gridev_onGridBeforeEditCell(gridname, rowId, cellIdx){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	if(gridbox._PERSBLOCKACTION==true)return false;
	
	var DXRETURN = true;
	
    var tmp_fnz = ottieniCodicePersFunctForObj(gridbox, "onBeforeEditCell");
	if(tmp_fnz!=""){
		try{
			eval(""+trimSpecialChars(tmp_fnz));
		}
		catch(ex1){
			gridev_debuggaTxt("Errore on eval grid onBeforeEditCell= " + getEx(ex1));
		}
	}
	
	return DXRETURN;
}
function gridev_onGridEditCell(gridname, rowId, cellIdx){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	if(gridbox._PERSBLOCKACTION==true)return false;
	
	var DXRETURN = true;
	
   	var tmp_fnz = ottieniCodicePersFunctForObj(gridbox, "onEditCell");
	if(tmp_fnz!=""){
		try{
			eval(""+trimSpecialChars(tmp_fnz));
		}
		catch(ex1){
			gridev_debuggaTxt("Errore on eval grid onEditCell= " + getEx(ex1) + " - <br>fnz = " + tmp_fnz);
		}
	}
	
	return DXRETURN;
	
}
function gridev_onGridAfterEditCell(gridname, rowId, cellIdx, newValue, oldValue){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	if(gridbox._PERSBLOCKACTION==true)return false;
	
	var DXRETURN = true;
	
    	var tmp_fnz = ottieniCodicePersFunctForObj(gridbox, "onAfterEditCell");
	if(tmp_fnz!=""){
		try{
			eval(""+trimSpecialChars(tmp_fnz));
		}
		catch(ex1){
			gridev_debuggaTxt("Errore on eval grid onAfterEditCell= " + getEx(ex1) + " - <br>fnz = " + tmp_fnz);
		}
	}
	
	return DXRETURN;
}

function reloadTool(toolname){
	if(ottieniToolFromName(toolname)){
		//effettuo il reload della tree
		doLoadTool(ottieniToolFromName(toolname));
	}
}

function doLoadTool(toolbar){
	if(!toolbar)return;
	if(toolbar._PERSMODE=="QUERY"){
		toolbar._PERSBLOCKACTION=true;

		var tmp_url = checkAndCacheUrl(toolbar._PERSURL);
		var params = "";
		params = ottieniLoadXmlParamsForObj(toolbar);
		if(params=="NEEDEDSTOP")return false;
				
		toolbar.loadXML(tmp_url+params);
		
		toolbar._PERSBLOCKACTION=false;
	}
	if(toolbar._PERSMODE=="ARRAY"){
		if(toolbar._PERSITEM){
			toolbar._PERSBLOCKACTION=true;
			for(var i =0;i<toolbar._PERSITEM.length;i++){
				toolbar.addButtonTwoState(toolbar._PERSITEM[i][0], i, toolbar._PERSITEM[i][2], toolbar._PERSITEM[i][3], toolbar._PERSITEM[i][4]);
				if(toolbar._PERSITEM[i][1]==true){
					toolbar.setItemState(toolbar._PERSITEM[i][0],1);
				}
				else {
					toolbar.setItemState(toolbar._PERSITEM[i][0],0);
				}
			}
			toolbar._PERSBLOCKACTION=false;
		}
	}
	return true;
}

function tool_ottieniXmlUrl(toolname, seSoloParametri){
	var toolbar = ottieniToolFromName(toolname);
	if(!toolbar)return;
	var tmp_url = checkAndCacheUrl(toolbar._PERSURL);
	var params = "";
	params = ottieniLoadXmlParamsForObj(toolbar);
	if(params=="NEEDEDSTOP")return "";
	
    if(seSoloParametri==true)return params;
    return tmp_url + params;
}


function reloadGrid(gridname){
	if(dh_tmp_timer){
		clearTimeout(dh_tmp_timer);
		dh_tmp_timer=null;
	}
	if(ottieniGridFromName(gridname)){
		//effettuo il reload della grid
		doLoadGrid(ottieniGridFromName(gridname));
	}
}


function doLoadGrid(gridbox){
	//Se sono in modalità sviluppo ritorno 
	if(layout_svilMode)return;
	
	if(!gridbox)return;
	gridbox.clearAll();
 	mostra_caricamento(gridbox._PERSNAME);
 	
 	window.setTimeout(function(){ proseguiLoadGrid(gridbox); },10);
}

function proseguiLoadGrid(gridbox){	
	if(!gridbox)return;
     // la variabile xmlFileUrl è di libreria. va a contenere l'url completa del file che la loadXML va a caricare. in modalità smart rendering questa
     // variabile viene scritta la prima volta (e contiene quindi il primo filtro applicato), ma nel momento in cui deve essere risettata
     // automaticamente (in seguito allo scroll della grid, quando viene richiesto un nuovo pacchetto di righe) in realtà non viene riaggiornata, perchè
     // viene fatto solo se essa è vuota (ossia la prima volta). è un errore di libreria, per ovviare ad esso dopo il clearAll svuoto la variabile manualmente
    gridbox.xmlFileUrl="";
	var tmp_url = checkAndCacheUrl(gridbox._PERSURL);

	var params = '';
	params = ottieniLoadXmlParamsForObj(gridbox);
	if(params=="NEEDEDSTOP"){
		nascondi_caricamento();
		return false;
	}
	 
	//Necessito di settare i vari parametri 
	var tmp_orderby = checkValore(gridbox._PERSCOLSORT);
    if(tmp_orderby!="") params += "&orderby="+tmp_orderby;
    else gridbox._PERSCOLSORT=null;
    
    var direction = checkValore(gridbox._PERSDIRECTIONSORT);
    if(direction!="") params += "&direction="+direction;
    else gridbox._PERSDIRECTIONSORT=null;
    
	if(gridbox._PERSUSECSV==false){
		gridbox.loadXML(tmp_url + params);
	}
    else{
		gridbox.loadCSVFile(tmp_url + params);
    }
	return true;
}

function grid_ottieniXmlUrl(gridname, seSoloParametri){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	var tmp_url = checkAndCacheUrl(gridbox._PERSURL);
	var params = '';
	params = ottieniLoadXmlParamsForObj(gridbox);
	
	var tmp_orderby = checkValore(gridbox._PERSCOLSORT);
    if(tmp_orderby!="") params += "&orderby="+tmp_orderby;
    else gridbox._PERSCOLSORT=null;
    
    var direction = checkValore(gridbox._PERSDIRECTIONSORT);
    if(direction!="") params += "&direction="+direction;
    else gridbox._PERSDIRECTIONSORT=null;

    if(seSoloParametri==true)return params;
    return tmp_url + params;
}

function reloadTree(treename){
	if(ottieniTreeFromName(treename)){
		ottieniTreeFromName(treename).deleteChildItems(0);
		doLoadTree(ottieniTreeFromName(treename));
	}
}
function doLoadTree(treeview){
	if(!treeview)return;
	var tmp_url = checkAndCacheUrl(treeview._PERSURL);
	var params = "";
	params = ottieniLoadXmlParamsForObj(treeview);
	if(params=="NEEDEDSTOP")return false;
	

	if(treeview._PERSDYNAMICLOADING){
		treeview.setXMLAutoLoading(tmp_url);
		params = params + "&id=0";
	}
	
	if(treeview._PERSUSECSV==false){
		treeview.loadXML(tmp_url + params);
	}
    else{
		treeview.loadCSV(tmp_url + params);
    }
	//treeview.loadXML(tmp_url + params);
	return true;
}

function tree_ottieniXmlUrl(trename, seSoloParametri){
	var treebox = ottieniTreeFromName(trename);
	if(!treebox)return;
	var tmp_url = checkAndCacheUrl(treebox._PERSURL);
	var params = "";
	params = ottieniLoadXmlParamsForObj(treebox);
	if(params=="NEEDEDSTOP")return "";
	
	if(treeview._PERSDYNAMICLOADING){
		params = params + "&id=0";
	}
	
    if(seSoloParametri==true)return params;
    return tmp_url + params;
}

function reloadIFrame(framename){
	if(ottieniIFrameFromName(framename)){
		doLoadIFrame(ottieniIFrameFromName(framename));
	}
	
}
function doLoadIFrame(objFrame){
	if(!objFrame)return;
	var tmp_objFrm = document.getElementById(objFrame._PERSID);
	if(tmp_objFrm){
		tmp_objFrm.src = "";
		tmp_objFrm.style.display = "";
		var tmp_url = checkAndCacheUrl(objFrame._PERSURL);
		var params = "";
		params = ottieniLoadXmlParamsForObj(objFrame);
		if(params=="NEEDEDSTOP")return false;
		
		tmp_objFrm.src = tmp_url + params;
	}
}

function reloadCombo(comboname){
	var combobox = ottieniComboFromName(comboname);
	if(!combobox)return;
	if(combobox._PERSMODE=="QUERY"){
		combobox._PERSBLOCKACTION = true;
		combobox._PERSOLDITEMID="";
		combobox.unSelectOption();
		combobox.clearAll(false);
		doLoadCombo(combobox);
		combobox._PERSBLOCKACTION = false;
	}
	if(combobox._PERSMODE=="ARRAY"){
		combobox._PERSBLOCKACTION = true;
		combobox._PERSOLDITEMID="";
		combobox.unSelectOption();
		combobox.clearAll(false);
		doLoadCombo(combobox);			
		combobox._PERSBLOCKACTION = false;
	}
}

function isComboEmpty(combobox){
	if(combobox){
		if(combobox.optionsArr){
			if(combobox.optionsArr.length>=1){
				return false;
			}
		}
	}
	return true;
}
function doLoadCombo(combobox){
	if(!combobox)return;
	if(combobox._PERSMODE=="QUERY"){
		combobox._PERSBLOCKACTION=true;

		var tmp_url = checkAndCacheUrl(combobox._PERSURL);
		var params = "";
		params = ottieniLoadXmlParamsForObj(combobox);
		if(params=="NEEDEDSTOP")return false;
		
		params = params + "&name="+ combobox._PERSNAME;
		if(checkValore(combobox._PERSINITSELECT)!="")params = params +"&init_select="+combobox._PERSINITSELECT;
		
		try{
			combobox.loadXML(tmp_url + params, function(){
				combobox._PERSBLOCKACTION=true;
				if(checkValore(combobox._PERSINITDESCR)!=""){
					combobox.setComboText(combobox._PERSINITDESCR);
				}
				var tmp_combobox = combobox;
				window.setTimeout(function(){ tmp_combobox._PERSBLOCKACTION=false; },150);
				
				//ripristino cookie
				if(combobox._PERSUSECOOKIE==true){
					if(combobox._PERSUSECOOKIEDONE==false){
						//cerco di ottenere il cookie
						if(gridev_cookieGester){
							var tmp_val = gridev_cookieGester.getParam(combobox._PERSNAME);
							if(tmp_val!=""){
								var tmp_valInt = parseInt(""+ tmp_val, 10);
								try{
									combo_selezionaOpzioneByIndex(combobox._PERSNAME, tmp_valInt);
									combobox._PERSUSECOOKIEDONE=true;
								}
								catch(exIgn1){
									cm_debuggaTxt("Errore in seleziona index[" + tmp_valInt + "] per combo[" + gridev_mycombo[i]._PERSNAME + "] da cookie = " + getEx(exIgn1));
								}
							}
						}
					}
				}
				
			    var tmp_fnz = ottieniCodicePersFunctForObj(combobox, "onXLE");
				if(tmp_fnz!=""){
					window.setTimeout(function(){ 
						try{
							eval(""+trimSpecialChars(tmp_fnz));
						}
						catch(ex1){
							gridev_debuggaTxt("Errore on eval combobox onXLE = " + getEx(ex1));
						}
					}, 10);
				}
				
				
			});
		}
		catch(exIgn2){}
		//combobox._PERSBLOCKACTION=false;	
	}
	
	if(combobox._PERSMODE=="ARRAY"){
		if(combobox._PERSITEM){
			combobox._PERSBLOCKACTION=true;
			
			var idx_toSelect = -1;
			for(var i =0;i<combobox._PERSITEM.length;i++){
				var css_cmb_style = "";
				combobox.addOption(combobox._PERSITEM[i][2],combobox._PERSITEM[i][3],css_cmb_style, combobox._PERSITEM[i][4]);
				if(combobox._PERSITEM[i][1]==true){
					idx_toSelect = i;
				}
			}
			if(idx_toSelect!=-1){
				combobox.selectOption(idx_toSelect, false,true, true);
			}
			if(checkValore(combobox._PERSINITDESCR)!=""){
				combobox.setComboText(combobox._PERSINITDESCR);
			}
			combobox._PERSBLOCKACTION=false;
		}
	}
	return true;
}

function combo_ottieniXmlUrl(comboname, seSoloParametri){
	var combobox = ottieniComboFromName(comboname);
	if(!combobox)return;
	
	var tmp_url = checkAndCacheUrl(combobox._PERSURL);
	var params = "";
	params = ottieniLoadXmlParamsForObj(combobox);
	if(params=="NEEDEDSTOP")return "";
	
	params = params + "&name="+ combobox._PERSNAME;
	if(checkValore(combobox._PERSINITSELECT)!="")params = params +"&init_select="+combobox._PERSINITSELECT;

	if(seSoloParametri==true)return params;
    return tmp_url + params;
}

function ottieniLoadXmlParamsForObj(obj){
	var rit = "";
	var conta_fixed_text = 0;
	if(obj._PERSFILTRIPARAM){
		for(var i=0;i < obj._PERSFILTRIPARAM.length;i++){
			var tmp_param_nome  = "";
			var tmp_param_value = "";
			var tmp_obj = null;
			var tmp_val = null;
			
			switch(obj._PERSFILTRIPARAM[i][0]){
				case "FIXED_TEXT":
					if(obj._PERSFILTRIPARAM[i][2]==""){
						tmp_param_nome = "FIXED_TEXT_" + conta_fixed_text;
						conta_fixed_text++;
					}
					else{
						tmp_param_nome = obj._PERSFILTRIPARAM[i][2];
					}
					tmp_param_value = obj._PERSFILTRIPARAM[i][1];
					break;
				case "DHTMLX_COMBO":
					if(obj._PERSFILTRIPARAM[i][2]==""){
						tmp_param_nome = obj._PERSFILTRIPARAM[i][1];
					}
					else{
						tmp_param_nome = obj._PERSFILTRIPARAM[i][2];
					}
					tmp_obj = ottieniComboFromName(obj._PERSFILTRIPARAM[i][1]);
					if(tmp_obj){
						tmp_val = tmp_obj.getSelectedValue();
						if(obj._PERSFILTRIPARAM[i][3]==true){
							if(!tmp_val) { 
								alert("" + tmp_obj._PERSNEEDEDMEX); 
								return "NEEDEDSTOP";
							}
						}
						if(tmp_val)tmp_param_value = ""+tmp_val;
					}
					break;
				case "DHTMLX_TREE":
					if(obj._PERSFILTRIPARAM[i][2]==""){
						tmp_param_nome = obj._PERSFILTRIPARAM[i][1];
					}
					else{
						tmp_param_nome = obj._PERSFILTRIPARAM[i][2];
					}
					tmp_obj = ottieniTreeFromName(obj._PERSFILTRIPARAM[i][1]);
					if(tmp_obj){
						tmp_val = tmp_obj.getSelectedItemId();
						if(obj._PERSFILTRIPARAM[i][3]==true){
							if(!tmp_val) { 
								alert("" + tmp_obj._PERSNEEDEDMEX); 
								return "NEEDEDSTOP";
							}
						}
						if(tmp_val){
					        tmp_param_value = "" + tmp_obj.getUserData(tmp_val,"elenco");
					       	tmp_param_value = checkValore(tmp_param_value);
							//Se il nodo è foglia e quindi non ha il tag userdata assegno al parametro il valore del nodo stesso
					        if(tmp_param_value=="")tmp_param_value = "" + tmp_val;       
						}
					}
					break;
				case "DHTMLX_TOOL":
					if(obj._PERSFILTRIPARAM[i][2]==""){
						tmp_param_nome = obj._PERSFILTRIPARAM[i][1];
					}
					else{
						tmp_param_nome = obj._PERSFILTRIPARAM[i][2];
					}
					tmp_obj = ottieniToolFromName(obj._PERSFILTRIPARAM[i][1]);
					if(tmp_obj){
						var tmp_val = null;
					    tmp_obj.forEachItem( function(itemId){
					    	if(tmp_obj.getItemState(itemId)==1){
					    		tmp_val = itemId;
					    	}
						    }); 
						if(obj._PERSFILTRIPARAM[i][3]==true){
							if(!tmp_val) { 
								alert("" + tmp_obj._PERSNEEDEDMEX); 
								return "NEEDEDSTOP";
							}
							//tmp_param_value = "" + tmp_val;
						}
						if(tmp_val)tmp_param_value = ""+tmp_val;
					}
					break;
				case "DOCUMENT_BYID":
					var tmp_obj_id = obj._PERSFILTRIPARAM[i][1];
					if(obj._PERSFILTRIPARAM[i][2]==""){
						tmp_param_nome = tmp_obj_id;
					}
					else{
						tmp_param_nome = obj._PERSFILTRIPARAM[i][2];
					}

					tmp_obj = document.getElementById(""+tmp_obj_id);
					if(tmp_obj){
						var tmp_val = null;
						var tmp_nodeName =("" + tmp_obj.nodeName).toUpperCase();
						if( (tmp_nodeName=="INPUT")
						 || (tmp_nodeName=="TEXTAREA")
						 ){
						 	if(tmp_nodeName=="INPUT"){
								var tmp_type =("" + tmp_obj.type).toUpperCase();
								if(tmp_type=="TEXT"){
									tmp_param_value = tmp_obj.value;
									tmp_val = tmp_obj.value;
								}
								if(tmp_type=="RADIO"){
									if( tmp_obj.checked){
										tmp_val=true;
										tmp_param_value="true";
									}
									else tmp_param_value="false";
								}
								if(tmp_type=="CHECKBOX"){
									if( tmp_obj.checked){
										tmp_val = true;
										tmp_param_value="true";
									}
									else tmp_param_value="false";
								}
							}
							else {
								tmp_param_value = tmp_obj.value;
								tmp_val = tmp_obj.value;
							}
						}
						else{
							tmp_param_nome="";
						}
						
						if(obj._PERSFILTRIPARAM[i][3]==true){
							if(!tmp_val) {
								if(ottieniResearchFromId(tmp_obj_id)){
									if(ottieniResearchFromId(tmp_obj_id)._PERSNEEDEDMEX!=""){
										alert("" + ottieniResearchFromId(tmp_obj_id)._PERSNEEDEDMEX); 
									}
								}
								return "NEEDEDSTOP";
							}
						}
					}
					
					break;
				case "DOCUMENT_BYID_RADIOGROUP":
					var tmp_obj_id = obj._PERSFILTRIPARAM[i][1];
					if(obj._PERSFILTRIPARAM[i][2]==""){
						tmp_param_nome = tmp_obj_id;
					}
					else{
						tmp_param_nome = obj._PERSFILTRIPARAM[i][2];
					}
					var tmp_val = false;
					tmp_obj=document.getElementsByTagName('input');
					for(var z=0;z<tmp_obj.length;z++){
						var tmp_type =("" + tmp_obj[z].type).toUpperCase();
						if(tmp_type=="RADIO"){
							if(tmp_obj[z].name==tmp_obj_id){
								if(tmp_obj[z].checked==true){
									tmp_param_value=tmp_obj[z].id;
									tmp_val=true;
									break;
								}
							}
						}
					}
					if(obj._PERSFILTRIPARAM[i][3]==true){
						if(!tmp_val) {
							if(ottieniResearchFromId(tmp_obj_id)){
								if(ottieniResearchFromId(tmp_obj_id)._PERSNEEDEDMEX!=""){
									alert("" + ottieniResearchFromId(tmp_obj_id)._PERSNEEDEDMEX); 
								}
							}
							return "NEEDEDSTOP";
						}
					}
					break;
			}
			
			if( (tmp_param_nome!="")&&(tmp_param_value!="")) {
				rit += "&" + tmp_param_nome + "=" + tmp_param_value;
			}
		}
	}
	return rit;
}

function controllaFixedTextName(tmp_type, tmp_nome){
	if(tmp_type=="FIXED_TEXT"){
		if(tmp_nome=="")return false;
	}
	return true;
}

// ==================================================================================
// Azioni possibili su menu
// ==================================================================================
function menu_abilitaItem(menuname, itemId){
	var tmpMenu = ottieniMenuFromName(menuname);
	if(!tmpMenu)return false;
	tmpMenu.setItemEnabled(itemId);
}
function menu_disabilitaItem(menuname, itemId){
	var tmpMenu = ottieniMenuFromName(menuname);
	if(!tmpMenu)return false;
	tmpMenu.setItemDisabled(itemId);
}

function menu_cambiaImmaginiItem(menuname, itemId, imgEn, imgDis){
	var tmpMenu = ottieniMenuFromName(menuname);
	if(!tmpMenu)return false;
	tmpMenu.setItemImage(itemId, imgEn, imgDis);
}

function menu_cambiaTestoItem(menuname, itemId, txt){
	var tmpMenu = ottieniMenuFromName(menuname);
	if(!tmpMenu)return false;
	tmpMenu.setItemText(itemId, txt);
}

function menu_cambiaTooltipItem(menuname, itemId, tooltipTxt){
	var tmpMenu = ottieniMenuFromName(menuname);
	if(!tmpMenu)return false;
	tmpMenu.setTooltip(itemId, tooltipTxt);
}
// ==================================================================================
// Azioni possibili su grid
// ==================================================================================

function grid_nascondiColonna(gridname, colIdx){
	grid_showHideColumn(gridname, colIdx, true);
}
function grid_mostraColonna(gridname, colIdx){
	grid_showHideColumn(gridname, colIdx, false);
}
//Mantengo per retrocompatibilità
function nascondiColonna(gridname, colIdx){	
	grid_nascondiColonna(gridname, colIdx);
}
//Mantengo per retrocompatibilità
function mostraColonna(gridname, colIdx){
	grid_mostraColonna(gridname, colIdx);
}
function grid_showHideColumn(gridname, colIdx, ifHide){
	if(ottieniGridFromName(gridname)){
		ottieniGridFromName(gridname).setColumnHidden(colIdx, ifHide);
	}	
}
function grid_getNumRows(gridname,countChildNode){
	var tmp_gridbox = ottieniGridFromName(gridname);
	if(!tmp_gridbox)return -1;
	if(tmp_gridbox._ISTREEGRID==true){
		if(typeof(countChildNode)!="undefined"){
			if(countChildNode==true){
			var tmp_conta_figli = 0;
			var tmp_gridname = gridname;
			tmp_gridbox.forEachRow(function(id){
				//prelevo oggetto riga e cerco di recuperare il numero figli
				    tmp_conta_figli = tmp_conta_figli + grid_getChildrenCount(tmp_gridname,id);
  				});
			return tmp_gridbox.getRowsNum() + tmp_conta_figli;
			}
		}
	}

	return tmp_gridbox.getRowsNum();
}

function grid_getChildrenCount(gridname,rowId){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	return gridbox.hasChildren(rowId);
}

function grid_apriTutteRighe(gridname){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	if(gridbox._ISTREEGRID==false)return;
	try{
		gridbox.expandAll();
	}
	catch(ex1Ign){}
}
function grid_chiudiTutteRighe(gridname){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	if(gridbox._ISTREEGRID==false)return;
	try{
		gridbox.closeAll();
	}
	catch(ex1Ign){}
}

function grid_apriChiudiRiga(gridname, rowId){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	if(gridbox._ISTREEGRID==false)return;
	try{
	    var ha_figli = gridbox.hasChildren(rowId);
	    if(ha_figli){
	        var stato_riga = gridbox.getOpenState(rowId);
	        if(stato_riga) gridbox.closeItem(rowId);
	     	else gridbox.openItem(rowId);
		}
	}
	catch(ex1Ign){
		
	}
}
function grid_settaUrl(gridname, nuovoUrl){
	objSettaUrl(ottieniGridFromName(gridname), nuovoUrl);	
}
function grid_settaParametroValue(gridname, nomeParametro, valoreParametro){
	objSettaParametroValue(ottieniGridFromName(gridname), nomeParametro, valoreParametro);
}
function grid_prelevaParametroValue(gridname, nomeParametro){
	return objPrelevaParametroValue(ottieniGridFromName(gridname), nomeParametro);
}

function grid_svuotaGrid(gridname){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	gridbox.clearAll();
}

function grid_mostra(gridname){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	
	showOrHideElement(gridbox, false);
}

function grid_nascondi(gridname){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	
	showOrHideElement(gridbox, true);
}

function grid_settaColumnSize(gridname, colIdx, widthP){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	
	//gridbox.clearAll();
	
	//ATTENZIONE Funzioni private!!!
	var oldCellType = gridbox.cellWidthType;
	gridbox.cellWidthType="%";

	var n="cellWidthPC";
	var tmp_wwIniArr = gridbox.initCellWidth;
	if(tmp_wwIniArr[colIdx]){
		tmp_wwIniArr[colIdx] = widthP;
		gridbox.initCellWidth = tmp_wwIniArr;
	}
	var summ2=0;
	for (var i=0; i<tmp_wwIniArr.length; i++){
		if (i<gridbox.ind){
		   if(gridbox._fake)gridbox._fake[""][i]=tmp_wwIniArr[i];
		   summ2+=tmp_wwIniArr[i]*1;
		   }
		else
		   gridbox[n][i]=tmp_wwIniArr[i];
	}
	if(gridbox._fake)gridbox._fake.entBox.style.width=summ2+"px";
	if(gridbox._fake)gridbox._fake.objBuf.style.width=summ2+"px";

	var pa=gridbox.entBox.childNodes[0];
	pa.style.left=summ2-(_isFF?0:0)+"px";
	if (gridbox.ftr){
		gridbox.ftr.style.left=summ2-(_isFF?0:0)+"px";
	}
	pa.style.width=gridbox.entBox.offsetWidth-summ2+"px";

	gridbox.setSizes();
	
	gridbox.cellWidthType=oldCellType;
}

function grid_settaRowColor(gridname, rowId, colore){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	gridbox.setRowColor(rowId, colore);
}

function grid_setUserData(gridname, rowId, userDataName, userDataValue){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	gridbox.setUserData(rowId, userDataName, userDataValue);
}
function grid_getUserData(gridname, rowId, userDataName){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	return gridbox.getUserData(rowId, userDataName);
}

function grid_aggiungiRiga(gridname, rowId, arrayColumnData, rowIdxBefore){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	gridbox.addRow(rowId, arrayColumnData, rowIdx);
}

function grid_eliminaRiga(gridname, rowId){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	gridbox.deleteRow(rowId);
}

function grid_cancellaSelezione(gridname){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	gridbox.clearSelection();
}

function grid_selezionaRiga(gridname, rowIdx){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	gridbox.selectRow(grid_ottieniRigaFromIdx(gridname,rowIdx), null, false, false);
}
function grid_selezionaRigaFromId(gridname, rowId){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	gridbox.selectRowById(rowId, false, false, false);
}
function grid_selezionaCella(gridname, rowId, cellIdx){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return;
	gridbox.selectCell(gridbox.getRowIndex(rowId), cellIdx, false, false, false, true);	
}

function grid_ottieniRigaFromId(gridname, rowId){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return null;
	return gridbox.getRowById(rowId);
}

function grid_ottieniRigaFromIdx(gridname, rowIdx){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return null;
	var rowId = gridbox.getRowId(rowIdx);
	return gridbox.getRowById(rowId);
}

function grid_ottieniCella(gridname, rowId, cellIdx){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return null;
	return gridbox.cells(rowId, cellIdx);
}
function grid_ottieniSelectedRowId(gridname){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return null;
	return gridbox.getRowId(gridbox.getRowIndex(gridbox.getSelectedId()));
}
function grid_ottieniSelectedRowIdx(gridname){
	var gridbox = ottieniGridFromName(gridname);
	if(!gridbox)return null;
	return gridbox.getRowIndex(gridbox.getSelectedId());
}


// ==================================================================================
// Azioni possibili su combo
// ==================================================================================


function combo_abilita(comboname){
	var objCombo = ottieniComboFromName(comboname);
	if(objCombo){
		objCombo.disable(false);
	}
}
function combo_disabilita(comboname){
	var objCombo = ottieniComboFromName(comboname);
	if(objCombo){
		objCombo.disable(true);
	}
}

function combo_getSelectedValue(comboname){
	var objCombo = ottieniComboFromName(comboname);
	if(objCombo){
		return objCombo.getSelectedValue();
	}
}
function combo_getSelectedIndex(comboname){
	var objCombo = ottieniComboFromName(comboname);
	if(objCombo){
		return objCombo.getSelectedIndex();
	}
}
function combo_selezionaOpzioneByValue(comboname, val){
	var objCombo = ottieniComboFromName(comboname);
	if(objCombo){
		objCombo._PERSBLOCKACTION=true;
		
		var idx = objCombo.getIndexByValue(val);
		objCombo.selectOption(idx, false,true, true);
		
		objCombo._PERSBLOCKACTION=false;
	}
}
function combo_selezionaOpzioneByIndex(comboname, idx){
	var objCombo = ottieniComboFromName(comboname);
	if(objCombo){
		objCombo._PERSBLOCKACTION=true;
		
		objCombo.selectOption(idx, false,true, true);
		
		objCombo._PERSBLOCKACTION=false;
	}
}
function combo_deselezionaOpzione(comboname){
	var objCombo = ottieniComboFromName(comboname);
	if(objCombo){
		objCombo._PERSBLOCKACTION=true;
		
		objCombo.unselectOption();
		
		objCombo._PERSBLOCKACTION=false;
	}
}

function combo_settaUrl(comboname, nuovoUrl){
	objSettaUrl(ottieniComboFromName(comboname), nuovoUrl);	
}
function combo_settaParametroValue(comboname, nomeParametro, valoreParametro){
	objSettaParametroValue(ottieniComboFromName(comboname), nomeParametro, valoreParametro);
}
function combo_prelevaParametroValue(comboname, nomeParametro){
	return objPrelevaParametroValue(ottieniComboFromName(comboname), nomeParametro);
}

function combo_mostra(comboname){
	var combobox = ottieniComboFromName(comboname);
	if(!combobox)return;
	showOrHideElement(combobox, false);
}
function combo_nascondi(comboname){
	var combobox = ottieniComboFromName(comboname);
	if(!combobox)return;	
	showOrHideElement(combobox, true);
}


// ==================================================================================
// Azioni possibili su toolbar
// ==================================================================================
function toolbar_settaUrl(toolbarname, nuovoUrl){
	objSettaUrl(ottieniToolFromName(toolbarname), nuovoUrl);	
}
function toolbar_settaParametroValue(toolbarname, nomeParametro, valoreParametro){
	objSettaParametroValue(ottieniToolFromName(toolbarname), nomeParametro, valoreParametro);
}
function toolbar_prelevaParametroValue(toolbarname, nomeParametro){
	return objPrelevaParametroValue(ottieniToolFromName(toolbarname), nomeParametro);
}

function toolbar_mostra(toolbarname){
	var toolbox = ottieniToolFromName(toolbarname);
	if(!toolbox)return;
	showOrHideElement(toolbox, false);
}
function toolbar_nascondi(toolbarname){
	var toolbox = ottieniToolFromName(toolbarname);
	if(!toolbox)return;
	showOrHideElement(toolbox, true);
}
function toolbar_getSelectedItem(toolbarname){
	var toolbox = ottieniToolFromName(toolbarname);
	if(!toolbox)return;
	
	toolbox.forEachItem( function(itemId){
		//richiamare la funzione setItemState non genera una chiamata all evento onStateChange
		var tmp_st = toolbox.getItemState(itemId);
		if(tmp_st==1)toolbox._PERSITEMSEL=itemId;
    }); 


    return toolbox._PERSITEMSEL;
}


// ==================================================================================
// Azioni possibili su treeview
// ==================================================================================
function tree_settaUrl(treename, nuovoUrl){
	objSettaUrl(ottieniTreeFromName(treename), nuovoUrl);	
}
function tree_settaParametroValue(treename, nomeParametro, valoreParametro){
	objSettaParametroValue(ottieniTreeFromName(treename), nomeParametro, valoreParametro);
}
function tree_prelevaParametroValue(treename, nomeParametro){
	return objPrelevaParametroValue(ottieniTreeFromName(treename), nomeParametro);
}
function tree_getItemText(treename, nodeId){
	var treebox = ottieniTreeFromName(treename);
	if(!treebox)return "";
	
	return treebox.getItemText(nodeId);
}
function tree_getSelectedItem(treename){
	var treebox = ottieniTreeFromName(treename);
	if(!treebox)return -1;
	
	var tmp_rit = treebox.getSelectedItemId();
	if(tmp_rit)return tmp_rit;
	return -1;
}

// Variabili temporanee per funzione di selezione nodo in caso di Dynamic Loading su tree
var gridev_tree_nodoToSel = "";
var gridev_tree_modeToSel = false;
var gridev_tree_preserveToSel = false;
var gridev_tree_tmpCount=0;
var gridev_tree_treeOldXLE = "";
var gridev_tree_treeObj = null;

function tree_selectItem(treename, itemId, mode, preserve){
	gridev_tree_nodoToSel = itemId;
	gridev_tree_modeToSel = mode;
	gridev_tree_preserveToSel = preserve;
	gridev_tree_tmpCount=0;
	gridev_tree_treeOldXLE="";
	gridev_tree_treeObj = ottieniTreeFromName(treename);
	
	if(typeof(gridev_tree_treeObj._PERSACTFNZ)=="undefined"){
		gridev_tree_treeObj._PERSACTFNZ = new Array();
	}
	var tmp_fnd = gridev_tree_treeObj._PERSACTFNZ.length;
	for(var i =0;i < gridev_tree_treeObj._PERSACTFNZ.length; i++){
		if(gridev_tree_treeObj._PERSACTFNZ[i][0]=="onXLE"){
			tmp_fnd=i;
			gridev_tree_treeOldXLE = ""+gridev_tree_treeObj._PERSACTFNZ[i][1];
			break;
		}
	}
	if(!gridev_tree_treeObj._PERSACTFNZ[tmp_fnd]){
		gridev_tree_treeObj._PERSACTFNZ[tmp_fnd] = new Array();
	}
	gridev_tree_treeObj._PERSACTFNZ[tmp_fnd][0]="onXLE";
	gridev_tree_treeObj._PERSACTFNZ[tmp_fnd][1] = "tree_proceedSelectItem();";
		
	tree_proceedSelectItem();
	/*
	var treebox = ottieniTreeFromName(treename);
	if(!treebox)return;
	treebox.selectItem(itemId, mode, preserve);
	*/
}

function tree_proceedSelectItem(){
	if(gridev_tree_nodoToSel=="")return;
	var gridev_tree_treeObj = ottieniTreeFromName("tree1");
	if(gridev_tree_treeObj._PERSDYNAMICLOADING==true){
		//L'albero è caricato tramite il dynamic loading
		//Dato che il nodo padre dell'elemento che voglio selezionare, potrebbe non essere stato aperto
		//l'elemento da selezionare potrebbe non esistere.
		//Se così fosse , devo scorrere l'albero e aprire i vari nodi padre, per caricare i vari nodi figlio
		//Solo allora, procedo alla effettiva selezione.
		
		//	Esempio : STANDARD HALLEY TREE DYNAMIC LOADING ID :
		// 	46-936-999999999-999999999
		var tmp_arr=gridev_tree_nodoToSel.split("-");
		var tmpCountStopAt = 0;
		for(var i = 0; i < tmp_arr.length; i++){
			if(tmp_arr[i]=="999999999"){
				tmpCountStopAt--;
				break;
			}
			tmpCountStopAt++;
		}
		if(gridev_tree_tmpCount!=tmpCountStopAt){
			try{
				gridev_tree_treeObj.openItemsDynamic(tree_ottieniIdNodoFromArr(tmp_arr,gridev_tree_tmpCount));
			}
			catch(exIgn1){
			}
			gridev_tree_tmpCount++;
			//
			return;
		}
	}
	
	gridev_tree_treeObj.selectItem(gridev_tree_nodoToSel,gridev_tree_modeToSel,gridev_tree_preserveToSel);
	gridev_tree_nodoToSel="";
	gridev_tree_tmpCount=0;
	
	//ripristino arr funz 
	for(var i =0;i < gridev_tree_treeObj.length; i++){
		if(gridev_tree_treeObj[i][0]=="onXLE"){
			gridev_tree_treeObj[i][1] = ""+gridev_tree_treeOldXLE;
		}
	}
	gridev_tree_treeOldXLE="";
	gridev_tree_treeObj=null;
}

function tree_ottieniIdNodoFromArr(tmp_arr, idx){
	var rit = "";
	for(var i =0; i < tmp_arr.length; i++){
		rit = rit + tmp_arr[i];
		if(i<(tmp_arr.length-1))rit = rit + "-";
		if(i==idx)break;
	}
	for(var c=(idx+1); c<tmp_arr.length; c++){
		rit = rit + "999999999";
		if(c<(tmp_arr.length-1))rit = rit + "-";
	}
	return rit;
}

function tree_openItem(treename, nodeId){
	var treebox = ottieniTreeFromName(treename);
	if(!treebox)return;
	if(treebox._PERSDYNAMICLOADING==true){
		try{
			treebox.openItemsDynamic(nodeId);
		}
		catch(exIgn1){
			try{
				treebox.openItem(nodeId);
			}
			catch(exIgn2){
				gridev_debuggaTxt("errore in autoExpand = " + getEx(exIgn2));
			}
		}
	}
	else{
		treebox.openItem(nodeId);
	}
}

function tree_mostra(treename){
	var treebox = ottieniTreeFromName(treename);
	if(!treebox)return;
	showOrHideElement(treebox, false);
}
function tree_nascondi(treename){
	var treebox = ottieniTreeFromName(treename);
	if(!treebox)return;
	showOrHideElement(treebox, true);
}

// ==================================================================================
// Azioni possibili su jsWindow
// ==================================================================================
function jswindow_caricaUrl(jswinname){
	var jswin = ottieniJsWindowFromName(jswinname);
	if(!jswin)return;
	if(jswin._PERSURL!=""){
		if(jswin._frame!=null){
			if(jswin._frame.src){
				if(jswin._frame.src!=jswin._PERSURL){
					jswin.setFramesLocation(jswin._PERSURL);
				}
			}
		}
		else{
			jswin.setFramesLocation(jswin._PERSURL);
		}
		/*
		if(jswin._PERSURL!=window.frames["_iframe-"+jswin.id].location){
			if(window.frames["_iframe-"+jswin.id]){
				window.frames["_iframe-"+jswin.id].location.replace(""+jswin._PERSURL);
			}
		}
		*/
	}
}

function jswindow_mostra(jswinname){
	var jswin = ottieniJsWindowFromName(jswinname);
	if(!jswin)return;
	jswindow_caricaUrl(jswinname);
	if(jswin.style.display!="none"){
		//se la window non era chiusa ho solo mostrato l'url e ritorno
		return;
	}
	jswin.isClosed=false;	
	jswin.show();
}
function jswindow_nascondi(jswinname){
	var jswin = ottieniJsWindowFromName(jswinname);
	if(!jswin)return;
	jswin.hide();
}
function jswindow_setSize(jswinname, width, height){
	var jswin = ottieniJsWindowFromName(jswinname);
	if(!jswin)return;
	jswin.setSize(width, height);
}
function jswindow_setPosition(jswinname, top, left){
	var jswin = ottieniJsWindowFromName(jswinname);
	if(!jswin)return;
	jswin.moveTo(top, left);
}
function jswindow_settaUrl(jswinname, tmp_url, seAutMostra){
	var tmp_seAutMostra = true;
	if(typeof (seAutMostra)!="undefined"){
		tmp_seAutMostra = seAutMostra;
	}
	var jswin = ottieniJsWindowFromName(jswinname);
	if(!jswin)return;
	jswin._PERSURL=tmp_url;
	//jswin.isClosed=true;
	if(tmp_seAutMostra){
		jswindow_mostra(jswinname);
	}
}

function jswindow_setTitle(jswinname, text){
	var jswin = ottieniJsWindowFromName(jswinname);
	if(!jswin)return;
	jswin.setTitle(text);
}
function jswindow_getTitle(jswinname){
	var jswin = ottieniJsWindowFromName(jswinname);
	if(!jswin)return "";
	return jswin.handle.firstChild.nodeValue=val;
}
// ==================================================================================
// Azioni possibili su iframes
// ==================================================================================
function iframe_settaUrl(framename, nuovoUrl){
	objSettaUrl(ottieniIFrameFromName(framename), nuovoUrl);
}
function iframe_settaParametroValue(framename, nomeParametro, valoreParametro){
	objSettaParametroValue(ottieniIFrameFromName(framename), nomeParametro, valoreParametro);
}
function iframe_prelevaParametroValue(framename, nomeParametro){
	return objPrelevaParametroValue(ottieniIFrameFromName(framename), nomeParametro);
}
function iframe_nascondi(framename){
	var tmpFrame = ottieniIFrameFromName(framename);
	if(!tmpFrame)return;

	var tmp_objFrm = document.getElementById(tmpFrame._PERSID);
	if(tmp_objFrm){
        tmp_objFrm.style.display = "none";
        tmp_objFrm.src = "";
	}
}
function iframe_mostra(framename){
	var tmpFrame = ottieniIFrameFromName(framename);
	if(!tmpFrame)return;
	doLoadIFrame(tmpFrame);
}
// ==================================================================================
// Azioni possibili su dataprocessor
// ==================================================================================
function dataprocessor_inviaData(dataprocessorname, rowId){

	var dp = ottieniDataProcessorFromName(""+dataprocessorname);
	return dataprocessor_inviaDataByObj(dp, rowId);
}

function dataprocessor_inviaDataByObj(dp, rowId){
	try{
		if(!dp)return false;

		var tmp_url = checkAndCacheUrl(dp._PERSURL);
		var params = "";
		params = ottieniLoadXmlParamsForObj(dp);		
		dp.serverProcessor = tmp_url + params;

		dp.sendData(rowId);
	}
	catch(ex1){
		gridev_debuggaTxt("Errore in dataprocessor_inviaData ByObj = " + getEx(ex1));
	}
}

function dataprocessor_getSyncState(dataprocessorname){
	var dp = ottieniDataProcessorFromName(dataprocessorname);
	if(!dp)return false;

	return dp.getSyncState();
}


// ==================================================================================
// Azioni possibili su research_fields
// ==================================================================================
function research_getValue(researchname){
	var tmpResearch = ottieniResearchFromName(researchname);
	if(!tmpResearch)return;
	
	var tmpObj = null;
	if(tmpResearch._PERSNAME){
		tmpObj = document.getElementById(tmpResearch._PERSNAME);
	}
	
	switch(tmpResearch._PERSTYPE){
		case 0:
			//campo di testo
			if(tmpObj==null)return "ERROR";
			return tmpObj.value;
			break;
		case 1:
			//campo numerico
			if(tmpObj==null)return "ERROR";
			return tmpObj.value;
			break;
		case 2:
			//combo 
			return combo_getSelectedValue(tmpResearch._PERSNAME);
			break;
		case 3:
			//checkbox
			if(tmpObj==null)return "ERROR";
			if(tmpObj.checked)return "true";
			else return "false";
			break;
		case 4:
			//radiobox
			if(tmpResearch._PERSRADIOGROUPID=="")return;
			
			var tmp_arr_id = (""+tmpResearch._PERSRADIOGROUPID).split(',');
			var tmp_obj=document.getElementsByTagName('input');
			for(var z=0;z<tmp_obj.length;z++){
				var tmp_type =("" + tmp_obj[z].type).toUpperCase();
				if(tmp_type=="RADIO"){
					if(tmp_obj[z].name==tmpResearch._PERSNAME){
						if(tmp_obj[z].checked==true){
							return tmp_obj[z].id;
							break;
						}
					}
				}
			}
			return "";
			break;
		case 5:
			//data
			if(tmpObj==null)return "ERROR";
			return tmpObj.value;
			break;
		case 99:
			//campo esistente
			if(tmpObj==null)return "ERROR";
			var tmp_nodeName =("" + tmpObj.nodeName).toUpperCase();
			if(tmp_nodeName=="INPUT"){
				//button o text
				var tmp_type =("" + tmp_obj.type).toUpperCase();
				switch(tmp_type){
					case "BUTTON":
						return tmpObj.value;
						break;
					case "TEXT":
						return tmpObj.value;
						break;
					case "CHECKBOX":
						if(tmpObj.checked)return "true";
						return "false";
						break;
					case "RADIO":
						if(tmpObj.checked==true)return "true";
						else return "false";
						//TODO
						break;
				}
			}
			if(tmp_nodeName=="TEXTAREA"){
				return tmpObj.value;
			}
			if(tmp_nodeName=="A"){
				return tmpObj.href;
			}
			if(tmp_nodeName=="IMG"){
				return tmpObj.src;
			}
			break;
	}
	return null;
}

function research_setValue(researchname, valore){
	var tmpResearch = ottieniResearchFromName(researchname);
	if(!tmpResearch)return;
	
	var tmpObj = null;
	if(tmpResearch._PERSNAME){
		tmpObj = document.getElementById(tmpResearch._PERSNAME);
	}
	
	switch(tmpResearch._PERSTYPE){
		case 0:
			//campo di testo
			if(tmpObj==null)return;
			tmpObj.value = valore;
			break;
		case 1:
			//campo numerico
			if(tmpObj==null)return;
			tmpObj.value = valore;
			break;
		case 2:
			//combo 
			combo_selezionaOpzioneByValue(tmpResearch._PERSNAME, valore);
			break;
		case 3:
			//checkbox
			if(tmpObj==null)return;
			if(valore=="true")tmpObj.checked = true;
			else tmpObj.checked=false;
			break;
		case 4:
			//radiobox
			if(tmpResearch._PERSRADIOGROUPID=="")return;
			
			var tmp_arr_id = (""+tmpResearch._PERSRADIOGROUPID).split(',');
			var tmp_obj=document.getElementsByTagName('input');
			for(var z=0;z<tmp_obj.length;z++){
				var tmp_type =("" + tmp_obj[z].type).toUpperCase();
				if(tmp_type=="RADIO"){
					if(tmp_obj[z].name==tmpResearch._PERSNAME){
						if(valore==tmp_obj[z].id){
							tmp_obj[z].checked=true;
						}
						else tmp_obj[z].checked=false;
					}
				}
			}
			break;
		case 5:
			//data
			if(tmpObj==null)return ;
			tmpObj.value = valore;
			break;
		case 99:
			//campo esistente
			if(tmpObj==null)return;
			var tmp_nodeName =("" + tmpObj.nodeName).toUpperCase();
			if(tmp_nodeName=="INPUT"){
				//button o text
				var tmp_type =("" + tmp_obj.type).toUpperCase();
				switch(tmp_type){
					case "BUTTON":
						tmpObj.value = valore;
						break;
					case "TEXT":
						tmpObj.value = valore;
						break;
					case "CHECKBOX":
						if(valore=="true")tmpObj.checked = true;
						else tmpObj.checked=false;
						break;
					case "RADIO":
						if(valore=="true")tmpObj.checked = true;
						else tmpObj.checked=false;
						break;
				}
			}
			if(tmp_nodeName=="TEXTAREA"){
				tmpObj.value = valore;
			}
			if(tmp_nodeName=="A"){
				tmpObj.href = valore;
			}
			if(tmp_nodeName=="IMG"){
				tmpObj.src = valore;
			}
			break;
	}
	return null;
}

function research_mostra(researchname){
	var tmpResearch = ottieniResearchFromName(researchname);
	if(!tmpResearch)return;
	showOrHideElement(tmpResearch, false);
}
function research_nascondi(researchname){
	var tmpResearch = ottieniResearchFromName(researchname);
	if(!tmpResearch)return;
	showOrHideElement(tmpResearch, true);
}

// --------------------------------------------------------------------------
// 	Funzioni comuni e di utilità
// --------------------------------------------------------------------------

function gridev_saveCookie(dayExpires){
	if(!gridev_cookieGester)return;
	
	for(var c=0;c<gridev_myresearch.length;c++){
		if(gridev_myresearch[c]._PERSUSECOOKIE==true){
			//ottengo valore per ricerca e chiamo set param
			var tmp_val = research_getValue(gridev_myresearch[c]._PERSNAME);
			if(tmp_val){
				if(tmp_val!="ERROR"){
					gridev_cookieGester.setParam(gridev_myresearch[c]._PERSNAME, ""+tmp_val, dayExpires);
				}
			}
		}
	}
	for(var c=0;c<gridev_mycombo.length;c++){
		if(gridev_mycombo[c]._PERSUSECOOKIE==true){
			//ottengo valore per ricerca e chiamo set param
			var tmp_val =  combo_getSelectedValue(gridev_mycombo[c]._PERSNAME);
			if(tmp_val){
				if(tmp_val!="ERROR"){
					gridev_cookieGester.setParam(gridev_mycombo[c]._PERSNAME, ""+tmp_val, dayExpires);					
				}
			}
		}
	}
}


function objSettaUrl(obj, nuovoUrl){
	if(!obj)return;
	obj._PERSURL = nuovoUrl;
}
function objSettaParametroValue(obj, nomeParametro, valoreParametro){
	if(!obj)return;
	if(!obj._PERSFILTRIPARAM)obj._PERSFILTRIPARAM = new Array();
	var tmp_fnd = false;
	for(var i=0;i<obj._PERSFILTRIPARAM.length;i++){
		if(obj._PERSFILTRIPARAM[i][0]=="FIXED_TEXT"){
			if(obj._PERSFILTRIPARAM[i][2]==nomeParametro){
				obj._PERSFILTRIPARAM[i][1] = valoreParametro;
				tmp_fnd = true;
				break;
			}
		}
	}
	
	if(tmp_fnd==false){
		obj._PERSFILTRIPARAM[obj._PERSFILTRIPARAM.length] = new Array("FIXED_TEXT", valoreParametro, nomeParametro, false);
	}
}
function objPrelevaParametroValue(obj, nomeParametro){
	if(!obj)return;
	if(!obj._PERSFILTRIPARAM)obj._PERSFILTRIPARAM = new Array();
	for(var i=0;i<obj._PERSFILTRIPARAM.length;i++){
		if(obj._PERSFILTRIPARAM[i][0]=="FIXED_TEXT"){
			if(obj._PERSFILTRIPARAM[i][2]==nomeParametro){
				return obj._PERSFILTRIPARAM[i][1];
				break;
			}
		}
	}
	return null;	
}

function ottieniConfData(val){
	var tmp_rit = checkValore(""+val);
	return trim("" + tmp_rit);
}

function gridev_doFootermex(gridname){
	var tmp_gridbox = ottieniGridFromName(gridname);
	if(!tmp_gridbox)return;
	if(tmp_gridbox._PERSFOOTERID=="")return;
	if(tmp_gridbox._PERSFOOTERMEX=="")return;
	
	var tmp_span = document.getElementById(tmp_gridbox._PERSFOOTERID);
	if(tmp_span){
		tmp_span.style.color = "";
		//tmp_span.innerHTML = "";
		
		if(tmp_timerFooterMex!=null){
			clearTimeout(tmp_timerFooterMex);
			tmp_timerFooterMex = null;
		}
		tmp_timerFooterMex = window.setTimeout(
			function(){ 
				clearTimeout(tmp_timerFooterMex);
				tmp_timerFooterMex = null;
				try{
					var tmp_txt2 = eval(tmp_gridbox._PERSFOOTERMEX);
					tmp_span.innerHTML = tmp_txt2;
				}
				catch(ex1){
					gridev_debuggaTxt("Errore durante eval di gridev_doFootermex!");
				}
			}, 50);
	}
}

function gridev_gestOrdinamento(indice,tipo_sort,gridbox, order){
	if(!gridbox)return;
	if((indice==0)||(tipo_sort=="na")){
		alert("Non è possibile ordinare per questa colonna.");
		return false;
	}
	
	var a_state = gridbox.getSortingState();
	
	gridbox._PERSCOLSORT=indice;
	gridbox._PERSDIRECTIONSORT = ((a_state[1] == "des")?"asc":"des");
	
	//occorre richiamare ricarica griglia!
	window.setTimeout(function(){ reloadGrid(gridbox._PERSNAME); },50);
	
	return false;
}

function mostra_caricamento(gridname){
	if(!usa_caricamento)return;
	posiziona_caricamento(gridname);
	if(document.getElementById(loading_img_container)){
		document.getElementById(loading_img_container).style.visibility="visible";
		document.getElementById(loading_img_container).style.display='block';
	}
}
function nascondi_caricamento(){
	if(!usa_caricamento)return;
	if(document.getElementById(loading_img_container)){
		document.getElementById(loading_img_container).style.visibility="hidden";
		document.getElementById(loading_img_container).style.display='none';
	}	
}
function posiziona_caricamento(gridname){
	if(!usa_caricamento)return;
	var tmp_gridname = gridname;
	if(typeof(gridname)=="undefined")tmp_gridname = "";
	if(!gridname)tmp_gridname="";

	try{
		if(tmp_gridname==""){
			var tmp_d = ottieniViewPoint();
			
		    var obj_html_loading = document.getElementById(loading_img_container);
		    if(obj_html_loading){
		    	if(obj_html_loading.style){
				    obj_html_loading.style.backgroundColor="white";
					var docheightcomplete=(tmp_d.standardbody.offsetHeight>tmp_d.standardbody.scrollHeight)? tmp_d.standardbody.offsetHeight : tmp_d.standardbody.scrollHeight;
			
					obj_html_loading.style.width="100%";
					obj_html_loading.style.height="100%";
					var tmp_ll = obj_html_loading.style.left;
					var tmp_tt = obj_html_loading.style.top;					
					if(tmp_ll!="")obj_html_loading.style.left="0px";
					if(tmp_tt!="")obj_html_loading.style.top="0px";
					obj_html_loading.style.display="block";			
					obj_html_loading.style.zIndex = 12;
				}
			}
		}
		else{
		    // settaggi dell'oggetto html grid
		    
		    var obj_html_grid = document.getElementById( ottieniGridFromName(tmp_gridname).entBox.id);
		    
		    var obj_html_grid_left = getAbsoluteLeft(obj_html_grid);
		    var obj_html_grid_top = getAbsoluteTop(obj_html_grid);
		    var obj_html_grid_hei = getEffectiveHeight(obj_html_grid);
		    var obj_html_grid_wid = getEffectiveWidth(obj_html_grid);

		    // settaggi dell'oggetto html caricamento
		    var obj_html_loading = document.getElementById(loading_img_container);
		    if(obj_html_loading){
		    	if(obj_html_loading.style){
				    obj_html_loading.style.backgroundColor="";
				    var obj_html_loading_hei = obj_html_loading.clientHeight;
				    var obj_html_loading_wid = obj_html_loading.clientWidth;
					obj_html_loading_hei = "150";
					obj_html_loading_wid = "150";
				    
				    // ridefinisco dinamicamente la posizione dell'oggetto caricamento
				    obj_html_loading.style.top=(obj_html_grid_top+(obj_html_grid_hei/2) - (obj_html_loading_hei/2))+"px";
				    obj_html_loading.style.left=(obj_html_grid_left+(obj_html_grid_wid/2) - (obj_html_loading_wid/2)) + "px";
				    obj_html_loading.style.height = obj_html_loading_hei + "px";
				    obj_html_loading.style.width = obj_html_loading_wid + "px";
				}
			}
		}
	}
	catch(exPos){
		cm_debuggaTxt("Errore in posiziona caricamento = " + exPos);
	}
}

function ottieniViewPoint(win,doc){
	if(!win)win = window;
	if(!doc)doc = document;
	
	var ie=doc.all && !win.opera;
	var domclientWidth=doc.documentElement && parseInt(doc.documentElement.clientWidth) || 100000; //Preliminary doc width in non IE browsers
	
	var rit = {};
	rit.standardbody=(doc.compatMode=="CSS1Compat")? doc.documentElement : doc.body; //create reference to common "body" across doctypes
	rit.scroll_top=(ie)? rit.standardbody.scrollTop : win.pageYOffset;
	rit.scroll_left=(ie)? rit.standardbody.scrollLeft : win.pageXOffset;
	rit.docwidth=(ie)? rit.standardbody.clientWidth : (/Safari/i.test(navigator.userAgent))? win.innerWidth : Math.min(domclientWidth, win.innerWidth-16);
	rit.docheight=(ie)? rit.standardbody.clientHeight: win.innerHeight;
	
	return rit;
}

function attivaDebug(ifDebug){
	if(ifDebug==false){
		window.dhx_useDebug = false;
	}
	else{
		cm_useDebug=true;
		cm_debuggaTxt("******* Inizio programma gridev! ***** ", "900px");
		window.dhx_useDebug = true;
	}
}

function ConfGetStringAttribute(conf,key,defVal){
	if(typeof(defVal)=="undefined")defVal="";
	if(!defVal)defVal="";
	if(!conf)return defVal;
	
	if(conf.getAttribute(""+key)){
		return trim(""+conf.getAttribute(""+key));
	}
	return defVal;
}
function ConfGetStringAttributeNoTrim(conf,key,defVal){
	if(typeof(defVal)=="undefined")defVal="";
	if(!defVal)defVal="";
	
	if(conf.getAttribute(""+key)){
		return ""+conf.getAttribute(""+key);
	}
	return defVal;
}

function ConfGetBooleanAttribute(conf,key,defVal){
	if(typeof(defVal)=="undefined")defVal=false;
	if(defVal==null)defVal=false;
	
	if(conf.getAttribute(""+key)){
		if((""+conf.getAttribute(""+key)).toUpperCase()=="TRUE")return true;
		else return false;
	}
	return defVal;
}

function ConfGetIntAttribute(conf,key,defVal){
	if(typeof(defVal)=="undefined")defVal=0;
	if(!defVal)defVal=0;
	
	if(conf.getAttribute(""+key)){
		return parseInt(""+conf.getAttribute(""+key),10);
	}
	return defVal;
}

function showOrHideElement(obj, ifHide){
	if(obj._PERSCONTAINER!=""){
		var tmp_parN = document.getElementById(obj._PERSCONTAINER);
		if(tmp_parN){
			var tmp_dsp = "";
			if(ifHide==true)tmp_dsp = "none";
			if(tmp_parN.style){
				tmp_parN.style.display = tmp_dsp;
			}
		}
	}
}

function ottieniToolFromName(valName){
	return ottieniElementoFromName(gridev_mytoolbar, valName);
}
function ottieniGridFromName(valName){
	return ottieniElementoFromName(gridev_mygrid, valName);
}
function ottieniTreeFromName(valName){
	return ottieniElementoFromName(gridev_mytree, valName);
}
function ottieniComboFromName(valName){
	return ottieniElementoFromName(gridev_mycombo, valName);
}
function ottieniJsWindowFromName(valName){
	return ottieniElementoFromName(gridev_myjswindows, valName);
}
function ottieniIFrameFromName(valName){
	return ottieniElementoFromName(gridev_myframes, valName);	
}
function ottieniCalendarFromName(valName){
	return ottieniElementoFromName(gridev_mycalendars, valName);	
}
function ottieniMenuFromName(valName){
	return ottieniElementoFromName(gridev_mymenus, valName);
}
function ottieniDataProcessorFromName(valName){
	return ottieniElementoFromName(gridev_mydataprocessor, valName);
}
function ottieniFiltroGridFromName(valName){
	return ottieniFiltroGridFromId(valName);
}

function ottieniResearchFromName(valName){
	return ottieniResearchFromId(valName);
}
function ottieniElementoFromName(elementoArray, elementoName){
	for(var i =0;i < elementoArray.length;i++){
		if(elementoArray[i]._PERSNAME==elementoName)return elementoArray[i];
	}
	return null;
}

function ottieniResearchFromId(id){
	for(var c=0;c<gridev_myresearch.length;c++){
		if(gridev_myresearch[c]._PERSNAME==id)return gridev_myresearch[c];
	}
	return null;
}
function ottieniFiltroGridFromId(id){
	for(var tmp_i = 0; tmp_i < gridev_mygrid.length; tmp_i++){
		for(var c=0;c<gridev_mygrid[tmp_i]._PERSFILTRIPARAM.length;c++){
			if(gridev_mygrid[tmp_i]._PERSFILTRIPARAM[c][1]==id){
				return gridev_mygrid[tmp_i]._PERSFILTRIPARAM[c];
			}
		}
	}
	return null;
}
function ottieniGridFromFiltroParam(id){
	for(var tmp_i = 0; tmp_i < gridev_mygrid.length; tmp_i++){
		for(var c=0;c<gridev_mygrid[tmp_i]._PERSFILTRIPARAM.length;c++){
			if(gridev_mygrid[tmp_i]._PERSFILTRIPARAM[c][1]==id){
				return gridev_mygrid[tmp_i];
			}
		}
	}
	return null;
}

//Inizio Modifica Andrea Per Differenziare eventi keydown su filtri grid
//function dh_onKeyDown(gridname){
function gridev_filtro_onKeyUp(gridname, elementoId, nuovoValore, vecchioValore){
//Fine Modifica Andrea Per Differenziare eventi keydown su filtri grid
	var nomegrid = gridname;
	
	if(nuovoValore!=vecchioValore){
		var tmpElementoId = elementoId;
		
		if(dh_tmp_timer)clearTimeout(dh_tmp_timer);
		dh_tmp_timer=window.setTimeout(function(){
			var obj = document.getElementById(tmpElementoId);
			if(obj.value!=obj._PERSOLDVALUE){
				reloadGrid(nomegrid);
				obj._PERSOLDVALUE = obj.value;
			}
		},250);
		
	}
	
}
//Inizio Modifica Andrea Per Differenziare eventi keydown su filtri grid
function gridev_filtro_onKeyEnterPress(gridname){
	var nomegrid = gridname;

	if(dh_tmp_timer) clearTimeout(dh_tmp_timer);
	dh_tmp_timer=window.setTimeout(function(){
		reloadGrid(nomegrid);
	},100);
}
//Fine Modifica Andrea Per Differenziare eventi keydown su filtri grid

function aggiornaDimGrid(){
	for(var i = 0; i < gridev_mygrid.length; i++){
		//if(gridev_mygrid[i]._PERSLOADONSTART==true){
			gridev_mygrid[i].setSizes();
		//}
	}
}

function ottieniCodicePersFunctForObj(obj, evtKey){
	return ottieniCodicePersFunctFromArray(obj._PERSACTFNZ, evtKey);
}
function ottieniCodicePersFunctForObjFiltro(obj, evtKey){
	var tmp_grid = ottieniGridFromFiltroParam(obj[1]);
	if(tmp_grid){
		return ottieniCodicePersFunctFromArray(tmp_grid._PERSACTFNZ, evtKey);
	}
}

function ottieniCodicePersFunctFromArray(tmpArrFunz, evtKey){
	if(typeof(tmpArrFunz)=="undefined")return "";
	for(var i =0;i < tmpArrFunz.length; i++){
		if(tmpArrFunz[i][0]==evtKey)return tmpArrFunz[i][1];
	}
	return "";
}

function ottieniErrorMexForObj(obj, errKey, def){
	if(typeof(obj._PERSERRMEX)=="undefined")return "";
	for(var i =0;i < obj._PERSERRMEX.length; i++){
		if(obj._PERSERRMEX[i][0]==errKey)return obj._PERSERRMEX[i][1];
	}
	return def;
}

function gridev_fatalError(mex){
	//Inizio Andrea Modifica - un alert su FF può dare problemi se ci troviamo in una callback ajax mentre loadiamo un'altra pagina 
	//alert("Errore!!\n" + mex);
	h_ff_doAlertErr("Errore!!\n" + mex);
	//Fine Andrea Modifica - un alert su FF può dare problemi se ci troviamo in una callback ajax mentre loadiamo un'altra pagina 
}

function gridev_bodyAppendObject(obj, doc){
	var tmp_doc = document;
	if(doc)tmp_doc=doc;
	if(tmp_doc.body){
		tmp_doc.body.appendChild(obj);
	}
	if(ext_fnz_onCreate!=null){
		ext_fnz_onCreate(tmp_doc,obj,0);
	}
}

//FUNZIONI DI SALVATAGGIO / RIPRISTINO VALORI
function gridev_getStringaParametri(tmpArr){
	var tmpRit = "";
	var tmpNomeParam = "";
	var tmpNomeElem  = "";
	var tmp_obj = null;
	var tmp_val = "";
	var tmp_val2 = "";
	for(var i =0; i < tmpArr.length; i++){
		tmpNomeParam = tmpArr[i][0];
		tmpNomeElem = tmpArr[i][1];
		
		tmp_obj = null;
		tmp_val = "";
		
		switch(tmpNomeParam){
			case "DHTMLX_COMBO":
				tmp_obj = ottieniComboFromName(tmpNomeElem);
				if(tmp_obj){
					tmp_val = tmp_obj.getSelectedValue();
				}
				break;
			case "DHTMLX_TREE":
				tmp_obj = ottieniTreeFromName(tmpNomeElem);
				if(tmp_obj){
					tmp_val = tmp_obj.getSelectedItemId();
				}				
				break;
			case "DOCUMENT_BYID":
				tmp_obj = document.getElementById(""+tmpNomeElem);
				if(tmp_obj){
					tmp_val2 = null;
					var tmp_nodeName =("" + tmp_obj.nodeName).toUpperCase();
					if( (tmp_nodeName=="INPUT")
					 || (tmp_nodeName=="TEXTAREA")
					 ){
					 	if(tmp_nodeName=="INPUT"){
							var tmp_type =("" + tmp_obj.type).toUpperCase();
							if(tmp_type=="TEXT"){
								tmp_val = tmp_obj.value;
							}
							if(tmp_type=="RADIO"){
								if( tmp_obj.checked){
									tmp_val="true";
								}
								else tmp_val="false";
							}
							if(tmp_type=="CHECKBOX"){
								if( tmp_obj.checked){
									tmp_val = "true";
								}
								else tmp_val="false";
							}
						}
						else {
							tmp_val = tmp_obj.value;
						}
					}
				}
				break;
			case "DOCUMENT_BYID_RADIOGROUP":
				tmp_obj=document.getElementsByTagName('input');
				for(var z=0;z<tmp_obj.length;z++){
					var tmp_type =("" + tmp_obj[z].type).toUpperCase();
					if(tmp_type=="RADIO"){
						if(tmp_obj[z].name==tmpNomeElem){
							if(tmp_obj[z].checked==true){
								tmp_val=tmp_obj[z].id;
								break;
							}
						}
					}
				}
				break;
		}
		
		tmpRit = tmpRit + "" + tmp_val;
		if(i<(tmpArr.length-1))tmpRit = tmpRit + "|";
	}
	return tmpRit;	
}



var gridev_stringaParm_arrayTree = null;
var gridev_stringaParm_arrayCombo = null;
var gridev_stringaParm_fnzToEnd = null; 
var gridev_stringaParm_gridevReloaderObj = null;

function gridev_setStringaParametri(tmpStringa, tmpArr, fnzToEnd){
	//salvataggio valori 
	gridev_stringaParm_arrayTree = new Array();
	gridev_stringaParm_arrayCombo = new Array();
	gridev_stringaParm_fnzToEnd = fnzToEnd;
	
	var tmpArrValue = new Array();
	if(tmpStringa.indexOf("|")!=-1)tmpArrValue = tmpStringa.split("|");
	
	for(var i=0; i < tmpArrValue.length; i++){
		if(tmpArr[i]){
			tmpArr[i][2] = tmpArrValue[i];
		}
	}
	
	//in nuovo tmpArr ho anche i valori 
	//procedo a settare i valori byid
	for(var i =0; i < tmpArr.length; i++){
		tmpNomeParam = tmpArr[i][0];
		tmpNomeElem = tmpArr[i][1];
		
		tmp_obj = null;
		tmp_val = tmpArr[i][2];
		if(tmp_val=="")continue;
		
		switch(tmpNomeParam){
			case "DOCUMENT_BYID":
				tmp_obj = document.getElementById(""+tmpNomeElem);
				if(tmp_obj){
					tmp_val2 = null;
					var tmp_nodeName =("" + tmp_obj.nodeName).toUpperCase();
					if( (tmp_nodeName=="INPUT")
					 || (tmp_nodeName=="TEXTAREA")
					 ){
					 	if(tmp_nodeName=="INPUT"){
							var tmp_type =("" + tmp_obj.type).toUpperCase();
							if(tmp_type=="TEXT"){
								tmp_obj.value = tmp_val;
							}
							if((tmp_type=="RADIO")||(tmp_type=="CHECKBOX")){
								if(tmp_val=="true")tmp_obj.checked = true;
								else tmp_obj.checked = false;
							}
						}
						else {
							tmp_val = tmp_obj.value;
						}
					}
				}
				break;
			case "DOCUMENT_BYID_RADIOGROUP":
				tmp_obj=document.getElementsByTagName('input');
				for(var z=0;z<tmp_obj.length;z++){
					var tmp_type =("" + tmp_obj[z].type).toUpperCase();
					if(tmp_type=="RADIO"){
						if(tmp_obj[z].name==tmpNomeElem){
							if(tmp_val==tmp_obj[z].id){
								tmp_obj[z].checked=true;
							}
							else tmp_obj[z].checked=false;
						}
					}
				}
				break;		
			case "DHTMLX_COMBO":
				gridev_stringaParm_arrayCombo[gridev_stringaParm_arrayCombo.length] = [tmpArr[i][1], tmpArr[i][2]];
				break;
			case "DHTMLX_TREE":
				gridev_stringaParm_arrayTree[gridev_stringaParm_arrayTree.length] = [tmpArr[i][1], tmpArr[i][2]];
				break;
		}
			
	}
	
	//ora devo procedere al set dei treee 
	gridev_stringaParm_doLoadTree();
}



function gridev_stringaParm_doLoadTree(){
	if(gridev_stringaParm_arrayTree.length>=1){
		gridev_stringaParm_gridevReloaderObj = new GridevReloaderTree(gridev_stringaParm_arrayTree, gridev_stringaParm_onEndTree);
		gridev_stringaParm_gridevReloaderObj.startCaricaTree();
	}
	else gridev_stringaParm_doLoadCombo();
}


function gridev_stringaParm_onEndTree(){
	//setto timeout e chiamo doLoadCombo
	window.setTimeout(gridev_stringaParm_doLoadCombo, 25);
}

function gridev_stringaParm_doLoadCombo(){
	if(gridev_stringaParm_gridevReloaderObj!=null){
		gridev_stringaParm_gridevReloaderObj.destroySelf();
		gridev_stringaParm_gridevReloaderObj = null;
		gridev_stringaParm_arrayTree = null;
	}
	
	//procedo al reload delle combo se ci sono altrimenti chiamo onEndCombo
	if(gridev_stringaParm_arrayCombo.length>=1){
		gridev_stringaParm_gridevReloaderObj = new GridevReloaderCombo(gridev_stringaParm_arrayCombo, gridev_stringaParm_onEndCombo);
		gridev_stringaParm_gridevReloaderObj.startCaricaCombo();
	}
	else gridev_stringaParm_onEndAll()
	
}

function gridev_stringaParm_onEndCombo(){
	window.setTimeout(gridev_stringaParm_onEndAll, 25);
}

function gridev_stringaParm_onEndAll(){
	if(gridev_stringaParm_gridevReloaderObj!=null){
		gridev_stringaParm_gridevReloaderObj.destroySelf();
		gridev_stringaParm_gridevReloaderObj = null;
		gridev_stringaParm_arrayCombo = null;
	}
	if(gridev_stringaParm_fnzToEnd!=null){
		gridev_stringaParm_fnzToEnd.call(this);
	}
	gridev_stringaParm_fnzToEnd = null;
}




//Flusso  Logico Tree, combo , grid

//ho una tree o più
//ho una combo o più
//ho una grid o più da ricaricare 


//prelevo tutte le tree e procedo una alla volta al fine di caricarle / selezionare gli elementi


function GridevReloaderTree(arrTree, onEndFnz){

	//array composto da [ [itemTree1, nodetoSel1], [itemTree2, nodetoSel2] ... ]
	this._arr = arrTree;
	
	this._contaArr = 0;
	this._onEndFnz = onEndFnz;
	this._tmpIdEvt = "";
	
	var objThat = this;
	this._fnzToCall = function(){
		objThat.elementoTreeSelezionato();
	};
	
}

GridevReloaderTree.prototype.chiamaEndFnz = function(){
	if(this._onEndFnz){
		this._onEndFnz.call(window);
	}
};

GridevReloaderTree.prototype.destroySelf = function(){
	this._arr = null;
	this._contaArr = null;
	this._onEndFnz = null;
	this._tmpIdEvt = null;
	this._fnzToCall = null;	
};

GridevReloaderTree.prototype.startCaricaTree = function(){
	if(this._contaArr<this._arr.length){
		var treeToSel = this._arr[this._contaArr];
		if(treeToSel){
			if(treeToSel.length==2){
				if(treeToSel[0]!=""){
					var treeObj = ottieniTreeFromName(treeToSel[0]);
					if(treeObj){
						if(treeToSel[1]!=""){
							this._tmpIdEvt = treeObj.attachEvent("onSelect",this._fnzToCall);
							tree_selectItem(treeToSel[0], treeToSel[1], false, true);
						}
						else this.elementoTreeSelezionato();
						return;
					}
				}
			}
		}
	}
	this.chiamaEndFnz();
};


GridevReloaderTree.prototype.elementoTreeSelezionato = function(){
	var treeToSel = this._arr[this._contaArr];
	if(treeToSel){
		if(treeToSel.length==2){
			if((treeToSel[0]!="")&&(treeToSel[1]!="")){
				var treeObj = ottieniTreeFromName(treeToSel[0]);
				if(treeObj){
					if(this._tmpIdEvt!=""){
						treeObj.detachEvent(this._tmpIdEvt);
					}
				}
			}
		}
	}
	this._contaArr++;
	this.startCaricaTree();	
};



function GridevReloaderCombo(arrCombo, onEndFnz){
	//array composto da [ [itemTree1, nodetoSel1], [itemTree2, nodetoSel2] ... ]
	this._arr = arrCombo;
	
	this._contaArr = 0;
	this._onEndFnz = onEndFnz;
	this._tmpIdEvt = "";
	
}

GridevReloaderCombo._SINGLETH = null;

GridevReloaderCombo.prototype.chiamaEndFnz = function(){
	if(this._onEndFnz){
		this._onEndFnz.call(window);
	}
};

GridevReloaderCombo.prototype.destroySelf = function(){
	this._arr = null;
	this._contaArr = null;
	this._onEndFnz = null;
	this._tmpIdEvt = null;
};


GridevReloaderCombo.prototype.startCaricaCombo = function(){
	if(this._contaArr<this._arr.length){
		var comboToSel = this._arr[this._contaArr];
		if(comboToSel){
			if(comboToSel.length==2){
				if(comboToSel[0]!=""){
					var comboObj = ottieniComboFromName(comboToSel[0]);
					if(comboObj){
						GridevReloaderCombo._SINGLETH = this;
						var tmp_testoFn1 = "GridevReloaderCombo._SINGLETH.comboCaricata();";
						
						//mi salvo array funzioni personalizzate
						if(typeof(comboObj._PERSACTFNZ)=="undefined")comboObj._PERSACTFNZ = new Array();
						comboObj._OLD_PERSACTFNZ = "";
				
						//recupero funzione onXLE da sostituire
						var tmp_fnd = comboObj._PERSACTFNZ.length;
						for(var i = 0; i < comboObj._PERSACTFNZ.length; i++){
							if(comboObj._PERSACTFNZ[i][0]=="onXLE"){
								comboObj._OLD_PERSACTFNZ = ""+comboObj._PERSACTFNZ[i][1];
								tmp_fnd = i;
								break;
							}
						}
						//setto funzione onXLE temporanea 
						comboObj._PERSACTFNZ[tmp_fnd] = new Array("onXLE",tmp_testoFn1);
						//effettuo il reload della combo 
						reloadCombo(comboToSel[0]);
						
						return;
					}
				}
			}
		}
	}
	this.chiamaEndFnz();
};

GridevReloaderCombo.prototype.comboCaricata = function(){
	var comboToSel = this._arr[this._contaArr];
	if(comboToSel){
		if(comboToSel.length==2){
			if(comboToSel[0]!=""){
				var comboObj = ottieniComboFromName(comboToSel[0]);
				if(comboObj){
					for(var i = 0; i < comboObj._PERSACTFNZ.length; i++){
						if(comboObj._PERSACTFNZ[i][0]=="onXLE"){
							if(comboObj._OLD_PERSACTFNZ!=""){
								comboObj._PERSACTFNZ[i][1] = comboObj._OLD_PERSACTFNZ;
							}
							else{
								delete comboObj._PERSACTFNZ[i][1];
							}
							break;
						}
					}
					delete comboObj._OLD_PERSACTFNZ;
					if(comboToSel[1]!=""){
						combo_selezionaOpzioneByValue(comboToSel[0], comboToSel[1]);
					}
				}
			}
		}
	}
	
	this._contaArr++;
	this.startCaricaCombo();	
};


