/*

***************************************
*           Wilker Ajax API           *
*                                     *
* Criador: Wilker Lúcio da Silva      *
* Ultima Modificação: 03/02/2006      *
* Descrição: API para simplificar     *
*            o uso de Ajax            *
***************************************

*/

var Ajax = {
    //metodo de inicializacao do Ajax
    init: function() {
        var req;
        
        try {
            //tenta carregar o Ajax no Internet Explorer
            req = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
            try {
                //segunda tentativa para o Internet Explorer
                req = new ActiveXObject("Microsoft.XMLHTTP");
            } catch(ex) {
                try {
                    //tenta carregar o Ajax no Mozilla / Netscape
                    req = new XMLHttpRequest();
                } catch(exc) {
                    req = null;
                }
            }
        }
        
        return req;
    },
    
    //metodo para abrir requisicao ao servidor e enviar o retorno para uma funcao de callback
    open: function(pag) {
        var ajax = Ajax.init();
        
        if(ajax) {
            var openArgs = arguments[1];
            
            if(openArgs && typeof openArgs == 'object') {
                var sendCont = openArgs.post;
                var cbArgs = openArgs.args;
                var errorHandle = openArgs.error;
                var cb = openArgs.callback;
                
                if(typeof cbArgs == 'undefined')
                    cbArgs = null;
                
                if(typeof errorHandle != 'function')
                    errorHandle = Ajax.defaultError;
                    
                
                if(typeof cb != 'function')
                    cb = null;
            } else {
                var cb = openArgs;
                var sendCont = arguments[2] ? arguments[2] : null;
                var cbArgs = arguments[3] ? arguments[3] : null;
                var errorHandle = typeof arguments[4] == 'function' ? arguments[4] : Ajax.defaultError;
            }
            
            if(sendCont) {
                ajax.open("POST", pag, true);
                ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            } else {
                ajax.open("GET", pag, true);
            }
            
            ajax.onreadystatechange = function() {
                if(ajax.readyState == 4) {
                    if(ajax.status == 200) {
                        var resp = ajax.responseText;
                        if(!resp) {
                            if(typeof cb == 'function')
                                cb(null, cbArgs);
                            
                            return false;
                        }
                        
                        var st = resp.charAt(0);
                        var txt = resp.substring(2);
                        
                        if(st == '+') {
                            if(typeof cb == 'function')
                                cb(txt, cbArgs);
                        } else if(st == '-') {
                            errorHandle(txt, false, cbArgs);
                            return false;
                        } else {
                            errorHandle(resp, true, cbArgs);
                            return false;
                        }
                    } else {
                        errorHandle(ajax.statusText, true, cbArgs);
                        return false;
                    }
                }
            }
            
            ajax.send(sendCont);
        }
    },
    
    //metodo para enviar formularios HTML
    send: function(f) {
        var sendArgs = arguments[1];
        
        if(sendArgs && typeof sendArgs == 'object') {
            var cbArgs = sendArgs.callback;
            var errorHandle = sendArgs.error;
        } else {
            var cb = sendArgs;
            var cbArgs = arguments[2] ? arguments[2] : null;
            var errorHandle = typeof arguments[3] == 'function' ? arguments[3] : null;
        }
        
        var acao = f.action;
        var metodo = f.method;
        
        if(!acao) {
            alert("Erro: o valor action do formulario não foi definido");
            return false;
        }
        
        if(!metodo) {
            alert("Erro: o método do formulário não foi definido");
            return false;
        } else
            metodo = metodo.toLowerCase();
        
        var send = new Array();
        var elementos = f.elements;
        
        for(var i = 0; i < elementos.length; i++) {
            var e = elementos[i];
            if(!e.name)
                continue;
            if(e.disabled)
                continue;
            
            var tipo = e.type.toLowerCase();
            
            if(tipo != "checkbox" && tipo != "radio")
                send[send.length] = e.name + "=" + escape(e.value);
            else if(e.checked)
                send[send.length] = e.name + "=" + escape(e.value);
        }
        
        send = send.join("&");
        
        if(metodo == "post")
            Ajax.open(acao, {callback: cb, post: send, args: cbArgs, error: errorHandle});
        else
            Ajax.open(acao + "?" + send, {callback: cb, args: cbArgs, error: errorHandle});
        
        return false;
    },
    
    //metodo gerenciador de erros padrao da API
    defaultError: function(msg, fatal) {
        if(!fatal) {
            alert("Erro: " + msg);
        } else {
            alert("Erro fatal: " + msg);
        }
    }
}
function get(e) {
  return document.getElementById(e);
}
