/*
	************* OPTIONS ************************************** default ****************
	btPrev         - link for previos [selector]    	btPrev: 'a.link-prev'
	btNext         - link for next [selector]		btNext: 'a.link-next'
	holderList     - image list holder [Tag name]		holderList: 'div'
	scrollElParent - list [Tag name]			scrollElParent: 'ul'
	scrollEl       - list element [Tag name]		scrollEl: 'li'
	slideNum       - view slide numbers [boolean]		slideNum: false
	duration       - duration slide [1000 - 1sec]		duration : 1000
	step           - slide step [int]			step: false
	circleSlide    - slide circle [boolean]			circleSlide: true
	disableClass   - class for disable link	[string] 	disableClass: 'disable'
	funcOnclick    - callback function			funcOnclick: null
	innerMargin    - inner margin, use width step [px]      innerMargin:0
	autoSlide      - auto slide [1000 - 1sec]               autoSlide:false
	*************************************************************************************
*/


jQuery.fn.galleryScroll = function(_options){
	// defaults options	
	var _options = jQuery.extend({
		btPrev: 'a.link-prev',
		btNext: 'a.link-next',
		holderList: 'div',
		scrollElParent: 'ul',
		scrollEl: 'li',
		slideNum: false,
		duration : 1000,
		step: false,
		circleSlide: true,
		disableClass: 'disable',
		funcOnclick: null,
		autoSlide:false,
		innerMargin:0,
		stepWidth:false
	},_options);

	return this.each(function(){
		var _this = jQuery(this);

		var _gWidth = jQuery(_options.holderList,_this).width();
		var _liWidth = jQuery(_options.scrollEl,_this).outerWidth(true);
		var _liSum = jQuery(_options.scrollEl,_this).length * _liWidth;
		var _margin = -_options.innerMargin;
		var f = 0;
		var _step = 0;
		var _autoSlide = _options.autoSlide;
		var _timerSlide = null;
		if (!_options.step) _step = _gWidth; else _step = _options.step*_liWidth;
		if (_options.stepWidth) _step = _options.stepWidth;
		
		if (!_options.circleSlide) {
			if (_options.innerMargin == _margin)
				jQuery(_options.btPrev,_this).addClass(_options.disableClass);
		}
		if (_options.slideNum && !_options.step) {
			var _lastSection = 0;
			var _sectionWidth = 0;
			while(_sectionWidth < _liSum)
			{
				_sectionWidth = _sectionWidth + _gWidth;
				if(_sectionWidth > _liSum) {
				       _lastSection = _sectionWidth - _liSum;
				}
			}
		}
		if (_autoSlide) {
				_timerSlide = setTimeout(function(){
					autoSlide(_autoSlide);
				}, _autoSlide);
			jQuery(_options.scrollElParent,_this).hover(function(){
				clearTimeout(_timerSlide);
			}, function(){
				_timerSlide = setTimeout(function(){
					autoSlide(_autoSlide)
				}, _autoSlide);
			});
		}
	
		// click button 'Next'
		jQuery(_options.btNext,_this).bind('click',function(){
			jQuery(_options.btPrev,_this).removeClass(_options.disableClass);
			if (!_options.circleSlide) {
				if (_margin + _step  > _liSum - _gWidth - _options.innerMargin) {
					if (_margin != _liSum - _gWidth - _options.innerMargin) {
						_margin = _liSum - _gWidth  + _options.innerMargin;
						jQuery(_options.btNext,_this).addClass(_options.disableClass);
						_f2 = 0;
					} 
				} else {
					_margin = _margin + _step;
					if (_margin == _liSum - _gWidth - _options.innerMargin) {
						jQuery(_options.btNext,_this).addClass(_options.disableClass);_f2 = 0;
					} 					
				}
			} else {
				if (_margin + _step  > _liSum - _gWidth + _options.innerMargin) {
					if (_margin != _liSum - _gWidth + _options.innerMargin) {
						_margin = _liSum - _gWidth  + _options.innerMargin;
					} else {
						_f2 = 1;
						_margin = -_options.innerMargin;
					}
				} else {
					_margin = _margin + _step;
					_f2 = 0;
				}
			} 
			
			jQuery(_options.scrollElParent,_this).animate({marginLeft: -_margin+"px"}, {queue:false,duration: _options.duration });
			
			if (_timerSlide) {
				clearTimeout(_timerSlide);
				_timerSlide = setTimeout(function(){
					autoSlide(_options.autoSlide)
				}, _options.autoSlide);
			}
			
			if (_options.slideNum && !_options.step) jQuery.fn.galleryScroll.numListActive(_margin,jQuery(_options.slideNum, _this),_gWidth,_lastSection);		
			if (jQuery.isFunction(_options.funcOnclick)) {
				_options.funcOnclick.apply(_this);
			}
			return false;
		});
		// click button 'Prev'
		var _f2 = 1;
		jQuery(_options.btPrev, _this).bind('click',function(){
			jQuery(_options.btNext,_this).removeClass(_options.disableClass);
			if (_margin - _step >= -_step - _options.innerMargin && _margin - _step <= -_options.innerMargin) {
				if (_f2 != 1) {
					_margin = -_options.innerMargin;
					_f2 = 1;
				} else {
					if (_options.circleSlide) {
						_margin = _liSum - _gWidth  + _options.innerMargin;
						f=1;_f2=0;
					} else {
						_margin = -_options.innerMargin
					}
				}
			} else if (_margin - _step < -_step + _options.innerMargin) {
				_margin = _margin - _step;
				f=0;
			}
			else {_margin = _margin - _step;f=0;};
			
			if (!_options.circleSlide && _margin == _options.innerMargin) {
				jQuery(this).addClass(_options.disableClass);
				_f2=0;
			}
			
			if (!_options.circleSlide && _margin == -_options.innerMargin) jQuery(this).addClass(_options.disableClass);
			jQuery(_options.scrollElParent,_this).animate({marginLeft: -_margin + "px"}, {queue:false, duration: _options.duration});
			
			if (_options.slideNum && !_options.step) jQuery.fn.galleryScroll.numListActive(_margin,jQuery(_options.slideNum, _this),_gWidth,_lastSection);
			
			if (_timerSlide) {
				clearTimeout(_timerSlide);
				_timerSlide = setTimeout(function(){
					autoSlide(_options.autoSlide)
				}, _options.autoSlide);
			}
			
			if (jQuery.isFunction(_options.funcOnclick)) {
				_options.funcOnclick.apply(_this);
			}
			return false;
		});
		
		if (_liSum <= _gWidth) {
			jQuery(_options.btPrev,_this).addClass(_options.disableClass).unbind('click');
			jQuery(_options.btNext,_this).addClass(_options.disableClass).unbind('click');
		}
		// auto slide
		function autoSlide(autoSlideDuration){
			//if (_options.circleSlide) {
				if (_liSum - _step  <= _margin + _step - _options.innerMargin) {
					if (f == 0) {
						_margin = _liSum - _gWidth  + _options.innerMargin;
						f = 1;_f2=0;
						if (!_options.circleSlide) 
							jQuery(_options.btPrev, _this).addClass(_options.disableClass);
					} 
					else {
						if (_options.circleSlide) 
							_margin = _options.innerMargin;
						f=0;_f2=0;
					}
				} else _margin = _margin + _step;
				
				jQuery(_options.scrollElParent,_this).animate({marginLeft: -_margin+"px"}, {queue:false,duration: _options.duration });
				
				_timerSlide = setTimeout(function(){
					autoSlide(_options.autoSlide)
				}, _options.autoSlide);
				jQuery.fn.galleryScroll.numListActive(_margin, jQuery(_options.slideNum, _this),_gWidth,_lastSection);
			//}
		};
		// Number list
		jQuery.fn.galleryScroll.numListCreate = function(_elNumList, _liSumWidth, _width, _section){
			var _numListElC = '';
			var _num = 1;
			var _difference = _liSumWidth + _section;
			while(_difference > 0)
			{
				_numListElC += '<li><a href="">'+_num+'</a></li>';
				_num++;
				_difference = _difference - _width;
			}
			jQuery(_elNumList).html('<ul>'+_numListElC+'</ul>');
		};
		jQuery.fn.galleryScroll.numListActive = function(_marginEl, _slideNum, _width, _section){
			if (_slideNum) {
				jQuery('a',_slideNum).removeClass('active');
				var _activeRange = _width - _section-1;
				var _n = 0;
				if (_marginEl != 0) {
					while (_marginEl > _activeRange) {
						_activeRange = (_n * _width) -_section-1 + _options.innerMargin;
						_n++;
					}
				}
				var _a  = (_activeRange+_section+1 + _options.innerMargin)/_width - 1;
				jQuery('a',_slideNum).eq(_a).addClass('active');
			}
		};
		if (_options.slideNum && !_options.step) {
			jQuery.fn.galleryScroll.numListCreate(jQuery(_options.slideNum, _this), _liSum, _gWidth,_lastSection);
			jQuery.fn.galleryScroll.numListActive(_margin, jQuery(_options.slideNum, _this),_gWidth,_lastSection);
			numClick();
		};
		function numClick() {
			jQuery(_options.slideNum, _this).find('a').click(function(){
				jQuery(_options.btPrev,_this).removeClass(_options.disableClass);
				jQuery(_options.btNext,_this).removeClass(_options.disableClass);
				
				var _indexNum = jQuery(_options.slideNum, _this).find('a').index(jQuery(this));
				_margin = (_step*_indexNum) - _options.innerMargin;
				f=0; _f2=0;
				if (_indexNum == 0) _f2=1;
				if (_margin + _step > _liSum) {
					_margin = _margin - (_margin - _liSum) - _step + _options.innerMargin;
					if (!_options.circleSlide) jQuery(_options.btNext, _this).addClass(_options.disableClass);
				}
				jQuery(_options.scrollElParent,_this).animate({marginLeft: -_margin + "px"}, {queue:false, duration: _options.duration});
				
				if (!_options.circleSlide && _margin==0) jQuery(_options.btPrev,_this).addClass(_options.disableClass);
				jQuery.fn.galleryScroll.numListActive(_margin, jQuery(_options.slideNum, _this),_gWidth,_lastSection);
				
				if (_timerSlide) {
					clearTimeout(_timerSlide);
					_timerSlide = setTimeout(function(){
						autoSlide(_options.autoSlide)
					}, _options.autoSlide);
				}
				return false;
			});
		};
		jQuery(window).resize(function(){
			_gWidth = jQuery(_options.holderList,_this).width();
			_liWidth = jQuery(_options.scrollEl,_this).outerWidth(true);
			_liSum = jQuery(_options.scrollEl,_this).length * _liWidth;
			if (!_options.step) _step = _gWidth; else _step = _options.step*_liWidth;
			if (_options.slideNum && !_options.step) {
				var _lastSection = 0;
				var _sectionWidth = 0;
				while(_sectionWidth < _liSum)
				{
					_sectionWidth = _sectionWidth + _gWidth;
					if(_sectionWidth > _liSum) {
					       _lastSection = _sectionWidth - _liSum;
					}
				};
				jQuery.fn.galleryScroll.numListCreate(jQuery(_options.slideNum, _this), _liSum, _gWidth,_lastSection);
				jQuery.fn.galleryScroll.numListActive(_margin, jQuery(_options.slideNum, _this),_gWidth,_lastSection);
				numClick();
			};
			if (_margin == _options.innerMargin) jQuery(this).addClass(_options.disableClass);
			if (_liSum - _gWidth  < _margin - _options.innerMargin) {
				if (!_options.circleSlide) jQuery(_options.btNext, _this).addClass(_options.disableClass);
				jQuery(_options.scrollElParent,_this).animate({marginLeft: -(_liSum - _gWidth + _options.innerMargin) + "px"}, {queue:false, duration: _options.duration});
			};
		});
	});
}

