function AJAX(custom_response) {
    if (custom_response) this.custom_response = true;
    else this.custom_response = false;
    this.onError = function(error) {//alert(error);
	};

    var ajaxObject = function() {
        try{return new XMLHttpRequest();}catch(ex){};
        try{return new ActiveXObject("Microsoft.XMLHTTP");}catch(ex){};
        try{return new SOAPCall();}
        catch(ex){alert(ln_not_support_AJAX); return false};
    }

    function m_trim(str) {
	    var	str = str.replace(/^\s\s*/, ''),ws = /\s/,i = str.length;
	    while (ws.test(str.charAt(--i)));
    	return str.slice(0, i + 1);
    }
    function m_randomText(len){
        var available_chars = [];
        for(var i = 48; i < 58; i++) available_chars[available_chars.length] = String.fromCharCode(i);
        for(var i = 65; i < 91; i++) available_chars[available_chars.length] = String.fromCharCode(i);
        for(var i = 97; i < 123; i++)available_chars[available_chars.length] = String.fromCharCode(i); 
        if(0==available_chars.length) return false;
        var result="";   
        for(var j=0; j<len; j++){
            var ch=available_chars[Math.floor(Math.random()*available_chars.length)];
            result+=ch;
        }
        return result;
    }

    this.callPage = function(url, callbackFunction, method, args, async) {
        try{
            var ao = ajaxObject();
            ao.onreadystatechange = function() {
                if (ao.readyState == 4 || ao.readyState == "complete") {
                    try {
                        
                        if (ao.status === 200) {
                            var rPage = m_trim(ao.responseText.substring(0,30));
                            var rAction = m_trim(ao.responseText.substring(30,60));
                            var rText = ao.responseText.substring(60, ao.responseText.length);
                            callbackFunction(rPage, rAction, rText);
                        } 
						/*else if (ao.status === 404) alert (ln_dot_found_URL_for_AJAX);
                        else if (ao.status == 403)  alert(ln_access_denided_AJAX);
                        else alert(ln_bad_AJAX_response + ao.status);
						*/

                    } catch (e) {
                        /*alert(e.description);*/
                    }
                }
            }
            
            if (!method) method = "GET";
            if (!args) args = null;
            if (async == null) async = true;
            var re=/\?/g
            if (re.test(url)) url += "&"; 
            url += "&rnd12werq=" + m_randomText(20);
            
            if (method == "POST") ao.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    
            ao.open(method, url, async);
            ao.send(args);
        } catch(ex) {
            this.onError(ex);
        }
    }
}


