// vim:et:sw=4:ts=4
// useful del.icio.us -> google bookmarks bookmarklet, 2006.
// by Kevin Ko <kevin.s.ko@gmail.com>
//
// Additional credits to Mihai <mihai@persistent.info> for blogging
// about Google Bookmark's XML importing interface.
//
// $Id: deli_to_gb.js,v 1.1 2006/10/26 01:17:42 scrabbly Exp $
//
// Licensed under the Creative Commons Attribution 2.5 License
//   http://creativecommons.org/licenses/by/2.5/
// (open use, as long as credit is given to the author)
//
(function() {
    // xmlEscape shamelessly stolen from Mihai.
    var xmlEscape = function(str) {
        return str.replace(/&/g, "&amp;")
                  .replace(/</g, "&lt;")
                  .replace(/>/g, "&gt;");
    };
    var exportBookmarks = function(bms) {
        var data = "";
        for (var i = 0; i < bms.length; i++) {
            var b = bms[i];
            data += "<bookmark>";
            data += "<url>" + xmlEscape(b.url) + "</url>";
            data += "<title>" + xmlEscape(b.title) + "</title>";
            data += "<date>" + Math.round(b.date.getTime()/1000) + "</date>";
            if (b.tags.length) {
                data += "<labels><label>" +
                        b.tags.join(",") +
                        "</label></labels>";
            }
            data += "</bookmark>";
        }
        var dform = document.createElement("form");
        dform.action = "http://www.google.com/bookmarks/mark?op=upload" +
                       "&zx=" + Math.round(65535*Math.random());
        dform.method = "POST";
        var idata = document.createElement("input");
        idata.type = "hidden";
        idata.name = "<?xml version";
        idata.value = "\"1.0\" encoding=\"utf-8\"?>" +
                      "<bookmarks>" + data + "</bookmarks>";
        dform.appendChild(idata);
        var x = document.getElementsByTagName("h1");
        if (x.length) {
            x[0].appendChild(dform);
            dform.submit();
        }
    };
    var bookmarks = [];
    var gv = function(x, delim) {
        if (x == null) {
            return [];
        } else {
            return x.split(delim);
        }
    };
    var Bookmark = function(b) {
        this.title = b.innerHTML;
        this.url = b["href"];
        this.date = new Date(b.getAttribute("add_date") * 1000);
        this.tags = gv(b.getAttribute("tags"), ",");
        this.note = "";
    };
    var bms = document.getElementsByTagName("a");
    for (var i = 0; i < bms.length; i++) {
        bookmarks.push(new Bookmark(bms[i]));
    };
    exportBookmarks(bookmarks);
})();
