if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

Modernizr.addTest('positionfixed', function () {
	var test = document.createElement('div'),
	    control = test.cloneNode(false),
	    fake = false,
	    root = document.body || (function () {
	        fake = true;
	        return document.documentElement.appendChild(document.createElement('body'));
	    }());

	var oldCssText = root.style.cssText;
	root.style.cssText = 'padding:0;margin:0';
	test.style.cssText = 'position:fixed;top:42px';
	root.appendChild(test);
	root.appendChild(control);

	var ret = test.offsetTop !== control.offsetTop;

	root.removeChild(test);
	root.removeChild(control);
	root.style.cssText = oldCssText;

	if (fake) {
	    document.documentElement.removeChild(root);
	}

	/* Uh-oh. iOS < 5 would return a false positive here.
	* If it's about to return true, we'll explicitly test for known iOS User Agent strings.
	* "UA Sniffing is bad practice" you say. Agreeable, but sadly this feature has made it to
	* Modernizr's list of undectables, so we're reduced to having to use this. */
	navigator.userAgent.match(/OS (\d)/i);
	return ret && (!Modernizr.appleios || (Modernizr.appleios && RegExp.$1 >= 5));
});


function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

var iOs = ((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i)));
//iOs = true;

function changeUrl(href) {
	var History = window.History
	if (!History.enabled ) return false;

	History.Adapter.bind(window, 'statechange', function() {
	    var State = History.getState();
	});

	History.pushState(null, null, href);
}

function html5Shiv(content) {
	return typeof(innerShiv) != 'undefined' ? innerShiv(content, false) : content;
}

function ajaxLink(href) {
	return href.replace('/boats/', '/boats/ajax/').replace('/vip', '/vip/ajax').replace('/brochure', '/brochure/ajax').replace('/news/signup', '/news/signup/ajax').replace('/language-select', '/language-select/ajax').replace('/dealers', '/dealers/ajax');
}

var showContent = function(href) {
	
	// Set active nav
	$('nav.secondary li').removeClass('active');
	$('nav.secondary a[href="' + href + '"]').parent().addClass('active');
	
	if (typeof(renderingPath) != 'undefined') {
		delete renderingPath;
		delete renderingImages;
	}
	
	$.ajax({
	  url: ajaxLink(href),
	  context: document.body,
	  success: function(data, textStatus, jqXHR) {
			
	    // Show content
			$('article.main section, article.main figure').detach();
			$('article.main').append(html5Shiv(data));
			$('article.main div.start-the-dream').appendTo($('article.main'));
						
			loadBoatIntro();
			loadDeckPlan();
	  }
	});

	// Scroll to position
	var minimumScroll = $('article.main nav.secondary').offset().top;
	if (($(window).scrollTop() > minimumScroll) || ($(window).scrollTop() == 0)) {
		$(window).scrollTop(minimumScroll);
	}
}


/*
	Start the Dream
*/
var setPopupPosition = function(id) {
	var popup = $('section.popup.active');
	
	if (popup.length > 0) {
		var height = popup.height() + 40;
		if (!Modernizr.positionfixed) {
			if ($.browser.msie) {
				var offset = document.documentElement.scrollTop + ((document.documentElement.clientHeight - height) / 2);
			} else {
				var offset = window.pageYOffset + ((window.innerHeight - height) / 2);
			}
			popup.css('top', offset + 'px');
		} else {
			popup.css('margin-top', ((0 - height) / 2) + 'px');
		}
	}
}

var loadPopup = function(id, href) {
	
	if (!mobile) {
  	var activate = function() {
  		var popup = $('section#' + id + '.popup');
  		popup.show();
  		setTimeout(function() {
  			$('.popup-background').addClass('active');
  			popup.addClass('active');
  			setPopupPosition();
  			loadForm();
  		}, 5);
  	}
	
  	var addBackground = function() {
  		if (!iOs && ($('.popup-background').length == 0)) {
  			var height = $(document).height();
  			$('body').append('<div class="popup-background"></div>');
  			$('div.popup-background').css('height', height + 'px'); // IE6 workaround
  		}
  	}
		
  	hidePopup();
	
  	if ($('section#' + id + '.popup').length == 0) {
  		$.ajax({
  		  url: ajaxLink(href),
  		  context: document.body,
  		  success: function(data, textStatus, jqXHR) {
			
  				$('body').append(html5Shiv(data));
  				$('section#' + id).prepend('<a class="close"><img src="/assets/images/popup-close.png" alt="Close Pop-Up" /></a>')
  				$('section#' + id).addClass('popup');
  				addBackground();
  				setTimeout(activate, 5);
  		  }
  		});
  	} else {
  		addBackground();
  		activate();
  	}
  }
	
	return false;
}

var hidePopup = function() {
	var popup = $('section.popup.active');
	popup.removeClass('active');
	$('.popup-background').removeClass('active');
	setTimeout(function() {
		popup.hide();
	}, 250);
	
	setTimeout(function() {
		$('.popup-background:not(.active)').detach();
	}, 500);
	
	return false;	
}

/*
	News signup form
*/
var loadNewsSignup = function() {
	
	var form = $('form#news-signup-email');
	
	if (form.length > 0) {
		form.submit(function() {
			
			var email = $(this).find('input#news-email').val();
			var href = $(this).attr('action') + '/' + email;
			
			loadPopup('news-signup', href);
			
			return false;
		});
	}
}


