function setUpTabAnimationAndNavigation() {
  initializePreviousLinkClass();
  removeLastDividerLine();
  setupNavigationLinks();
  setUpTabAnimationMagicClickSauce();
  setUpNecessaryNonStompageClasses();
}

var selectedTabClassname     = "ui-tabs-selected";
var activeTabClassname       = "ui-state-active";
var disabledNavLinkClassname = "disabled";

function initializePreviousLinkClass() {
  $('ul.next-prev li.prev').addClass(disabledNavLinkClassname);
}

function removeLastDividerLine() {
  $('ul.tab-wrap li:last a').css('background', 'none');
}

function setupNavigationLinks() {
  
  $('ul.next-prev li').click(cycleTabSelectionFromNextPrevLinks);
  
  function cycleTabSelectionFromNextPrevLinks() {
    var elemIndex = getSelectedElementIndex();
    var maxTabIndex = getMaxTabIndex();
    
    if (thisIsPreviousLink(this)) {
      if (elemIndex == 0) {
        return false;
      } else {
        elemIndex--;
      }
    } else if (thisIsNextLink(this)) {
      if (elemIndex == maxTabIndex) {
        return false;
      } else {
        elemIndex++;
      }      
    }
    
    if (elemIndex == 0 || elemIndex == maxTabIndex) {
      disableNavigationLink(this);
    }
    
    clickTabAtIndex(elemIndex);
    
    return false;
  } 
  
  function thisIsPreviousLink(thisobj) {
    return $(thisobj).hasClass("prev");
  }
  
  function thisIsNextLink(thisobj) {
    return $(thisobj).hasClass("next");
  }
  
  function clickTabAtIndex(elemIndex) {
    $('ul.tab-wrap li:eq(' + elemIndex + ') a').click();
  }
  
  function disableNavigationLink(linkElem) {
    $(linkElem).addClass(disabledNavLinkClassname);
  }
}

function setUpTabAnimationMagicClickSauce() {
  $('ul.tab-wrap li a').click(function() {    
    $('.jquery-tab-container').stop().animate({
      backgroundPosition: '(1px ' + $(this).parent().position().top + 'px)'
    }, {duration:200});
    
    $('ul.tab-wrap li a').removeClass('no-line');
    $(this).parent().prev().find('a').addClass('no-line');  
    
    var selectedElemIndex = getSelectedElementIndex( $(this).parent() );
    var maxTabIndex = getMaxTabIndex();
    
    $('ul.next-prev li').removeClass(disabledNavLinkClassname);
    
    if (selectedElemIndex == 0) {
      $('ul.next-prev li.prev').addClass(disabledNavLinkClassname);
    }
    else if (selectedElemIndex == maxTabIndex) {
      $('ul.next-prev li.next').addClass(disabledNavLinkClassname);
    }  
    
  });
}
  
function getSelectedElementIndex(elem) {
  var selectedElem;
  
  if (typeof(elem) == 'undefined') {
    selectedElem = $('li.' + selectedTabClassname);
  } else {
    selectedElem = elem;
  }

  var elemIndex = 0;
  
  $('ul.tab-wrap li').each(function(index) {
    if (this == selectedElem[0]) {
      elemIndex = index;
      return false;
    }
  });

  return elemIndex;
}

function getMaxTabIndex() {
  return $('ul.tab-wrap li').length - 1;
}

function setUpNecessaryNonStompageClasses() {
  $('ul.tab-wrap li a').addClass('jquery-tabs');
  $('#tabs').addClass('jquery-tab-container');
}

$(function() {
  // Homepage Flipper
  setUpTabAnimationAndNavigation();
});
