/** 
* Arquivo de scripts utilizados para fazer carregamento do conteúdo de páginas.
* As as requisições são feitas em AJAX, o envio é por POST, e o formato de entrada é TEXT.
* @author Alexandre Franco Marquez <afm.com@gmail.com> 
* @version 1.0 
* @copyright Copyright © 2007, Alexandre Franco Marquez. 
* @uses js/scripts.js
* @uses js/ajax.js
*/


var idElemRequestPage = '';
var loadedobjects     = '';
var oldClassNameElem  = '';
var execFunctionName  = '';

verifLoadedObjs();


function loadPage( fileRequest, parameters, idElem, waitAnimation, functionName ) {
    idElemRequestPage = idElem;
    sendDataPost( fileRequest, 'ajax_loading=1&'+parameters, 'requestPage' );
    if ( (waitAnimation != null) && waitAnimation ) {
        waitPage( idElem );
    }
    if ( functionName != null ) {
        execFunctionName = functionName;
    } else {
        execFunctionName = '';
    }
    return false;
}

function requestPage() {
    verifRequestPage( idElemRequestPage );
}

function verifRequestPage( idElem ) {
    if ( idElem == null || idElem.length <= 0 ) {
        return;
    }
    var text = requestDataText();
    if ( text.length <= 0 ) {
        return;
    }
    setPage( idElem, true, text );
    //scroll_by_top();
    if ( execFunctionName != '' ) {
        eval(execFunctionName);
    }
}

function waitPage( idElem ) {
    var elem = document.getElementById( idElem );
    if ( elem == null ) {
        return;
    }
    elem.style.position = 'relative';
    oldClassNameElem    = elem.className;
    var elemWait            = document.createElement('div');
    elemWait.className      = 'ajax_loading';
    elemWait.style.position = 'absolute';
    elemWait.style.top      = 0;
    elemWait.style.left     = 0;
    elemWait.style.width    = '100%'; //getOffsetDimElem(elem).width;
    elemWait.style.height   = '100%'; //getOffsetDimElem(elem).height;
    elemWait.innerHTML      = '<div class="animacao"></div>';
    elem.appendChild( elemWait );
}

function clearPage( idElem ) {
    var elem = document.getElementById( idElem );
    if ( elem == null ) {
        return;
    }
    elem.innerHTML = '';
    //showPage( idElem, false );
}

function showPage( idElem, show ) {
    var elem = document.getElementById( idElem );
    if ( elem == null ) {
        return;
    }
    elem.className = oldClassNameElem;
    var styleDisplay = ( show ? 'block' : 'none');
    elem.style.display = styleDisplay;
}

function addTextPage( idElem, strText ) {
    var elem = document.getElementById( idElem );
    if ( elem == null ) {
        return;
    }
    showPage( idElem, true );
    strText = ( strText == null ) ? '' : strText;
    elem.innerHTML += strText;
}

function setPage( idElem, show, strText ) {
    strText = '<span style="display: none;">&nbsp;</span>'+strText;
    clearPage( idElem );
    addTextPage( idElem, strText );
    showPage( idElem, true );
    loadObjs( idElem );
}


/** 
* Verifica os objetos (.js .css) já carregados na página
* @author Alexandre Franco Marquez <afm.com@gmail.com> 
* @version 1.0 
*/
function verifLoadedObjs() {
    var textScript;
    if ( !document.getElementById )
        return;
    var elemScripts = document.getElementsByTagName("script");
    for (var i=0; i<elemScripts.length; i++)  {
        loadedobjects += elemScripts.item(i).getAttribute("src") + ", ";
    }
    var elemCss = document.getElementsByTagName("link");
    for (var i=0; i<elemCss.length; i++)  {
        loadedobjects += elemCss.item(i).getAttribute("href") + ", ";
    }
}


/** 
* Carrega JavaScript's e CSS's escritos dentro das páginas carregadas
* @author Alexandre Franco Marquez <afm.com@gmail.com> 
* @version 1.0 
*/
function loadObjs( idElem ) {
    loadCss( idElem );
    loadScripts( idElem );
}


/** 
* Carrega JavaScript's escritos dentro das páginas carregadas
* @author Alexandre Franco Marquez <afm.com@gmail.com> 
* @version 1.0 
*/
function loadScripts( idElem ) {
    var textScript;
    if ( !document.getElementById )
        return;
    var elem = document.getElementById( idElem );
    var elemScripts = elem.getElementsByTagName("script");
    for (var i=0; i<elemScripts.length; i++)  {
        textScript = elemScripts.item(i).innerHTML;
        textScript.replace(/^\s*/, "").replace(/\s*$/, "");
        if ( textScript.length > 0 ) {
            //eval(textScript);
            fileref = document.createElement( "script" );
            fileref.setAttribute( "type", "text/javascript" );
            fileref.text  = textScript;
            document.getElementsByTagName( "head" ).item( 0 ).appendChild( fileref );
            //document.body.appendChild( fileref );
        } else {
            fileScript = elemScripts.item(i).getAttribute("src");
            if ( loadedobjects.indexOf(fileScript) == -1 ) {
                loadExternalObjs( fileScript );
            }
        }
    }
    
}


/** 
* Carrega CSS's inseridos dentro das páginas carregadas
* @author Alexandre Franco Marquez <afm.com@gmail.com> 
* @version 1.0 
*/
function loadCss( idElem ) {
    if ( !document.getElementById )
        return;
    var elem = document.getElementById( idElem );
    var elemCss = elem.getElementsByTagName("link");
    for (var i=0; i<elemCss.length; i++)  {
        fileCss = elemCss.item(i).getAttribute("href");
        if ( loadedobjects.indexOf(fileCss) == -1 ) {
            loadExternalObjs( fileCss );
        }
    }
}


/** 
* Carrega objetos externos, como: .css, .js
* @author Alexandre Franco Marquez <afm.com@gmail.com> 
* @version 1.0 
*/
function loadExternalObjs() {
    if ( !document.getElementById )
        return;
    for ( i = 0; i < arguments.length; i++ ) {
        var file = arguments[i];
        var fileref = "";
        if ( loadedobjects.indexOf(file) == -1 ) {                  // Verifica se o arquivo já foi carregado
            if ( file.indexOf(".js") != -1 ) {                      // Arquivos JavaScript
                fileref = document.createElement( 'script' );
                fileref.setAttribute( "type", "text/javascript" );
                fileref.setAttribute( "src", file );
            } else
            if ( file.indexOf(".css") != -1 ) {                     // Arquivos CSS
                fileref = document.createElement( "link" );
                fileref.setAttribute( "rel", "stylesheet" );
                fileref.setAttribute( "type", "text/css" );
                fileref.setAttribute( "href", file );
            }
        }
        if ( fileref != "" ) {
            document.getElementsByTagName( "head" ).item( 0 ).appendChild( fileref );
            loadedobjects += file + ", ";                            // adiciona o nome do arquivo na variável "loadedobjects" para posteriormente não carregar arquivos repetidos
        }
    }
}
