var App = new Class({
	
	initialize: function(){
		this.initSlideShows()
			.attach()
			//.initNavFx()
			.initHistory()
		;
	},

	initSlideShows: function(){
		
		// this whole site's navigation is a slideshow
		this.mainTabs = new SlideShow('main-show',{
			transition: 'fadeThroughBackground'
		});
		
		// inicio
		this.inicioShow = new SlideShow('inicio-show', {
			transition: 'fadeThroughBackground',
			delay: 8000,
			autoplay: true
		});
		
		// mktpresencial
		this.mktpresencialShow = new SlideShow('mktpresencial-show', {
			transition: 'pushLeft'
		});
		
		// intermedio
		this.intermedioShow = new SlideShow('intermedio-show', {
			transition: 'pushLeft'
		});
		
		// personas
		this.personasShow = new SlideShow('personas-show', {
			transition: 'pushLeft'
		});
		
		// proceso
		this.procesoShow = new SlideShow('proceso-show', {
			transition: 'pushLeft'
		});

		// proceso
		this.calidadShow = new SlideShow('calidad-show', {
			transition: 'pushLeft'
		});
		
		// works
		this.worksShow = new SlideShow('works-show', {
			transition: 'pushLeft'
		});
		
		return this;
	},
	
	attach: function(){
		return this.attachMainTabs().attachNavigationDemo();	
	},
	
	attachMainTabs: function(){
		var navs_menu = $('nav').getElements('li');
		var contact_menu = $('int_menu').getElements('li');
		var spot_menu = $('header_r').getElements('a');

		navs_menu.push(contact_menu);
		navs_menu.push(spot_menu);	
		
		this.mainTabs.addEvent('show', function(slideData){
			//
			/*
			this.inicioShow[(slideData.next.index == 0) ? 'play' : 'pause']();
			// stop the intro show if it's not the intro slide
			this.mktpresencialShow[(slideData.next.index == 1) ? 'play' : 'pause']();
			// same as above, but ecma-riff-script!
			this.intermedioShow[(slideData.next.index == 2) ? 'play' : 'pause']();
			// same as above, but ecma-riff-script!
			this.personasShow[(slideData.next.index == 3) ? 'play' : 'pause']();
			// same as above, but ecma-riff-script!
			this.procesoShow[(slideData.next.index == 4) ? 'play' : 'pause']();
			// same as above, but ecma-riff-script!
			this.calidadShow[(slideData.next.index == 5) ? 'play' : 'pause']();
			// same as above, but ecma-riff-script!
			this.worksShow[(slideData.next.index == 6) ? 'play' : 'pause']();
			*/
			// change class of current tab
			//navs_menu.removeClass('current');
			//navs_menu[slideData.next.index].addClass('current');
		}.bind(this));
		return this;
	},
	
	attachNavigationDemo: function(){
		var self = this;

		var navs_main_show = $('content');
		var navs_menu = $('main-show').getElements('.page');
		
		navs_menu.each(function(element, index){
			element.addEvent('click', function(){
			switch(index) {
				case 0:
					self.inicioShow.showNext();
					self.inicioShow.pause();
				break;
				
				case 1:
					self.mktpresencialShow.showNext();
					self.mktpresencialShow.pause();
				break;
				
				case 2:
					self.intermedioShow.showNext();
					self.intermedioShow.pause();
				break;

				case 3:
					self.personasShow.showNext();
					self.personasShow.pause();
				break;

				case 4:
					self.procesoShow.showNext();
					self.procesoShow.pause();
				break;

				case 5:
					self.calidadShow.showNext();
					self.calidadShow.pause();
				break;

				case 6:
					self.worksShow.showNext();
					self.worksShow.pause();
				break;
				
				case 7:
					/*
					self.contactoShow.showNext();
					self.contactoShow.pause();
					*/
				break;

				case 8:
					/*
					self.newsShow.showNext();
					self.newsShow.pause();
					*/
				break;

				case 9:
					/*
					self.spotShow.showNext();
					self.spotShow.pause();
					*/
				break;
				
				default:

				break;
			}
				//self.intermedioShow[(slideData.next.index == 1) ? 'play' : 'pause']();
				var currentMenuIndex = self.mainTabs.slides.indexOf(self.mainTabs.current);
			});
		});

		/* nav_inicio === personasShow */

		var navs_inicio = $('inicio').getElements('.breadcumb li');

		// add click events to the elements
		navs_inicio.each(function(element, index){
			element.addEvent('click', function(){

				var currentIndex = self.inicioShow.slides.indexOf(self.inicioShow.current);
				var transition = (currentIndex < index) ? 'pushLeft' : 'pushRight';

				self.inicioShow.show(index, { transition: transition });
				self.inicioShow.pause();
			});
		});

		// morph the style of the nav elements
		this.inicioShow.addEvent('show', function(slideData){
			navs_inicio[slideData.previous.index].morph('.normal');
			navs_inicio[slideData.next.index].morph('.current');
		});
		
		// set the initial slide to current
		navs_inicio[0].morph('.current');

		/* nav_mktpresencial === personasShow */

		var navs_mktpresencial = $('mktpresencial').getElements('.breadcumb li');

		// add click events to the elements
		navs_mktpresencial.each(function(element, index){
			element.addEvent('click', function(){

				var currentIndex = self.mktpresencialShow.slides.indexOf(self.mktpresencialShow.current);
				var transition = (currentIndex < index) ? 'pushLeft' : 'pushRight';

				self.mktpresencialShow.show(index, { transition: transition });
				self.mktpresencialShow.pause();
			});
		});

		// morph the style of the nav elements
		this.mktpresencialShow.addEvent('show', function(slideData){
			navs_mktpresencial[slideData.previous.index].morph('.normal');
			navs_mktpresencial[slideData.next.index].morph('.current');
		});
		
		// set the initial slide to current
		navs_mktpresencial[0].morph('.current');

		/* navs_intermedio === intermedioShow */

		var navs_intermedio = $('intermedio').getElements('.breadcumb li');

		// add click events to the elements
		navs_intermedio.each(function(element, index){
			element.addEvent('click', function(){

				var currentIndex = self.intermedioShow.slides.indexOf(self.intermedioShow.current);
				var transition = (currentIndex < index) ? 'pushLeft' : 'pushRight';

				self.intermedioShow.show(index, { transition: transition });
				self.intermedioShow.pause();
			});
		});

		// morph the style of the nav elements
		this.intermedioShow.addEvent('show', function(slideData){
			navs_intermedio[slideData.previous.index].morph('.normal');
			navs_intermedio[slideData.next.index].morph('.current');
		});
		
		// set the initial slide to current
		navs_intermedio[0].morph('.current');

		/* navs_personas === personasShow */
		var navs_personas = $('personas').getElements('.breadcumb li');
			
		// add click events to the elements
		navs_personas.each(function(element, index){
			element.addEvent('click', function(){
				//alert(index);

				var currentIndex = self.personasShow.slides.indexOf(self.personasShow.current);
				var transition = (currentIndex < index) ? 'pushLeft' : 'pushRight';

				self.personasShow.show(index, { transition: transition });
				self.personasShow.pause();
			});
		});
		
		// morph the style of the nav elements
		this.personasShow.addEvent('show', function(slideData){
			navs_personas[slideData.previous.index].morph('.normal');
			navs_personas[slideData.next.index].morph('.current');
		});
		
		// set the initial slide to current
		navs_personas[0].morph('.current');

		/* navs_proceso === procesoShow */

		var navs_proceso = $('proceso').getElements('.breadcumb li');

		// add click events to the elements
		navs_proceso.each(function(element, index){
			element.addEvent('click', function(){

				var currentIndex = self.procesoShow.slides.indexOf(self.procesoShow.current);
				var transition = (currentIndex < index) ? 'pushLeft' : 'pushRight';

				self.procesoShow.show(index, { transition: transition });
				self.procesoShow.pause();
			});
		});

		// morph the style of the nav elements
		this.procesoShow.addEvent('show', function(slideData){
			navs_proceso[slideData.previous.index].morph('.normal');
			navs_proceso[slideData.next.index].morph('.current');
		});
		
		// set the initial slide to current
		navs_proceso[0].morph('.current');

		/* navs_calidad === calidadShow */

		var navs_calidad = $('calidad').getElements('.breadcumb li');

		// add click events to the elements
		navs_calidad.each(function(element, index){
			element.addEvent('click', function(){

				var currentIndex = self.calidadShow.slides.indexOf(self.calidadShow.current);
				var transition = (currentIndex < index) ? 'pushLeft' : 'pushRight';

				self.calidadShow.show(index, { transition: transition });
				self.calidadShow.pause();
			});
		});

		// morph the style of the nav elements
		this.calidadShow.addEvent('show', function(slideData){
			navs_calidad[slideData.previous.index].morph('.normal');
			navs_calidad[slideData.next.index].morph('.current');
		});
		
		// set the initial slide to current
		navs_calidad[0].morph('.current');

		/* navs_works === worksShow */

		var navs_works = $('works').getElements('.breadcumb li');

		// add click events to the elements
		navs_works.each(function(element, index){
			element.addEvent('click', function(){

				var currentIndex = self.worksShow.slides.indexOf(self.worksShow.current);
				var transition = (currentIndex < index) ? 'pushLeft' : 'pushRight';

				self.worksShow.show(index, { transition: transition });
				self.worksShow.pause();
			});
		});

		// morph the style of the nav elements
		this.worksShow.addEvent('show', function(slideData){
			navs_works[slideData.previous.index].morph('.normal');
			navs_works[slideData.next.index].morph('.current');
		});
		
		// set the initial slide to current
		navs_works[0].morph('.current');

		/* navs_team === Personas Por elementos */

		var navs_team = $('personas_01_select').getElements('.teamlist li');
		
		jPcontent = $('personas_01_holder');
		
		jPcontent.addEvent('click', function(e){
				//para que pare el resto de eventos de diapositiva
				e.stop();
				//Request
				return;
		});
		
		var req = new Array();

		// add click events to the elements
		navs_team.each(function(element, index){
			req[index] = new Request.HTML({
				url: 'contenido/personas/html/personas_'+index+'.html', 
				onSuccess: function(html) {
				//Clear the text currently inside the results div.
					jPcontent.set('html', '');
					//Inject the new DOM elements into the results div.
					jPcontent.adopt(html);
				},
				//onFailure
				onFailure: function() {
					jPcontent.set('html', '<h2>Ups...<br /><em>Error!</em></h2>');
				}
			});

			element.addEvent('click', function(e){
				//para que pare el resto de eventos
				e.stop();
				//Request
				req[index].send();
				navs_team.each(function(element, index) {
					element.removeClass('aktiv');
					element.addClass('nope');
				});
				this.removeClass('nope');
				this.addClass('aktiv');
				jPcontent.setStyle('opacity', '0');
				jPcontent.setStyle('display', 'block');
				jPcontent.fade(1);
				return;
			});
		});

		/* Nevegacion por teclado */
		
		$(document).addEvent('keyup', function(event){
			// couldn't be any easier!
			if (event.key == 'left') {
				self.mainTabs.showPrevious({ transition: 'pushRight' });
			} else if (event.key == 'right') {
				self.mainTabs.showNext({ transition: 'pushLeft' });
			}
		});
		
		return this;
	},
	
	initHistory: function(){
		var self = this;
		this.history = new HashEvents().addEvents({
			// using my history manager to control the main tab slideshow
			'':						function(){ self.mainTabs.show(0) },
			'inicio':				function(){ self.mainTabs.show(0);self.mainTabs.pause(); },
			'Mktpresencial':		function(){ self.mainTabs.show(1);self.mainTabs.pause(); },
			'Intermedio':			function(){ self.mainTabs.show(2);self.mainTabs.pause(); },
			'Personas':				function(){ self.mainTabs.show(3);self.mainTabs.pause(); },
			'Proceso':				function(){ self.mainTabs.show(4);self.mainTabs.pause(); },
			'Calidad':				function(){ self.mainTabs.show(5);self.mainTabs.pause(); },
			'Works':				function(){ self.mainTabs.show(6);self.mainTabs.pause(); },
			//
			'Contacto':				function(){ self.mainTabs.show(7);self.mainTabs.pause(); },
			'News':					function(){ self.mainTabs.show(8);self.mainTabs.pause(); },
			'Spot':					function(){ self.mainTabs.show(9);self.mainTabs.pause(); }
		}).check();
		return this;
	},
	
	/*
	// irrelevant to the slideshows, but interesting nonetheless I hope :D
	initNavFx: function(){
		this.nav_menu = $('nav');
		var navHideAmount = this.nav_menu.getSize().y + 20;
		this.nav_menu.setStyle('top', -navHideAmount);
		this.nav_menu.tween.delay(1000, this.nav_menu, ['top', 0]);
		return this;
	}
	*/
});

var app;
window.addEvent('domready', function(){
	$$('html')[0].removeClass('notready').addClass('ready');
	app = new App;
});