/*
	Contact forms
*/
var loadForm = function() {
	
	var form = $('form#request-brochure, form#vip, form#news-signup, form#contact');
	
	
	if (form.length > 0) {
		
		form.each(function() {
			
			var form = $(this);
			
			if (form.find('#dealer option').length > 0) {
				var dealer_options = {};
	
				form.find('#dealer option').each(function() {
					dealer_options[$(this).val()] = {
						value: $(this).val(),
						text: $(this).text(),
						region: $(this).attr('region')
					};
				});
			
				form.find('#boating_region').change(function() {
					var region = $(this).val();
					form.find('#dealer').empty();
	
					$.each(dealer_options, function(index, option) {
	
						if ((option.region.indexOf(region + " ") != -1) || (option.value == 'please_select')) {
							form.find('#dealer').append('<option value="' + option.value + '">' + option.text + '</option>');
						}
					});
				});
			}
		
		
			form.submit(function() {
			
				form = $(this);
			
				$.ajax({
				  url: $(this).attr('action'),
				  context: document.body,
					type: 'POST',
					data: $(this).serialize(),
				  success: function(data, textStatus, jqXHR) {
						var result = $.parseJSON(data);
					
						if (result.success == false) {
						
							form.find('p').removeClass('error');
							form.find('span.error').detach();
						
							for (var key in result['errors']) {
								form.find('p.' + key).addClass('error');
								form.find('p.' + key + ' label:first').after('<span class="error">' + result['errors'][key] + '</span>');
							}
						
						} else {
							form.hide();
						
							var success = $('#form-success.' + form.attr('id'));
						
							if (result.dealer != undefined) {
								success.html(success.html().replace('DEALER_NAME', result.dealer.title));
							}
						
							success.show();
												
							if (form.attr('id') == 'request-brochure') {
	
								if (form.find('input[name="receipt_option"]:checked').val() == 'download') {
									success.find('p.posted').hide();
								}
							}
						
							setPopupPosition();
						}
				  }
				});
			
				return false;
			});
		});
	}
}


