// Classe Rolagem
// Danilo Trindade
Rolagem = function() {
	this.caixaRolagem  = null;
	this.direcao       = null;
	this.velocidade    = 30;
	this.deslocamento  = 5;
	this.tempo         = null;
	this.posicaoAtual  = 0;
	this.alturaObjs    = null;
	this.objRolagem    = null;
	this.larguraPadrao = '200px';
	this.alturaPadrao  = '200px';
	
	this.obterCaixaRolagem = function() {
		return this.caixaRolagem;
	}
	
	this.obterDirecao = function() {
		return this.direcao;
	}
	
	this.obterVelocidade = function() {
		return this.velocidade;
	}
	
	this.obterDeslocamento = function() {
		return this.deslocamento;
	}	
	
	this.definirCaixaRolagem = function(caixaRolagem) {
		if(typeof caixaRolagem == 'string') {
			caixaRolagem = document.getElementById(caixaRolagem);
		}
		
		if(caixaRolagem == null) {
			alert('O objeto que foi fornecido nao eh valido!\n\nSugestao:\nEste metodo deve ser chamado apos o objeto \'alvo\' ser carregado!');
			return;
		}
		
		// Primeira atribuicao
		this.caixaRolagem = caixaRolagem;
		
		this.objRolagem = document.createElement('div');
		
		this.objRolagem.innerHTML          = this.obterCaixaRolagem().innerHTML;
		this.obterCaixaRolagem().innerHTML = '';
		
		this.obterCaixaRolagem().appendChild(this.objRolagem);
		
		switch(this.obterCaixaRolagem().offsetWidth - document.body.offsetWidth) {
			case 0:
			case -41:
			case -40:
				this.obterCaixaRolagem().style.width  = this.larguraPadrao;
				this.obterCaixaRolagem().style.height = this.alturaPadrao;
			break;
			
			default:
				//
			break;
		}
		
		this.obterCaixaRolagem().style.overflow = 'hidden';
		this.obterCaixaRolagem().style.position = 'relative';
		
		//Propriedas de css
		this.objRolagem.style.position = 'absolute';
		this.objRolagem.style.top      = '0px';
		this.objRolagem.style.left     = '0px';
		
		// Segunda atribuicao, agora pega o novo objeto criado
		this.caixaRolagem = this.objRolagem;
	}				
	
	this.definirDirecao = function(direcao) {
		this.direcao = direcao;
	}
	
	this.definirVelocidade = function(velocidade) {
		this.velocidade = velocidade;
	}
	
	this.definirDeslocamento = function(deslocamento) {
		this.deslocamento = deslocamento;
	}	
	
	this.rolar = function() {
		this.tempo = setInterval(
			Delegate.create(this, 
				function() {
					switch(this.obterDirecao()) {
						case 'cima':
							this.posicaoAtual = this.obterCaixaRolagem().style.left.replace('px', '');
							this.posicaoAtual = parseInt(this.posicaoAtual);
							
							if((this.obterCaixaRolagem().scrollWidth - this.obterCaixaRolagem().parentNode.offsetWidth) + this.posicaoAtual >= 0) {
								this.obterCaixaRolagem().style.left = this.posicaoAtual - this.obterDeslocamento() + 'px';
							}
						break;
						
						case 'baixo':
							this.alturaObjs = this.obterCaixaRolagem().scrollWidth + this.obterCaixaRolagem().parentNode.offsetWidth;
							
							if(this.posicaoAtual != 0) {
								this.posicaoAtual = this.obterCaixaRolagem().style.left.replace('px', '');
								this.posicaoAtual = parseInt(this.posicaoAtual);
							}
							
							if((this.alturaObjs + this.posicaoAtual) < this.alturaObjs) {
								this.obterCaixaRolagem().style.left = this.posicaoAtual + this.obterDeslocamento() + 'px';
							}
						break;
					}
				}, Array('')
			), this.obterVelocidade()
		);
	}
	
	this.parar = function() {
		clearInterval(this.tempo);
	}
};