// init page
window.addEvent('domready', function() {
	initGallery();
	//tabs();
	initCycle();
});

// tabs
var showFunction = function(_this) {
	_this.setStyle('display', 'block');
}
var hideFunction = function(_this) {
	_this.setStyle('display', 'none');
}

function tabs(){
	var _curent = 0;
	if($('show-tab'))
	{
		$('show-tab').addEvent('click', function(){
			showTab(4, $$('ul.tab-nav a'));
			if (document.documentElement)
				document.documentElement.scrollTop = 0;
			else document.body.scrollTop = 0;
		});
	}
	$$('ul.tab-nav').each(function(tabset){
		var _tabLinks = tabset.getElements('a');
		_tabLinks.each(function(link, i){
			var _id = link.href.substr(link.href.indexOf('#')+1);
			if (link.hasClass('active')){
				showFunction($(_id));
			} else {
				hideFunction($(_id));
			}
			var _next = $(_id).getElement('div.steps-nav a');
			if (_next)
				_next.addEvent('click', function(){
					_curent++;
					if (_tabLinks.length <= _curent) _curent = 0;
					showTab(_curent, _tabLinks);
					return false;
				});
			link.addEvent('click', function(){
				showTab(i, _tabLinks);
				return false;
			});
		});
	});
	function showTab(_i, _tabLinks){
		_curent = _i;
		var _id = _tabLinks[_curent].href.substr(_tabLinks[_curent].href.indexOf('#')+1);
		_tabLinks.each(function(hideLink){
			var _hideId = hideLink.href.substr(hideLink.href.indexOf('#')+1);
			if (hideLink != _tabLinks[_curent]) {
				hideLink.removeClass('active');
				hideFunction($(_hideId));
			}
		});
		_tabLinks[_curent].addClass('active');
		showFunction($(_id));
	}
}

// cycle gallery init
function initCycle() {
	$$('div.cycle-gallery').each(function(obj,i){
		var _gallery = new cycleCarousel(obj,{
			pagerLinks: 'ul.tab-nav a',
			sliderHolder: 'div.reasons-holder',
			slider: 'ol.reasons',
			slides: 'li',
			nextBtns: '.steps-nav > a',
			duration: 500,
			switchTime: 5000,
			autoRotation:true,
			stopAfterClick:true
		});
	});

	function ClickObject(objID) {
		var target=objID;
		if(document.dispatchEvent) { // W3C
			var oEvent = document.createEvent( "MouseEvents" );
			oEvent.initMouseEvent("click", true, true,window, 1, 1, 1, 1, 1, false, false, false, false, 0, target);
			target.dispatchEvent( oEvent );
		}
		else if(document.fireEvent) { // IE
			target.fireEvent("onclick");
		}
	}

	if($('show-tab'))
	{
		$('show-tab').addEvent('click', function(){
			ClickObject($$('div.cycle-gallery ul.tab-nav a')[4]);
			if (document.documentElement) document.documentElement.scrollTop = 0;
			else document.body.scrollTop = 0;
			return false;
		});
	}

	var _location = window.location.toString();
	if(_location.indexOf('#iso-certified') != -1) {
		ClickObject($$('div.cycle-gallery ul.tab-nav a')[4]);
		if (document.documentElement) document.documentElement.scrollTop = 0;
		else document.body.scrollTop = 0;
		return false;
	}
}

// countdown init
function initGallery() {
	if($('show-tab'))
	{
		$$('div.example .item').each(function(obj,i){
			var _gallery = new fadeGallery(obj,{
				pager1: 'ul.pages a',
				pager2: 'div.switch li',
				slides: 'ul.slideset li',
				autoSlide: false,
				duration : 500
			});
		});
	}
}

