ARR_AJAX_OBJ        = new Array();
var prcs_block      = null;

function fnc_ajax(AJAX,obj_name){
	//Переменная, которая показывет номер ajax соединения
	AJAX.obj_num = null;

	//Создадим два события, для загрузки и для ошибки
	AJAX.onload  = null;
	AJAX.onerror = null;

	//Так же нам понадобятся два масива для хранения GET и POST параметров
	AJAX.GET  = new Array();
	AJAX.POST = new Array();

	//Эта переменная будет хранить ID элемента в котором нужно обновить данные
	AJAX.element_id_reload = null;

	//Эта переменная будет хранить url страници с которой запустили ajax
	AJAX.page_url = null;

	//Эта переменная будет хранить метод обновления (перезаписать=0; дописать=1)
	AJAX.rewrite = null;

	//// Эта переменная будет показывает что ajax остановлен
	AJAX.stop_end = null;

	//Эта переменная будет хранить куда перейти после выполнения ajax
	AJAX.goto_link = null;

	//Эта переменная будет открывает окно ожидания
	AJAX.wait_block = null;

	//Создадим две переменные, которые будут хранить результат
	AJAX.text = null;
	AJAX.xml  = null;

	//Эта переменная при ошибке будет хранить описание ошибки
	AJAX.errtext = null;

	//Переменная для хранения таймера соеденения
	AJAX.TIMEOUT = null;

	AJAX.element_id = null;
	AJAX.file 		= null;
	AJAX.metod		= 'get';

	// Переменная показывает соединения ajax с сервером
	AJAX.show_process	= null;

	// возвращает  полученные данные js
	AJAX.js_data	= null;

    // прокручивает элемент вниз
    AJAX.scroll     = null;

    // изменяет высоту таблици относительно разрешения экрана
    AJAX.resize_height = null;

    //Инициализируем технологию AJAX
	if (window.XMLHttpRequest){
		AJAX.HTTP = new XMLHttpRequest();
		if (AJAX.HTTP.overrideMimeType) {
			AJAX.HTTP.overrideMimeType('text/xml');
		}
	} else if(window.ActiveXObject) {
		AJAX.HTTP = new ActiveXObject("Microsoft.XMLHTTP");
	}
	if (!AJAX.HTTP) {
		alert('Giving up :( Cannot create an XMLHTTP instance');
	}

	//Две функции для добавления GET, POST параметров
	AJAX.setGET = function(vname, value){
		num = AJAX.GET.length;
		if (num>0) num++;
		AJAX.GET[num] 			= new Array();
		AJAX.GET[num][vname] 	= value;
	}

	AJAX.setPOST = function(vname, value){
		num = AJAX.POST.length;
		if (num>0) num++;
		AJAX.POST[num] 			= new Array();
		AJAX.POST[num][vname] 	= value;
	}

	//Функция для отправки запроса серверу, в параметре передается путь и имя файла
	AJAX.request = function(file) {
		var i;
		var v;
		var post;
		AJAX.HTTP.abort(); //Закрываем предыдущие соеденение
		var url = file;
		if(AJAX.GET.length !== 0) {
			if (!file.match(/\?/g))	url += "?";
			else url += '&';
			for(i in AJAX.GET) {
				for(v in AJAX.GET[i]) {
					url += v + "=" + encodeURIComponent(AJAX.GET[i][v]) + "&";
				}
			}
			url = url.substr(0,(url.length-1));
		}
		if(AJAX.POST.length === 0) {
			AJAX.HTTP.open("GET", url, true);
			post = null;
		} else {
			AJAX.HTTP.open("POST", url, true);
			post = "";
			for(i in AJAX.POST) {
				for(v in AJAX.POST[i]) {
					post += v + "=" + encodeURIComponent(AJAX.POST[i][v]) + "&";
				}
			}
			post = post.substr(0,(post.length-1));
			AJAX.HTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			AJAX.HTTP.setRequestHeader("Content-Length", post.length);
		}
		AJAX.HTTP.send(post);

		//Создадим функцию для обработки состояния соеденения
		AJAX.HTTP.onreadystatechange = function() {
			if(AJAX.HTTP.readyState == 4) {
				clearTimeout(AJAX.TIMEOUT);
				AJAX.TIMEOUT = null;
				if(AJAX.HTTP.status == 200) {
					AJAX.text = AJAX.HTTP.responseText;
					AJAX.xml = AJAX.HTTP.responseXML;
					//Если событие onload отслеживается, то сгенерируем его
					if(AJAX.onload !== null) AJAX.onload();
					return 'ok';
				} else {
					//Ошибка!!! Если событие onerror отслеживается, то сгенерируем его
					if (AJAX.HTTP.statusText) AJAX.errtext = AJAX.HTTP.statusText;
					if(AJAX.onerror !== null) AJAX.onerror();
				}
			}
		}

		AJAX.GET  = new Array();
		AJAX.POST = new Array();
		AJAX.TIMEOUT = setTimeout("AJAX.etimeout();", 300000);
	}

	//Создадим функцию для обработки таймаута
	AJAX.etimeout = function() {
		AJAX.HTTP.abort();
		AJAX.errtext = "Timeout";
		if(AJAX.onerror !== null) AJAX.onerror();
	}

	AJAX.onload = function(content) {
		//Здесь обрабатываем удачную загрузку
		var stop = null;
		if (AJAX.text=='reload_page' && AJAX.page_url!=null) {
			window.location.replace(AJAX.page_url);
			var stop=1;
		}
		if (AJAX.text=='close_page') {
			window.close();
			var stop=1;
		}
		if (!stop){
			if (AJAX.js_data==1) {
				eval(AJAX.text);
			} else {
				if (document.getElementById(AJAX.element_id_reload)) {
					if (AJAX.rewrite==1) {
                        if (AJAX.text) document.getElementById(AJAX.element_id_reload).innerHTML += AJAX.text;
                    } else {
                        document.getElementById(AJAX.element_id_reload).innerHTML = AJAX.text;
                    }
                    if (AJAX.scroll && AJAX.text) document.getElementById(AJAX.element_id_reload).scrollTop =document.getElementById(AJAX.element_id_reload).scrollHeight;;
				} else {
					if (document.getElementById('wait_ajax')) document.getElementById('wait_ajax').innerHTML = AJAX.text;
				}
				if (AJAX.goto_link!=null) location.replace(AJAX.goto_link);
			}
			if (AJAX.resize_height==1) {
				resize_block_height(AJAX.resize_block_id, AJAX.resize_bottom_otstup);
				AJAX.resize_height = null;
			}
			if (AJAX.scroll==1){
				if (document.getElementById(AJAX.resize_block_id)){
					var elem = document.getElementById(AJAX.resize_block_id);
					var elem_scroll = elem.scrollHeight;
					elem.scrollTop  = elem_scroll;
				}
				AJAX.scroll = null;
			}
			AJAX.stop();
			//setTimeout(""+obj_name+".stop();",0);
		}
	}

	AJAX.onerror = function() {
		//здесь обрабатываем ошибки
		document.getElementById('ajax_error').innerHTML = 'Error: '+AJAX.errtext;
	}

	AJAX.start = function(element_id,file,metod) {
		if (!metod) metod='get';
		AJAX.data(element_id,file,metod);
	}

	AJAX.start_arr = function (){
		if (AJAX.show_process) show_proccess();

		for (i=0; i<=AJAX.arr_params.length; i++){
			if (AJAX.arr_params[i]){
				if (AJAX.metod=="get") AJAX.setGET(AJAX.arr_params[i]['name'],AJAX.arr_params[i]['value']);
				if (AJAX.metod=="post") AJAX.setPOST(AJAX.arr_params[i]['name'],AJAX.arr_params[i]['value']);
			}
		}

		AJAX.load_block();
		if (AJAX.GET.length!==0 || AJAX.POST.length!==0){
			AJAX.request(AJAX.file);
		}
	}

	AJAX.data = function(element_id,file,metod){
		AJAX.element_id = element_id;
		AJAX.file		= file;
		AJAX.metod		= metod;
		AJAX.load_block();
		if (AJAX.metod=="get"){
			vname = document.getElementById(AJAX.element_id).name;
			value = document.getElementById(AJAX.element_id).value;
			AJAX.setGET(vname,value);
		}
		if (AJAX.metod=="post"){
			vname = document.getElementById(AJAX.element_id).name;
			value = document.getElementById(AJAX.element_id).value;
			AJAX.setPOST(vname,value);
		}
		if (AJAX.GET.length!==0 || AJAX.POST.length!==0){
			AJAX.request(AJAX.file);
		}
	}


	AJAX.load_block = function(){
		if (navigator.appName == 'Microsoft Internet Explorer') var position = 'absolute;';
		else var position = 'fixed;';
		AJAX.LOAD 				= new Array();
		AJAX.LOAD['width'] 		= window.outerWidth/2-60;
		AJAX.LOAD['height'] 	= window.outerHeight/2-100;
		AJAX.LOAD['style']		= 'position: '+position;
		//AJAX.LOAD['style']		+='left: '+AJAX.LOAD['width']+'px;';
		//AJAX.LOAD['style']		+='top: '+AJAX.LOAD['height']+'px;';
		AJAX.LOAD['style']		+='padding: 2px 2px 2px 8px;';
		AJAX.LOAD['style']		+='height: 18px;';
		AJAX.LOAD['style']		+='width: 80px;';
		AJAX.LOAD['style']		+='background-color: Yellow;';
		AJAX.LOAD['style']		+='border-style: solid;';
		AJAX.LOAD['style']		+='font-family: System;';
		AJAX.LOAD['style']		+='font-size: 12px;';
		AJAX.LOAD['style']		+='text-align: left;';
		AJAX.LOAD['style']		+='border-width: 1px 1px 1px 1px;';

		AJAX.LOAD['style_b']	= 'background-color: Silver;';
		AJAX.LOAD['style_b']	+='border-width: 1px 1px 1px 1px;';
		AJAX.LOAD['style_b']	+='border-color: Gray;';
		AJAX.LOAD['style_b']	+='border-style: solid;';
		AJAX.LOAD['style_b']	+='font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;';
		AJAX.LOAD['style_b']	+='font-weight: bold;';
		AJAX.LOAD['style_b']	+='color: #001500;';
		AJAX.LOAD['style_b']	+='font-size: 11px;';
		AJAX.LOAD['style_b']	+='width: 60px;';

		AJAX.LOAD['block']		= '<div id="wait_ajax" style="'+AJAX.LOAD['style']+'">';
		AJAX.LOAD['block']		+='<span>Wait...</span>';
		AJAX.LOAD['block']		+='<span style="color: red;" id="ajax_error"></span>';
		AJAX.LOAD['block']		+='</div>';
		if (AJAX.wait_block && document.getElementById(AJAX.wait_block)) {
			AJAX.LOAD['block'] = '<div><img src="/inc/classes/ajax_class/img/wait_3_new.gif" border="0" height="18"></div>';
			document.getElementById(AJAX.wait_block).innerHTML = AJAX.LOAD['block'];
		}
	}

	AJAX.stop = function (){
		AJAX.HTTP.abort();
		AJAX.ABORT 				= new Array();
		AJAX.ABORT['width'] 	= window.outerWidth/2-60;
		AJAX.ABORT['height'] 	= window.outerHeight/2-100;
		if (navigator.appName == 'Microsoft Internet Explorer') var position = 'absolute;';
		else var position = 'fixed;';
		AJAX.ABORT['style']		= 'position: '+position;
		//AJAX.ABORT['style']		+='left: '+AJAX.LOAD['width']+'px;';
		//AJAX.ABORT['style']		+='top: '+AJAX.LOAD['height']+'px;';
		AJAX.ABORT['style']		+='padding: 2px 2px 2px 2px;';
		AJAX.ABORT['style']		+='height: 82px;';
		AJAX.ABORT['style']		+='width: 122px;';
		AJAX.ABORT['style']		+='border-style: solid;';
		AJAX.ABORT['style']		+='font-family: System;';
		AJAX.ABORT['style']		+='font-size: 12px;';
		AJAX.ABORT['style']		+='text-align: center;';
		AJAX.ABORT['style']		+='border-width: 0px 0px 0px 0px;';
		AJAX.ABORT['block']		= '<div id="wait_ajax" style="'+AJAX.ABORT['style']+'">';
		AJAX.ABORT['block']		+='</div>';
		if(document.getElementById('ajax_block')) document.getElementById('ajax_block').innerHTML = '';
		delete(ARR_AJAX_OBJ[AJAX.obj_num]);
		if (AJAX.show_process) show_proccess();
	}
	
	AJAX.str_replac = function(str, needle, replacement) {
		var temp = str.split(needle);
		str = temp.join(replacement);
		return str;
	}
	
	AJAX.strpos = function(str, needle, offset) {	
		var i = (str+'').indexOf(needle, (offset ? offset : 0));
		return i === -1 ? false : i;
	}
}

