// Carregando frameworks
google.load('jquery', '1.3.2');
google.load('maps', '2.x', {'other_params':'oe=iso-8859-1'});
google.setOnLoadCallback(function() { // Bibliotecas do google READY!
	$(function() { // jQuery READY! Fight!
		$.getScript(basePath+'js/libs/jquery/jquery.colorbox-min.js', function() { //1
		$.getScript(basePath+'js/libs/jquery/jquery.history.js', function() { //2
		$.getScript(basePath+'js/libs/jquery/tools.scrollable-1.0.5.min.js', function() { //3
		$.getScript(basePath+'js/libs/jquery/jquery.validate.min.js', function() { //4
		$.getScript(basePath+'js/libs/jquery/jquery.metadata.js', function() { //5
			main();
		}); //5
		}); //4
		}); //3
		}); //2
		}); //1
	});
});

// Declaração de variáveis e funções globais
var basePath = '/home/';

// Conteúdos
var urlConteudos = ['','clientes/','contato/']

// Imagem transparente para substituir os pngs em browsers sem suporte (IE antigo)
var blank = new Image();
blank.src = basePath + 'imgs/pix.gif';
var badBrowser = (/MSIE ((5\.5)|6)/.test(navigator.userAgent) && navigator.platform == "Win32");

// Função chamada após os frameworks carregados e o dom + jquery prontos.
function main() {
	// Verifica se precisa substituir pngs nos browsers que não dão suporte
	verificaPNGs();
	
	// Tweets
	$.getJSON('http://twitter.com/status/user_timeline/id5web.json?count=18&callback=?', function(data) {
		$(data).each(function() {
			$('#tweets ul').append('<li><span class="fCor2 bCor1">' + relative_time(this.created_at) + '</span>  <p class="fCor1">' + this.text.linkify() + '</p></li>');
		});
		$('#tweets ul li').hide();
		function ascendeProximo() {
			if ($(this).next()) $(this).next().fadeIn('slow', ascendeProximo);
		}
		$('#tweets ul li:first').fadeIn('slow', ascendeProximo);
		$('#tweetsAnterior, #tweetsProximo').show();
		$('#tweets').removeClass('carregando').scrollable({
			size: 3, items: 'ul', navi: '#tweetsPaginacao', prevPage: '#tweetsAnterior', nextPage: '#tweetsProximo'
		});
	});	

	// menu e conteúdo
	$('#conteudo').height($('#conteudo').height()); // Amarra a altura do container conteúdo

	// Inicializa o plugin history. A função CB é chamada uma vez com o location.hash atual
	$.historyInit(carregaConteudo, "/");

	// Executa a função de setup da página atual (a primeira a ser carregada)
	try { eval('conteudo'+myself.replace(' ','')+'();') } catch(err) {};

	// controle dos clicks no menu
	$('#menu a').click(function() {
		$.historyLoad($(this).text());
		return false;
	});

	// Click na marca
	$('#marca').click(function() { $('#menu a:first').click(); return false; });
}

// Função carregaConteudo. É chamada depois do $.historyInit(); do $.historyLoad(); e após apertar o back e o forward do browser.
function carregaConteudo(hash) {
	if (!hash) hash = $('#menu a:first').text(); // Se não foi passado nenhum, pega o primeiro do menu
	if (hash != myself) {
		urchinTracker(hash);
		$('#menu a').removeClass('fonte3');
		$($('#menu a:contains("'+hash+'")')).addClass('fonte3');
		$('#conteudo>div').stop(true,true).fadeOut('normal');
		$('#conteudo').addClass('carregando');
		if ($('#conteudo'+hash).length == 0) {
			$('#conteudo').append('<div id="conteudo'+hash+'" />')
			$('#conteudo'+hash).hide().load(basePath + urlConteudos[$('#menu a').index($('#menu a:contains("'+hash+'")'))] + ' #conteudo'+hash, function() {
				verificaPNGs(); // Re-verifica se carregou alguma png
				ajustaConteudo($(this));
				try { eval(this.id.replace(' ','')+'();') } catch(err) {}; // Funcoes especificas das páginas
			});
		} else ajustaConteudo($('#conteudo'+hash));
	}
}

function ajustaConteudo(objConteudo) {
	$('#conteudo').animate({
		height: objConteudo.height()
	},function(){
		$('#conteudo').removeClass('carregando');
		objConteudo.stop(true,true).fadeIn('normal', function() {
			myself = this.id.substr('conteudo'.length); // Pega o nome a partir do nome do div
			document.title = myself + document.title.substr(document.title.indexOf(' -'));
		});
	});
}

/************************************

Funções específicas das páginas

************************************/

