var $scrollTrabalhos = "";;
var $apiScroll;
var $apiScrollDetalhe;
var $selecetdLI = "";
var nLastMovedPos = -1;
var bAlignLeft = true;
var bDetalheOpen = false;
var itemWidth = 150;
var paddingOffset = 20;
var marginOffset = 20;
var originalTitle = "";
var fadeOver = .4;
var bMobile = false;
var myiScroll;
var myiScrollDetalhe;
var bFirstLoad = true;
var aTrabalhosVistos = new Array();

$.address.externalChange(function(event) {  
    
    if(event.pathNames[0] == "work"){
        $("#trab_" + event.pathNames[1] + " a").click();
    }else if(event.pathNames[0] != "work"){
        //faz o reset ao formulário
        $("#formMenu input").each(function(){
            $(this).val($(this).attr("rel"));
            $("a[rel="+ $(this).attr("rel") +"]",$(this).parent()).addClass("selected");
        });
        
        //mediante o que é passados
        if(event.pathNames[0] == "Pesquisa"){
            $("#termoPesquisa").val(event.pathNames[1]);
            $("#formMenu").submit();
        }else{
            $("#j" + event.pathNames[0] + " a[rel=" + event.pathNames[1] + "]").click();    
        }
    }else if(event.pathNames.length == 0){
        $("#detalheTrabalho .close a.fecha").click();
    }
});  

function getListaTrabalhosVistos(){
    
    if($.cookie("visto") != null){
        aTrabalhosVistos = $.cookie("visto").split(/,/);
    }
}

function setTrabalhoVisto(id){
    aTrabalhosVistos[id] = 1;
    $.cookie("visto",aTrabalhosVistos.join(","),{expires: 1000});
}


