// -----------------------------------------------------------------------------------
//
//  Desenvolvido por:
//  Rodrigo Fante
//	Fazedor de Site - http://www.fazedordesite.com
//	FS Slide - Versão 1.1.0
//
//  Navegadores testados:
//  Internet Explorer 6, Internet Explorer 7, Firefox 2
//  Opera 9, Netscape 8, Safari para Windows 3
//
//  Em caso de erros, sugestoes, peço que reportem para:
//  fazedordesite@gmail.com ou pelo site: http://www.fazedordesite.com
//
//  Mantenha os créditos pelo menos - Totalmente gratis :D
//
// -----------------------------------------------------------------------------------
var todosQuadros = new Array;

// atalho para nao ter que usar sempre o document.getElementById
function $() {
  var elements = new Array();
  for (var i = 0; i < arguments.length; i++) {
    var element = arguments[i];
    if (typeof element == 'string') element = document.getElementById(element);
    if (arguments.length == 1) return element;
    elements.push(element);
  }
  return elements;
}
function adicionarEvento(objeto, TipoEvento, funcao){
	if(objeto.addEventListener){ // todos navegadores menos IE
		objeto.addEventListener(TipoEvento, funcao, false);
		return true;
	} else if (objeto.attachEvent){ // IE
		var r = objeto.attachEvent('on'+TipoEvento, funcao);
		return r;
	} else {
		return false;
	}
}
// busca o objeto requerido entre todos os objetos e muda seu status de aberto para fechado e vice-versa
function mudaStatus(obj){
	for(i=0;i<todosQuadros.length;i++){
		if(todosQuadros[i][0]==obj) {
			if(todosQuadros[i][1] == "fechado") todosQuadros[i][1] = "aberto";
			else todosQuadros[i][1] = "fechado";
		}
	}
}
// busca o objeto requerido entre todos os objetos e retorna seu status atual, aberto ou fechado
function retornaStatus(obj){
	for(i=0;i<todosQuadros.length;i++){
		if(todosQuadros[i][0]==obj) {
			return todosQuadros[i][1];
		}
	}
}
// busca o objeto requerido entre todos os objetos e devolve a altura do mesmo previamente guardada no array
function retornaAltura(obj){
	for(i=0;i<todosQuadros.length;i++){
		if(todosQuadros[i][0]==obj) {
			return todosQuadros[i][2];
		}
	}
}
function abre(obj,alt){
	if(alt==undefined) alt=0;
	var altura = retornaAltura(obj);
	alt=Math.ceil(alt)+10;
	if(alt>altura) alt = altura; // para nao ultrapassar o tamanho original
	$(obj).style.height=alt+"px";
	if(alt<altura) {
		setTimeout("abre('"+obj+"',"+alt+")",1);
	} else {
		// caso tenha sobrado por algum motivo algum pixel a mostra, limitamos a altura, por segurança apenas
		if($(obj).offsetHeight>0)  $(obj).style.height=altura+"px";
		// altera a propriedade para aberto
		mudaStatus(obj);
	}
}
function fecha(obj,alt){
	if(alt==undefined) alt=$(obj).offsetHeight;
	alt=Math.ceil(alt)-10;
	if(alt<0) alt=0; // caso o valor seja menor que 0 deixamos em zero, valores negativos aqui causam erros
	$(obj).style.height=alt+"px";
	if(alt>0) {
		setTimeout("fecha('"+obj+"',"+alt+")",1);
	} else {
		// caso tenha sobrado por algum motivo algum pixel a mostra, zeramos a altura, por segurança apenas
		if($(obj).offsetHeight>0)  $(obj).style.height="0px";
		// altera a propriedade para fechado
		mudaStatus(obj);
	}
}
// funcao que faz o efeito "slide"
function slide(obj){
	var status = retornaStatus("div_"+obj.id);
	$("div_"+obj.id).style.overflow="hidden"; // para garantir que o conteudo nao vai extrapolar a area correta
	var altura = $("div_"+obj.id).offsetHeight;
	if(status == "aberto"){ // se estiver aberto fecha e vice-versa
		fecha("div_"+obj.id,altura);
	} else abre("div_"+obj.id,0);
}
function checaLinks(){
	var todosLinks = document.getElementsByTagName("a"); // pega todos os links 
	for (var i=0; i<todosLinks.length; i++){ 
			var cada_link = todosLinks[i]; // varre os links um por um
			var atributo_rel = String(cada_link.getAttribute('rel')); // pega o valor do atributo rel no link
			atributo_rel = atributo_rel.split(",")
			if (cada_link.getAttribute('href') && (atributo_rel[0].toLowerCase().match('slide'))){ 
				var altura_quadro = $("div_"+cada_link.getAttribute('id')).offsetHeight;
				// abaixo inserimos no array todos os dados de cada quadro
				// seu status se eh aberto ou fechado, sua altura original, e como index seu ID
				todosQuadros.push(new Array("div_"+cada_link.id, "aberto", altura_quadro));
				// Entra se o link tiver um valor de href e o valor de rel for igual a slide
				if(atributo_rel[1]=="fechado") slide(cada_link);
				cada_link.onclick = function () { 
					slide(this); 
					return false; 
				} 
				// quando o link for clicado chama a funçao slide
				// O return false serve para anular a açao do href
			}
	}	
}
adicionarEvento(window,"load", checaLinks);