/*
	Find a Dealer
*/
var loadFindaDealer = function() {
	
	var dropdowns = $('form#dealer-finder');
	
	if (dropdowns.length > 0) {

		var region = dropdowns.find('#dealer_region');
		var country = dropdowns.find('#dealer_country');
		var dealer = dropdowns.find('#dealer');
		var dealer_options = {};
		var country_options = {};
		
		country.find('option').each(function() {
			country_options[$(this).val()] = {
				value: $(this).val(),
				text: $(this).text(),
				region: $(this).attr('region').split(','),
				href: $(this).attr('href')
			}
		});
		
		var selectedCountry = country.find('option[selected="selected"]').val();
		
		dealer.find('option').each(function() {
			dealer_options[$(this).val()] = {
				value: $(this).val(),
				text: $(this).text(),
				region: $(this).attr('region'),
				country: $(this).attr('country'),
				href: $(this).attr('href'),
				selected: $(this).attr('selected')
			};
	  });
		
		var selectedDealer = dealer.find('option[selected="selected"]').val();
		
		if (typeof (this.onpropertychange) == "object"){
      var changeEvent = "propertychange";
    } else {
      var changeEvent = "change";
    }
    		
		var regionChange = function() {

			var selectedRegion = $(this).val();
			
			if (selectedRegion != "please_select") {
				country.prop('disabled', false).removeClass('disabled').empty();
		
				$.each(country_options, function(index, option) {
					if (($.inArray(selectedRegion, option.region) > -1) || (option.value == "please_select")) {
						country.append('<option value="' + option.value + '">' + option.text + '</option>')
					}
				});
				
				$('ul#map_area > li').removeClass('active');
				$('ul#map_area img.area').removeClass('active');
				$('ul#map_area > li.' + selectedRegion).addClass('active');
				
				dropdowns.find('input[type="submit"]').attr('disabled', 'disabled').addClass('disabled');
				dealer.attr('disabled', 'disabled').addClass('disabled').empty();
				
				if (country.find('option').length == 2) {
					country.val(country.find('option:last').val()).trigger(changeEvent);
				}
				
				changeUrl(region.find('option[value="' + selectedRegion + '"]').attr('href'));
			}
		}
		
		var countryChange = function() {

			var selectedCountry = $(this).val();
			if (selectedCountry != "please_select") {
				dealer.prop('disabled', false).removeClass('disabled').empty();
	
				$.each(dealer_options, function(index, option) { 
					if ((option.country == selectedCountry) || (option.value == "please_select")) {
						dealer.append('<option value="' + option.value + '">' + option.text + '</option>');
					}
				});
				
				$('ul#map_area > li').removeClass('active');
				$('ul#map_area img.area').removeClass('active');
				
				var newMap = ($('ul#map_area > li.' + selectedCountry).length > 0) ? selectedCountry : country_options[$(this).val()].region;
				newMap = $.grep(newMap.toString().split(/,/), function(val) {
					return $.inArray(val, ['world', '']) < 0;
				});
				$('ul#map_area > li.' + newMap).addClass('active');
				
				dropdowns.find('input[type="submit"]').attr('disabled', 'disabled').addClass('disabled');
					
				changeUrl(country_options[selectedCountry].href);
					
				// IE6 bug workaround.
				var setDealer = function() {
					if (dealer.find('option').length == 2) {
						dealer.val(dealer.find('option:last').val()).trigger(changeEvent);
					} else {
						dealer.val('please_select').trigger(changeEvent);
					}
				}
			
				try {
					setDealer();
				}
				catch(ex) {
					setTimeout(setDealer, 1); 
				}
			}
		}
		
		var dealerChange = function() {
			var selectedDealer = $(this).val();
			
			if (selectedDealer != null) {
				if (selectedDealer != "please_select") {
					dropdowns.find('input[type="submit"]').prop('disabled', false).removeClass('disabled');
					changeUrl(dealer_options[selectedDealer].href);
				} else {
					dropdowns.find('input[type="submit"]').attr('disabled', 'disabled').addClass('disabled');
				}
			
				var banner = $('figure#banner');
				banner.find('ul').removeClass('active');
				banner.find('ul.dealers li').removeClass('active');
			
				if (selectedDealer == "please_select") {
					banner.find('ul.main').addClass('active');
					banner.find('ul.main li.first').addClass('active');
				} else {
					banner.find('ul.dealers').addClass('active');
					banner.find('ul.dealers li.' + selectedDealer).addClass('active');
				}
			}
		}
		
		region.bind(changeEvent, regionChange);
		country.bind(changeEvent, countryChange);
		dealer.bind(changeEvent, dealerChange);
		
		if (region.val() != "please_select") {
			region.trigger(changeEvent);
			if (selectedCountry) {
				country.val(selectedCountry).trigger(changeEvent);
			}
			if (selectedDealer) {
				dealer.val(selectedDealer).trigger(changeEvent);
			}
		}
		
		$('ul#map_area li.active area').live('mouseover', function() {
			var area = $(this).attr('class');
			$(this).parents('li').find('img.area.' + area).addClass('active');
		});
		
		$('ul#map_area li.active area').live('mouseout', function() {
			var area = $(this).attr('class');
			$(this).parents('li').find('img.area.' + area).removeClass('active');
		});
		
		$('ul#map_area li.dealer_regions area').live('click', function() {
			if ($(this).parents('li').hasClass('active')) {
				var href = $(this).attr('href').split('/').pop();
				region.val(href).trigger(changeEvent);
			}
			return false;
		});
		
		$('ul#map_area li.active ul.hotspots a').live('click', function() {
			var href = this.pathname.split('/');
			var startIndex = href.indexOf('dealers');
			var selectedRegion = href[startIndex + 1];
			var selectedCountry = href[startIndex + 2];
			var selectedDealer = href[startIndex + 3];
			
			if (selectedRegion) {
				region.val(selectedRegion).trigger(changeEvent);
			}
			if (selectedCountry) {
				country.val(selectedCountry).trigger(changeEvent);
			}
			if (selectedDealer) {
				dealer.val(selectedDealer).trigger(changeEvent);
			}
			
			return false;
		});
		
		dropdowns.submit(function() {
			loadPopup('start-the-dream', dropdowns.attr('action') + '/' + dealer.val());
			return false;
		});
	}
	
	$('.home section#find-dealer form').submit(function() {
		var dealer = $(this).find('select[name="dealer"]').val();
		if (dealer != 'please_select') {
			window.location = dealer;
		}
		return false;
	});

}


