/*
  Name:       functions.js
  Version:    2.20
  Date:       21.05.2009
  Author:     Pier Mario De Pra
  Copyright:  2009
*/

/*
  STORIA VERSIONI: 
  20/04/2009 data ultima modifica del documento
  29/04/2009 pagina storia, disattivato dir, disattivato window.resizeTo()
  01/05/2009 'indietro' al posto di '<' e 'avanti' al posto di '>'
  05/05/2009 navigazione ad albero
  08/05/2009 sottopagine
  12/05/2009 piu' di due livelli di navigazione, DefinisciClasse()
  21/05/2009 eliminato cancella navigazioni non pagine
  21/05/2009 se >IE6 gli <span lang="ar"> dei #navigazione___ prendono dir='rtl'; 

*/


/*
 * DOC: aLingua e aPaginaNumero vanno adattati (per ora, purtroppo, sia qui sia nel documento vuoto) alle esigenze della pagina del cliente
 */

var aLingua = new Array ( );
var aPaginaNumero = new Array( );
var aSottopaginaNumero = new Array( );
var oCorrispondenzaPaginaSottopagina = {};
var aPaginaStoria = new Array( );
var iPaginaStoria = -1;

var sPaginaPrefisso = 'pagina';
var sSottopaginaPrefisso = 'sottopagina';
var sNavigazionePrefisso = 'navigazione';

var sNavigazioneAttivataClasse = 'navigazioneattivata';
var sNavigazioneDisattivataClasse = 'navigazionedisattivata';
var sNavigazioneCategoriaAttivataClasse = 'navigazionecategoriaattivata';
var sNavigazioneCategoriaDisattivataClasse = 'navigazionecategoriadisattivata';
var sVisibileRigaClasse = 'visibileblock';
var sVisibileParolaClasse = 'visibileinline';
var sInvisibileClasse = 'invisibile';

var aIDDissolvenzaBiancoNero = new Array ( 'colonnanavigazione', 'colonnalogo', 'colonnapagine', 'colonnanavigazione', 'barrafirma' );
var sColonnaAttivaAccessoVeloce = 'colonnaveloce';

var sIDVarPerDimensioneCarattere = 'dimensione';
var sIDVarPerDimensioneID = 'dimensioneID';
var sIDVarPerLingua = 'lingua';
var sIDVarPerPagina = 'pagina';
var sIDVarPerVeloce = 'veloce';
var sIDVarPerDissolvenza = 'dissolvenza';
var sIDVarPerLinguette = 'linguette';
var sIDVarPerNascondiAlClick = 'nascondialclick';
var sIDVarPerLarghezzaMinima = 'larghezzaminima';
var sIDVarNavigazioneAdAlbero = 'navigazioneadalbero';
var sNavigazioneAdAlbero = 'NO';

var sIDPerDataOdierna = 'dataodierna';
var sIDPerUltimaModifica = 'ultimamodifica';

var bIE7plus = false;
var iIndice = navigator['appVersion'].indexOf('MSIE');
if ( iIndice > 0 ) {
  var iVersione = parseInt( navigator['appVersion'].substr(iIndice + 5) );
  if ( iVersione > 6 ) {
    bIE7plus = true;
  } else {
  }
} else {
}

