﻿function createXmlHttpRequest() {
    if (window.ActiveXObject) {
        try {
            return new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
            return new ActiveXObject("Msxml2.XMLHTTP");
        }
    } else {
        return new XMLHttpRequest();
    }
}

var async = {};
var READYSTATE_COMPLETE = 4;

async.createCall = function(url, method) {
    var xmlHttpObj = createXmlHttpRequest();
    if (method == undefined) method = "GET";
    xmlHttpObj.open(method, url, true);
    return xmlHttpObj;
}

function getServerUrl(serviceUrl) {
    if (serviceUrl.charAt(0) != "/") 
        serviceUrl = "/" + serviceUrl;
    return window.location.protocol + "//" + window.location.host + serviceUrl;
}

var $A = Array.from = function(iterable) {
    if (!iterable) return [];
    if (iterable.toArray) {
        return iterable.toArray();
    } else {
        var result = [];
        for (var i = 0, length = iterable.length; i < length; i++) {
            result.push(iterable[i]);
        }
        return result;
    }
}

Function.prototype.bind = function() {
    var __method = this, args = $A(arguments), object = args.shift();
    return function() {
        return __method.apply(object, args.concat($A(arguments)));
    }
}
