


function std_save(my_form_name){
// 	alert('you are now saving ' + my_form_name);	
	alert('DEPRECATED std_save() use std_submit instead' );	
	$('#pxcms_changes').val(0); 
	document.forms[my_form_name].submit();
}


function std_submit(my_form_name){
	$('#pxcms_changes').val(0); 
// 	alert('std_submit:name:' + my_form_name + ' changes:' + $('#pxcms_changes').val () );
	document.forms[my_form_name].submit();
}

function std_delete_confirm(my_url,highlight_if){
	var my_prompt;
	if(highlight_if){
 		my_prompt = 'Confermi Cancellazione dell \' elemento selezionato ?' + highlight_if;
	}else{
 		my_prompt = 'Confermi Cancellazione ?' ;
	}
	if(confirm(my_prompt) ){
		document.location.href = my_url;
	}
}


function std_confirm(my_url,my_prompt){
	if(!my_prompt){
 		my_prompt = 'Confermi ?' ;
	}
	if(confirm(my_prompt) ){
		document.location.href = my_url;
	}
}
function xb_get_element_by_id(id){
	alert('xb_get_element_by_id deprecated !');
	if(document.all){
		//explorer
		return document.all[id];
	}else{
		if(document.getElementById){
			//firefox
			return document.getElementById(id);
		}else{
			std_alert('xb_get_element_by_id','uso default getElementById!');
			//hoping for the best
			return document.getElementById(id);
		}
	}	
}

function xb_hide(id){ 	
	alert('xb_hide deprecated !');
 	var ele = xb_get_element_by_id(id);
	if (ele != null){
		ele.style.display = 'none';
		return true;
	}else{
		std_alert('dhtml->hide_ele','element ' + id + ' null!');
	}
	return false;
}





function hide_preview(tgele,id){
 	alert('hide preview deprecated' + id);
 	var ele = xb_get_element_by_id(id);
	if (ele != null){
		ele.style.display = 'none';
	}else{
		alert('hide_preview:element ' + id + ' null!');
	}
}

/* Aggiunto da MAXIDEA  per il menu' ad albero */
function aprichiudi_deprecated(item) {
    //alert('Premuto '+item);
    elem=document.getElementById(item);
    var visibile=(elem.style.display!="none");
    //alert(visibile);
    prefisso=document.getElementById("menu" + item);
    if (visibile) {
        elem.style.display="none";
    } else {
        elem.style.display="block";
    }
    var xmlhttp = null;

    hitNode(item);
}

var xmlhttp = null;

function okresult_deprecated() {
    //alert('risposta '+parent.xmlhttp.readyState+' - status: '+parent.xmlhttp.status);
    //alert('Testo: '+parent.xmlhttp.responseText);
}