function Inizializza() {
/*
 * DOC: individua la necessita' della navigazione ad albero
 */
  if ( document.getElementById( sIDVarNavigazioneAdAlbero ) ) {
    sNavigazioneAdAlbero = document.getElementById( sIDVarNavigazioneAdAlbero ).innerHTML;
  } else {
  }
/*
 * DOC: espandi finestra alla larghezza minima (non mi sembra che funzioni ne' in O ne' in FF)
 */
  if ( document.getElementById( sIDVarPerLarghezzaMinima ) && document.getElementById( sIDVarPerLarghezzaMinima ).firstChild.data > 0  ) {
    var iLarghezzaMinima = parseInt( document.getElementById( sIDVarPerLarghezzaMinima ).firstChild.data );
    var myWidth = 0, myHeight = 0;
    if( typeof( window.innerWidth ) == 'number' ) {
      //Non-IE
      myWidth = window.innerWidth;
      myHeight = window.innerHeight;
    } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
      //IE 6+ in 'standards compliant mode'
      myWidth = document.documentElement.clientWidth;
      myHeight = document.documentElement.clientHeight;
//      bIE7plus = true;
    } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
      //IE 4 compatible
      myWidth = document.body.clientWidth;
      myHeight = document.body.clientHeight;
    } else {
    }
    if ( myWidth < iLarghezzaMinima ) {
//      window.resizeTo( iLarghezzaMinima, myHeight );
    } else {
    }
  } else {
  }
  if ( document.getElementById( sIDPerDataOdierna ) ) {
    var oDatum = new Date();
    var aTagesname = new Array('Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag');
    var aMonatsname = new Array('Januar','Februar','M&auml;rz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
    var sHeute = aTagesname[ oDatum.getDay()] + ', ' + oDatum.getDate() + '. ' + aMonatsname[ oDatum.getMonth() ] + ' ' + oDatum.getFullYear();
    document.getElementById(sIDPerDataOdierna).innerHTML = '<span lang="de">' + sHeute + '</span>';
  } else {
  }
  if ( document.getElementById( sIDPerUltimaModifica ) ) {
    document.getElementById(sIDPerUltimaModifica).innerHTML = document.lastModified;
  } else {
  }
/*
 * DOC: calcola la lingua da mostrare e mostra la prima pagina in quella lingua
 */
  if ( document.getElementById( sIDVarPerVeloce ) && document.getElementById( sIDVarPerVeloce ).firstChild.data == 'NO' ) {
  } else {
    AccessoVeloce( 'NO' );
  }
  var sLinguaDaMostrare = 'it';
  var sLinguaUtente = '';
  if ( navigator.browserLanguage ) {
    sLinguaUtente = navigator.browserLanguage;
  } else {
    sLinguaUtente = navigator.language;
  }
  for( var iIndice = 0; iIndice < aLingua.length; iIndice++ ) {
    if ( sLinguaUtente ==  aLingua[iIndice] ) {
      sLinguaDaMostrare = sLinguaUtente;
    } else {
    }
  }
/*
 * DOC: nascondi la pagina attiva al click se configurato, realizza #colonnanavigazione ul li span :lang(ar) { direction:rtl; } per IE7+
 */
  for( var iPaginaIndice = 0; iPaginaIndice < aPaginaNumero.length; iPaginaIndice++ ) {
    if ( document.getElementById( sIDVarPerNascondiAlClick ) && document.getElementById( sIDVarPerNascondiAlClick ).firstChild.data == 'SI' ) {
      var oPagina = document.getElementById( sIDVarPerPagina + aPaginaNumero[iPaginaIndice] );
      if ( oPagina ) {
        oPagina.onclick = function() { MostraNascondi( aPaginaNumero[0] ); };
      } else {
      }
    } else {
    }
    if ( bIE7plus ) {
      var oElemento = document.getElementById( sNavigazionePrefisso + aPaginaNumero[iPaginaIndice] );
      if ( oElemento ) {
        var aSpan = oElemento.getElementsByTagName('span');
        for ( var iIndice = 0; iIndice < aSpan.length; iIndice++ ) {
          if ( aSpan[iIndice].lang == 'ar' ) {
            aSpan[iIndice].dir = 'rtl';
          } else {
          }
        }
      } else {
      }
    } else {
    }
  }
  MostraNascondi( sLinguaDaMostrare );
  MostraNascondi( aPaginaNumero[0] );
  DimensioneBase ( '' );
/*
 * DOC: se prevista, attiva dissolvenza dal bianco al nero
 */
  if ( document.getElementById( sIDVarPerDissolvenza ) && document.getElementById( sIDVarPerDissolvenza ).firstChild.data == 'SI' ) {
    for( var iIDIndice = 0; iIDIndice < aIDDissolvenzaBiancoNero.length; iIDIndice++ ) {
      inizializzaTemporizzatore( document.getElementById( aIDDissolvenzaBiancoNero[iIDIndice] ), 'text', 'FFFFFF', '000000', 40, 100);
    }
  } else {
  }
/*
 * DOC: se previsto, attiva l'accesso veloce
 */
  if ( document.getElementById( sIDVarPerVeloce ) && document.getElementById( sIDVarPerVeloce ).firstChild.data == 'NO' ) {
  } else {
    AccessoVeloce( 'NO' );
  }
}


