/**** Classe slideshow ****/
/**
	Feita inicialmente para a Home do Professor do PCA.
	É essencial que qualquer mudança seja feita de maneira a não perder o padrão.
	Evitar valores fixos, utilizando parâmetros e criando novas funções.
	
	HTML Padrão:
	-----------------------------------------------------------------	
	<div id="slideshow">
		<ul class="slides">
			<li>
				<img class="imagem" src="imagem1.jpg" alt="..." />
				<div class="info">
					<h3>Título do slide</h3>
					<p> Texto do slide </p>
				</div>
			</li>
		</ul>			
		<a href="#" class="link_anterior" >&nbsp;</a>
		<a href="#" class="link_proximo"  >&nbsp;</a>
	</div>
	<script type="text/javascript">
	<!--
		var meuSlideshow = new Slideshow('slideshow');			
	//-->
	</script>
	------------------------------------------------------------------
	
*/

/*  Criação da Classe  */
var Slideshow = Class.create();	
/*  Implementação  */
Slideshow.prototype = {
	/* 
		A função initialize é o construtor, executado quando o objeto é 'instanciado': var exemplo = new Slideshow('idDiv');
	*/    
	initialize : function(id){
		this.id = id;
		this.slideshow = $(id);
		this.slides = $$('#'+id+' .slides li');
		this.slides.each(function(el){
			el.setStyle({display:'none'});
		});
		var slide = this.slides.first();
		this.exibirSlide(slide);
		this.iniciarComandos();
		this.ativarTimer();
	},
	
//  Id do div a partir do qual o slideshow é construído
	id : null,
//  HTMLObject referente ao elemento. Equivale a $(id)	
	slideshow : null, 
//  Array com todos os slides contidos no slideshow. Equivale a $$('#id .slides li')
	slides : [], 
//  HTMLObject do slide (li) sendo exibido no momento	
	slideSelecionado : null,
//  Variável de controle do loop
	interval : null, 
//  Intervalo entre as atualizações do slide
	sleep: 9000,
		
//  Método que alterna para o proximo slide	
	proximo : function (event) {
		var slide = this.slides[this.slides.indexOf(this.slideSelecionado) + 1];
		if(!slide) slide = this.slides.first(); 
		this.trocarSlide(event,slide);
	},
//  Método que alterna para o slide anterior	
	anterior : function (event) {
		var slide = this.slides[this.slides.indexOf(this.slideSelecionado) + -1];
		if(!slide) slide = this.slides.last(); 
		this.trocarSlide(event,slide);
	},
//  Método que alterna para um determinado slide	
	trocarSlide : function(event,slide){
		if(event != null)Event.element(event).blur();
		this.exibirSlide(slide);
		this.ativarTimer();
	},
//  Método para exibição do slide	
	exibirSlide : function(slide){
		slide.appear({duration:2});
		if(this.slideSelecionado != null){
			this.slideSelecionado.fade({duration:2});
		}
		this.slideSelecionado = slide;
	},
//  Método que trata as tags <a> referentes aos links proximo e anterior	
	iniciarComandos : function(){
		//Links Anterior e Proximo
		Event.observe($$('#'+this.id+' .link_anterior')[0],'click',this.anterior.bind(this));
		Event.observe($$('#'+this.id+' .link_proximo')[0],'click',this.proximo.bind(this));
		//Retirando o efeito focus dos links
		$$('#'+this.id+' .link_anterior , #'+this.id+' .link_proximo ').each(function(el){
			Event.observe(el,'focus',function(){
				this.blur();
			});
		});
	},
//  Método que programa a atualização do slide para os próximos 'sleep' segundos	
	ativarTimer : function(){
		window.clearTimeout(this.interval);
		this.interval = window.setTimeout(this.proximo.bind(this,null),this.sleep);
	}
	
};