/**
 *  Sindbad.API JavaScript client
 *
 *  Copyright (c) 2009 Группа компаний Синдбад
 *  http://www.sindbad.ru
 */

if (!jQuery.Sindbad) {
    jQuery.Sindbad = { };
}

/**
 *  Default API URL
 */
jQuery.Sindbad.url = '/api/';

/**
 *  Обработчик ошибки сервера по умолчанию
 */
jQuery.Sindbad.onError = function(req, stat, err)
{
    alert('Sindbad server error: ' + req + '|' + stat + '|' + err);
}

/**
 *  Получить прокси для класса className
 */
jQuery.Sindbad.api = function(className)
{
    var client = new function()
    {
        var self = this;

        this._resultCallback = {};
        this._exceptionCallback = {};

        this.onResult = function(cb)
        {
            self._resultCallback = cb;
            return self;
        }

        this.onException = function(cb)
        {
            self._exceptionCallback = cb;
            return self;
        }

        this.call = function(method, params)
        {
            params['_c'] = className;
            params['_m'] = method;

            var url = jQuery.Sindbad.url + '?' + jQuery.param(params);

            url += '&_b=?';

            jQuery.getJSON(
                    url,
                    function(d) {
                        if (d.result != null) {
                            self._resultCallback(d.result);
                        } else if (d.exception != null) {
                            self._exceptionCallback(d.exception);
                        } else {
                            jQuery.Sindbad.onError(null, 'PARSE_ERROR', null);
                        }
                    }
            )
        }
    }
    return client;
}