/*
	Photo gallery
*/
var loadGallery = function() {
	var container = $('figure#banner');
	var banner = container.find('ul.main.auto.active');
	var bannerItems = banner.find('li');
	var autoGallery = true;
	var lastGalleryTime = new Date().getTime();
	var galleryDelay = 7500;

	container.find('nav').remove();

	if (bannerItems.length > 1) {
	
		// Create the navigation
		container.append(html5Shiv('<nav><ul class="thumbs"></ul></nav>'));
		container.find('nav ul.thumbs').append(bannerItems.clone());
	
		container.find('nav').addClass('count-' + bannerItems.length);
	
		if (iOs) {
	
			var imageWidth = $(document).width();
			var currentImage = 0;
			var speed = 500;
	
			var setBannerWidth = function() {
				imageWidth = $(document).width();
				bannerItems.css('width', imageWidth + 'px');
			}
	
			setBannerWidth();
			$(window).resize(setBannerWidth);
	
			banner.swipe({
				triggerOnTouchEnd: true,	
				swipeStatus: swipeStatus,
				allowPageScroll: "vertical",
				threshold: 100
			})

			function swipeStatus(event, phase, direction, distance) {
				var offset = (imageWidth * currentImage);
					
				if ((direction == "left") || (direction == "right")) {
			
					if (phase == "move") {
						var newPosition = (direction == "left") ? offset + distance : offset - distance;
						scrollImages(newPosition, 0);
					} else if (phase == "cancel") {
						scrollImages(offset, speed);
					} else if (phase == "end") {
						(direction == "right") ? previousImage() : nextImage();
					}
				}
			}
		
			function setThumbnail() {
				var newThumbnailImage = container.find('nav ul.thumbs li:not(.filtered):eq(' + currentImage + ')');
				container.find('nav ul.thumbs li').removeClass('active');
				newThumbnailImage.addClass('active');
			}

			function previousImage() {
				currentImage = Math.max(currentImage - 1, 0);
				scrollImages(imageWidth * currentImage, speed);
				setThumbnail();
			}

			function nextImage() {
				currentImage = Math.min(currentImage + 1, bannerItems.length - 1);
				scrollImages(imageWidth * currentImage, speed);
				setThumbnail();
			}

			function scrollImages(distance, duration) {
				banner.css("-webkit-transition-duration", (duration / 1000).toFixed(1) + "s");
				var value = (distance < 0 ? "" : "-") + Math.abs(distance).toString();
				banner.css("-webkit-transform", "translate3d(" + value + "px, 0px, 0px)");
			}
		}

		else {
	
			$(window).scroll(function() {
				autoGallery = ($(window).scrollTop() > (banner.offset().top + banner.height() - 100)) ? false : true;
			});
	
			// Automatic fading.
			var showNextGalleryImage = function(next) {
		
				next = typeof(next) != 'undefined' ? 'next' : 'prev';
		
				var currentTime = new Date().getTime();

				if (autoGallery && (currentTime >= (lastGalleryTime + galleryDelay))) {

					lastGalleryTime = currentTime;

					var active = banner.find('li.active');
					var activeIndex = active.prevAll('li:not(.filtered)').length;
					var newIndex = (activeIndex + 1) < banner.find('li:not(.filtered)').length ? activeIndex + 1 : 0;
					var newImage = banner.find('li:not(.filtered):eq(' + newIndex + ')');
					var newThumbnailImage = container.find('nav ul.thumbs li:not(.filtered):eq(' + newIndex + ')');

					bannerItems.removeClass('active');
					container.find('nav ul.thumbs li').removeClass('active');
					newImage.addClass('active');
					newThumbnailImage.addClass('active');

					setTimeout(showNextGalleryImage, galleryDelay);
				} else {
					setTimeout(showNextGalleryImage, 1000);
				}
			}

			setTimeout(showNextGalleryImage, galleryDelay);
				
			// Clicking a thumbnail
			container.find('nav ul.thumbs li').click(function() {
				var currentTime = new Date().getTime();
				lastGalleryTime = currentTime + galleryDelay;
		
				var photo = $.grep($(this).attr('class').split(/\s+/), function(val) {
					return $.inArray(val, ['active', 'interior', 'exterior']) < 0;
				});
		
				if (photo != "") {
					container.find('nav ul.thumbs li, ul.main li').removeClass('active');
					banner.find('li.' + photo).addClass('active');
					$(this).addClass('active');
				}
			});

			// Reset the gallery contents.
			var resetGallery = function(option) {
				if (option != null) {
					if (!banner.find('li.active').hasClass(option)) {
						container.find('nav ul.thumbs li').removeClass('active');
						container.find('nav ul.thumbs li.' + option + ':first').addClass('active');
						bannerItems.removeClass('active');
						banner.find('li.' + option + ':first').addClass('active');
					}
				}
			}

			var showGallery = function() {
				// Scroll to position
				var minimumScroll = $('figure#banner').offset().top;
				if (($(window).scrollTop() > minimumScroll) || ($(window).scrollTop() == 0)) {
					$(window).scrollTop(minimumScroll);
				}
			}
		}
	}
}


