/**
	Підтримує чергу запитів
	черга може містити як POST так і GET
*/

function m_ajax(){}

m_ajax.request        = 'empty';
m_ajax.result_tag_id  = '';
m_ajax.current_loader = '';

m_ajax.url_arr      = new Array();
m_ajax.id_tag_arr   = new Array();
m_ajax.data_arr     = new Array();
m_ajax.loader_arr   = new Array();

m_ajax.load = function(url, result_tag_id)
{
	m_ajax.url_arr[m_ajax.url_arr.length]       = url;
	m_ajax.id_tag_arr[m_ajax.id_tag_arr.length] = result_tag_id;
	m_ajax.data_arr[m_ajax.data_arr.length]     = '';

	if (typeof(arguments[2] ) != 'undefined')
	{
		m_ajax.loader_arr[m_ajax.loader_arr.length] = arguments[2];
	}
	else
	{
		m_ajax.loader_arr[m_ajax.loader_arr.length] = m_ajax.getDefaultLoader();
	}

	if ('empty' == m_ajax.request)
	{
		m_ajax.exec();
	}
}

m_ajax.pload = function(url, result_tag_id, data)
{
	m_ajax.url_arr[m_ajax.url_arr.length]       = url;
	m_ajax.id_tag_arr[m_ajax.id_tag_arr.length] = result_tag_id;
	m_ajax.data_arr[m_ajax.data_arr.length]     = data;
	
	if (typeof(arguments[3] ) != 'undefined')
	{
		m_ajax.loader_arr[m_ajax.loader_arr.length] = arguments[3];
	}
	else
	{
		m_ajax.loader_arr[m_ajax.loader_arr.length] = m_ajax.getDefaultLoader();
	}	

	if ('empty' == m_ajax.request)
	{
		m_ajax.exec();
	}
}
	
m_ajax.exec = function()
{
	if (m_ajax.url_arr.length > 0)
	{
		url 				  = m_ajax.url_arr.shift();
		m_ajax.result_tag_id  = m_ajax.id_tag_arr.shift();
		data  				  = m_ajax.data_arr.shift();
		
		m_ajax.current_loader = m_ajax.loader_arr.shift();

		if (typeof(data) != 'undefined')
		{
			if (data.length == 0)
			{
				m_ajax.gexec(url);
			}
			else if (data.length > 0)
			{
				m_ajax.pexec(url, data);
			}
		}
	}
}	

m_ajax.gexec = function(url)
{
	if (window.XMLHttpRequest)
	{
		m_ajax.request = new XMLHttpRequest();
		m_ajax.request.onreadystatechange = m_ajax.processRequestChange;
		m_ajax.request.open("GET", url, true);
		m_ajax.request.send(null);
	}
	else if (window.ActiveXObject)
	{
		m_ajax.request = new ActiveXObject("Microsoft.XMLHTTP");
		
		if (m_ajax.request)
		{
			m_ajax.request.onreadystatechange = m_ajax.processRequestChange;
			m_ajax.request.open("GET", url, true);
			m_ajax.request.send();
		}
	}
}

m_ajax.pexec = function(url, data)
{
	if (window.XMLHttpRequest)
	{
		m_ajax.request = new XMLHttpRequest();
		m_ajax.request.onreadystatechange = m_ajax.processRequestChange;
		m_ajax.request.open("POST", url, true);
		m_ajax.request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");
		m_ajax.request.send(data);
	}
	else if (window.ActiveXObject)
	{
		m_ajax.request = new ActiveXObject("Microsoft.XMLHTTP");
	
		if (m_ajax.request)
		{
	  		m_ajax.request.onreadystatechange = m_ajax.processRequestChange;
	  		m_ajax.request.open("POST", url, true);
	  		m_ajax.request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");
	  		m_ajax.request.send(data);
		}
	}
}
	
m_ajax.processRequestChange = function()
{
	if (m_ajax.request.readyState == 4)
	{
		if (m_ajax.request.status == 200)
		{
			m_ajax.get_by_id(m_ajax.result_tag_id).innerHTML = m_ajax.request.responseText;
		}
		
		m_ajax.clear();
		m_ajax.exec();//виконуємо наступний запит із черги	
	}
	else if (m_ajax.request.readyState >= 1 && m_ajax.request.readyState <= 3)
	{
		m_ajax.get_by_id(m_ajax.result_tag_id).innerHTML = m_ajax.loader();
	}
}

m_ajax.getDefaultLoader = function(result_tag_id)
{
	return '<div id="loader_'+result_tag_id+'"><img src="pics/loader.gif" width="32" height="32" border="0"></div>';
}

m_ajax.loader = function()
{
	return m_ajax.current_loader;
}

m_ajax.get_by_id = function(name)
{
	return document.getElementById(name);
}

m_ajax.clear = function()
{
	m_ajax.request        = 'empty';
	m_ajax.result_tag_id  = '';
	m_ajax.current_loader = '';
}
