/**
 * Fancy navigation script.
 */
$(function() {
  $('#nav li')
    .find('a')
    .each(function(linkIndex, link) {
      var linkQuery = $(link).css({color: '#003'});
      var textQuery = $('<div/>').text(linkQuery.text());
      var timer;
      var currentValue = 0;
      var animate = function(increment) {
        clearTimeout(timer);
        currentValue += increment;
        var tween = function(start, end) {
          var low = Math.atan(2);
          var value = (Math.atan(4 * (currentValue - 0.5)) + low) / low / 2;
          return Math.round(17 * (start + (end - start) * value));
        };
        linkQuery.css({
          background: 'rgb(' + tween(1, 2) + ', ' + tween(2, 4) + ', ' + tween(8, 12) + ')',
          color: 'rgb(' + tween(0, 0) + ', ' + tween(1, 0) + ', ' + tween(4, 0) + ')'});
        textQuery.css({
          color: 'rgb(' + tween(11, 15) + ', ' + tween(12, 15) + ', ' + tween(14, 15) + ')'});
        if (currentValue > 0 && currentValue < 1) {
          timer = setTimeout(function() {
            animate(increment);
          }, 30);
        }
      };
      linkQuery
        .prepend(textQuery)
        .hover(function() {
          animate(0.1);
        },function() {
          animate(-0.1);
        });
    })

  $('#head,#foot').css({opacity: 0.7});
  $('#nav').css({opacity: 0.9});

  $('ol li').each(function(itemIndex, item) {
  	var itemQuery = $(item);
	var expanded = 0;
	var hovering = 0;
	itemQuery.find('div').each(function(divIndex, div) {
		var divQuery = $(div);
		var toggleQuery = $('<tt/>');
		
		var updateToggle = function() {
			itemQuery.css({background: hovering ? '#ffd' : '#fff'});
			console.log((expanded ? 'bottom' : 'top') + ' ' + (hovering ? 'right' : 'left'));
			toggleQuery.css({backgroundPosition: (expanded ? 'bottom' : 'top') + ' ' + (hovering ? 'right' : 'left')});
		};
		
		var toggle = function() {
			divQuery.toggle();
			updateToggle(expanded = !expanded);
		};
		itemQuery
			.prepend(toggleQuery)
			.hover(function() {
				updateToggle(hovering = true);
			}, function() {
				updateToggle(hovering = false);
			})
			.click(toggle)
			.find('a').click(toggle);
	});
  });
});