// Dynamic Tickers - By Marcelo S. Pereira - ICQ#30424756
// Versão: 1.5.0

/******* CONSTANTES DE INICIALIZAÇÃO/VARIAVEIS GLOBAIS *******/
	var PASSOAPASSO = 2, CONTINUO = 4; //definem o tipo de scroll do Ticker

	var isDOM = (document.getElementById) ? true : false;
	var isN4 = ((document.layers) && !isDOM) ? true : false;
	var isIE4 = ((document.all) && !isDOM) ? true : false; 
	
	// supridor de erros
	if(document.layers)document.captureEvents(Event.ERROR);
	window.onerror = function(){return true;}

/******* FUNÇÃO DE LOCALIZAÇÃO OBJETO *******/
// id: ID do objeto a ser localizado
// pai: obj pai do div
function getObj(id,pai){	
	if(isDOM)
		return document.getElementById(id);
	else if(isIE4)
		return document.all[id];
	else if(isN4){
		if(!pai)pai=window;
		var obj = pai.document.layers[id], idx=0;
		while(!obj && idx<pai.document.layers.length)
			obj=getObj(id,pai.document.layers[idx++]);		
		return obj;
	}else
		return null;
}

/******* LAYER PADRÃO (DOM Div) *******/
// parmam. id: ID do elemento (opcional); pai: obj pai do div  
function Div(id,pai){
	if(!id) id = "div"+(new Date()).getMilliseconds(); 	//cria ID aleatorio se ñ existe
	if(pai) pai = (pai.getDiv) ? pai.getDiv() : pai; 	//verifica se pai é obj Div
	var div = getObj(id,pai), existe = true;			//procura por obj existente
	if(!pai) pai = (isN4 ? window : document.body);		//define elemento raiz
	if(!div){
		if(isDOM){		//cria div para DOM
			div = document.createElement("DIV");		
			div.id = id; pai.appendChild(div);
		}else{
			if(isIE4) pai.insertAdjacentHTML("beforeEnd","<DIV id='"+id+"'></DIV>");	//cria div para IE4
			else if(isN4) div = new Layer(200, pai);	//cria div para Netscape 4.x
			else window.status="### Erro Ticker ###\n\nBrowser desconhecido ou erro de JavaScript na página!!!";
			if(!div) div = getObj(id);
		}
		existe = false;
	}
	var estilo = (isN4) ? div : div.style; 				//cria ref. para estilos
	if(!existe){estilo.position = "absolute"; estilo.visibility = "hidden";}

	/******* DEFINIÇÃO DE FUNÇÕES DE MÉTODOS *******/
	function setwidth(w){if(isN4)div.clip.width=w; else estilo.width=w;}	
	function setheight(h){if(isN4)div.clip.height=h; else estilo.height=h;}
	function settop(y){estilo.top=y;} 		
	function setleft(x){estilo.left=x;}
	function setsize(w,h){setcss("position","'absolute'");setwidth(w);setheight(h);}	
	function setpos(x,y){setleft(x); settop(y);}
	function setattr(atr,val){if(isDOM)div.setAttribute(atr,val);else eval("div."+atr+"="+val);}
	function setcss(sel,val){eval("estilo."+sel+"="+val);}
	function getheight(){return (isN4) ? div.clip.height : div.offsetHeight;}
	function getwidth(){return (isN4) ? div.clip.width : div.offsetWidth;}
	function getleft(){return (isN4) ? div.left : div.offsetLeft;}
	function gettop(){return (isN4) ? div.top : div.offsetTop;}
	function getdiv(){return div;}		
	function getrodape(){return gettop() + getheight();}	
	function moverel(x,y){setpos(getleft()+x,gettop()+y);}
	function mostrar(b){estilo.visibility=(b)?"visible":"hidden";}
	function settext(txt){if(isN4){div.document.write(txt);div.document.close();}else div.innerHTML=txt;}

	/******* DEFINIÇÕES DE PROTÓTIPOS *******/
	this.setLargura = setwidth;	this.setAltura = setheight;		this.setTopo = settop;	
	this.setEsquerda = setleft; this.setTamanho = setsize;		this.setPosicao = setpos;			
	this.setTexto = settext;	this.setAtributo = setattr;		this.setEstilo = setcss;
	this.getAltura = getheight;	this.getLargura = getwidth;		this.getEsquerda = getleft;
	this.getTopo = gettop;		this.getDiv = getdiv;			this.getRodape = getrodape; 			
	this.moveRelativo = moverel;								this.exibir = mostrar;
}

