// *********** assign mode (hindcast or forecast)
// parse "location.search" into "request" array 
if (location.search)
{
  var varvalue=location.search.substr(1).split("&");
  var request= new Array();
  for (var i in varvalue) 
  {
    varvalue[i] = varvalue[i].replace(/\+/g, " ").split("=");
    request[unescape(varvalue[i][0])] = unescape(varvalue[i][1]);
  }
}
// mode arrays
modeH = 0;  modeF = 1;
var mode_dirs = new Array("plot_hindcast/", "plot_forecast/");
var mode_strs = new Array("A",              "F");
// assign mode
if (request && request["link"] && (request["link"] == "F")) { mode = modeF } else { mode = modeH }

// is forecast mode
forecast = request && request["link"] && (request["link"] == "F");
if (forecast)
{
  plot_dir  = "plot_forecast/";
  str_mode  = "F";
  str_dates = dateF;
}
else
{
  plot_dir  = "plot_hindcast/";
  str_mode  = "A";
  str_dates = dateH;
}

///////////////////////////// fine vars declaration

// Replace "Mov_" with "Animation" in menu
var menu_dates = new Array();
for (i=0;i<str_dates.length;i++)    
  menu_dates[i]=str_dates[i];
menu_dates[menu_dates.length-1] = "Animation";  

// Elenco Variabili
var global_menu_vars = new Array();
global_menu_vars = new Array("Temperature", "Temperature Anomaly", "Salinity", "Salinity Anomaly", "Currents", 
                             "Sea Surface Height", "Sea Surface Height Anomaly", "Downward Heat Flux", "Wind Stress");
// Stringa variabili
var global_strg_vars = new Array();
global_strg_vars = new Array("T" , "T_A", "S" , "S_A", "V" , "SSH", "SSH_A", "HF", "WS"); 
// Tipo Variabili
var global_type_vars = new Array(); // [0 = 3D , 1 = 2D]
global_type_vars = new Array(0,0,0,0,0,1,1,1,1);

// Elenco Regioni
var global_menu_regions = new Array();
global_menu_regions     = new Array("Adriatic", "Emilia Romagna", "Northern Adriatic", "Central Adriatic", "Southern Adriatic", "Transect 1");
// Numero regioni
var global_strg_regions = new Array();
global_strg_regions     = new Array("0","1","2","3","4","5"); 


// Associo ad ogni regione le variabili attive e le profondità 3D e 2D
var menu_region_varsnr = new Array();

// Creo gli array bidimensionali per la depth
var menu_region_depths = new Array(new Array(), new Array(),new Array(),new Array(),new Array(),new Array());
var strg_region_depths = new Array(new Array(), new Array(),new Array(),new Array(),new Array(),new Array());

//nr_regions = global_menu_regions.length;

//for(i=0; i<nr_regions; i++) {
  // var menu_region_depths[i] = new Array();
  // var strg_region_depths[i] = new Array();
// }

// ["Adriatic"]
menu_region_varsnr[0]    = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8);                                                 
menu_region_depths[0][0] = new Array("0 m",  "5 m",  "20 m",  "50 m",  "100 m",  "200 m",  "500 m" ); 
strg_region_depths[0][0] = new Array("0m",  "5m",  "20m",  "50m",  "100m",  "200m",  "500m" );
menu_region_depths[0][1] = new Array("0 m");
strg_region_depths[0][1] = new Array("0m");

// ["Emilia Romagna"]
menu_region_varsnr[1]    = new Array(0, 2, 4, 8);
menu_region_depths[1][0] = new Array("0 m",  "2 m",  "5 m",  "10 m" );
strg_region_depths[1][0] = new Array("0m" ,  "2m" ,  "5m" ,  "10m"  );
menu_region_depths[1][1] = new Array("0 m"); 
strg_region_depths[1][1] = new Array("0m");

// ["Northern Adriatic"]
menu_region_varsnr[2]    = new Array(0, 1, 2, 3, 4, 6, 8);
menu_region_depths[2][0] = new Array("0 m",  "2 m",  "10 m",  "20 m",  "50 m" ); 
strg_region_depths[2][0] = new Array("0m" ,  "2m" ,  "10m" ,  "20m" ,  "50m"  ); 
menu_region_depths[2][1] = new Array("0 m");
strg_region_depths[2][1] = new Array("0m");