function AccessoVeloce( sValoreAttuale ) {
  if ( typeof(sValoreAttuale) == 'undefined' ) {
    sValoreAttuale = document.getElementById( sIDVarPerVeloce ).firstChild.data;
  } else {
  }
  if ( sValoreAttuale == 'NO' ) {
    document.getElementById( sIDVarPerVeloce ).firstChild.data = 'SI';
    document.getElementById( sColonnaAttivaAccessoVeloce ).style.fontWeight = 'normal';
  } else {
    document.getElementById( sIDVarPerVeloce ).firstChild.data = 'NO';
    document.getElementById( sColonnaAttivaAccessoVeloce ).style.fontWeight = 'bold';
  }
}


function DimensioneBase( sPiuOMeno ) {
  var sID = document.getElementById( sIDVarPerDimensioneID ).firstChild.data;
  var oElemento = document.getElementById( document.getElementById( sIDVarPerDimensioneID ).firstChild.data );
  if ( oElemento ) {
  } else {
    alert( "'" + sID + "' non e' la ID di nessun elemento nel documento" );
  }
  var iDimensionePostfissoMinimo = 1;
  var iDimensionePostfissoMassimo = 9;
  var iAddendo = 0;
  var sVecchioPostfisso = document.getElementById( sIDVarPerDimensioneCarattere ).firstChild.data;
  if ( sPiuOMeno == '+' && sVecchioPostfisso < iDimensionePostfissoMassimo ) {
    iAddendo = 1;
  } else if ( sPiuOMeno == '-' && sVecchioPostfisso > iDimensionePostfissoMinimo ) {
    iAddendo = -1;
  } else {
  }
  var iNuovoPostfisso = parseInt(sVecchioPostfisso) + iAddendo;
  ClasseDefinisci( oElemento, sIDVarPerDimensioneCarattere + iNuovoPostfisso );
  document.getElementById( sIDVarPerDimensioneCarattere ).firstChild.data = iNuovoPostfisso;
  return;
}


function MostraNascondiVeloce( sIdentificatore ) {
  if ( document.getElementById( sIDVarPerVeloce ).firstChild.data == 'SI' ) {
    MostraNascondi( sIdentificatore );
  } else {
  }
  return;
}