$(document).ready(function(){	

    //inicializa a lista de trabalhos vistos via cookie
    getListaTrabalhosVistos();

    if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i))) {
        bMobile = true;
    }
    
    if(bMobile){
        //crio o scroll principal
        myiScroll = new iScroll('portfolioContainerScroll', 
        { 
            hScrollbar: true, 
            vScrollbar: false,
            hideScrollbar: true,
            useTransition:true,
            scrollbarClass: 'myScrollbar',
            lockDirection: "left/right"
        });
        
        $("#main").css("height","660px");
    }
    

    originalTitle = $("title").text();

    carregaDados(true);

    //logotipo
    $("#logotipo a").click(function(){
        $("a",$(this).parent().parent()).removeClass("selected");
        
        $("#formMenu input").each(function(){
            $(this).val($(this).attr("rel"));
            $("a[rel="+ $(this).attr("rel") +"]",$(this).parent()).addClass("selected");
        });
        
        //activa o filtro
        $.address.value("",false);
        $("title").html(originalTitle);
        
        carregaDados(false);

        return false;
    });
 
    $("#janelas .coluna a").click(function(){
        
        //se for a primeira vez a carregar
        if(bFirstLoad){
            bFirstLoad = false;
            //se for a opção de cliente
            if($("input",$(this).parent().parent()).attr("name") == "jClientes"){
                //selecciono a opção todos no tipo
                $("#jTipo a").removeClass("selected");
                $("#jTipo input[name=jTipo]").val(0);
                $("#jTipo a[rel=0]").addClass("selected");
            }
            
        }
        
        $("a",$(this).parent().parent()).removeClass("selected");
        $(this).addClass("selected");
        $("input",$(this).parent().parent()).val($(this).attr("rel"));

        //activa o filtro
        $("title").html($(this).text());
        $.address.value($(this).parent().parent().attr("id").substr(1) + "/" + $(this).attr("rel"),false);
        _gaq.push(['_trackPageview', "#/" + $(this).parent().parent().attr("id").substr(1) + "/" + $(this).attr("rel"),false]);
        
        //remove a pesquisa
        $("#termoPesquisa").val("");
        
        carregaDados(false);
        
        return false;
    });
    
    $("#formMenu").submit(function(){
        
        //faz o reset ao formulário
        $("#jTipo a, #jClientes a").removeClass("selected");
        $("#jTipo input, #jClientes input").each(function(){
            $(this).val($(this).attr("rel"));
            $("a[rel="+ $(this).attr("rel") +"]",$(this).parent()).addClass("selected");
        });
        
        $("title").html("Pesquisa");
        $.address.value("Pesquisa/" + $("#termoPesquisa").val(),false);
        _gaq.push(['_trackPageview', "#Pesquisa/" + $("#termoPesquisa").val(),false]);
        
        carregaDados(false);
        
        return false;
    });

    //ao passar sobre o menu
    $("#menu a").mouseenter(function(){
        
        var id = $(this).attr("rel");

        //mostra só para carcular a posição
        $("#janelas").stop().show();
        var nDif = Math.abs($(this).offset().left - $("#janelas").offset().left) + ($(this).width()/2) - 7;
        $("#janelas").hide();
        
        $("#janelas").css("backgroundPosition", nDif + "px 56px");
         
        //escondo todas as divs
        $("#janelas form > div").hide();
        //mostro só a actual
        $("#" + id).show();
        
        $("#janelas").stop().show();
        
        if(bMobile){
            $("#janelas").stop().show().delay(5000).show(function(){
                $("#janelas").mouseleave();
            });
        }
    });
    
    //ao sair da janela
    $("#janelas").mouseleave(function(){
        $(this).stop().hide();
    });
    
    $("#menu a").click(function(){
        return false;
    });

    //o over só fica activo se não for mobile
    if(!bMobile){
        $("#portfolio li").live("mouseenter",function(){
            $(this).addClass("overLI");
            $(".over",$(this)).stop().fadeTo(0,fadeOver);
        }).live("mouseleave",function(){
            $(this).removeClass("overLI");
            var elemento = $(".over",$(this));

            if(!elemento.hasClass("selected")){
                elemento.stop().fadeTo(200,0);    
            }

          });
    }

    var tipoEvento = "click";
    if(bMobile){
        //tipoEvento = "touchend";
    }

    //link para o detalhe
    $("#portfolio a").live(tipoEvento,function(){
       
       //para o over
       $("#portfolio .over.selected").hide().removeClass("selected");
       if(bMobile){
           $(".over",$(this).parent().parent()).fadeTo(0,fadeOver).addClass("selected");
       }else{
           $(this).parent().fadeTo(0,fadeOver).addClass("selected");
       }
       
        var id = $(this).parent().parent().attr("data-id");
        
        var idOld = "";
        if($selecetdLI != ""){
            idOld = $selecetdLI.attr("data-id");
        }

        if(idOld != id){

            //para o marquee
            if($selecetdLI != ""){
                $selecetdLI.mouseleave();
            }

            $.address.value("work/" + id,false);

            $selecetdLI = $("#trab_" + id);
            
            //colocao como visitado;
            $selecetdLI.addClass("visited");
            //guarda no cookie que já foi visto
            setTrabalhoVisto(id);
            
            //mudo o titulo do browser
            //$.address.title($(".nome",$selecetdLI).text());
            $("title").html($(".nome",$selecetdLI).text());
            
            //registo no analytics
            _gaq.push(['_trackPageview', "#/work/" + id,false]);

            //remove o conteudo
            $("#detalheTrabalho").remove();
            

            //posição para onde se vai mover
            bAlignLeft = true;
            var posDest = $selecetdLI.position().left;
            var chekSpace = $("#portfolio").width() - posDest - $(window).width();
            if(bMobile){
                chekSpace = $("#portfolio").width() - Math.abs($("#portfolio").offset().left) - posDest - $(window).width();
            }
            //alinha à direita
            if(chekSpace < 0){
               posDest = $selecetdLI.position().left - $(window).width() + $selecetdLI.width() + (paddingOffset*2);
               if(bMobile){
                  bAlignLeft = false;
                  posDest+=1;
               }
               if(posDest>0){
                   bAlignLeft = false;
               }
            }

            //se não for a mesma coluna
            if(nLastMovedPos != posDest){
               nLastMovedPos = posDest;
               
               if(bMobile){
                   myiScroll.disable();
                    myiScroll.scrollTo(posDest-marginOffset,0,500,true);
                    
               }else{
                   $apiScroll.scrollTo(posDest,0);
               }
               
               $selecetdLI.delay(500).show("fast",function(){
                    carregaDetalhe(id);
               });
               
               
            }else{
               carregaDetalhe(id);
            }
        }else{
            $("#detalheTrabalho .close a.fecha").click();
        }

       
       
       return false;
    });
    //fechar
    $("#detalheTrabalho .close a.fecha").live("click",function(){
        
        //para o over
        $("#portfolio .over.selected").stop().fadeTo(200,0).removeClass("selected");

        //para o marquee
        $selecetdLI.mouseleave();

        //remove a ligação
        $selecetdLI = "";

        //$("#portfolio li").fadeTo(0, 1);
        //$("#portfolio").fadeTo(0, .5);
        
        $("#detalheTrabalho").fadeOut(750, function(){
            $("#detalheTrabalho").remove();    
            //$("#portfolio").delay(250).fadeTo("slow", 1);
            
            
            if(bMobile){
                myiScroll.enable();
            }else{
                $("#portfolioContainer > div .jspHorizontalBar").css("visibility","visible");
            }
            bDetalheOpen = false;

            $.address.value("");
            //_gaq.push(['_trackPageview', ""]);
            $("title").html(originalTitle);
            //$.address.title(originalTitle);
        })
        
        return false;
    });

    $("#detalheTrabalho .close a:not(.fecha)").live("click",function(){
        
        
        var nActualPos = Number($selecetdLI.attr("data-order"));
        
        //anterior
        if($(this).hasClass("ant")){
            nActualPos--;
        }else{
            nActualPos++;
        }
        
        $("#portfolio li[data-order=" + nActualPos + "] .over a").click();
        
        /*var nIndex = -1;
        var parentOffset = $("#detalheTrabalho").offset().left + marginOffset + 2;
        var imagensOffset = $("#detalheTrabalho .imagens").position().left;
        
        var dif;
        $("#detalheTrabalho .imagens > div").each(function(index){
            
            dif = $(this).offset().left-parentOffset;
            
            if(dif > 0){
                return false;
            }
            
            nIndex = index;
        });

        var nIndexPrev = nIndex;
        
        //anterior
        if($(this).hasClass("ant")){
            nIndex--;
            if(nIndex<-1){
                nIndex = -1;
            }
        }else{
            nIndex++;
        }
        
        var elementoDestino;
        if(nIndex == -1){
            elementoDestino = $("#detalheTrabalho .dados");
        }else{
            elementoDestino = $("#detalheTrabalho .imagens > div:eq(" + nIndex + ")");    
        }
        
        
        if(elementoDestino.length>0 && nIndexPrev != nIndex){
        
            var posDest = elementoDestino.position().left + parseInt(elementoDestino.css("margin-left"));;
            if(nIndex > -1){
                posDest += imagensOffset;
            }

            if(bMobile){
                myiScrollDetalhe.scrollTo(posDest-marginOffset,0,500,true);
           }else{
               $apiScrollDetalhe.scrollTo(posDest,0,500);
           }
            
        }
        
        
        */

        return false;
    });

});