function hitNode_deprecated(name) {
    //alert('Premuto '+name);
    if (window.XMLHttpRequest) {
        // code for Mozilla, etc.
        xmlhttp=new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        // code for IE
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
//    alert('XMLHTTP: '+xmlhttp.readyState);
    if (xmlhttp!=null) {
        xmlhttp.onreadystatechange=okresult;
        //alert('open');
        xmlhttp.open("GET","/menu?n="+name+"&x=" + Math.floor(Math.random()*9999),true);
        //alert('send');
        xmlhttp.send(null);
    } else {
        alert("Your browser does not support XMLHTTP.");
    }
}
/* ********************************************** */

var active_menu_ele = null;

function std_menu_click(my_menu_ele){
	if(active_menu_ele != null)
		$('.std_menu', active_menu_ele).toggle();	
	if(active_menu_ele == my_menu_ele){
		active_menu_ele = null;
	}else{
		$('.std_menu', my_menu_ele).toggle();	
		active_menu_ele = my_menu_ele;
	}
}







function xb_show(id){ 	
	alert('xb_show deprecated !');
 	var ele = xb_get_element_by_id(id);
	if (ele != null){
		ele.style.display = '';
		return true;
	}else{
		std_alert('dhtml->show_ele','element ' + id + ' null!');
	}
	return false;
}




/**aggiunge una classe css all elemento passando l'id 
*/
function xb_add_class(id,newClassName){
	alert('xb_add_class deprecated !');
	var ele = xb_get_element_by_id(id);
	if(ele){
		return addClassName(ele,newClassName);
	}else{
		my_alert('dhtml->xb_add_class','id ' + id + ' non definito !');
		return false;
	}
}

/**toglie la classe css specificata dall elemento passando l'id  se esiste
*/
function xb_remove_class(id,oldClassName){	
	alert('xb_remoeve_class deprecated !');
	var ele = xb_get_element_by_id(id);
	if(ele){
		return removeClassName(ele,oldClassName);
	}else{
		my_alert('dhtml->xb_remove_class','id ' + id + ' non definito !');
		return false;
	}	
}
/**aggiunge una classe css all elemento passato se non �gi�impostata, altrimenti la toglie
*/
function toggleClassName(ele,className){
	alert('toggleClassName deprecated !');
	var pattern = new RegExp(className);
	if(pattern.test(ele.className)){		
		var actual = ele.className;	
		var ret = actual.replace(pattern,'');		
		ele.className = ret;
		return -1;
	}else{
		ele.className=ele.className+ ' ' +className;
		return 1;
	}
	return 0;
}
/**aggiunge una classe css all elemento passato SOLO se non �gi�impostata
*/
function addClassName(ele,newClassName){
alert('addClassName deprecated !');
	var pattern = new RegExp(newClassName);
	if(!pattern.test(ele.className)){
		ele.className=ele.className+ ' ' +newClassName;
	}
	return true;
}
/**toglie la classe css specificata dall elemento passato se esiste
*/
function removeClassName(ele,oldClassName){	
alert('removeClassName deprecated !');
	var pattern = new RegExp(oldClassName);
	var actual = ele.className;	
	var ret = actual.replace(pattern,'');		
	ele.className = ret;
	return true;

}
/**cambia la classe css dell elemento passato in quella passata
*/
function changeClassName(ele,newClassName){	
alert('changeClassName deprecated !');
	ele.className = newClassName;
	return true;
	
}

function std_alert(my_caller,msg){
	alert('System error: ' + my_caller + ':' + msg);
}
function my_alert(my_caller,msg){
	std_alert(my_caller , msg);
}


function findPosX(obj){
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}
// visualizzazione anteprima di testo
//questa versione sposta l'angolo destro del box facendolo coincidere con il punsalte di visualizzazione
function show_preview(tgele,id,id_anchor){
 	//alert('show preview ' + id);	
 	var ele = xb_get_element_by_id(id);
	var ele_anchor = xb_get_element_by_id(id_anchor);
	if (ele != null){
		ele.style.display = '';

		var tot_w = document.body.offsetWidth;
		var act_x = findPosX(tgele);
		var ele_w = ele.offsetWidth;
		var new_x = act_x - ele_w;
		if(new_x  > 0){
		  	ele.style.left = new_x + 'px';
		}else{
			ele.style.left = 0 + 'px';
		} 
	}else{
		alert('ele null:' );
	}
}

function hide_preview(tgele,id){
 	//alert('hide preview ' + id);
 	var ele = xb_get_element_by_id(id);
	if (ele != null){
		ele.style.display = 'none';
	}else{
		alert('hide_preview:element ' + id + ' null!');
	}
}


// aggiunta di input al form


function addDynamicForm(readroot,writeroot,form_id){
	
	var global_dynamic_counter_ele = document.forms[form_id].elements['global_dynamic_counter'];
// 	alert('formid: ' + form_id + ' global_dynamic_counter:' + global_dynamic_counter_ele.value);
	var new_prefix = 'new_' + global_dynamic_counter_ele.value ;
	
	var read_root_ele = xb_get_element_by_id(readroot);
	if(read_root_ele == null){
		my_alert('formmanager.js:add_item_from_sublist','readroot ' + readroot + ' non esiste');
		return;
	}
        var newFields = read_root_ele.cloneNode(true);
        newFields.id = '';
        newFields.style.display = '';
        appendNameToChildNodes(newFields, new_prefix);
	var write_root_ele = xb_get_element_by_id(writeroot);
	if(write_root_ele == null){
		my_alert('formmanager.js:add_item_from_sublist','writeroot ' + writeroot + ' non esiste');
		return;
	}
        write_root_ele.parentNode.insertBefore(newFields,write_root_ele);
	global_dynamic_counter_ele.value = parseInt (global_dynamic_counter_ele.value)+1 ;
	// per abilitare tabs ad esempio, ma va risolto con aggiunta via ajax
// 	stdEventBind(newFields);
}

function addDynamicForm2(readroot,writeroot,form_id, pxcmstemplate_name, add_template_to_formmanager_url, parent_model_prefix){
	
	var global_dynamic_counter_ele = document.forms[form_id].elements['global_dynamic_counter'];
	var new_prefix = 'new_' + global_dynamic_counter_ele.value ;
	
	var read_root_ele = $('#' + readroot).get(0);
	if(read_root_ele == null){
		my_alert('formmanager.js:add_item_from_sublist','readroot ' + readroot + ' non esiste');
		return;
	}
        var newFields = read_root_ele.cloneNode(true);
        newFields.id = '';
        newFields.style.display = '';
        appendNameToChildNodes(newFields, new_prefix);

	$('#' + writeroot).append(newFields);
// 	alert('write_root:' + writeroot);
	global_dynamic_counter_ele.value = parseInt (global_dynamic_counter_ele.value)+1 ;
	// per abilitare tabs ad esempio, ma va risolto con aggiunta via ajax
// 	alert('std event bind su add dynamic form2');
	stdEventBind(newFields);
// 	alert('FINE: std event bind su add dynamic form2');
	// dico al formmanager che ho aggiunto un elemento
// 	new_prefix, old_prefix
	var new_name = pxcmstemplate_name.replace(/pxcmstemplate/,new_prefix);
// 	alert('devo sostituire ' + pxcmstemplate_name + ' con:' + new_name);

	var my_data = {'form_id': form_id,
			'pxcmstemplate_name': pxcmstemplate_name ,
			'new_name': new_name,
			'virtual_id': new_prefix,
			'parent_model_prefix': parent_model_prefix
			};

	if(add_template_to_formmanager_url){
		$.ajax({
			url:  add_template_to_formmanager_url,
			'data': my_data,
// 			success: function(msg){
// 				alert( "OK : " + msg );
// 				},
			error: function(xmlHttpR, txtStatus, errTh){
				alert( 'ajax request to : ' + add_template_to_formmanager_url + 'failed: ' + txtStatus);
				}
			});
	}
}
/**
* 140809 modificata funzione in modo che modifichi tutti gli id che seguono lo schema pxcmstemplate
*/
function appendNameToChildNodes(ele, new_prefix){
        var mynodes = ele.childNodes;
	var newName = '';
        for (var i=0;i<mynodes.length;i++){
                var oldName = mynodes[i].name;
                var oldId = mynodes[i].id;
                if (oldName || oldId){				
			var oldNameString;
			if(oldName){
				oldNameString = new String(oldName);
			}else if(oldId){
				oldNameString = new String(oldId);
			}
			var xtr,xtr_a = null;
			var re = new RegExp('(\\w+)__(pxcmstemplate)__(\\w+)');
			if(oldNameString.match(re)){
				xtr_a = re.exec(oldNameString);
				newName = xtr_a[1] + '__' + new_prefix + '__' + xtr_a[3];
// 				alert('name: ' + oldName + ' => ' + newName );
				if(oldName){
					mynodes[i].name = newName;
				}
					/**se manca id IE non aggiunge il controllo a document.forms.elements
					vedi http://www.quirksmode.org/dom/domform.html
					ma se aggiungo l'id, allora magicamente compare il controllo in document.forms.elements ?!?!?
					*/
				if(oldId){
					mynodes[i].id = newName;
				}
			}else{
				std_alert('appendNameToChildNodes:', 'fail to find "pxcmstemplate" string in ' + oldName + '!');
			}			
                }
		if(mynodes[i].hasChildNodes()){
                       	appendNameToChildNodes(mynodes[i], new_prefix);
               	}
	}
}


function appendNameToChildNodesOld(ele, new_prefix){
        var mynodes = ele.childNodes;
	var newName = '';
        for (var i=0;i<mynodes.length;i++){
                var oldName = mynodes[i].name;
                var oldId = mynodes[i].id;
                if (oldName){
                        if(!oldName.match('add_item_to_list')){
				var oldNameString = new String(oldName);
				var xtr,xtr_a = null;
				var re = new RegExp('(\\w+)__(pxcmstemplate)__(\\w+)');
				if(oldNameString.match(re)){
					xtr_a = re.exec(oldNameString);
					newName = xtr_a[1] + '__' + new_prefix + '__' + xtr_a[3];
// 					alert('name: ' + oldName + ' => ' + newName );
					mynodes[i].name = newName;
					/**se manca id IE non aggiunge il controllo a document.forms.elements
					vedi http://www.quirksmode.org/dom/domform.html
					ma se aggiungo l'id, allora magicamente compare il controllo in document.forms.elements ?!?!?
					*/
					mynodes[i].id = newName;
				}else{			
					newName = oldName;
					std_alert('appendNameToChildNodes:', 'fail to find "pxcmstemplate" string in ' + oldName + '!');
				}
                        }else{
				/**
				* TODO cosa fa questo ?
				*/
                                mynodes[i].name = oldName + '_new[' + new_prefix + ']';
                                mynodes[i].value = 'new_' + new_prefix ;
                        }
                        //alert('thName ' + oldName +' found');
                }else{ 
			/**
			* TODO cosa fa questo ?
			*/
			if(oldId)
				mynodes[i].id = oldId + new_prefix;
			if(mynodes[i].hasChildNodes()){
                        	appendNameToChildNodes(mynodes[i], new_prefix);
                	}
		}
        }
}
/**
*disable all elements with same prefix of the checkbox to wich it is attached
* TODO cambiare classe al container che si sta eliminando oppure toglierlo del tutto
*/
function deleteDynamicForm(my_this){
	var my_name = my_this.name;
	var re = new RegExp('(\\w+)___(\\w+)__(\\w+)__(\\w+)');
	if(!my_name.match(re)){
		my_alert('invalid name (' + my_name + ') for deleteDynamicForm button');
		return;
	}
	var xtr_a = re.exec(my_this.name);
	var prefix = xtr_a[1] + '___' + xtr_a[2] + '__' + xtr_a[3] ;
	var re_prefix = new RegExp(prefix + '__(\\w+)');
	var eles = my_this.form.elements;
	
	for (var i=0;i<eles.length;i++){
		var mn = eles[i].name;
		if(mn.match(re_prefix) ){
			if(!my_this.checked){
				eles[i].disabled = false;
			}else{
				eles[i].disabled = true;
			}
		}
	}
        my_this.disabled = false;
}
/**
*/

function setOptionMultipleInput(checkbox,campo_option,checkbox_value){
	var form_ele = checkbox.form;
	var nome = checkbox.name;
		
	if(checkbox.checked){ 		
		form_ele[campo_option].value = add_string(form_ele[campo_option].value,checkbox_value);
	}else{
		form_ele[campo_option].value =remove_string(form_ele[campo_option].value,checkbox_value);
	}
}

/***/
function add_string(orig_str,new_str){
	var pattern = new RegExp(new_str);
	if(pattern.test(orig_str)){
// 		alert('str ' + new_str +' already present in orig_str '+ orig_str);
		return orig_str;
	}else{
// 		alert('str ' + new_str +' NOT present in orig_str '+ orig_str);
		if(orig_str ==  ''){
// 			alert('orig_str empty');
			return new_str;
		}else{
// 			alert('orig_str NOT empty concatenate');
			return orig_str + ',' + new_str;
		}
	}	
}
/**toglie la classe css specificata dall elemento passato se esiste
*/
function remove_string(orig_str,new_str){
	var pattern = new RegExp(new_str);
	if(pattern.test(orig_str)){
// 		alert('str ' + new_str +' present in orig_str '+ orig_str);
		if(orig_str == new_str){
			//unica opzione presente
			return '';
		}else{
			//posizione finale
			pattern = new RegExp('^(.+),'+new_str+'$');
			if(pattern.test(orig_str)){
// 				alert('present at end of string');
				var my_match = pattern.exec(orig_str);
				if(my_match == null){
// 					alert('my_match null');
					return orig_str;
				}
				return my_match[1];
			}else{
				//posizione iniziale
				pattern = new RegExp('^'+new_str+',(.+)$');
				if(pattern.test(orig_str)){
// 					alert('present at beginning of string');
					var my_match = pattern.exec(orig_str);
					if(my_match == null){
// 						alert('my_match null');
						return orig_str;
					}
					return my_match[1];
				}else{
					//posizione intermedia
					pattern = new RegExp('^(.+),'+new_str+',(.+)$');
					if(pattern.test(orig_str)){
// 						alert('present in between string');
						var my_match = pattern.exec(orig_str);
						if(my_match == null){
// 							alert('my_match null');
							return orig_str;
						}
						return my_match[1] + ',' + my_match[2];
					}else{
// // 						alert('AM i missing something?');
						return orig_str;
					}
				}
			}
		}
	}else{
// 		alert('str ' + new_str +' already missing in orig_str '+ orig_str);
		return orig_str;
	}	
	
}

/**
* apre una finestra di selector 
* se la finestra attiva è un selector ne apre un altra
*/
function std_open_selector(url){
	var wname = window.name;
	var count = 1;
	var re = new RegExp('selector_(\\d+)');
	if( wname.match(re) ){
		var xtr = re.exec(wname);
		count = parseInt(xtr[1]) + 1;
	}	
	var w = window.open(url,'selector_' + count,'');
	w.focus();
}

function setUploadedFile(element_name,file_name){
// 	alert('input :' + element_name  + ' file:' + file_name);
	$('input#' + element_name  ).val( file_name);
	$('#' + element_name  + '_filename').html( file_name);

	//need to save form
	$('#pxcms_changes').val ( parseInt($('#pxcms_changes').val() ) + 1 );
	//hide dowload button (fino a che non salvo)
// 	var button_id = new String(element_name);		
// 	var download_button_id = button_id.replacde('upload','download');
	$('#' + element_name + '_download_button').hide();
// 	alert('hiding ' + '#' + element_name + '_download_button');
}

function std_select(to_name_id,to_name_label,val,label){			
// 	alert('std_select to_name_id:' + to_name_id + ' val:' + val + ' to_name_label:' + to_name_label + ' !');
// 	var form_ele = document.forms[form_name];
// 	var form_ele = xb_get_element_by_id(to_name);
// 	if(!form_ele){
// 		alert('form_ele undefined ! form_name: ' +form_name + ' !');
// 	}
// 	var to_ele = form_ele[to_name];
// 	var to_ele = xb_get_element_by_id(to_name_id);
	var to_ele = $('#'+ to_name_id).get(0);

	if(!to_ele){
		alert('to_ele undefined ! to_name_id: ' +to_name_id + ' !');
	}
	var presente = false;
	if(to_ele.options){
		for(i=0;i<to_ele.options.length;i++){
			if(val == to_ele.options[i].value){
// 				alert('val ' + val + ' presente nelle options');
				presente = true;
			}
//  			alert('to_ele option:' + i + ' val:' + to_ele.options[i].value);
		}
		if(presente == false){		
// alert('val ' + val + ' va aggiunto');
			var newopt = new Option(label, val, false, false);
			to_ele.options[to_ele.options.length] = newopt;
		}
	}else{
		//autocomplete jquery
		if( $('input#' + to_name_id + '_jq_ac_input' ).length ){
// 			alert('ok' + to_name_id + '_jq_ac_input val:' + label );
			$('input#' + to_name_id + '_jq_ac_input' ).setOptions({
				scrollHeight: 1500
			});
			$('input#' + to_name_id + '_jq_ac_input' ).val( label);
		}else{
			//simple hidden with text label
			if(to_ele.type == 'hidden'){
				to_ele.value = val;
// 				var to_label = xb_get_element_by_id(to_name_label);
// 				to_label.innerHTML = label;
				$('#' + to_name_label).html(label);
			//old autocomplete
			}else{
				//se presente oggetto atcb => option come input text
				var id = to_ele.id + '_actb_obj';
				//disabilito check dopo aggiunta record nuovo
				var r = eval('if(window.' + id + '){' + id + '.relax();}');
			}	
		}
	}
	to_ele.value = val;
}

function jq_hide(id){
	$('#'+id).hide('slow');
}

function jq_show(id){
	$('#'+id).hide('slow');
}
$(document).ready(function(){	
	menuBind();
	stdEventBind(this);
});

function menuBind(){
	/* mmware 071208
	*hide, show main model menu: conteiner and single menu. remembers state between requests (via ajax) !
	*/
	/*$('#hide_std_model_list_container').click(function(){
		$('#std_model_list_container').toggle('normal');
		$.get('/menu', {'std_model_list_container_display': 'none' });
	});*/
	$('.toggle_model_list_container').click(function(){
		$('#std_model_list_container').toggle('normal');
		$.get('/menu', {'toggle_model_list_container_display': '' });		
	});
	$('.std_menu_title').click(function(){
		var title_id = this.id;
		var menu_id = title_id.replace(/menutitle_/,'');
		$('#'+menu_id).toggle('normal');
		if($('#'+menu_id).is(':visible') ){
			$.get('/menu', {'menu_id': menu_id, 'visibility': 'normal' });
		}else{
			$.get('/menu', {'menu_id': menu_id, 'visibility': 'hidden' });
		}
	});
	$('#overlay_std_model_list_container').click(function(){
		if($('#overlay_std_model_list_container').attr("checked") ){
			$('#std_model_list_container').css('position','absolute');
			$.get('/menu', {'std_model_list_container_position':  'absolute' });
		}else{
			$('#std_model_list_container').css('position','relative');
			$.get('/menu', {'std_model_list_container_position':  'relative' });
		}
	});
}
/**
* TODO
* separare 
*	1. bind per menu laterale
*	2. bind eseguito solo 1 volta all' onload pagina
*	3. bind eseguito ogni volta che si aggiungono lementi al dom
*/
function stdEventBind(ele){
// 	alert('start bind');
// 	return ;
	//030209 ajax model preview with dialog widget
	$('.ajax_model_preview_button', ele).click ( function(e){
		ajaxModelPreviewDialog(e,this);
	});
	//030209 FINE ajax model preview

	//080109 ajax model execute action
	$('.ajax_model_execute_button', ele).click ( function(e){
		ajaxModelExecute(e,this);
	});
	//080109 FINE ajax model execute
	// 161208 std close form
	$('.std_close_button', ele).click ( function(e){
		var url = $('.url',this).html(); //hidden span for parameter passing
		if(url){
			document.location.href = url;
		}
	});
	// fine 161208 std close form
	// 221208 std logout button
	$('.logout_button',ele).click ( function (e) {
		var c = confirm('Do you confirm logout ?','Logout');
		if( c ){
			document.location.href = '/logout';
		}
	});
	// fine 221208 std logout button

	// 270109 start filter con INVIO
	$(".filter:input",ele).keypress( function (e) {
		if(e.which == 13){
			this.form.submit();
		}
	});
	// fine 270109
	// 270109 focus on first input of the page
	$(":text:first").focus().select();
	// fine 270109
	// 290108 datepicker
	$('.date_input').datepicker({
		showOn: 'button', 
		buttonImage: '/img/pxcms/calendar.gif', 
		buttonImageOnly: true,
		dateFormat: 'dd/mm/y',
		buttonText: 'Choose Date',
		constrainInput: false,
		firstDay: 1,
		showButtonPanel: true
		});
	// fine 290108
	

	// 300108 tabs 
	$('.tabs_jquery',ele).tabs( { cookie: { expires: 30 } });
	// fine tabs 
	// 300108 preview box
	$('.jquery_box').dialog({autoOpen: false, height: 400, width:400 });
	$('.jquery_box_open',ele).click( function(){
		var anchor_id = this.id;
		var preview_id = anchor_id.replace(/std_box_open_/,'std_box_');
		$('#'+preview_id).dialog('open');
	});
	// fine preview box
	// 020209 css theming
	$('.std_button').hover(
		function() { $(this).addClass('ui-state-hover'); }, 
		function() { $(this).removeClass('ui-state-hover'); }
	);
	$('.std_menu_item').hover(
		function() { $(this).addClass('ui-state-hover'); }, 
		function() { $(this).removeClass('ui-state-hover'); }
	);
	$('.std_icon_button').hover(
		function() { $(this).addClass('ui-state-hover'); }, 
		function() { $(this).removeClass('ui-state-hover'); }
	);
	$('.std_icon_button_small').hover(
		function() { $(this).addClass('ui-state-hover'); }, 
		function() { $(this).removeClass('ui-state-hover'); }
	);
	$("#accordion_menu").accordion({ 
		header: "h3" ,		
		active: ".active_accordion",
		alwaysOpen: false,
		clearStyle: true ,
		autoHeight: false,
		collapsible: true
		});
	//clearStyle: true  //CON IE7 L'accordion non funzica	
	// autoHeight: false //CON IE7 L'accordion non funzica	
	$("#accordion_menu  h3").click(function () {
		if( $(this).attr('id')  ) {
			$.get('/menu', {'menu_accordion_id': $(this).attr('id') });
		}
		});
	// fine css theming
	//theme select
	$("#jquery_theme_selector").change(function () {
		var str = $("#jquery_theme_selector option:selected").text() ;
		$('<link rel="stylesheet" type="text/css" href="/jquery/themes/' + str + '/ui.all.css" title="style"></link>').appendTo("head"); // check append() examples
		$.get('/menu', {'jquery_theme': str });			
	});
	//
	// 140309 font size select 
	
	$("#web_safe_fonts_font_size_dropdown").change(function () {
		var font_size = $("#web_safe_fonts_font_size_dropdown option:selected").text() ;
		$('span, div, p, td, th').css('font-size',font_size);
		$.get('/menu', {'font_size': font_size });
	});
	
	$("#web_safe_fonts_family_dropdown").change(function () {
		var font_family = $("#web_safe_fonts_family_dropdown option:selected").text() ;
		$('body, span, div, p, td, th').css('font-family',font_family);
		$.get('/menu', {'font_family': font_family });
	});
	// fine 140309
	//language select
	$("#pxcms_language_dropdown").change(function () {
		var lang = $("#pxcms_language_dropdown option:selected").text() ;
		$.get('/menu', {'language': lang });
	});
	//

	// multiselectable 200209
	$('.multiselect').multiselectable();
	// fine 200209
	// filter advanced 270209
	$('.std_toggle_filter_advanced').click(function () {
		$('.std_filter_advanced_container').toggle();
		if( $(".std_filter_advanced_container").is(':visible' ) ){			
			$(".std_toggle_filter_advanced .ui-icon").removeClass('ui-icon-triangle-1-s');
			$(".std_toggle_filter_advanced .ui-icon").addClass('ui-icon-triangle-1-n');
			$("#pxcms_advanced_filter_visibility").val('visible');
		}else{
			$(".std_toggle_filter_advanced .ui-icon").removeClass('ui-icon-triangle-1-n');
			$(".std_toggle_filter_advanced .ui-icon").addClass('ui-icon-triangle-1-s');
			$("#pxcms_advanced_filter_visibility").val('not_visible');
		}
	});
	/** HACK rende consistente la visibilità del advanced filter con l'iconcina di visualizza/nascondi filtro*/ 
	if( $("#pxcms_advanced_filter_visibility").val() == 'visible') {
		$(".std_toggle_filter_advanced .ui-icon").removeClass('ui-icon-triangle-1-s');
			$(".std_toggle_filter_advanced .ui-icon").addClass('ui-icon-triangle-1-n');
	}else if( $("#pxcms_advanced_filter_visibility").val() == 'not_visible') {
		$(".std_toggle_filter_advanced .ui-icon").removeClass('ui-icon-triangle-1-n');
			$(".std_toggle_filter_advanced .ui-icon").addClass('ui-icon-triangle-1-s');
			
	}
	// fine 270209

	// 050309 gestione form di modifica /inserimento 
	// 1. notifica delle modifiche non salvate
	// 2. evidenzia modifiche
	$("form.edit  :input ").change(function () {
			$(this).addClass('user_changed');
			$('#pxcms_changes').val ( parseInt($('#pxcms_changes').val() ) + 1 );
// 			alert('name:' + this.name + ' changes:' + $('#pxcms_changes').val () );
		});
	//gestione modifiche non salvate
	if( $("form.edit").size() > 0 ){
		window.onbeforeunload = function(e){
// 				alert('onbeforeunload: name:' + this.name + ' changes:' + $('#pxcms_changes').val () );
				if( $("form.edit input[name='pxcms_changes']").val() > 0 ){
// 				if( parseInt( $('#pxcms_changes').val() ) > 0 ){
					return 'Hai eseguito modifiche alla pagina: se esci senza salvare le modifiche andranno perse !';
				}
			};
	}
	// fine 050309
	//100309 ajax form
	$('.add_element_button', ele).click ( function(e){
		addForm(e,this);
	});
	// 290409 uploadify DEPRECATED
	$('.std_upload_button2', ele).click ( function(event){
		var span_id = new String(this.id);
		
		var base_id = span_id.replace('_upload_button','');
		var span_container = $(this).parent().get(0);
		var uploadify_hidden_input = $('.hidden_uploadify_input',span_container);
		var uploadify_text_input = $('.uploadify_filename',span_container);

// 		alert('span id ' + span_id + ' base_id' + base_id);

		var uploadify_div = 'uploadify_div';
		//se non c'è creo il div con l'upload button
		if( ! $('#' + uploadify_div).length ) {
// 			alert('creating div');
			$('<div  id="' + uploadify_div + '" class="uploadify_div" style="position:absolute;"><input type="file" id="uploadify_input"  name="uploadify_input"/><span id="uploadify_base_id"  style="display:none;"></span></div>').appendTo("body");
			$('#uploadify_input').fileUpload({
			'uploader': '/jquery/uploadify/uploader.swf',
			'script':    '/upload',
			'folder':    '/jquery/uploadify/uploads-folder',
			'cancelImg': '/jquery/uploadify/cancel.png',
			'buttonText': 'Click to Upload',
			'auto':		true,
			'onComplete':	function(event, queueID, fileObj, response) {
				var myid = $('#uploadify_base_id').text() ;
				
// 				alert('myId:' + $('#uploadify_base_id').text() + '!');
				//metto il nome del file nel campo read only di visualizzazione
				uploadify_text_input.html(fileObj.name );
				//metto il nome del file nel campo hidden per il post !
				uploadify_hidden_input.val(fileObj.name );
				//nascondo il div con l'upload button
				$('#' + uploadify_div ).hide() ;
				if(response != 1){
					alert( response );
				}
				//quando faccio l'upload setto il form come "sporco"
				$('#pxcms_changes').val ( parseInt($('#pxcms_changes').val() ) + 1 );
			}
		});
		}
		$('#uploadify_base_id').text(base_id);
			
		//lo posiziono sul mouse
		$('#' + uploadify_div).css('left',event.pageX );
		$('#' + uploadify_div).css('top',event.pageY );
		$('#' + uploadify_div).show();
	});
	// fine uploadify
	
	// 160709 upload con finestra separata
	$('.std_upload_button', ele).click ( function(event){
		var button_id = new String(this.id);		
		var element_name = button_id.replace('_upload_button','');
		var url = '/upload?element_name=' + element_name;
		var w = window.open(url,element_name,'toolbar=no,location=no,directories=no,status=no,menubar=no,resizable=yes,scrollbars=yes,width=450,height=250');
		w.focus();
	});
	// fine 160709 upload con finestra separata
	
		
	// 270409 gestione doppio campo palette sovrapponibili
// 	$('input:radio').click( function(e){		
// 		alert('name:' + this.name);
// 	});
	// 
	/**HACK 
	* setta il numero di colonne a quello totale della riga precedente 
	*per colspan =* 	
	*/
	$('.hack_colspan_all',ele).each(
		function(){
			var ncol;			
			var tr = $(this).parent().get(0);
			var prevRow = $(tr).siblings().get(0);
			ncol = $('td',prevRow).length;
			if(ncol == 0){
				ncol = $('th',prevRow).length;
			}
			if(ncol){
				this.colSpan = ncol;
			}
		});
	/**fine HACK  colspan*/
	/**
	* 080609 
	* autocomplete gestito via jq bind
	*/
	$('.jq_autocomplete',ele).each(
		function(){
// 			alert('binding to ' + $(this).attr('id') );
			var input_id = $(this).attr('id') ;		
			var hidden_id = input_id.replace(/_jq_ac_input/,'')  ;
			var span_container = $(this).parent().get(0);
			var var_data_name = $('.jq_autocomplete_data',span_container).html();
// 			alert('var_data_name : ' + var_data_name );
			if(!var_data_name){
				var_data_name = input_id.replace(/_jq_ac_input/,'_jq_ac_data') ;
			}
			var var_data = eval( var_data_name );
			$('#' + input_id).autocomplete(var_data, {
				minChars: 0,
				width: 310,
				matchContains: true,
				autoFill: false,
				mustMatch: true,
				formatItem: function(row, i, max) {
					return row.label ;
				},
				formatMatch: function(row, i, max) {
					return row.label ;
				},
				formatResult: function(row) {
					return row.label;
				}
				});
			
			$('#' + input_id ).result(function(event, data, formatted) {
				if(data.value ){
					$('#' + hidden_id).val( data.value );
				}else{
					$('#' + hidden_id).val( "" );
				}
			});
		});
	/**
	*/
	/**
	* show select button only if i am in selector
	*/
	var re = new RegExp('selector_(\\d+)');
	var wname = window.name;
	if( wname.match(re) ){
		$('.std_selector_menu_item').show();
	}
	/**fine show select*/
	/**
	* reset selector  con chiusura lista: il filtro resta attivo ma si può resettare con ResetFilter
	*/
	$('.std_close_list_button').click(function() {
			var re = new RegExp('selector_(\\d+)');
			var wname = window.name;
			if( wname.match(re) ){
				if(window.url_ajax_controller ) {
					var url_to_call = window.url_ajax_controller + '?update_action=reset_selector';
					$.ajax({ url: url_to_call });
				}else{
					my_alert('could not reset_selector');
				}
			}
		});
	/**
	* dynamic delete in forms 
	*/
	$('.std_delete_checkbox').click(function() {
		var parent1 = $(this).parent().get(0);
		var parent2 = $(parent1).parent().get(0);
		var clicked = this;
		if( $(this).attr('checked') ) {
			$(":input",parent2).each(function (i, domele) {
					if(domele.id != clicked.id){
						$(domele).attr("disabled","disabled");
					}
				});
			alert('Il record selezionato verrà eliminato!');
			//setto il form come "sporco"
			$('#pxcms_changes').val ( parseInt($('#pxcms_changes').val() ) + 1 );
		}else{
			$(":input",parent2).each(function (i, domele) {
					if(domele.id != clicked.id){
						$(domele).removeAttr("disabled");
					}
				});
		}
	});
	/***TODO come modificare datepicker*/
	/*$('.date_input').datepicker('destroy');
	$('.date_input').datepicker({
		showOn: 'both', 
		buttonImage: '/img/pxcms/calendar.gif', 
		buttonImageOnly: true,
		dateFormat: 'dd/mm/y',
		buttonText: 'Choose Date',
		constrainInput: false,
		firstDay: 1,
		showButtonPanel: true
		});
	*/
	/**
	* 030809 tablesorted
	* ordinamento prima colonna disabilitato
	*/
	$(".tablesorter").tablesorter( {headers: { 0: { sorter: false} } } ); 
}
//esegue il metodo specificato e se va tutto bene chiama ajaxModelPreview 
//se il box non esiste viene creato e il contenuto caricato tramite ajax
function ajaxModelExecute(event, my_ele  ){
	var debug = false;
	
	var execute_url = $('#' + my_ele.id + ' > .execute_url').html(); //hidden span for parameter passing
	var execute_comment = $('#' + my_ele.id + ' > .execute_comment').html(); //hidden span for parameter passing	
	if(execute_comment == undefined){
		execute_comment = 'Executing requested action';
	}

	if(debug){
		alert('id=' + my_ele.id );
	}
	if(execute_url){
		if(debug){
			alert('execute_url=' + execute_url);
		}
		//create a new img tag with src /img/pxcms/throbber.gif
		
		//settare il title a sto eseguendo l'azione richiesta
		//posiziono il tag vicino al mouse
		var throbber_id = my_ele.id + '_throbber';
		$('<img src="/img/pxcms/throbber.gif" id="' + throbber_id + '" class="std_throbber" title="' + execute_comment + '"/>').appendTo("body");
		$('#' + throbber_id).css('left',event.pageX );
		$('#' + throbber_id).css('top',event.pageY );

		var my_event = this;
		$.ajax({
			url: execute_url ,
			success: function(msg){
// 				alert( "Data Saved: " + msg );
				ajaxModelPreview(my_event,my_ele);
				},
			error: function(xmlHttpR, txtStatus, errTh){
				alert( 'ajax request to : ' + execute_url + 'failed: ' + txtStatus);
				}
			});
		/*$.get(execute_url,{},function (data1) {
			if(debug){
				alert("Execute Data Loaded: " + data1);
			}
			//questa funzione modifica l'aspetto e nasconde il throbber
			ajaxModelPreview(this,my_ele);
			});*/
		if(debug){
			alert('DONE execute_url=' + execute_url);
		}
	}else{
		alert('Missing parameter "execute_url" for id :' + my_ele.id); 
	}
}

//visualizza il template specificato tramite "url" in un box con id="id" draggable e hidable 
//se il box non esiste viene creato e il contenuto caricato tramite ajax
function ajaxModelPreview(event, my_ele  ){
	var loading = false;
	
	var debug = false;
	
	var url = $('#' + my_ele.id + ' > .ajax_model_preview_url').html(); //hidden span for parameter passing
	var id = $('#' + my_ele.id + ' > .ajax_model_preview_boxid').html();	
	var re_load = $('#' + my_ele.id + ' > .re_load').html();	
	var replace_element = $('#' + my_ele.id + ' > .replace_element').html();	
	var load_comment = $('#' + my_ele.id + ' > .load_comment').html(); //hidden span for parameter passing	
	if(load_comment == undefined){
		load_comment = 'Loading Content ... ';
	}
	if(debug){
		alert('id=' + my_ele.id + ', re_load=' + re_load +', replace_element=' + replace_element);
	}
	if(re_load == undefined){
		re_load = false;
	}
	//throbber
	var throbber_id = my_ele.id + '_throbber';
	if( ! $('#' + throbber_id).length ) {
		$('<img src="/img/pxcms/throbber.gif" id="' + throbber_id + '" class="std_throbber" title="' + load_comment + '"/>').appendTo("body");
		$('#' + throbber_id).css('left',event.pageX );
		$('#' + throbber_id).css('top',event.pageY );
	}else{
		$('#' + throbber_id).attr('title', load_comment);
	}	
	
	//check wether elements exists and if doesnt create it
	if( ! $('#' + id).length ) {
		$('<div id="' + id + '" class="ajax" style="display:none;"/>').appendTo("body");
	}
	//check wether element has content and if not loads via ajax and binds std event
	if($('#' + id + ':empty').length || re_load){
		loading = true;
		if(debug){
	 		alert('must open ' + url + ' in box ' + id);
		}
		if(replace_element){
			$.get(url, {}, function (data) {
				if(debug){
					alert("Data Loaded: " + data);
				}
				$('#' + id).replaceWith(data) ;
				stdEventBind( $('#' + id).get(0) );//assuming that the new inserted element has the same id as old one
				$('#' + throbber_id).remove();
				return;
			} );
		}else{
			$('#' + id).load(url, {}, function () {
				stdEventBind(this);
				$('#' + throbber_id).remove();
				return;
			});
		}
		$('#' + id).toggle();
	}else{
		$('#' + id).toggle();
		$('#' + throbber_id).remove();
	}
}

//visualizza il template specificato tramite "url" in un widget jquery dialog 
function ajaxModelPreviewDialog(event, my_ele  ){
	var loading = false;
	
	var debug = false;
	
	var url = $('#' + my_ele.id + ' > .ajax_model_preview_url').html(); //hidden span for parameter passing
	var id = $('#' + my_ele.id + ' > .ajax_model_preview_boxid').html();	
	var load_comment = $('#' + my_ele.id + ' > .load_comment').html(); //hidden span for parameter passing	
	if(load_comment == undefined){
		load_comment = 'Loading Content ... ';
	}
	if(debug){
		alert('id=' + my_ele.id + ', re_load=' + re_load +', replace_element=' + replace_element);
	}	
	//check wether elements exists and if doesnt create it
	if( ! $('#' + id).length ) {
		$('<div id="' + id + '" style="display:none;"/>').appendTo("body");
		//throbber
		var throbber_id = my_ele.id + '_throbber';
		if( ! $('#' + throbber_id).length ) {
			$('<img src="/img/pxcms/throbber.gif" id="' + throbber_id + '" class="std_throbber" title="' + load_comment + '"/>').appendTo("body");
			$('#' + throbber_id).css('left',event.pageX );
			$('#' + throbber_id).css('top',event.pageY );
		}else{
			$('#' + throbber_id).attr('title', load_comment);
		}
		//dialog creation
		$('#' + id).load(url, {}, function () {
			stdEventBind(this);
			$('#' + throbber_id).remove();
			//after loading is complete
			//move to the center if right corner is outside window
			var tot_w = document.body.offsetWidth;
			var act_x = event.pageX;
			var ele_w = $('#' + id).width();
			var new_x = act_x + ele_w;				
			if(new_x  > tot_w){
				$('#' + id).css('left',tot_w - $('#' + id).width() );
			}
			var my_title = $('.ajax_title').remove().html();
			$('#'+id).dialog( {autoOpen: true, width: 600, title: my_title } );	
 		} );
	}else{
		$('#'+id).dialog('open');
	}
}


//visualizza un pezzo di form dinamico
function addForm(event, my_ele  ){

	var loading = false;
	
	var debug = false;
	
	var id_target = $('.id_target', my_ele).html();	
	var id_template = $('.id_template', my_ele).html();	
	var form_id = $('.form_id', my_ele).html();
	var hide_if_pressed = $('.hide_if_pressed', my_ele).html();
	var parent_model_prefix = $('.parent_model_prefix', my_ele).html();

	var relation_name = $('.relation_name', my_ele).html();
	var max_num_elements = $('.max_num_elements', my_ele).html();

	var pxcmstemplate_name = $('.pxcmstemplate_name', my_ele).html();
	var add_template_to_formmanager_url = $('.add_template_to_formmanager_url', my_ele).html();	

	//verifico quanti elementi sono stati aggiunti	
	var added_count = document.forms[form_id].elements['num_elements_' + relation_name].value;
	
	if(parseInt(added_count)  < parseInt(max_num_elements) ){
		
		addDynamicForm2(id_template,id_target,form_id, pxcmstemplate_name, add_template_to_formmanager_url, parent_model_prefix );
	}else{
		alert('STOP added:' + added_count + ' max_num_elements:' + max_num_elements);
	}
	if(hide_if_pressed){
		$('#' + my_ele.id).hide();
	}
}
