//  *****************************************************************************
//  * applicazione web : BUSSOLA
//  *           modulo :    
//  *        nome file : CREA_DESKTOP.JS
//  * contenuto:
//  * elementi software per la predisposizione della pagina dei servizi offerti 
//  *
//  * data ultimo aggiornamento: 08/11/2007 11.59 (ex 25/10/2005 17.21
//  *****************************************************************************
//
// Conveniamo denominare il costruttore e il relativo Array con lo stesso nome,
// eccetto per il fatto che il nome del costruttore è singolare, quello dell'Array plurale. 
//
  var myConfig = new Array();
  var AreeUte = new Array();
  var desktop_title = "Servizi offerti&Services";
// 
  var totlsub = 0; //totale num. di link con sottoservizi 
  var curlsub = 0; //current link con sottoservizi
  var stack = 100; //variabile che regola lo "stacking" dei menu a tendina l'uno rispetto all'altro
                   //si opta per la sua inizializzazione con un valore piuttosto elevato al fine di 
                   //assicurare l'eventuale presenza di numerosi menu in futuro.
// var myDocument = parent.desktop.document;
//
//                             :::::::::::::::::::::::::
// 
// costruttore dell'oggetto AreaUte
//
 function AreaUte(sig, des)
 {
  this.sig = sig;                    // sigla identificativa
  this.des = des;                    // descrizione (è una stringa)
// test provvisorio
  if (sig == 'LAU') 
   { this.img = "au_"+sig+".gif";  }      // nome immagine
  else
    { this.img = "au_"+sig+".jpg";  }      // nome immagine
  this.TipiSer = new Array();        // lista tipi servizio
  this.show =AreaUte_show;           // metodo per il disegno dell'oggetto
/*	
  alert("sono in AreaUte : ho creato una nuova istanza" 
       +"\nsig="+this.sig
       +"\ndes="+this.des
       +"\nTipiSer.length="+this.TipiSer.length
        );
*/   
 }
//                             :::::::::::::::::::::::::
//
// metodo dell'oggetto AreaUte
// disegna l'oggetto rappresentandolo come un riquadro contenente i riquadri dei Tipi Servizio
// appartenenti 
//
 function AreaUte_show(mydocument)
 {
    with(mydocument)
  {
   apg =  '<!-- -------------------------- inizio riquadro AreaUte '+this.des+'-------------------->\n';
   apg += '<TABLE width="100%" BORDER="0" >'; // tabella esterna riquadro AreaUte : inizio
   apg += '<!--riquadro AreaUte "'+this.des+'" : riga tabella di identificazione Area Utente   -->\n'; 
   apg += ' <TR>\n';  // tabella esterna riquadro AreaUte : inizio 1° riga - contiene titolo AreaUte 
   apg += '  <TD>\n'; 
   apg += '   <Table width="100%" BORDER="0" cellpadding=0 cellspacing="0">\n';  // INIZIO TAB DEL TIT. AREAUTE 
   apg += '    <Tr>\n';  //******************
   apg += '     <Td width="5%" valign="bottom">\n'; 
   apg += '     <img src="'+$IMGDIR+this.img+'" alt="'+this.des+'" width="33" height="28" border=0 align="center" valign="bottom">\n';  
   apg += '     </Td>\n'; 
   apg += '     <Td width="2%" valign="bottom">\n'; 
   apg += '       &nbsp;&nbsp;\n';  
   apg += '     </Td>\n'; 
   apg += '     <Td width="20%" valign="bottom">\n'; 
   apg += '      <table width="100%" height="20" border="0"  cellpadding=0 cellspacing=0 >\n'; 
   apg += '       <tr><td class="au_title" noWrap >&nbsp;&nbsp;'+this.des+' &nbsp;&nbsp;</td></tr>\n'; 
   apg += '      </table>\n'; 
   apg += '     </Td>\n';      		 
   apg += '     <Td width="73%" valign="bottom">\n'; 
   apg += '      <table width="100%" height="5" border="0"  cellpadding=0 cellspacing=0 >\n'; 
   apg += '       <tr><td class="linea" >&nbsp;</td></tr>\n'; 
   apg += '      </table>\n'; 
   apg += '     </Td>\n'; 		 
   apg += '    </Tr>\n';  
   apg += '   </Table>\n';                                                      // FINE TAB DEL TIT. AREAUTE
   apg += '  </TD>\n'; 
   apg += ' </TR>\n';  // tabella esterna riquadro AreaUte : fine 1° riga
   write (apg); 
   apg = '<!-- riquadro AreaUte "+this.des+" : riga tabella  riquadri Tipi Servizio  -->\n'; 
   apg += ' <TR>\n'; // tabella esterna riquadro AreaUte : inizio 2° riga - contiene tabella riquadri dei TipiSer
   apg += '  <TD>\n';
   
//^^^^^^^^^^^^^^COSTRUZIONE RIQUADRI DEI TIPI SERVIZI ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//

   apg += '   <Table  align=left cellspacing=0 cellpadding=10 border=0 >\n';
   apg += '    <Tr>\n';	
   write (apg); 	
   var l; 		
   for (l=0;l<this.TipiSer.length;l++) 
   {
     writeln ('     <Td VALIGN="TOP">');  		    
     this.TipiSer[l].show(mydocument); 
     writeln ('     </Td>');	       
   }	
   writeln ('    </Tr>');			
   writeln ('   </Table>')
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//
   writeln ('  </TD>'); 
   writeln ('    </TR>');  // tabella esterna riquadro AreaUte : fine 2° riga 
   writeln ('</TABLE>');// tabella esterna riquadro AreaUte : fine
   writeln("<!-- -------------------------- fine riquadro AreaUte "+this.des+"-------------------->");
  }
 }