/*
	Home Page Slider
*/
var loadSlider = function() {
	
	var slider = $('figure#slider');
	var container = $('figure#slider section.slider-category');
	var autoGallery = false;
	var lastGalleryTime = new Date().getTime();
	var galleryDelay = 7500;
	
	if (slider.length > 0) {
		slider.find('section > div.category a, section:not(.active) ul.slides').live('click', function() {
			slider.find('section').removeClass('active');
			$(this).parents('section.slider-category').addClass('active');
			lastGalleryTime = new Date().getTime();
			return false;
		});
	
		// Automatic fading.
		var showNextGalleryImage = function(next) {
      next = typeof(next) != 'undefined' ? 'next' : 'prev';
         
      var container = $('figure#slider section.slider-category.active');
      var banner = container.find('ul.slides');
      var bannerItems = banner.find('li.sticky');
       
      var currentTime = new Date().getTime();
       
      if (autoGallery && (currentTime >= (lastGalleryTime + galleryDelay))) {
       
       lastGalleryTime = currentTime;
       
       var active = banner.find('li.sticky.active');
       var activeIndex = active.prevAll('li.sticky').length;
       var newIndex = (activeIndex + 1) < banner.find('li.sticky').length ? activeIndex + 1 : 0;
       var newImage = banner.find('li.sticky:eq(' + newIndex + ')');
       var newThumbnailImage = container.find('nav ul.thumbs li.sticky:eq(' + newIndex + ')');
       
       bannerItems.removeClass('active');
       container.find('nav ul.thumbs li').removeClass('active');
       newImage.addClass('active');
       newThumbnailImage.addClass('active');
       
       setTimeout(showNextGalleryImage, galleryDelay);
      } else {
       setTimeout(showNextGalleryImage, 1000);
      }
		}
	  
	  
		container.each(function() {
		
			var container = $(this);
			var banner = container.find('ul.slides');
			var bannerItems = banner.find('li.sticky');
			var allBannerItems = banner.find('li');
		
			container.find('nav').remove();
			
			// Clicking a hotspot
			allBannerItems.find('a.hotspot').click(function() {
				var target = $(this).attr('target');
				if (target) {
					banner.find('li.sticky.active').addClass('zoomed');
					autoGallery = false;
					setTimeout(function() {
						banner.find('li.' + target).addClass('active').addClass('overlay');
					}, 500);
					setTimeout(function() {
						banner.find('li.sticky.zoomed').removeClass('zoomed');
					}, 1000);
				} else {
					window.location = $(this).attr('href');
				}
				return false;
			});
		
			// Clicking back button
			allBannerItems.find('a.back').click(function() {
				banner.find('li.overlay').removeClass('active').removeClass('overlay');
				autoGallery = true;
				lastGalleryTime = new Date().getTime();
				return false;
			});
			
	
			if (bannerItems.length > 1) {
	
				// Create the navigation
				container.append(html5Shiv('<nav><ul class="thumbs"></ul></nav>'));
				container.find('nav ul.thumbs').append(bannerItems.clone().empty());
	
				container.find('nav').addClass('count-' + bannerItems.length);
	
				$(window).scroll(function() {
					autoGallery = ($(window).scrollTop() > (banner.offset().top + banner.height() - 100)) ? false : true;
				});
	
				setTimeout(showNextGalleryImage, galleryDelay);
	
				// Clicking a thumbnail
				container.find('nav ul.thumbs li').click(function() {
					var currentTime = new Date().getTime();
					lastGalleryTime = currentTime + galleryDelay;
	
					var photo = $.grep($(this).attr('class').split(/\s+/), function(val) {
						return $.inArray(val, ['active', 'interior', 'exterior']) < 0;
					});
	
					if (photo != "") {
						container.find('nav ul.thumbs li').removeClass('active');
						banner.find('li.sticky').removeClass('active');
						banner.find('li.sticky.' + photo).addClass('active');
						$(this).addClass('active');
					}
				});
	
				// Reset the gallery contents.
				var resetGallery = function(option) {
					if (option != null) {
						if (!banner.find('li.active').hasClass(option)) {
							container.find('nav ul.thumbs li').removeClass('active');
							container.find('nav ul.thumbs li.' + option + ':first').addClass('active');
							bannerItems.removeClass('active');
							banner.find('li.' + option + ':first').addClass('active');
						}
					}
				}
	
				var showGallery = function() {
					// Scroll to position
					var minimumScroll = $('figure#banner').offset().top;
					if (($(window).scrollTop() > minimumScroll) || ($(window).scrollTop() == 0)) {
						$(window).scrollTop(minimumScroll);
					}
				}
			}
		});
	}
}


/*
	Tab navigation
*/
var loadTabNavigation = function() {
	$('nav.tabs ul li').click(function() {

		// Get the article name to activate
		var article = $.grep($(this).attr('class').split(/\s+/), function(val) {
			return $.inArray(val, ['active', 'article', 'first']) < 0;
		});
		
		// Update state of banner gallery.
		if ($('figure#banner ul.' + article).length > 0) {
		  $('figure#banner ul').removeClass('active');
    	$('figure#banner ul.' + article).addClass('active');
      // $('figure#banner ul.' + article + ' li.first').addClass('active');
		  
		} else {
		  $('figure#banner ul li').removeClass('active');
			$('figure#banner ul li.' + article).addClass('active');		 
		}
		
		// Load the gallery navigation
		loadGallery();
		
		$(this).siblings('li').removeClass('active');
		$(this).addClass('active');
		
		$(this).parents('section').find('article.tabs-content').removeClass('active');
		$(this).parents('section').find('article.tabs-content.' + article).addClass('active');
		
		changeUrl($(this).find('a').attr('href'));
		
		return false;
	});
}

var loadOurTime = function() {

	var timeline = $('.about article.timeline');

	if (timeline.length > 0) {
		var indicator = timeline.find('nav div#active-indicator');
		var yearItem = timeline.find('nav ul li.active');
		var yearPosition = yearItem.position().left;
		var activeYear = $.grep(yearItem.attr('class').split(/\s+/), function(val) {
			return $.inArray(val, ['active']) < 0;
		});
		
		var banner = $('figure#banner ul.main.timeline');
		var bannerItems = banner.find('li');
		
	
		indicator.addClass('active');
		indicator.css('margin-left', yearPosition + 'px')
		
		if (iOs) {	
			var imageWidth = $(document).width();
			var currentImage = 0;
			var speed = 500;
	
			var setBannerWidth = function() {
				imageWidth = $(document).width();
				bannerItems.css('width', imageWidth + 'px');
			}
	
			setBannerWidth();
			$(window).resize(setBannerWidth);
		}
			
		timeline.find('nav ul li a').live('click', function() {
			var year = $.grep($(this).parent().attr('class').split(/\s+/), function(val) {
				return $.inArray(val, ['active']) < 0;
			});
	
			var yearItem = timeline.find('nav ul li.' + year);
			var yearPosition = yearItem.position().left;
	
			// Set the active nav item
			$(this).parent().siblings().removeClass('active');
			$(this).parent().addClass('active');
			indicator.attr('class', year + ' active').css('margin-left', yearPosition + 'px');
	
			// Change the banner image
			if (iOs) {
				var itemPosition = bannerItems.index($('figure#banner ul.main.timeline.active li.' + year));
				banner.css("-webkit-transform", "translate3d(-" + (itemPosition * imageWidth) + "px, 0px, 0px)");
			} else {
				bannerItems.removeClass('active');
				banner.find('li.' + year).addClass('active');
			}
			
			// Show the text
			timeline.find('article').removeClass('active');
			timeline.find('article.' + year).addClass('active');
	
			// Change the URL
			changeUrl($(this).attr('href'));
	
			return false;
		});
		
		if (iOs) {
			timeline.find('nav ul li.active a').trigger('click');
		}
	}
}


