function photoGallery(repository, thumbWidth, galleryWidth, minThumbs) {
    this.photos = new Array();
    this.totalPhotos = 0;
    this.timerMove = null;
    this.timerSlide = null;
    this.curPhoto = 0;
    this.w = 0; //largura da linha de thumbs
    this.maxLeft = -522; //máximo que a linha de thumbs anda pra esquerda
    this.instanceName;
    this.whatBrowser;
    
    this.thumbWidth; //largura da thumb + o espaço entra uma thumb e outra
    this.galleryWidth; //largura da fileira de thumbs
    this.minThumbs; //número mínimo de thumbs pra aparecer as flechas de navegação
    
    this.initGallery = initGallery;
    this.setThumbRow = setThumbRow;
    this.setPhoto = setPhoto;
    this.moveGallery = moveGallery;
    this.changePosition = changePosition;
    this.setRepository = setRepository;
    this.setThumbWidth = setThumbWidth;
    this.setGalleryWidth = setGalleryWidth;
    this.setMinThumbs = setMinThumbs;
    this.setCurPhoto = setCurPhoto;
    this.setInstanceName = setInstanceName;
    this.writeDivs = writeDivs;
    this.writeOverPanel = writeOverPanel;
    this.expandPanel = expandPanel;
    this.closePanel = closePanel;
    this.openPanel = openPanel;
    this.openSubtitle = openSubtitle;
    this.startSlideShow = startSlideShow;
    this.nextSlide = nextSlide;
    this.stopSlideShow = stopSlideShow;
    this.addRemoveClass = addRemoveClass;
    this.doDebug = doDebug;
    this.idBrowser = idBrowser;
    
    (repository) ? this.setRepository(repository) : this.repository = 'repositorio';
    (thumbWidth) ? this.setThumbWidth(thumbWidth) : this.thumbWidth = 58;
    (galleryWidth) ? this.setGalleryWidth(galleryWidth) : this.galleryWidth = 522;
    (minThumbs) ? this.setMinThumbs(minThumbs) : this.minThumbs = 9;
}

function setInstanceName(instanceName) {
    this.instanceName = instanceName;
}

function setRepository(repository) {
    this.repository = repository;
}

function setThumbWidth(thumbWidth) {
    this.thumbWidth = thumbWidth;
}

function setGalleryWidth(galleryWidth) {
    this.galleryWidth = galleryWidth;
}

function setMinThumbs(minThumbs) {
    this.minThumbs = minThumbs;
}

function setCurPhoto(curPhoto) {
    this.curPhoto = curPhoto;
}

function doDebug(msg) {
    alert(msg);
}

function initGallery(instanceName) {
        //${gf.count}|${gf.LstFoto}|${gf.LstCredito}|${gf.LstTexto}|${gf.LstDesc}
        var rep = document.getElementById(this.repository);
        var repDivs = rep.getElementsByTagName('div');
        this.setInstanceName(instanceName);
        this.totalPhotos = repDivs.length;
        this.whatBrowser = this.idBrowser();
        
        padrao = /"/g;
        padraoImg = /[-_]p\./g;
        
        for(var i = 0; i < repDivs.length; i++) {
                var c = repDivs[i].innerHTML.split('|');
                this.photos[i] = new Array();
                this.photos[i]['thumb'] = '<a href="javascript: '+this.instanceName+'.setPhoto(\''+c[0]+'\'); void(0);"><img src="/imagem/'+c[1]+'" border="0" /></a>';
                
                //this.photos[i]['main'] = '/imagem/' + c[1].split('-p.')[0] + '-g.' + c[1].split('-p.')[1];
                this.photos[i]['main'] = '/imagem/' + c[1];
                this.photos[i]['main'] = this.photos[i]['main'].replace(padraoImg, "-g.");
                
                this.photos[i]['alt'] = c[3] + ' Foto: ' + c[2] + ' ('+c[0]+')';
                this.photos[i]['alt'] = this.photos[i]['alt'].replace(padrao, "'");                
                
                this.photos[i]['subtitle'] = c[3];
                this.photos[i]['credit'] = c[2];
                if (c[4]) {
                        this.photos[i]['desc'] = c[4];
                } else {
                        this.photos[i]['desc'] = false;
                }
        }
        this.totalPhotos = this.photos.length;
        this.writeDivs();
        this.setThumbRow(this.photos);
        this.setPhoto(0);
}