function initLightboxTabs(){
	var _tab = $('.lightbox-container .light-set a');
	_tab.click(function(){
		if(!$(this).hasClass('active')){
			_tab.removeClass('active');
			$(this).addClass('active');
			_tab.each(function(){
				var _href = $(this).attr('href');
				if($(_href).length) {
					if($(this).hasClass('active')) $(_href).addClass('active')
					else $(_href).removeClass('active');
				}
			});
		}
		return false;
	});
}

function initLightboxLinks(){
	var _tab = $('.lightbox-container .light-set a');
	_tab.click(function(){
		if(!$(this).hasClass('activated')){
			_tab.removeClass('activated');
			$(this).addClass('activated');
			_tab.each(function(){
				var _href = $(this).attr('href');
				if($(_href).length) {
					if($(this).hasClass('activated')) $(_href).addClass('activated')
					else $(_href).removeClass('activated');
				}
			});
		}
		return false;
	});
}


jQuery.fn.simpleLightbox = function(_options){
	// defaults options	
	var _options = jQuery.extend({
		lightboxContentBlock: '.lightbox',
		faderOpacity: 0.9,
		faderBackground: '#151B1F',
		closeLink:'a.close-btn, a.cancela',
		href:true,
		onClick: null
	},_options);

	return this.each(function(i, _this){
		var _this = jQuery(_this);
		if (!_options.href)
			_this.lightboxContentBlock = _options.lightboxContentBlock;
		else _this.lightboxContentBlock = _this.attr('href');
		if (_this.lightboxContentBlock != '' && _this.lightboxContentBlock.length > 1) {
			_this.faderOpacity = _options.faderOpacity;
			_this.faderBackground = _options.faderBackground;
			_this.closeLink = _options.closeLink;
			var _fader;
			var _lightbox = $(_this.lightboxContentBlock);
			if (!jQuery('div.lightbox-fader').length)
				_fader = $('body').append('<div class="lightbox-fader"></div>');
			
			_fader = jQuery('div.lightbox-fader');
			_lightbox.css('zIndex',999);
			_fader.css({
				opacity:_this.faderOpacity,
				backgroundColor:_this.faderBackground,
				display:'none',
				position:'absolute',
				top:0,
				left:0,
				zIndex:998,
				textIndent: -9999
			}).text('$nbsp');
			
			_this.click(function(){
				if (jQuery.isFunction(_options.onClick)) {
					_options.onClick.apply(_this);
				}
				_fader.fadeIn(300, function(){
					_lightbox.fadeIn(400,function(){
						initLightboxTabs();
						initLightboxLinks();
					});
					jQuery.fn.simpleLightbox.positionLightbox(_lightbox);
				});
				return false;
			});
			jQuery(_this.closeLink).click(function(){
				_lightbox.fadeOut(400, function(){
					_fader.fadeOut(300);
				});
				return false;
			});
			
			jQuery.fn.simpleLightbox.positionLightbox = function (_lbox) {
				var _height = 0;
				var _width = 0;
				var _minWidth = $('body > div:eq(0)').outerWidth();
				if (window.innerHeight) {
					_height = window.innerHeight;
					_width = window.innerWidth;
				} else {
					_height = document.documentElement.clientHeight;
					_width = document.documentElement.clientWidth;
				}
				var _thisHeight = _lbox.outerHeight();
				var _page = $('body');
				if (_lbox.length) {
					if (_height > _page.innerHeight()) _fader.css('height',_height); else _fader.css('height',_page.innerHeight());
					if (_width < _minWidth) {_fader.css('width',_minWidth);} else {_fader.css('width','100%');}
					if (_height > _thisHeight) {
						if (!window.innerHeight) {
							_lbox.css({
								position:'absolute',
								top: (document.documentElement.scrollTop + (_height - _thisHeight) / 2)+"px"
							});
						} else {
							_lbox.css({
								position:'fixed',
								top: ((_height - _lbox.outerHeight()) / 2)+"px"
							});
						}
					}
					else {
						_lbox.css({
							position:'absolute',
							top: 0
						});
					}
					if (_width > _lbox.outerWidth()) _lbox.css({left:(_width - _lbox.outerWidth()) / 2 + "px"});
					else _lbox.css({position:'absolute',left: 0});
				}
			}
			
			jQuery(window).resize(function(){
				jQuery.fn.simpleLightbox.positionLightbox(_lightbox);
			});
			
			
			jQuery.fn.simpleLightbox.positionLightbox(_lightbox);
				$(document).keydown(function (e) {
				if (!e) evt = window.event;
				if (e.keyCode == 27) {
					_lightbox.fadeOut(400, function(){
						_fader.fadeOut(300);
					});
				}
			});
		}
	});
}
function initLightbox(){
	$('a.explore-btn').simpleLightbox();
}
function initHeaderSlide() {
	$('.slider').each(function(){
	
		var _slideSpeed = 500;
		var _holder = $(this);
		var _slider = _holder.find('div.slide');
		var _opener = $(this).find('a.open-link');
		
		_slider.css({height:'auto',display:'none'});
		
		_holder.addClass('active');
		
		_opener.click(function(){
			if(_holder.hasClass('active')) {
				_holder.removeClass('active');
				_slider.slideDown(_slideSpeed);
			} else {
				_holder.addClass('active');
				_slider.slideUp(_slideSpeed);
			}
			return false;
		});
	});
}

