jQuery(function() {
  //	clearInputs();
  initGallery();
  // Navigation
  ieHover('#nav > li', 'hover');

  if ($('#products-listing').length) initProductsListingPage();
  if ($('#subscribe-form').length) initSubscribeForm();
  if ($('#competition-form').length) initCompetitionForm();
  if ($('.page.heritage').length) initHeritagePage();
  if ($('#slides').length) {
    if (typeof generatePagination === 'undefined')   generatePagination = false;
    initSlides(generatePagination);
  }
  if ($('.press').length) initPressBlocks();
  $('a').click(function() {
    $(this).blur();
  });
});


// Show Seo text bottom page
$('#seo-text').find('a.more-lk').live('click', function() {
    $(this).hide()
           .next('.more')
           .fadeIn(400, function() {
              $(this).show();
            });
    return false;
});


if ($('.press .block .visual ul').length) {
  $('.press .block .visual ul').each(function() {
    $('a.press-article', this).lightBox();
  });
}
;
if ($('.youtube-popup').length) {
  $('.youtube-popup').click(function(e) {
    e.preventDefault();
    youTubeId = $(this).attr('id').substr(8);
    html = '<iframe title="YouTube video player" width="870" height="490" src="http://www.youtube.com/embed/' + youTubeId + '?autoplay=1&autohide=1" frameborder="0" allowfullscreen></iframe>';
    showOverlay(html);
  });
}

if ($('a.image-popup').length) {
  $('a.image-popup').lightBox();
}


// Heritage Page - pinboard
function initHeritagePage() {
  var $pinboard = $('#pinboard'),
      $pinboardPins = $('li', $pinboard),
      $firstPinboardPin = $pinboardPins.first(), // first pin on the board
      pinContentClass = 'pin-content-wrapper',
      hoverPinCLass = 'pin-hover',
      $pinboardImg = $('#pinboard-img', $pinboard),
      $pinContent = $this = $pinHover = null; // other variables needed in the function


  $pinboardPins.bind('mouseenter',
      function() {
        showTooltip($(this));
      }).bind('mouseleave',
      function() {
        hideTooltip($(this));
      });

  $pinboardImg.attr('src', 'images/heritage/board.jpg').load(function() {
    $pinboardPins.fadeIn('medium', function() {
      $(this).show();
      // On load, show tooltip for 3 seconds after 1 second
     toggleTooltip($firstPinboardPin, 1000, 3000);
    })
  });


  // Show Tooltip
  function showTooltip($pin) {
    if (!$pin.length) return false;
    // FadeIn the pin hover state
    $pin.find('.' + hoverPinCLass).first().stop(true, true).fadeIn('fast', function() {
      $(this).show();
    });
    $pinContent = $('.' + pinContentClass, $pin).css({opacity: 0}).show();
    // Animate the tooltip if not visible only
    if ($pinContent.not(':visible')) {
      $pinContent.stop(true, true)
          .animate({opacity: 1, bottom: '25'}, 300, "easeOutQuad");
    }
  }


  // Hide Tooltip
  function hideTooltip($pin) {
    if (!$pin.length) return false;
    $pinContent = $('.' + pinContentClass, $pin);
    // Hide tooltip with animation
    $pinContent.stop(true, true)
        .animate({opacity: 0, bottom: '35'}, 150, "easeInQuad", function() {
      $pinContent.hide();
      // FadeOut the pin hover state
      $pin.find('.' + hoverPinCLass)
          .first()
          .stop(true, true)
          .fadeOut('slow', function() {
        $(this).hide();
      });
    });
  }

  function toggleTooltip($pin, timeoutBefore, timeoutDuring) {
    if (!$pin.length) return false;

    window.setTimeout(function() {
      $pin.mouseenter();
      window.setTimeout(function() {
        $pin.mouseleave();
      }, timeoutDuring);
    }, timeoutBefore);
  }

}


