var application = {
	initImageFading: function(selector, options) {
		var images = $$(selector),
			options = options || {};
		
		if(options.excludeSelector) {
			var exclude_images = $$(options.excludeSelector);
			
			images = images.reject(function(image){
				return exclude_images.include(image);
			});
		}
	
		images.each(function(image) {
			var overEffect, outEffect;
			
			image.setOpacity(options.from);
			
			image.observe('mouseover', function(event) {
				overEffect = new Effect.Appear(image, { 
					from: options.from, 
					duration: options.fadeDuration, 
					beforeStart: function(){ 
						if (outEffect) outEffect.cancel(); 
					}
				});
			});
			
			image.observe('mouseout', function(event) {
				outEffect = new Effect.Fade(image, { 
					to: options.from, 
					duration: options.resetDuration, 
					beforeStart: function(){ 
						if (overEffect) overEffect.cancel();
					} 
				});
			});
		});
	},
	
	initBannerAnimation: function(options) {
		if(options.animate == true) {
			var banner = $('headerBanner'),
				moveWidth = ((document.viewport.getWidth() - banner.getWidth()) / 2) + banner.getWidth();
		
			banner.setStyle({ left: -moveWidth + 'px' });
		
			new Effect.Opacity(banner, { to: 1, from: 0 });
			new Effect.Move(banner, { x: moveWidth, duration: 0.5 });
		}
	},
	
	initBannerSlideshow: function() {
		var banner = $('headerBanner'),
			slides = banner.select('.slide img'),
			slideIndex = 1, lastSlideIndex = 0,
			isIE = /msie|MSIE/.test(navigator.userAgent);
			
		if (slides.length > 0) {
			slides.each(function(slide){ slide.hide(); });	
		
			if(!isIE) {
				new Effect.Grow(slides[0], {
					beforeStart: function() {
						slides[0].up('div').addClassName('currentSlide');
					}
				});
			} else {
				slides[0].show();
				slides[0].up('div').addClassName('currentSlide');
			}
		
			new PeriodicalExecuter(function(pe) {
				if(!isIE) {
					new Effect.Fade(slides[lastSlideIndex], {
						beforeStart: function() {
							slides[slideIndex].up('div').addClassName('currentSlide');
							slides[lastSlideIndex].up('div').removeClassName('currentSlide');
						}
					});
				} else {
					slides[lastSlideIndex].hide();
					slides[slideIndex].up('div').addClassName('currentSlide');
					slides[lastSlideIndex].up('div').removeClassName('currentSlide');
				}
			
				new Effect.SlideDown(slides[slideIndex].up(), { scaleContent: false, 
					beforeStart: function() {
						slides[slideIndex].show();
						slides[slideIndex].up('div').hide();
					}
				});
			
				lastSlideIndex = slideIndex;

				if (slideIndex == slides.indexOf(slides.last())) {
					slideIndex = 0;
				} else {
					slideIndex = slideIndex + 1;
				}
			}, 7);
		}
	},
	
	initMinHeight: function(selector, minHeight, options) {
		var elements = $$(selector);
		
		elements.each(function(element){
			if (element.getHeight() < minHeight) {
				element.setStyle({ height: minHeight + 'px' });
			}
		});
	},
	
	initRockBandScores: function(options) {
		var triggers = $$('.about .item h3');
			
		triggers.each(function(trigger){
			var scores = trigger.next('.rockBand');
			
			if(scores) {
				scores.setStyle({ position: 'relative', left: 0 });
				scores.hide();
			
				trigger.observe('click', function(event){
					new Effect.Appear(scores);
				});
			}
		});
	}
}

document.observe('dom:loaded', function() {
	application.initImageFading('.gallery .image', { 
		from: 0.65, 
		fadeDuration: 0.25, 
		resetDuration: 0.10 
	});
	
	application.initImageFading('#sidebarFeaturedProjects .image', { 
		from: 0.65, 
		fadeDuration: 0.25, 
		resetDuration: 0.10 
	});
	
	application.initImageFading('#infoConnect li a', { 
		from: 0.5, 
		fadeDuration: 0.25, 
		resetDuration: 0.10 
	});
	
	application.initImageFading('#headerNavigation li a', { 
		excludeSelector: '#headerNavigation li a[class="current"]', 
		from: 0.5, 
		fadeDuration: 0.25, 
		resetDuration: 0.10 
	});
	
	application.initImageFading('form .submitButton button', {
		from: 0.5, 
		fadeDuration: 0.25, 
		resetDuration: 0.25
	});
	
	application.initImageFading('#pulloutRails .image a img', {
		from: 0.65,
		fadeDuration: 0.25,
		resetDuration: 0.25
	});
	
	application.initBannerAnimation({ animate: animateBanner });
	
	application.initBannerSlideshow();
	
	application.initRockBandScores();
});