dojo.require("dijit.layout.ContentPane");
dojo.require("dojox.layout.ContentPane");
dojo.require("dijit.layout.AccordionContainer");

dojo.addOnLoad(
  function() {
    var state = {
      handle: function(direction) { alert("going!"); }
    };
    dojo.back.setInitialState(state);

    initTabs();
    //drawSiteMap(dijit.byId("siteMap"));
  }
);
//photoGallery.setDataStore(galleryStore, {query:{},count:20}, {imageThumbAttr:"thumb",imageLargeAttr:"large",titleAttr:"title"});
function initTabs() {
  menuContent.fetch({
    query:{category:"tab"},
    onComplete: function(tabs){
      try {
        // Build Tabs
        dojo.forEach(tabs, function(tab){
          var tabDiv = dojo.doc.createElement("div");
          tabDiv.style.display = "none";
          var tabPane = new dijit.layout.ContentPane({
            href: menuContent.getValue(tab, "url", null),
            id: menuContent.getValue(tab, "name"),
            title: menuContent.getValue(tab, "label"),
            refreshOnShow: false,
            closable: false,
            preload: false,
            "class": "tabContent",
            //onShow: function() {tabDiv.style.display = "block";},
            onLoad: function() {
              try {
                // Build Accordion Menu
                var accord = new dijit.layout.AccordionContainer({style: "width: 160px; height: 310px;"}, dojo.byId(menuContent.getValue(tab, "name") + "Accord"));
                var menus = menuContent.getValues(tab, "children");
                dojo.forEach(menus, function(menu, i){
                  var menuPane = new dijit.layout.ContentPane({
                    id: menuContent.getValue(menu, "name"),
                    title: menuContent.getValue(menu, "label"),
                    selected: i==0,
                    onShow: function() {
                      var featureUrl = menuContent.getValue(menu, "feature_url", menuContent.getValue(tab, "feature_url"));
                      var menuFeature = dijit.byId(menuContent.getValue(tab, "name") + "Feature");
                      if (menuFeature && featureUrl != menuFeature.attr("href")) {
                        menuFeature.attr("href", featureUrl);
                      }
                    }
                  });
                  var menuItems = menuContent.getValues(menu, "children");
                  dojo.forEach(menuItems, function(menuItem){
                    var menuItemDiv = dojo.doc.createElement("div");
                    var menuItemPane = new dijit.layout.ContentPane({
                      id: menuContent.getValue(menuItem, "name"),
                      content: menuContent.getValue(menuItem, "label"),
                      "class": "menuItem",
                      url: menuContent.getValue(menuItem, "url", null),
                      loaded: menuContent.getValue(menuItem, "onLoad"),
                      type: menuContent.getValue(menuItem, "type"),
                      onClick: function() {
                        jumpToElement(menuContent.getValue(menuItem, "name"));
                      }
                    }, menuItemDiv);
                    if (menuItemPane.type == "external") {
                      var link_image = ' <img src="images/general/link_indi.gif"/>';
                      menuItemPane.attr("content", menuItemPane.content + link_image);
                    }
                    menuPane.containerNode.appendChild(menuItemDiv);
                  });
                  accord.addChild(menuPane);
                });
                // Might be able to use this later.
                // Using onShow event instead to display feature_url for each menu
                //dojo.subscribe(menuContent.getValue(tab, "name") + "Accord-selectChild", function(data) { alert('changed' + data.id); });
                accord.startup();
                accord.resize();

                // Initialize tab content
                var mainPane = dijit.byId(menuContent.getValue(tab, "name") + "Pane");
                if (mainPane) { mainPane.attr("href", menuContent.getValue(tab, "pane_url", null));}
              } catch (e) {
                menuError(e);
              }
            }
          }, tabDiv);
          var tabContainer = dijit.byId("tabs");
          tabContainer.addChild(tabPane);
          tabDiv.style.display = "block";
        });
        initUrl();
      } catch(e) {
        menuError(e);
      }
    },
    onError: menuError
  });
}

function initUrl() {
  var url = window.location.href;
  var parts = url.split("#");

  if(parts.length > 1) {
    var extension = parts[1];
    jumpToElement(extension);
  }
}