// Only on the products page
function initProductsListingPage() {
  var $productInstances = $('#product-instances'),
      $productInstancesItems = $('li', $productInstances);
  // Other color on click
  $productInstancesItems.bind('click', function() {
    var $this = $(this);
    if (!$this.hasClass('active')) {
      if (!$('img').is(':animated')) {
        oldId = $productInstances.find('li.active').first().removeClass('active').find('a').first().attr('id');
        $this.addClass('active');
        $('.' + oldId).fadeOut(400, function() {
          $(this).hide();
          $('.' + $this.find('a').first().attr('id')).fadeIn(800, function() {
            $(this).show();
          });
        });
      }
    }
    return false;
  });
  // Colour listing on the products page
  ieHover('.preview-block > li', 'hover');
}

// Validate the Subscribe form
function initSubscribeForm() {
  $subscribeForm = $('#subscribe-form');
  $subscribeForm.validate({
    rules: {
      emailAddressConfirm: {
        equalTo: "#emailAddress"
      }
    }
  });
}


function initPressBlocks() {
  $imgs = $('img', '.press');
  $imgs.bind('click', function() {
    return false;
  });
}

function initSlides(generatePagination) {
  $("#slides").slides({
    play: 4000,
    autoplay: true,
    generatePagination: generatePagination,
    fadeSpeed: 700,
    fadeEasing: 'easeOutExpo',
    crossfade: true,
    effect: 'fade'
  });
}


// Validate the Competition form
function initCompetitionForm() {
  $competitionForm = $('#competition-form');
  $competitionForm.validate({
    rules: {
      emailAddressConfirm: {
        equalTo: "#emailAddress"
      }
    }
  });
}

// hover for IE6
function ieHover(h_list, h_class) {
  if (jQuery.browser.msie && jQuery.browser.version < 7) {
    if (!h_class) var h_class = 'hover';
    jQuery(h_list).mouseenter(
        function() {
          jQuery(this).addClass(h_class);
        }).mouseleave(function() {
      jQuery(this).removeClass(h_class);
    });
  }
  ;
}
;

// clear inputs
function clearInputs() {
  clearFormFields({
    clearInputs: true,
    clearTextareas: true,
    passwordFieldText: false,
    addClassFocus: "focus",
    filterClass: "default"
  });
}
function clearFormFields(o) {
  if (o.clearInputs == null) o.clearInputs = true;
  if (o.clearTextareas == null) o.clearTextareas = true;
  if (o.passwordFieldText == null) o.passwordFieldText = false;
  if (o.addClassFocus == null) o.addClassFocus = false;
  if (!o.filterClass) o.filterClass = "default";
  if (o.clearInputs) {
    var inputs = document.getElementsByTagName("input");
    for (var i = 0; i < inputs.length; i++) {
      if ((inputs[i].type == "text" || inputs[i].type == "password") && inputs[i].className.indexOf(o.filterClass) == -1) {
        inputs[i].valueHtml = inputs[i].value;
        inputs[i].onfocus = function () {
          if (this.valueHtml == this.value) this.value = "";
          if (this.fake) {
            inputsSwap(this, this.previousSibling);
            this.previousSibling.focus();
          }
          if (o.addClassFocus && !this.fake) {
            this.className += " " + o.addClassFocus;
            this.parentNode.className += " parent-" + o.addClassFocus;
          }
        }
        inputs[i].onblur = function () {
          if (this.value == "") {
            this.value = this.valueHtml;
            if (o.passwordFieldText && this.type == "password") inputsSwap(this, this.nextSibling);
          }
          if (o.addClassFocus) {
            this.className = this.className.replace(o.addClassFocus, "");
            this.parentNode.className = this.parentNode.className.replace("parent-" + o.addClassFocus, "");
          }
        }
        if (o.passwordFieldText && inputs[i].type == "password") {
          var fakeInput = document.createElement("input");
          fakeInput.type = "text";
          fakeInput.value = inputs[i].value;
          fakeInput.className = inputs[i].className;
          fakeInput.fake = true;
          inputs[i].parentNode.insertBefore(fakeInput, inputs[i].nextSibling);
          inputsSwap(inputs[i], null);
        }
      }
    }
  }
  if (o.clearTextareas) {
    var textareas = document.getElementsByTagName("textarea");
    for (var i = 0; i < textareas.length; i++) {
      if (textareas[i].className.indexOf(o.filterClass) == -1) {
        textareas[i].valueHtml = textareas[i].value;
        textareas[i].onfocus = function() {
          if (this.value == this.valueHtml) this.value = "";
          if (o.addClassFocus) {
            this.className += " " + o.addClassFocus;
            this.parentNode.className += " parent-" + o.addClassFocus;
          }
        }
        textareas[i].onblur = function() {
          if (this.value == "") this.value = this.valueHtml;
          if (o.addClassFocus) {
            this.className = this.className.replace(o.addClassFocus, "");
            this.parentNode.className = this.parentNode.className.replace("parent-" + o.addClassFocus, "");
          }
        }
      }
    }
  }
  function inputsSwap(el, el2) {
    if (el) el.style.display = "none";
    if (el2) el2.style.display = "inline";
  }
}
// init gallery
function initGallery() {
  jQuery('div.carusel').scrollGallery()
  jQuery('ul.preview-items').fadeGallery()
}