function abort_proccess(){
	if (confirm('Abort all ajax connections ?')){
		if(ARR_AJAX_OBJ.length){
			if (navigator.appName == 'Microsoft Internet Explorer'){
				for(key=0; key<=ARR_AJAX_OBJ.length; key++){
					if (ARR_AJAX_OBJ[key]) {
						ARR_AJAX_OBJ[key].HTTP.abort();
						delete(ARR_AJAX_OBJ[key]);
					}
				}
			} else {
				ARR_AJAX_OBJ.forEach(function(value,key){
					ARR_AJAX_OBJ[key].HTTP.abort();
					delete(ARR_AJAX_OBJ[key]);
				})
			}
		}
		if (document.getElementById('process_block')){
			prcs_block = document.getElementById('process_block');
			prcs_block.parentNode.removeChild(prcs_block);
			prcs_block = null;
		}
	}
}

function show_proccess(){
	var num = 0;
	if(ARR_AJAX_OBJ.length){
		if (navigator.appName == 'Microsoft Internet Explorer'){
			for(key=0; key<=ARR_AJAX_OBJ.length; key++){
				if (ARR_AJAX_OBJ[key]) num++;
			}
		} else ARR_AJAX_OBJ.forEach(function(value,key){num++;})
	}
	if (prcs_block){
		/*prcs_block.parentNode.removeChild(prcs_block);*/
		prcs_block = null;
	}
	if (num) {
		body_block		= document.body;
		ins_before 		= body_block.childNodes[0];
		prcs_block 		= document.createElement('input');
		prcs_block.id 	= 'process_block';

		prcs_block.type						= 'button';
		prcs_block.value					= 'ajax connections: '+(num)+'';
		prcs_block.title					= 'Abort all ajax	 connections';
		prcs_block.style.position 			= 'fixed';
		prcs_block.style.overflow 			= 'hidden';
		if (navigator.appName != 'Microsoft Internet Explorer') prcs_block.style.zIndex	= parseInt(body_block.style.zIndex)+10;
		prcs_block.style.backgroundColor	= 'black';
		if (num>=5) {
			prcs_block.style.color			= 'red';
			prcs_block.style.fontWeight		= 'bold';
		} else {
			prcs_block.style.color			= 'white';
			prcs_block.style.fontWeight		= 'normal';
		}
		prcs_block.style.fontSize			= '10px';
		prcs_block.style.fontFamily			= 'Verdana, Geneva, Arial, Helvetica, sans-serif';
		prcs_block.style.padding			= '0px';
		prcs_block.style.borderStyle		= 'solid';
		prcs_block.style.borderWidth		= '1px';
		prcs_block.style.borderColor		= '#9E9E9E';
		prcs_block.style.width				= '120px';
		prcs_block.style.height				= '18px';
		prcs_block.style.cursor				= 'pointer';
		/*
		if (navigator.appName == 'Microsoft Internet Explorer') prcs_block.setAttribute("onclick", function(){abort_proccess()});
		else prcs_block.setAttribute("onclick", 'abort_proccess()');
		ins_before.parentNode.insertBefore(prcs_block,ins_before);
		*/
	}

}

function resize_block_height(block_id, bottom_otstup){
	if (navigator.appName == 'Microsoft Internet Explorer'){
        document.getElementById(block_id).style.marginTop = '0px';
    } else {
        if (document.getElementById(block_id)) document.getElementById(block_id).style.height=(window.innerHeight-bottom_otstup)+'px';
    }
}