/*
	Intro page slideshows
*/
var loadBoatIntro = function() {
	
	$('img#rendering').each(function() {
		$(this).reel({
	    cw: true,
	    frame: 43,
	    frames: 50,
	    brake: 0.5,
	    revolution: (iOs ? 1500 : 1000),
	    path: renderingPath,
	    images: renderingImages,
			indicator: 10
	  });
	});
	
	$('figure.slideshow').each(function() {
	
		// Add the navigation to each slideshow.
		var numItems = $(this).find('img').length;
		
		if (numItems > 1) {
			
			$(this).addClass('navigable');
			$(this).append(html5Shiv('<nav><ul></ul></nav>'));
	
			for (i = 0; i < numItems; i++) {
				$(this).find('nav ul').append(html5Shiv('<li><a href="#">' + (i + 1) + '</a></li>'));
			}
	
			$(this).find('nav ul li:first').addClass('active');
			$(this).find('nav').css('margin-left', (0 - ($(this).find('nav').width() / 2)) + 'px');
	
			// Click event for each nav item.
			$(this).find('nav a').click(function() {
				$(this).parent().siblings('li').removeClass('active');
				$(this).parent().addClass('active');

				var position = $(this).parent().prevAll().length;

				$(this).parents('figure.slideshow').find('img').removeClass('active');
				$(this).parents('figure.slideshow').find('img:eq(' + position + ')').addClass('active');
				return false;
			});
			
			// Click event for image.
			$(this).find('img').click(function() {
				var numItems = $(this).parent().find('img').length;
				var position = $(this).parent().find('img.active').prevAll().length;
				var nextPosition = (position + 1) < numItems ? position + 1 : 0;

				$(this).parent().find('img').removeClass('active');
				$(this).parent().find('img:eq(' + nextPosition + ')').addClass('active');
				$(this).parent().find('nav li').removeClass('active');
				$(this).parent().find('nav li:eq(' + nextPosition + ')').addClass('active');
				return false;
			});
		}
	});
}

