// menu.js
// -------
// Marzo 2003
// Oliviero Rossi

// Add an entry to the database
var total=1;
var current=getCurrState();
var db = new Array();
var prevIndentDisplayed = 0;
var showMyDaughter = 0;
var classLev0= "noLinkMenu"; // classe CSS per voce menu principale
var classLev1= "leftMenu"; // classe CSS per voce menu linkata


//Refresh Menu
function refreshMenu()
{
  current=getCurrState();
  document.getElementById("menu").innerHTML = showMenu();
}

//set a cookie
function setCookie (name,value,expires,path,domain,secure)
{
  var nname = name;
  var vvalue = value;
  var ppath = path;
  var eexpires = expires;
  var ddomain = domain;
  var ssecure = secure;

  document.cookie = nname + "=" + escape (vvalue) +
    ((eexpires) ? "; expires=" + eexpires.toGMTString() : "") +
    ((ppath) ? "; path=" + ppath : "") +
    ((ddomain) ? "; domain=" + ddomain : "") +
    ((ssecure) ? "; secure" : "");
}

//get a cookie
function getCookie(name)
{
  var nname;
  var value;
  var offset;
  var end;
  nname = name;
  var search = nname + "=";
  if (document.cookie.length > 0)
  {
    offset = document.cookie.indexOf(search);
    if (offset != -1)
    {
      offset += search.length;
      end = document.cookie.indexOf(";", offset);
      if (end == -1)
      {
        end = document.cookie.length;
      }
      value = document.cookie.substring(offset,end);
    }
  }
  return unescape(value);
}


function dbAdd(mother,display,URL,indent,top,newitem)
{
  db[total] = new Object;
  db[total].mother = mother;
  db[total].display = display;
  db[total].URL = URL;
  db[total].indent = indent;
  db[total].top = top;
  db[total].newitem = newitem;
  total++;
}


function getCurrState()
{
  var label = "currState=";
  var labelLen = label.length;
  var cLen = document.cookie.length;
  var i = 0;
  while (i < cLen)
  {
    var j = i + labelLen;
    if (document.cookie.substring(i,j) == label)
    {
      var cEnd = document.cookie.indexOf(";",j);
      if (cEnd == -1) { cEnd = document.cookie.length };
      return unescape(document.cookie.substring(j,cEnd));
    }
    i++;
  }
  return "";
}


// Record current settings in cookie
function setCurrState(setting)
{
  var expire = new Date();
  expire.setTime(expire.getTime() + ( 7*24*60*60*1000 ) ); // expire in 1 week
  //document.cookie = "currState=" + escape(setting) + "; expires=" + expire.toGMTString();
  setCookie ("currState",setting,expire,"/"); 
}


// Set the initial state if no current state or length changed
function setInitState()
{
  current=getCurrState();
  if (current == "" || current.length != (db.length-1)) 
  {
    current = "";
    initState = "";
    for (i = 1; i < db.length; i++)
    {
      initState += "0";
      current += "0";
    }
    setCurrState(initState);
  }
  prevIndentDisplayed = 0;
  showMyDaughter = 0;
}


// toggles an outline mother entry, storing new value in the cookie
function toggle(n)
{
  if (n != 0)
  {
    //window.parent.location = db[n].URL;
    var newString = "";
    var expanded = current.substring(n-1,n); // of clicked item
    newString += current.substring(0,n-1);
    newString += expanded ^ 1; // Bitwise XOR clicked item
    newString += current.substring(n,current.length);
    setCurrState(newString); // write new state back to cookie
  }
}


// returns padded spaces (in mulTIPles of 2) for indenting
function pad(n)
{
  var result = "";
  for (var i = 1; i <= n; i++) { result += "&nbsp;&nbsp;&nbsp;&nbsp;" }
  return result;
}


function showMenu()
{
  var Outline="";
  // cycle through each entry in the outline array
  for (var i = 1; i < db.length; i++)
  {
    var currIndent = db[i].indent;           // get the indent level
    var top = db[i].top;
    var expanded = current.substring(i-1,i); // current state
    var test = currIndent - prevIndentDisplayed;

    if (top == "") { top="_top" }
    // display entry only if it meets one of three criteria
    if ((currIndent == 0 ||
      currIndent <= prevIndentDisplayed ||
      (showMyDaughter + "" == 1 + "" && (test + "" == 1 + ""))))
    {
      Outline += pad(currIndent);

      // Insert the appropriate GIF and HREF
      newitem = "";
      if (db[i].newitem) { newitem="_new"; }
      if (!(db[i].mother))
      {
        Outline += "";
      }
      else
      {
        if (current.substring(i-1,i) + "" == 1 + "")
        {
          Outline += "<A HREF=\"javascript:refreshMenu()\" onMouseOver=\"window.parent.status=\'Click to collapse\';return true;\" onClick=\"toggle(" + i + ")\">";
          Outline += "<IMG SRC=\"" + imageURL + "true.jpg\" WIDTH=10 HEIGHT=10 BORDER=0>";
          Outline += "</A>";
        }
        else
        {
          Outline += "<A HREF=\"javascript:refreshMenu()\" onMouseOver=\"window.parent.status=\'Click to expand\';return true;\" onClick=\"toggle(" + i + ")\">";
          Outline += "<IMG SRC=\"" + imageURL + "false.jpg\" WIDTH=10 HEIGHT=10 BORDER=0>";
          Outline += "</A>";
        }
      }
      //Outline += "&nbsp;";

      
      if (db[i].URL == "" || db[i].URL == null)
      {
        Outline += " " + db[i].display;      // no link, just a listed item
      }
      else
      {
        //Outline += " <A HREF=\"" + db[i].URL  + "\" class=\""+ classLev1 +"\">" +  db[i].display + "</A>";
        Outline += " <A onclick =\"setTimeout('makeWait()', waitBarDelay);\" HREF=\"" + db[i].URL  + "\" class=\""+ classLev1 +"\">" + db[i].display + "</A>";
      }
  

    // Bold if at level 0
      if (currIndent == 0)
      {
        Outline = "<span class=\""+ classLev0 +"\">" + Outline + "</span>";
      }
      Outline += "<BR>";
      prevIndentDisplayed = currIndent;
      showMyDaughter = expanded;
      // if (i == 1) { Outline = ""}


      //modifica oli 2003.3.5
      //if (db.length > 25) {
      //  document.write(Outline)
      //  Outline = ""
      //  }
      }
    }
  //document.write(Outline)
  //modifica oli 2003.3.5
  return Outline;
}

