// All functions have the prefix M_ for Menu

var menu = new Array();
var savedMenu;
var pages = new Array();

var NEW = -1;

function SubMenu(name)
{
 this.name = name;
 this.link = new Array();
}

function Link(name, pID, isTemplate, parameters)
{
 this.name = name;
 this.pID = pID;
 this.isTemplate = isTemplate;
 this.parameters = parameters;
}

function M_getPageTitle(pID)
{
 for(var i=0; i<pages.length; i++) if(pID == pages[i].pID) return pages[i].name;
 return "Page title not found";
}

function M_insertPageInSubMenu(pos, sub)
{
 menu[sub].link.push(pages[pos].pID);
 displayMenu('editMenu', 1);
 M_displayPages('otherPages');
}

function M_displayInsertControls(pos)
{
 var tempHTML = "<SELECT onchange=\"M_insertPageInSubMenu("+pos+", this.value);\"><OPTION>Insert into</OPTION>";
 for(var i=0; i<menu.length-1; i++) tempHTML += "<OPTION value=\""+i+"\">"+menu[i].name+"</OPTION>";
 return tempHTML+"</SELECT>";
}

function M_menuToString()
{
 var local = new Array();
 for(var i=0; i<menu.length-1; i++) local.push(menu[i].name+"|"+menu[i].link.join("|"));
 return local.join("||");
}

function M_saveMenuFunc()
{
 displayEditMenu('none');
 init();
}

function M_saveMenu()
{
 T_asynchRequest("shared/menu.php", "menu="+M_menuToString(), M_saveMenuFunc, 0);
}

function M_updateSection(pos)
{
 var sectionName = window.prompt("Enter a section name", (pos==NEW?"New section":menu[pos].name));
 if(sectionName == null) return;
 if(sectionName == "") sectionName = "Unnamed section";
 
 if(pos == NEW)
 {
  var temp = menu.pop();
  menu.push(new SubMenu(sectionName));
  menu.push(temp);
 }
 else			menu[pos].name = sectionName;
 
 displayMenu('editMenu', 1);
 M_displayPages('otherPages');
}

function M_inMenu(pID)
{
 for(var i=0; i<menu.length; i++) for(var j=0; j<menu[i].link.length; j++) if(menu[i].link[j] == pID) return 1;
 return 0;
}

function editStaticPage(pID)
{
 window.open("editPage.php?page="+pID, 'editProject', "height=675,width=700,status=no,toolbar=no,menubar=no,location=no,scrollbars=no,resizable=no");
}

function editProject(pID)
{
 window.open("editProject.php?page="+pID, 'editProject', "height=675,width=700,status=no,toolbar=no,menubar=no,location=no,scrollbars=no,resizable=no");
}

function renameTemplate(i)
{
 var tName = window.prompt("Enter a new template name", pages[i].name); 
 if(tName == "") return;
  
 T_asynchRequest("shared/page.php", "renameTemplate="+pages[i].pID+"&name="+tName, redisplayPages, 0);
}

function M_displayPage(pos)
{
 if(!M_inMenu(pages[pos].pID))
 {
  var tempHTML = "<TR><TD class=\"simple\">"+pages[pos].name+"</TD><TD>"+M_displayInsertControls(pos)+"</TD><TD><NOBR>";
  
  if(pages[pos].isTemplate)
  {
   if(pages[pos].isTemplate == 1)	tempHTML += "<A href=\"javascript:renameTemplate("+pos+");\">Rename</A>";
   else
   {
    tempHTML += "<A href=\"javascript:editProject("+pages[pos].parameters+");\">Edit</A>";
    tempHTML += " | <A href=\"javascript:deleteProject("+pos+");\">Delete</A></NOBR></TD></TR>";
   }
  }
  else
  {
   tempHTML += "<A href=\"javascript:editStaticPage("+pages[pos].pID+");\">Edit</A>";
   tempHTML += " | <A href=\"javascript:deletePage("+pos+");\">Delete</A></NOBR></TD></TR>";
  }
  
  return tempHTML; 
 }
 return "";
}

function M_displayPages(contentCellName)
{
 var tempHTML = "<H1>Available pages</H1><TABLE border=\"0\">";
 for(var i=0; i<pages.length; i++) tempHTML += M_displayPage(i);
 tempHTML += "<TR><TD colspan=\"3\" class=\"simple\" width=\"300\"><BR><A href=\"javascript:editStaticPage('NEW');\">New page</A><BR><SMALL>(Refresh page and reopen menu to display the new page name when changing it)</SMALL><BR>";
 tempHTML += "<BR><A href=\"javascript:editProject('NEW');\">New project</A><BR><SMALL>(Refresh page and reopen menu to display the new project name when changing it)</SMALL><BR>";
 tempHTML += "<BR><A href=\"javascript:M_updateSection(NEW);\">New menu section</A></TD></TR>";
 document.getElementById(contentCellName).innerHTML = tempHTML+"</TABLE>";
}

