//<key>__ERROR_SUPPORT</key>
//<requires>BasePage</requires>
//<requires>ErrorMultilanguageSupport_</requires>

//Array che tengono la lista dei controlli
//che hanno generato errore e warning
var controlsErrorsArray = new Array();
var controlsWarningsArray = new Array();
var radiobuttonsErrorsArray = new Array();
var unifiedList = new Array();
var formId = "";
var onFocusColor = "#A6D2FF";

//Costanti che definiscono il codice dei tasti "Ctrl" e "D"
var __CTRL_KEY = 17;
var __T_KEY = 68;

//Variabile che viene settata al momento della pressione del Ctrl
//e deselezionata al suo rilascio
var isCTRL;

//Controllo che ha il focus
var activeElement = 0;


//Abilita gli eventi di tastiera (Netscape)
if(browserObj.isNS4 || browserObj.isNS6)
	document.captureEvents(Event.KEYUP||Event.KEYDOWN); 
document.onkeyup = keyUp;
document.onkeydown = keyDown;

//Funzioni che tengono traccia degli input da tastiera per intercettare
//l'evento CTRL+D (controllo d'errore)
function keyUp(e)
{
	if(browserObj.isNS4 || browserObj.isNS6)
		keyPressed = e.which;
	else
		keyPressed = event.keyCode;
	//Logica che controlla CTRL+D
	if(isCTRL) //Era stato premuto il control
	{
		
		if(keyPressed == __T_KEY)
			setErrorControlFocus();
		else
			if(keyPressed == __CTRL_KEY)
				isCTRL = false;
	}
}

function keyDown(e)
{
	if(browserObj.isNS4 || browserObj.isNS6)
		keyPressed = e.which;
	else
		keyPressed = event.keyCode;
	//Logica che controlla CTRL+T
	if(keyPressed == __CTRL_KEY)
		isCTRL = true;
	
}

//Funzione per unificare le liste d'errore
function unifyLists()
{
  //Nella nuova lista inserisce gli id di controllo
  for(var i=0; i < controlsErrorsArray.length; i++)
    unifiedList[unifiedList.length] = controlsErrorsArray[i][0];
  for(i=0; i < controlsWarningsArray.length; i++)
    unifiedList[unifiedList.length] = controlsWarningsArray[i][0];
}

//Funzione che pone il focus sul primo controllo di errore disponibile
function setErrorControlFocus()
{
	var myActiveCtrl;
	//Seleziona il controllo
	myActiveCtrl = document.getElementById(unifiedList[activeElement]);
	
	if(myActiveCtrl != null && myActiveCtrl != __UNDEFINED)
	{
	  //Setto le proprieta'
	  myActiveCtrl.focus();
	  myActiveCtrl.style.backgroundColor = onFocusColor;
	}
  //Aggiorna il ciclo dei controlli
	if(activeElement == unifiedList.length -1)
		  activeElement = 0;
	else
		activeElement++;
}

//Funzione invocata per visualizzare gli errori
function displayErrors()
{
  //Unifica le liste
  unifyLists();
  
  //Inizializza le stringhe di errore
  var pageErrorText = translations["PAGE_ERROR_TEXT"];
  var pageWarningText = translations["PAGE_WARNING_TEXT"];
  var continueAnyway = translations["CONTINUE_ON_WARNING_TEXT"];
  pageErrorText += "\n";
  pageWarningText += "\n";
  continueAnyway += "\n";
  
  //Inizia a costruire il mesaggio di errore
  var display = "";
  if(controlsWarningsArray.length != 0)
  {
    display += pageWarningText;
    for(var i=0; i < controlsWarningsArray.length; i++)
    {
      if(controlsWarningsArray[i][1] != "")
        display += " - "+controlsWarningsArray[i][1]+" - "+controlsWarningsArray[i][2]+"\n";
      else
        display += " "+controlsWarningsArray[i][2]+"\n";
    }
    display += "\n";
  }
  if(controlsErrorsArray.length != 0)
  {
    display += pageErrorText;
    for(var i=0; i < controlsErrorsArray.length; i++)
    {
      if(controlsErrorsArray[i][1] != "")
        display += " - "+controlsErrorsArray[i][1]+" - "+controlsErrorsArray[i][2]+"\n";
      else
        display += " "+controlsErrorsArray[i][2]+"\n";
    }
    display += "\n";
  }
  if(controlsErrorsArray.length != 0)
    alert(display);
  else
  {
    if(controlsWarningsArray.length != 0)
    {
      if(confirm(display+continueAnyway))
      {
        var myForm = document.getElementById(formId);
        myForm.continueOnWarnings.value = "true";
        myForm.submit();
      }
    }
  }
}

//Funzione per aggiungere un warning
function addWarning(controlId, controlName, message, fId)
{
  formId = fId;
  controlsWarningsArray[controlsWarningsArray.length] = new Array(controlId, controlName,message);
}

//Funzione per aggiungere un warning
function addError(controlId, controlName, message)
{
  controlsErrorsArray[controlsErrorsArray.length] = new Array(controlId, controlName,message);
}