function setThumbRow(list) {
        var sel = "";
        for (var i=0; i<this.totalPhotos; i++) {
                var myLi = document.createElement('div');
                myLi.className = "thumbItem";
                if(!sel) {
                        sel = " selecionado"
                        myLi.className = myLi.className + sel;
                }
                myLi.innerHTML = list[i]['thumb'];
                myLi.id = 'thumb' + i;
                document.getElementById('thumbRow').appendChild(myLi);
        }
        this.w = this.totalPhotos * this.thumbWidth;
        this.maxLeft = (this.w - this.galleryWidth)*-1;
        document.getElementById('thumbRow').style.width = this.w + 'px';
}

function setPhoto(photoNum) {
        this.curPhoto = photoNum;
        var e = document.getElementById('mainPhoto');
        e.src = this.photos[photoNum]['main'];
        e.alt = this.photos[photoNum]['alt'];
        e.title = this.photos[photoNum]['alt'];

        if(!this.photos[photoNum]['desc']) {
            if(this.whatBrowser == "msie") {
                var panel = document.getElementById('descGallery');
                var content = document.getElementById('descContent');
                panel.style.display = 'none';
                panel.style.visibility = 'hidden';
                content.innerHTML = '';
            } else {
                var panel = document.getElementById('panel-content');
                panel.innerHTML = "";
                this.closePanel();
                this.openSubtitle();                
            }
        } else {
            if(this.whatBrowser == "msie") {
                var panel = document.getElementById('descGallery');
                var content = document.getElementById('descContent');
                panel.style.display = 'block';
                panel.style.visibility = 'visible';
                content.innerHTML = this.photos[photoNum]['desc'];
            } else {
                var panel = document.getElementById('panel-content');
                panel.innerHTML = this.photos[photoNum]['desc'];
                this.openPanel();
            }
        }
        
        if(this.photos[photoNum]['credit'].length > 0) {
            var credito = document.getElementById('credito-content');
            credito.innerHTML = this.photos[photoNum]['credit'];
        }
        
        if(this.photos[photoNum]['subtitle'].length > 0) {
            document.getElementById('legGallery').style.display = 'block';
            document.getElementById('legGallery').style.visibility = 'visible';
            document.getElementById('subtitleGallery').innerHTML = this.photos[photoNum]['subtitle'];
        } else {
            document.getElementById('legGallery').style.display = 'none';
            document.getElementById('legGallery').style.visibility = 'hidden';
        }

        if(this.totalPhotos > 1) {
            var p = document.getElementById('navLinkPrev');
            var n = document.getElementById('navLinkNext');
            
            var next = Number(photoNum) + 1;
            var prev = Number(photoNum) - 1;
            
            if(next >= this.totalPhotos) {
                next = 0;
            }

            if(prev < 0) {
                prev = this.totalPhotos - 1;
            }
            
            p.href="javascript: "+this.instanceName+".setPhoto("+prev+"); void(0);";
            n.href="javascript: "+this.instanceName+".setPhoto("+next+"); void(0);";
        }
        
        for (var i=0; i<this.totalPhotos; i++) {
                var c = document.getElementById('thumb'+i);
                if(i == photoNum) {
                        this.addRemoveClass(c, 'selecionado', 'add');
                } else {
                        this.addRemoveClass(c, 'selecionado', 'remove');
                }
        }
        
        e.onload = function(photoNum) {
            var e = document.getElementById('mainPhoto');
            var height = e.height;
            var width = e.width;
            
            var se = document.getElementById('navega-esq-but');
            var ce = document.getElementById('click-esq-but');
            var sd = document.getElementById('navega-dir-but');
            var cd = document.getElementById('click-dir-but');
            
            var auxHeight = Number(height);
            var auxWidth = Number(width);
            if(auxHeight > 0) {
                clickHeight = auxHeight;
                auxHeight = (auxHeight/2) - 61 + 71;
                se.style.top = auxHeight + 'px';
                sd.style.top = auxHeight + 'px';
                ce.style.height = clickHeight + 'px';
                cd.style.height = clickHeight + 'px';
            } else {
                auxHeight = 330;
                clickHeight = auxHeight + 16;
                auxHeight = (auxHeight/2) - 61 + 71;
                se.style.top = auxHeight + 'px';
                sd.style.top = auxHeight + 'px';
                ce.style.height = clickHeight + 'px';
                cd.style.height = clickHeight + 'px';
            }
            
            var leftWidth = 0;
            var rightWidth = 590;
            if(auxWidth > 0) {
                leftWidth = 295 - (auxWidth/2) - 18;
                rightWidth = 295 + (auxWidth/2) - 44;
            } else {
                leftWidth = leftWidth - 18;
                rightWidth = rightWidth - 44;
            }
            
            se.style.left = leftWidth + 'px';
            sd.style.left = rightWidth + 'px';
            
            //$.getScript("/js/audiencia.js", function(){
            //    return false;
                //alert("Script loaded and executed.");
            //});
        };
}

