/**
 * Effettua una chiamata ajax, riceve una risposta JSON e aggiorna
 * più elementi HTML: le chiavi dell'hash di risposta sono gli ID del DOM,
 * i valori sono gli HTML 
 * 
 * @param {String} url 
 * @param {Object} params parametri sotto forma di hash javascript
 */
function ctn_do_ajax_json(url,params) {
	ctn_do_ajax(url, params, function (data) {
			  //hideSaving();
		      var result = data.responseJSON;
		      
			  var i = 0;
			  // Aggiorna più blocchi simultaneamente
		          
			  for (i in result) {
  			  	  if ($(i)) $(i).update(result[i]);
			  }
			  
			  
		 });
}

// Aggiunta della funzione "trim"
String.prototype.trim = function() {
   return this.replace(/^\s+|\s+$/g,"");
}


function suggest_restore(field_id,ajax_page,ajax_action,parameter_id)
{
 var param="&action="+ajax_action+"&id="+parameter_id;
 ctn_do_ajax(ajax_page,param,function (data)
   {
    var sel;
     sel = data.responseText;
     
     $(field_id).value =  sel;
   }
 );
}

/* Formatta la tabella "suggest" */
function suggest_format_output(data_arr)
{
 var len = data_arr.length;
 if (len <= 1) return "NESSUN RISULTATO";
 var form_hidden_id = data_arr[0];
 var colors = ["#eee","#ccc"];
 var ordinal = 0;
 var bg;
 var a;
 var output = "<table width=\"100%\" cellpadding=\"1\" cellspacing=\"0\">";
 for (j in data_arr)
 {
   
   if (j == 0) continue;

   v= data_arr[j];
   if (typeof(v) == "function") continue;
   if (ordinal % 2 == 0)
   {
    bg = colors[0];
   } else bg = colors[1];
   output += "<tr onclick=\"suggest_clicked('"+form_hidden_id+"','"+v["key"]+"','"+v["value"]+"');\">\n";
   for (key in v) if (key != "key") output += "<td nowrap style=\"background-color: "+bg+";\">"+v[key]+"</td>\n";
   output += "</tr>\n";

   ordinal ++;
 }
 output += "</table>";
 return output;
}

chars_written = 0;

function invoke_suggest(textref,form_name,ajax_page,ajax_action,parameter,js_custom_param_id)
{
 
 chars_written ++;
 var param='query='+textref.value+"&action="+ajax_action+"&"+parameter;
 if (js_custom_param_id)
 {
 	
 	//param += "&custom_param="+$F[js_custom_param_id];
 	param += "&custom_param="+$F(js_custom_param_id);
 	
 }
 if (textref.value=='')
 {
    textref.style.backgroundImage = "";
    //$("suggest_"+form_name).style.visibility = 'hidden';
    $("suggest_"+form_name).style.display = 'none';
    return;
 }
 var local_chars_written = chars_written;

 textref.style.backgroundImage = "url(images/loading.gif)";
 $('spunta_'+form_name).style.visibility = "hidden";
 $(form_name).value = "";
 var data_arr
 setTimeout(function()
 {
   if (chars_written != local_chars_written) return true;

   ctn_do_ajax(ajax_page,param,function (data)
     {
      if (data.responseText.strip() == "") data_arr = [];
         else data_arr = eval(data.responseText);
       
       var formatted_output = suggest_format_output(data_arr);
        
       $('suggest_'+form_name).innerHTML = formatted_output;
       //$("suggest_"+form_name).style.visibility = 'visible';
       $("suggest_"+form_name).style.display = 'inline';
       
       textref.style.backgroundImage = '';
     }
   );

 }
 ,500);
}

Event.observe(document,"click",function()
{
 var suggestions = $$('.suggestions');
 suggestions.each(function (e)
 {
  //e.style.visibility = 'hidden';
  e.style.display = 'none';
 });
 
 var suggestions = $$('.tooltips');
 suggestions.each(function (e)
 {
  e.style.display = 'none';
 });
 
},true);


function hide_suggest(form_name)
{
 //$("suggest_"+form_name).style.visibility = 'hidden';
 $("suggest_"+form_name).style.display = 'none';
 
}

function suggest_clicked(form_tag_hidden_id,valore_hidden,valore_shown)
{
 $(form_tag_hidden_id).value=valore_hidden;
 $('driver_'+form_tag_hidden_id).value=valore_shown;
 hide_suggest(form_tag_hidden_id);

 $('spunta_'+form_tag_hidden_id).style.visibility = "visible";
}



var isNav = (navigator.appName.indexOf("Netscape") !=-1);
var mouseX = 0;
var mouseY = 0;

Event.observe(document,'mousemove',aggiorna_mouse_position,true);

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}


function aggiorna_mouse_position(event)
{
// $("debug").innerHTML = mouseX;
 mouseX = Event.pointerX(event);
 mouseY = Event.pointerY(event);
// $('display').innerHTML = mouseX+","+mouseY;
}

//function response_funct(data) {}

function ctn_do_ajax(url,parameters,funct,sync)
{
  
  var async;
  if (sync == undefined || sync == 0) async = true;
  if (sync == 1) async= false;
  
  var ajax = new Ajax.Request
  (
    url,
    {
      method: 'get',
      parameters: parameters,
      onComplete: funct.wrap(function(p, data){ p(data); Configuratore.layout() }),
      asynchronous: async
    }
  );
}

function ctn_do_post_ajax(url,parameters,funct,sync)
{  
  var async;
  if (sync == undefined || sync == 0) async = true;
  if (sync == 1) async= false;
  
  var ajax = new Ajax.Request
  (
    url,
    {
      method: 'post',
      parameters: parameters,
      onComplete: funct.wrap(function(p, data){ p(data); Configuratore.layout() }),
      asynchronous: async
    }
  );
}


function invoke_autocomplete(textref,form_name,ajax_page,ajax_action,parameter)
{
 var param='query='+textref.value+"&action="+ajax_action+"&"+parameter;
 ctn_do_ajax(ajax_page,param,function (data)
   {
    var sel;
    if (!isNav)
    {
      sel = '<select id="'+form_name+'" name="'+form_name+'">'+data.responseText+"</select>";
      $(form_name).outerHTML = sel;

    }
    else
    {
     sel = data.responseText;
     $(form_name).innerHTML = sel;

    }

   }
 );
}


function blinkIt() {
 if (!document.all) return;
 else {
   for(i=0;i<document.all.tags('blink').length;i++){
      s=document.all.tags('blink')[i];
      s.style.visibility=(s.style.visibility=='visible')?'hidden':'visible';
   }
 }
}

