var larguraPadrao = 110;

$(document).ready(function () {


    startKmetro();
    
    
});


//Inicia o componente
function startKmetro() {

    eventNavigation();//evento de p´roximo e anterior

    eventClickTab($('.slider-tabs li a'));//evento ao clicar na aba

    eventDroppableDesktop();
    
    //activeTabChange($('.slider-tabs li:eq(0)'));//deixa o elemento principal ativo

    sliderAdjust(); //ajusta largura do slider
    slideAdjust();//ajusta a largura dos slides

    //newTab('novo', 'Nova Aba', $('<span class="glyphicon glyphicon-folder-open"></span>'), '<h1>Olá Mundo!</h1>');

    $(window).resize(function () {
        sliderAdjust();
        slideAdjust();
        activeTabChange($('.slider-tabs li.active'));
    });
}




//evento ao clicar no botao fechar
function eventClickCloseTab( button, liToChange ) {
    button.click(function (e) {
        e.preventDefault();
        //removeTab(button.parent('a').parent('li'), liToChange);
        removeTab(button.parent('li'), liToChange);

        //se a aba fechada for do tipo Autenticador
        var tipo = $(this).parent('li')[0].getAttribute('tipo');
        if (tipo == "3") {
            var codigo = $(this).parent('li')[0].getAttribute('codigo');
            var modulo = vm.GetModulo("ListaAplicativosUsuarioViewModel");
            if (modulo)
                modulo.Data().RemoveItemFavoritosAutenticadores(codigo);
        }
    });
}


//evento ao clicar na aba
function eventClickTab(a) {
    a.click(function (e) {
        e.preventDefault();
        var codigo = $(this).parent('li')[0].getAttribute('codigo');
        var tipo = $(this).parent('li')[0].getAttribute('tipo');
        var urlAutenticador = $(this).parent('li')[0].getAttribute('urlautenticador');

        //tipo == pasta
        if (codigo && tipo && tipo == "2") {
            var modulo = vm.GetModulo("ListaAplicativosUsuarioViewModel");

            if (urlAutenticador != null && urlAutenticador != "") {
                if (modulo)
                    modulo.Data().AtualizaConteudoPastaAutenticador(codigo, tipo, urlAutenticador);
            } else {
                if (modulo)
                    modulo.Data().AtualizaConteudoPasta(codigo, tipo);
            }

        }

        //activeTabChange( $(this).parent('li') );
    });
    a.parent('li').click(function (e) {
        activeTabChange( $(this) );
    })
}


//evento ao clicar em próximo/anterior
function eventNavigation() {
    //evento ao clicar no proximo
    $('.slider-next').click(function (e) {
        nextSlide();
    });

    //evento ao clicar no anterior
    $('.slider-prev').click(function (e) {
        prevSlide();
    });
}

function eventDroppableSlide(idSlide) {
    $(".slide#"+idSlide).droppable({
        accept: "a",
        hoverClass: 'activate',
        //scope: "tiles",
        tolerance: "pointer",
        drop: function (event, ui) {
            //quando um elemento é dropado no desktop
            //ui.draggable.appendTo( $(this) );
            //tilesAdjust();
            //eventDragableTiles();

            if (ui.draggable.context.name == "aplicativosFavoritos") {
                //quando um elemento é dropado no desktop
                var codigoApp = ui.draggable.context.getAttribute("codigo");
                var tipoApp = ui.draggable.context.getAttribute("tipo");
                var modulo = vm.GetModulo("ListaAplicativosUsuarioViewModel");
                //verifica se o aplicativo já está na home
                var appHome = modulo.ConsultaAplicativoHome(codigoApp, tipoApp);
                if (modulo && appHome == null);
                    modulo.MoveAplicativoHome(codigoApp, tipoApp);

                tilesAdjust();
                eventDragableTiles();
            }
        }
    });
}


