function nextSlide()
{
	var current = $('.slide-holder .active');

	var target = current.next('li');
	if(target.size() == 0) {
		target = current.parents('ul:first').children('li:first');
	}

	setSlide(target.data('region-id'));
	

//	var current = $('.slide-holder .active')
//	.removeClass('active')
//	.addClass('transition');
//
//	// set our target to active
//	var target = current.next('li');
//	if(target.size() == 0) {
//		target = current.parents('ul:first').children('li:first');
//	}
//
//	target.addClass('active').show();
//
//	// fadeout our previously current item
//	current.fadeOut(600, function() {
//		$(this).removeClass('transition');
//	});
//
//	var current_info = $('.slide-info .frame.active').removeClass('active').hide();
//
//	var target_info = current_info.next('.frame');
//	if(target_info.size() == 0) {
//		target_info = $('.slide-info .frame:first');
//	}
//
//	target_info.addClass('active').show();
}

var slideTimer;
var slideActive = false;

function startSlideShow()
{
	var numberSlideElements = $('.slide .slide-holder .region').size();

	// only start the slideshow if we dont have a current slideTimer
	if(!slideTimer && numberSlideElements > 1) {
		$('.slide-info .frame').removeClass('active').hide();
		slideTimer = window.setInterval(nextSlide, 3000);
	}
}

function stopSlideShow()
{
	clearInterval(slideTimer);
	slideTimer = null;
}

function setSlide(region_id, show_info, fade)
{
	//console.log('slide Active=' + slideActive);

	if(slideActive) {
		return;
	}

	// if no fade option provided then assume they want it
	if(fade == undefined) {
		fade = true;
	} 

	slideActive = true;

	var current = $('.slide-holder .active');

	// set our target to active
	//$('.slide-holder .region-' + region_id).addClass('active').show();
	// workout our target
	var target = current.parents('ul:first').children('li[data-region-id=' + region_id + ']');
	if(target.size() == 0) {
		target = current.parents('ul:first').children('li:first');
	}

	//if(current.data('region-id') == target.data('region-id')) {
	//	console.log('returned');
	//	slideActive = false;
	//	return;
	//}

	if(!fade) {
		current.removeClass('active').hide();
		target.addClass('active').show();

	} else {
		current.removeClass('active').addClass('transition');

		target.addClass('active').show();

		// fadeout our previously current item
		current.fadeOut(600, function() {
			$(this).removeClass('transition');
		});
	}
	// show our slide info

	if(show_info) {
		$('.slide-info .frame.active').removeClass('active').hide();

		var target_info = $('.slide-info .frame[data-region-id=' + region_id + ']');

		if(target_info.size() == 0) {
			target_info = $('.slide-info .frame:first');
		}

		target_info.addClass('active').show();
	} else {
		$('.slide-info .frame').hide();
	}

	slideActive = false;

}

