/**
 * TikiCMS
 * Copyright (C) 2009, Tiki Web Inteligente Ltda.
 * @requires jQuery 1.3.2 or latter
 *
 * $Id: application.js 2 2010-07-05 20:00:00Z caio $
 */

// 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=controller]').attr('content');
    var method = $('meta[name=method]').attr('content');
    var camelizedController = $.map(controller.split('_'), function(val) { return val.substr(0,1).toUpperCase() + val.substr(1) } ).join('');

    Application.Controller[camelizedController] &&
    Application.Controller[camelizedController][method] &&
    Application.Controller[camelizedController][method].call();

    // Abre links com o rel external em novas janelas
    $("a[rel~='external']").click(function(){
        window.open($(this).attr('href'));
        return false;
    });
    
    
    // Animação menu principal
    var botoesComFoco = [];
    $('#nav a').each(function(i) {
        botoesComFoco[i] = false;
    });
    $('#nav li:not(.current) a').hover(function(){
        var currIndex = $(this).closest('li').index();
        botoesComFoco[currIndex] = true;
        
        $(this).stop();
        
        $(this).animate({ backgroundPosition: '-118px 0' }, 250, 'easeInOutCirc', function(){
            if (botoesComFoco[currIndex]) {
                $(this).closest('li').css( {backgroundPosition: '-999px -999px'});
            }
        } );
    },function(i){
        var currIndex = $(this).closest('li').index();            
        botoesComFoco[currIndex] = false;
        $(this).closest('li').css( {backgroundPosition: '0 0'});
        $(this).stop();
        $(this).animate({ backgroundPosition: '-118px 32px' }, 200, 'easeInOutCirc');
    });
    
    
    // Efeito fade menu lateral de produtos
    $('#aside ul.nav li').hover(function(){
        $(this).find('.bg').animate({'opacity' : 1}, 300);
        $(this).find('.arrow').animate({'right' : '17px'}, 300);
    },function(){
        $(this).find('.bg').animate({'opacity' : 0}, 300);
        $(this).find('.arrow').animate({'right' : '12px'}, 300);
    });
    
    
    // Notícias na barra lateral
    $('#aside .noticias .previous').click(function(){
        var $atual = $('#aside .noticias .lista li:visible');
        
        if( !$atual.is(':first-child') ) {
            var speed = 350;
            var idxAtual = $atual.index();
            var idxAnterior = idxAtual - 1;
            
            $atual.fadeOut(speed);                            
            $('#aside .noticias .lista li').eq(idxAnterior).delay(speed).fadeIn(speed);
        }
    });

    $('#aside .noticias .next').click(function(){
        var $atual = $('#aside .noticias .lista li:visible');
        
        if( !$atual.is(':last-child') ) {
            var speed = 350;  
            var idxAtual = $atual.index();
            var idxProximo = idxAtual + 1;
            
            $atual.fadeOut(speed);                            
            $('#aside .noticias .lista li').eq(idxProximo).delay(speed).fadeIn(speed);
        }
    });
    
    

    // Combos customizadas //////////////////////

    // Select Custom
    $('div.selectCustom > p a').click(function() {

        var $combo = $(this).closest('div.selectCustom');
        var $ul = $combo.children('ul'); 

        // remove a classe current de todos selects
        $('div.selectCustom').not($combo).removeClass('current');        
        
        $combo.toggleClass('current');
        
        // zera o z-index de outras combos abertas
        $('div.selectCustom').not($combo).css('z-Index', 100);

        // esconde outras combos abertas
        $('div.selectCustom ul').not($ul).hide();

        if ($ul.is(':visible')) {
            $ul.hide();
        } else {
            $combo.css('z-index', 1000);
            $ul.show();
        }
    });

    if ($('div.selectCustom').length > 0) {

        // ao clicar fora de combos abertas esconde-as
        $(document).bind('mouseup.custom_combo', function(e) {
            if ($(e.target).closest('div.selectCustom').length == 1) return false;
            $('div.selectCustom').removeClass('current');
            $('div.selectCustom ul').hide();
        });
    }

    $('div.selectCustom li a').live('click', function() {

        var $combo = $(this).closest('div.selectCustom');
        var $ul = $combo.children('ul:first');
        var realComboId = $combo.attr('id').replace(/custom_combo_/, '');
        var $realCombo = $('#'+realComboId);
        var label = $(this).text();
        var value = $(this).parent().children('.value').text();

        $combo.removeClass('current');
        $ul.find('li > a').removeClass('current');
        $(this).addClass('current');

        $combo.find('p:first a span').text(label);
        $ul.hide();

        $realCombo.val(value);
        $combo.trigger('change', [label, value]);
    });

    $('#custom_combo_pagination_combo').change(function(e, page, url) {
        window.location.href = url;
    });

    // busca
    $('form.filtrar_produtos').submit(function() {

        var $form = $(this);
        var contexto = $form.find('[name=id_tipo_tpl], [name=id_tipo_content]').val();
        var term = $form.find('[name=s]').val().toLowerCase();

        if (term.length < 3 || term == 'busque pelo nome') {
            return false;
        }

        var url = '';

        // busca global de produtos
        if (contexto == 'todos') {
            url = Application.build_url('produtos/?s='+term);
        }

        // busca em uma categoria de produtos
        else {
            url = Application.build_url('produtos/'+contexto+'/?s='+term);
        }

        window.location.href = url;

        return false;
    });

    // exibição das substâncias do produto
    $('a.exibir_substancias').click(function() {
        var $link = $(this), $substancias = $link.closest('td').find('.substancias');

        if ($substancias.is(':visible')) {
            $substancias.hide();
            return false;
        }

        $.getJSON($link.attr('href'), function(nomes) {
            var i = '', html = '';
            for (i in nomes) { html += '<li>'+nomes[i]+'</li>'; }
            $substancias.html(html).show();
        });

        return false;
    });

    // quantidade de um produto
    $('input[name=qtde]').numeric();
});