function MostraNascondi( sIdentificatore ) {
/* 
 * DOC: trasforma 'indietro' e 'avanti' in un numero pagina appropriato
 */
  if ( sIdentificatore == 'indietro' && iPaginaStoria > 0 ) {
    iPaginaStoria--;
    sIdentificatore = aPaginaStoria[ iPaginaStoria ];
    iPaginaStoria--;
  } else if ( sIdentificatore == 'avanti' && iPaginaStoria < (aPaginaStoria.length - 1) ) {
    sIdentificatore = aPaginaStoria[ iPaginaStoria + 1 ];
  } else {
  }
/* 
 * DOC: calcola la pagina (nodo finale) se l'identificatore e' quello di un nodo non finale (presuppone l'uso di '1' per indicare il primo elemento)
 */
  if ( sNavigazioneAdAlbero == 'SI' && parseInt(sIdentificatore) > 0 ) {
    while ( document.getElementById( sNavigazionePrefisso + sIdentificatore + '0' ) ) {
      sIdentificatore = sIdentificatore + '1';
    }
  } else {
  }
/* 
 * DOC: aggiorna la storia e i due elementi var con pagina, lingua, se sono pagine e lingue in elenco
 */
  for( var i = 0; i < aPaginaNumero.length; i++ ) {
    if ( sIdentificatore == aPaginaNumero[i] ) {
      document.getElementById( sIDVarPerPagina ).firstChild.data = sIdentificatore;
      iPaginaStoria++;
      aPaginaStoria[ iPaginaStoria ] = sIdentificatore;
    } else {
    }
  }
  for( var i = 0; i < aLingua.length; i++ ) {
    if ( sIdentificatore == aLingua[i] ) {
      document.getElementById( sIDVarPerLingua ).firstChild.data = sIdentificatore;
    } else {
    }
  }
  var sLinguaDaAttivare = document.getElementById( sIDVarPerLingua ).firstChild.data;
  var sPaginaDaAttivareNumero = document.getElementById( sIDVarPerPagina ).firstChild.data;
  var sNavigazioneDaAttivare = sPaginaDaAttivareNumero;

/*
 * DOC: CANCELLAZIONE/DISATTIVAZIONE NAVIGAZIONE: sulla base delle pagine in elenco
 */

/*
 * DOC: disattiva i nodi finali della navigazione (si trovano tutti tra le pagine in elenco)
 */
  for( var iPaginaIndice = 0; iPaginaIndice < aPaginaNumero.length; iPaginaIndice++ ) {
    var sPagina = aPaginaNumero[iPaginaIndice];
    var oElemento = document.getElementById( sNavigazionePrefisso + sPagina );
    if ( oElemento ) {
      ClasseDefinisci( oElemento, sNavigazioneDisattivataClasse );
    } else {
    }
    if ( sNavigazioneAdAlbero === 'SI' ) {
/*
 * DOC: disattiva (piu' di una volta, anche se non necessario) tutti i nodi non finali della navigazione, se ad albero (si trovano tutti come parti delle pagine in elenco)
 */
      for( var iLivello = sPagina.length - 1; iLivello > 0; iLivello-- ) {
        var sNodoNonFinale = sPagina.substr(0, iLivello);
        var oElemento = document.getElementById( sNavigazionePrefisso + sNodoNonFinale + '' );
        if ( oElemento ) {
          ClasseDefinisci( oElemento, sNavigazioneCategoriaDisattivataClasse );
        } else {
        }
/*
 * DOC: nascondi (piu' di una volta, anche se non necessario) tutte le righe della navigazione, se ad albero, a parte la prima 
 */
        var oElemento = document.getElementById( sNavigazionePrefisso + sNodoNonFinale + '0');
        if ( oElemento ) {
          ClasseDefinisci( oElemento, sInvisibileClasse );
        } else {
        }
      }
    } else {
    }
  }
/*
 * DOC: attiva il punto navigazione giusto
 */
  var oElemento = document.getElementById( sNavigazionePrefisso + sPaginaDaAttivareNumero );
  if ( oElemento ) {
    ClasseDefinisci( oElemento, sNavigazioneAttivataClasse );
  } else {
  }
/*
 * DOC: attiva i nodi non finali giusti e mostra le righe '0' giuste, se navigazione ad albero
 */
  if ( sNavigazioneAdAlbero == 'SI' ) {
      for( var iLivello = sPaginaDaAttivareNumero.length - 1; iLivello > 0; iLivello-- ) {
        var sNodoNonFinale = sPaginaDaAttivareNumero.substr(0, iLivello);
        var oElemento = document.getElementById( sNavigazionePrefisso + sNodoNonFinale + '' );
        if ( oElemento ) {
          ClasseDefinisci( oElemento, sNavigazioneCategoriaAttivataClasse );
        } else {
        }
        var oElemento = document.getElementById( sNavigazionePrefisso + sNodoNonFinale + '0');
        if ( oElemento ) {
          ClasseDefinisci( oElemento, sVisibileRigaClasse );
        } else {
        }
      }
  } else {
  }

/*
 * DOC: attiva la lingua giusta
 */
  var aElementiETipi = new Array ( 'span', 'inline', 'div', 'block', 'p', 'block', 'h1', 'block', 'h2', 'block' );
  for ( var j = 0; j < aElementiETipi.length; j += 2 ) {
    var sElementoNome = aElementiETipi[j];
    var sTipo = aElementiETipi[j + 1];
    for ( var i = 0; i < document.getElementsByTagName(sElementoNome).length; i++ ) {
      var oElemento = document.getElementsByTagName(sElementoNome)[i];
/*
 * DOC: .lang sembra essere definito per ogni elemento (di base ha il valore '') quindi si e' rinunciato al controllo della sua definizione
 */
      if ( oElemento.lang == '' ) {
      } else {
        if ( oElemento.lang == sLinguaDaAttivare ) {
          oElemento.style.display = sTipo;
          if ( sLinguaDaAttivare == 'ar' && sElementoNome == 'div' ) {
//            oElemento.dir = 'rtl';
          } else {
//            oElemento.dir = 'ltr';
          }
        } else {
          oElemento.style.display = 'none';
        }
      }
    }
  }
/*
 * DOC: disattiva tutte le sottopagine (il che implica block) in elenco
 */

  for( var i = 0; i < aSottopaginaNumero.length; i++ ) {
    var oElemento = document.getElementById( sSottopaginaPrefisso + aSottopaginaNumero[i] );
    if ( oElemento ) {
      oElemento.style.display = 'none';
    } else {
    }
  }
/*
 * DOC: attiva la pagina giusta (il che implica block)
 */
  for( var i = 0; i < aPaginaNumero.length; i++ ) {
    var oElemento = document.getElementById( sPaginaPrefisso + aPaginaNumero[i] );
    if ( oElemento ) {
      if ( aPaginaNumero[i] == sPaginaDaAttivareNumero ) {
        oElemento.style.display = 'block';
        var aSottopaginaNumero2 = oCorrispondenzaPaginaSottopagina[sPaginaDaAttivareNumero];
        if ( aSottopaginaNumero2 ) {
          for ( var j = 0; j < aSottopaginaNumero2.length; j++ ) {
            var oElemento2 = document.getElementById( sSottopaginaPrefisso + aSottopaginaNumero2[j] );
            if ( oElemento2 ) {
              oElemento2.style.display = 'block';
            } else {
            }
          }
        } else {
        }
      } else {
        oElemento.style.display = 'none';
      }
    } else {
    }
  }  
}