function conteudoPortfólio() {
	if ($('#portfolio .c2').length > 0) $('#portfolioProximo').show();

	$('#portfolioAnterior, #portfolioProximo').click(function() {
		$('#portfolioAnterior, #portfolioProximo').hide();
		var propriedades = { from: 'c1', to: 'c2', bloco: { top: '25px', left: '0', width: '615px', height: '290px' }, imagem: { width: '355px', height: '255px' }, seletor: 'first' };
		if ($(this).get(0).id == 'portfolioAnterior') propriedades = { from: 'c2', to: 'c1', bloco: { top: '165px', left: '385px', width: '385px', height: '165px' }, imagem: { width: '160px', height: '115px' }, seletor: 'last' };
		var cb = function() {
			$('#portfolio .'+propriedades.to+':visible').animate(propriedades.bloco)
			.removeClass(propriedades.to).addClass(propriedades.from)
			.find('img').animate(propriedades.imagem,function() {
				$('#portfolio .'+propriedades.to+':not(:visible):'+propriedades.seletor).fadeIn('fast');
				if ($('#portfolio .c1:not(:visible)').length > 0) $('#portfolioAnterior').show();
				if ($('#portfolio .c2').length > 0) $('#portfolioProximo').show();
			});
		}
		if ($('#portfolio .c2').length > 0) $('#portfolio .'+propriedades.from+':visible').fadeOut('fast', cb);
		else cb();
	});
}

function conteudoClientes() {
	$('#clientes .coluna div .logo1').hide();
	$('#clientes .coluna div').bind('mouseenter mouseleave', function() {
		$(this).find('.logo1, .logo2').toggle();
	});

	$('#clientes').scrollable({
		size: 5,
		items: '#slide',
		clickable: false,
		prevPage: '#clientesAnterior',
		nextPage: '#clientesProximo'
	});
}

function conteudoContato(){
	$('a.mapa').click(function(){
		googleMaps('-9.653522281337673','-35.70133924484253');
		return false;
	});
	function conteudoContatoValidate() {
		$('#contato').validate({
			messages: {
				nome: {
					required: "Este campo é requerido.",
					minlength: "Tamanho insuficiente."
				},
				email: {
					required: "Este campo é requerido.",
					email: "E-Mail inválido."
				},
				ddd: {
					required: "Este campo é requerido."					
				},
				fone: {
					required: "Este campo é requerido."					
				},
				mensagem: {
					required: "Este campo é requerido.",
					minlength: "Tamanho insuficiente."
				}
			},
			wrapper: 'span class="error fonte1 fVermelho"',
			submitHandler: function(form){
				textoAnterior = $('#conteudoContato').html();
				$('#contato button').attr('disabled','disabled');
				$.ajax({
					url: 'contato/',
					type: 'post',
					data: $(form).serialize(),
					success: function(data){
						$('#conteudoContato').html($('#conteudoContato',data).html()).fadeTo(10000,1).queue(function() { // O fadeTo é de mentira. Só pra contar o tempo.
							$('#conteudoContato').html(textoAnterior);
							$(this).dequeue();
							conteudoContatoValidate();
						});
					}
				})
			}
		});
	}
	conteudoContatoValidate();
}

/************************************

Caixa de ferramentas (funções diversas)

************************************/

function verificaPNGs() {
	// Verifica se é IE 5.5 ou 6 e substitui as PNGs
	if (badBrowser) $('img[src$=.png]').each(function() {
		if (!this.complete) this.onload = function() { fixPng(this) };
		else fixPng(this);
	});
}

// Substitui a imagem png por uma imagem transparente (IE antigo)
function fixPng(png) {
	// get src
	var src = png.src;
	// set width and height
	if (!png.style.width) { png.style.width = $(png).width(); }
	if (!png.style.height) { png.style.height = $(png).height(); }
	// replace by blank image
	png.onload = function() { };
	png.src = blank.src;
	// set filter (display original image)
	png.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "',sizingMethod='scale')";
}

// Mostra um shadowbox com um mapa do Google com um marcador na posição lat, lng
function googleMaps(lat, lng) {
	$.fn.colorbox({ html: ' ', //conteúdo não pode ser vazio, senão dá pau.
		open: true, width: '60%', height: '80%',
		onComplete: function(item){
			if(GBrowserIsCompatible()){
				var body = document.getElementById('cboxLoadedContent');
				var map = new GMap2(body);
				//Ponto
				var ponto = new GLatLng(lat, lng);
				//centralizando o mapa
				map.setCenter(ponto,16);
				//marcador
				map.addOverlay(new GMarker(ponto));
				// controles no mapa
				map.addControl(new GLargeMapControl());
				map.addControl(new GMapTypeControl());
			}
		}
	});
}

// Acrescenta o método linkfy no obj String. Este método transforma urls em links clicáveis
String.prototype.linkify = function() {
	return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/, function(m) {
		return m.link(m);
	});
};

// Função que retorna uma string com o tempo relativo a time_value
function relative_time(time_value) {
	var values = time_value.split(' ');
	time_value = values[1] + ' ' + values[2] + ', ' + values[5] + ' ' + values[3];
	var parsed_date = Date.parse(time_value);
	var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
	var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
	delta = delta + (relative_to.getTimezoneOffset() * 60);

	var r = '';
	if (delta < 60) { r = 'um minuto atrás'; }
	else if(delta < 120) { r = 'alguns minutos atrás'; }
	else if(delta < (45*60)) { r = (parseInt(delta / 60)).toString() + ' minutos atrás'; }
	else if(delta < (90*60)) { r = 'uma hora atrás'; }
	else if(delta < (24*60*60)) { r = '' + (parseInt(delta / 3600)).toString() + ' horas atrás'; }
	else if(delta < (48*60*60)) { r = 'um dia atrás'; }
	else { r = (parseInt(delta / 86400)).toString() + ' dias atrás'; }

	return r;
}