function moveGallery(div, mode) {
    switch(mode) {
            case 'stop':
                    goNext = false;
                    clearInterval(this.timerMove);
                    break;
            default:
                    this.timerMove = setInterval('this.changePosition("'+div+'", "'+mode+'", "'+this.maxLeft+'");', 100);
                    break;
    }
}

function changePosition(div, mode, maxLeft) {
        var e = document.getElementById(div);
        switch(mode) {
                case 'hor+':
                        var curPos = Number(e.style.left.split('px')[0]);
                        curPos += 10;
                        if(curPos>=8) {
                                clearInterval(this.timerMove);
                        } else {
                                e.style.left = curPos + 'px';
                        }
                        break;
                case 'hor-':
                        var curPos = Number(e.style.left.split('px')[0]);
                        curPos -= 10;
                        if(curPos<=maxLeft) {
                                clearInterval(this.timerMove);
                        } else {
                                e.style.left = curPos + 'px';
                        }
                        break;
                case 'ver+':
                        var curPos = Number(e.style.top.split('px')[0]);
                        curPos += 10;
                        e.style.top = curPos + 'px';
                        break;
                case 'ver-':
                        var curPos = Number(e.style.top.split('px')[0]);
                        curPos -= 10;
                        e.style.top = curPos + 'px';
                        break;
        }
}

function showOrHide(div, mode) {
    var e = document.getElementById(div);
    switch(mode) {
        case 'show':
            e.style.display = 'block';
            e.style.visibility = 'visible';
            //this.openPanel();
            break;
        case 'hide':
            e.style.display = 'none';
            e.style.visibility = 'hidden';
            break;
    }
}