function M_moveItem(array, pos, dir)
{ 
 array = AM_moveArrayItem(array, pos, dir);
 displayMenu('editMenu', 1);
 M_displayPages('otherPages');
 if(array == menu) M_displayPages('otherPages');	// Updates insertInto controls if submenus order is altered
}

function M_displayMoveControls(arrayName, pos, length)
{
 var tempHTML = "";
 
 if(pos != 0)			tempHTML += "<A href=\"javascript:M_moveItem("+arrayName+", "+pos+", UP);\">Up</A>";
 tempHTML += "</TD><TD>&nbsp;|&nbsp;</TD><TD valign=\"bottom\">";
 if(pos != length-1)	tempHTML += "<A href=\"javascript:M_moveItem("+arrayName+", "+pos+", DOWN);\">Down</A>";
 
 return tempHTML;
}

function updateStatus(i, j)
{
 //window.status = "IVE Lab > Go to page: "+unescape(M_getPageTitle(menu[i].link[j]));
 window.status = "Intelligent Virtual Environment lab";
}

function M_displaySubMenuItem(i, j, edit)
{
 var tempHTML = "<TR><TD style=\"width: 170px;\">";
 tempHTML += "<A href=\""+(edit?"":"?pID="+menu[i].link[j])+"\" class=\"menuLink\" onmouseover=\"updateStatus("+i+", "+j+"); return true;\" onmouseout=\"updateStatus("+i+", "+j+"); return true;\">"+unescape(M_getPageTitle(menu[i].link[j]))+"</A>";
 if(edit) tempHTML += "</TD><TD valign=\"bottom\">"+M_displayMoveControls("menu["+i+"].link", j, menu[i].link.length)+"</TD><TD><NOBR>&nbsp;| <A href=\"javascript:M_moveItem(menu["+i+"].link, "+j+", DELETE);\">Remove</A></NOBR>";
 return tempHTML +"</TD></TR>";
}

function M_displaySubMenu(i, edit)
{
 var tempHTML = "<TABLE class=\"section"+edit+"\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">";
 tempHTML += "<TR><TD class=\"sectionTitle\" style=\"width: 162px;\">"+menu[i].name;
 
 if(edit)
 {
  tempHTML += "</TD><TD class=\"sectionTitleEdit\"><TABLE border=\"0\"><TR><TD valign=\"bottom\">"+M_displayMoveControls("menu", i, menu.length)+"</TD><TD><NOBR>&nbsp;| <A href=\"javascript:M_moveItem(menu, "+i+", DELETE);\">Remove</A></NOBR></TD></TR></TABLE>";
  tempHTML += "<A href=\"javascript:M_updateSection("+i+");\">Rename</A>";
 }
 tempHTML += "</TD></TR>\n";
 
 tempHTML += "<TR><TD class=\"sectionContent\" colspan=\"2\"><TABLE cellpadding=\"0\" cellspacing=\"0\" border=\"0\">";
 for(var j=0; j<menu[i].link.length; j++) tempHTML += M_displaySubMenuItem(i, j, edit);
 tempHTML += "</TABLE></TD></TR>";
 return tempHTML+"</TABLE>";
}

function M_copyMenu(array)
{
 var local = new Array();
 for(var i=0; i<array.length; i++)
 {
  local.push(new SubMenu(array[i].name));
  local[local.length-1].link = array[i].link.slice(0);
 }
 return local;
}

function M_displayMenu(contentCellName, edit)
{
 var tempHTML = "<BR>";
 if(edit) tempHTML = "<H1>Editing menu</H1>";
 
 tempHTML += "<TABLE border=\"0\" cellpadding=\"0\" cellspacing=\"0\">";
 
 var menuLock = menu.length;
 if(edit) menuLock--;
 for(var i=0; i<menuLock; i++)
 {
  tempHTML += "<TR><TD>"+M_displaySubMenu(i, edit)+"</TD></TR>";
  tempHTML += "<TR><TD style=\"background-image: url(images/menu-shadow.gif); height: 10px;\"></TD></TR>";
 }
 tempHTML += "</TABLE>";
 
 return tempHTML;
}