/** Variável global que armazena o div que está sendo exibido. */
var activeLayer = null;

/** Variável global que representa o objeto XMLHttpRequest (ajax). */
var _comm = null;

/** Variável global auxiliar na comunicação com o servidor. */
var _lock = false;

/** Variáveis que armazenam as informações de rolagem. */
var _scrollable = null;
var _scrolltop  = 0;
var _scrollmax  = 0;
var _scrollHei  = 0;
var _scroller   = null;

/** Armazena a lista de imagens de uma galeria. */
var imageList = '';

/** Inicializa o sistema verificando qual é o browser. */
var isIE, isFF;
if( document.all )
{
    isIE = true;
    isFF = false;
}
else
{
    isIE = false;
    isFF = true;
}

/** Abre um layer específico do sistema. */
function openDiv( divname, optional )
{
    //alert( divname );
    soundFX('click');
    
    var _dvW;
    var _dvH;
    var docW = document.body.clientWidth;
    var docH = document.body.clientHeight;
    //var _div = document.getElementById( divname );
    var _div = document.getElementById('popupLayer');
    
    if( !_div ) return;
    
    // Fecha um layer aberto, se houver
    closeDiv( null );
    
    // Redefine o ID do layer para obter o estilo correto
    _div.setAttribute('id', divname);
    
    // Armazena uma referência global ao DIV
    activeLayer = _div;
    
    // Apaga seu conteúdo anterior (específico para Safari)
    activeLayer.innerHTML = '';
    
    // Define a posição do DIV
    _dvW = getDivWidth( divname );
    _dvH = getDivHeight( divname );
    
    var newX = parseInt( (docW / 2) - (_dvW / 2) );
    var newY = parseInt( (docH / 2) - (_dvH / 2) );
    
    //alert('new pos: '+ newX +' x '+ newY);
    
    activeLayer.style.left = newX + 'px';
    activeLayer.style.top  = newY + 'px';
    
    // Define seu estado
    activeLayer.style.display = 'block';
    
    // Inicia o processamento da página
    if( optional )
        startComm( divname + '.php', 'o='+ optional );
    else
        startComm( divname + '.php', _language );
}

/** Fecha um layer atualmente aberto. */
function closeDiv( divname )
{
    if( !activeLayer ) return;
    
    soundFX('click');
    
    activeLayer.setAttribute('id', 'popupLayer');
    activeLayer.style.display = 'none';
    
    activeLayer = null;
}

/** Abre uma página no iframe. */
function openPage( pagename )
{
    //alert( pagename );
    if( activeLayer ) return;
    
    var _iframe = document.getElementById('visorCam');
    
    if( !_iframe ) return;
    
    // O portfolio deve sempre ser aberto no início da galeria
    if( pagename == 'portfolio' )
        _iframe.src = pagename +'.php?d=reset';
    else
        _iframe.src = pagename +'.php';
}

/** Abre um layer de mensagem do sistema. */
function messageDiv( divname )
{
    var _dvW;
    var _dvH;
    var docW = document.body.clientWidth;
    var docH = document.body.clientHeight;
    var _div = document.getElementById( divname );
    
    if( !_div ) return;
    
    // Fecha um layer aberto, se houver
    closeDiv( null );
    
    // Armazena uma referência global ao DIV
    activeLayer = _div;
    
    // Define a posição do DIV
    _dvW = getDivWidth( divname );
    _dvH = getDivHeight( divname );
    
    var newX = parseInt( (docW / 2) - (_dvW / 2) );
    var newY = parseInt( (docH / 2) - (_dvH / 2) );
    
    //alert('new pos: '+ newX +' x '+ newY);
    
    activeLayer.style.left = newX + 'px';
    activeLayer.style.top  = newY + 'px';
    
    // Define seu estado
    activeLayer.style.display = 'block';
}

/** Obtém a largura de um DIV */
function getDivWidth( name )
{
    switch( name )
    {
    case 'biography': return 558;
    case 'guestbook': return 651;
    case 'photos': return 629;
    case 'clients': return 444;
    case 'contact': return 450;
    case 'message': return 440;
    case 'popGallery': return 400;
    }
}

/** Obtém a altura de um elemento HTML. */
function getDivHeight( name )
{
    switch( name )
    {
    case 'biography': return 330;
    case 'guestbook': return 330;
    case 'photos': return 195;
    case 'clients': return 330;
    case 'contact': return 330;
    case 'message': return 330;
    case 'popGallery': return 330;
    }
}

/** Inicia a comunicação com o servidor via XMLHttpRequest. */
function startComm( url, lang )
{
    if( _lock == false )
    {
        _lock = true;
        var s = "lang="+ lang;
        
        //alert(s);
        
        if( (typeof window.external == 'object') && (typeof document.all == 'object') )
        {
            _comm = new ActiveXObject("Microsoft.XMLHTTP");
        }
        else
        {
            _comm = new XMLHttpRequest();
        }
        
        if( _comm )
        {
            _comm.open('post', url);
            
            _comm.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
            _comm.onreadystatechange = onStateChange;
            _comm.send(s);
        }
    }
}