function eventDroppableDesktop() {
    $("#menu_esquerdo").droppable({
        //accept: "a",
        hoverClass: 'active',
        //scope: "tiles",
        tolerance: "pointer",
        drop: function (event, ui) {
            //quando um tile é colocado na barra lateral
            //ui.draggable.children('.tile').removeClass('ok').css('width', 'auto');
            //ui.draggable.appendTo("#menu_esquerdo");

            //adiciona na lista de aplicativos favoritos
            
            var modulo = vm.GetModulo("ListaAplicativosUsuarioViewModel");
            if (modulo)
                modulo.MoveAplicativoAreaFavoritos(ui.draggable.context.getAttribute("codigo"), ui.draggable.context.getAttribute("tipo"));

            tilesAdjust();
            eventDragableTiles();
        },
        accept: function (el) {
            return !el.children('.tile').hasClass('autenticador');
        }
    });
}


function eventDroppableFolder() {

    $(".tile.folder").droppable({
        accept: "a, .folder",
        hoverClass: 'active',
        //scope: "tiles",
        //scope: "folders",
        greedy: true,
        tolerance: "pointer",
        drop: function (event, ui) {

            //alert('Aplicativo [' + ui.draggable.children('.tile').children('p').text() + '] movido para a pasta [' + $(this).children('p').text() + ']')

            //quando um elemento é dropado numa pasta
            var modulo = vm.GetModulo("ListaAplicativosUsuarioViewModel");
            var tipo = ui.draggable.context.getAttribute("tipo");
            if (modulo) {
                if (tipo == 2)
                    //movendo pasta para outra pasta
                    modulo.AlterarLocalPasta(ui.draggable.context.getAttribute("codigo"), $(this).context.getAttribute("codigo"));
                else
                    //movendo aplicativo para pasta
                modulo.MoveAplicativoPasta(ui.draggable.context.getAttribute("codigo"), $(this).context.getAttribute("codigo"));
        }
        }
    });
}


function eventDragableTiles() {

    //$('.slide').sortable({
    //    items: '> a',
    //    opacity: 0.5
    //});

    $('.tile.draggable').parent('a').draggable({
       //connectToSortable: ".slide",
       revert: "invalid",
       zIndex: 100,
       helper: "clone",
       cursorAt: { left: 50, top: 50 },
       opacity: 0.8,
       stack: ".slide",
       scroll: false,
       appendTo: "body",
       //scope: "tiles",
       start: function (event, ui) {
           //$(".tile.folder").droppable("option", "scope", "tiles");
       }
    });

    $('.tile.folder.draggable').draggable({
        //connectToSortable: ".slide",
        revert: "invalid",
        zIndex: 100,
        helper: "clone",
        cursorAt: { left: 50, top: 50 },
        opacity: 0.8,
        stack: ".slide",
        scroll: false,
        appendTo: "body",
        //scope: "folders",
        start: function (event, ui) {
            //$(".tile.folder").droppable("option", "scope", "folders");
        }
    });
}

function eventDragableFolder() {

    //$('.slide').sortable({
    //    items: '> a',
    //    opacity: 0.5
    //});

    $('.tile.draggable').parent('a').draggable({
        //connectToSortable: ".slide",
        revert: "invalid",
        zIndex: 100,
        helper: "clone",
        cursorAt: { left: 50, top: 50 },
        opacity: 0.8,
        stack: ".slide",
        scroll: false,
        appendTo: "body",
        scope: "tiles"
    });
}

function eventRenameFolder() {

    var before;

    var nomePasta = "";

    $('.folder p').unbind('contextmenu').unbind('focus').unbind('keydown').unbind('focusout');

    $('.folder p').on('contextmenu', function (e) {
        //e.stopPropagation();
        e.preventDefault();
        document.execCommand('selectAll', false, null);
    }).on('focus', function () {
        before = $(this).html();
        nomePasta = $(this).text();
    }).on('keydown', function (e) {
        if (e.keyCode == 13) {
            e.preventDefault();
            $(this).trigger('focusout');
            $(this).blur().next().focus();
            return false;
        } else {
            if (e.which != 8 && $(this).text().length >= 45) {
                e.preventDefault();
            }
            $(this).parent().css('width', 'auto');
        }
    }).on('focusout', function () {
        $(this).parent().removeClass('ok').css('width','auto');

        if ($(this).text().trim() == '') {
            $(this).text(before);
            //alert('Nome vazio ou incorreto!');
        } else {

            if (nomePasta != $(this).text().trim()) {

                //CHAMAR METODO PAR ALTERAR NOME DE PASTA
                var modulo = vm.GetModulo("ListaAplicativosUsuarioViewModel");
                if (modulo)
                    modulo.RenomearPasta($(this).parent()[0].getAttribute("codigo"), $(this).text().trim());
            }            
        }

        tilesAdjust();
    });

    $('.folder .folder-rename').unbind('click').click(function (e) {
        //$(this).parent().children('p').execCommand('selectAll', false, null);
        $(this).parent().children('p').get(0).focus();
        document.execCommand('selectAll', false, null);
    });
}