//                             ::::::::::::::::::::::::: 
// 
// costruttore dell'oggetto TipoSer 
// 
 function TipoSer (p_sig, p_des)
 {
  this.sig = p_sig;                 // sigla 
  this.des = p_des;                 // titolo 
  this.Servizi = new Array();       // array dei Servizi
  this.show = TipoSer_show;         // metodo per il disegno dell'oggetto

/*	
  alert("sono in TipoSer : ho creato una nuova istanza" 
       +"\n sig="+this.sig 
       +"\ndes="+this.des 
       +"\nthis.Servizi.length="+this.Servizi.length 
        );
*/   
 }
//                             ::::::::::::::::::::::::: 
//
// metodo dell'oggetto TipoSer  
// disegna l'oggetto rappresentandolo come una tabella a sfondo grigio chiaro dagli angoli smussati 
// contenente l'elenco dei servizi appartenenti
//
 function TipoSer_show(mydocument)
 {
  with(mydocument)
  { 		 
   writeln("<!-- ----inizio riquadro TipoSer "+this.des+"-------->");
   writeln ('        <TABLE  CELLSPACING=0 CELLPADDING=0 BORDER=0 >');
   writeln ('        <TR>'); // tabella esterna riquadro TipoSer : inizio 1° riga  - contiene titolo di TipoSer
   writeln ('         <TD>');
   writeln ('           <table WIDTH="100%" CELLSPACING=0 CELLPADDING=0 BORDER=0>'); 
   writeln ('           <tr class="TipoSer_body" HEIGHT="13">');
   writeln ('            <td valign=top background="'+$IMGDIR+'bg_griven.gif" WIDTH="22" HEIGHT="13"><IMAGE BORDER=0 WIDTH="22" HEIGHT="13" SRC="'+$IMGDIR+'cornerSX.gif"></td>');
   writeln ('            <td CLASS="TipoSer_title" nowrap ALIGN="CENTER" height="13">&nbsp;&nbsp;'+this.des+'&nbsp;&nbsp;</td>');
   writeln ('            <td ALIGN="right"> <IMAGE BORDER=0 WIDTH="22" HEIGHT="13" SRC="'+$IMGDIR+'cornerDX.gif"></td>');
   writeln ('           </tr>');
   writeln ('           </table>');
   writeln ('         </TD>');	
   writeln ('        </TR>'); // tabella esterna riquadro TipoSer : fine 1° riga   
   writeln ('        <TR>');  // tabella esterna riquadro TipoSer : inizio 2° riga  - contiene tabella Servizi	
   writeln ('         <TD CELLSPACING=0 CELLPADDING=0 bgcolor="#F7F5EA">');	
   writeln ('          <table WIDTH="100%" CELLSPACING=0 CELLPADDING=0 BORDER=0 >');
   writeln ('          <tr class="TipoSer_body">'); //  tabella Servizi : inizio 1° riga - contiene linea
   writeln ('           <td  ALIGN=RIGHT bgcolor="#F7F5EA"><SPAN>&nbsp;</SPAN></td>');
   writeln ('           <td  nowrap border=0 >');
   writeln ('           <hr align="center" width="90%" color="#778899" >');	
   writeln ('           </td>');
   writeln ('           <td ALIGN=RIGHT><SPAN>&nbsp;&nbsp;</SPAN></td>');
   writeln ('          </tr>'); 
   writeln ('          <UL TYPE="square">');
   var m; 
//			
   for (m=0;m<this.Servizi.length;m++) 
    {  
      this.Servizi[m].show(mydocument); 
    }           	  
   writeln ('          </UL>');		                                 
   writeln ('          </table>');	            
   writeln ('         </TD>');       
   writeln ('        </TR>'); // tabella esterna riquadro TipoSer : fine 2° riga 
   writeln ('        </TABLE>');
   writeln("<!-- ----fine riquadro TipoSer "+this.des+"-------->");	        
       } 
 }