// fade gallery module
var fadeGallery = new Class({
	options: {
		pager1: 'div.pager1 .switch-link',
		pager2: 'div.pager2 .switch-link',
		slides: 'ul.slidelist li',
		activeClass: 'active',
		autoSlide: false,
		switchTime: 3000,
		duration : 500
	},

	// create class
	initialize: function(element, options){
		this.setOptions(options);
		var _this = this;

		this.slideset = element.getElements(this.options.slides);
		this.slidesCount = this.slideset.length;
		this.pager1 = element.getElements(this.options.pager1);
		this.pager2 = element.getElements(this.options.pager2);
		this.autoRotation = this.options.autoSlide;
		this.activeClass = this.options.activeClass;
		this.switchTime = this.options.switchTime;

		// slides
		this.duration = this.options.duration;
		this.currentIndex = 0;
		this.oldIndex = 0;
		this.timer = false;

		// gallery init
		this.slideset.each(function(_slide, _index){
			if(_index != _this.currentIndex) _slide.removeClass(_this.activeClass).setStyles({display:'none',opacity:0});
			else _slide.addClass(_this.activeClass).setStyles({display:'block',opacity:1});
		});

		// init control
		if(this.pager1.length) {
			this.pager1.each(function(item,ind){
				item.addEvent('click', function(){
					_this.numSlide(ind);
					return false;
				});
			});
		}
		if(this.pager2.length) {
			this.pager2.each(function(item,ind){
				item.addEvent('click', function(){
					_this.numSlide(ind);
					return false;
				});
			});
		}

		// start autoslide
		if (this.options.autoSlide) {
			this.autoSlide();
		}
	},
	refreshPagination:function(){
		var _this = this;
		if(this.pager1.length) {
			this.pager1.each(function(item,ind){
				if(ind == _this.currentIndex) item.addClass(_this.activeClass);
				else item.removeClass(_this.activeClass);
			});
		}
		if(this.pager2.length) {
			this.pager2.each(function(item,ind){
				if(ind == _this.currentIndex) item.addClass(_this.activeClass);
				else item.removeClass(_this.activeClass);
			});
		}
	},
	numSlide: function(ind){
		if(this.currentIndex != ind) {
			this.oldIndex = this.currentIndex;
			this.currentIndex = ind;
			this.switchSlide();
		}
	},
	nextSlide: function(){
		this.oldIndex = this.currentIndex;
		if(this.currentIndex < this.slidesCount-1) this.currentIndex++;
		else this.currentIndex = 0;
		this.switchSlide();
	},
	prevSlide: function(){
		this.oldIndex = this.currentIndex;
		this.currentIndex--;
		if (this.currentIndex < 0) this.currentIndex = this.slidesCount-1;
		this.switchSlide();
	},
	switchSlide:function(){
		var _oldSlide = this.slideset[this.oldIndex].removeClass(this.activeClass).setStyles({opacity:1,display:'block'});
		var _newSlide = this.slideset[this.currentIndex].addClass(this.activeClass).setStyles({opacity:0,display:'block'});
		// fade elements
		var fxFadeOut = new Fx.Morph(_oldSlide, {duration: this.duration, onComplete:function(){_oldSlide.setStyles({display:'none'});}});
		var fxFadeIn = new Fx.Morph(_newSlide, {duration: this.duration});
		fxFadeOut.start({opacity:0});
		fxFadeIn.start({opacity:1});
		this.autoSlide();
		this.refreshPagination();
	},
	autoSlide: function(){
		if(this.autoRotation) {
			var _this = this;
			if(this.timer) clearTimeout(this.timer);
			this.timer = setTimeout(function(){_this.nextSlide()}, this.switchTime);
		}
	},
	// add options and events
	Implements : [Options, Events]
});

