﻿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: "",
            cache: false,
            onload: function(d) { void (0); }
        };

        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;
                };
                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);
        };

        return r;
    };

    this.send = this.get;
    this.post = this.get;
});
