(function() {

var localStorage = {}, sessionStorage = {}; try { localStorage = window.localStorage; } catch (e) { } try { sessionStorage = window.sessionStorage; } catch (e) { }

function createSourceLinks() {

$('.method_details_list .source_code').
    before("<span class='showSource'>[<a href='#' class='toggleSource'>View source</a>]</span>");
$('.toggleSource').toggle(function() {
   $(this).parent().nextAll('.source_code').slideDown(100);
   $(this).text("Hide source");
},
function() {
    $(this).parent().nextAll('.source_code').slideUp(100);
    $(this).text("View source");
});

}

function createDefineLinks() {

var tHeight = 0;
$('.defines').after(" <a href='#' class='toggleDefines'>more...</a>");
$('.toggleDefines').toggle(function() {
    tHeight = $(this).parent().prev().height();
    $(this).prev().css('display', 'inline');
    $(this).parent().prev().height($(this).parent().height());
    $(this).text("(less)");
},
function() {
    $(this).prev().hide();
    $(this).parent().prev().height(tHeight);
    $(this).text("more...");
});

}

function createFullTreeLinks() {

var tHeight = 0;
$('.inheritanceTree').toggle(function() {
    tHeight = $(this).parent().prev().height();
    $(this).parent().toggleClass('showAll');
    $(this).text("(hide)");
    $(this).parent().prev().height($(this).parent().height());
},
function() {
    $(this).parent().toggleClass('showAll');
    $(this).parent().prev().height(tHeight);
    $(this).text("show all");
});

}

function searchFrameButtons() {

$('.full_list_link').click(function() {
  toggleSearchFrame(this, $(this).attr('href'));
  return false;
});
window.addEventListener('message', function(e) {
  if (e.data === 'navEscape') {
    $('#nav').slideUp(100);
    $('#search a').removeClass('active inactive');
    $(window).focus();
  }
});

$(window).resize(function() {
  if ($('#search:visible').length === 0) {
    $('#nav').removeAttr('style');
    $('#search a').removeClass('active inactive');
    $(window).focus();
  }
});

}

function toggleSearchFrame(id, link) {

var frame = $('#nav');
$('#search a').removeClass('active').addClass('inactive');
if (frame.attr('src') === link && frame.css('display') !== "none") {
  frame.slideUp(100);
  $('#search a').removeClass('active inactive');
}
else {
  $(id).addClass('active').removeClass('inactive');
  if (frame.attr('src') !== link) frame.attr('src', link);
  frame.slideDown(100);
}

}

function linkSummaries() {

$('.summary_signature').click(function() {
  document.location = $(this).find('a').attr('href');
});

}

function summaryToggle() {

$('.summary_toggle').click(function(e) {
  e.preventDefault();
  localStorage.summaryCollapsed = $(this).text();
  $('.summary_toggle').each(function() {
    $(this).text($(this).text() == "collapse" ? "expand" : "collapse");
    var next = $(this).parent().parent().nextAll('ul.summary').first();
    if (next.hasClass('compact')) {
      next.toggle();
      next.nextAll('ul.summary').first().toggle();
    }
    else if (next.hasClass('summary')) {
      var list = $('<ul class="summary compact" />');
      list.html(next.html());
      list.find('.summary_desc, .note').remove();
      list.find('a').each(function() {
        $(this).html($(this).find('strong').html());
        $(this).parent().html($(this)[0].outerHTML);
      });
      next.before(list);
      next.toggle();
    }
  });
  return false;
});
if (localStorage.summaryCollapsed == "collapse") {
  $('.summary_toggle').first().click();
} else { localStorage.summaryCollapsed = "expand"; }

}

function generateTOC() {

if ($('#filecontents').length === 0) return;
var _toc = $('<ol class="top"></ol>');
var show = false;
var toc = _toc;
var counter = 0;
var tags = ['h2', 'h3', 'h4', 'h5', 'h6'];
var i;
if ($('#filecontents h1').length > 1) tags.unshift('h1');
for (i = 0; i < tags.length; i++) { tags[i] = '#filecontents ' + tags[i]; }
var lastTag = parseInt(tags[0][1], 10);
$(tags.join(', ')).each(function() {
  if ($(this).parents('.method_details .docstring').length != 0) return;
  if (this.id == "filecontents") return;
  show = true;
  var thisTag = parseInt(this.tagName[1], 10);
  if (this.id.length === 0) {
    var proposedId = $(this).attr('toc-id');
    if (typeof(proposedId) != "undefined") this.id = proposedId;
    else {
      var proposedId = $(this).text().replace(/[^a-z0-9-]/ig, '_');
      if ($('#' + proposedId).length > 0) { proposedId += counter; counter++; }
      this.id = proposedId;
    }
  }
  if (thisTag > lastTag) {
    for (i = 0; i < thisTag - lastTag; i++) {
      var tmp = $('<ol/>'); toc.append(tmp); toc = tmp;
    }
  }
  if (thisTag < lastTag) {
    for (i = 0; i < lastTag - thisTag; i++) toc = toc.parent();
  }
  var title = $(this).attr('toc-title');
  if (typeof(title) == "undefined") title = $(this).text();
  toc.append('<li><a href="#' + this.id + '">' + title + '</a></li>');
  lastTag = thisTag;
});
if (!show) return;
html = '<div id="toc"><p class="title hide_toc"><a href="#"><strong>Table of Contents</strong></a></p></div>';
$('#content').prepend(html);
$('#toc').append(_toc);
$('#toc .hide_toc').toggle(function() {
  $('#toc .top').slideUp('fast');
  $('#toc').toggleClass('hidden');
  $('#toc .title small').toggle();
}, function() {
  $('#toc .top').slideDown('fast');
  $('#toc').toggleClass('hidden');
  $('#toc .title small').toggle();
});

}

function navResizeFn(e) {

if (e.which !== 1) {
  navResizeFnStop();
  return;
}

sessionStorage.navWidth = e.pageX.toString();
$('.nav_wrap').css('width', e.pageX);
$('.nav_wrap').css('-ms-flex', 'inherit');

}

function navResizeFnStop() {

$(window).unbind('mousemove', navResizeFn);
window.removeEventListener('message', navMessageFn, false);

}

function navMessageFn(e) {

if (e.data.action === 'mousemove') navResizeFn(e.data.event);
if (e.data.action === 'mouseup') navResizeFnStop();

}

function navResizer() {

$('#resizer').mousedown(function(e) {
  e.preventDefault();
  $(window).mousemove(navResizeFn);
  window.addEventListener('message', navMessageFn, false);
});
$(window).mouseup(navResizeFnStop);

if (sessionStorage.navWidth) {
  navResizeFn({which: 1, pageX: parseInt(sessionStorage.navWidth, 10)});
}

}

function navExpander() {

var done = false, timer = setTimeout(postMessage, 500);
function postMessage() {
  if (done) return;
  clearTimeout(timer);
  var opts = { action: 'expand', path: pathId };
  document.getElementById('nav').contentWindow.postMessage(opts, '*');
  done = true;
}

window.addEventListener('message', function(event) {
  if (event.data === 'navReady') postMessage();
  return false;
}, false);

}

function mainFocus() {

var hash = window.location.hash;
if (hash !== '' && $(hash)[0]) {
  $(hash)[0].scrollIntoView();
}

setTimeout(function() { $('#main').focus(); }, 10);

}

$(document).ready(function() {

navResizer();
navExpander();
createSourceLinks();
createDefineLinks();
createFullTreeLinks();
searchFrameButtons();
linkSummaries();
summaryToggle();
generateTOC();
mainFocus();

});

})();