// cycle gallery code
var cycleCarousel = new Class({
	options: {
		activeClass: 'active',
		btPrev: 'a.btn-prev',
		btNext: 'a.btn-next',
		pagerLinks: 'ul.tabset li',
		slidesHolder: 'div',
		slider: '.slide',
		slides: 'li',
		nextBtns: '.steps-nav > a',
		switchTime: 3000,
		duration : 2000,
		stopAfterClick:false,
		autoRotation:false
	},

	// create class
	initialize: function(element, options){
		this.setOptions(options);
		var _this = this;

		if (this.options.btNext) this.next = element.getElement(this.options.btNext);
		else this.next = false;

		if (this.options.btPrev) this.prev = element.getElement(this.options.btPrev);
		else this.prev = false;

		if (this.options.pagerLinks) this.pagerLinks = element.getElements(this.options.pagerLinks);
		else this.pagerLinks = false;

		if (this.options.nextBtns) this.nextBtns = element.getElements(this.options.nextBtns);
		else this.nextBtns = false;

		this.animated = false;
		this.holder = element.getElement(this.options.slidesHolder);
		this.slider = this.holder.getElement(this.options.slider);
		this.slides = this.holder.getElements(this.options.slides);
		this.stepWidth = this.slides[0].getSize().x;
		this.switchTime = this.options.switchTime;
		this.activeClass = this.options.activeClass;
		this.autoRotation = this.options.autoRotation;
		this.stopAfterClick = this.options.stopAfterClick;

		// gallery init
		this.duration = this.options.duration;
		this.slideCount = this.slides.length;
		this.oldIndex = 0;
		this.currentIndex = 0;
		this.timer = false;
		this.direction = false;

		// slides init
		this.slider.setStyles({position:'relative',height:this.slider.getSize().y, width:this.stepWidth});
		this.slides.each(function(slide, ind){
			if(this.currentIndex == ind) slide.setStyles({opacity:1,display:'block'});
			else slide.setStyles({opacity:0,display:'none'});
		}.bind(this));

		// mouseover
		_this.addEvent('mouseover', function(){
			if (_this.timer) clearInterval(_this.timer);
		}).addEvent('mouseout', function(){
			_this.autoSlide();
		});

		if(_this.stopAfterClick) {
			$$('body')[0].addEvent('click',function(){
				_this.autoRotation = false;
				clearTimeout(_this.timer);
			});
			window.addEvent('scroll',function(){
				_this.autoRotation = false;
				clearTimeout(_this.timer);
			});
		}

		// gallery control
		if (this.next) {
			this.next.addEvent('click', function(){
				if (!_this.animated) {
					if(_this.stopAfterClick) {
						_this.autoRotation = false;
						clearTimeout(_this.timer);
					}
					_this.nextSlide();
				}
				return false;
			});
		}
		if (this.prev) {
			this.prev.addEvent('click', function(){
				if (!_this.animated) {
					if(_this.stopAfterClick) {
						_this.autoRotation = false;
						clearTimeout(_this.timer);
					}
					_this.prevSlide();
				}
				return false;
			});
		}
		if (this.pagerLinks) {
			this.pagerLinks.each(function(link,ind){
				link.addEvent('click', function(){
					if (!_this.animated && _this.currentIndex!=ind) {

						if(_this.stopAfterClick) {
							_this.autoRotation = false;
							clearTimeout(_this.timer);
						}
						_this.direction = (_this.currentIndex < ind);
						_this.oldIndex = _this.currentIndex;
						_this.currentIndex = ind;
						_this.switchSlide();
					}
					return false;
				});
			});
		}

		if (this.nextBtns) {
			this.nextBtns.each(function(link,ind){
				link.addEvent('click', function(){
					if (!_this.animated) {
						if(_this.stopAfterClick) {
							_this.autoRotation = false;
							clearTimeout(_this.timer);
						}
						_this.nextSlide();
					}
					return false;
				});
			});
		}

		// autoslide
		if (this.options.autoRotation) {
			this.autoSlide();
		}
	},
	nextSlide: function(){
		this.oldIndex = this.currentIndex
		if(this.currentIndex < this.slideCount-1) this.currentIndex++;
		else this.currentIndex = 0;
		this.direction = true;
		this.switchSlide();
	},
	prevSlide: function(){
		this.oldIndex = this.currentIndex
		if(this.currentIndex < this.slideCount-1) this.currentIndex++;
		else this.currentIndex = 0;
		this.direction = false;
		this.switchSlide();
	},
	refreshPager: function() {
		// refresh pagination
		if (this.pagerLinks) {
			this.pagerLinks.each(function(link,ind){
				if(ind != this.currentIndex) {
					link.removeClass(this.activeClass);
				} else {
					link.addClass(this.activeClass);
				}
			}.bind(this));
		}
	},
	switchSlide: function(){
		var _d = (this.direction ? -1 : 1);
		var oldSlide = this.slides[this.oldIndex];
		var newSlide = this.slides[this.currentIndex];

		// fade elements
		oldSlide.removeClass(this.activeClass).setStyles({opacity:1,display:'block'});
		newSlide.addClass(this.activeClass).setStyles({opacity:0,display:'block'});
		var fxFixHeight = new Fx.Morph(this.slider, {duration: this.duration});
		var fxFadeIn = new Fx.Morph(newSlide, {duration: this.duration});
		var fxFadeOut = new Fx.Morph(oldSlide, {duration: this.duration, onComplete:function(){
			oldSlide.setStyles({display:'none'});
			fxFadeIn.start({opacity:1});
		}});
		fxFadeOut.start({opacity:0});
		fxFixHeight.start({height:newSlide.getSize().y});
		this.autoSlide();
		this.refreshPager();
	},
	autoSlide : function(){
		if(this.autoRotation) {
			var _this = this;
			if(this.timer) clearTimeout(this.timer);
			this.timer = setInterval(function(){_this.nextSlide()}, this.options.switchTime);
		}
	},

	// add options and events
	Implements : [Options, Events]
});