function eventClickApp() {

    $('#menu_esquerdo .esquerdo a').unbind('click').click(function (e) {
        if (e.target.nodeName == 'SPAN') {
            e.preventDefault();
        }
    });
}


//muda para a aba desejada
function activeTabChange(liToBeActive) {

    if ( $( $(liToBeActive).children('a').attr('href') ).length ) {

        //desativa li atual e ativa li necessaria
        $('.slider-tabs li.active').removeClass('active');
        $(liToBeActive).addClass('active');

        //recebe qual conteudo deve ser ativado
        var ativo = $('.slider-tabs li.active a').attr('href');

        //desativa conteudo atual e ativa conteudo necessario
        $('.slide.active').removeClass('active');
        $(ativo).addClass('active');

        //move até o conteudo
        $('.slider').stop(true, false).animate(
            {
                left: -$(ativo).position().left
            },
            1000,
            function () {
                scrollStart();
            }
        );

        validNavigation();

        tilesAdjust($('.slide' + ativo));//ajusta o tamanho dos tiles

        animeTiles($('.slide' + ativo));//anima o carregamento dos tiles

        //remove todas mensagens de alerta ao trocar de aba
        vm.FecharTodosMensagemAlerta();

        eventRenameFolder();

        //slideAdjust();
    }
}


//adiciona aba
function newTab( idTab, nomeTab, icone, liToChange) {
    if (!$('a[href="#' + idTab + '"]').length) {//se a aba não existe
        $('.slider-tabs').append('<li><a href="#' + idTab + '"><span class="' + icone + '"></span> ' + nomeTab + '</a><button class="close" type="button">×</button></li>');//adiciona a aba        
        sliderAdjust();//ajusta a largura do slider
        activeTabChange($('.slider-tabs a[href="#' + idTab + '"]').parent('li'));//ativa a nova aba
        eventClickTab($('a[href="#' + idTab + '"]'));//evento ao clicar na aba
        eventClickCloseTab($('a[href="#' + idTab + '"]').next('button.close'), liToChange);//evento de fechar a aba para o botão
    }
}

//remove aba
function removeTab( liToClose, liToChange ) {
    var tabContentId = $(liToClose).children('a').attr("href");
    $(liToClose).remove(); //remove li das abas
    //homeSlide();    
    activeTabChange(liToChange);
    //$('.slide' + tabContentId).addClass('slide');
    sliderAdjust();
}


//funcao para abrir o primeiro slide
function homeSlide() {
    activeTabChange($('.slider-tabs a:first').parent('li')); // abre a primeira aba
}


//funcao para navegar ao proximo slide
function nextSlide() {
    var proximo = $('.slider-tabs li.active').nextAll('li.slmenu:eq(0)'); 
    if (proximo.length) {
        activeTabChange( proximo);
    }
}


//funcao para navegar ao slide anterior
function prevSlide() {
    var anterior = $('.slider-tabs li.active').prevAll('li.slmenu:eq(0)');
    if (anterior.length) {
        activeTabChange( anterior );
    }
}


//funcao para omitir/mostrar as setas de navegacao anterior/proximo
function validNavigation(){
    var proximo = $('.slider-tabs li.active').nextAll('li.slmenu');
    var anterior = $('.slider-tabs li.active').prevAll('li.slmenu');

    if (proximo.length && $('.slider-tabs li.active.slmenu').length ) {
        $('.slider-next').show();
    } else {
        $('.slider-next').hide();
    }

    if (anterior.length && $('.slider-tabs li.active.slmenu').length) {
        $('.slider-prev').show();
    } else {
        $('.slider-prev').hide();
    }
}


