Function.prototype.bind = function(object) {
    var method = this
    return function() {
        return method.apply(object, arguments) 
    }
}

function vpa_create_event(DOMobj,event_name)
{
	if (typeof(DOMobj.fireEvent)=='function' || typeof(DOMobj.fireEvent)=='object')
    {
        var evt = document.createEventObject();
        DOMobj.fireEvent('on'+event_name, evt);
    }
    else
    {
        var evt = document.createEvent("HTMLEvents");
        //var evt = document.createEvent("MouseEvents");
        evt.initEvent(event_name, true, false);
        DOMobj.dispatchEvent(evt);
    }
}

function VPA_AJAX()
{
    this.responseText='';
    this.http_request=null;
    this.func=null; // func for backlink action (this function will be exec when XML data is loaded)
    
    this.makeRequest=function (url,func) {
        this.http_request = false;
        this.func=func;
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            this.http_request = new XMLHttpRequest();
            if (this.http_request.overrideMimeType) {
                this.http_request.overrideMimeType('text/xml');
                // See note below about this line
            }
        } else if (window.ActiveXObject) { // IE
            try {
                this.http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    this.http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!this.http_request) {
            alert('Cannot create an XMLHTTP instance. You shutdown ActiveX ?\n Compatibility: IE 5.0, Mozilla 1.7, Firefox 1.0, Opera 8.0');
            return false;
        }
        this.http_request.onreadystatechange = this.alertContents;
        this.http_request.open('GET', url, true);
        this.http_request.send(null);
    }
    
    this.makeRequestPost=function (url,func,data) {
        this.http_request = false;
        this.func=func;
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            this.http_request = new XMLHttpRequest();
            if (this.http_request.overrideMimeType) {
                this.http_request.overrideMimeType('text/xml');
                // See note below about this line
            }
        } else if (window.ActiveXObject) { // IE
            try {
                this.http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    this.http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!this.http_request) {
            alert('Cannot create an XMLHTTP instance. You shutdown ActiveX ?\n Compatibility: IE 5.0, Mozilla 1.7, Firefox 1.0, Opera 8.0');
            return false;
        }
        this.http_request.onreadystatechange = this.alertContents;
        this.http_request.open('POST', url, true);
        this.http_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        this.http_request.send(data);
    }

    this.alertContents=function (e) {
        var ajax=this;
        var http_request=this.http_request;
        if (http_request.readyState == 4) {
            if (http_request.status == 200 || http_request.status == 500) {
                ajax.responseText=http_request.responseText;
                if(http_request.responseXML.documentElement == null){
                    try
                    {
                        http_request.responseXML.loadXML(http_request.responseText)
                    } catch (e) {}
                }
                window[ajax.func](http_request.responseText,http_request.responseXML);
            } else {
                window.status='There was a problem with the request.';
            }
        }
    }.bind(this);
}