//sempre que mudar a dimensão da janela
$(window).resize(function() {
    
    ajustaTamanhoDetalhe(true);
    
    if(bMobile){
        myiScroll.refresh();
        if(bDetalheOpen){
            myiScroll.disable();
        }
    }else{
    
        if($scrollTrabalhos!=""){
            //reinicia o scroll
            $apiScroll.reinitialise();
            if(bDetalheOpen){
                $("#portfolioContainer > div .jspHorizontalBar").css("visibility","hidden");
            }
        }
    }
});

function refrescaScroll(){
    
    if(bMobile){
        myiScroll.refresh();
    }else{
    
        if($scrollTrabalhos!=""){
            $apiScroll.scrollToX(0,false);
            $apiScroll.destroy();
        }

        $scrollTrabalhos = $('#portfolioContainer > div').jScrollPane({
            animateScroll: true,
            animateDuration: 500
        });
        $apiScroll = $('#portfolioContainer > div').data('jsp');
    }
}


function carregaDados(bFirst){

    //fecha um possivel trabalho aberto
    $("#detalheTrabalho .close a.fecha").click();

    $("#loading").fadeIn("fast");
    $("#portfolioContainer").hide();

    Portfolio.getAll($("#formMenu").serialize())
        .then(function(data){

            Portfolio.ajaxLista = "";

            //apresento os lis
            var divDados = $(data);

            $("#portfolio").width(divDados.css("width"));
            $("#portfolio").html(divDados.html());

            $("#loading").fadeOut("fast");
            
            $("#portfolioContainer").show();

            //para cada trabalho marca como visto
            $("#portfolio li").each(function(){
                if(aTrabalhosVistos[$(this).attr("data-id")] == 1){
                    $(this).addClass("visited");
                }
            });


            refrescaScroll();
            
            //se for o primeiro load
            //carrega no link passado pelo deep link
            if(bFirst){
                if($.address.pathNames()[0] == "work"){
                    $("#trab_" + $.address.pathNames()[1] + " .over a").click();
                }
            }
            
            //preloaderImages();
            criaMarquee();        
        })
        .fail(function(data){
            //alert("Erro a carregar dados!");
            if(Portfolio.ajaxLista == ""){
                $("#loading").fadeOut("fast");
            }
        });
}

