(function($){
  $.fn.slideUpTeaser = function(options) {
    var defaults = {
      speed: 'fast'
    };
    var opts = $.extend(defaults, options);
    
    var resetTimer = function(bd) {
      clearTimeout(bd[0].timer);
      
      bd[0].timer = setTimeout(function(){
        if (bd[0].hovered == false || typeof bd[0].hovered == 'undefined') {
          bd.animate({ top: bd[0].topP + 'px' }, defaults.speed, function(){
            bd[0].expanded = false;
          });
        } else {
          resetTimer(bd);
        }
      }, 333);
    };
    
    return this.each(function() {
      $(this).mouseover(function(evt){
        if (!this.className.match(/slideUp/)) { return; }
        
        var bd = $(this).find('.teaserBd');
        
        if (typeof bd[0].prepared == 'undefined') {
          var teaser = $(this);
          var heading = teaser.find('.teaserHeading');

          if (typeof heading[0].hght == 'undefined') {
            heading[0].hght = heading.outerHeight();
            bd[0].topP = teaser.outerHeight() - heading[0].hght;
          }

          bd.css({ 
              bottom: 'auto', 
              height: '100%',
              top: bd[0].topP + 'px' });
      
          bd.mouseover(function(){
            bd[0].hovered = true;
            resetTimer($(this));
          }).mouseout(function(){
            bd[0].hovered = false;
          });
      
          teaser.find('.nonvisual').removeClass('nonvisual')
          .mouseover(function(){
            bd[0].hovered = true;
            resetTimer($(this)); 
          }).mouseout(function(){
            bd[0].hovered = false;
          });
          
          bd[0].prepared = true;
        }
        
        if (!bd[0].expanded) {
          bd.animate({
            top: '0' }, defaults.speed, function(){ 
              resetTimer(bd);
          })[0].expanded = true;
        } else {
          bd[0].hovered = true;
          resetTimer(bd);
        }
      }).mouseout(function(){
        $(this).find('.teaserBd')[0].hovered = false;
      });  
      /*
        Onmouseover ska:
        1. ta reda på höjd på rubrikens <h3>, offsetHeight. Spara i style=height:XXpx"
        2. sätt teaserBd till top = teaserhöjd - höjd från 1.
        3. Ta bort alla nonvisual-klasser i teaserns barnelement.
          (a. om nonvisual inte finns, markera puffen som .noslide)
          b. om puffen har kategorier men inte ingress, slide up för kategorier.
          c. om puffen har ingress men inte kategorier, slde up hela vägen som enligt skiss.
          d. annars, fortsätt till 4.
        4. Sätt teaserobj.prepared = true för att slippa behöva upprepa steg 1-3 mer än en gång.
        
        onmousout ska:
        3. slidea ner teaserBd till initiell position.
      */
      
      //$(this).doMagic()
    });
  };
})(jQuery);