/******* OBJETO TICKER *******/
// var mydiv = new Div("nome_ID"[,width[,height[,left[,top]]]]);
function Ticker(){
	var txts = new Array();
	var arg = Ticker.arguments, narg=arg.length, oldpasso=1; started=false;
	var atual=0,oculto=1,passo=1,velocidade=80,intervalo=2500,txtidx=0;
	var tic = new Div(arg[0]); tic.setTexto("");
	var d1 = new Div(arg[0]+"1",tic); 
	var d2 = new Div(arg[0]+"2",tic);
	var docx = new Array(d1,d2);
	var w = (arg[1]) ? arg[1] : 0; h = (arg[2]) ? arg[2] : 0;
	var x = (arg[3]) ? arg[3] : 0; y = (arg[4]) ? arg[4] : 0;
	if(w||h)tic.setTamanho(w,h); if(x||y)tic.setPosicao(x,y);
	d1.setPosicao(0,0); d2.setPosicao(0,0);
	d1.setLargura(tic.getLargura()); d2.setLargura(tic.getLargura()); 
	tic.setEstilo("overflow","'hidden'");
	tic.getDiv().onmouseover = function(){oldpasso=passo; passo=0;}
	tic.getDiv().onmouseout = function(){passo=oldpasso;}
	
	/******* FUNÇÕES INTERNAS *******/
	function initContinuo(){		//inicializador do Ticker continuo
		var txt = txts.join("<br>");
		d1.setTexto(txt); d2.setTexto(txt);
		tic.setEstilo("zIndex",10);
		docx[oculto].setTopo(docx[atual].getRodape());
		tic.exibir(true); docx[atual].exibir(true);
		if(docx[atual].getAltura() > tic.getAltura())
			{docx[oculto].exibir(true); scrollContinuo();}
	}	
	function scrollContinuo(){		//temporizador do scroll continuo 
		if(docx[atual].getRodape() < 0) 
			{docx[atual].setTopo(docx[oculto].getRodape()); rev();}
		else if(docx[atual].getTopo() > 0)
			{docx[oculto].setTopo(docx[atual].getRodape() * -1); rev();}
		docx[0].setTopo(docx[0].getTopo() - passo); 
		docx[1].setTopo(docx[1].getTopo() - passo);		
		setTimeout(scrollContinuo,velocidade);
	}	
	function initPasso(){		//inicializador do Ticker passo-a-passo
		passo = Math.abs(passo);
		tic.exibir(true); d1.setTexto(txts[curtxt()]); 
		if(d1.getAltura()<tic.getAltura())
			d1.setAltura(tic.getAltura());
		d1.exibir(true); d2.exibir(true);
		tic.setEstilo("zIndex",100); scrollPasso();
	}
	function scrollPasso(){		//temporizador do scroll do passo-a-passo
		if(docx[atual].getTopo() <= 0){  //
			docx[oculto].setTopo(docx[atual].getRodape());
			docx[oculto].setTexto(txts[curtxt()]);
			if(docx[oculto].getAltura()<tic.getAltura())
				docx[oculto].setAltura(tic.getAltura());
			rev(); setTimeout(scrollPasso,intervalo); 			
		}else{
			docx[atual].moveRelativo(0,passo*-1);
			docx[oculto].moveRelativo(0,passo*-1);
			setTimeout(scrollPasso,velocidade);
		}
	}
	function inicia(tipo){ //inicializador geral
		if(started) return;
		switch(tipo){
			case 2: initPasso(); break; 	//passo a passo
			case 4: initContinuo(); break;  //continuo
			default: alert("definir: obj.iniciar(CONTINUO|PASSOAPASSO);");
		} started = true;
	}
	function rev(){atual = atual ?  0: 1; oculto = oculto ? 0 : 1;}
	function curtxt(){if(txtidx==txts.length)txtidx=0; return txtidx++;}
	
	/******* DEFINIÇÃO DE FUNÇÕES DE MÉTODOS *******/
	function cleartxt(){txts = new Array();}
	function addtxt(txt){txts[txts.length] = txt;}
	function settipo(t){tipo=t;}
	function setintervalo(val){intervalo=val;}		
	function setveloc(vel){velocidade=vel;}
	function setpasso(pas){passo=pas;}
	function setbgcolor(cor){if(isN4)tic.getDiv().bgColor=cor;
		else tic.setEstilo("backgroundColor","'"+cor+"'");}

	/******* DEFINIÇÕES DE PROTÓTIPOS *******/
	this.addTexto = addtxt; 			this.iniciar = inicia;			
	this.setPasso = setpasso;			this.setTamanho = tic.setTamanho;	
	this.setPosicao = tic.setPosicao;   this.setIntervalo = setintervalo;	
	this.setVelocidade = setveloc;		this.setCorFundo = setbgcolor;
	this.limpaTexto = cleartxt;
}
