ajax = { };

ajax.collect =  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.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){

    f=document.getElementById(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=ajax.collect(g('input'),function(i){if((i.type!='radio'&&i.type!='checkbox')||i.checked) return nv(i)});
    var s=ajax.collect(g('select'),nv);
    var t=ajax.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))
};
