jQuery(document).ready(setupInlineLabel);
//jQuery(document).ready(setupStylishSelect);
jQuery(document).ready(setupOfferScroll);
jQuery(document).ready(setupNewsScroll);
jQuery(document).ready(setupInlineMoreLink);
jQuery(document).ready(scaleShopTitle);

function setupStylishSelect() {
   jQuery('.list_actions select').sSelect({onTop: false });
}

function setupInlineMoreLink() {
   jQuery('.list_item a.morelink').each(function () {
      var $more = jQuery(this);

      if ($more.prev().is('p')) {
         $more.prev().append($more);
      }
   });
}

function setupInlineLabel() {
   var inlineLabels = jQuery('.ff_inlinelabel label');
   var inlineFields = jQuery('.ff_inlinelabel input');

   inlineFields.each(function () {
      if (this.value != '') {
         jQuery(this).prev().hide();
      }
   });
   inlineFields.focus(function () {
      jQuery(this).prev().fadeOut(100);
   });
   inlineFields.blur(function () {
      if (this.value.trim() == '') {
         jQuery(this).prev().fadeIn(700);
      }
   });
    //IE compat, since transparency is click-through
   inlineFields.click(function () {
      jQuery(this).prev().fadeOut(100);
   });

   inlineLabels.click(function () {
      jQuery(this).fadeOut(100);
      jQuery(this).next().focus();
   });
}

function setupOfferScroll() {
   var $root = jQuery('.offer_scroller');

   if ($root.length > 0) {
      var offerScroller = new AutoScroll({
         rootelement: $root,
         animationtime: 500,
         waittime: 3000,
         direction: 'vertical',
         onscrollend: function (jItem, index) {
            //console.log(jItem, index);
            jQuery('.aanbieding_title').html(jItem.attr('offtitle'));
            jQuery('.aanbieding_price_number').html(jItem.attr('offprice'));
            jQuery('.aanbieding_currentindex').html(index + 1);
         },
         oninitialise: function (jItem, index) {
            jQuery('.aanbieding_title').html(jItem.attr('offtitle'));
            jQuery('.aanbieding_price_number').html(jItem.attr('offprice'));
            jQuery('.aanbieding_currentindex').html(index + 1);
         }
      });
   }
}

function setupNewsScroll() {
   var $root = jQuery('.news_scroller');

   if ($root.length > 0) {
      var newsScroller = new AutoScroll({
         rootelement: $root,
         animationtime: 3000,
         waittime: 500,
         direction: 'vertical'
      });
   }
}

function scaleShopTitle() {
   var $welcomemat = jQuery('.welcome_mat');
   var $shopname = jQuery('.shopname');

   /// Scale font

   var maxSpaceAllowed = 220;
   var fontSize = 0;

   do {
      $shopname.css({'font-size': ++fontSize });
   }
   while ($shopname.width() < maxSpaceAllowed);

   $shopname.css({'font-size': Math.min(--fontSize, 24) });

   /////////

   /// Re-center mat
   $welcomemat.css({
      top: ($('.header').height() - $welcomemat.height()) / 2
   })
}


///////////////

function AutoScroll(mapSettings) {
   var _self = this;
   var _blocks;
   var _blockSize;
   var _currentBlockIndex;
   var _timer = 0;
   var _onscrollended = false;

   //default settings
   var settings = {
      rootelement: null,
      animationtime: 500,
      waittime: 4000,
      direction: 'vertical',
      pos: '',
      dim: ''
   }

   ////////////

   _self.next = function () {
      _blocks.each(function () {
         var jBlock = jQuery(this);
         var _blockoffset = parseInt(jBlock.css(settings.pos));
         var _index;
         var _css = new Object();
         _onscrollended = false;

         _css[settings.pos] = _blockoffset - _blockSize;

         jBlock.animate(
            _css,
            {
               duration: settings.animationtime,
               complete: function () {
                  //put uppermost block at bottom to wrap the scrolling.
                  if (_blockoffset === 0) {
                     _css[settings.pos] = (_blocks.length-1) * _blockSize;
                     jBlock.css(_css);
                  }

                  //fire callback
                  if (settings.onscrollend && !_onscrollended) {
                     settings.onscrollend(_blocks.eq( _currentBlockIndex % _blocks.length ), (_currentBlockIndex+10) % _blocks.length);
                     _onscrollended = true;
                  }
               }
            }
         );
      });

      _currentBlockIndex++;
   }
   _self.prev = function () {
      _blocks.each(function () {
         var jBlock = jQuery(this);
         var _index;
         var _css = new Object();
         _onscrollended = false;


         var _blockoffset = parseInt(jBlock.css(settings.pos));

         //put bottommost block at top to wrap the scrolling.
         if (_blockoffset === (_blocks.length-1) * _blockSize) {
            _css[settings.pos] = -_blockSize;
            jBlock.css(_css);
            _blockoffset = -_blockSize;
         }

         _css[settings.pos] = _blockoffset + _blockSize;
         jBlock.animate(
            _css,
            {
               duration: settings.animationtime,
               complete: function () {
                  //fill subtitles with title and price
                  _index = (_currentBlockIndex % _blocks.length);

                  //fire callback
                  if (settings.onscrollend && !_onscrollended) {
                     settings.onscrollend(_blocks.eq(_index), (_currentBlockIndex+10) % _blocks.length);
                     _onscrollended = true;
                  }
               }
            }
         );
      });
      _currentBlockIndex--;
   }
   _self.manualNext = function () {
      clearInterval( _timer );
      _self.next();

      return false;
   }
   _self.manualPrev = function () {
      clearInterval( _timer );
      _self.prev();

      return false;
   }

   ////////////

   //override default settings
   if (mapSettings) {
      for (var key in mapSettings) {
         settings[key] = mapSettings[key];
      }
   }

   if (!settings.rootelement) {
      console.log('No root element specified. Cannot create autoscroller.');
      return;
   }

   switch (settings.direction) {
      case 'vertical':
         settings.pos = 'top';
         settings.dim = 'Height';
      break;
      case 'horizontal':
      default:
         settings.pos = 'left';
         settings.dim = 'Width';
   }

   _blocks = jQuery('.scroll_item', settings.rootelement);
   _blockSize = _blocks.get(0)['offset'+ settings.dim];
   _currentBlockIndex = 0;


   // Distribute blocks
   _blocks.each(function (i) {
      var _css = new Object();
      _css[settings.pos] = i * _blockSize;
      jQuery(this).css(_css);
   });

   //guard against too few items. Then, autofit the container to the items and hide the nav.
   var fewBlocks = (settings.rootelement[settings.dim.toLowerCase()]() > (_blocks.length * _blockSize))
   if (fewBlocks) {
     settings.rootelement.height(_blocks.length * _blockSize);
     jQuery('.sidebar_pager', settings.rootelement.parent()).hide();

     return;
   }

   //set manual scroll events
   jQuery('.sidebar_pager_prev', settings.rootelement.parent()).click(_self.manualPrev);
   jQuery('.sidebar_pager_next', settings.rootelement.parent()).click(_self.manualNext);

   //initialise
   //fire callback
   if (settings.oninitialise) settings.oninitialise(_blocks.eq(_currentBlockIndex), _currentBlockIndex);

   _timer = setInterval(
      _self.next,
      settings.waittime + settings.animationtime
   );
}
