
var getXHR = function() {
    if (window.XMLHttpRequest) {
        if (window.console) 
            console.log( ["getXHR", "using XMLHttpRequest"] );
        getXHR = function() { return new XMLHttpRequest(); };
        return getXHR();
    } else if (window.ActiveXObject) {
        if (window.console) 
            console.log( ["getXHR", "using Microsoft.XMLHTTP"] );
        try {
            getXHR = function() { return new ActiveXObject('Msxml2.XMLHTTP'); };
        } catch(e) {
            getXHR = function() { return new ActiveXObject('Microsoft.XMLHTTP'); };
        }
        return getXHR();
    }
    return null;
}

var ajax = function(url, postdata, callback) {
    var req = getXHR();
    if ( !req ) return false;

    if ( !callback && typeof( postdata ) == "function" ) {
        callback = postdata;
        postdata = null;
    }
    
    req.onreadystatechange = function() {
        if (req.readyState == 4) {
            if (callback)
                callback( req );
        }
    };
    
    var method = postdata ? "POST" : "GET";
    req.open(method, url, true);
    req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    req.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    req.send(postdata);
}

var addEvent = function( obj, type, fn ) {
    if ( obj.attachEvent ) {
        obj["e"+type+fn] = fn;
        obj[type+fn] = function() { obj["e"+type+fn]( window.event ) };
        obj.attachEvent( "on"+type, obj[type+fn] );
    } else{
        obj.addEventListener( type, fn, false );    
    }
}

var newEle = function(type, content, toNode, attrs, before) {
    var ele = null;
    if(type) {
        ele=toNode.ownerDocument.createElement(type);
        if(attrs) for(var name in attrs) ele[name]=attrs[name];
        if(content) {
            if(content=="empty") ele.appendChild(toNode.ownerDocument.createTextNode(" "));
            else ele.appendChild(toNode.ownerDocument.createTextNode(content));
        }
        if(before) toNode.parentNode.insertBefore(ele, toNode);
        else toNode.appendChild(ele);
    } else {
        ele = toNode.ownerDocument.createTextNode(content);
        toNode.appendChild(ele);
    }
    return ele;
}

