// page init
$(function(){
	initCufon();
	initAccordion();
	initSearchArea();
	initScrollGallery();
});

// cufon init
function initCufon() {
	Cufon.replace('ul.navigation a', { fontFamily: 'GiddyupStd', hover: true });
	Cufon.replace('#footer h2', { fontFamily: 'GothamRnd-Book'});
	Cufon.replace('.three-cols h2', { fontFamily: 'GothamRnd-Light'});
	Cufon.replace('.top-section .column h1', { fontFamily: 'GothamRnd-Bold'});
	Cufon.replace('#content h1', { fontFamily: 'GothamRnd-Bold'});
	Cufon.replace('.top-section .column .promo', { fontFamily: 'GothamRnd-Medium'});
	Cufon.replace('#content .promo', { fontFamily: 'GothamRnd-Light'});
	Cufon.replace('.splash-holder h1', { fontFamily: 'GothamRnd-Light'});
	Cufon.replace('.two-cols h3', { fontFamily: 'GothamRnd-Light'});
}

// accordion function
function initAccordion() {
	var _activeClass = 'active';
	var _slideSpeed = 500;
	
	$('.side-nav > div > ul').each(function(){
		var _accordion = $(this);
		var _items = _accordion.find('li:has(ul)');
		
		_items.each(function(){
			var _holder = $(this);
			var _opener = _holder.find('>a, >h2');
			var _slider = _holder.find('>ul');

			_opener.click(function(){
				var _levelItems = _holder.siblings(':has(ul)');

				if(_holder.hasClass(_activeClass)) {
					_slider.slideUp(_slideSpeed);
					_holder.removeClass(_activeClass);
				} else {
					_holder.addClass(_activeClass);
					_slider.slideDown(_slideSpeed);

					// collapse others
					_levelItems.removeClass(_activeClass).find('>ul:visible').slideUp(_slideSpeed)
				}
				return false;
			});

			if(_holder.hasClass(_activeClass)) _slider.show();
			else _slider.hide();
		});
	});
}

// search area
function initSearchArea() {
	var _showOnClick = false;
	var _fadeSpeed = ($.browser.msie ? 0 : 600);
	var _activeClass = 'active';
	$('div.navigation').each(function(){
		var _holder = $(this);
		var _opener = _holder.find('.search-opener');
		var _drop = _holder.find('.search-form');

		// click behaviour
		if(_showOnClick) {
			_opener.click(function(){
				if(_holder.hasClass(_activeClass)) {
					_drop.fadeOut(_fadeSpeed);
					_holder.removeClass(_activeClass);
				} else {
					_holder.addClass(_activeClass);
					_drop.fadeIn(_fadeSpeed);
				}
				return false;
			});
			if(_holder.hasClass(_activeClass)) _drop.show();
			else _drop.hide();
		}
		// hover behaviour
		else {
			var _input = _drop.find('input[type="text"]');
			var _focusFlag = false;
			var _delay = 250;
			var _timer;

			// opener
			_opener.hover(function(){
				if(_timer) clearTimeout(_timer);
				_holder.addClass(_activeClass);
				_drop.fadeIn(_fadeSpeed);
			},function(){
				if(_timer) clearTimeout(_timer);
				if(!_focusFlag) {
					_timer = setTimeout(function(){
						_drop.fadeOut(_fadeSpeed);
						_holder.removeClass(_activeClass);
					},_delay)
				}
			});

			// don't hide popup
			_drop.hover(function(){
				if(_timer) clearTimeout(_timer);
			},function(){
				if(_timer) clearTimeout(_timer);
				if(!_focusFlag) {
					_timer = setTimeout(function(){
						_drop.fadeOut(_fadeSpeed);
						_holder.removeClass(_activeClass);
					},_delay)
				}
			})

			// don't hide input if focused
			_input.focus(function(){
				_focusFlag = true;
			}).blur(function(){
				_focusFlag = false;
			})

			_holder.removeClass(_activeClass)
			_drop.hide();
		}

		// hide drop if clicked elsewhere
		$('body').click(function(e){
			if(!e) e = window.event;
			var _target = (e.target || e.srcElement);
			if (!$(_target).parents('div.navigation').length) {
				_drop.fadeOut(_fadeSpeed);
				_holder.removeClass(_activeClass);
			}
		});

		// close on ESC key
		$(document).keydown(function(e) {
			if (!e) e = window.event;
			if (e.keyCode == 27) {
				_drop.fadeOut(_fadeSpeed);
				_holder.removeClass(_activeClass);
			}
		})

	});
}

// gallery init
function initScrollGallery() {
	// settings
	var _waitAnimation = false;
	var _autoSlide = false;
	var _easing = 'swing';
	var _activeClass = 'active';
	var _switchTime = 5000;
	var _speed = 650;

	$('div.gallery').each(function(){
		// gallery options
		var _holder = $(this);
		var _pagerLinks = _holder.find('div.pagernav li');
		var _btnPrev = _holder.find('a.link-prev');
		var _btnNext = _holder.find('a.link-next');
		var _slidesHolder = _holder.find('div.frame');
		var _slider = _slidesHolder.find('>ul');
		var _slides = _slider.children();
		var _slidesCount = _slides.length;
		var _slideWidth = _slides.eq(0).outerWidth(true);
		var _visibleCount = Math.round(_slidesHolder.width() / _slideWidth);
		var _currentIndex = 0;
		var _oldIndex = _currentIndex;
		var _animating = false;
		var _direction;
		var _timer;

		// slider height
		_holder.css({position:'relative'});
		_slider.css({height:_slides.eq(0).outerHeight(true)});
		_slides.show().css({position:'absolute',top:0,left:_slideWidth});
		_slides.eq(_currentIndex).css({left:0});

		// gallery control
		_pagerLinks.each(function(_ind){
			$(this).click(function(){
				if(_animating) return;
				if(_ind != _currentIndex) {
					_oldIndex = _currentIndex;
					_currentIndex = _ind;
					_direction = (_oldIndex < _currentIndex);
					switchSlide();
				}
				return false;
			});
		});
		_btnPrev.click(function(){
			prevSlide();
			return false;
		})
		_btnNext.click(function(){
			nextSlide();
			return false;
		})

		// switch functions
		function prevSlide() {
			if(_animating) return;
			_oldIndex = _currentIndex;
			if(_currentIndex > 0) _currentIndex--;
			else _currentIndex = _slidesCount-1;
			_direction = false;
			switchSlide();
		}
		function nextSlide() {
			if(_animating) return;
			_oldIndex = _currentIndex;
			if(_currentIndex < _slidesCount-1) _currentIndex++;
			else _currentIndex = 0;
			_direction = true;
			switchSlide();
		}

		// gallery animation
		function refreshStatus() {
			_pagerLinks.removeClass(_activeClass).eq(_currentIndex).addClass(_activeClass);
		}
		function switchSlide() {
			if(_waitAnimation) _animating = true;
			_slides.eq(_currentIndex).css({left:(_direction ? _slideWidth : -_slideWidth)}).animate({left:0},{duration:_speed, queue:false,easing:_easing,complete:function(){
				_animating = false;
			}});
			_slides.eq(_oldIndex).animate({left:(_direction ? -_slideWidth : _slideWidth)},{duration:_speed, queue:false,easing:_easing});
			refreshStatus();
			autoSlide();
		}
		function autoSlide() {
			if(!_autoSlide) return;
			if(_timer) clearTimeout(_timer);
			_timer = setTimeout(nextSlide,_switchTime);
		}
		refreshStatus();
		autoSlide();
	});
}