1920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonvar resizePackagesNav;
2920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonvar classesNav;
3920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonvar devdocNav;
4920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonvar sidenav;
5920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonvar content;
6920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonvar HEADER_HEIGHT = -1;
741d8656cf17e04b25a058d0874e401654ea547b4Dirk Doughertyvar cookie_namespace = 'doclava_developer';
8920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonvar NAV_PREF_TREE = "tree";
9920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonvar NAV_PREF_PANELS = "panels";
10920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonvar nav_pref;
11920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonvar toRoot;
12920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonvar isMobile = false; // true if mobile, so we can adjust some layout
13920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonvar isIE6 = false; // true if IE6
14920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
15920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson// TODO: use $(document).ready instead
16920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction addLoadEvent(newfun) {
17920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var current = window.onload;
18920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (typeof window.onload != 'function') {
19920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    window.onload = newfun;
20920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  } else {
21920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    window.onload = function() {
22920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      current();
23920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      newfun();
24920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
25920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
26920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
27920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
28920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonvar agent = navigator['userAgent'].toLowerCase();
29920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson// If a mobile phone, set flag and do mobile setup
30920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonif ((agent.indexOf("mobile") != -1) ||      // android, iphone, ipod
31920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    (agent.indexOf("blackberry") != -1) ||
32920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    (agent.indexOf("webos") != -1) ||
33920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    (agent.indexOf("mini") != -1)) {        // opera mini browsers
34920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  isMobile = true;
35920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  addLoadEvent(mobileSetup);
36920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson// If not a mobile browser, set the onresize event for IE6, and others
37920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson} else if (agent.indexOf("msie 6") != -1) {
38920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  isIE6 = true;
39920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  addLoadEvent(function() {
40920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    window.onresize = resizeAll;
41920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  });
42920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson} else {
43920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  addLoadEvent(function() {
44920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    window.onresize = resizeHeight;
45920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  });
46920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
47920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
48920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction mobileSetup() {
49920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("body").css({'overflow':'auto'});
50920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("html").css({'overflow':'auto'});
51920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("#body-content").css({'position':'relative', 'top':'0'});
52920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("#doc-content").css({'overflow':'visible', 'border-left':'3px solid #DDD'});
53920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("#side-nav").css({'padding':'0'});
54920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("#nav-tree").css({'overflow-y': 'auto'});
55920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
56920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
57920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson/* loads the lists.js file to the page.
58920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben DodsonLoading this in the head was slowing page load time */
59920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben DodsonaddLoadEvent( function() {
60920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var lists = document.createElement("script");
61920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  lists.setAttribute("type","text/javascript");
62920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  lists.setAttribute("src", toRoot+"reference/lists.js");
63920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  document.getElementsByTagName("head")[0].appendChild(lists);
64920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson} );
65920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
66920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben DodsonaddLoadEvent( function() {
67920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("pre:not(.no-pretty-print)").addClass("prettyprint");
68920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  prettyPrint();
69920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson} );
70920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
71920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction setToRoot(root) {
72920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  toRoot = root;
73920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  // note: toRoot also used by carousel.js
74920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
75920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
76920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction restoreWidth(navWidth) {
77920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var windowWidth = $(window).width() + "px";
78920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  content.css({marginLeft:parseInt(navWidth) + 6 + "px"}); //account for 6px-wide handle-bar
79920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
80920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (isIE6) {
81920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    content.css({width:parseInt(windowWidth) - parseInt(navWidth) - 6 + "px"}); // necessary in order for scrollbars to be visible
82920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
83920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
84920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  sidenav.css({width:navWidth});
85920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  resizePackagesNav.css({width:navWidth});
86920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  classesNav.css({width:navWidth});
87920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("#packages-nav").css({width:navWidth});
88920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
89920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
90920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction restoreHeight(packageHeight) {
91920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var windowHeight = ($(window).height() - HEADER_HEIGHT);
92920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var swapperHeight = windowHeight - 13;
93920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("#swapper").css({height:swapperHeight + "px"});
94920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  sidenav.css({height:windowHeight + "px"});
95920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  content.css({height:windowHeight + "px"});
96920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  resizePackagesNav.css({maxHeight:swapperHeight + "px", height:packageHeight});
97920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  classesNav.css({height:swapperHeight - parseInt(packageHeight) + "px"});
98920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("#packages-nav").css({height:parseInt(packageHeight) - 6 + "px"}); //move 6px to give space for the resize handle
99920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  devdocNav.css({height:sidenav.css("height")});
100920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("#nav-tree").css({height:swapperHeight + "px"});
101920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
102920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
103920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction readCookie(cookie) {
104920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var myCookie = cookie_namespace+"_"+cookie+"=";
105920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (document.cookie) {
106920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    var index = document.cookie.indexOf(myCookie);
107920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (index != -1) {
108920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      var valStart = index + myCookie.length;
109920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      var valEnd = document.cookie.indexOf(";", valStart);
110920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      if (valEnd == -1) {
111920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        valEnd = document.cookie.length;
112920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      }
113920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      var val = document.cookie.substring(valStart, valEnd);
114920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      return val;
115920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
116920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
117920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  return 0;
118920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
119920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
120920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction writeCookie(cookie, val, section, expiration) {
121920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (val==undefined) return;
122920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  section = section == null ? "_" : "_"+section+"_";
123920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (expiration == null) {
124920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    var date = new Date();
125920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
126920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    expiration = date.toGMTString();
127920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
128920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  document.cookie = cookie_namespace + section + cookie + "=" + val + "; expires=" + expiration+"; path=/";
129920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
130920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
131920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction getSection() {
132920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (location.href.indexOf("/reference/") != -1) {
133920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return "reference";
134920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  } else if (location.href.indexOf("/guide/") != -1) {
135920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return "guide";
136920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  } else if (location.href.indexOf("/resources/") != -1) {
137920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return "resources";
138920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
139920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var basePath = getBaseUri(location.pathname);
140920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  return basePath.substring(1,basePath.indexOf("/",1));
141920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
142920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
143920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction init() {
144920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  HEADER_HEIGHT = $("#header").height()+3;
145920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("#side-nav").css({position:"absolute",left:0});
146920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  content = $("#doc-content");
147920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  resizePackagesNav = $("#resize-packages-nav");
148920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  classesNav = $("#classes-nav");
149920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  sidenav = $("#side-nav");
150920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  devdocNav = $("#devdoc-nav");
151920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
152920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var cookiePath = getSection() + "_";
1533c1a6b2a6d80f02fa5460d9d8de356be5508de29Scott Main
154920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (!isMobile) {
155920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    $("#resize-packages-nav").resizable({handles: "s", resize: function(e, ui) { resizePackagesHeight(); } });
156920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    $(".side-nav-resizable").resizable({handles: "e", resize: function(e, ui) { resizeWidth(); } });
157920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    var cookieWidth = readCookie(cookiePath+'width');
158920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    var cookieHeight = readCookie(cookiePath+'height');
159920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (cookieWidth) {
160920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      restoreWidth(cookieWidth);
161920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else if ($(".side-nav-resizable").length) {
162920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      resizeWidth();
163920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
164920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (cookieHeight) {
165920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      restoreHeight(cookieHeight);
166920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else {
167920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      resizeHeight();
168920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
169920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
170920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
171920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (devdocNav.length) { // only dev guide, resources, and sdk
172920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    tryPopulateResourcesNav();
173920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    highlightNav(location.href);
174920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
175920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
176920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
177920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction highlightNav(fullPageName) {
178920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var lastSlashPos = fullPageName.lastIndexOf("/");
179920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var firstSlashPos;
180920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (fullPageName.indexOf("/guide/") != -1) {
181920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      firstSlashPos = fullPageName.indexOf("/guide/");
182920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else if (fullPageName.indexOf("/sdk/") != -1) {
183920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      firstSlashPos = fullPageName.indexOf("/sdk/");
184920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else {
185920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      firstSlashPos = fullPageName.indexOf("/resources/");
186920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
187920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (lastSlashPos == (fullPageName.length - 1)) { // if the url ends in slash (add 'index.html')
188920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    fullPageName = fullPageName + "index.html";
189920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
190920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  // First check if the exact URL, with query string and all, is in the navigation menu
191920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var pathPageName = fullPageName.substr(firstSlashPos);
192920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var link = $("#devdoc-nav a[href$='"+ pathPageName+"']");
193920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (link.length == 0) {
194920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    var htmlPos = fullPageName.lastIndexOf(".html", fullPageName.length);
195920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    pathPageName = fullPageName.slice(firstSlashPos, htmlPos + 5); // +5 advances past ".html"
196920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    link = $("#devdoc-nav a[href$='"+ pathPageName+"']");
197920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if ((link.length == 0) && ((fullPageName.indexOf("/guide/") != -1) || (fullPageName.indexOf("/resources/") != -1))) {
198920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      // if there's no match, then let's backstep through the directory until we find an index.html page
199920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      // that matches our ancestor directories (only for dev guide and resources)
200920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      lastBackstep = pathPageName.lastIndexOf("/");
201920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      while (link.length == 0) {
202920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        backstepDirectory = pathPageName.lastIndexOf("/", lastBackstep);
203920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        link = $("#devdoc-nav a[href$='"+ pathPageName.slice(0, backstepDirectory + 1)+"index.html']");
204920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        lastBackstep = pathPageName.lastIndexOf("/", lastBackstep - 1);
205920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        if (lastBackstep == 0) break;
206920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      }
207920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
208920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
209920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
210920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  // add 'selected' to the <li> or <div> that wraps this <a>
211920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  link.parent().addClass('selected');
212920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
213920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  // if we're in a toggleable root link (<li class=toggle-list><div><a>)
214920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (link.parent().parent().hasClass('toggle-list')) {
215920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    toggle(link.parent().parent(), false); // open our own list
216920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    // then also check if we're in a third-level nested list that's toggleable
217920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (link.parent().parent().parent().is(':hidden')) {
218920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      toggle(link.parent().parent().parent().parent(), false); // open the super parent list
219920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
220920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
221920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  // if we're in a normal nav link (<li><a>) and the parent <ul> is hidden
222920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  else if (link.parent().parent().is(':hidden')) {
223920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    toggle(link.parent().parent().parent(), false); // open the parent list
224920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    // then also check if the parent list is also nested in a hidden list
225920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (link.parent().parent().parent().parent().is(':hidden')) {
226920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      toggle(link.parent().parent().parent().parent().parent(), false); // open the super parent list
227920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
228920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
229920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
230920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
231920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson/* Resize the height of the nav panels in the reference,
232920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * and save the new size to a cookie */
233920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction resizePackagesHeight() {
234920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var windowHeight = ($(window).height() - HEADER_HEIGHT);
235920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var swapperHeight = windowHeight - 13; // move 13px for swapper link at the bottom
236920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  resizePackagesNav.css({maxHeight:swapperHeight + "px"});
237920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  classesNav.css({height:swapperHeight - parseInt(resizePackagesNav.css("height")) + "px"});
238920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
239920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("#swapper").css({height:swapperHeight + "px"});
240920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("#packages-nav").css({height:parseInt(resizePackagesNav.css("height")) - 6 + "px"}); //move 6px for handle
241920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
242920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var section = getSection();
243920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  writeCookie("height", resizePackagesNav.css("height"), section, null);
244920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
245920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
246920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson/* Resize the height of the side-nav and doc-content divs,
247920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * which creates the frame effect */
248920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction resizeHeight() {
249920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var docContent = $("#doc-content");
250920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
251920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  // Get the window height and always resize the doc-content and side-nav divs
252920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var windowHeight = ($(window).height() - HEADER_HEIGHT);
253920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  docContent.css({height:windowHeight + "px"});
254920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("#side-nav").css({height:windowHeight + "px"});
255920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
256920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var href = location.href;
257920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  // If in the reference docs, also resize the "swapper", "classes-nav", and "nav-tree"  divs
258920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (href.indexOf("/reference/") != -1) {
259920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    var swapperHeight = windowHeight - 13;
260920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    $("#swapper").css({height:swapperHeight + "px"});
261920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    $("#classes-nav").css({height:swapperHeight - parseInt(resizePackagesNav.css("height")) + "px"});
262920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    $("#nav-tree").css({height:swapperHeight + "px"});
263920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
264920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  // If in the dev guide docs, also resize the "devdoc-nav" div
265920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  } else if (href.indexOf("/guide/") != -1) {
266920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    $("#devdoc-nav").css({height:sidenav.css("height")});
267920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  } else if (href.indexOf("/resources/") != -1) {
268920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    $("#devdoc-nav").css({height:sidenav.css("height")});
269920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
270920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
271920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  // Hide the "Go to top" link if there's no vertical scroll
272920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if ( parseInt($("#jd-content").css("height")) <= parseInt(docContent.css("height")) ) {
273920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    $("a[href='#top']").css({'display':'none'});
274920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  } else {
275920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    $("a[href='#top']").css({'display':'inline'});
276920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
277920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
278920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
279920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson/* Resize the width of the "side-nav" and the left margin of the "doc-content" div,
280920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * which creates the resizable side bar */
281920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction resizeWidth() {
282920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var windowWidth = $(window).width() + "px";
283920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (sidenav.length) {
284920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    var sidenavWidth = sidenav.css("width");
285920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  } else {
286920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    var sidenavWidth = 0;
287920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
288920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  content.css({marginLeft:parseInt(sidenavWidth) + 6 + "px"}); //account for 6px-wide handle-bar
289920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
290920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (isIE6) {
291920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    content.css({width:parseInt(windowWidth) - parseInt(sidenavWidth) - 6 + "px"}); // necessary in order to for scrollbars to be visible
292920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
293920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
294920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  resizePackagesNav.css({width:sidenavWidth});
295920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  classesNav.css({width:sidenavWidth});
296920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("#packages-nav").css({width:sidenavWidth});
297920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
298920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if ($(".side-nav-resizable").length) { // Must check if the nav is resizable because IE6 calls resizeWidth() from resizeAll() for all pages
299920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    var section = getSection();
300920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    writeCookie("width", sidenavWidth, section, null);
301920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
302920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
303920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
304920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson/* For IE6 only,
305920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * because it can't properly perform auto width for "doc-content" div,
306920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * avoiding this for all browsers provides better performance */
307920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction resizeAll() {
308920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  resizeHeight();
309920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  resizeWidth();
310920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
311920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
312920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction getBaseUri(uri) {
313920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var intlUrl = (uri.substring(0,6) == "/intl/");
314920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (intlUrl) {
315920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    base = uri.substring(uri.indexOf('intl/')+5,uri.length);
316920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    base = base.substring(base.indexOf('/')+1, base.length);
317920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      //alert("intl, returning base url: /" + base);
318920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return ("/" + base);
319920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  } else {
320920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      //alert("not intl, returning uri as found.");
321920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return uri;
322920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
323920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
324920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
325920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction requestAppendHL(uri) {
326920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson//append "?hl=<lang> to an outgoing request (such as to blog)
327920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var lang = getLangPref();
328920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (lang) {
329920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    var q = 'hl=' + lang;
330920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    uri += '?' + q;
331920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    window.location = uri;
332920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return false;
333920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  } else {
334920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return true;
335920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
336920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
337920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
338920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction loadLast(cookiePath) {
339920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var location = window.location.href;
340920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (location.indexOf("/"+cookiePath+"/") != -1) {
341920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return true;
342920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
343920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var lastPage = readCookie(cookiePath + "_lastpage");
344920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (lastPage) {
345920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    window.location = lastPage;
346920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return false;
347920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
348920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  return true;
349920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
350920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
351920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson$(window).unload(function(){
352920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var path = getBaseUri(location.pathname);
353920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (path.indexOf("/reference/") != -1) {
354920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    writeCookie("lastpage", path, "reference", null);
355920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  } else if (path.indexOf("/guide/") != -1) {
356920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    writeCookie("lastpage", path, "guide", null);
357920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  } else if (path.indexOf("/resources/") != -1) {
358920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    writeCookie("lastpage", path, "resources", null);
359920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
360920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson});
361920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
362920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction toggle(obj, slide) {
363920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var ul = $("ul:first", obj);
364920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var li = ul.parent();
365920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (li.hasClass("closed")) {
366920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (slide) {
367920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      ul.slideDown("fast");
368920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else {
369920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      ul.show();
370920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
371920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    li.removeClass("closed");
372920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    li.addClass("open");
373920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    $(".toggle-img", li).attr("title", "hide pages");
374920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  } else {
375920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    ul.slideUp("fast");
376920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    li.removeClass("open");
377920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    li.addClass("closed");
378920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    $(".toggle-img", li).attr("title", "show pages");
379920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
380920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
381920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
382920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction buildToggleLists() {
383920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $(".toggle-list").each(
384920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    function(i) {
385920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      $("div:first", this).append("<a class='toggle-img' href='#' title='show pages' onClick='toggle(this.parentNode.parentNode, true); return false;'></a>");
386920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      $(this).addClass("closed");
387920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    });
388920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
389920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
390920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction getNavPref() {
391920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var v = readCookie('reference_nav');
392920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (v != NAV_PREF_TREE) {
393920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    v = NAV_PREF_PANELS;
394920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
395920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  return v;
396920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
397920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
398920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction chooseDefaultNav() {
399920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  nav_pref = getNavPref();
400920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (nav_pref == NAV_PREF_TREE) {
401920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    $("#nav-panels").toggle();
402920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    $("#panel-link").toggle();
403920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    $("#nav-tree").toggle();
404920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    $("#tree-link").toggle();
405920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
406920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
407920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
408920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction swapNav() {
409920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (nav_pref == NAV_PREF_TREE) {
410920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    nav_pref = NAV_PREF_PANELS;
411920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  } else {
412920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    nav_pref = NAV_PREF_TREE;
413920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    init_default_navtree(toRoot);
414920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
415920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var date = new Date();
416920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  date.setTime(date.getTime()+(10*365*24*60*60*1000)); // keep this for 10 years
417920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  writeCookie("nav", nav_pref, "reference", date.toGMTString());
418920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
419920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("#nav-panels").toggle();
420920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("#panel-link").toggle();
421920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("#nav-tree").toggle();
422920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("#tree-link").toggle();
423920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
424920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if ($("#nav-tree").is(':visible')) scrollIntoView("nav-tree");
425920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  else {
426920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    scrollIntoView("packages-nav");
427920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    scrollIntoView("classes-nav");
428920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
429920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
430920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
431920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction scrollIntoView(nav) {
432920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var navObj = $("#"+nav);
433920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (navObj.is(':visible')) {
434920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    var selected = $(".selected", navObj);
435920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (selected.length == 0) return;
436920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (selected.is("div")) selected = selected.parent();
437920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
438920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    var scrolling = document.getElementById(nav);
439920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    var navHeight = navObj.height();
440920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    var offsetTop = selected.position().top;
441920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (selected.parent().parent().is(".toggle-list")) offsetTop += selected.parent().parent().position().top;
442920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if(offsetTop > navHeight - 92) {
443920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      scrolling.scrollTop = offsetTop - navHeight + 92;
444920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
445920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
446920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
447920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
448920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction changeTabLang(lang) {
449920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var nodes = $("#header-tabs").find("."+lang);
450920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  for (i=0; i < nodes.length; i++) { // for each node in this language
451920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    var node = $(nodes[i]);
452920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    node.siblings().css("display","none"); // hide all siblings
453920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (node.not(":empty").length != 0) { //if this languages node has a translation, show it
454920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      node.css("display","inline");
455920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else { //otherwise, show English instead
456920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      node.css("display","none");
457920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      node.siblings().filter(".en").css("display","inline");
458920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
459920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
460920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
461920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
462920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction changeNavLang(lang) {
463920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var nodes = $("#side-nav").find("."+lang);
464920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  for (i=0; i < nodes.length; i++) { // for each node in this language
465920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    var node = $(nodes[i]);
466920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    node.siblings().css("display","none"); // hide all siblings
467920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (node.not(":empty").length != 0) { // if this languages node has a translation, show it
468920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      node.css("display","inline");
469920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else { // otherwise, show English instead
470920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      node.css("display","none");
471920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      node.siblings().filter(".en").css("display","inline");
472920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
473920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
474920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
475920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
476920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction changeDocLang(lang) {
477920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  changeTabLang(lang);
478920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  changeNavLang(lang);
479920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
480920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
481920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction changeLangPref(lang, refresh) {
482920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var date = new Date();
483920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  expires = date.toGMTString(date.setTime(date.getTime()+(10*365*24*60*60*1000))); // keep this for 50 years
484920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  //alert("expires: " + expires)
485920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  writeCookie("pref_lang", lang, null, expires);
486920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  //changeDocLang(lang);
487920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (refresh) {
488920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    l = getBaseUri(location.pathname);
489920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    window.location = l;
490920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
491920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
492920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
493920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction loadLangPref() {
494920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var lang = readCookie("pref_lang");
495920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (lang != 0) {
496920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    $("#language").find("option[value='"+lang+"']").attr("selected",true);
497920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
498920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
499920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
500920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction getLangPref() {
501920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var lang = $("#language").find(":selected").attr("value");
502920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (!lang) {
503920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    lang = readCookie("pref_lang");
504920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
505920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  return (lang != 0) ? lang : 'en';
506920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
507920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
508920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
509920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonfunction toggleContent(obj) {
510920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var button = $(obj);
511920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var div = $(obj.parentNode);
512920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  var toggleMe = $(".toggle-content-toggleme",div);
513920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  if (button.hasClass("show")) {
514920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    toggleMe.slideDown();
515920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    button.removeClass("show").addClass("hide");
516920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  } else {
517920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    toggleMe.slideUp();
518920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    button.removeClass("hide").addClass("show");
519920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
520920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  $("span", button).toggle();
5213c1a6b2a6d80f02fa5460d9d8de356be5508de29Scott Main}