function initNavSlide() {
	$('.slider-nav').each(function(){
	
		var _slideSpeed = 300;
		var _holder = $(this);
		var _slider = _holder.find('div.about-holder-accordion');
		var _opener = $(this).find('a.open-link-nav');
		
		_slider.css({height:'auto',display:'none'});
		
		_holder.addClass('active');
		
		_opener.click(function(){
			if(_holder.hasClass('active')) {
				_holder.removeClass('active');
				_slider.slideDown(_slideSpeed);
			} else {
				_holder.addClass('active');
				_slider.slideUp(_slideSpeed);
			}
			return false;
		});
	});
}

function initSlideShow() {
	$('div.head-box').each(function(){
		var _holder = $(this);
		var _el = _holder.find('ul.slideset li');
		var _txt = _holder.find('.paging p');
		var _link = _holder.find('.paging > ul > li');
		var _currEl = 0;
		var _nextEl = 0;
		var _animated = false;
		var _fadeDur = 500; // fade animation speed
		
		// reset
		_link.eq(_el.index(_el.filter('.active').eq(0))).addClass('active');
		_el.filter('.active').eq(0).removeClass('active').css('z-index',2);
		_txt.hide();
		_txt.filter('.active').eq(0).show().removeClass('active');
		
		// thumb click
		_link.click(function(){
			if(!_animated && !$(this).hasClass('active')) {
				_animated = true;
				var _index = _link.index(this);
				_currEl = _nextEl;
				_nextEl = _index;
				_link.removeClass('active');
				_link.eq(_index).addClass('active');
				animate(_currEl,_nextEl);
			}
			return false;
		});
		
		// animation
		function animate(currEl,nextEl){
			_el.eq(currEl).css('zIndex',3);
			_el.eq(nextEl).css('zIndex',2);
			_el.eq(currEl).animate({
				opacity:0
			},_fadeDur,function(){
				_el.eq(currEl).css({
					zIndex:1,
					opacity:1
				});
				_animated = false;
			});
			_txt.eq(currEl).fadeOut(_fadeDur)
			_txt.eq(nextEl).fadeIn(_fadeDur,function(){
				_animated = false;
			});
		}
	});
}