//reajusta SLIDER
function sliderAdjust() {
    //$('.slider').css('width', ($('.slider .slide').length * ($('.slider .slide:eq(0)').outerWidth() + 150)) + 'px');//ajusta largura
    $('.slider').css('top', $('.slider-tabs').height() + 4)//ajusta distancia do topo
    var altura = $('#screen').outerHeight() * 0.6
    $('.section2').css('height', altura);
}

//reajusta o tamanho dos slides
function slideAdjust() {
    $('.slide').css('width', $('.section2').outerWidth());
    //activeTabChange($('.slider-tabs li.active'));
    $('.slide').css('max-height', $('.section2').outerHeight() - $('.slider-tabs').height());

    //coloca ... quando há rolagem vertical
    if ($('.slide.active').length > 0) {
        if ($('.slide.active').get(0).scrollHeight > $('.slide.active').outerHeight()) {
            $('#elipse').show();
        } else {
            $('#elipse').hide();
        }
    }

    //ajusta a altura das setas
    $('.slider-prev, .slider-next').css('top', $('.slide.active').height() / 2);

    resultAdjust();
}

function resultAdjust() {
    $('.slide .result').each(function (index, value) {
        $(this).css('height', 'auto');
        $(this).css('height', $(this).parent('.slide').height() - ($('.slide#aplicativosInlog .result').offset().top - $('.slide#aplicativosInlog').offset().top ) );
    });
}



function scrollStart() {
    window.scrollTo(0, 0);
}

//animação de carregar tiles
function animeTiles( slide ) {
    var valor_atraso = 150;
    $(slide).children('.tile').each(function (index, value) {
        $(this).delay(index * valor_atraso).fadeIn(300);
    });
}


//ajusta o tamanho dos tiles
function tilesAdjust( slide ) {
    
    //$(slide).children('a').children('.tile:not(.ok)').each(function (index, value) {
    $('.slide .tile:not(.ok)').each(function (index, value) {
        var n = Math.ceil($(this).outerWidth() / larguraPadrao);
        var largura = n * larguraPadrao + (n - 1) * 4;
        //$(this).outerWidth( largura );
        $(this).animate({ width: largura });
        $(this).addClass('ok');
    });
    
}

function disableBackButton()
{
    window.history.forward();
}


function dynamicTab(idTab, nomeTab, icone, liToChange, content, codigoPastaAutenticador, tipoAplicativo, urlAutenticador) {

    if (!$('a[href="#' + idTab + '"]').length) {//se a aba não existe

        $(".slider #" + idTab).remove();

        $('.slider-tabs').append('<li class="slmenu" codigo=\'' + codigoPastaAutenticador + '\' tipo=\'' + tipoAplicativo + '\' urlAutenticador=\'' + (urlAutenticador != undefined ? urlAutenticador : "") + '\'><span class="' + icone + '"></span><a href="#' + idTab + '"> ' + nomeTab + '</a><button class="close" type="button">×</button></li>');//adiciona a aba
        $('.slider').append($('<div class="slide"></div>').attr('id', idTab).append(content));//adiciona o conteudo da aba
        
        sliderAdjust();//ajusta a largura do slider
        activeTabChange($('.slider-tabs a[href="#' + idTab + '"]').parent('li'));//ativa a nova aba
        eventClickTab($('a[href="#' + idTab + '"]'));//evento ao clicar na aba
        eventClickCloseTab($('a[href="#' + idTab + '"]').next('button.close'), liToChange);//evento de fechar a aba para o botão

    }
    else {

        $("#" + idTab).html(content);//atualiza o conteúdo da aba

        activeTabChange($('.slider-tabs a[href="#' + idTab + '"]').parent('li'));//ativa a nova aba
    }
}

function atualizaConteudoGuia(idDiv, content) {

    $("#" + idDiv).html(content);

    sliderAdjust(); //Ajusta a largura do slider
}

function RemoverAplicativoFavorito(codigoAplicativo, nome) {
    var modulo = vm.GetModulo("ListaAplicativosUsuarioViewModel");
    if (modulo)
        modulo.ConfirmaRemoverAplicativoFavorito(codigoAplicativo, nome);
}

setTimeout("disableBackButton()", 0);
