(function($){

$.jsonRpc = $.jsonRpc || function(options) {
    options.type = options.type || $.ajaxSettings.type || 'GET';
    var ajaxOptions = {
        contentType: 'application/json',
        dataType:  options.type == 'GET' ? 'jsonp' : 'json',
        processData: options.type == 'GET'
    };

    var data = {
        version: options.version || '1.0',
        method: options.method || 'system.listMethods',
        params: options.params || []
    };
    $.each(data, function(i){ delete options[i] });

    function send() {
        options.data = JSON.stringify(data);
        if (options.type == 'GET') options.data = {json: options.data};
        $.ajax($.extend(ajaxOptions, options));
    }
    
    if (typeof JSON == 'undefined') {
        $.getScript('http://www.json.org/json2.js', function(){ send() });
    } else {
        send();
    }
    return $;
};

})(jQuery);