/*function preloaderImages(){
    
    $("#portfolioContainer").hide();
    $("#loading").stop().show();
    $("#loadingBar .bar").width("0%");
    $("#loadingBar .desc").html("A carregar imagens: 0%");
    $("#loadingBar").fadeIn("normal",function(){
    
        $('img').imagemonitor({
            'init' : function(){

            },
            'onLoad' : function(loadedImage, totalImage){
                //var barwidth = (loadedImage/totalImage)*800;
                var loadedpercent = Math.floor(((loadedImage/totalImage)*100))+'%';
                $("#loadingBar .bar").width(loadedpercent);
                $("#loadingBar .desc").html("A carregar imagens: " + loadedpercent);
            },
            'onComplete' : function(loadedImage){
                
                $("#portfolioContainer").fadeIn("normal",function(){
                    criaMarquee();        
                });
                $("#loadingBar").fadeOut("fast");
                $("#loading").fadeOut("fast");
            }
        });

    });
    
    
}*/

function criaMarquee(){
    //crio o marquee, faço pause, e verifico se relamente necessita do scroll
    $('#portfolio li .nome > div').marquee('pointer').trigger('pause').each(function(){
        if($(this).width() < $(">div",$(this)).width()){
            $(this).data("scroll","true");
            
            //para o caso de já estar seleccionado
            if($(".over",$(this).parent().parent()).hasClass("selected")){
                $(this).trigger("start");    
            }
        }
        this.scrollLeft = $(this).width();
    });

    $("#portfolio li").mouseenter(function(){
        var div = $(".nome > div",$(this));
        if(div.data("scroll") == "true"){
            div.stop().trigger("start");    
        }

    }).mouseleave(function(){
        var div = $(".nome > div",$(this));
        var divOver = $(".over",$(this));
        if(div.data("scroll") == "true" && !divOver.hasClass("selected")){
            div.trigger("stop");
            div.animate({
                scrollLeft:div.width()
            },500);
        }
    })    
}