jQuery(function(){
	initPlugins();
	ieHover('#search, #submit', 'hover');

	$('a[rel=external]').click(function() {
		window.open(this.href);
		return(false);
	});

	$('a.trigger-tab').click(function() {
		var tab_id = $(this).attr('href');
		window.location='#top'; 
		var tab_href = $('ul.tabset a[href="' + tab_id + '"]');
		tab_href.trigger('click');
		return(false);
	});

	// wrapper for google analytics page tracker
	// assign links the class 'trackme' and provide a name attribute to track clicks in google analytics
	$('a.trackme').click(function() {
		if(this.name) {
			_gaq.push(['_trackPageview', '/' + this.name]);
		}
	});
	
	$('a.track-download-event').click(function() {
		var action = $(this).data('action');
		var label = 	$(this).data('label');
		
		if(action) {
			if(!label) label = this.href;
			_gaq.push(['_trackEvent', 'Downloads', action, label]);
		}
	});
	
	/**
	 * Search form jQuery
	 */

	// show/hide the extended search options
	$('.more-options a').click(function() {
		var href = $(this);
		$(this).parent().next('div').toggle(0, function() {
			var val = '';
			if($(this).is(":visible")) {
				val = href.html().replace(/more/i, 'less');
			} else {
				val = href.html().replace(/less/i, 'more');
			}
			href.html(val);
		});
		return(false);
	});


	// if there are pre-selected options in the more search options container
	// then show it
	$('.more-option-container input[type=text],.more-option-container select').each(function() {
		if($(this).val() != '') {
			$('.more-options a').trigger('click');
		}
	});

	// loop through each of our bullets and attempt a string match
	// against the region select labels so we can associate a region id
	// using a html5 data attribute with the marker.
	// If we cant find one then fallback to using the hardcoded id's in
	// the anchor tag
	$('#region-map a.bullet-map').each(function() {
		anchor = $(this);
		var target_id;

		$('#national_region option').each(function() {
			option = $(this).html();
			if(option.match(RegExp(anchor.attr('title'), 'i'))) {
				target_id = $(this).val();
				return(false);
			}
		});

		if(!target_id) {
			target_id = anchor.attr('href').replace(/#/, '');
		}
		anchor.attr('data-region-id', target_id);
	})

	// Make the Map Makers clickable and trigger a select box change
	$('#region-map a.bullet-map').click(function() {
		var region_id = $(this).attr('data-region-id');

		$('#national_region').val(region_id).trigger('change');

		return(false);
	});

	// hover over functionality for map markers
	$('#region-map a.bullet-map').hover(function() {
		stopSlideShow();
		setSlide($(this).data('region-id'), true, false);
		
	}, function() {
		
		// if were hovering off and they have something selected then
		// reset back to the selection
		var current = $('#region-map a.bullet-map.active');
		if(current.size() > 0) {
			setSlide(current.data('region-id'), true, false);
		} else {
			startSlideShow();
		}

	});

	// if there a more then one region item in the slideshow then start it
	if($('.slide .slide-holder .region').size() > 1) {
		startSlideShow();
	}

	// preselesct a marker on the national_region's if the region select has a value
	var national_region_id = $('#national_region').val();
	if(national_region_id != '') {
		$('#region-map a.bullet-map[data-region-id=' + national_region_id + ']').addClass('active');
	}

	
	// AJAX Find Your Adventure Search
	$('#national_region').change(function() {

		$('#region-map a.bullet-map').removeClass('active')
		.filter('[data-region-id="' + $(this).val() + '"]')
		.addClass('active');

		var range_size = 3;
		var form = $(this).parents('form:first');
		var region_id = $(this).val();

		if(region_id != '') {
			$.ajax({
				type: "GET",
				url: form.attr('action'),
				data: $(this).serialize() + '&range_size=' + range_size,
				dataType: "json",
				success: function(response){
					var target = $('.product-box .inner');

					if($('.slide-holder li').size() == -1) {
						// get the currently active item, remove its active class
						// and set it to a transitional class
						var current = $('.slide-holder .active')
						.removeClass('active')
						.addClass('transition');

						// set our target to active
						$('.slide-holder .region-' + region_id).addClass('active').show();

						// fadeout our previously current item
						current.fadeOut(1100, function() {
							$(this).removeClass('transition');
						});

						//var currentBanner = $('.slide-holder li:visible,.slide-info .frame:visible');
						//var nextBanner = $('.slide-holder .region-' + region_id + ',' + '.slide-info .region-' + region_id);
						
						//currentBanner.fadeOut(function() {
						//	nextBanner.fadeIn();
						//});

					
						$('.slide-info .frame').removeClass('active').hide();
						$('.slide-info .region-' + region_id).addClass('active').show();
					}

					// if the target is hidden then shown it and slide it down
					// otherwise use a fadeIn transition
					if(target.is(':hidden')) {
						target.html(response.html).slideDown();
					} else {
						target.hide().html(response.html).fadeIn();
					}

					if(response.total_available > range_size) {
						var link = form.attr('action') + '?' + form.serialize();

						$('.more-tropical').show()
						.find('span:first')
						.html(response.total_available)
						.end()
						.find('a:first').attr('href', link);
					} else {
						$('.more-tropical').hide();
					}
				}
			});
		} else {
//			$('.slide-holder li').hide().filter(':not(.region)').show().addClass('active');
//			$('.slide-info div.frame').hide().filter(':not(.region)').show().addClass('active');

			var currentBanner = $('.slide-holder li:visible,.slide-info .frame:visible');
			var nextBanner = $('.slide-holder li:first' + ',.slide-info .frame:first');

			currentBanner.fadeOut(function() {
				nextBanner.fadeIn();
			});


			$('.product-box .inner').slideUp();
			$('.more-tropical').hide();
		}

	});

	/**
	 * Recommendations jQuery
	 */
	var recommendations = $('.recommendations-block .recommendation:gt(0)');

	if(recommendations.size() > 0) {
		recommendations.addClass('more').hide();
		$('.recommendations-block a').click(function() {
			var href = $(this);
			$('.recommendations-block .more').toggle(0, function() {
				if($(this).is(":visible")) {
					val = href.html().replace(/more/i, 'less');
				} else {
					val = href.html().replace(/less/i, 'more');
				}
				href.html(val);
			});
			return(false);
		}).show();
	}


});

function initPlugins(){
	$('ul.tabset').jqueryTabs({
		addToParent:false,
		holdHeight:true,
		activeClass:'active',
		tabLinks:'a.tab',
		fadeSpeed:0
	});
	clearFormFields({
		clearInputs: true,
		clearTextareas: true,
		passwordFieldText: false,
		addClassFocus: "focus",
		filterClass: "default"
	});
}

// jquery ie6 hover pack
function ieHover(obj, hoverClass){
	var elements = obj;
	var hoverClass = hoverClass;
	if($.browser.msie && parseInt($.browser.version) == 6){
		$(elements).hover(function(){
			$(this).addClass(hoverClass);
		}, function(){
			$(this).removeClass(hoverClass);
		});
	}
}

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";
	}
}