// main function to process the fade request //

/*
 * DOC: jedes HTML Element Objekt enthält als Eingenschaft ein Objket timer
 * DOC: das DOM besizt die Methoden clearInterval( Objekt des Typs ??? timer) und setInterval( Funktionsreferenz, Zahlms ??? )
 * DOC: die Deklaration function() {} liefert eine Funktionsreferenz zurück
 * DOC: var dekariert ohne Angabe von Typ (z.B. endrgb ist ein vom Objekt-Typ Array inmitten von Zahlen )
 * DOC: soll ein Objekt eine neue Eigenschaft erhalten? einfach zuweisen oObjekt.sEigenschaft = sZeile.
 * DOC: gilt oObjekt.aEigenschaft = aWerte ???
 * DOC: was soll das denn: b = b - bint; aber b = parseInt(b) + parseInt(bint);   ???
 * DOC: 
 */

function inizializzaTemporizzatore( oElemento, sAttributo, sDiPartenzaColore, sDiArrivoColore, iNumeroColoriIntermedi, iIntervalloMS ) {

  var er, eg, eb, step, rint, gint, bint;
/*
 * DOC: inizializza elemento HTML: temporizzatore (timer)
 */
  clearInterval( oElemento.timer );

/*
 * DOC: inizializza elemento HTML: valori colore di partenza
 */

/* 15.34 02/03/2009
  if( !oElemento.r ) {
*/
    var aColore = colorConv( sDiPartenzaColore );
    r = aColore[0];
    g = aColore[1];
    b = aColore[2];
    oElemento.r = r;
    oElemento.g = g;
    oElemento.b = b;
    oElemento
/* 15.34 02/03/2009
  }
*/

/*
 * DOC: inizializza elemento HTML: numero dei colori intermedi mostrati
 */
  oElemento.iNumeroColoriIntermediMostrati = 0;

/*
 * DOC: inizializza elemento HTML: valori colore di partenza
 */
  iNumeroColoriIntermedi = iNumeroColoriIntermedi || 40;
  var aColore = colorConv( sDiArrivoColore );
  er = aColore[0];
  eg = aColore[1];
  eb = aColore[2];
  rint = Math.round( 1 + Math.abs( oElemento.r - er)/iNumeroColoriIntermedi );
  gint = Math.round( 1 + Math.abs( oElemento.g - eg)/iNumeroColoriIntermedi );
  bint = Math.round( 1 + Math.abs( oElemento.b - eb)/iNumeroColoriIntermedi );

/* 14.30 02/03/2009
  if(rint == 0) { rint = 1 }
  if(gint == 0) { gint = 1 }
  if(bint == 0) { bint = 1 }

*/
  iIntervalloMS = iIntervalloMS || 20;
  var aElementiA = oElemento.getElementsByTagName('a');
  if ( aElementiA.length > 0 ) {
    for( var iIndice = 0; iIndice < aElementiA.length; iIndice++ ) {
      aElementiA[iIndice].timer = setInterval( function() { animateColor(oElemento, sAttributo, iNumeroColoriIntermedi, er, eg, eb, rint, gint, bint) }, iIntervalloMS);
    }
  } else {
  }
  oElemento.timer = setInterval( function() { animateColor(oElemento, sAttributo, iNumeroColoriIntermedi, er, eg, eb, rint, gint, bint) }, iIntervalloMS);
}

