

function $(e)
{
	if(typeof e=='string')e=document.getElementById(e);
	return e;
};

function collect(a,f)
{
	var n=[];
	for(var i=0;i<a.length;i++)
	{
		var v=f(a[i]);
		if(v!=null)n.push(v)
	}
	return n;
};

ajax={};
ajax.x=	function()
	{
		try
		{
			return new ActiveXObject('Msxml2.XMLHTTP');
		}
		catch(e)
		{
			try
			{
				return new ActiveXObject('Microsoft.XMLHTTP');
			}
			catch(e)
			{
				return new XMLHttpRequest();
			}
		}
	};

ajax.serialize=	function(f)
		{
			var g=	function(n)
				{
					return f.getElementsByTagName(n);
				};
			var nv=	function(e)
				{
					if(e.name)return encodeURIComponent(e.name)+'='+encodeURIComponent(e.value);else return '';
				};
			var i=collect(g('input'),function(i)
						 {
						 	if((i.type!='radio' && i.type!='checkbox') || i.checked)return nv(i)
						 }
				     );
			var s=collect(g('select'),nv);
			var t=collect(g('textarea'),nv);
			return i.concat(s).concat(t).join('&');
		};

ajax.send=	function(u,f,m,a,r)
		{
			var x=ajax.x();
			x.open(m,u,true);
			
			x.onreadystatechange=	function()
						{
							if(x.readyState==4)
							{
								switch(r)
								{
									case 'XML': f(x.responseXML);break;
									case 'JSON' :
										var response  = eval('(' + x.responseText + ')');
										f(response);
										break;
									default:f(x.responseText); break;
								}
							}
						};
						if(m=='POST')x.setRequestHeader('Content-type','application/x-www-form-urlencoded');
						x.send(a);
		};


ajax.get=	function(url,func,resp)
		{
			ajax.send(url,func,'GET',null,resp);
		};

ajax.gets=	function(url)
		{
			var x=ajax.x();
			x.open('GET',url,false);
			x.send(null);
			return x.responseText;
		};

ajax.post=	function(url,args,r,func)
		{
			ajax.send(url,func,'POST',args,r)
		};

ajax.update=	function(url,elm)
		{
			var e=$(elm);
			var f=	function(r)
				{
					e.innerHTML=r;
				};
			ajax.get(url,f)
		};

ajax.submit=	function(url,elm,frm)
		{
			var e=$(elm);
			var f=	function(r)
				{
					e.innerHTML=r;
				};
			ajax.post(url,f,ajax.serialize(frm));
		};

function getXMLValue(tag,result)
{
	return result.getElementsByTagName(tag)[0].firstChild.nodeValue;
}

function getXMLValueArray(tag,result)
{
	return result.getElementsByTagName(tag);
}