//                             ::::::::::::::::::::::::: 
// 
// costruttore dell'oggetto Servizio
//
 function Servizio(sig, des, linkass, target, indgest)
 {  
	  this.sig = sig;              // sigla identificativa
	  this.des = des;              // descrizione  
	  this.linkass = linkass;      // link associato
	  this.target = target;        // target link associato
	  this.indgest = indgest;      // indicatore di gestione di sottoservizi del Servizio
	  this.SubServizi = new Array();//array delle sigle identificative dei Sotto Servizi	  
	  this.show = Servizio_show;    // metodo per il disegno dell'oggetto

/*	
  alert("sono in Servizio :  ho creato una nuova istanza "
       +"\nsig="+this.sig 
       +"\ndes="+this.des 
       +"\nlinkass="+this.linkass
       +"\nindgest="+this.indgest        
        );
*/ 
 }
//                             ::::::::::::::::::::::::: 
//
// metodo dell'oggetto Servizio  
// disegna l'oggetto rappresentandolo come una voce di un elenco
// cui è associato un link oppure un menu a tendina
//  
 function Servizio_show(mydocument)
 {
  with(mydocument)
  {      	
   writeln ('          <tr class="TipoSer_body">'); // inizio m° riga tabella Servizi - contiene Servizio emmesimo
   writeln ('          <td ALIGN=RIGHT height="22"><SPAN>&nbsp;</SPAN></td>');
   writeln ('          <td nowrap class="Servizio_voci">');
   writeln ('          <LI TYPE="square">');
//   
// Test sull'indicatore di tipologia del servizio (S= articolato in sottoservizi)  
   if (this.indgest != 'S')
   {
    writeln ('<A HREF="'+this.linkass+'" TARGET="'+this.target+'" onMouseOver="window.status=\''+this.des+'\';return true"  onMouseOut="window.status=\' \';return true" >'+this.des+'</A>');
   }
   else if (this.indgest == 'S')
   { 
    writeln ('	<div id="divTopMenu'+curlsub+'" class="clTopMenu" STYLE="z-index:'+(stack-1)+'">');
//    writeln ('	<a href="#" onmouseover="menuOver('+curlsub+');window.status=\''+this.des+'\';return true"');
//    writeln ('  onmouseout="menuOut('+curlsub+');window.status=\' \';return true" onclick="topMenu('+curlsub+');if(ie)this.focus();rollImage('+curlsub+');return true;"> '); 
    writeln ('	<a href="#" onmouseover="menuOver('+curlsub+');"');
    writeln ('  onmouseout="menuOut('+curlsub+');" onclick="topMenu('+curlsub+');if(ie)this.focus();rollImage('+curlsub+');return true;"> '); 
    writeln ('	<img name="coll'+curlsub+'" SRC="'+$IMGDIR+'mnuDown.gif" BORDER="0">'+this.des+ '</a>');
    writeln ('	<div id="divTopMenuText'+curlsub+'" class="clTopMenuText">');     
    var u; 			
    for (u=0; u<(this.SubServizi.length)-1; u++) 
     {  
     this.SubServizi[u].show(mydocument); 
     } 
   
    writeln ('	</div> ');
    writeln ('	<div id="divTopMenuBottom'+curlsub+'" class="clTopMenuBottom"></div>');
    writeln ('	</div> ');
    stack --;     
    curlsub ++;    

    } 
   writeln ('   </LI></td>');
   writeln ('   <td ALIGN=RIGHT><SPAN>&nbsp;</SPAN></td>');
   writeln ('   </tr>');    
  } 
 }
//                             :::::::::::::::::::::::::
//
// costruttore dell'oggetto SubServizio
//
 function SubServizio (sig,des,target,linkass)
 {
  this.sig = sig;                    // sigla identificativa dell'Ateneo
  this.des = des;                    // descrizione
  this.target = target;              // target link associato 
  this.linkass = linkass;            // link associato ad ogni singola voce del menu a tendina
  this.show = SubServizio_show;      // metodo di disegno dell'oggetto SubServizio
  
/*	
  alert("sono in SubServizio:"
       +"\nsig="+this.sig 
       +"\ndes="+this.des 
       +"\ntarget="+this.target
       +"\nlinkass="+this.linkass       
        );
*/  
 }
//                             :::::::::::::::::::::::::
//
// metodo dell'oggetto SubServizio 
// mostra le singole voci costituenti i subservizi
// 
 function SubServizio_show (mydocument)
 {
  with(mydocument)
  {
/*	
  alert("sono nel metodo show  di SubServizio:"
       +"\nsig="+this.sig 
       +"\ndes="+this.des 
       +"\nSubServizi="+this.SubServizi 
       +"\nlinkass="+this.linkass       
        );
*/
        this.des = pickLan(this.des,parent.p_lan) 
//alert("ndes="+this.des);          
        writeln ('<a HREF="'+this.linkass+'" target="'+this.target+'" onMouseOver="window.status=\''+this.des+'\';return true"  onMouseOut="window.status=\' \';return true">'+ this.des +'</a><br>'); 
//alert("this.des="+this.des);  
  }
 }
