function Ajax(url, callbackfunction, async){
	//var m_request = navigator.appName=="Microsoft Internet Explorer"?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();
	var m_request = createRequestObject();
	var m_callbackfunction = callbackfunction;
	this.request = m_request;
	this.url = url;
	this.callbackfunction = m_callbackfunction;
	this.errorfunction = null;
	this.error = null;
	this.async = async;
	this.send = function(){
		try{
			if( this.async == null ) {this.async = true};
			this.request.open("get", encodeURI(this.url + "&rnd=" + Math.random()), this.async);
			if(this.callbackfunction != null){
				this.request.onreadystatechange = function(){AjaxOnStateChange(m_request, m_callbackfunction);};
			}
			this.request.send(null);
			return true;
		}catch(err){
			this.error = err;
			if(this.errorfunction!=null){eval(this.errorfunction)};
			return false;
		}
	};
}

function AjaxOnStateChange(request, callbackfunction){
	if(request.readyState == 4){
		eval(callbackfunction);
	}
}


function createRequestObject() {
	var ro;
	if(navigator.appName == "Microsoft Internet Explorer"){
		ro = new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		ro = new XMLHttpRequest();
	}
	return ro;
}

/* Obsolete. Use Ajax javascript object instead. */
var http = null;
function sendReq(url, callbackfunction, async) {
	try{
		if (http==null) {http = createRequestObject()};
		if( async == null ) {async = true};
		
		http.open('get', encodeURI(url + '&rnd=' + Math.random()), async);
		if(callbackfunction != null){
			http.onreadystatechange = function () {
				if (http.readyState == 4) {
					eval(callbackfunction);
				}
			}; 
		}
		http.send(null);
		return true;
	}catch(err){
		return false;
	}
}
function ajaxGetAttributeForQueryString(obj,attName){
	var val=obj.getAttribute(attName);
	if(val!=null&&val!=''){
		return ' '+attName+'='+val;
	}
	return '';
}

function ajaxReplaceElement(id, url, fn){
	var obj=$(id);
	var att='';
	
	att+=ajaxGetAttributeForQueryString(obj,'id');
	att+=ajaxGetAttributeForQueryString(obj,'name');
	att+=ajaxGetAttributeForQueryString(obj,'class');
	att+=ajaxGetAttributeForQueryString(obj,'style');
	att+=ajaxGetAttributeForQueryString(obj,'tabindex');
	
	$J.ajax({
		type: "GET"
		, url: url+'&att='+ escape(att)
		, dataType: "html"
		, async: true
		, success: function(html){$J('#'+id).replaceWith(html);if(eval(fn)!=null){fn();};}
	});
}

function ajaxReplaceElementContent(id, url, fn){
	var obj=$(id);
	var att='';

	att+=ajaxGetAttributeForQueryString(obj,'id');
	att+=ajaxGetAttributeForQueryString(obj,'name');
	att+=ajaxGetAttributeForQueryString(obj,'class');
	att+=ajaxGetAttributeForQueryString(obj,'style');
	att+=ajaxGetAttributeForQueryString(obj,'tabindex');
	
	$J.ajax({
		type: "GET"
		, url: url+'&att='+ escape(att)
		, dataType: "html"
		, async: true
		, success: function(html) {
						$J('#'+id).empty().append(html);
						if(eval(fn)!=null){
							fn();
						};
					}
	});
}

function ajaxReplaceParentElementContent(id, url, fn){
	var obj = $J("#"+id);
	var att = '';

	/*att+=ajaxGetAttributeForQueryString(obj,'id');
	att+=ajaxGetAttributeForQueryString(obj,'name');
	att+=ajaxGetAttributeForQueryString(obj,'class');
	att+=ajaxGetAttributeForQueryString(obj,'style');
	att+=ajaxGetAttributeForQueryString(obj,'tabindex');*/
	
	$J.ajax({
		type: "GET"
		, url: url+'&att='+ escape(att)
		, dataType: "html"
		, async: true
		, success: function(html) {
						$J('#'+id).parent().empty().append(html);
						if(eval(fn)!=null){
							fn();
						};
					}
	});
}

function ajaxUpdateSelect(id,url,postUpdateFn){
	$J('#'+id).empty();
	var obj=$(id);
	$J.ajax({
		type: "GET"
		, url: url
		, dataType: "html"
		, async: true
		, success: function(html){
			$J('#'+id).empty().append(html);
			if(obj.options.length > 0){obj.disabled=false;}
			if(eval(postUpdateFn)!=null){postUpdateFn(id);}
		}
	});
}