function jumpToElement(value, isStateTransition) {
  var element = 0;

  var elementIds = value.split("_");
  var menuItem = "";
  var parentWigits = ["tabs", elementIds[0] + "Accord", elementIds[0] + "Pane"];

  function displayPane(wigit, parentWigit) {
    if(wigit.url && wigit.type == "internal") {
      parentWigit.onLoad = function(){}
      if (wigit.loaded) { parentWigit.onLoad = wigit.loaded; }
      parentWigit.attr("href", wigit.url);
    } else if (wigit.url && wigit.type == "external") {
      window.open(wigit.url, 'new');
      //parentWigit.attr("content", wigit.url);
    }
  }
  function jumpNext() {
    menuItem += menuItem.length > 0 ? "_" + elementIds[element] : elementIds[element];
    var wigit = dijit.byId(menuItem);

    var parentWigit = dijit.byId(parentWigits[element]);
//if (!parentWigit) { alert (parentWigits[element] + " is not a wigit"); }
//if (!wigit) { alert (menuItem + " is not a wigit"); }
    if (wigit && parentWigit) {
      var connect;
      var selectNext = function() {
        if(element < 2) {
          parentWigit.selectChild(wigit);
        }
        element++;
        dojo.disconnect(connect);
        if (element >= elementIds.length) {
          displayPane(wigit, parentWigit);
        } else {
          jumpNext();
        }
      };

      if (wigit.href && !wigit.isLoaded) {
        connect = dojo.connect(wigit, "onLoad", selectNext);
        parentWigit.selectChild(wigit);
      } else {
        selectNext();
      }
    }
  }

  jumpNext();
  //dojo.back.addToHistory({changeUrl: value});
}

function drawSiteMap(parentNode) {
  var tabList = "";
  var siteMapDiv = dojo.doc.createElement("div");
  menuContent.fetch({
    query:{category:"tab"},
    onComplete: function(tabs){
      try {
        dojo.forEach(tabs, function(tab){
          var tabDiv = dojo.doc.createElement("div");
          dojo.html.set(tabDiv, menuContent.getValue(tab, "label"));
          tabList += menuContent.getValue(tab, "label") + " | ";
          var menus = menuContent.getValues(tab, "children");
          dojo.forEach(menus, function(menu, i){
            var menuDiv = dojo.doc.createElement("div");
            dojo.html.set(menuDiv, menuContent.getValue(menu, "label"));
            var menuItems = menuContent.getValues(menu, "children");
            dojo.forEach(menuItems, function(menuItem){
              var menuItemDiv = dojo.doc.createElement("div");
              dojo.html.set(menuItemDiv, menuContent.getValue(menuItem, "label"));
              menuDiv.appendChild(menuItemDiv);
            });
            tabDiv.appendChild(menuDiv);
          });
          siteMapDiv.appendChild(tabDiv);
        });
        tabList += '<span onClick="dojo.fx.wipeOut({node: dijit.byId(\'siteMap\').domNode, duration: 200});">Site Map</span>';
        var listDiv = dojo.doc.createElement("div");
        dojo.html.set(listDiv, tabList);
        parentNode.containerNode.appendChild(listDiv);
        parentNode.containerNode.appendChild(siteMapDiv);
      } catch(e) {
        menuError(e);
      }
    },
    onError: menuError
  });
}

function createNewTab(text, content) {
  var tabs = dijit.byId("tabs");
  var newTab;
  if (tabs.hasChildren()) {
    var found = false;
    dojo.forEach(tabs.getChildren(), function(tab) { if (tab.title == text) { found = true; newTab = tab; }});
    if (found) {
      tabs.selectChild(newTab);
      return;
    }
  }
  var newTab = new dijit.layout.ContentPane({ href:"", id: text + "_tab", title:text, refreshOnShow:true, closable: true, "class": "tabContent"}, dojo.doc.createElement("div"));
  tabs.addChild(newTab);
  newTab.startup();
  tabs.selectChild(newTab);
  if (content) {
    newTab.setContent(content);
  }
}

function menuError(e) {
  alert('There was an error loading the menu: ' + (e.cause ? e.cause.statusText : e.message));
}
