﻿
	// Plugin: Product Promotion Carousel
	(function () {
		$.fn.PromoCarousel = function ($navitems) {

			var timeoutTimer = 0;
			var disableAutoAdvance = false;
			var $navigationitems = $navitems

			function repeat(str, n) {
				return new Array( n + 1 ).join(str);
			}
			
			return this.each(function () {

				var	$wrapper = $(this),
					$slider = $wrapper.find('> div'),
					$items = $slider.find('> div'),
					$single = $items.filter(':first')
					
					singleWidth = $single.outerWidth(),
					visible = Math.ceil($wrapper.innerWidth() / singleWidth),
					currentPage = 1,
					pages = Math.ceil($items.length / visible);
					
				// 1. pad the pages with empty element if required
				if ($items.length % visible != 0) {
					// pad
					$slider.append(repeat('<div class="productpromoitem" />', visible - ($items.length % visible)));
					$items = $slider.find('> div');
				}
				
				// 2. create the carousel padding on left and right (cloned)
				$items.filter(':first').before($items.slice(-visible).clone().addClass('cloned'));
				$items.filter(':last').after($items.slice(0, visible).clone().addClass('cloned'));
				$items = $slider.find('> div');
				
				// 3. reset scroll
				$wrapper.scrollLeft(singleWidth * visible);
				
				// 4. paging function
				function gotoPage(page) {
					var dir = page < currentPage ? -1 : 1,
						n = Math.abs(currentPage - page),
						left = singleWidth * dir * visible * n;

					if (timeoutTimer != 0) {
						clearTimeout(timeoutTimer);
						timeoutTimer = 0;
					}
						
					$wrapper.filter(':not(:animated)').animate({
						scrollLeft : '+=' + left
					}, 1000, 'easeInOutCubic', function () {
						// if page == last page - then reset position
						if (page > pages) {
							$wrapper.scrollLeft(singleWidth * visible);
							page = 1;
						} else if (page == 0) {
							page = pages;
							$wrapper.scrollLeft(singleWidth * visible * pages);
						}
						
						currentPage = page;
						$navigationitems.removeClass('selected').eq(currentPage - 1).addClass('selected');
						
						if ((timeoutTimer == 0) && (!disableAutoAdvance)) {
							timeoutTimer = setTimeout(function () {
								$('#productpromoscroller').trigger('next');
							}, 8000);
						}
					});
				}
				
				// Prevent scrolling when the mouse is over a promotion
				$items.find('a').mouseover(function () {
					clearTimeout(timeoutTimer);
					timeoutTimer = 0;
					disableAutoAdvance = true;
				}).mouseout(function () {
					if (timeoutTimer == 0) {
						timeoutTimer = setTimeout(function () {
							$('#productpromoscroller').trigger('next');
						}, 8000);
						disableAutoAdvance = false;
					}
				});
		
				if (timeoutTimer == 0) {
					timeoutTimer = setTimeout(function () {
						$('#productpromoscroller').trigger('next');
					}, 8000);
				}
				
				$('#productpromoscrollernav a').click(function() {
					gotoPage(parseInt($(this).attr('ref')));
					return false;
				});
				
				$(this).bind('next', function () {
					gotoPage(currentPage + 1);
				});
			});
		};
	})(jQuery);

	// Plugin: Special Offer and Fairs Fader
	(function () {
		$.fn.SpecialoffersAndFairsFader = function() {

			var currentItem = -1;
			var nextItem = -1;
			var timeoutEvent = null;

			var i = 0;
			
			return this.each(function () {
			
				var elThis = $(this);

				elThis.find('a').mouseover(function() {
					if (timeoutEvent) {
						clearTimeout(timeoutEvent);
						timeoutEvent = null;
					}
				});
				
				elThis.find('a').mouseout(function() {
					if (!timeoutEvent) {
						timeoutEvent = setTimeout( function() { changeMainVisual(elThis, nextItem); }, 2000);
					}
				});
				
				elThis.find('li').each(function() {
					if (jQuery(this).is('.default')) {
						changeMainVisual(elThis, i);
					}
					i++;
				});

				function changeMainVisual(el, itemNr) {

					if (currentItem >= 0) {
						el.find('li:eq('+currentItem+')').css('z-index', '100');
						el.find('li:eq('+itemNr+')').css('z-index', '101');
						el.find('li:eq('+currentItem+')').fadeOut(2000);
						el.find('li:eq('+itemNr+')').delay(800).fadeIn(2000);
					}
						
					currentItem = itemNr;
					nextItem = currentItem + 1;

					if (nextItem > (el.find('li').length - 1))
						nextItem = 0;
						
					if (nextItem != currentItem)
						timeoutEvent = setTimeout( function() { changeMainVisual(el, nextItem); }, 5000);
					
				}
				
			});
		
		};
	})(jQuery);
	
	$(document).ready(function() {
	
		// Set up newsletter subscribe (uses code from the search)
		$('input#uc4kl4re').Watermark($('input#subscribe'));
	
		// Set up carousel for product promotions
		$('#productpromoscroller').PromoCarousel($('div#productpromoscrollernav a'));
		
		// Fade special offers and fairs
		$('ul#specialoffersandfairs').SpecialoffersAndFairsFader();
		
		// Set up scroller for news headlines
		$('#newsitemsscroller').serialScroll({
			axis: 'x',
			cycle: false,
			duration: 600,
			easing: 'easeInOutCubic',
			items: 'div.newsitem',
			lock: false,
			prev: 'div.newsscrollernav a#previous',
			next: 'div.newsscrollernav a#next',
			onBefore: function(e, elem, pane, items, pos) {
			
				if (pos == 0)
					$('div.newsscrollernav a#previous').addClass('disabled');
				else
					$('div.newsscrollernav a#previous').removeClass('disabled');
				
				if (pos >= (items.length - 1))
					$('div.newsscrollernav a#next').addClass('disabled');
				else
					$('div.newsscrollernav a#next').removeClass('disabled');

				return true;

			}
		});

	});