//                             :::::::::::::::::::::::::
//
// popola la tabella di configurazione dei servizi (myConfig)
// selezionando, ed eventualmente elaborando, 
// i dati letti dall'array generale di configurazione servizi (genConfig)
// in base ai parametri "profilo utente","progetto","ateneo","lingua" e "ambiente" forniti 
// l'array myConfig è un array bidimensionale 
//                      
 function sel_obj (p_ute,p_uni,p_pro,p_lan)
 {
/*
  alert("sono in sel_obj"
       +"\np_ute="+p_ute 
       +"\np_uni="+p_uni
       +"\np_pro="+p_pro
       +"\np_lan="+p_lan
       +"\np_env="+p_env
       );
*/ 
  var j=0;
  var whichUni = '';
  var whichPro = '';
  var whichUte = '';
  var x =0;
  var y =0;
  var z =0;
  myConfig.length = 0;                    //l'array va inizializzato in quanto variabile globale
  x = genConfig[0].lastIndexOf("#")+1;      // individua la posizione d'inizio stringa atenei
  y = genConfig[0].lastIndexOf("#",x-2)+1;  // individua la posizione d'inizio stringa profili utente
  z = genConfig[0].lastIndexOf("#",y-2)+1;  // individua la posizione d'inizio stringa progetti
  var myUni = new Array();
  var mysysConfig = new Array();
//--------------------
// predisposizione array di lavoro mysysConfig da usare per sistemare la stringa del campo 
// "atenei idonei"  in base al parametro progetto
  if (p_pro != 'all' )
     {
      for(kk=0; kk<sysConfig.length; kk++)
        { if (sysConfig[kk].substr(0,3) == p_pro)
             {
               mysysConfig = sysConfig[kk].split("#");
//               alert('mysysConfig.length='+mysysConfig.length+'***'+mysysConfig[3]);
               break;
             } 
        } 
     }
//---------------------                 
//  
  for (i=0; i < genConfig.length; i++) 
  { 
    whichUni = genConfig[i].substr(x);          //si isola la porzione di stringa degli atenei
    whichUte = genConfig[i].substr(y,(x-y-1));  //si isola la porzione di stringa dei profili utente 
    whichPro = genConfig[i].substr(z,(y-z-1));  //si isola la porzione di stringa dei progetti
//    
//  viene sistemata la stringa del campo "atenei idonei"  in base al parametro progetto
//  (filtro per escludere dalla lista di partenza degli atenei gli atenei che non appartengono
//   al progetto) 
//
   if (p_pro != 'all') 
      {  myUni = whichUni.split(";"); 
         for(mm=0; mm<(myUni.length-2); mm++) // non si considera l'ultimo elemento che è all
         { 
          if ((mysysConfig[3].indexOf(myUni[mm]) == -1)&&( myUni[mm]!='   '))
             {	myUni[mm]='   '; }
         }
         whichUni= myUni.join(";");
      }
//
// viene ora applicato il filtro 
    if ( ( whichUni.lastIndexOf(p_uni) != -1 ) &&
         ( whichPro.lastIndexOf(p_pro) != -1 ) &&     
         ( whichUte.lastIndexOf(p_ute) != -1 )  
       )               
    {
     myConfig[j] = genConfig[i].split("#");
     myConfig[j][9]=whichUni;
/*     
   alert ("myConfig[j]="+myConfig[j]);  
*/
//==========================================================================================         
// 
// viene sistemata la stringa del campo "descrizione oggetto" in base al parametro lingua
//
     myConfig[j][3] = pickLan(myConfig[j][3],p_lan);
//==========================================================================================    
//    
// se la riga corrente è relativa a un servizio viene elaborata la stringa del campo "url 
// del servizio" per generare la stringa  dell'URL effettivo 
// viene elaborata anche la stringa del campo "Target URL associato al servizio"
//
     if ( myConfig[j][2] != '  ')
     {  myConfig[j][4]= strReplace(myConfig[j][4],"$HOST",$HOST);
       
        if (p_uni != 'all')  
         { myConfig[j][4]= strReplace(myConfig[j][4],"$UNI",p_uni.toLowerCase());
           myConfig[j][4]= strReplace(myConfig[j][4],"$UDM",demoConfig[p_uni]);
           myConfig[j][5]= strReplace(myConfig[j][5],"$UNI",p_uni.toLowerCase());
           myConfig[j][5]= strReplace(myConfig[j][5],"$UDM",demoConfig[p_uni]);
         }
        else if (myConfig[j][6] == 'W')
              { myConfig[j][4]= strReplace(myConfig[j][4],"$UNI",p_uni); }

        if (myConfig[j][6] == 'W' || myConfig[j][4].indexOf('/info/$LAN/') !=-1 ) 
         { myConfig[j][4]= strReplace(myConfig[j][4],"$LAN",p_lan.toUpperCase()); 
          }    
        else if (p_lan != 'IT' )  
         { myConfig[j][4]= strReplace(myConfig[j][4],"$LAN","/"+p_lan.toLowerCase()); } 
           else
          { myConfig[j][4]= strReplace(myConfig[j][4],"$LAN",""); } 
     }
//==========================================================================================       
     j++;
    }                 
  }                  
/* 
   alert("Sono in sel_obj"
        +"\ngenConfig.length = "+genConfig.length
        +"\nmyConfig.length = "+myConfig.length
        );
*/     
 }
