// define_hook('scuttle_bookmarked_hook');

define_variable("scuttle_username", null,
                "Username of te scuttle account.");
define_variable("scuttle_password", null,
                "Password of the scuttle account.");
define_variable("scuttle_url", null,
                "The URL where scuttle can be found.");

function scuttle_parse_xml(text)
{
    var parser = Components
            .classes["@mozilla.org/xmlextras/domparser;1"]
            .createInstance(Components.interfaces.nsIDOMParser);
    return parser.parseFromString(text, 'text/xml');
}

function scuttle_get_url(path)
{
    let url = make_uri(scuttle_url);

    if (scuttle_username != null)
        url.username = scuttle_username;
    if (scuttle_password != null)
        url.password = scuttle_password;

    url.path += '/api';

    return url.spec + '/' + path;
}

function scuttle_bookmarked_widget(window)
{
    this.class_name = 'scuttle-bookmark-widget';
    text_widget.call(this, window);
    this.add_hook('current_content_buffer_location_change_hook');
    this.add_hook('select_buffer_hook');
    // this.add_hook('scuttle_bookmarked_hook');
}
scuttle_bookmarked_widget.prototype = {
    constructor: scuttle_bookmarked_widget,
    __proto__: text_widget.prototype,
    update: function () {
        var obj = this;
        function doit() {
            check_buffer(obj.window.buffers.current, content_buffer);
            let posturl = scuttle_get_url('is_bookmarked.php?url=' +
                                          encodeURIComponent(
                                              load_spec_uri_string(
                                                  load_spec(obj.window.buffers.current.top_frame)
                                              )
                                          ));

            try {
                let content = yield send_http_request(
                    load_spec({uri: posturl})
                );

                var dom = scuttle_parse_xml(content.responseText);
                var result = dom.getElementsByTagName('result')[0].innerHTML;

                obj.view.text = result == 'true'
                    ? "+" : "-";
            }
            catch (e) { }
        }
        co_call(doit());
    }
};

interactive("scuttle-post",
            "bookmark the page via scuttle",
            function (I) {
                check_buffer(I.buffer, content_buffer);
                let posturl = scuttle_get_url(
                    'posts_add.php?&url=' +
                        escape(load_spec_uri_string(load_spec(I.buffer.top_frame))) +
                        '&description=' +
                        escape((
                            yield I.minibuffer.read(
                                $prompt = "name (required): ",
                                $initial_value = I.buffer.title
                            )
                        )) +
                        '&tags=' +
                        escape((
                            yield I.minibuffer.read(
                                $prompt = "tags (space delimited): "
                            )
                        )) +
                        '&extended=' +
                        escape((
                            yield I.minibuffer.read(
                                $prompt = "extended description: "
                            )
                        )));

                try {
                    var content = yield send_http_request(
                        load_spec({uri: posturl}));
                    var dom = scuttle_parse_xml(content.responseText);
                    var result = dom.getElementsByTagName('result')[0];
                    var code = result.getAttribute('code');
                    I.window.minibuffer.message(code);

                    // if (code === 'done')
                    //     scuttle_bookmarked_hook_run();
                } catch (e) { }
            });

interactive("scuttle-post-link",
            "bookmark the link via scuttle",
            function (I) {
                var bo = yield read_browser_object(I);
                var mylink = load_spec_uri_string(
                    load_spec(encodeURIComponent(bo)));
                check_buffer(I.buffer, content_buffer);
                let postlinkurl = scuttle_get_url(
                    'posts_add.php?&url=' +
                        mylink +
                        '&description=' +
                        escape((
                            yield I.minibuffer.read(
                                $prompt = "name (required): ",
                                $initial_value = bo.textContent
                            )
                        )) +
                        '&tags=' +
                        escape((
                            yield I.minibuffer.read(
                                $prompt = "tags (space delimited): "
                            )
                        )) +
                        '&extended=' +
                        escape((
                            yield I.minibuffer.read(
                                $prompt = "extended description: "
                            )
                        )));

                try {
                    var content = yield send_http_request(
                        load_spec({uri: postlinkurl}));
                    var dom = scuttle_parse_xml(content.responseText);
                    var result = dom.getElementsByTagName('result')[0];
                    var code = result.getAttribute('code');
                    I.window.minibuffer.message(code);

                    // if (code === 'done')
                    //     scuttle_bookmarked_hook_run();
                } catch (e) { }
            }, $browser_object = browser_object_links);