var daily = {
  init: function(){
    this.layout.sidebar.adjustMargin();
    this.layout.summaries.setPreviewHeight(this.layout.summaries.lineHeight()*3);
    this.layout.featured.setPreviewHeight(this.layout.featured.lineHeight()*7);
    this.rotor.featured.rotate();
    this.rotor.single.rotate();
    this.rotor.pages.init(this.rotor.featured)
    this.rotor.pages.init(this.rotor.single)
    
  },
  layout: {
    sidebar: {
      adjustMargin: function(){
        var currentSidebarHeight = $("#commoners aside").height();
        var previewHeight = $("#commoners article.preview").outerHeight(true); // true = include margins
        var numberOfBricks = currentSidebarHeight/previewHeight;
        var mortarPercentageRequired = Math.ceil(numberOfBricks) - numberOfBricks;
        var mortarRequired = Math.round(previewHeight * mortarPercentageRequired);
        $("#commoners aside").css('marginBottom', mortarRequired);
      }
    },
    summaries: {
      lineHeight:function(){
        var testSubject = $("article.preview:first .copy");
        var saveContent = testSubject.html();
        testSubject.html("x");
        var lineHeight = testSubject.height();
        testSubject.html(saveContent)
        return lineHeight
      },
      setPreviewHeight:function(height){
        $("article.preview .body").height(height);
      }
    },
    featured: {
      lineHeight:function(){
        var testSubject = $("#featured_articles article.featured:first .copy");
        var saveContent = testSubject.html();
        testSubject.html("x");
        var lineHeight = testSubject.height();
        testSubject.html(saveContent)
        return lineHeight
      },
      setPreviewHeight:function(height){
        $("#featured_articles article.featured .body").height(height);
        $("#featured_articles article.featured .body p").css('margin', 0)
      }
    }
  },
  rotor: {
    featured: {
      articles:null, 
      interval: null,
      init: function(){
        this.articles = $("#featured_articles article.featured");
        this.slide = $("#featured_articles .slide")
        var slideLength=0;
        this.articles
        .css('float', 'left')
        .each(function(n){
          slideLength += $(this).outerWidth(true)
          $(this).addClass('page-'+(n+1))
        })
        this.slide.css('width', slideLength);
        this.interval = setInterval(function(){daily.rotor.featured.rotate();}, 6000);//this.rotate();
        
        $("#featured_articles").mouseover(function(){
          if(daily.rotor.featured.interval){
            clearInterval(daily.rotor.featured.interval)
            daily.rotor.featured.interval = null
          }
        })
        $("#featured_articles").mouseleave(function(){
          if(!daily.rotor.featured.interval){
            daily.rotor.featured.interval = setInterval(function(){daily.rotor.featured.rotate();}, 6000);//this.rotate();
          }
        })
        
        
        
      },
      rotate: function(){
        if(this.articles){
          var articles = this.articles;
          var slide = this.slide;
          init = this.init
          slide
          .animate({
            marginLeft:-articles.first().width()
          }, {
            duration:"slow",
            complete:function(){
              slide.append($("#featured_articles article.featured").first())
              slide.css('marginLeft',0)
              daily.rotor.pages.highlight(daily.rotor.featured);
            }
          })
        } else {
          this.init();
        }
      }
    },
    single: {
      articles:null,
      interval:null,
      init: function(){
        this.articles = $("#featured_images .image");
        this.slide = $("#featured_images .slide")
        var slideLength=0;
        this.articles
        .css('float', 'left')
        .each(function(n){
          slideLength += $(this).outerWidth(true)
          $(this).addClass('page-'+(n+1))
        })
        this.slide.css('width', slideLength);
        this.interval = setInterval(function(){daily.rotor.single.rotate();}, 6000);//this.rotate();
        
        $("#featured_images").mouseover(function(){
          if(daily.rotor.single.interval){
            clearInterval(daily.rotor.single.interval)
            daily.rotor.single.interval = null
          }
        })
        $("#featured_images").mouseleave(function(){
          if(!daily.rotor.single.interval){
            daily.rotor.single.interval = setInterval(function(){daily.rotor.single.rotate();}, 6000);//this.rotate();
          }
        })
        
      },
      rotate: function(){
        
        if(this.articles){
          if(this.articles.length<=1) return
          var images = this.articles;
          var slide = this.slide;
          slide
          .animate({
            marginLeft:-images.first().width()
          }, {
            duration:"slow",
            complete:function(){
              slide.append($("#featured_images .image").first());
              slide.css('marginLeft', 0);
              daily.rotor.pages.highlight(daily.rotor.single);
            }
          })
        } else {
          this.init();
        }
      }
    },
    pages: {
      init: function(obj){
        if(obj.articles.length<=1) return 
         pageSelector = $(document.createElement("div")).addClass('pagination');
         for(i=0; i<obj.articles.length; i++){
           $(document.createElement("a"))
            .attr('href', '#')
            .addClass('page-'+(i+1))
            .text(i+1)
            .appendTo(pageSelector);
         }
         pageSelector
         .css('display','none')
         .insertBefore(obj.slide)
         .fadeIn();
         pageSelector.find('a:first').addClass('current')
         pageSelector.find('a').click(function(){
           var selectedPageButton = this;
           var slide = $(this).parent().parent().find('.slide')
           var selected = $(this).attr('class').match(/page-([0-9]+)/)[1];
           var current = slide.children().first().attr('class').match(/page-([0-9]+)/)[1];
           var excessToScroll = 0;
           var beforeRequested = slide.find('.page-'+selected).prevAll();
           beforeRequested.each(function(){
             excessToScroll += $(this).outerWidth(true);
           })
           slide
           .animate({
             marginLeft:-excessToScroll
           },{
             duration:"slow",
             complete:function(){
               beforeRequested.each(function(){
                 $(slide).css('marginLeft', 0);
                 $(this).appendTo(slide)
               })
               
               $(selectedPageButton).parent().find('a').removeClass('current')
               $(selectedPageButton).addClass('current')
              
             }
           })
           
           
           return false;
         })
         
      },
      highlight: function(obj){
        var current = $(obj.articles.selector).first().attr('class').match(/page-([0-9]+)/)[1];
        obj.slide.parent().find('.pagination a').removeClass('current')
        obj.slide.parent().find('.pagination a.page-'+current).addClass('current');
      }
    }
  },/*
  This function is self-evocated, but cannot access this object unless
  wrapped in an onready event. CSS properties aren't loaded until 
  body onLoad. jQuery seems to have trouble attaching to this event
  */boot:function(){$(function(){$("body").attr("onLoad", "daily.init()");})}()
}