// jquery tabs plugin
jQuery.fn.jqueryTabs = function(_options){
	// default options
	var _options = jQuery.extend({
		addToParent:false,
		holdHeight:false,
		activeClass:'active',
		tabLinks:'a.tab',
		fadeSpeed:300,
		event:'click'
	},_options);

	return this.each(function(){
		var _holder = jQuery(this);
		var _fadeSpeed = _options.fadeSpeed;
		var _activeClass = _options.activeClass;
		var _addToParent = _options.addToParent;
		var _holdHeight = _options.holdHeight;
		var _tabLinks = jQuery(_options.tabLinks, _holder);
		var _tabset = (_addToParent ? _tabLinks.parent() : _tabLinks);
		var _event = _options.event;
		var _animating = false;

		// tabs init
		_tabLinks.each(function(){
			var _tmpLink = jQuery(this);
			var _tmpTab = jQuery(_tmpLink.attr('href'));
			var _classItem = (_addToParent ? _tmpLink.parent() : _tmpLink);
			if(_tmpTab.length) {
				if(_classItem.hasClass(_activeClass)) _tmpTab.show();
				else _tmpTab.hide();
			}
		});

		// tab switcher
		function switchTab(_switcher) {
			if(!_animating) {
				var _link = jQuery(_switcher);
				var _newItem = (_addToParent ? _link.parent() : _link);
				var _newTab = jQuery(_link.attr('href'));
				if(_newItem.hasClass(_activeClass)) return;

				var _oldItem = jQuery(_addToParent ? _tabset : _tabLinks).filter('.'+_activeClass);
				var _oldTab = jQuery(jQuery(_addToParent ? _oldItem.children('a') : _oldItem).attr('href'));
				if(_newTab.length) {
					_animating = true;
					if(_oldItem.length) {
						_newItem.addClass(_activeClass);
						_oldItem.removeClass(_activeClass);

						var _parent = _oldTab.parent();
						if(_holdHeight) _parent.css({
							height:_parent.height()
							});

						_oldTab.fadeOut(_fadeSpeed,function(){
							_newTab.fadeIn(_fadeSpeed,function(){
								_animating = false;
							});
							if(_holdHeight) _parent.css({
								height:'auto'
							});
						});
					} else {
						_newItem.addClass(_activeClass);
						_newTab.fadeIn(_fadeSpeed,function(){
							_animating = false;
						});
					}
				}
			}
		}

		// control
		_tabLinks.each(function(){
			jQuery(this).bind(_event,function(){
				switchTab(this);
				return false;
			});
		});
	});
}