function initSlideGallery(){
	// vars
	var _holder = $('#carusel');
	var _btPrev = $('a.link-prev-1');
	var _btNext = $('a.link-next-1');
	var _node = _holder.find('ul');
	var _slicer = _holder.find('div');
	var _currImg = 0;
	var _nextImg = 0;
	var _el = _holder.find('li');
	var _stepMargin = _holder.find('li').width();
	var _slideDur = 500; // slide left right duration
	var _fadeDur = 500; // fade out duration
	var _animated = false;
	var _fadeAnimated = false;
	var _maxMargin = _el.length*_stepMargin - _slicer.width();
	var _imgHold = $('.slide-gallery-holder');
	var _item = _imgHold.find('.slide-item');
	$('#carusel').galleryScroll({
		holderList: 'div',
		scrollElParent: 'div ul',
		scrollEl: 'div li',
		step:1
	});
	// click image thumbnail
	_el.find('a').click(function(){
		if(!$(this).parent().hasClass('active')){
			if(!_fadeAnimated){
				_fadeAnimated = true;
				_el.removeClass('active');
				$(this).parent().addClass('active');
				var __index = _el.find('a').index(this);
				_currImg = _nextImg;
				_nextImg = __index;
				bigImg(_currImg,_nextImg);
			}
		}
		return false;
	});
	
	// big image animation
	function bigImg(currImg,nextImg) {
		_item.eq(currImg).fadeOut(_fadeDur,function(){
			_fadeAnimated = false;
		});
		_item.eq(nextImg).fadeIn(_fadeDur);
	}
}

