var HeroSlider = {
	slideWidth: 1000,
	slideContainer: null,
	images: null,
	heroNav: null,
	
	init: function(){
		if(HeroManifest.html.length > 1) HeroSlider.showControls();
	
		var slidesReady = 0,
			heroImages = Asset.images(HeroManifest.images,{
			onComplete: function(){
				
				var slideContainer = $('heroSlides'),
					heroNav = $('heroNav'),
					currentSlideIndex = 0,
					slideQueue = [];
				HeroSlider.slideContainer = slideContainer;
				HeroSlider.heroNav = heroNav;
				HeroSlider.currentSlideIndex = 0;
				HeroSlider.numberOfSlides = HeroManifest.html.length - 1;
				
				slideContainer.setStyle('width', (HeroManifest.html.length * 1000)+'px');
				
				getHTML();
				function getHTML(){
					var div = new Element('div.heroSlide'),
						span = new Element('span.heroNavSlideSelect');
					div.addEvent('focus:relay(*)', function(e){
						e.stop();
						HeroSlider.slideTo(div.get('data-slide'));
					});
					new Request({
						url: HeroSlider.manifest.html[currentSlideIndex].template,
						method: 'GET',
						evalScripts: true,
						onSuccess: function(innerHTML, xml){
							div.innerHTML = innerHTML.substitute(HeroSlider.manifest.html[currentSlideIndex]);
							slideContainer.grab(div);
							
							div.set('data-slide', currentSlideIndex);
							span.set('data-slide', currentSlideIndex);
							heroNav.grab(span);
							slideQueue.push(span);
							currentSlideIndex++;
							slidesReady++;
							if(HeroSlider.manifest.html.length == slidesReady){
								finalize();
							} else {
								getHTML();
							}
						}
					}).send();
				}
				
				function finalize(){
					heroNav.grab(new Element('DIV[style=clear:both]'), 'bottom');
					HeroSlider._updateActiveControl();
					$('hero').addEvents({
						'mouseenter': function(){
							if(HeroSlider._event.onMouseEnter) HeroSlider._event.onMouseEnter();
						},
						'mouseleave': function(){
							if(HeroSlider._event.onMouseLeave) HeroSlider._event.onMouseLeave();
						}
					});
					HeroSlider.fadeControls('out');
				}
			}
			
		});
		
		$('heroRightNav').addEvent('click', function(){
			HeroSlider.nextSlide();
		});
		
		$('heroLeftNav').addEvent('click', function(){
			HeroSlider.previousSlide();
		});
		$('heroNav').addEvent('click:relay(span.heroNavSlideSelect)', function(){
			HeroSlider.slideTo(this.get('data-slide'));
		});
		
		if(HeroSlider.numberOfSlides > 1) HeroSlider.startSlideShow();
		
	},
	
	hideControls: function(){
		$$('#heroNav, #heroLeftNav, #heroRightNav').setStyle('display', 'none');
	},
	showControls: function(){
		$$('#heroNav, #heroLeftNav, #heroRightNav').setStyle('display', 'block');
	},
	fadeControls: function(how){
		$$('#heroLeftNav, #heroRightNav').fade(how);
	},
	startSlideShow: function(){
		HeroSlider.slideShowRunning = setInterval(HeroSlider.nextSlide, 5000);
		if(HeroSlider._event.onStartShow) HeroSlider._event.onStartShow();
	},
	stopSlideShow: function(){
		if(!!HeroSlider.slideShowRunning){
			clearInterval(HeroSlider.slideShowRunning);
			HeroSlider.slideShowRunning = null;
			if(HeroSlider._event.onStopShow) HeroSlider._event.onStopShow();
		}
	},
	nextSlide: function(){
		if(HeroSlider.currentSlideIndex < HeroSlider.numberOfSlides){
			HeroSlider.currentSlideIndex++;
		}else{
			HeroSlider.currentSlideIndex = 0;
		}
		HeroSlider.slideContainer.tween('left', - (HeroSlider.currentSlideIndex * HeroSlider.slideWidth) + 'px');
		HeroSlider._updateActiveControl();
		if(HeroSlider._event.onNextSlide) HeroSlider._event.onNextSlide();
	},
	previousSlide: function(){
		if(HeroSlider.currentSlideIndex > 0){
			HeroSlider.currentSlideIndex--;
		}else{
			HeroSlider.currentSlideIndex = HeroSlider.numberOfSlides;
		}
		
		HeroSlider.slideContainer.tween('left', - (HeroSlider.currentSlideIndex * HeroSlider.slideWidth) + 'px');
		HeroSlider._updateActiveControl();
		if(HeroSlider._event.onPreviousSlide) HeroSlider._event.onPreviousSlide();
	
	},
	slideTo: function(index){
		HeroSlider.stopSlideShow();
		if( index > HeroSlider.numberOfSlides || index < 0) return;
		HeroSlider.currentSlideIndex = index;
		//console.log(- (HeroSlider.currentSlideIndex * HeroSlider.slideWidth) + 'px');
		HeroSlider.slideContainer.tween('left', - (HeroSlider.currentSlideIndex * HeroSlider.slideWidth) + 'px');
		HeroSlider._updateActiveControl();
		if(HeroSlider._event.onSlideTo) HeroSlider._event.onSlideTo();
	},
	_updateActiveControl: function(){
		HeroSlider.heroNav.getChildren().removeClass('active');
		HeroSlider.heroNav.getChildren()[HeroSlider.currentSlideIndex].addClass('active')
	},
	loadManifest: function(options){
		var mainPage = getMainPage();
		if(mainPage){
			if(options) HeroSlider._event = options;
			
			HeroSlider.spinner = new Spinner('hero').show();
			Asset.javascript('/hero/' + mainPage + '/manifest.js', {
				onLoad: function(){
					if(HeroManifest && HeroManifest.images){
						HeroSlider.manifest = HeroManifest;
						HeroSlider.loadImages(HeroManifest.images);
						HeroSlider.loadCSS(HeroManifest.css);
						HeroSlider.loadJS(HeroManifest.js);
					}
				}
			});
		}
	},
	loadCSS: function(css){
		if(!css) return;
		css.each(function(cssPath){
			Asset.css(cssPath);
		});
	},
	loadJS: function(js){
		if(!js) return;
		js.each(function(jsPath){
			Asset.javascript(jsPath);
		});
	},
	loadImages: function(images){
		HeroSlider.images = Asset.images(images, {
			onComplete: function(){
				HeroSlider.init();
				HeroSlider.spinner.hide();
			}
		});
		HeroSlider.numberOfSlides = HeroSlider.manifest.html.length;
	},
	currentSlideIndex: 1,
	numberOfSlides: 0
};