/** Intercepta o evento onReadyStateChange o objeto XMLHttpRequest. */
function onStateChange()
{
    var state = _comm.readyState;
    
    if( state < 4 )
    {
        activeLayer.innerHTML = ((state * 100) / 4) + '%';
    }
    else
    {
        _lock = false;
        
        var result = _comm.responseText.toString();
        
        //alert( result );
        activeLayer.innerHTML = result;
    }
}

/** Faz um scroll.
 * _param eID   [String]   ID do elemento html que deverá rolar.
 * _param speed [Integer]  Número que identifica a direção e velocidade da rolagem.
 *                         Se esse número for positivo, o elemento rolará para baixo.
 *                         Se for negativa, a rolagem será para cima.
 * _param height [Integer] A altura do container. Utilizado para gerenciar o scroll máximo.
 */
function scroll( eID, speed, height )
{
    //alert('obj: '+ eID +' | speed: '+ speed +' | height: '+ height);
    
    if( typeof eID == 'string' )
    {
        _scrollable = document.getElementById(eID);
        
        if( !_scrollable )
        {
            var doc = document.getElementById('visorCam').contentDocument;
            
            if( !doc )
                doc = document.getElementById('visorCam').contentWindow.document;
            
            _scrollable = doc.getElementById(eID);
            
            //alert( _scrollable.id );
        }
    }
    else
    {
        _scrollable = eID;
    }
    
    if( !_scrollable ) return;
    
    _scrollable.style.position = 'relative';
    _scrolltop = _scrollable.offsetTop;
    _scrollmax = _scrollable.offsetHeight;
    
    if( !_scrollable.style.top )
    {
        _scrollable.style.top = '0px';
    }
    
    //alert( '_scrollmax: '+_scrollmax );
    _scrollHei = height;
    
    doScroll( speed );
}

/** Handler para o timer do Scroll. */
function doScroll( dir )
{
    //alert('doScroll('+ dir +');');
    
    if( !_scrollable ) return;
    
    var _top = parseInt( _scrollable.style.top );
    var ntop = _top + dir;
    
    //document.getElementById('bioBoxLeft').innerHTML = '<img src="images/mk_bio.gif" /><br />ntop: '+ ntop;
    
    // Limite superior
    if( ntop >= 5 )
    {
        ntop = 5;
        stopScroll();
        return;
    }
    
    // Limite inferior
    // hh = 250 para os popups
    if( ntop <= -(_scrollmax - _scrollHei) )
    {
        ntop = -(_scrollmax - _scrollHei);
        stopScroll();
        return;
    }
    
    //alert( 'now: '+ _top +' | goto: '+ ntop );
    _scrollable.style.top = ntop + 'px';
    
    _scroller = setTimeout("doScroll("+dir+")", 40);
}

/** Para a rolagem de um elemento. */
function stopScroll()
{
    clearTimeout(_scroller);
    
    _scrolltop  = 0;
    _scrollmax  = 0;
    _scrollable = null;
}

/** Exibe as setas de navegação ao lado do display. */
function showNavArrows( _show, _arrows )
{
    var _flash = getMovie('mkhome');
    
    if( !_flash ) return;
    
    if( _show )
    {
        _flash.SetVariable("arrows", _arrows);
        if( _arrows == 'UP DW' )
        {
            _flash.SetVariable("maxScroll", "118");
        }
    }
    else
        _flash.SetVariable("arrows", "");
}

/** Redireciona para uma função JavaScript no elemento iframe. */
function paging( _direction )
{
    // Obtém uma referência ao iframe
    var doc = document.getElementById('visorCam').contentWindow;
    
    if( !doc )
        doc = document.getElementById('visorCam');
    
    if( !doc ) return;
    
    switch( _direction )
    {
    case 'prev': doc.prevPage(); break;
    case 'next': doc.nextPage(); break;
    }
}

/** Define a transparência de um objeto. */
function setAlpha( element, opacity )
{
    var _obj;
    var _alpha;
    
    if( typeof obj == 'string' )
        _obj = document.getElementById(element);
    else
        _obj = element;
    
    if( _obj )
    {
        _alpha = parseFloat( opacity );
        _obj.style.opacity = _alpha;
        _obj.style.filter  = 'alpha(opacity='+ parseInt( _alpha * 100 ) +')';
        
        //alert( 'opacity: '+ _obj.style.opacity +' | filter: '+ _obj.style.filter );
    }
}

/** Obtém uma referência ao objeto Flash. */
function getMovie( movieName )
{
    if( navigator.appName.indexOf("Microsoft") != -1 )
        return window[movieName];
    else
        return document[movieName];
}

/** Envia uma mensagem para o flash executar um som de efeito. */
function soundFX( sndName )
{
    var _flash = getMovie('mkhome');
    
    //alert('Flash: '+ _flash);
    
    if( !_flash ) return;
    
    switch( sndName )
    {
    case 'click':
        _flash.SetVariable("soundFX", true);
        break;
    }
}

/** Obtém um arquivo e faz o redirecionamento para o script de download. */
function _get( filepath )
{
    //alert( filepath );
    window.open('download.php?f='+ filepath);
}