// slideshow plugin
jQuery.fn.fadeGallery = function(_options) {
  var _options = jQuery.extend({
    slideElements:'> li',
    pagerLinks:'.carusel li ',
    btnNext:'a.next',
    btnPrev:'a.prev',
    btnPlayPause:'a.play-pause',
    btnPlay:'a.play',
    btnPause:'a.pause',
    pausedClass:'paused',
    disabledClass: 'disabled',
    playClass:'playing',
    activeClass:'active',
    currentNum:false,
    allNum:false,
    startSlide:null,
    noCircle:false,
    pauseOnHover:true,
    autoRotation:false,
    autoHeight:true,
    onChange:false,
    switchTime:3000,
    duration:650,
    event:'click'
  }, _options);

  return this.each(function() {
    // gallery options
    var _this = jQuery(this);
    var _slides = jQuery(_options.slideElements, _this);
    var _pagerLinks = jQuery(_options.pagerLinks);
    var _btnPrev = jQuery(_options.btnPrev, _this);
    var _btnNext = jQuery(_options.btnNext, _this);
    var _btnPlayPause = jQuery(_options.btnPlayPause, _this);
    var _btnPause = jQuery(_options.btnPause, _this);
    var _btnPlay = jQuery(_options.btnPlay, _this);
    var _pauseOnHover = _options.pauseOnHover;
    var _autoRotation = _options.autoRotation;
    var _activeClass = _options.activeClass;
    var _disabledClass = _options.disabledClass;
    var _pausedClass = _options.pausedClass;
    var _playClass = _options.playClass;
    var _autoHeight = _options.autoHeight;
    var _duration = _options.duration;
    var _switchTime = _options.switchTime;
    var _controlEvent = _options.event;
    var _currentNum = (_options.currentNum ? jQuery(_options.currentNum, _this) : false);
    var _allNum = (_options.allNum ? jQuery(_options.allNum, _this) : false);
    var _startSlide = _options.startSlide;
    var _noCycle = _options.noCircle;
    var _onChange = _options.onChange;

    // gallery init
    var _hover = false;
    var _prevIndex = 0;
    var _currentIndex = 0;
    var _slideCount = _slides.length;
    var _timer;
    if (_slideCount < 2) return;

    _prevIndex = _slides.index(_slides.filter('.' + _activeClass));
    if (_prevIndex < 0) _prevIndex = _currentIndex = 0;
    else _currentIndex = _prevIndex;
    if (_startSlide != null) {
      if (_startSlide == 'random') _prevIndex = _currentIndex = Math.floor(Math.random() * _slideCount);
      else _prevIndex = _currentIndex = parseInt(_startSlide);
    }
    _slides.hide().eq(_currentIndex).show();
    if (_autoRotation) _this.removeClass(_pausedClass).addClass(_playClass);
    else _this.removeClass(_playClass).addClass(_pausedClass);
    if (_autoHeight) _slides.eq(_currentIndex).parent().css({height:_slides.eq(_currentIndex).outerHeight(true)});

    // gallery control
    if (_btnPrev.length) {
      _btnPrev.bind(_controlEvent, function() {
        prevSlide();
        return false;
      });
    }
    if (_btnNext.length) {
      _btnNext.bind(_controlEvent, function() {
        nextSlide();
        return false;
      });
    }
    if (_pagerLinks.length) {
      _pagerLinks.each(function(_ind) {
        jQuery(this).bind(_controlEvent, function() {
          if (_currentIndex != _ind) {
            _prevIndex = _currentIndex;
            _currentIndex = _ind;
            switchSlide();
          }
          return false;
        });
      });
    }

    // play pause section
    if (_btnPlayPause.length) {
      _btnPlayPause.bind(_controlEvent, function() {
        if (_this.hasClass(_pausedClass)) {
          _this.removeClass(_pausedClass).addClass(_playClass);
          _autoRotation = true;
          autoSlide();
        } else {
          _autoRotation = false;
          if (_timer) clearTimeout(_timer);
          _this.removeClass(_playClass).addClass(_pausedClass);
        }
        return false;
      });
    }
    if (_btnPlay.length) {
      _btnPlay.bind(_controlEvent, function() {
        _this.removeClass(_pausedClass).addClass(_playClass);
        _autoRotation = true;
        autoSlide();
        return false;
      });
    }
    if (_btnPause.length) {
      _btnPause.bind(_controlEvent, function() {
        _autoRotation = false;
        if (_timer) clearTimeout(_timer);
        _this.removeClass(_playClass).addClass(_pausedClass);
        return false;
      });
    }

    // gallery animation
    function prevSlide() {
      _prevIndex = _currentIndex;
      if (_currentIndex > 0) _currentIndex--;
      else {
        if (_noCycle) return;
        else _currentIndex = _slideCount - 1;
      }
      switchSlide();
    }

    function nextSlide() {
      _prevIndex = _currentIndex;
      if (_currentIndex < _slideCount - 1) _currentIndex++;
      else {
        if (_noCycle) return;
        else _currentIndex = 0;
      }
      switchSlide();
    }

    function refreshStatus() {
      if (_pagerLinks.length) _pagerLinks.removeClass(_activeClass).eq(_currentIndex).addClass(_activeClass);
      if (_currentNum) _currentNum.text(_currentIndex + 1);
      if (_allNum) _allNum.text(_slideCount);
      _slides.eq(_prevIndex).removeClass(_activeClass);
      _slides.eq(_currentIndex).addClass(_activeClass);
      if (_noCycle) {
        if (_btnPrev.length) {
          if (_currentIndex == 0) _btnPrev.addClass(_disabledClass);
          else _btnPrev.removeClass(_disabledClass);
        }
        if (_btnNext.length) {
          if (_currentIndex == _slideCount - 1) _btnNext.addClass(_disabledClass);
          else _btnNext.removeClass(_disabledClass);
        }
      }
      if (typeof _onChange === 'function') {
        _onChange(_this, _currentIndex);
      }
    }

    function switchSlide() {
      _slides.eq(_prevIndex).fadeOut(_duration);
      _slides.eq(_currentIndex).fadeIn(_duration);
      if (_autoHeight) _slides.eq(_currentIndex).parent().animate({height:_slides.eq(_currentIndex).outerHeight(true)}, {duration:_duration,queue:false});
      refreshStatus();
      autoSlide();
    }

    // autoslide function
    function autoSlide() {
      if (!_autoRotation || _hover) return;
      if (_timer) clearTimeout(_timer);
      _timer = setTimeout(nextSlide, _switchTime + _duration);
    }

    if (_pauseOnHover) {
      _this.hover(function() {
        _hover = true;
        if (_timer) clearTimeout(_timer);
      }, function() {
        _hover = false;
        autoSlide();
      });
    }
    refreshStatus();
    autoSlide();
  });
}

