// JavaScript Document

/*
  Funzioni per la gestione degli errori
  
  Posso aggiungere un argomento ad Xform per definire la classe di errore da usare.
  Se non è definito uso questa di default
  
  HOW TO
  
  spiegare come funziona con caso di container e response definite. L'uso della doppia classe
  e il funzionamento via css. Tutto quello che è scritto sul taccuino.
  
*/

var XError = {};

XError.check = function( rsp )
{
  // Analizzo se è un caso di errore o meno e mi comporto di conseguenza
  if ( rsp["errno"] )
    return XError.fire(rsp);
  else
    return XError.clear(rsp);
}

XError.clear = function( rsp )
{
  // Eseguo il codice per la pulizia
  // Recupero la response corretta
  if ( rsp["obj"] == rsp["response"] )
  {
    var element_span = $("err_" + $(rsp["obj"]).id);
    var exist = false;
  }
  else
  {
    var element_span = rsp["response"];
    var exist = true;
  }
  
  // Se è presente l'elemento allora eseguo le operazioni di ripristino
  if ( element_span )
  {
    // Recupero il contenitore ( forse posso portarlo fuori, all'inizio della procedura )
    if ( rsp["obj"] == rsp["container"] )
    {
      var container = $(rsp["obj"]).parentNode;
    }
    else
    {
      var container = rsp["container"];
    }
    
    // Riporto il contenitore allo stato di default
    $(container).style.background = "transparent";
    if ( exist )
    {
      element_span.innerHTML = "";
      element_span.className = "error_message_off";
    }
    else
    {
      element_span.parentNode.removeChild(element_span);
    }
  }
  
  return true;
}

XError.fire = function( rsp )
{
  // Elimino il messaggio precedente ( per sicurezza, evito i duplicati ) Potri abilitare
  // in xForm la pulizia globale sempre e cmq. Così in caso di sequenza non eseguo l'operazione
  // due volte. 
  XError.clear(rsp);
  
  // Recupero il messaggio di errore
  var errMex = ERROR[rsp["errno"]]["ita"];
  
  // Recupero il contenitore
  if ( rsp["obj"] == rsp["container"] )
  {
    var container = $(rsp["obj"]).parentNode;
  }
  else
  {
    var container = rsp["container"];
  }
   
  // Evidenzio il contenitore del campo
  $(container).style.background = "#E0F0FF";
  
  
  // Recupero l'elemento response
  if ( rsp["obj"] == rsp["response"] )
  {
    var nodeError = createElement( "span", "err_" + $(rsp["obj"]).id);
    nodeError.id = "err_" + $(rsp["obj"]).id;
    nodeError.className = "error_message";  // così posso ridefinire la classe via css
                                            // per ogni singola pagina definendo i comportamenti.
                                            // inoltre potrei anche fargli passare tale classe
                                            // integrandola nei dati passati. ma come opzionali
                                            // se c'è la uso altrimenti nisba. Così posso
                                            // gestirla solo dove serve. Dobbiamo aggiungere un parametro
                                            // json opzionale.
                                            // oppure mettiamo nel campo response l'id del campo
                                            // dove deve finire l'errore. uno span ovviamente
                                            // che viene definito con html.
  }
  else
  {
    var nodeError = rsp["response"];
    nodeError.className = "error_message";  // Uso la stessa classe sopra per definire i comportamenti
  }
  
  
  nodeError.innerHTML = errMex;
  $(container).appendChild(nodeError);
  

  return false;
}

XError.openNotify = function( mex )
{
  if ($("notify"))
  {
    $("notify").innerHTML = "<span>" + mex + "<a href=\"javascript: XError.closeNotify();\"><img src=\"" + PATH_XERROR + "img/transparent.gif\"></a></span>";
  }
}

XError.closeNotify = function()
{
  if ($("notify"))
  {
    $("notify").innerHTML = "";
  }
}

// Devo definire l'array con gli errori

var ERROR = [];
ERROR["1"]  =  { "ita" : "Campo obbligatorio" };
ERROR["2"]  =  { "ita" : "Stringa troppo corta" };
ERROR["3"]  =  { "ita" : "Stringa troppo lunga" };
ERROR["4"]  =  { "ita" : "Campo non valido" };
ERROR["5"]  =  { "ita" : "Valore troppo piccolo" };
ERROR["6"]  =  { "ita" : "Valore troppo grande" };
ERROR["7"]  =  { "ita" : "Password non valida" };
ERROR["8"]  =  { "ita" : "Conferma password non coincide" };
ERROR["9"]  =  { "ita" : "Data non valida" };
ERROR["10"] =  { "ita" : "File non permesso" };
