function balao(id, alvo, mensagem, tempo, invertido) {
	alvo = $(alvo);
	if($(id)) {
		if($(id).timeOutRemove)
			clearTimeout($(id).timeOutRemove);
		Element.remove($(id));
	}
	if(!alvo)
		return;
	var balao = document.createElement('div');
	var seta = document.createElement('div');
	Event.observe(balao, 'mousedown', function remove() { Element.remove(balao) });
	balao.setAttribute('id', id);
	var offsets = alvo.positionedOffset();
	var top = offsets[1];
	var left = offsets[0];
	Element.setStyle(balao, {
		position: 'absolute',
		fontSize:'12px',
		top: (invertido?top+45:top)+'px',
		left: left+'px',
		padding: '3px',
		border: 'black solid 1px',
		backgroundColor: '#FFFFAE',
		textAlign: 'left',
		webkitBoxShadow: '0px 0px 3px #FFF',
		mozBoxShadow: '0px 0px 3px #FFF',
		borderRadius: '3px',
		MozBorderRadius: '3px',
		webkitBorderRadius: '3px',
		lineHeight:'14px',
		color: 'black'});
	balao.innerHTML = mensagem;
	Element.setStyle(seta, {position: 'absolute', width: '9px', height: '9px', background: 'url(imagens/'+(invertido?'balao_seta_invertida':'balao_seta')+'.gif)'});
	balao.appendChild(seta);
	alvo.parentNode.appendChild(balao);
	var larguraAlvo = alvo.getDimensions().width;
	var alturaAlvo = alvo.getDimensions().height;
	var larguraBalao = balao.getDimensions().width;
	var alturaBalao = balao.getDimensions().height;
	Element.setStyle(balao, {top: (parseInt(balao.style.top)-alturaBalao-3)+'px'});
	Element.setStyle(seta, {top: (invertido?(-8):(alturaBalao-3))+'px'});
	Element.setStyle(seta, {left: '2px'});
	if(tempo) {
		$(id).timeOutRemove = window.setTimeout(function() { if($(id)) Element.remove($(id)) }, tempo);
	}
};

abre_fecha_conteudo = function(elemento){

	elemento = $(elemento).up();
	var conteudo = elemento.down('.conteudo_fechado');
	
	if(conteudo.efeitando)
		return false;
		
	conteudo.efeitando = true;
	
	if(!conteudo.visible())
		new Effect.BlindDown(conteudo, {duration:0.4, afterFinish:function(){
			conteudo.efeitando = false;
			new Effect.ScrollTo(conteudo, {duration:0.4});
		}});
	else
		new Effect.BlindUp(conteudo, {duration:0.4, afterFinish:function(){
			conteudo.efeitando = false;
		}});
	
};

carrega_cidades = function(fonte, destino){
	var estado_id = fonte.value;
	if(estado_id){
		new Ajax.Request('ajax/carrega_cidades.php', {
			parameters:{estado:estado_id},
			onSuccess:function(res){
				var objeto = res.responseText.evalJSON(), novoOption;
				destino = $(destino);
				if(objeto.length>0){
					destino.update(destino[0]);
					objeto.each(function(cidade){
						destino.insert(novoOption = Builder.node('option', {value:cidade.cidade_idpk}).update(cidade.cidade_nome));
					});
					destino.enable().selectedIndex=0;
				} else {
					balao('balao_representantes', fonte, 'Nenhum representante dispon&iacute;vel neste estado!', 3000);
					destino.update(destino[0]).disable().selectedIndex=0;
				}
			}
		});
	}
};

var corrida = 100;

carrega_representantes = function(fonte){
	var cidade = fonte.value, termino=0;
	if(cidade){
		balao('bcr', fonte, 'Carregando...', false, 1);
		fonte.disable();
		var anteriores = $('representantes_area').childElements();
		if(anteriores.length>0){
			anteriores.each(function(e){
				termino++;
				new Effect.Fade(e, {duration:0.2, afterFinish:function(){
					termino--;
					if(termino==0)
						carrega_representantes_ajax(fonte, cidade);
				}});
				new Effect.Move(e, {y:-corrida, duration:0.6, afterFinish:function(){
					e.remove();
				}});
			});
		}
		else
			carrega_representantes_ajax(fonte, cidade);
	
		
	}
};

carrega_representantes_ajax = function(fonte, cidade){

	new Ajax.Request('ajax/carrega_representantes.php', {
		parameters:{cidade:cidade},
		onSuccess:function(res){
			new Effect.Fade($('bcr'), {duration:0.4, delay:0.3, afterFinish:function(){fonte.enable();}});
			var objeto = res.responseText.evalJSON();
			var area = $('representantes_area'), caixa;
			var i=0;
			objeto.each(function(representante){
				area.insert(caixa = Builder.node('div', {className:'caixa_representantes'},
					Builder.node('div',{className:'representantes_conteudo'}, 
						[
							Builder.node('div',{className:'linha'}, 
								[
									Builder.node('div', {className:'float_left representante_label_curta'}).update('Nome:'),
									Builder.node('div', {className:'float_left'}).update(representante.nome),
									Builder.node('div', {className:'float_right representante_cidade'}).update(representante.endereco)
								]
							).setStyle('height:21px'),
							Builder.node('div',{className:'linha representante_outros'}, 
								[
									Builder.node('div', {className:'float_left representante_label'}).update('Telefone:'),
									Builder.node('div', {className:'float_left'}).update(representante.telefone)
								]
							).setStyle('height:16px'), ////////////////
							Builder.node('div',{className:'linha representante_outros'}, 
								[
									Builder.node('div', {className:'float_left representante_label'}).update('Email:'),
									Builder.node('div', {className:'float_left'},
										Builder.node('a',{href:'mailto:'+representante.email+'?subject=Contato pelo Site'}).update(representante.email)
									)
								]
							).setStyle('height:16px'),
							Builder.node('div',{className:'linha representante_outros'}, 
								[
									Builder.node('div', {className:'float_left representante_label'}).update('Atendimento:'),
									Builder.node('div', {className:'float_left'}).update(representante.atendimento==1?'Revenda':'Engenharia')
								]
							).setStyle('height:16px')
						]
					)
				).setStyle({
					marginBottom:(corrida+10)+'px',
					marginTop:'-'+(corrida)+'px'
				}).hide());
				
				new Effect.Appear(caixa, {duration:0.8, delay:0.2});
				new Effect.Move(caixa, {y:corrida, duration:0.6});
			
				i++;
			});
			
		}
	});
};

function number_format(number, decimals, dec_point, thousands_sep) {
	var n = number, prec = decimals;
	var toFixedFix = function (n,prec) {
		var k = Math.pow(10,prec);
		return (Math.round(n*k)/k).toString();
	};

	n = !isFinite(+n) ? 0 : +n;
	prec = !isFinite(+prec) ? 0 : Math.abs(prec);
	var sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;
	var dec = (typeof dec_point === 'undefined') ? '.' : dec_point;

	var s = (prec > 0) ? toFixedFix(n, prec) : toFixedFix(Math.round(n), prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;

	var abs = toFixedFix(Math.abs(n), prec);
	var _, i;

	if (abs >= 1000) {
		_ = abs.split(/\D/);
		i = _[0].length % 3 || 3;

		_[0] = s.slice(0,i + (n < 0)) +
			_[0].slice(i).replace(/(\d{3})/g, sep+'$1');
		s = _.join(dec);
	} else {
		s = s.replace('.', dec);
	}
	if (s.indexOf(dec) === -1 && prec > 1) {
		s += dec+new Array(prec).join(0)+'0';
	}
	return s;
};
