HTTP = function() {
	if (typeof window.ActiveXObject != 'undefined' ) {
		this.req = new ActiveXObject("Microsoft.XMLHTTP") 
	} else {
		this.req = new XMLHttpRequest() 
	}

this.request = function(url, method, data, headers, handler) {
	method = method ? method:'get'
	data = data ? data:''
	var url_add = '_ajax='+(new Date().getTime())
	url = url + (url.indexOf('?') == -1 ? '?':'&') + url_add 
	this.req.open(method, url, true)
	try {
		for(var i=0;i<headers.length; i++) this.req.setRequestHeader(headers[i][0], headers[i][1])
	} catch(e) {}
	
	var thishttp = this
	var handler = handler 
	this.req.onreadystatechange = function() {
		if (thishttp.req.readyState == 4) {
			if (thishttp.req.status == 200 && handler) handler(thishttp) 
	
		}
	} 
	this.req.send(data)
}

}

function ajax_link(sender, handler) {
	var http = new HTTP()
	http.request(sender.href, 'get', '', '', handler)
	return http
}

function ajax_form(sender, handler) {
	var http = new HTTP()
	var headers = []
	var data = multipart_form(sender, headers)
	http.request(sender.action, 'post', data, headers, handler) 
	return http
}

function multipart_form(sender, headers) {
	var boundaryString = 'kogdayabilmalenkimtochastopilvoackaeaodyiotlgilobmdlnkvoikmpatushackaeaodyiotlgilobmdlnkvoikmpatush'
	var boundary = '--' + boundaryString
	headers[0] = ["Content-type", 'multipart/form-data; boundary="'+boundaryString+'"']

	var rb = [] 
	var obj=sender.elements
	rb[rb.length] = boundary 
	for(var i=0;i<obj.length;i++) {
		if (! obj[i].name) continue

		var value = obj[i].value
		if (obj[i].type == 'checkbox' && !obj[i].checked) var value=''

		rb[rb.length] = 'Content-Disposition: form-data; name="' + obj[i].name + '"'
		rb[rb.length] = ''
		rb[rb.length] = value
		rb[rb.length] = boundary 
	}
	var rb = rb.join('\n')
	headers[1] = ["Content-length", rb.length]
	headers[2] = ["Connection", "close"]
	return rb 
}

function window_location_reload() {
	window.location.href = window.location.href
}