function carregaDetalhe(id){


    $("#loading").fadeIn("fast");
    //$("#portfolioContainer").hide();

    Portfolio.getDetalhe(id)
        .then(function(data){

            //apresento os lis
            var divDados = $(data);

            //remove a div
            $("#detalheTrabalho").remove();
            $("body").append(divDados.html());
            ajustaTamanhoDetalhe(false);

            $("#detalheTrabalho .imagens").hide();
            $("#detalheTrabalho").hide().delay(1000).fadeIn("normal",function(){
                $("#detalheTrabalho .imagens").delay(500).fadeIn("slow");
                
                if(bMobile){
                    $("#detalheTrabalho").css("height","600px");
                    $("#detalheTrabalho .areaScroll").css("height","600px");
                    $("#detalheTrabalho .close").css("top","10px");
                }
            });
            /*$("#portfolio").fadeTo("fast", .5,function(){
                $("#portfolio li").fadeTo(0, .5);
                $("#portfolio").fadeTo(0, 1);
                $("#portfolio li:[id=trab_"+id+"]").fadeTo("slow", 1);
            });*/

            $("#loading").fadeOut("fast");
            
            //link para o tipo dentro do atalho
            $("#detalheTrabalho .tipoLink").click(function(){
                $("#jTipo a[rel=" + $(this).attr("rel") + "]").click();
            });
            
            bDetalheOpen = true;
            $("#portfolioContainer > div .jspHorizontalBar").css("visibility","hidden");    
            
            activaSocial();

        })
        .fail(function(data){
            alert("Erro a carregar dados!");
            $("#loading").fadeOut("fast");
        });
}


function activaSocial(){
    //google+
    gapi.plusone.go("detalheTrabalho");
}

function ajustaTamanhoDetalhe(bResize){
    if($("#detalheTrabalho").length > 0){
        
        var marginFirst = itemWidth + marginOffset + paddingOffset;
        
        if(bResize){
            if(bMobile){
                myiScrollDetalhe.refresh();
            }else{
                $apiScrollDetalhe.destroy();    
            }
        }
        
        $("#detalheTrabalho").width(0);
        
        var windowW = $(window).width();
        var padding = parseInt($("#detalheTrabalho").css("padding-left")) + 
                      parseInt($("#detalheTrabalho").css("padding-right")) + 
                      parseInt($("#detalheTrabalho").css("border-left-width")) + 
                      parseInt($("#detalheTrabalho").css("border-right-width"));
                  
        var areaW = $("#detalheTrabalho .areaScroll").outerWidth(true);
        
        //se for para alinhar à esquerda
        if(bAlignLeft){
            $("#detalheTrabalho").css("left",marginFirst);
        }else{
            $("#detalheTrabalho").css("right",marginFirst);
        }
        
        
        if((areaW+marginFirst) > (windowW-padding)){
            if(bAlignLeft){
                $("#detalheTrabalho").css("border-right","0px");
            }else{
                $("#detalheTrabalho").css("border-left","0px");
            }
            $("#detalheTrabalho").width(windowW-padding-marginFirst);
        }else{
            $("#detalheTrabalho").width(areaW);
        }
        
        
        
        if(bMobile){
            if(!bResize){
                //crio o scroll principal
                myiScrollDetalhe = new iScroll('detalheTrabalhoScroll', 
                { 
                    hScrollbar: true, 
                    vScrollbar: false,
                    hideScrollbar: true,
                    useTransition:true,
                    scrollbarClass: 'myScrollbar',
                    lockDirection: "left/right"
                });
            }
        }else{
            $('#detalheTrabalhoScroll').jScrollPane({
                horizontalGutter: 30
            });
            
            $apiScrollDetalhe = $('#detalheTrabalhoScroll').data('jsp');
        }
        
    }
    
    
        
}


Portfolio = {
    ajaxLista:"",
    getAll:function(data){
        
        if(this.ajaxLista != ""){
            this.ajaxLista.abort();
        }
        
        var dfr = $.Deferred();
        this.ajaxLista = $.ajax({
            url: "ajaxPortfolio.php",
            data: data,
            type: "POST",
            success:dfr.resolve,
            error: dfr.reject
        });

        return dfr.promise();
    },
    getDetalhe:function(id){
        var dfr = $.Deferred();
        $.ajax({
            url: "ajaxDetalhe.php",
            data: "id=" + id,
            type: "POST",
            success:dfr.resolve,
            error: dfr.reject
        });

        return dfr.promise();
    }
}
