var PraiseSlides = new Class({
	
	options: {
		container				: '',
		effect					: '',
		auto_play				: '',
		auto_play_time			: '',
		auto_play_stop_on_click : '',
		nav_position			: '',
		module_id				: ''
	},
	
	container			: '',
	titles				: [],
	slides				: [],
	smallNav			: [],
	prevControl			: '',
	nextControl			: '',
	slideCount			: '',
	startIndex			: 0,
	autoPlayLinkId		: 0,
	autoPlayTimeoutFunction	: 0,
	stopAutoPlay		: false,
	scroller			: '',
	activeIndex			: 0,
	
	initialize: function(options) {
		this.setOptions(options);
		this.container = $(this.options.container);
		
	},
	
	run: function() {
		this.countSlides();
		this.adjustDimensions();
		this.activateTitles();
		this.initControls();
		this.begin();
	},
	
	countSlides: function() {
		this.slides = this.container.getElements('.ps2_slide');
		this.slideCount = this.slides.length;
	},
	
	begin: function() {
		if (this.options.effect == 'slide') {
			this.scroller = new Fx.Scroll(this.container, {
				wait: false,
				duration: 1500,
				offset: {'x': 0, 'y': -10},
				transition: Fx.Transitions.Quad.easeInOut
			});
			
		} else {
			this.slides.each(function(el, i) {
				el.effect = new Fx.Style(el, 'opacity', {
					wait: false,
					duration: 1500,
					transition: Fx.Transitions.Quart.easeInOut
				});
			});
			
		}
		if (this.titles[0]) {
			this.activateClasses(this.titles[0], 0);
			this.transition(0);
		}
	},
	
	adjustDimensions: function() {
		var container = this.container;
		
		var praiseSlidesContainerCoordinates = container.getCoordinates();

		this.slides.each(function(el, i) {
			el.setStyle('width', (praiseSlidesContainerCoordinates.width-40) + 'px');
			el.setStyle('height', praiseSlidesContainerCoordinates.height + 'px');
			if (this.options.effect == "fade") {
				el.setStyle('opacity', '0');
			}
		}, this);
		
		container.setStyle('width', (praiseSlidesContainerCoordinates.width - 1) + 'px');
		container.setStyle('height', (praiseSlidesContainerCoordinates.height - 1) + 'px');
		
		var praiseSlidesBufferDiv = container.getElement('.mod_praiseslides_buffer_div');
		praiseSlidesBufferDiv.setStyle('width', ((this.slideCount + 1)*praiseSlidesContainerCoordinates.width) + 'px');
		praiseSlidesBufferDiv.setStyle('height', ((this.slideCount + 1)*praiseSlidesContainerCoordinates.height) + 'px');
	},
	
	activateTitles: function() {
		var parentHolder = this.container.getParent();
		this.titles = parentHolder.getElements('.title a');
	
		this.titles.each(function(el, i) {
			
			el.addEvent('click', function(event) {
				if(event != undefined) { event = new Event(event).stop(); }
				this.activateClasses(el, i);
				this.transition(i);
				if (this.options.auto_play == '1') {
					if (this.options.auto_play_stop_on_click == '1') {
						this.stopAutoPlay = true;
					}
					clearTimeout(this.autoPlayTimeoutFunction) ;
				}
			}.bind(this));
		}.bind(this)); 
	
	},
	
	transition: function(slideIndex) {
		if (this.options.effect == 'slide') {
			this.scroller.toElement(this.slides[slideIndex]);
		} else {
			var article = this.slides[slideIndex];
			var activeArticle = this.slides[this.activeIndex];
			if(activeArticle != null) { 
				activeArticle.effect.start(1, 0); 
			}
			article.effect.start(0, 1); 
		}
		
		this.activeIndex = slideIndex;
		if (this.options.auto_play == '1' && !this.stopAutoPlay) {
			this.resetAutoPlayTimeout(false);
		}
	},
	
	resetAutoPlayTimeout: function(increment) {
		clearTimeout(this.autoPlayTimeoutFunction);
		
		if (this.options.auto_play == '1' && !this.stopAutoPlay) {
			if (increment) {
				var next = this.activeIndex + 1;
				if (next >= this.slideCount) {
					next = 0;
				}
				this.activateClasses(this.titles[next], next);
				this.transition(next)
			} else {
				this.autoPlayTimeoutFunction = setTimeout(function(){this.resetAutoPlayTimeout(true);}.bind(this), this.options.auto_play_time);
			}
			
		}
	},
	
	initControls: function() {
		var titles = this.titles;
		var controlHolder = $('mod_praiseslides_controls_'+this.options.module_id);
		if (controlHolder) {
			this.nextControl = controlHolder.getElement('a.ps_next');
			this.nextControl.addEvent('click', function(e) {
				e = new Event(e);
				e.stop();
				var last = this.slideCount - 1;
				var next = this.activeIndex + 1;
				if (next > last) {
					next = 0;
				}
				titles[next].fireEvent('click');
			}.bind(this));
			
			this.prevControl = controlHolder.getElement('a.ps_previous');
			this.prevControl.addEvent('click', function(e) {
				e = new Event(e);
				e.stop();
				var last = this.slideCount - 1;
				var previous = this.activeIndex - 1;
				if (previous < 0) {
					previous = last;
				}
				titles[previous].fireEvent('click');
			}.bind(this));
			
		}
		
		var parentHolder = this.container.getParent();
		
		this.smallNav = parentHolder.getElements('a.small_nav_link');
		if (this.smallNav) {
			this.smallNav.each(function(el, i){
				el.addEvent('click', function(e) {
					e = new Event(e)
					e.stop();
					titles[i].fireEvent('click');
				});
			});
		}
	},
	
	
	activateClasses: function(activeElement, index) {
		this.container.getParent().getElements('div.active_title').removeClass('active_title');
		activeElement.getParent().addClass('active_title');

		if (this.smallNav[index]) {
			this.smallNav.removeClass('active_small_nav');
			this.smallNav[index].addClass('active_small_nav');
		}
		
	}
	
});

PraiseSlides.implement(new Options);
