/**
 * TikiCMS
 * Copyright (C) 2009, Tiki Web Inteligente Ltda.
 * @requires jQuery 1.3.2 or latter
 *
 * $Id$
 */

// define o namespace da aplicação
Application = {
    Controller: {}
};

/**
 * Retorna uma URL completa dado um caminho relativo.
 *
 * É importante que esta função seja definida antes
 * da definição das biliotecas "thickbox" e "sIFR",
 * pois alterei o código-fonte delas para que caminhos
 * relativos sejam convertidos em caminhos absolutos utilizando
 * esta função.
 *
 * @param  string url Um pedaço de URL (caminho relativo dentro do servidor)
 * @return string     Uma URL completa
 */
Application.build_url = function(url) {

    if (!Application.BASE_URL || !Application.BASE_URL.match(/^http/)) {
        Application.BASE_URL = $('meta[name=base_url]').attr('content');
    }

    return Application.BASE_URL + url; 
}

jQuery(document).ready(function($) {								

    // invoca o controlador e o método solicitados
    var controller = $('meta[name=camelized_controller]').attr('content');
    var method = $('meta[name=method]').attr('content');
	
    Application.Controller[controller] &&
    Application.Controller[controller]['init'] &&
    Application.Controller[controller]['init'].call();	

    Application.Controller[controller] &&
    Application.Controller[controller][method] &&
    Application.Controller[controller][method].call();
	
    // Função abre e fecha caixa de Indicadores
    divHeight = $('#header li.indicadores div').height();
    $('#header li.indicadores div').css({top: -divHeight -2});
    $('#header li.indicadores a').click(function() {
        speed = 400;
        if ($(this).is('.current')) {
            $(this).removeClass('current').animate({top: 0}, speed);
            $(this).next('div').animate({top: -divHeight -2}, speed);        
        } else {
            $(this).addClass('current').animate({top: divHeight}, speed);
            $(this).next('div').animate({top: 0}, speed);
        }       
    });
    
    // Função que fecha a caixa de Indicadores quando clica no body
    $('body').mouseup(function(e){
        speed = 400;
        var $target = $(e.target);
        // se o target é filho do seletor
        if ($target.parents('#header li.indicadores').length == 1) return false;
        $('#header li.indicadores a').removeClass('current').animate({top: '0'}, speed);
        $('#header li.indicadores a').next('div').animate({top: -divHeight -1}, speed);     
    });
    
    
	// Função submenu empreendimentos
	$('#nav li.empreendimentos, #footer .nav li.empreendimentos').hover(
		function() {
			$(this).children('a').addClass('mouseOver');
			$(this).children('ul').show();
		},
		function() {
			$(this).children('a').removeClass('mouseOver');
			$(this).children('ul').hide();
		}
	);
	// Função que mostra e fecha a janela flutuante
	$('.floating').click(function(){
		//$('body').addClass('overlay');
		$('div#windowOverlay').prependTo('body').toggleClass('hide');
	});		
	$('#windowOverlay_content a.close').click(function(){
		$('div#windowOverlay').toggleClass('hide');
		//$('body').removeClass('overlay');
	});
	
	$('#windowOverlay_wrap').mouseup(function(e){
        var $target = $(e.target);
		// se o target é filho da div que envolve o form MAS não é a input submit então ignora este evento
		if ($target.parents('#windowOverlay_middle').length == 1) return false;																			  
		$('div#windowOverlay').toggleClass('hide');
		//$('body').removeClass('overlay');
	});			

    // convite
    $('form#criar_convite').submit(function() {

        $form = $(this);

        // limpa erros anteriores
        $form.find('.error').removeClass('error');

        $form.find('p.success').hide();

        $.ajax({
            type: 'POST',
            url: $(this).attr('action'),
            data: $(this).serialize(),
            beforeSend: function() {
                $form.find('.msg.loading').show();
            },
            success: function() {
                $form.find('.msg.loading').hide();
                $form.find('.msg.success').show();

                $form.find('p.success').show();

                $('input[name=nome_amigo]').val('Nome do seu amigo');
                $('input[name=email_amigo]').val('E-mail do seu amigo');

                $('input[name=nome]').focus();
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                $form.find('.msg.loading').hide();
                if (XMLHttpRequest.status == 403) {
                    var jsonErrors = eval('('+XMLHttpRequest.responseText+')');
                    if (jsonErrors.id_empreendimento) {
                        alert(jsonErrors.id_empreendimento);
                    }
                    else {
                        for (field in jsonErrors) {
                            $('[name='+field+']').parent().addClass('error');
                            $('[name='+field+']').val(jsonErrors[field]);
                        }
                    }
                }
                else {
                    alert('Um erro inesperado ocorreu no servidor. Seu contato não foi submetido.');
                }
            }
        });
        return false;
    });

    // newsletter
    $('form#criar_newsletter_assinante').submit(function() {

        $form = $(this);

        // limpa erros anteriores
        $form.find('.error').removeClass('error');

        $form.find('p.success').hide();

        $.ajax({
            type: 'POST',
            url: $(this).attr('action'),
            data: $(this).serialize(),
            beforeSend: function() {
                $form.find('.msg.loading').show();
            },
            success: function() {
                $form.find('.msg.loading').hide();
                $form.find('.msg.success').show();

                $form.find('p.success').show();

                $('input[name=nome]').val('');
                $('input[name=email]').val('');

                $('input[name=nome]').focus();
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                $form.find('.msg.loading').hide();
                if (XMLHttpRequest.status == 403) {
                    var jsonErrors = eval('('+XMLHttpRequest.responseText+')');
                    for (field in jsonErrors) {
                        $('[name='+field+']').parent().addClass('error');
                        $('[name='+field+']').val(jsonErrors[field]);
                    }
                }
                else {
                    alert('Um erro inesperado ocorreu no servidor. Você não foi cadastrado na newsletter.');
                }
            }
        });
        return false;
    });	
});
