modAjax	= {

	doAjax: function(obj)
	{
		var Xhr = modAjax._getXMLHttpRequest();
		if (!Xhr)
			return false;

		Xhr.onreadystatechange = function()
		{
			if (Xhr.readyState == 4 && Xhr.status == 200)
				obj.callback(Xhr);
		}
		
		Xhr.open(obj.method, obj.url, true);
		if (obj.method == "POST")
		{
			Xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			Xhr.send(obj.data);
		}
		else if (obj.method == "GET")
			Xhr.send(null);		
	},

	_getXMLHttpRequest: function()
	{
		var Xhr = null;
		
		try
		{
			Xhr = new XMLHttpRequest();
			if(Xhr.overrideMimeType)
				Xhr.overrideMimeType('text/xml');
		}
		catch (e)
		{
			try
			{
				Xhr = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (e)
			{
				try
				{
					Xhr = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (e) {}
			}
		}
		if(!Xhr)
			alert('Error: could not create XMLHTTP object.');
		return Xhr;
	},
	
	_buildData: function(arg)
	{
		if (!arg)
			return null;
		var tab		= arg.split(":");
		var data	= "";
		for (key in tab)
		{
			if (data.length)
				data = data.concat("&");
			data = data.concat(tab[key], "=", getElementValue(tab[key]));
		}
		return data;
	},

	_parseForm: function(formId)
	{
		var	f = document.getElementById(formId);
		var data = '';
		if (f)
		{
			var c = f.getElementsByTagName("input" );
			for(var i = 0; i < c.length; i++)
			{
				if (data.length)
					data = data.concat("&");
				data = data.concat(c[i].name, "=", modAjax._getElementValue(c[i].id));
			}
			var s = f.getElementsByTagName("select" );
			for(var i = 0; i < s.length; i++)
			{
				if (data.length)
					data = data.concat("&");
				data = data.concat(s[i].name, "=", modAjax._getElementValue(s[i].id));
			}
			var t = f.getElementsByTagName("textarea" );
			for(var i = 0; i < t.length; i++)
			{
				if (data.length)
					data = data.concat("&");
				data = data.concat(t[i].name, "=", modAjax._getElementValue(t[i].id));
			}
		}
		return data;
	},
	
	_getElementValue: function(key)
	{
		if (key)
		{
			var elem = document.getElementById(key);
			if (elem)
			{
				switch (elem.type)
				{
					case "checkbox":
					case "radio":
						if (elem.checked == false)
							return 0;
						else
							return encodeURIComponent(elem.value);
					default:
						return encodeURIComponent(elem.value);
				}
			}
		}
		return "";
	},
	
	_parseResponse: function(div, content)
	{
		var	elem		= document.getElementById(div);
		if (elem)
		{
			elem.innerHTML	= content;
			var scripts		= elem.getElementsByTagName('script');
			for (i = 0; i < scripts.length; i++)
			{
				var newScript = document.createElement('script');
				for (j = 0; j < scripts[i].attributes.length; j++)
				{
					if (typeof(scripts[i].attributes[j]) != 'undefined'
						&& typeof(scripts[i].attributes[j].nodeName) != 'undefined'
						&& scripts[i].attributes[j].nodeValue != null
						&& scripts[i].attributes[j].nodeValue != '')
						newScript.setAttribute(scripts[i].attributes[j].nodeName, scripts[i].attributes[j].nodeValue);
				}
				newScript.text = scripts[i].text;
				scripts[i].parentNode.replaceChild(newScript, scripts[i]);
			}
			return true;
		}
		return false;
	},
	
	GET: function(url, div)
	{
		callback =	function(Xhr)
					{
						modAjax._parseResponse(div, Xhr.responseText);
					}
		modAjax.doAjax({'method': 'GET', 'url': url, 'callback': callback});
	},
	
	POST: function(url, formId, div)
	{
		callback =	function(Xhr)
					{
						modAjax._parseResponse(div, Xhr.responseText);
					}
		modAjax.doAjax({'method': 'POST', 'url': url, 'data': modAjax._parseForm(formId), 'callback': callback});
		return false;
	},
	
	/*POSTForm: function(url, formul, div)
	{
		callback =	function(Xhr)
					{
						modAjax._parseResponse(div, Xhr.responseText);
					}
	
			var str = "";
			for (var i = 0; document.forms[formul] && document.forms[formul].elements[i]; i++)
			{
					str += "&"+document.forms[formul].elements[i].name+"="+escape(getElementValueByElement(document.forms[formul].elements[i]));
			}
		modAjax.doAjax({'method': 'POST', 'url': url, 'data': str, 'callback': callback});
	}*/
	
	specPOST: function(url, fdata, div)
	{
		callback =	function(Xhr)
					{
						modAjax._parseResponse(div, Xhr.responseText);
					}
		modAjax.doAjax({'method': 'POST', 'url': url, 'data': modAjax._buildData(fdata), 'callback': callback});
		return false;
	},
	
	confirmDEL: function(url, msg, div)
	{
		if (confirm(msg))
			modAjax.GET(url, div);
		return false;
	}
	
};