(function () {
	var i = 0;
	function toArray(pseudoArray) {
		var result = [];
		for (i = 0; i < pseudoArray.length; i++) {
			result.push(pseudoArray[i]);
		}
		return result;
	}

	Function.prototype.bind = function (object) {
		var method = this;
		var oldArguments = toArray(arguments).slice(1);
		return function (argument) {
			if (argument == nullObject) {
				method = null;
				oldArguments = null;
			} else if (method == null) {
				throw "Attempt to invoke destructed method reference.";
			} else {
				var newArguments = toArray(arguments);
				return method.apply(object, oldArguments.concat(newArguments));
			}
			return null;
		};
	};

	Function.prototype.bindEventListener = function (object) {
		var method = this;
		var oldArguments = toArray(arguments).slice(1);
		return function (event) {
			return method.apply(object, event || window.event, oldArguments);
		};
	};
})();

function nullObject(){

}

function updater(){
	this.xmlhttp =createXMLHTTPObject();
}


updater.prototype.sendARequest = function (url, callback, postData) {
    var req = createXMLHTTPObject();
    if (!req) {
        return;
    }
    var method = "";
    if (postData) {
        method = "POST";
    } else {
        method = "GET";
        url += "&" + Math.random(10);
    }
    req.open(method, url, true);
    req.setRequestHeader('User-Agent', 'XMLHTTP/1.0');
    if (postData) {
        req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    }

    req.onreadystatechange = function () {
        if (req.readyState != 4) {
            return;
        }
        if (req.status != 200 && req.status != 304) {
            return;
        }
        if (callback) {
            callback(req);
        }
    };
    if (req.readyState == 4) {
        return;
    }
    req.send(postData);
};



var XMLHttpFactories = [
	function () { return new XMLHttpRequest(); },
	function () { return new ActiveXObject("Msxml2.XMLHTTP"); },
	function () { return new ActiveXObject("Msxml3.XMLHTTP"); },
	function () { return new ActiveXObject("Microsoft.XMLHTTP"); }
];

function createXMLHTTPObject() {
	var i = 0;
	var xmlhttp = false;
	for (i=0;i<XMLHttpFactories.length;i++) {
		try {
			xmlhttp = XMLHttpFactories[i]();
		}
		catch (e) {
			continue;
		}
		break;
	}
	return xmlhttp;
}





