/*
 * EASY AJAX CLASS
 * mafin@4internet.cz
 * 2007-03-19
 *
 */
function EasyAjax(method, request, url) {
    //private
    var xmlHttp = null;

    var onSuccessCbF = '';
    var onSuccessMth = '';
    var onFailureCbF = '';
    var onLoadingCbF = '';
    var onLoadedCbF = '';

    //private
    function init() {
        if (window.XMLHttpRequest) {
            xmlHttp = new XMLHttpRequest();
        }
        else if (window.ActiveXObject) {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }

    this.doRequest = function() {
        init();
        xmlHttp.onreadystatechange = getResponse;

        switch (method) {
            case "GET" :
                request += "&gettime="+new Date().getTime();
                xmlHttp.open("GET", url+"?"+request, true);
                xmlHttp.send(null);
                break;

            case "POST" :
                xmlHttp.open("POST", url, true);
                xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                xmlHttp.send(request);
                break;

            default :
                break;
        }
    }

    function getResponse() {
        switch (xmlHttp.readyState) {
            case 1:
                _onLoading();
                break;

            case 2:
                _onLoaded();
                break;

            case 4 :
                if (xmlHttp.status == 200) {
                    _onSuccess();
                }
                else {
                    _onFailure();
                }
                break;
            default :
                break;
        }
    }

    function getXmlResponse() {
        return xmlHttp.responseXML;
    }

    function getTextResponse() {
        return xmlHttp.responseText;
    }

    function _onSuccess() {
        if (onSuccessCbF == '') {
            delete xmlHttp;
            return false;
        }
        var output = '';

        switch(onSuccessMth) {
            default:
            case "text" :
                output = getTextResponse();
                break;
            case "xml" :
                output = getXmlResponse()
                break;
        }
        eval(onSuccessCbF+"(output)");
        delete xmlHttp;
        return true;
    }

    function _onFailure() {
        var output = getTextResponse();

        if (onFailureCbF == '') {
            alert(output);
        }
        else {
            eval(onFailureCbF+"(output)");
        }
        delete xmlHttp;
        return true;
    }

    function _onLoading() {
        if (onLoadingCbF == '') {
            delete xmlHttp;
            return false;
        }
        eval(onLoadingCbF+"()");
        delete xmlHttp;
        return true;
    }

    function _onLoaded() {
        if (onLoadedCbF == '') {
            delete xmlHttp;
            return false;
        }
        eval(onLoadedCbF+"()");
        delete xmlHttp;
        return true;
    }

    this.onSuccess = function(callback_fce, method) {
        onSuccessCbF = callback_fce;
        onSuccessMth = method;
    }

    this.onFailure = function(callback_fce) {
        onFailureCbF = callback_fce;
    }

    this.onLoading = function(callback_fce) {
        onLoadingCbF = callback_fce;
    }

    this.onLoaded = function(callback_fce) {
        onLoadedCbF = callback_fce;
    }
}
