var ajaxParams={
	method:'GET',
	url:'',
	data:'',
	target:'',
	tLoad:'',
	tLoadCl:'loader',
	tLoadSavedContent:'',
	tError:'',
	tErrorCl:'error',
	functionSuccess:'',
	functionError:'',
	timeOut:5000,
	req:null,
	reqTimeout:null,
	async:true
}

function emptyAjaxParams() {
	var empty={
		method:'GET',
		url:'',
		data:'',
		target:'',
		tLoad:'',
		tLoadCl:'loader',
		tLoadSavedContent:'',
		tError:'',
		tErrorCl:'error',
		functionSuccess:'',
		functionError:'',
		timeOut:5000,
		req:null,
		reqTimeout:null,
		async:true
	}
	ajaxParams=empty;
}

function loadXMLDoc(){
	if(window.XMLHttpRequest){
		try{
			ajaxParams['req']=new XMLHttpRequest();
		}catch(e){}
	}else if(window.ActiveXObject){
		try{
			ajaxParams['req']=new ActiveXObject('Msxml2.XMLHTTP');
		}catch(e){
			try{
				ajaxParams['req']=new ActiveXObject('Microsoft.XMLHTTP');
			} catch(e){}
		}
	}
    if(ajaxParams['req']){
		ajaxParams['req'].onreadystatechange=processReqChange;
		ajaxParams['req'].open("GET",ajaxParams['url']+'?hash='+Math.random()+'&'+ajaxParams['data'],ajaxParams['async']);
		if(!ajaxParams['async'])
			processReqChange();
		ajaxParams['req'].send(null);
		ajaxParams['reqTimeout']=setTimeout("ajaxParams['req'].abort();",ajaxParams['timeOut']);
    }else{
		alert("Браузер не поддерживает AJAX");
	}
}

function processReqChange() {
    if (ajaxParams['req'].readyState==4) {
		clearTimeout(ajaxParams['reqTimeout']);
        if (ajaxParams['req'].status==200) {
			var result=eval('('+ajaxParams['req'].responseText+')');
			if(ajaxParams['tLoadSavedContent'])
				document.getElementById(ajaxParams['tLoad']).innerHTML=ajaxParams['tLoadSavedContent'];
			if(result.error) {
				document.getElementById(ajaxParams['tError']).innerHTML='<div class="align_center_to_left"><div class="align_center_to_right '+ajaxParams['tErrorCl']+'">'+result.errorHtml+'</div></div>';
				if(ajaxParams['functionError']!='')
					call_user_func_array(ajaxParams['functionError'],[]);
			}
			else {
				if(ajaxParams['functionSuccess']=='')
					document.getElementById(ajaxParams['target']).innerHTML=result.html;
				else {
					for(var resItem in result)
						result[resItem]=htmlspecialchars(result[resItem]);
					call_user_func_array(ajaxParams['functionSuccess'],[result]);
				}
			}
		}
        else
            alert("Не удалось получить данные:\n"+ajaxParams['req'].statusText);
    }  
}

function ajax(options){
	emptyAjaxParams();
	ajaxParams=$.extend({},ajaxParams,options);
	if(!ajaxParams['url']) {
		alert('The request can`t be executed. It is necessary to specify `url`');
		return false;
	}
	if(!ajaxParams['tLoad'])
		ajaxParams['tLoad']=ajaxParams['target'];
	if(!ajaxParams['tError'])
		ajaxParams['tError']=ajaxParams['target'];
	ajaxParams['tLoadSavedContent']=document.getElementById(ajaxParams['tLoad']).innerHTML;
	document.getElementById(ajaxParams['tLoad']).innerHTML='<div class="'+ajaxParams['tLoadCl']+'">&nbsp;</div>';
	loadXMLDoc();
}