function writeDivs() {
    
    var prev = Number(this.totalPhotos) - 1;
    var next = 1;
    
    document.write('		<div class="foto">');
    if(this.totalPhotos > 1) {
        document.write('            <div class="slideShow">');
        document.write('                <a id="playSlide" href="javascript:void(0);" onclick="'+this.instanceName+'.startSlideShow();" ><img src="/css/i/play.gif" border="0"><div class="txt-slide">Iniciar Slideshow</div></a>');
        document.write('                <a id="stopSlide" href="javascript:void(0);" style="display: none;" onclick="'+this.instanceName+'.stopSlideShow();" ><img src="/css/i/stop.gif" border="0"><div class="txt-slide">Parar Slideshow</div></a>');
        document.write('            </div>');
        document.write('            <div class="thumbs">');
    } else {
        document.write('            <div class="slideShow" style="display:none; visibility:hidden;">');
        document.write('                <a id="playSlide" href="javascript:void(0);" onclick="'+this.instanceName+'.startSlideShow();" ><img src="/css/i/play.gif" border="0"><div class="txt-slide">Iniciar Slideshow</div></a>');
        document.write('                <a id="stopSlide" href="javascript:void(0);" style="display: none;" onclick="'+this.instanceName+'.stopSlideShow();" ><img src="/css/i/stop.gif" border="0"><div class="txt-slide">Parar Slideshow</div></a>');
        document.write('            </div>');
        document.write('            <div class="thumbs" style="display:none; visibility:hidden;">');
    }
    if(this.totalPhotos > this.minThumbs) {
        document.write('                <div class="seta-esq"><a href="javascript:void(0);" onmouseover="'+this.instanceName+'.moveGallery(\'thumbRow\',\'hor+\');" onmouseout="'+this.instanceName+'.moveGallery(\'thumbRow\',\'stop\');"><img src="/css/i/seta-esq-1.gif" border="0" /></a></div>');
        document.write('                <div class="thumbContent">');
        document.write('                    <div class="thumbRow" id="thumbRow">');
        document.write('                    </div>');
        document.write('                </div>');
        document.write('                <div class="seta-dir"><a href="javascript:void(0);" onmouseover="'+this.instanceName+'.moveGallery(\'thumbRow\',\'hor-\');" onmouseout="'+this.instanceName+'.moveGallery(\'thumbRow\',\'stop\');"><img src="/css/i/seta-dir-1.gif" border="0" /></a></div>');
    } else {
        document.write('                <div class="seta-esq-off"><img src="/css/i/seta-esq-2.gif" border="0" /></div>');
        document.write('                <div class="thumbContent">');
        document.write('                    <div class="thumbRow" id="thumbRow">');
        document.write('                    </div>');
        document.write('                </div>');
        document.write('                <div class="seta-dir-off"><img src="/css/i/seta-dir-2.gif" border="0" /></div>');
    }
    document.write('                </div>');
    
    if(this.totalPhotos > 1) {
        document.write('            <div id="click-esq-but" class="click-esq" onMouseOver="javascript: showOrHide(\'navega-esq-but\', \'show\');" onMouseOut="javascript: showOrHide(\'navega-esq-but\', \'hide\');"></div>');
        document.write('            <div id="click-dir-but" class="click-dir" onMouseOver="javascript: showOrHide(\'navega-dir-but\', \'show\');" onMouseOut="javascript: showOrHide(\'navega-dir-but\', \'hide\');"></div>');
        document.write('            <div id="navega-esq-but" class="navega-esq" onMouseOver="javascript: showOrHide(\'navega-esq-but\', \'show\');" onMouseOut="javascript: showOrHide(\'navega-esq-but\', \'hide\');"><a id="navLinkPrev" href="javascript: '+this.instanceName+'.setPhoto('+prev+'); void(0);"><img src="/css/i/seta-dir.gif" border="0" /></a></div>');
        document.write('            <div id="navega-dir-but" class="navega-dir" onMouseOver="javascript: showOrHide(\'navega-dir-but\', \'show\');" onMouseOut="javascript: showOrHide(\'navega-dir-but\', \'hide\');"><a id="navLinkNext" href="javascript: '+this.instanceName+'.setPhoto('+next+'); void(0);"><img src="/css/i/seta-esq.gif" border="0" /></a></div>');
    }
    
    document.write('		    <div class="img" style="text-align: center;">');
    document.write('		        <div>');
    document.write('		            <img id="mainPhoto" src="" alt="" border="0"/>');
    document.write('		        </div>');
    document.write('		        <div id="credito" class="credito">');
    document.write('                        <div id="credito-content" class="content">');
    document.write('                            ');
    document.write('                        </div>');
    document.write('                    </div>');
    
    this.writeOverPanel();
    
    document.write('		    </div>');
    document.write('		    <div id="legGallery" class="leg">');
    document.write('		        <div id="subtitleGallery" class="legenda">');
    document.write('			</div>');
    document.write('		    </div>');
    document.write('		    <div id="descGallery" class="desc" style="display: none; visibility: hidden;">');
    document.write('		        <div id="descContent" class="legenda">');
    document.write('			</div>');
    document.write('		    </div>');
    document.write('		</div>');
}

function writeOverPanel() {
    document.write('<div class="over-panel">');
    document.write('    <div class="panel-bg">');
    document.write('    </div>');
    document.write('    <div id="panel-content" class="panel-content">');
    document.write('    </div>');
    document.write('    <div class="panel-close">');
    document.write('        <a href="javascript: void(0);" onClick="'+this.instanceName+'.closePanel();"><img src="/css/i/painel-x.gif" border="0"></a>');
    document.write('    </div>');
    document.write('    <div class="panel-expand">');
    document.write('        <a href="javascript: void(0);" onClick="'+this.instanceName+'.expandPanel(\'expand\');"><img src="/css/i/painel-cima.gif" border="0"></a>');
    document.write('    </div>');
    document.write('</div>');
}

