// ==UserScript==
// @name           Visualizza Cartellino Orari RAI.
// @author         http://www.gollumone.it/category/scripts/greasemonkey
// @namespace      http://www.gollumone.it/visualizza_orari.html
// @version        1.0
// @description    Permette di visualizzare anche in FF e in modo più diretto le pagine del cartellino orari della RAI.
// @include        http://wiahrss.servizi.rai.it/Timbratura/gof07.asp*

// Funzione per "iniettare" lo script nella pagina, in modo che lo scope delle variabili sia comune.
if ('undefined' == typeof __PAGE_SCOPE_RUN__) {
   (function page_scope_runner() {
      // If we're _not_ already running in the page, grab the full source
      // of this script.
      var my_src = "(" + page_scope_runner.caller.toString() + ")();";

      // Create a script node holding this script, plus a marker that lets us
      // know we are running in the page scope (not the Greasemonkey sandbox).
      // Note that we are intentionally *not* scope-wrapping here.
      var script = document.createElement('script');
      script.setAttribute("type", "application/javascript");
      script.setAttribute("src", "data:,"+escape("var __PAGE_SCOPE_RUN__ = true;\n" + my_src));

      // Insert the script node into the page, so it will run, and immediately
      // remove it to clean up.  Use setTimeout to force execution "outside" of
      // the user script scope completely.
      setTimeout(function() {
         document.body.appendChild(script);
         document.body.removeChild(script);
      }, 0);
   })();

   // Stop running, because we know Greasemonkey actually runs us in
   // an anonymous wrapper.
   return;
}

// Elimino di div per i pulsanti di spostamento.
var lista_div = document.getElementsByTagName("div");
to_delete=lista_div.item(0).parentNode.parentNode;
to_delete.parentNode.removeChild(to_delete);

// Prelevo mese e anno e converto il mese a 3 caratteri.
var lista_table = document.getElementsByTagName("table");
var lista_tr = lista_table[1].getElementsByTagName("tr");
var lista_td = lista_tr[1].getElementsByTagName("td");

Stringa = lista_td[1].firstChild.data;
Anno = Stringa.substr(Stringa.length-4,4);
Mese = Stringa.substr(14, 3);

// Ridimensiono le table generali e setto la presenza delle righe di divisione.
for(i=0; i<=2; i++){
   lista_table[i].width = "1200";
}

// dilatare a 2 colonne la cella con la scritta "giorno"
var lista_td = lista_table[2].getElementsByTagName("td");
lista_td[0].setAttribute('colspan',"2")

// modificare la digitura "rilevazione numero" in "Rilevazione Badge".
lista_td[3].childNodes[1].childNodes[1].childNodes[0].childNodes[1].childNodes[0].childNodes[0].nodeValue = "Rilevazione Badge";

// dilatare a 16 colonne la cella con la scritta "Rilevazione Badge".
lista_td[3].setAttribute('colspan',"16")

// aggiungere 7 copie di celle "Entra" - "Esce"
var lista_tr = lista_table[2].getElementsByTagName("tr");
for (i=1; i<8; i++){
   entra = lista_td[5].cloneNode(true);
   esce  = lista_td[6].cloneNode(true);
   lista_tr[2].appendChild(entra);
   lista_tr[2].appendChild(esce);
}

// Ciclo di operazioni da ripetere per ogni giorno.
for (i=3; i<lista_tr.length; i++){
   var lista_td = lista_tr[i].getElementsByTagName("td");

   // aggiungere una cella in testa e inserire l'indicazione del giorno della settimana
   giorno_1 = lista_td[0].cloneNode(true);
   lista_tr[i].insertBefore(giorno_1,lista_td[0]);
   lista_td[1].childNodes[0].nodeValue = lista_td[1].childNodes[0].nodeValue.substr(lista_td[1].childNodes[0].nodeValue.length-2, 2);

   // sostituire il contenuto della cella del giorno originale con la data nel formato "dd mmm aaaa".
   lista_td[0].childNodes[0].nodeValue = (lista_td[0].childNodes[0].nodeValue.substr(0, 3))+Mese+" "+Anno;

   // Eliminare le celle degli orari originali (togliere i riferimenti a javascript).
   lista_tr[i].removeChild(lista_td[lista_td.length-1]);
   lista_tr[i].removeChild(lista_td[lista_td.length-1]);
   if (i == lista_tr.length-1){
      lista_tr[i].removeChild(lista_td[lista_td.length-1]);
   }

   var item = window["arr"+(i-2)];
   // Aggiungere 16 celle, inserendo in ognuna l'orario preso dall'array arrN[cella] - N indica il numero del giorno).
   for(j=0; j<=item.length-1; j++){
      var NuovaCella = document.createElement('td');
      var ContenutoCella = document.createTextNode(item[j]);
      NuovaCella.setAttribute('bgcolor','#ffffff');
      NuovaCella.setAttribute('align','center');
      NuovaCella.appendChild(ContenutoCella);
      lista_tr[i].appendChild(NuovaCella);
   }
}
// ==/UserScript==
