var action;
var bookmarkdialogName = "Bookmarkdialogname";
var reloadafterresult=false;
var elInternalBookmarkLink = "";

function saveBookmark() {
    var arguments  =dijit.byId(bookmarkdialogName).getValues();
    var linkurl;
	linkurl= (elInternalBookmarkLink != "") ? elInternalBookmarkLink: dijit.byId('bm_xurl').value;
    var response = elXhrGet({
        url: "/el/bookmark/my",
        handleAs: "text",
        content: {
            "formaction": action,
            "url": linkurl,
            "title": arguments.bm_title,
            "tags": arguments.bm_tags,
            "comment": arguments.bm_comment
        },
        load: function(response, ioArgs) {
            showResult(response,undefined,(reloadafterresult)?function(){location.reload()}:undefined);
        },
        error: function(response, ioArgs) {
           showResult(response,undefined,(reloadafterresult)?function(){location.reload()}:undefined);
        }
    });
}

function deleteBookmark(url) {
    var response = elXhrGet({
        url: "/el/bookmark/my",
        content: {'formaction':'asyncdel', 'url':url},
        handleAs: "text",
        load: function(response, ioArgs) {
            showResult(response);
            reloadCurrentTab();
        },
        error: function(response, ioArgs) {
            showResult(response);
        }
    });
}


function showDialog(link, description, title, tags, comment, extern, dialogtitle){
    var myDialog=dijit.byId(bookmarkdialogName);
    if (!myDialog)
    {
        myDialog = new dijit.Dialog({ id: bookmarkdialogName, title: dialogtitle,  duration: 50, style: "width: 500px;"});
        dojo.connect(myDialog, "hide", function() {
            dojo.byId("bm_okbtn").focus();
            myDialog.destroyRecursive();
        });
    }

    elXhrGet(
    {
        url: "/part/el/bookmark/bookmarkdialogpart.jspx",
        handleAs: "text",
        load: function(result)
        {
            var error = result instanceof Error;
            if (!error)
            {
                dijit.byId(bookmarkdialogName).setContent(result);
                setFields(link, description, title, tags, comment, extern);
                dijit.byId(bookmarkdialogName).show();
            }
        }
    });
}

function showAddBookmarkDialog(link, description,reload) {
    reloadafterresult=reload;
    action = "asyncsave";
    showDialog(link, description, "", "", "", false,elJSTranslations['js.bookmark.addbookmark']);
    return false;
}
function showAddExternBookmarkDialog(reload) {
    reloadafterresult=reload;
    action = "asyncsave";
    showDialog("", "", "", "", "", true,elJSTranslations['js.bookmark.addexternalbookmark']);
    return false;
}
function showEditBookmarkDialog(link, description, title, tags, comment,reload) {
    reloadafterresult=reload;
    action = "asyncedit";
    showDialog(link, description, title, tags, comment, false,elJSTranslations['js.bookmark.editbookmark']);
    return false;
}

function setFields(link, description, title, tags, comment, extern) {
    var xlinkElem = dijit.byId('bm_xurl');
    var linkElem = dojo.byId('bm_url');
    xlinkElem.required = extern;
    xlinkElem.setValue("");
    if (!extern) {
        elInternalBookmarkLink = link;
        linkElem.innerHTML = description;//.substr(0, 50);
        visibility(xlinkElem, "none");
        visibility(linkElem, "inline");
    } else {
		elInternalBookmarkLink = "";
        visibility(xlinkElem, "inline");
        visibility(linkElem, "none");
    }
    dijit.byId('bm_title').setValue(title);
    dijit.byId('bm_tags').setValue(tags);
    dijit.byId('bm_comment').setValue(comment);
}

function showDeleteConfirmation(url,reload) {
   reloadafterresult=reload;
    // show confirmation for temp dialogs
        var confDialog = dijit.byId("confremovebookmark");
        confDialog = new dijit.Dialog({
            id: "confremovebookmark",
            title: elJSTranslations['js.bookmark.deleteconfirmtitle'],
            style: "width: 350px;"
        });

        var f = new dijit.form.Form({
            id:"confform"
        });
        // dojo.style(confDialog.closeButtonNode, "visibility", "hidden");
        var dialogIntro = document.createElement("div");
        dialogIntro.innerHTML = elJSTranslations['js.bookmark.deleteconfirm'];

        var dialogButtons = document.createElement("div");
        dojo.addClass(dialogButtons, "elFormSubmit");

        var okButton = document.createElement("input");
        okButton.type = "submit";
        okButton.value = "Ok";
        dojo.connect(okButton, "onclick", function(evt) {
            dojo.stopEvent(evt);
            confDialog.hide();
            deleteBookmark(url);

        });

        var cancelButton = document.createElement("input");
        cancelButton.type = "submit";
        cancelButton.value = "Cancel";
        dojo.connect(cancelButton, "onclick", function(evt) {
            dojo.stopEvent(evt);
            confDialog.hide();
        });

        dojo.addClass(okButton, "elButton");
        dojo.addClass(cancelButton, "elButton");
        dialogButtons.appendChild(cancelButton);
        dialogButtons.appendChild(okButton);
        dialogButtons.style.marginBottom = "20px";
        dialogButtons.style.width = "300px";
        f.domNode.appendChild(dialogIntro);
        f.domNode.appendChild(dialogButtons);
        confDialog.setContent(f.domNode);

        // we destroy the dialog on hide. the buttons only hide the dialog, this handler kills the dialog
        dojo.connect(confDialog, "hide", function() {
            dijit.byId("confform").destroyRecursive();
            confDialog.destroyRecursive();
        });
        confDialog.show();

}

function validate_bm() {
    if (!dijit.byId("bookmark_dialog_form").validate())  return;
    saveBookmark();
    hide_bm();
}

function hide_bm(){
    dijit.byId(bookmarkdialogName).hide();
    return false;
}

function visibility(node, value) {
    node.style.display = value;
    if (node.domNode)node.domNode.style.display = value;
    var label = document.getElementById(node.id + "_label");
    if (label)label.style.display = value;
}