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) { var x = ajax.x(); x.open(m, u, true); x.onreadystatechange = function () { if (x.readyState == 4) f(x.responseText) }; if (m == 'POST') x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); x.send(a) };
ajax.get = function (url, func) { ajax.send(url, func, 'GET') };
ajax.gets = function (url) { var x = ajax.x(); x.open('GET', url, false); x.send(null); return x.responseText };
ajax.post = function (url, func, args) { ajax.send(url, func, 'POST', args) };
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)) };