jQuery(function ($) {
  var $nav = $('#articleNav');
  
  if ( $nav.length ) {
    var $nextArticle = $('<span id="nextArticle"><span /><span class="edge" /></span>').css('opacity', 0);
    
    $nav.after( $nextArticle );
    
    $nextArticle.hover(function (event) {
      event.stopPropagation();
    });
    
    $nav.find('a').hover(function () {
      $nextArticle.find('span:first').html( $(this).html() ).end().stop().fadeTo(100, 1);
    }, function (event) {
      $nextArticle.stop().fadeTo(500, 0);
    });
  }

  var $viewport = $('#viewport'),
      hash = window.location.hash;
  
  if ($viewport.length) {
    var $articleNav = $('ul.articleNav a').click(function () {
      var el = this;
      $viewport.removeClass().addClass(this.className); // FIXME also includes 'selected'
      
      var parent = $(this).parent().get(0);
      $articleNav.parent().removeClass('selected').filter(function () {
        return (this == parent);
      }).addClass('selected');
      return false;
    });
  }

  // search hooks
  var $hidden = $([]);
  $('#filter a[hash=#searchForm]').click(function () {
    if ( $('#searchForm').is(':hidden') ) {
      $hidden = $('#titleHolder').find('> div > *:not(#searchForm)').hide();
      $('#searchForm').show();      
    } else {
      $('#searchForm').hide();
      $hidden.show();     
    }
    
    return false;
  });

  $('#searchForm fieldset')
    .append('<p>or <a class="cancel" href="#">cancel</a></p>')
    .find('.cancel')
    .click(function () {
      $('#searchForm').hide();
      $hidden.show();
      return false;
    });

  
  // handle viewing videos
  $('a.flash_video').click(function (event) {
    var src = this.href.split('/'),
        file = src[src.length-1];
    window.location = 'http://jqueryfordesigners.com/video.php?f=' + file;
    event.preventDefault();
  });
  
  // de-encode email addys
  $('a.email').each(function () {
    var origEmail = this.href.replace(/^mailto:/, '');
    var email = origEmail.replace(/[a-zA-Z]/g, function(c) {
      return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26);
    });
    
    this.innerHTML = this.innerHTML.replace(origEmail, email);
    this.href = 'mailto:' + email;
  });

  // clean up overflow
  if ($.browser.msie) {
    $('pre').each(function () {
      if (this.scrollWidth > this.offsetWidth) {
        $(this).css({ 'overflow-y' : 'hidden', 'padding-bottom' : '20px' });
      }
    });
  }
});
