var Slideshow = function(element) {
  var container        = $(element).height('400px'),
      pagination       = $('.pagination', container).children().not('.next_page, .prev_page'),
      length           = pagination.length,
      currentPage      = $('.main-focus', container).addClass('page-1').css('margin-top', '0'),
      pageContainer    = $("<div id='slideshow-wrap' />").css({
                           margin: '-4.5em -15px 0',
                           padding: '0 15px',
                           height: '400px',
                           width: '100%',
                           position: 'relative'
                         }),
      pages            = [],
      currentPageIndex = 1;
  
  currentPage.wrap(pageContainer);
  pagination.each(function(i, elem) {
    var $elem = $(elem);
    if ($elem.hasClass('current')) {
      currentPageIndex = i + 1;
      pages[i] = currentPage;
    }
    
    $elem.click(function(e) {
      if (self.timer) { stop(); };
      goToPage(i + 1);
      e.preventDefault();
      e.stopPropagation();
    });
  });
  
  function nextPage () { return currentPageIndex >= length ? 1 : currentPageIndex + 1; }
  function prevPage () { return currentPageIndex === 0 ? length - 1 : currentPageIndex - 1; }
  
  function start () { if (length > 1) self.timer = setInterval(next, 5000); }
  function stop () { if (self.timer) clearInterval(self.timer); }
  
  function next () { goToPage(nextPage()); }
  function prev () { goToPage(prevPage()); }
  
  function goToPage (page) {
    pages[page - 1] === undefined ? getPage(page) : showPage(page);
  }
  
  function getPage (page) {
    $.ajax({
      url: '/?format=js&page=' + page,
      success: function(data, response){
        if (data.length > 1) {
          pages[page - 1] = $(data).addClass('page-' + page).css('margin-top', '0');
          showPage(page);
        } else {
          showPage(1);
        };
      }
    });
  }
  
  function showPage (page) {
    var newPage = pages[page - 1];
    if (newPage != currentPage) {
      newPage.hide().insertAfter(currentPage).queue(function() {
        var attrs = {
          position: 'absolute',
          top: 0,
          width: '100%',
          height: '400px'
        };
        currentPage.css(attrs).fadeOut(2000, function() {
          currentPage.remove();
        });
        newPage.css(attrs).fadeIn(2000);
      
        pagination.removeClass('current');
        $(pagination[page - 1]).addClass('current');

        newPage.dequeue();
      }).queue(function() {
        newPage.css('position', 'relative');
        currentPage.css('position', 'relative');
        currentPage = newPage;
        currentPageIndex = page;
        newPage.dequeue();
      });
      $(document).trigger('slideshow.showPage');
    };
  }
  
  var self = {
    start: start,
    stop: stop,
    next: next,
    prev: prev
  };
  
  return self;
};

function cornerizeMainLink () {
  $('.main_link').corners();
}

$(document).ready(function() {
  cornerizeMainLink();
  $(document).bind('slideshow.showPage', cornerizeMainLink);
  window.slideshow = new Slideshow('#inner-wrap');
  window.slideshow.start();
});