/*
	Deck Plan
*/
var loadDeckPlan = function() {
	
	// Switch between decks
	$('nav#deck_select li a').click(function() {

		// Get the deck name to activate
		var deck = $.grep($(this).parent().attr('class').split(/\s+/), function(val) {
			return $.inArray(val, ['active']) < 0;
		});

		// Hide any room image that may be open.
		$('#deckzoom').removeClass('active');

		// Show the selected deck plan
		$('ul#deck_area li').removeClass('active')
		$('ul#deck_area li.' + deck).addClass('active')

		// Set the thumbnail active
		$(this).parent().siblings('li').removeClass('active');
		$(this).parent().addClass('active');

		// Set the new URL
		changeUrl($(this).attr('href'));

		return false;
	});

	// Hover effects on deck plans
	if (!iOs) {

		$('ul#deck_area map area, ul#deck_area ul.hotspots li').hover(function() {

			var id = $(this).attr('id');
			var deck = $('section#deckplan ul#deck_area li.active');
			var image = deck.find('img.hotspot.' + id);

			deck.find('img.deck').removeClass('active');	
			deck.find('img.hotspot').removeClass('active');	
			deck.find('img.hotspot.' + id).addClass('active');

			deck.find('h1').html(image.attr('alt'));

		}, function() {

			var deck = $('section#deckplan ul#deck_area li.active');
			var image = deck.find('img.deck');

			deck.find('img.hotspot').removeClass('active');	
			image.addClass('active');

			deck.find('h1').html(image.attr('alt'));
		});
	}
	
	var hideRoom = function() {
		$('#deckzoom').removeClass('active');
		setTimeout(function() {
			$('#deckzoom').empty();
		}, 500);
		
		// Set the new URL
		changeUrl($(this).attr('href'));
		
		return false;
	}
	
	$('#deckzoom figure a.back').click(hideRoom);

	// Show rooms when clicking on hot spots.
	function showRoom(href) {
		
		var id = href.split('/').pop();
		
		$.ajax({
		  url: ajaxLink(href),
		  context: document.body,
		  success: function(data, textStatus, jqXHR) {
		    
				$('#deckzoom').append(html5Shiv(data));
				
				$('#deckzoom figure').addClass('active');
				$('#deckzoom').addClass('active');

				$('#deckzoom figure:last a.back').click(hideRoom);
		  }
		});
	}
	
	// Clicking on hot spots
	$('ul#deck_area map area, ul#deck_area ul.hotspots li').click(function() {
		
		var room = $('ul#deck_area map area#' + $(this).attr('id')).attr('href');
		
		if (room) {
			$('#deckzoom').empty();
			showRoom(room);
		}
		
		// Set the new URL
		changeUrl(room);
		
		return false;
	});

	// Hot spots on room photos.
	$('#deckzoom nav ul li.zoom').live('click', function() {
		
		var target = $(this).attr('target').split('/').pop();
		var boatName = $.grep($('article.main').attr('class').split(/\s+/), function(val) {
			return $.inArray(val, ['main']) < 0;
		});
		var className = boatName + '-' + target;
		
		if ($('#deckzoom figure.' + className).length == 0) {
		
			$.ajax({
			  url: ajaxLink($(this).attr('target')),
			  context: document.body,
			  success: function(data, textStatus, jqXHR) {
					
					if ($('#deckzoom figure.' + className).length == 0) {
						$('#deckzoom').append(html5Shiv(data));
						$('#deckzoom figure:not(.' + className + ')').addClass('behind');

						setTimeout(function() {
							$('#deckzoom figure.' + className).addClass('active');
						}, 1);

						$('#deckzoom figure.' + className + ' a.back').live('click', function() {
							
							var index = $('#deckzoom figure').length;
							var newRoom = $('#deckzoom figure:eq(' + (index - 2) + ')');

							$('#deckzoom figure.' + className).removeClass('active');
							newRoom.removeClass('behind');

							var newUrlFragment = $.grep(newRoom.attr('class').split(/\s+/), function(val) {
								return $.inArray(val, ['active', 'behind']) < 0;
							});

							var baseUrl = window.location.pathname.split('/');
							baseUrl.pop();
							
							var newUrl = baseUrl.join('/') + '/' + String(newUrlFragment).replace(boatName + '-', '');

							// Set the new URL
							changeUrl(newUrl);

							setTimeout(function() {
								$('#deckzoom figure.' + className).detach();
							}, 500);

							return false;
						});
					}
			  }
			});
		} else {
			$('#deckzoom figure.' + className).removeClass('active').appendTo($('#deckzoom'));
			setTimeout(function() {
				$('#deckzoom figure.' + className).removeClass('behind').addClass('active');
				$('#deckzoom figure:not(.' + className + ')').addClass('behind');
			}, 1);
		}
		
		// Set the new URL
		changeUrl($(this).attr('target'));

		return false;
	});

	// Clicking on hot spots
	$('#deckzoom nav ul li:not(.zoom) a').live('click', function(){
		$(this).addClass('active');
	});

	// Clicking away from hot spots
	$('#deckzoom').click(function(){
		$(this).find('nav ul li.active').removeClass('active');
	});
}


var loadSearch = function() {
	var search = $('.search article.main');
	
	if (search.length > 0) {
		var sections = search.find('section');
		var nav = search.find('nav.secondary ul')
		
		var totalResults = sections.find('ul li').length;
		
		if (totalResults == 0) {
			$('.search article.results').hide();
			$('.search article.no-results').show();
			$('body').removeClass('search').addClass('search-noresults');
		}
		
		// If there is more than one group of results
		if (sections.length > 1) {
			
			// Show the relevant tabs
			nav.find('li:not(.all)').hide();
			
			sections.each(function() {
				var numResults = $(this).find('ul li').length;
				var tab = nav.find('li.' + $(this).attr('id'));
				
				tab.find('a').append(' (' + numResults + ')');
				$(this).find('a.button').append(' (' + numResults + ')');
				
				tab.show();
			});
			
			nav.show();
			
			// Hide the secondary results
			sections.each(function() {
				$(this).find('li:lt(3)').addClass('sticky');
			});
			sections.find('li:not(.sticky)').hide();
			
			// Switch between tabs
			nav.find('li').click(function() {
				
				var section = $.grep($(this).attr('class').split(/\s+/), function(val) {
					return $.inArray(val, ['active']) < 0;
				});
				
				if (section == 'all') {
					sections.show();
					sections.find('li:not(.sticky)').hide();
					sections.find('a.button[href="#all"]').show();
				} else {
					sections.hide();
					search.find('section#' + section).show();
					search.find('section#' + section + ' li:not(.sticky)').show();
				}
				
				nav.find('li').removeClass('active');
				$(this).addClass('active');
				return false;
			});
			
			sections.find('a.button[href="#all"]').click(function() {
				var section = $(this).parent().parent().find('li:not(.sticky)').show();
				$(this).hide();
				return false;
			});
		}
	}
}


