function AsyncScore24DataService(ctx) {
    this.get_all_url = ctx.get_all_url;
    this.find_leagues_url = ctx.find_leagues_url;
    this.poll_url = ctx.poll_url;
    this.params = ctx.params;

}
;

AsyncScore24DataService.prototype.onRequestError = function(exception) {
    window.console && console.warn(exception);
};

AsyncScore24DataService.prototype.getAllLeagues = function (/*Object*/ obj, /*String*/ callbackMethodName) {
    var that = this;
    new Ajax.Request(this.get_all_url + "?" + this.encodeUrlParams(), {
        method: 'get',
        onSuccess: function(transport) {
            var txt = transport.responseText;
            obj[callbackMethodName](txt);

        },
        onException: function(exception) {
            that.onRequestError(exception);
        }
    });

};

AsyncScore24DataService.prototype.findLeagues = function (/*List<Number>*/ ids, /*Object*/ obj, /*String*/ callbackMethodName) {
    var p = this.buildParams(ids, "f");
    var url = this.find_leagues_url;
     var that = this;
    new Ajax.Request(url, {
        method: 'post',
        parameters: p,
        onSuccess: function(transport) {
            var responseText = transport.responseText;
            var t = eval('(' + responseText + ')');
            obj[callbackMethodName](ids, t);

        },
        onException: function(exception) {
            that.onRequestError(exception);
        }
    });
};

AsyncScore24DataService.prototype.poll = function (/*Number*/ marker, /*Object*/ obj, /*String*/ callbackMethodName) {
    var that = this;
    new Ajax.Request(this.buildUrl(this.poll_url, {'lview':marker}), {
        method: 'get',
        onSuccess: function(transport) {
            var xmlDoc = transport.responseXML.documentElement;
            obj[callbackMethodName](marker, xmlDoc);
        },
        onException: function(exception) {
            that.onRequestError(exception);
        }
    });

};

AsyncScore24DataService.prototype.buildParams = function(/*List<Numbers>*/ ids, /*String*/ prfx) {
    var pcopy = {};
    for (n in this.params) {
        pcopy[n] = this.params[n];
    }

    for (var i = 0; i < ids.length; i++) {
        pcopy[prfx + i] = ids[i];
    }

    return pcopy;

};


AsyncScore24DataService.prototype.encodeUrlParams = function() {
    var paramStr = "";

    for (n in this.params) {
        paramStr += "&" + n + "=" + this.params[n];
    }

    return paramStr.substr(1, paramStr.length - 1);
};


/*AsyncScore24DataService.prototype.buildUrl = function(*//*String*//*url) {
 return url + "?" + this.encodeUrlParams();
 };*/

AsyncScore24DataService.prototype.buildUrl = function(/*String*/url, /*Hash*/ addParams) {
    var r = url + "?" + this.encodeUrlParams();
    if (addParams) {
        for (p in addParams) {
            r += "&" + p + "=" + addParams[p];
        }
    }
    return r;
};