// ["Central Adriatic"]
menu_region_varsnr[3]    = new Array(0, 1, 2, 3, 4, 6, 8);
menu_region_depths[3][0] = new Array("0 m" ,  "2 m" ,  "10 m" ,  "50 m" ,  "100 m" ); 
strg_region_depths[3][0] = new Array("0m"  ,  "2m"  ,  "10m"  ,  "50m"  ,  "100m" );  
menu_region_depths[3][1] = new Array("0 m");
strg_region_depths[3][1] = new Array("0m");

// ["Southern Adriatic"]
menu_region_varsnr[4]    = new Array(0, 1, 2, 3, 4, 6, 8);
menu_region_depths[4][0] = new Array("0 m",  "2 m",  "10 m",  "50 m",  "100 m",  "200 m",  "500 m",  "1000 m" );
strg_region_depths[4][0] = new Array("0m" ,  "2m" ,  "10m" ,  "50m" ,  "100m" ,  "200m" ,  "500m" ,  "1000m"  );
menu_region_depths[4][1] = new Array("0 m");
strg_region_depths[4][1] = new Array("0m");

// ["Transect 1"]
menu_region_varsnr[5]    = new Array(0, 2);
menu_region_depths[5][0] = new Array("0 m");
strg_region_depths[5][0] = new Array("TRN");
menu_region_depths[5][1] = new Array("0 m");
strg_region_depths[5][1] = new Array("TRN");

// calcolo abbinamento variabili - regioni

//scorro elenco variabili
// Array che contiene abbinamento fra variable number e regioni che la utilizzano
var_reg = new Array( new Array(), new Array(), new Array(), new Array(), new Array(), new Array(), new Array(), new Array(), new Array()); 

for (i=0;i<global_menu_vars.length;i++) {  
    ok = 0;
    // acquisisco indice variabile: i è indice della variabile 
    // scorro elenco regioni
    //alert(global_menu_regions.length);
    for (j=0;j<global_menu_regions.length;j++) {
    	  // j = regione che sto indagando
    	  // per ogni regione scorro elenco variabili
    	  for (w=0;w<menu_region_varsnr[j].length;w++) {  
    	  	  //alert(menu_region_varsnr[j][w]) ; 	  	
            ixVar = menu_region_varsnr[j][w]; 	
    	      if( ixVar == i ) {
    	      	 var_reg[i][ok] = new Array( global_menu_regions[j] ) ;
               ok = ok + 1;
            } 
    	  }
    }
}


///////////////////////////// fine vars declaration
function absoluteIndex(stringa, vettore) {
  for (i=0;i<vettore.length;i++) {
       if ( stringa == vettore[i] ) {
  	   indice = i ;
  	   }
  }
  return indice;
}