//                             :::::::::::::::::::::::::
//
// istanzia gli oggetti AreaUte, TipoSer , Servizio e SubServizio
// in base ai contenuti della tabella di configurazione servizi personalizzata (myConfig)
// l'oggetto AreaUte incapsula l'oggetto TipoSer che a sua volta incapsula l'oggetto Servizio
// che a sua volta incapsula l'oggetto SubServizio
// le istanze dell'oggetto AreaUte vengono registrate nell'array AreeUte
//                       
 function load_obj (p_uni)
 { 
  totlsub = 0;
  var i=0;
  var j=0; 
  var k=0; 
  var q=0; 
  var i1=0; //indice che viene incrementato quando creo l'istanza
  var j1=0; //indice che viene incrementato quando creo l'istanza
  var k1=0; //indice che viene incrementato quando creo l'istanza
  var l1=0; //indice che viene incrementato quando creo l'istanza
  var apgUrl ="";
  var apgTarget ="";
  
  AreeUte.length = 0;   //l'array va inizializzato in quanto variabile globale
//  
// ciclo sulle aree utente
// ad ogni passo dell'iterazione rende corrente una riga di dichiarazione di un'area utente
// e ne istanzia l'oggetto corrispondente
// indice di posizionamento sulla riga di tabella myConfig in cui si dichiara un'area utente : i
//
  while (i < myConfig.length && myConfig[i][1] == ' ' && myConfig[i][2] == '  ') 
  {     
//    alert('LIV 1 '+ myConfig[i][0]+myConfig[i][3]);
    AreeUte[i1] = new AreaUte(myConfig[i][0],myConfig[i][3]);
    j = i+1;
    j1 = 0;
    k = j;
//
// ciclo sui tipi servizio dell'area corrente
// ad ogni passo dell'iterazione rende corrente una riga di dichiarazione di un tipo servizio 
// e ne istanzia l'oggetto corrispondente assegnandolo come elemento dell'array dei tipi servizio
// dell'oggetto AreaUte corrente, previo controllo della corretta appartenenza 
// indice di posizionamento sulla riga di tabella myConfig in cui si dichiara un tipo servizio : j 
// 
    while (j < myConfig.length && myConfig[j][0] == myConfig[i][0] && myConfig[j][2] == '  ')
    { AreeUte[i1].TipiSer[j1] = new TipoSer(myConfig[j][1],myConfig[j][3]);
//      alert('LIV 2'+ myConfig[j][1]+myConfig[j][3]); 
      k++;
      k1 = 0;
      l1 = 0;
//
// ciclo sui servizi del tipo servizio corrente dell'area corrente
// ad ogni passo dell'iterazione rende corrente una riga di dichiarazione di un servizio 
// e ne istanzia l'oggetto corrispondente assegnandolo come elemento dell'array dei servizi 
// dell'oggetto TipoSer corrente dell'AreaUte corrente, previo controllo della corretta appartenenza 
// indice di posizionamento sulla riga di tabella myConfig in cui si dichiara un servizio : k 
//          
      while (k < myConfig.length &&  myConfig[k][0] == myConfig[i][0] && myConfig[k][1] == myConfig[j][1])
      { 
//      alert('LIV 3'+ myConfig[k][1]+myConfig[k][3]); 
//      	       
// istanziazione oggetto Servizio      	
//                                                          -sigla-       -descrizione- -link associato-   -target-       -indgest-	
      	AreeUte[i1].TipiSer[j1].Servizi[k1] = new Servizio(myConfig[k][2],myConfig[k][3], myConfig[k][4], myConfig[k][5], myConfig[k][6]);

        if (p_uni != 'all') 
         { AreeUte[i1].TipiSer[j1].Servizi[k1].indgest = '' }
//      	       
// istanziazione oggetto SubServizio      	
//
        if (AreeUte[i1].TipiSer[j1].Servizi[k1].indgest == 'S' ) 
        {
         totlsub ++;	       
         SubServizi= myConfig[k][9].split(";");
         l1=0;
// il ciclo sull'array dei subservizi non prende in considerazione l'ultimo elemento perchè = 'all'          
         for(q=0; q<(SubServizi.length)-1; q++)
         {
/*         	
           alert ("SubServizi [q] ="+ SubServizi [q] );
*/
 	   if(SubServizi [q] != '   ')
	   {
              apgUrl = strReplace(myConfig[k][4],"$UNI",SubServizi [q].toLowerCase()); 
              apgUrl = strReplace(apgUrl,"$UDM",demoConfig[SubServizi [q]]);
              apgTarget = strReplace(myConfig[k][5],"$UNI",SubServizi [q].toLowerCase()); 
              apgTarget = strReplace(apgTarget,"$UDM",demoConfig[SubServizi [q]]);
              apgTarget = 'w'+apgTarget;
//                                                                                 ---  sigla ---         --- descrizione ----    -target-  --- link associato ---
	      AreeUte[i1].TipiSer[j1].Servizi[k1].SubServizi[l1] = new SubServizio(SubServizi [q], uniConfig[SubServizi [q]], apgTarget,apgUrl ); 
	      l1 ++;
           }
         } 
        }      
        k1++;
        k++;  	
      }
      j1++;
      j = k;	
    }
    i1++;
    i = k;
  }
//alert ('AreeUte.length='+ AreeUte.length);
 }
