function ajax(target, url, obj) {
	this.request_type = 'GET';
	this.request = request;
	this.set_query_string = set_query_string;
	this.evalScript = eval_script;
	this.set_http_request = set_http_request;

	this.target = target;
	this.url = url;
	this.query_string = '';
	if(isObject(obj)) {
		this.request_type = 'POST';
		this.set_query_string(obj);
	}
}

function set_query_string(obj) {
    var query_string = '';
    for(var i=0; i<obj.elements.length; i++) {
        if(i>0) query_string = query_string + '&';
        if(obj.elements[i].type!='checkbox') {
            query_string = query_string + encodeURIComponent(obj.elements[i].name) + '=' + encodeURIComponent(obj.elements[i].value);
        } else {
            if(obj.elements[i].checked) {
                query_string = query_string + encodeURIComponent(obj.elements[i].name) + '=' + encodeURIComponent(obj.elements[i].value);
            }
        }
    }
    if(i>0) {
    	query_string = query_string + '&';
    }
    query_string = query_string + 'ajax=true';
    this.query_string = query_string;
}

function request() {
	var http_request, target;
	http_request = this.set_http_request();
    target = this.target;
	http_request.onreadystatechange = function() {
    	if (http_request.readyState == 4) {
	    	result = http_request.responseText;
        	document.getElementById(target).innerHTML = result;
        	eval_script(result);
        	if(document.styleSheets[0].cssRules) {
        		document.body.style.cursor = "default";
                if(document.styleSheets[0].cssRules[0].style.cursor) {
                    document.styleSheets[0].cssRules[0].style.cursor = top.cursorStyle;
                }
            }
            if(document.styleSheets[0].rules) {
                document.body.style.cursor = "default";
                document.styleSheets[0].rules[0].style.cursor = top.cursorStyle;
            }
        }
    }
    if(this.request_type == 'GET') {
	    this.query_string = (this.query_string.length > 0)?'?' + this.query_string:'';
    	http_request.open(this.request_type, this.url + this.query_string, true);
    	http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    	http_request.setRequestHeader("Connection", "close");
	    http_request.send(null);
    } else {
    	http_request.open(this.request_type, this.url, true);
    	http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	    http_request.setRequestHeader("Content-length", this.query_string.length);
    	http_request.setRequestHeader("Connection", "close");
	    http_request.send(this.query_string);
    }
}

function set_http_request() {
    if (window.XMLHttpRequest) {
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/html');
        }
    } else if (window.ActiveXObject) {
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    if (!http_request) {
        alert('Cannot create XMLHTTP instance');
        return false;
    }
    return http_request;
}

function eval_script(scripts) {
    try {
        if(scripts != '') {
            var script = "";
            scripts = scripts.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function() { if (scripts !== null) script += arguments[1] + '\n'; return '';});
            if(script) (window.execScript) ? window.execScript(script) : window.setTimeout(script, 0);
        }
        return false;
    }
    catch(e) {
        alert(e);
    }
    return true;
}