/*
 * Autor: Ralph Silveira Humberto
 *
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 *
 * Configurações:
 *
 *
 */
(function($){
    $.fn.galeriaMidia = function(settings){
        var constante = {
            HORIZONTAL:'horizontal',
            VERTICAL:'vertical'
        }

        settings = $.extend({}, $.fn.galeriaMidia.defaults, settings);

        var urlBase = settings.baseUrlDir+'estrutura/imgs/estrutura/';
        var vIcon = {
            ICON:{
                doc: urlBase+'mg_icon_doc.gif',
                movies: urlBase+'mg_icon_movies.gif',
                avi: urlBase+'mg_icon_movies.gif',
                flv: urlBase+'mg_icon_movies.gif',
                mpg: urlBase+'mg_icon_movies.gif',
                mov: urlBase+'mg_icon_movies.gif',
                pic: urlBase+'mg_icon_pic.gif',
                img: urlBase+'mg_icon_pic.gif',
                gallery: urlBase+'mg_icon_pic_gallery.gif',
                alb: urlBase+'mg_icon_pic_gallery.gif',
                podcast: urlBase+'mg_icon_podcast.gif',
                def: urlBase+'mg_icon_doc.gif'
            },
            IMAGE:{
                doc: urlBase+'gallery_icon_docs.jpg',
                movies: urlBase+'gallery_icon_filme.jpg',
                avi: urlBase+'gallery_icon_filme.jpg',
                flv: urlBase+'gallery_icon_filme.jpg',
                mpg: urlBase+'gallery_icon_filme.jpg',
                mov: urlBase+'gallery_icon_filme.jpg',
                pic: urlBase+'gallery_icon_foto.jpg',
                img: urlBase+'gallery_icon_foto.jpg',
                gallery: urlBase+'gallery_icon_album.jpg',
                alb: urlBase+'gallery_icon_album.gif',
                podcast: urlBase+'gallery_icon_som.jpg',
                graphic: urlBase+'gallery_icon_graficos.jpg',
                def: urlBase+'gallery_icon_docs.jpg'
            }
        }
        return this.each(
            function(){
                var aux=0;
                var topAtual=0;

                function avancarItem($this,$mediaIterator){
                    if(($mediaIterator.length-settings.nmIteracao-1)<aux) return;

                    var qtdeMovimentacao = 0;
                    for(var i=0;i<settings.nmIteracao;i++){
                        qtdeMovimentacao += settings.direcao==constante.VERTICAL?
                        $($mediaIterator[aux+i]).outerHeight(true):$($mediaIterator[aux+i]).outerWidth(true);
                    }
                    aux+=settings.nmIteracao;
                    topAtual += (qtdeMovimentacao*-1);
                    
                    $this.animate({
                        top:settings.direcao==constante.VERTICAL?topAtual:$this.css('top'),
                        left:settings.direcao==constante.HORIZONTAL?topAtual:$this.css('left')
                    },settings.velocidadeAnimated, function(){
                        return;
                    });
                }
                function voltarItem($this,$mediaIterator){
                    if(aux==0) return;

                    var qtdeMovimentacao = 0;
                    for(var i=1;i<=settings.nmIteracao;i++){
                        qtdeMovimentacao += settings.direcao==constante.VERTICAL?
                        $($mediaIterator[aux-i]).outerHeight(true):$($mediaIterator[aux-i]).outerWidth(true);
                    }
                    aux-=settings.nmIteracao;
                    topAtual += qtdeMovimentacao;

                    $this.animate({
                        top:settings.direcao==constante.VERTICAL?topAtual:$this.css('top'),
                        left:settings.direcao==constante.HORIZONTAL?topAtual:$this.css('left')
                    },settings.velocidadeAnimated, function(){
                        return;
                    });
                }
                var $this = $(this);
                
                var $mediaIterator = $this.children();
                var widthContainer = 0;
                var heightContainer = 0;

                var classIdButton = $this.attr('class').replace(' ', ':');

                $mediaIterator.each(function(){
                    var $media = $(this);
                    $media.css({
                        position:'relative'/*,
                        height: settings.direcao == constante.HORIZONTAL?$media.parent().outerHeight():$media.height(),
                        width: settings.direcao == constante.VERTICAL?$media.parent().outerWidth():$media.width()*/
                    });
                    if($media.find('*').length>0 && settings.showMiniIcon){
                        var $miniIcon = $('<img />').attr({
                            src:vIcon.ICON[$media.attr('rel')]!=undefined?vIcon.ICON[$media.attr('rel')]:vIcon.ICON.def
                        });
                        $miniIcon.css({
                            position:'absolute',
                            top: ($media.innerHeight()-parseInt(settings.marginHeightMiniIcon)-23)+'px',
                            left: ($media.innerWidth()-parseInt(settings.marginWidthMiniIcon)-24)+'px'
                        }).addClass('miniIcon');
                        $media.append($miniIcon);
                    }else if($media.find('*').length<1){
                        var $thumb = $('<img />').attr({
                            src:vIcon.IMAGE[$media.attr('rel')]!=undefined?vIcon.IMAGE[$media.attr('rel')]:vIcon.IMAGE.def
                        })
                        $media.append($thumb);
                    }
                    $media.append($('<p />').text($media.attr('title')));
                    
                    heightContainer += $media.outerHeight(true);
                    widthContainer += $media.outerWidth(true);
                });

                var $galeriaMidiaContainer = $('<div />').css({
                    width: $this.css('width'),
                    height: $this.css('height')
                }).addClass('galeriaMidiaContainer');
                $this.css({
                    width: settings.direcao == constante.HORIZONTAL?widthContainer:$this.width(),
                    height: settings.direcao == constante.VERTICAL?heightContainer:$this.height(),
                    position: 'absolute',
                    top:0,
                    left:0
                });

                if($this.parent().attr('class')=='galeriaMidiaContainer')$this.unwrap();
                $this.wrap($galeriaMidiaContainer);

                if(settings.btBottom != undefined && settings.btTop != ''){
                    $('.'+classIdButton+'_btTop').remove();
                    
                    var $btTop = settings.btTop;
                    $btTop.addClass(classIdButton+'_btTop');
                    $btTop.click(function(){
                        voltarItem($this,$mediaIterator);
                        return false;
                    });

                    $this.parent().before($btTop);
                }
                if(settings.btBottom != undefined && settings.btBottom != ''){
                    $('.'+classIdButton+'_btBottom').remove();
                    
                    var $btBottom = settings.btBottom;
                    $btBottom.addClass(classIdButton+'_btBottom');
                    $btBottom.click(function(){
                        avancarItem($this,$mediaIterator);
                        return false;
                    });

                    $this.parent().after($btBottom);
                }
                if(settings.setaDireita != ''){
                    $(settings.setaDireita).click(
                        function(){
                            avancarItem($this,$mediaIterator)
                            return false;
                        });
                }
                if(settings.setaEsquerda != ''){
                    $(settings.setaEsquerda).click(
                        function(){
                            voltarItem($this,$mediaIterator)
                            return false;
                        });
                }
                try{
                    $this.parent().bind('mousewheel',
                        function(event,delta){
                            delta > 0 ? avancarItem($this,$mediaIterator) : voltarItem($this,$mediaIterator);

                            return false;
                        });
                }catch(ee){}
            });
    };
    $.fn.galeriaMidia.defaults = {
        baseUrlDir:'',
        setaEsquerda:'',//especifica o objeto em questão para ser a seta esquerda
        setaDireita:'',//especifica o objeto em questão para ser a seta direita
        direcao:'vertical',
        nmIteracao: 1,
        gifTipoObjeto: false,
        animated:true,
        imagem:{},
        icon:{},
        showMiniIcon:false,
        velocidadeAnimated:400,
        btBotton:'',
        btTop:'',
        marginHeightMiniIcon:0,
        marginWidthMiniIcon:0
    };
})(jQuery);
