﻿window.fast.ajax = new (function() {

    var XMLHttpRequestObject = ( ((window.XMLHttpRequest && !(window.ActiveXObject))?window.XMLHttpRequest:null) || function() {
	    var v = new Array("Microsoft","Msxml4","Msxml2","Msxml3","Msxml5","Msxml6");
	    var i = v.length;	
	    var o = null;
	    do {
		    try {
			    o = new ActiveXObject(v[--i]+".XMLHTTP");
		    } catch(e) { };
	    } while( !o && i );
	    return o;
    });

    this.get = function( mcfg ) {
   
        var cfg = {
            uri : "",
            method : "GET",
            data : ""
        };
        
        for( i in mcfg ) {
	        cfg[i] = mcfg[i];
        };
    
        var r = new XMLHttpRequestObject();
        r.onreadystatechange = function() {
	        if( r.readyState == 4 ) {
	
                var doc = null;
                var result = new Object();

                if( typeof DOMParser == "function" ) {                
                    var dp = new DOMParser();
                    doc = dp.parseFromString( r.responseText, "text/xml" );
					result.dom = doc.documentElement;
					result.text = r.responseText;
                } else if( window.ActiveXObject ) {                
                    doc=new ActiveXObject("Microsoft.XMLDOM");
                    doc.async="false";
                    doc.loadXML(r.responseText);
					result.dom = doc.documentElement;
					result.text = r.responseText;
                } else {
					result.dom = r.responseXML;
					result.text = r.responseText;
				};
				
                if( cfg.onload ) {
                    cfg.onload( result );
                };
		        
	        };
        };
        
		// -- Förhindra cache? ------------------------------
		if( !cfg.cache ) {
			if( cfg.data.length ) {
				cfg.data += "&";
			};
			cfg.data += "__wp_nocache=";
			cfg.data += Math.random();	
		};
		// --------------------------------------------------
        
        if( cfg.method == "GET" ) {
			cfg.uri = cfg.uri + ((cfg.data.length) ? ("?" + cfg.data) : "");
            r.open("GET", cfg.uri, true );
	    	r.send(null);
	    } else if( cfg.method == "POST" ) {
			r.open("POST", cfg.uri, true );
			r.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			//r.setRequestHeader("Encoding","UTF-8");
			r.setRequestHeader("Content-length", cfg.data.length );
			r.setRequestHeader("Connection", "close");
			r.send( cfg.data );			
		};
    };
   
    this.send = this.get; 
});