// scrolling gallery plugin
jQuery.fn.scrollGallery = function(_options) {
  var _options = jQuery.extend({
    sliderHolder: '>div.holder',
    slider:'>div.slider',
    slides: '>div.slide',
    pagerLinks:'div.pager a',
    btnPrev:'span.prev a',
    btnNext:'span.next a',
    activeClass:'active',
    disabledClass:'inactive',
    generatePagination:'div.pg-holder',
    curNum:'em.scur-num',
    allNum:'em.sall-num',
    circleSlide:false,
    pauseClass:'gallery-paused',
    pauseButton:'none',
    pauseOnHover:true,
    autoRotation:false,
    stopAfterClick:false,
    switchTime:5000,
    duration:650,
    easing:'swing',
    event:'click',
    afterInit:false,
    vertical:false,
    step:3
  }, _options);

  return this.each(function() {
    // gallery options
    var _this = jQuery(this);
    var _sliderHolder = jQuery(_options.sliderHolder, _this);
    var _slider = jQuery(_options.slider, _sliderHolder);
    var _slides = jQuery(_options.slides, _slider);
    var _btnPrev = jQuery(_options.btnPrev, _this);
    var _btnNext = jQuery(_options.btnNext, _this);
    var _pagerLinks = jQuery(_options.pagerLinks, _this);
    var _generatePagination = jQuery(_options.generatePagination, _this);
    var _curNum = jQuery(_options.curNum, _this);
    var _allNum = jQuery(_options.allNum, _this);
    var _pauseButton = jQuery(_options.pauseButton, _this);
    var _pauseOnHover = _options.pauseOnHover;
    var _pauseClass = _options.pauseClass;
    var _autoRotation = _options.autoRotation;
    var _activeClass = _options.activeClass;
    var _disabledClass = _options.disabledClass;
    var _easing = _options.easing;
    var _duration = _options.duration;
    var _switchTime = _options.switchTime;
    var _controlEvent = _options.event;
    var _step = _options.step;
    var _vertical = _options.vertical;
    var _circleSlide = _options.circleSlide;
    var _stopAfterClick = _options.stopAfterClick;
    var _afterInit = _options.afterInit;

    // gallery init
    if (!_slides.length) return;
    var _currentStep = 0;
    var _sumWidth = 0;
    var _sumHeight = 0;
    var _hover = false;
    var _stepWidth;
    var _stepHeight;
    var _stepCount;
    var _offset;
    var _timer;

    _slides.each(function() {
      _sumWidth += jQuery(this).outerWidth(true);
      _sumHeight += jQuery(this).outerHeight(true);
    });


    // Active li index
    // Show current slide on load
    var $activeLi = _this.find('li.active').first(),
        index = _this.find('li').index($activeLi),
        activeLiSlideIndex = Math.ceil((index + 1) / 6);
        for (i = 1; i < activeLiSlideIndex; i++) {
          nextSlide();
        }


    // calculate gallery offset
    function recalcOffsets() {
      if (_vertical) {
        if (_step) {
          _stepHeight = _slides.eq(_currentStep).outerHeight(true);
          _stepCount = Math.ceil((_sumHeight - _sliderHolder.height()) / _stepHeight) + 1;
          _offset = -_stepHeight * _currentStep;
        } else {
          _stepHeight = _sliderHolder.height();
          _stepCount = Math.ceil(_sumHeight / _stepHeight);
          _offset = -_stepHeight * _currentStep;
          if (_offset < _stepHeight - _sumHeight) _offset = _stepHeight - _sumHeight;
        }
      } else {
        if (_step) {
          _stepWidth = _slides.eq(_currentStep).outerWidth(true) * _step;
          _stepCount = Math.ceil((_sumWidth - _sliderHolder.width()) / _stepWidth) + 1;
          _offset = -_stepWidth * _currentStep;
          if (_offset < _sliderHolder.width() - _sumWidth) _offset = _sliderHolder.width() - _sumWidth;
        } else {
          _stepWidth = _sliderHolder.width();
          _stepCount = Math.ceil(_sumWidth / _stepWidth);
          _offset = -_stepWidth * _currentStep;
          if (_offset < _stepWidth - _sumWidth) _offset = _stepWidth - _sumWidth;
        }
      }
    }

    // gallery control
    if (_btnPrev.length) {
      _btnPrev.bind(_controlEvent, function() {
        if (_stopAfterClick) stopAutoSlide();
        prevSlide();
        return false;
      });
    }
    if (_btnNext.length) {
      _btnNext.bind(_controlEvent, function() {
        if (_stopAfterClick) stopAutoSlide();
        nextSlide();
        return false;
      });
    }
    if (_generatePagination.length) {
      _generatePagination.empty();
      recalcOffsets();
      var _list = jQuery('<ul />');
      for (var i = 0; i < _stepCount; i++) jQuery('<li><a href="#">' + (i + 1) + '</a></li>').appendTo(_list);
      _list.appendTo(_generatePagination);
      _pagerLinks = _list.children();
    }
    if (_pagerLinks.length) {
      _pagerLinks.each(function(_ind) {
        jQuery(this).bind(_controlEvent, function() {
          if (_currentStep != _ind) {
            if (_stopAfterClick) stopAutoSlide();
            _currentStep = _ind;
            switchSlide();
          }
          return false;
        });
      });
    }

    // gallery animation
    function prevSlide() {
      recalcOffsets();
      if (_currentStep > 0) _currentStep--;
      else if (_circleSlide) _currentStep = _stepCount - 1;
      switchSlide();
    }

    function nextSlide() {
      recalcOffsets();
      if (_currentStep < _stepCount - 1) _currentStep++;
      else if (_circleSlide) _currentStep = 0;
      switchSlide();
    }

    function refreshStatus() {
      if (_pagerLinks.length) _pagerLinks.removeClass(_activeClass).eq(_currentStep).addClass(_activeClass);
      if (!_circleSlide) {
        _btnPrev.removeClass(_disabledClass);
        _btnNext.removeClass(_disabledClass);
        if (_currentStep == 0) _btnPrev.addClass(_disabledClass);
        if (_currentStep == _stepCount - 1) _btnNext.addClass(_disabledClass);
      }
      if (_curNum.length) _curNum.text(_currentStep + 1);
      if (_allNum.length) _allNum.text(_stepCount);
    }

    function switchSlide() {
      recalcOffsets();
      if (_vertical) _slider.animate({marginTop:_offset}, {duration:_duration,queue:false,easing:_easing});
      else _slider.animate({marginLeft:_offset}, {duration:_duration,queue:false,easing:_easing});
      refreshStatus();
      autoSlide();
    }

    // autoslide function
    function stopAutoSlide() {
      if (_timer) clearTimeout(_timer);
      _autoRotation = false;
    }

    function autoSlide() {
      if (!_autoRotation || _hover) return;
      if (_timer) clearTimeout(_timer);
      _timer = setTimeout(nextSlide, _switchTime + _duration);
    }

    if (_pauseOnHover) {
      _this.hover(function() {
        _hover = true;
        if (_timer) clearTimeout(_timer);
      }, function() {
        _hover = false;
        autoSlide();
      });
    }
    recalcOffsets();
    refreshStatus();
    autoSlide();

    // pause buttton
    if (_pauseButton.length) {
      _pauseButton.click(function() {
        if (_this.hasClass(_pauseClass)) {
          _this.removeClass(_pauseClass);
          _autoRotation = true;
          autoSlide();
        } else {
          _this.addClass(_pauseClass);
          stopAutoSlide();
        }
        return false;
      });
    }

    if (_afterInit && typeof _afterInit === 'function') _afterInit(_this, _slides);
  });
}

