 ///////////////////////////////////////////////////////////////////////////
/// SLIDE GALERIA HORIZONTAL /////////////////////////////////// V 1.0.1 //
/*	
 *	@velocidade = 35;
 *  
 *	Bugs fixed:
 *		1.0.1 -> Bug no IE, não conseguia pegar a posição X do mouse no cache do objeto.(mousePosX)
 */

// Sintaxis SlideGaleria_H ( ID_DIV_GALERIA , NOME_OBJETO_CRIADO , QUANTIDADE DE ITENS VISIVEIS )
function SlideGaleria_H (galeriaDiv, nomeObj, qtdVisiveis) {	
	
	// Galeria - Por defeito: destaques
	var galeriaDiv = !galeriaDiv ? 'galeria' : galeriaDiv;
	// Conteiner - Por defeito: itens_cont
	var itensCont = !galeriaDiv ? 'galeria_cont' : galeriaDiv+"_cont";
	// Velocidade da animação
	this.velocidade = !this.velocidade ? 35 : this.velocidade;
	
	// Dependendo do Browser pegamos os elementos
	if(document.getElementById) {
		galeriaDiv = document.getElementById(galeriaDiv);
		itensCont = document.getElementById(itensCont);
	}
	else {
		galeriaDiv = document.all.galeriaDiv;
		itensCont = document.all.itensCont;
	}
	
	// Quantidade de Itens
	var qtdItens = itensCont.getElementsByTagName('li').length;
	
	// Verifica se o slide é preciso
	if(qtdItens > qtdVisiveis) {
	
		// Largura do Item
		var largItem = itensCont.getElementsByTagName('li')[0].offsetWidth;
		
		// Largura da Galeria
		var largGaleria = galeriaDiv.offsetWidth;
		
		// Tamanho do Conteiner
		var largCont = largItem*qtdItens;
		itensCont.style.width = largCont+"px";
		
		// Distancia entre o mouseX e o itensCont
		var distancia = 0;
		// Limites da animação
		var maxPosX = 0;
		var minPosX = largGaleria-largCont;
		
		// Posição X da galeria
		var xPos = 0;
		if (itensCont.offsetParent) {
			function galeriaPosX(obj) {
					return obj.offsetLeft;
			}
			do {
				xPos += galeriaPosX(itensCont);
			}
			while (itensCont = itensCont.offsetParent);
		}
		
		// Detecta no IE6 se o mouse esta dentro da Galeria
		function contains_ns6(a, b) {
			if (b!==null) {
				while (b.parentNode) {
					if ((b = b.parentNode) == a) {
						return true;
					}
				}
			}
			return false;
		}
		
		// Centro da Galeria
		var centroGaleria = (largGaleria/2)+xPos;
		
		// Quando se mexer o mouse acima da galeria aciona as animações
		// Ações - OVER
		galeriaDiv.nomeObj = nomeObj;
		galeriaDiv.onmousemove = function (e) {
			var mouseX = window.event? event.clientX : e.clientX;
			// Verifica se já existe o Intervalo que faz a animação
			if(this.t_galeria) {
				// Atualizamos a posição X do Mouse
				galeriaDiv.mousePosX = mouseX;
			}
			else {
				// Ativamos o Intervalo
				this.t_galeria = setInterval(galeriaDiv.nomeObj+".animaGaleria("+mouseX+")", 10);
			}
		}
		// - OUT
		galeriaDiv.onmouseout = function (e) {
			if ((window.event&&!galeriaDiv.contains(event.toElement)) ||
				(e && e.currentTarget && e.currentTarget!= e.relatedTarget && !contains_ns6(e.currentTarget, e.relatedTarget))) {
				if(this.t_galeria) {
					// Mata o intervalo que faz a animação
					clearInterval(this.t_galeria);
					this.t_galeria = false;
					// Zera a cache da posição
					galeriaDiv.mousePosX = 0;
				}
			}
		}
		
		// Zera a cache da posição
		galeriaDiv.mousePosX = 0;
		
		this.animaGaleria = function (clientX) {
			// Pegamos a pos do mouse
			var mousePosX = (galeriaDiv.mousePosX) ? galeriaDiv.mousePosX : clientX;
			
			// Conteiner dos Itens do Destaque
			var itensCont = galeriaDiv.getElementsByTagName('ul')[0];
			// se for a primeira vez coloca em 0 o left
			if(itensCont.style.left == "") {
				itensCont.style.left = "0px";
			}
			// Distancia entre o mouseX o centro da galeria
			distancia = mousePosX-centroGaleria;

			// Limpa a pos do Mouse
			mousePosX = false;
			
			// Left atual
			var leftAtual = parseInt(itensCont.style.left);
			
			// Nova posição X
			var novaPosX = leftAtual-(distancia/this.velocidade);
			itensCont.style.left = novaPosX+"px";
			
			// Travamos ele para que não passe dos Limites
			if(novaPosX > maxPosX) {
				itensCont.style.left = "0px";
			}
			if(novaPosX < minPosX) {
				itensCont.style.left = minPosX+"px";
			}
		}
	}
}
