﻿
// menu data load
var primarySelectedMenuItemStyle = "primarySelectedMenuItemStyle";
var secondarySelectedMenuItemStyle = "secondarySelectedMenuItemStyle";
var headerSelectedMenuItemStyle = "headerSelectedMenuItemStyle";
var primaryUnSelectedMenuItemStyle = "";
var secondaryUnSelectedMenuItemStyle = "secondaryUnSelectedMenuItemStyle";
var headerUnSelectedMenuItemStyle = "";

var menu = null;
function LoadMenuData(menu) {
    var header = null;
    // AddMenuItem(id,parentId,type,text)
    // type 1 = regular link
    // type 2 = header link
	
	menu.AddMenuItem("TSLC",null,1,null,"TSLC_1.jpg");
	
	header = menu.AddMenuItem("SPP","SPPDropDown",2,"Spirit of Place Project",null);
    header.AddMenuItem("SPP1","SPP",1,"Website","SPP_1.jpg");
	header.AddMenuItem("SPP2","SPP",1,"Identity","SPP_4.jpg");
    header.AddMenuItem("SPP3","SPP",1,"T-Shirt &amp; Buttons","SPP_5.jpg");
	header.AddMenuItem("SPP4","SPP",1,"Invitations","SPP_6.jpg");
	header.AddMenuItem("SPP5","SPP",1,"Exhibition Design","SPP_8.jpg");
	
	header = menu.AddMenuItem("JPP","JPPDropDown",2,"Julia Pelish Photography",null);
	header.AddMenuItem("JPP1","JPP",1,"Website","JPP_1.jpg");
    header.AddMenuItem("JPP2","JPP",1,"Identity","JPP_4.jpg");
	
	header = menu.AddMenuItem("CITech","CITechDropDown",2,"CI-Technologies",null);
    header.AddMenuItem("CITech1","CITech",1,"CrimeNtel","CNtel_1.jpg");
    header.AddMenuItem("CITech2","CITech",1,"IAPro","IAPro_1.jpg");
  
  	header = menu.AddMenuItem("VRC","VRCDropDown",2,"Vancouver Recovery Club",null);
    header.AddMenuItem("VRC1","VRC",1,"Website","VRC_1.jpg");
    header.AddMenuItem("VRC2","VRC",1,"Identity","VRC_4.jpg");
	
	menu.AddMenuItem("Bourne",null,1,null,"bourne_1.jpg");
	
    menu.AddMenuItem("LPDesign",null,1,null,"lp1.jpg");
	
    menu.AddMenuItem("SasaB",null,1,null,"Sasab_1.jpg");
    
    menu.AddMenuItem("Liz",null,1,null,"eSoergelIdentity.jpg");
    
	menu.AddMenuItem("EmilyCar",null,1,null,"plaBrochure_1.jpg");
    
    menu.AddMenuItem("Sylvia",null,1,null,"sylvia_1.jpg");
	
    menu.AddMenuItem("SHall",null,1,null,"shall_1.jpg");
	
    menu.AddMenuItem("CRNBC",null,1,null,"nurses_1.jpg");
    
    // menu.AddMenuItem("DiggBags",null,1,null,"DiggBags1.jpg");
	
    menu.AddMenuItem("PLG",null,1,null,"plg1.jpg");
	
    menu.AddMenuItem("Lori",null,1,null,"LoriCard.jpg"); 
}


// menu page events



// menu class

function AddMenuItem(id,parentId,type,text,galleryId){
    var item = new MenuItem(id,parentId,type,text,galleryId);
    this.MenuItems[this.MenuItems.length] = item;
    return item;
}


function FindMenuItem(id) {
	var item;
	var i;
	var j;
	var subItem;
	for (i in this.MenuItems) {
	    item = this.MenuItems[i];
		if (item.id == id){
		    item.node = document.getElementById(id);
			return item;	
		}
		else if (item.type == 2) { // header node has children. Only two levels for now. Change this routine to recursive to add more depth
			for (j in item.MenuItems) {
			    subItem = item.MenuItems[j];
			    if (subItem.id == id){
		            subItem.node = document.getElementById(id);
			        return subItem;
			    }
			}
		}
	}
	// item not found
	return null;
}


function SelectedStyle() {
    if (this.type == 1) {
        if (this.parentId == null)
            return primarySelectedMenuItemStyle;
        else 
            return secondarySelectedMenuItemStyle;
    }
    else if (this.type == 2)
        return headerSelectedMenuItemStyle;
    else
        return null;
}