$(document).ready(function(){
	initHeaderSlide();
	initNavSlide();
	initSlideShow();
	initSlideGallery();
	initLightbox();



$('.quad-cont > .slider > .open-link').unbind('click');
$('.quad-cont > .slider > .open-link').click(function () {
	$(this).next().slideToggle();

	return false;
});
	
	/* Analytics */

	// instance vars
	var galleryTitle = "";
	var journeysTitle = "";

	// Tracks the opening of the thickbox (lightbox)
	$('a.thickbox').live('click',function () {
		var type = 'gallery';
		var action = 'open';
		galleryTitle = $(this).children('img').attr('title');

		pageTracker._trackEvent(type, action, galleryTitle);
	
		// Tracks the prev/next/close of the thickbox (lightbox)
		$('#TB_window > a').live('click',function () {
			var type = 'gallery';
			var action = $(this).attr('title');
	
			pageTracker._trackEvent(type, action, galleryTitle);
		});
	});

	// Tracks the open of the home page's Journeys panel
	$('a.explore-btn').live('click',function () {
		var type = 'journeys';
		var action = 'open';
		journeysTitle = $(this).html().replace(/\<[a-z]+\>/,'').match(/[a-zA-Z]+/)[0].substr(0,20);
	
		pageTracker._trackEvent(type, action, title);
	
		// Tracks the close/tab change of the Journeys panel
		$('.lightbox-container').find('a').bind('click',function () {
			var type = 'journeys';
			var action = $(this).html().replace(/\<[a-z]+\>/,'').match(/[a-zA-Z]/)[0];
	
			pageTracker._trackEvent(type, action, journeysTitle);
		});
	});
	
	
	
	$('.photo-gallery-holder').galleryScroll({
		holderList: 'div.hold',
		scrollElParent: 'div.hold ul',
		scrollEl: 'div.hold li',
		slideNum: '.sliding ul'
	});
	
});