var firefox_ubiquity_zip_search_command_result = { fromdata: null,  todata: null };

CmdUtils.CreateCommand({
    name: "zip",
    takes: {"Searching" : noun_arb_text },
    url: "",
    icon: "http://groovetechnology.co.jp/favicon.ico",
    description: "Searches Zip-Code.",
    homepage: "http://www.serendip.ws/",
    author: { name: "iNo", homepage: "http://www.serendip.ws/" },
    license: "MPL",
    preview: function(pBlock, directObject) {
        var setResultData = function(json) {
            if (json) {
                if (typeof json.zipcode.a1 === 'object') {
                    return json.zipcode.a1;
                } else {
                    return null;
                }
            } else {
                return null;
            }
        };
        var query = directObject.text;
        pBlock.innerHTML = "Searching for...";
        if (query.match(/^\d+\-?\d+$/)) {
            var type = 'zipcode=';
        } else {
            var type = 'word=';
        }
        var url = "http://groovetechnology.co.jp/ZipSearchService/v1/zipsearch?" + type + query;
        jQuery.get(url, null, function(response) {
            var json = Utils.decodeJson(response);
            var pTemplate = "<div style=\"max-height:500px;overflow:auto;\">{for result in zipcode}<div><tt>${result.zipcode}\t${result.prefecture}${result.city}${result.town}</tt></div>{/for}</div>" +
                            "<div style=\"text-align:right;font-style:italic;\">Author iNo (<a href=\"http://www.serendip.ws/\" style=\"color:skyblue;text-decoration:underline;\">Serendip</a>)</div>" +
                            "<div style=\"text-align:right;font-style:italic;\">Powered by <a href=\"http://groovetechnology.co.jp/webservice/\" style=\"color:pink;text-decoration:underline;\">\u30B0\u30EB\u30FC\u30D6\u30C6\u30AF\u30CE\u30ED\u30B8\u30FC\x20Web\x20\u30B5\u30FC\u30D3\u30B9</a></div>";
            pBlock.innerHTML = CmdUtils.renderTemplate(pTemplate, json);

            var result = setResultData(json);
            if (result) {
                firefox_ubiquity_zip_search_command_result.fromdata = (type === 'zipcode=') ? result.zipcode : result.prefecture + result.city + result.town;
                firefox_ubiquity_zip_search_command_result.todata = (type === 'zipcode=') ? result.prefecture + result.city + result.town : result.zipcode;
            } else {
                firefox_ubiquity_zip_search_command_result.fromdata = null;
                firefox_ubiquity_zip_search_command_result.todata = null;
            }
        });
    },
    execute: function() {
        const gClipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
        gClipboardHelper.copyString(firefox_ubiquity_zip_search_command_result.todata);
        displayMessage(firefox_ubiquity_zip_search_command_result.fromdata + "\nCopy : \"" + firefox_ubiquity_zip_search_command_result.todata + "\"");
    }
});