function UnSelectedStyle() {
    if (this.type == 1) {
        if (this.parentId == null)
            return primaryUnSelectedMenuItemStyle;
        else 
            return secondaryUnSelectedMenuItemStyle;
    }
    else if (this.type == 2)
        return headerUnSelectedMenuItemStyle;
    else
        return null;
}

function SelectNode() {
    if (this.type == 1)
        this.node.className = this.selectedStyle();
    else if (this.type == 2) {
        var headerNode = document.getElementById(this.parentId);
        if (headerNode != null) {
            var nodeText = "<a class=\"" + this.selectedStyle() + "\" id=\"" + this.id + "\" href=\"javascript:onMenuClick('','" + this.id + "');\">" 
                           + this.text + "</a>";
            nodeText += "<ul class=\"nestedList\">";                      
            
            var item;
            for (item in this.MenuItems) {
		       var subItem = this.MenuItems[item];
		       nodeText += "<li class=\"subNav\"><a class=\"" + subItem.unSelectedStyle() + "\" id=\"" + subItem.id + "\" href=\"javascript:onMenuClick('','" + subItem.id + "');\">"
		                   + subItem.text + "</a></li>";
		    }
            
            nodeText += "</ul>";       
            headerNode.innerHTML = nodeText;
        }
    }
}

function DeselectNode() {
    if (this.type == 1) 
        this.node.className = this.unSelectedStyle();
    else if (this.type == 2) {
        var headerNode = document.getElementById(this.parentId);
        if (headerNode != null) {
            var nodeText = "<a id=\"" + this.id + "\" href=\"javascript:onMenuClick('','" + this.id + "');\">" + this.text + "</a>";
            headerNode.innerHTML = nodeText;
        }
    }   
}

function DeselectHeaderNode() {

}

function MenuSelect(menuId) {
    var newNode = this.FindMenuItem(menuId);
    if (newNode == null) return;
            
    if(this.LastNode == null) {
        this.LastNode = newNode; // save currentnode as last node
        newNode.SelectNode();  // select new node
        return newNode;
    }
    
    if(this.LastNode.id == newNode.id) // same node, do nothing
        return;
    
    var lastNodeParentId = this.LastNode.parentId;
    var newNodeParentId = newNode.parentId;
    
    if (lastNodeParentId != newNode.id)
        newNode.SelectNode();  // select new node
    
    
    // deselect last node
    if (this.LastNode.type == 1){
        if (lastNodeParentId == null)
            this.LastNode.DeselectNode(); // last node was top level link 
        else if (lastNodeParentId == newNodeParentId) 
            this.LastNode.DeselectNode(); // last node was sub link with same parent
        else if (newNodeParentId == null) {
            var lastNodeHeaderNode = this.FindMenuItem(lastNodeParentId);
            lastNodeHeaderNode.DeselectNode(); // last node was sub link, new node is top level link
        }
        else if (lastNodeParentId != newNode.id) {
            var lastNodeHeaderNode = this.FindMenuItem(lastNodeParentId);
            lastNodeHeaderNode.DeselectNode(); // last node was sub link, new node is top level header different than last nodes header
        }
    }
    else if (this.LastNode.type == 2) {
        if (newNodeParentId == null || newNode.type ==2)
            this.LastNode.DeselectNode();
    } 
     
     this.LastNode = newNode; // save currentnode as last node
     return newNode;
}


function MenuItem(id,parentId,type,text,galleryId){
    this.id = id;
    this.type = type;
    this.parentId = parentId;
    this.galleryId = galleryId;
    this.text = text;
    this.selectedStyle = SelectedStyle;
    this.unSelectedStyle = UnSelectedStyle;
    this.node;
    this.MenuItems = new Array();
    this.AddMenuItem = AddMenuItem;
    this.SelectNode = SelectNode;
    this.DeselectNode = DeselectNode;
}


function Menu() {
    this.MenuSelect = MenuSelect;
    this.CurrentNode;
    this.LastNode;
    this.MenuItems = new Array();
	this.AddMenuItem = AddMenuItem;
	this.FindMenuItem = FindMenuItem;
}



// utility 
function DisplayLinkAlert(item){
    var text =  "id = " + item.id + "\n";
        text += "type = " + item.type + "\n";
        text += "parentid = " + item.parentId + "\n";
        text += "text = " + item.text + "\n";
        text += "selectedStyle = " + item.selectedStyle() + "\n";
        text += "unSelectedStyle = " + item.unSelectedStyle() + "\n";
        alert(text);
}