function animateColor( oElemento, sAttributo, iNumeroColoriIntermedi, er, eg, eb, rint, gint, bint ) {

  var color;
  if( oElemento.iNumeroColoriIntermediMostrati <= iNumeroColoriIntermedi ) {
    var r = oElemento.r;
    var g = oElemento.g;
    var b = oElemento.b;
    if(r >= er) {
      r = r - rint;
    } else {
      r = parseInt(r) + parseInt(rint);
    }
    if(g >= eg) {
      g = g - gint;
    } else {
      g = parseInt(g) + parseInt(gint);
    }
    if(b >= eb) {
      b = b - bint;
    } else {
      b = parseInt(b) + parseInt(bint);
    }
    color = 'rgb(' + r + ',' + g + ',' + b + ')';
    if(sAttributo == 'background') {
      oElemento.style.backgroundColor = color;
    } else if(sAttributo == 'border') {
      oElemento.style.borderColor = color;
    } else {
      oElemento.style.color = color;
    }
    oElemento.r = r;
    oElemento.g = g;
    oElemento.b = b;
    oElemento.iNumeroColoriIntermediMostrati = oElemento.iNumeroColoriIntermediMostrati + 1;
  } else {
    clearInterval(oElemento.timer);
    color = 'rgb(' + er + ',' + eg + ',' + eb + ')';
    if(sAttributo == 'background') {
      oElemento.style.backgroundColor = color;
    } else if(sAttributo == 'border') {
      oElemento.style.borderColor = color;
    } else {
      oElemento.style.color = color;
    }
  }
}

function colorConv( color ) {
  var rgb = [
   parseInt( color.substring(0, 2), 16 ),
   parseInt( color.substring(2, 4), 16 ),
   parseInt( color.substring(4, 6), 16 )
  ];
  return rgb;
}



function ClasseDefinisci ( oElemento, sClasseNome ) {
  if ( oElemento ) {
    oElemento.className = sClasseNome;
    return( true );
  } else {
    return( false );
  }
}


function ClasseAggiungi ( oElemento, sClasseNome ) {
  if ( oElemento ) {
    if ( typeof(oElemento.className) == 'string' ) {
      var oRE = new RegExp ( '\\b' + sClasseNome + '\\b', '');
      if ( oElemento.className.match( oRE ) ) {
      } else {
        oElemento.className += ' ' + sClasseNome;
      }
      oElemento.className.replace( /^ +/, '' );
      oElemento.className.replace( / +$/, '' );
      oElemento.className.replace( / +/,  ' ' );
    } else {
      oElemento.className = sClasseNome;
    }
    return( true );
  } else {
    return( false );
  }
}


function ClasseTogli ( oElemento, sClasseNome ) {
  if ( oElemento ) {
    if ( typeof(oElemento.className) == 'string' ) {
      var aClasseNomi = oElemento.className.split(' ');
      var aClasseNomiNuovo = new Array('');
      var iIndiceNuovo = 0;
      for ( var iIndice in aClasseNomi ) {
        if ( aClasseNomi[iIndice] == sClasseNome ) {
        } else {
          aClasseNomiNuovo[iIndiceNuovo++] = aClasseNomi[iIndice];
        }
      }
    } else {
      return( false );
    }
    oElemento.className = aClasseNomiNuovo.join(' ');
    return( true );
  } else {
    return( false );
  }
}