//                             :::::::::::::::::::::::::
//
// costruisce la pagina dei servizi offerti,eventualmente personalizzata in base ai
// parametri "profilo utente","progetto","ateneo" e "lingua" specificati
//  
 function crea_desktop( p_ute,p_uni,p_pro,p_lan)
 {
// stack è una var. globale che, ad ogni chiamata della crea_desktop,
// deve essere ri-inizializzata per evitare che, nella chiamata successiva,
// venga assunto come valore di partenza di "stack" l'ultimo caricato in memoria.
// Ciò causerebbe una diminuzione progressiva del valore di stack e, in ultima analisi,
// problemi nella visulizzazione corretta dei menu ad ogni INVIO/ANNULLA nel setpers. 	
  stack = 100; 	
  curlsub= 0;
  var w;	
/* 
  alert("sono in crea_desktop" 
       +"\np_ute="+p_ute
       +"\np_uni="+p_uni
       +"\np_pro="+p_pro
       +"\np_lan="+p_lan
       );  
*/
  sel_obj(p_ute,p_uni,p_pro,p_lan);
  load_obj(p_uni); 
//
  with(parent.frm_cen.document)
  {
   open(); 
   writeln('<HTML>');
   writeln('<HEAD>');
   writeln ($BASESTM); 		
   writeln('<link rel="stylesheet" href="'+$CSSDIR+'stydesktop.css" type="text/css">');
// writeln('<script language="Javascript" src="menu_scomp.js" ></script>');

if (totlsub > 0)  
{
 writeln('<script language="Javascript">');

// creazione array delle due immagini di rollover
// ogni componente dell'array è una istanza dell\'oggetto Image (new Image) 
writeln(' var arrImg = new Array() ');
writeln(' arrImg[0] = new Image(12,12);');
writeln(' arrImg[1] = new Image(12,12);');
// 
//preload delle medesime  
writeln(' arrImg[0].src = "'+$IMGDIR+'mnuDown.gif";') //url dell'immagine contenuta nella prima componente dell'array arrImg 
writeln(' arrImg[1].src = "'+$IMGDIR+'mnuUp.gif"; '); //url dell'immagine contenuta nella seconda componente dell'array arrImg
//
//funzione preposta al cambio di immagine per il rollover
//
var apg='';
apg  ='function rollImage(idimg)'+'\n' ;
apg +='{ '+'\n';
apg +=' var imgname =\'coll\'+idimg'+'\n' ;	
apg +='    if (document.images[imgname].src == arrImg[0].src){ '+'\n'; 	
apg +='    document.images[imgname].src = arrImg[1].src;'+'\n';
apg +='    }  '+'\n';
apg +='    else{  '+'\n';  
apg +='    document.images[imgname].src = arrImg[0].src;}   '+'\n';  
apg +='} '+'\n';
apg +='//                             :::::::::::::::::::::::::'+'\n';
write (apg);
apg  ='ie=document.all?1:0'+'\n';
apg +='n=document.layers?1:0'+'\n';
apg +='/***************************************************************************'+'\n';
apg +='Variables to set.'+'\n';
apg +='****************************************************************************/'+'\n';
apg +='//How many menus do you have? (remember to copy and add divs in the body if you add menus)'+'\n';
apg +='var numberOfMenus=0'+'\n';
apg +='//The width on the menus (set the width in the stylesheet as well)'+'\n';
apg +='var mwidth=185'+'\n';
apg +='//Pixels between the menus'+'\n';
apg +='var pxBetween=8 // Agendo su questo valore, varia la distanza tra i menu'+'\n';
apg +='//The first menus left position'+'\n';
apg +='var fromLeft=117'+'\n';
apg +='//The top position of the menus'+'\n';
apg +='var fromTop=54'+'\n';
apg +='//The bgColor of the bottom mouseover div'+'\n';
apg +='var bgColor="#f7f5ea"'+'\n';
apg +='//The bgColor to change to'+'\n';
apg +='var bgColorChangeTo="#f7f5ea"'+'\n';
apg +='//The position the mouseover line div will stop at when going up!'+'\n';
apg +='var imageHeight=12'+'\n';
apg +='//per ogni menu se ne può specificare la posizione'+'\n';
apg +='//l\'elemento iesimo dell\'array coordx è la posizione orizzontale del menu iesimo'+'\n';
apg +='//l\'elemento iesimo dell\'array coordy è la posizione verticale del menu iesimo'+'\n';
apg +='var coordx = new Array(42,42,42,457)'+'\n';
apg +='var coordy = new Array(124,144,164,430)'+'\n';
//apg +='var coordx = new Array(42,42,42,42,457)'+'\n';
//apg +='var coordy = new Array(124,144,164,184,449)'+'\n';
write (apg);
writeln('//Object constructor');
writeln('//');
writeln('function makeNewsMenu(obj,nest)');
writeln('{');
writeln('	nest=(!nest) ? \'\':\'document.\'+nest+\'.\'');				
writeln('	this.css=(n) ? eval(nest+\'document.\'+obj):eval(\'document.all.\'+obj+\'.style\')');	
writeln('	this.scrollHeight=n?this.css.document.height:eval(\'document.all.\'+obj+\'.offsetHeight\')');
writeln('	this.moveIt=b_moveIt;');
writeln('	this.bgChange=b_bgChange;');
writeln('	this.slideUp=b_slideUp; ');
writeln('	this.slideDown=b_slideDown;');
writeln('	this.clipTo=b_clipTo;');
writeln('       this.obj = obj + "Object"; ');	
writeln('        eval(this.obj + "=this")');		
writeln('}');
writeln('//                             :::::::::::::::::::::::::');  
writeln('//Objects methods');
writeln('function b_moveIt(x,y)');
writeln('{');
writeln('this.x=x;');
writeln('this.y=y;'); 
writeln('this.css.left=this.x; ');
writeln('this.css.top=this.y');
writeln('}');
writeln('//                             :::::::::::::::::::::::::');  
writeln('function b_bgChange(color)');
writeln('{if(ie) this.css.backgroundColor=color; else this.css.bgColor=color}');
writeln('function b_clipTo(t,r,b,l){');
writeln('	if(n){this.css.clip.top=t; this.css.clip.right=r; this.css.clip.bottom=b; this.css.clip.left=l');
writeln('	}else this.css.clip="rect("+t+","+r+","+b+","+l+")";');
writeln('}');
writeln('//                             :::::::::::::::::::::::::');  
writeln('function b_slideUp(ystop,moveby,speed,fn,wh){//fz. che fa contrarre il menu');
writeln('	if(!this.slideactive){');
writeln('		if(this.y>ystop){');
writeln('			this.moveIt(this.x,this.y-5); eval(wh)');
writeln('			setTimeout(this.obj+".slideUp("+ystop+","+moveby+","+speed+",\'"+fn+"\',\'"+wh+"\')",speed)');
writeln('		}else{');
writeln('			this.slideactive=false; this.moveIt(0,ystop); eval(fn)');
writeln('		}');
writeln('	}');
writeln('}');
writeln('//                             :::::::::::::::::::::::::'); 
writeln('//'); 
writeln('function b_slideDown(ystop,moveby,speed,fn,wh){//fz. che fa espandere il menu');
writeln('	if(!this.slideactive){ ');
writeln('		if(this.y<ystop)');
writeln('		{//cioè, se il menu è chiuso');
writeln('			this.moveIt(this.x,this.y+5); ');
writeln('			eval(wh)');
writeln('			setTimeout(this.obj+".slideDown("+ystop+","+moveby+","+speed+",\'"+fn+"\',\'"+wh+"\')",speed)');
writeln('		}');
writeln('		else');
writeln('		{//cioè, se il menu è aperto');
writeln('			this.slideactive=false; ');
writeln('			this.moveIt(0,ystop);'); 
writeln('			eval(fn)');
writeln('		}');
writeln('	}');
writeln('}');
writeln('//                             :::::::::::::::::::::::::');  
writeln('//');
writeln('//Initiating the page, making cross-browser objects');
writeln('//');
writeln('function newsMenuInit() ');
writeln('{');
writeln('// Ho l\'Array dei menu	');
writeln('	oTopMenu=new Array()');
writeln('	for(i=0;i<=numberOfMenus;i++){');
writeln('// Ogni menu è, a sua volta, un Array di voci: le voci di ogni menu popolano un Array. ');
writeln('		oTopMenu[i]=new Array()');
writeln('		oTopMenu[i][0]=new makeNewsMenu(\'divTopMenu\'+i)');
writeln('		oTopMenu[i][1]=new makeNewsMenu(\'divTopMenuBottom\'+i,\'divTopMenu\'+i)');
writeln('		oTopMenu[i][2]=new makeNewsMenu(\'divTopMenuText\'+i,\'divTopMenu\'+i)');
writeln('		oTopMenu[i][1].moveIt(0,imageHeight)');
writeln('		oTopMenu[i][0].clipTo(0,mwidth,imageHeight+3,0)');
writeln('		oTopMenu[i][0].moveIt(fromTop,i*mwidth+fromLeft+(i*pxBetween))');
writeln('		oTopMenu[i][0].moveIt(coordx[i],coordy[i])');
writeln('//		oTopMenu[i][0].moveIt(coordx,coordy)');
writeln('		oTopMenu[i][0].css.visibility="visible"');
writeln('	}');
writeln('}');
writeln('//                             :::::::::::::::::::::::::');  
writeln('//Moves the menu');
writeln('//'); 
writeln(' function topMenu(num)');
writeln('	{');
writeln('	if(oTopMenu[num][1].y==imageHeight) oTopMenu[num][1].slideDown(oTopMenu[num][2].scrollHeight+20,10,40,\'oTopMenu[\'+num+\'][0].clipTo(0,mwidth,oTopMenu[\'+num+\'][1].y+3,0)\',\'oTopMenu[\'+num+\'][0].clipTo(0,mwidth,oTopMenu[\'+num+\'][1].y+3,0)\')');           
writeln('	else if(oTopMenu[num][1].y==oTopMenu[num][2].scrollHeight+20) oTopMenu[num][1].slideUp(imageHeight,10,40,\'oTopMenu[\'+num+\'][0].clipTo(0,mwidth,oTopMenu[\'+num+\'][1].y+3,0)\',\'oTopMenu[\'+num+\'][0].clipTo(0,mwidth,oTopMenu[\'+num+\'][1].y+3,0)\')');
writeln('}');
writeln('//                             :::::::::::::::::::::::::');  
writeln('');
writeln('//Changes background onmouseover');
writeln('function menuOver(num){oTopMenu[num][1].bgChange(bgColorChangeTo)}');
writeln('function menuOut(num){oTopMenu[num][1].bgChange(bgColor)}');
writeln('//Calls the init function onload');
//writeln('onload=newsMenuInit;');
writeln('</script>');
}
   writeln('</HEAD>');
//   write ('<BODY background="'+$IMGDIR+'bg_griven.gif" ');
   write ('<BODY ');
   if (totlsub > 0)  
      writeln(' onLoad="numberOfMenus='+(totlsub-1)+';newsMenuInit()">');
//alert("totlsub="+totlsub);
   else 
   writeln('>');  
   
   writeln(prepPath(desktop_title));

   writeln(' <CENTER>');  
 
// ^^^^^^^^^^^^^^^^^^^costruzione del desktop dei servizi ^^^^^^^^^^^^^^^^^^^^^^^ 

   for (w=0;w<AreeUte.length;w++) //array AreeUte: il suo el. iesimo è 1 ISTANZA dell'oggetto AreaUte
   {  
    AreeUte[w].show(parent.frm_cen.document); 
   }

// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

  writeln('</BODY></HTML>');      	  
  close();
  }
 }   // fine function
//                             :::::::::::::::::::::::::
//
// sceglie cosa proporre come pagina del desktop in base al parametro
// "pagina centrale" specificato
//  
 function crea_desktop0( p_ute,p_uni,p_pro,p_lan,p_pag)
 {
     switch (p_pag)   
  {                                                  //inizio switch
    case "S01" :
     {frm_cen.location.href="/stella/rapporti/menu.htm" }
    break;
    
    case "INFO_R" :
     {frm_cen.location.href="/info/IT/pag_prs"+p_uni+".htm" }
    break; 

    case "INFO_C" :
     {frm_cen.location.href="/info/IT/pag_serCV"+p_uni+".htm" }
    break; 
          
    default :
    {crea_desktop( p_ute,p_uni,p_pro,p_lan);}    
  }                                                 //fine switch  

 }   // fine function
//                             :::::::::::::::::::::::::
//
// funzione di utilità
// recupera la descrizione del servizio in base al suo codice
//
 function readSer(p_ser) 
 {
  for(j=0; j<myConfig.length; j++)
  { if ( myConfig[j][0]+myConfig[j][1]+myConfig[j][2]==p_ser)
    {   return myConfig[j][3];}
  } 
  return '';
 }
//                             :::::::::::::::::::::::::