// Carica il menù a tendina dell'html con l'array e posiziona la scelta
function assignSelect(select, array, str) {
  k = 0;
  while (select.options.length > 0) 
    select.options[0]=null;
  for (i=0;i<array.length;i++) {  
    select.options[i]=new Option(array[i],null);
    if (str==array[i])
      k = i;
  }  
  select.options.selectedIndex=k;
  return k;
}
//================================
// Descrive lo stato iniziale della Pagina per quel che riguarda i menù di scelta e 
// La prima immagine
function onLoad() {
  selectDate   = document.getElementById("selectDate");
  selectPlot   = document.getElementById("selectPlot");
  selectRegion = document.getElementById("selectRegion");
  selectDepth  = document.getElementById("selectDepth");

  iDate   = assignSelect(selectDate,   menu_dates, ""); 
  
  iRegion = assignSelect(selectRegion, global_menu_regions, ""); 

  tmpVars  = new Array();
  tmpVtype = new Array(); // Variable type (3D or 2D)
  
  for (i=0;i<menu_region_varsnr[iRegion].length;i++) {  
  	ix = menu_region_varsnr[iRegion][i];
    tmpVars[i]  = new Array(global_menu_vars[ix]);
    pippo = global_type_vars[ix];
    tmpVtype[i] = pippo;
  }   
 
  iPlot   = assignSelect(selectPlot,   tmpVars, ""); // Elenco delle variabili per quella regione; iPlot = nr variabile scelta nell'Array
  
  iDepth  = assignSelect(selectDepth,  menu_region_depths[iRegion][tmpVtype[iPlot]], ""); 
  
  ixRegion_Old   = -1;
  strDepth_Old  = "";
  strRegion_Old = "";
  strPlot_Old = "";
  ixPlot_Old = -1;
  
  delete tmpVars;
  delete tmpVtype;

  updateImage();
}
//================================
function updateImage() {
	// Acquisisce selezione corrente da pagina web
  iRegion   = selectRegion.selectedIndex;  // numero regione della lista selezionata
  strRegion = selectRegion.options[iRegion].text;

  iPlot     = selectPlot.selectedIndex;    // numero variabile della lista selezionata
  strPlot   = selectPlot.options[iPlot].text;
  iDepth    = selectDepth.selectedIndex;   // numero depth della lista selezionata
  strDepth  = selectDepth.options[iDepth].text;
  
  // Calcolo gli indici assoluti di Regione e Index
  ixRegion = absoluteIndex(strRegion,global_menu_regions)
  ixPlot   = absoluteIndex(strPlot,global_menu_vars)
  
  region = 0;
  // Se la nuova regione scelta è diversa dalla precedente ricalcola le liste di variabili e profondità   
  if (ixRegion != ixRegion_Old) {
  	// cambio la lista variabili
  	// cambio la lista depth  
     tmpVars  = new Array() ;
     tmpVtype = new Array() ; // Variable type (3D or 2D)     

     for (i=0;i<menu_region_varsnr[ixRegion].length;i++) {  
  	     ix = menu_region_varsnr[ixRegion][i];
         tmpVars[i]  = new Array(global_menu_vars[ix]);
         pippo = global_type_vars[ix];
         tmpVtype[i] = pippo;
     }
      
     iPlot   = assignSelect(selectPlot,   tmpVars , strPlot); 
     ixPlot   = absoluteIndex(strPlot,global_menu_vars)
     
     iDepth  = assignSelect(selectDepth,  menu_region_depths[ixRegion][tmpVtype[iPlot]], strDepth);
     iRegion  = assignSelect(selectRegion,  var_reg[ixPlot], strRegion); // aggiorno lista regioni  

     delete tmpVars;
     delete tmpVtype;
     region = 1;

  }

  // Se la nuova variabile scelta è diversa dalla precedente ricalcola le liste di regione e profondità
  if ((ixPlot != ixPlot_Old) && ( region != 1 )) {
          
     iRegion  = assignSelect(selectRegion,  var_reg[ixPlot], strRegion); // aggiorno lista regioni  

  	 // cambio la lista depth
  	 tmpVars  = new Array() ;
     tmpVtype = new Array() ; // Variable type (3D or 2D)
     
     for (i=0;i<menu_region_varsnr[ixRegion].length;i++) {  
  	     ix = menu_region_varsnr[ixRegion][i];
         tmpVars[i]  = new Array(global_menu_vars[ix]);
         pippo = global_type_vars[ix];
         tmpVtype[i] = pippo;
     }

  	 iPlot   = assignSelect(selectPlot,   tmpVars , strPlot)

  	 iDepth  = assignSelect(selectDepth,  menu_region_depths[ixRegion][tmpVtype[iPlot]], strDepth); 

  	 delete tmpVars;
     delete tmpVtype;
  	      	
  }  
  region = 0;
  
  //la variabile plottata è 3D o 2D ?
  if (global_type_vars[ixPlot] == 1 ) {
     document.getElementById("textDepth").style.display = "none";
     selectDepth.style.display = "none";  
  }
  else {
  document.getElementById("textDepth").style.display = "inline";
  selectDepth.style.display  = "inline";  
  }       

// New picture name
  dpt = strg_region_depths[ixRegion][global_type_vars[ixPlot]][iDepth];

  gif = plot_dir+str_dates[iDate]+"_"+str_mode+"_"+global_strg_vars[ixPlot];
  gif = gif+"_"+global_strg_regions[ixRegion]+"_"+dpt;
  gif = gif+".gif";
  //alert(gif);
  document.images.plot.src=gif;
  
  iRegion   = selectRegion.selectedIndex;
  strRegion = selectRegion.options[iRegion].text;
  iPlot    = selectPlot.selectedIndex;
  strPlot  = selectPlot.options[iPlot].text;
  iDepth    = selectDepth.selectedIndex;
  strDepth  = selectDepth.options[iDepth].text;
  
    // Calcolo gli indici assoluti di Regione e Index
  ixRegion = absoluteIndex(strRegion,global_menu_regions)
  ixPlot   = absoluteIndex(strPlot,global_menu_vars)
  
  // riassegno le old vars per futuri confronti 
  ixRegion_Old  = ixRegion;
  strRegion_Old = strRegion;
  ixPlot_Old    = ixPlot;
  strPlot_Old   = strPlot;
  iDepth_Old    = iDepth;
  strDepth_Old  = strDepth;
return 0;
}