function showOverlay(html) {
  $('body').prepend('<div class="popupOverlay">&nbsp;</div><div class="popupContainer"><div class="popupWrapper"><div class="popupWindow"><a href="#" style="color: #002d6a;" id="popupClose"></a><a href="#" style="color: #002d6a; display:none;" id="popupPrev"></a><a href="#" style="color: #002d6a; display:none;" id="popupNext"></a><div class="popupWindowContent">' + html + '</div></div></div><div class="overlayClosePane"></div></div>');
  $('.popupOverlay').css({display: 'block'});
  $('.popupContainer').css({display: 'block'});
  windowHeight = $(window).height();
  totalHeight = $('#wrapper').height();
  if (windowHeight < totalHeight) {
    totalHeight = totalHeight + 44;
  }
  $('.popupWrapper').css({top : $(window).scrollTop() + 100 });
  $('.popupOverlay, .popupContainer').css({height: totalHeight + 'px'});
  //$(window).scrollTo(0, 800);
  $('.popupOverlay').animate({opacity: 0.5}, 300, "swing", function() {
    $('.popupContainer').animate({opacity: 1.0}, 300, "swing", function() {
      $('#popupClose, .overlayClosePane').click(function(e) {
        e.preventDefault();
        closeOverlay();
      });
    });
  });
}

function closeOverlay() {
  $('.popupContainer').animate({opacity: 0.0}, 100, "swing", function() {
    $('.popupOverlay').animate({opacity: 0.0}, 100, "swing", function() {
      $('.popupOverlay').remove();
      $('.popupContainer').remove();
    });
  });
}
