/**
 * @class window
 */

/**
 * Retorna um objeto para requisições Ajax compaível com o navegador do usuário
 *
 * @method getAjax
 * @static
 * @memberOf window#
 * @return {Ajax}
 */
function getAJAX() {
    var xmlHttp = null;
    try {
        // Firefox, Opera 8.0+, Safari
        xmlHttp = new XMLHttpRequest();
    }
    catch (e){
        // Internet Explorer
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    return xmlHttp;
}

/**
 * Extrai o script a ser executado em modo Ajax de um texto/código
 *
 * @method extrairScriptModoAjax
 * @static
 * @memberOf window#
 * @param  {String} texto Código contendo o JavaScript a ser executado em modo Ajax
 */
function extrairScriptModoAjax(texto){
    // inicializa o inicio ><
    var ini = 0;
    // loop enquanto achar um script
    while (ini != -1) {
        // procura uma tag de script class='modoajax'
        ini = texto.indexOf("class='modoajax'", ini);
        // se encontrar
        if (ini >= 0){
            // define o inicio para depois do fechamento dessa tag
            ini = texto.indexOf('>', ini) + 1;
            // procura o final do script
            var fim = texto.indexOf('</script', ini);
            codigo = texto.substring(ini,fim);
            // executa o script
            //eval(codigo);
            //Para executar funcoes comente a linha acima 'eval(codigo)' e descomente as abaixo                
            novo = document.createElement('script');
            novo.text = codigo;
            document.body.appendChild(novo);                
        }
    }
}

/**
 * Executa uma requisição Ajax para a url passando os dados
 *
 * @method executarAjax
 * @static
 * @memberOf window#
 * @param  {String} url   URL para qual os dados serão enviados via Ajax
 * @param  {Mix} dados Dados que serão enviados e processados
 */
function executarAjax(url, dados) {
    var xmlHttp = getAJAX();

    xmlHttp.onreadystatechange = function(){
    if (xmlHttp.readyState == 4){
            if (xmlHttp.status == 200){
//                var texto = unescape(xmlHttp.responseText.replace(/\+/g, " "));
                var texto = unescape(xmlHttp.responseText);
                extrairScriptModoAjax(texto);
            }
            else {
                alert("Erro! Status: " + xmlHttp.status + "\nPossível problema de comunicação.\nVerifique sua conexão.");
            }
        }
    }

    //Se dados não foram passados, enviar por GET, com os dados na URL
    if(typeof dados === 'undefined') {
        xmlHttp.open("GET", url, true);
        xmlHttp.send();
    }
    //Caso contrário, enviar os dados pelo cabeçalho por post
    else {
        xmlHttp.open("POST", url, true);
        xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xmlHttp.send(dados);
    }
}