function expandPanel(mode) {
    var e = document.getElementById('mainPhoto');
    var height = e.height;
    
    switch(mode) {
        case 'expand':
            $(".over-panel").animate({
                height: height + "px"
            }, 400 );
            $(".panel-expand").html('<a href="javascript: void(0);" onClick="'+this.instanceName+'.expandPanel(\'collapse\');"><img src="/css/i/painel-baixo.gif" border="0"></a>');
            $(".panel-content").css({overflow: 'auto'});
            $(".panel-content").css({height: height + 'px'});
            $(".panel-bg").css({height: height + 'px'});

            break;
        case 'collapse':
            $(".over-panel").animate({
                height: "80px"
            }, 400 );
            $(".panel-expand").html('<a href="javascript: void(0);" onClick="'+this.instanceName+'.expandPanel(\'expand\');"><img src="/css/i/painel-cima.gif" border="0"></a>');
            $(".panel-content").css({overflow: 'hidden'});
            $(".panel-content").css({height: 'auto'});
            $(".panel-bg").css({height: '80px'});
            break;
    }    
}

function closePanel() {
    if(this.whatBrowser == "msie") {
        $(".over-panel").css({bottom: '225px'});
        $(".panel-expand").css({bottom: '-80px'});
    } else {
        $(".over-panel").css({bottom: '0px'});
        $(".panel-expand").css({bottom: '0px'});
    }
    
    $(".over-panel").animate({
        height: "0px"
    }, 400 );
    $(".credito").css({display: 'none'});
    $(".panel-expand").html('<a href="javascript: void(0);" onClick="'+this.instanceName+'.expandPanel(\'expand\');"><img src="/css/i/painel-cima.gif" border="0"></a>');
    $(".panel-content").css({overflow: 'hidden'});
    $(".panel-content").css({height: 'auto'});
}

function openPanel() {
    if(this.whatBrowser == "msie") {
        $(".over-panel").css({bottom: '225px'});
        $(".panel-expand").css({bottom: '-80px'});
    } else {
        $(".over-panel").css({bottom: '0px'});
        $(".panel-expand").css({bottom: '0px'});
    }
    
    $(".over-panel").animate({
        height: "80px"
    }, 400 );
    $(".credito").css({display: 'block'});
}

function openSubtitle(photoNum) {
    $(".credito").css({display: 'block'});
}

function addRemoveClass(elm, cname, mode) {
        var aux = '';
        switch(mode) {
                case 'add':
                        if (elm.className.indexOf(cname) < 0) {
                                elm.className = elm.className + " " + cname;
                        }
                        break;
                case 'remove':
                        if (elm.className.indexOf(cname) > -1) {
                                var classes = elm.className.split(' ');
                                for (var j=0; j < classes.length; j++) {
                                        if(classes[j] != cname) {
                                                aux = aux + " " + classes[j];
                                        }
                                }
                                elm.className = aux;
                        }
                        break;
                default:
                        if (elm.className.indexOf(cname) > -1) {
                                var classes = elm.className.split(' ');
                                for (var j=0; j < classes.length; j++) {
                                        if(classes[j] != cname) {
                                                aux = aux + " " + cname;
                                        }
                                }
                                elm.className = aux;
                        } else {
                                elm.className = elm.className + " " + cname;
                        }
                        break;
        }
}

function startSlideShow() {
    document.getElementById('playSlide').style.display = 'none';
    document.getElementById('stopSlide').style.display = 'block';
    this.timerSlide = setInterval(this.instanceName+'.nextSlide()', 5000);
}

function nextSlide() {
    var next = Number(this.curPhoto) + 1;
    if(next >= this.totalPhotos) {
        next = 0;
    }
    this.setPhoto(next);
}

function stopSlideShow() {
    document.getElementById('playSlide').style.display = 'block';
    document.getElementById('stopSlide').style.display = 'none';
    clearInterval(this.timerSlide);
}

function idBrowser() {
    var browserName = "";
    
    var ua = navigator.userAgent.toLowerCase();
    if ( ua.indexOf( "chrome" ) != -1 ) {
        browserName = "chrome";
    } else if ( ua.indexOf( "opera" ) != -1 ) {
        browserName = "opera";
    } else if ( ua.indexOf( "msie" ) != -1 ) {
        browserName = "msie";
    } else if ( ua.indexOf( "safari" ) != -1 ) {
        browserName = "safari";
    } else if ( ua.indexOf( "mozilla" ) != -1 ) {
        if ( ua.indexOf( "firefox" ) != -1 ) {
            browserName = "firefox";
        } else {
            browserName = "mozilla";
        }
    }
    return browserName;
}