$(document).ready(function() {	
	$('html').removeClass('no-js');
		
	if (iOs) {
		$('html').removeClass('no-touch').addClass('touch');
		$('html head').append('<script type="text/javascript" src="/javascripts/touchswipe.js"></script>');
	}
	
	if(!Modernizr.input.placeholder){
		$('[placeholder]').focus(function() {
		  var input = $(this);
		  if (input.val() == input.attr('placeholder')) {
			input.val('');
			input.removeClass('placeholder');
		  }
		}).blur(function() {
		  var input = $(this);
		  if (input.val() == '' || input.val() == input.attr('placeholder')) {
			input.addClass('placeholder');
			input.val(input.attr('placeholder'));
		  }
		}).blur();
		$('[placeholder]').parents('form').submit(function() {
		  $(this).find('[placeholder]').each(function() {
			var input = $(this);
			if (input.val() == input.attr('placeholder')) {
			  input.val('');
			}
		  })
		});
	}
	
	
	// Rewrite anchors to switch content instantly.
	if (!mobile) {
  	$('nav.secondary li.nav a, section#features a, section#secondary a, section#third a').live('click', function() {
  		var href = $(this).attr('href');
  		if (href.substring(0,1) != "#") {
  			showContent(href);
  			changeUrl(href);
  			return false;
  		}
  	});
  }
	
	$('nav.secondary li.print a').click(function() {
		window.print();
		return false;
	});
	
	
	/*
		Language selection screen
	*/
	$('footer.main li#language select').bind('change', function() {
    u = location.href.split('/');
    if (($(this) != '') && (u[3] != $(this).val())) {
			createCookie('language', $(this).val(), 60);
			u[3] = $(this).val();
			location.href = u.join('/');
		}
		return false;
	});
	
	var consent = readCookie('consent');
	if (consent == null) {
		loadPopup('language_select', baseHref + 'language-select');
	}
	
	$('form#language-select').live('submit', function() {
		
		var select = $(this).find('select#language');
		var consent = $(this).find('input#allow_cookies:checked');
		var error = false;
		$(this).find('span.error').detach();
		
		if (consent.val() == undefined) {
			$(this).find('p.allow_cookies').addClass('error');
			$(this).find('p.allow_cookies label:first').after('<span class="error">' + allowCookiesError + '</span>');
			error = true;
		}
		if (select.val() == '') {
			$(this).find('p.language').addClass('error');
			$(this).find('p.language label:first').after('<span class="error">' + languageSelectError + '</span>');
			error = true;
		}
		
		if (error == true) {
			return false;
		}
		
		// Set the cookie
		createCookie('consent', 1, 60);
		
		u = location.href.split('/');
    if (u[3] != select.val()) {
			u[3] = select.val();
			location.href = u.join('/');
		} else {
			hidePopup();
		}
		
		return false;
	});
	
	
	/*
		Boats dropdown menu
	*/
	var dropdown = $('section#dropdown');
	
	function showDropdown() {
		dropdown.addClass('active').css('margin-top', '0px');
	}
	
	function hideDropdown() {
		dropdown.removeClass('active').css('margin-top', (0 - dropdown.height() - 1) + 'px');
	}
	
	var toggleDropdown = function() {
		if (dropdown.hasClass('active')) {
			hideDropdown();
		} else {
			showDropdown();
		}
		return false;
	}
	
	hideDropdown();
	$('body > nav li#boats a, body section#dropdown a#close').click(toggleDropdown);
	
	// Clicking outside the zoom window will close it.
	$(document).click(function(e) {
		if (($(e.target).parents('section#dropdown.active').length == 0) && ($(e.target).attr('id') != 'dropdown')) hideDropdown();
	});

	// Hitting the Escape key will close the window.
	$(document).keyup(function(event){
    if (event.keyCode == 27 && $('section#dropdown.active').length > 0) hideDropdown();
	});
	
	$('section#dropdown article.range').each(function() {
		var title = $(this).attr('id');
		$(this).find('nav').prepend(html5Shiv($('section#dropdown article#dropdown-default nav ul.' + title).html()));
	});
	
	if (!iOs) {
		$('section#dropdown nav li').live('mouseover', function() {
			var target = $(this).find('a').attr('href').substring(1);
			$('section#dropdown article nav a[href="#' + target + '"]').parent().addClass('active');
		}).live('mouseout', function() {
			$('section#dropdown article nav li').removeClass('active');
		});
	}

	$('section#dropdown nav.range li, section#dropdown nav.side header, section#dropdown nav.side li').live('click', function() {
		var target = $(this).find('a').attr('href').substring(1);
		dropdown.find('article').removeClass('active');
		dropdown.find('article#' + target).addClass('active');
		dropdown.find('nav li, header h1').removeClass('active');
		$('section#dropdown nav a[href="#' + target + '"]').parent().addClass('active');
		return false;
	});
	
	$('section#dropdown a.hide').click(function() {
		$('section#dropdown article').removeClass('active');
		$('section#dropdown nav li, section#dropdown nav h1').removeClass('active');
		$('section#dropdown article#dropdown-default').addClass('active');
		return false;
	});
	
	$('a.popup').live('click', function() {
		loadPopup($(this).attr('target'), $(this).attr('href'));
		return false;
	});
	
	$('section.popup a.close').live('click', hidePopup);
		
	if (!Modernizr.positionfixed) $(window).scroll(setPopupPosition);
	
	// Clicking outside the zoom window will close it.
	$(document).click(function(e) {
		if (($('section.popup.active').length > 0) && ($(e.target).parents('section.popup.active').length == 0) && !$(e.target).hasClass('popup')) hidePopup();
	});

	// Hitting the Escape key will close the window.
	$(document).keyup(function(event){
    if (event.keyCode == 27 && $('section.popup.active').length > 0) hidePopup();
	});
	
	
	loadGallery();
	loadBoatIntro();
	loadDeckPlan();
	loadTabNavigation();
	loadOurTime();
	loadSearch();
	loadSlider();
	loadFindaDealer();
	loadForm();
	loadNewsSignup();
});

