﻿/*
* Swisschecklist.UI Javascript
* Copyright (c) 2010 2sic internet solutions gmbh
* Author: Pascal Schweizer
* 
* Description
* Requires jQuery 1.3.2, SwissChecklist.js
*
*/


// Inline Edit
$(document).ready(function() {
    $("#actionslider").slider({
        orientation: "vertical",
        min: 0,
        max: 2,
        step: 1,
        animate: true,
        value: 2
    });

    if (typeof ($.fn.scrollFollow) != "undefined") {
        $('#ChecklistManagement').scrollFollow({
            container: 'ChecklistContainer',
            speed: 800,
            delay: 200,
            offset: 20
        });
    }


    $("#actionslider a").addClass("ui-state-active");

    if (typeof ($.fn.customCheckbox) != "undefined") {
        // Initialize custom Checkboxes
        $(".ChecklistCheckbox, .StepCheckbox").customCheckbox();
        $(".UserChecklistCloseCheck input").customCheckbox();
    }

    $("#slideoptions p").click(function() {
        var position = parseInt($(this).attr("position"));
        $("#actionslider").slider("option", "value", position);
        var actions = new Array("use", "change", "sort").reverse();
        SwissChecklist.ChecklistController.Checklist.ChangeView(actions[position]);
        $("#actionslider a").addClass("ui-state-active");
    });

    $("#actionslider").bind("slide", function(event, ui) {
        // Change the mode with the slider
        var sIndex = ui.value; // $("#actionslider").slider("value");
        var actions = new Array("use", "change", "sort").reverse();
        SwissChecklist.ChecklistController.Checklist.ChangeView(actions[sIndex]);
        $("#actionslider a").removeClass("ui-state-hover").addClass("ui-state-active");
    });

    $("#actionslider_edit").slider({
        orientation: "vertical",
        min: 0,
        max: 2,
        step: 1,
        animate: true,
        value: 2
    });

    $("#actionslider_edit a").addClass("ui-state-active");

    $("#slideoptions_edit p").click(function() {
        var position = parseInt($(this).attr("position"));
        $("#actionslider_edit").slider("option", "value", position);
        var actions = new Array("preview", "change", "sort").reverse();
        SwissChecklist.ChecklistController.Checklist.ChangeView(actions[position]);
        $("#actionslider_edit a").addClass("ui-state-active");
    });
    $("#actionslider_edit").bind("slide", function(event, ui) {
        // Change the mode with the slider

        var sIndex = ui.value; // $("#actionslider").slider("value");
        var actions = new Array("preview", "change", "sort").reverse();
        SwissChecklist.ChecklistController.Checklist.ChangeView(actions[sIndex]);
        $("#actionslider_edit a").removeClass("ui-state-hover").addClass("ui-state-active");
    });

    if (SwissChecklist.ChecklistController != null)
        if (typeof (SwissChecklist.ChecklistController.Checklist.EnableCheckboxes) != 'undefined')
        SwissChecklist.ChecklistController.Checklist.EnableCheckboxes();

    // InsertChecklistStep on below
    $(".InsertStepBelow").click(function() {
        var StepObject = $(this).parents(".SCL_Step");
        if (typeof (SwissChecklist.ChecklistController.Steps.AddStep) != 'undefined')
            SwissChecklist.ChecklistController.Steps.AddStep(StepObject);
        return false;
    });

    $("#ChecklistManagement").tabs();

    // Set Edit
    if (document.URL.toString().indexOf("mode=edit") != -1) {
        $("#ChecklistManagement").tabs('select', 1);
        if (typeof (CheckApproach) != 'undefined') {
            CheckApproach();
        }

    }

    // Content editable in title
    $("#pnlUserChecklistTitle").bind("click", function() {
        //this.designMode = "on";
        // this.contentEditable = true;

        // clear standard
        if ($(this).html() == $(this).attr("alt")) {
            $(this).html("");
            $(this).focus();
        }

    });
    $("#pnlUserChecklistTitle").bind("blur", function() {
        //this.designMode = "off";
        // this.contentEditable = false;

        // check empty
        if ($(this).html() == "") {
            $(this).html($(this).attr("alt"));
        }
    });

    $.extend($.expr[":"], {
        extension: function(a) {
            return $(a).attr("scl:extension") != "";
        },
        ext: function(a) {
            return $(a).attr("scl:extension") == m[3];
        }
    });

    // Initialize save buttons
    $(".ChecklistSaveButton").click(function() {
        SwissChecklist.ChecklistController.SaveChecklist($(".ChecklistContainer:first"), false, "ChecklistUpdate");
        $(".ChecklistSaveLoader").show();
        $(".ChecklistSaveCompleted").hide();
        return false;
    });

    $(".TemplateSaveButton").click(function() {
        setTimeout(function() { UserIsWorkingWithTheChecklist = true; }, 200); 
        tb_show(GetLocalizedText('Login'), '/Default.aspx?tabid=73&SkinSrc=[G]Skins/Swisschecklist/Blank&returnurl=%2fSwisschecklist%2fSystem%2fAuthentication%2fLoginHelper.aspx&keepThis=true&TB_iframe=true&height=550&width=640', '');
        return false;
    });


    $(".TemplateSaveButton2").click(function() {
        SwissChecklist.ChecklistController.SaveChecklist($(".ChecklistContainer:first"), true, "TemplateUpdate");
        $(".ChecklistSaveLoader").show();
        $(".ChecklistSaveCompleted").hide();
        return false;
    });

    $(".CopyChangesToTemplateButton").click(function() {
        if (confirm("This action overwrites the original template. Continue?")) {
            $("#ChecklistManagement").tabs('select', 0);
            SwissChecklist.ChecklistController.SaveChecklist($(".ChecklistContainer:first"), true, "TemplateUpdateFromChecklist");
            $(".ChecklistSaveLoader").show();
            $(".ChecklistSaveCompleted").hide();
        }
        return false;
    });

    $(".TagField .ChecklistPublish_TagInput").keyup(function(e) {
        // Tag Suggestion for publish mode
        if (!$.browser.msie && (this.selectionStart != $(this).val().length))
            return false;
        $("#TagSuggestions").remove();
        if ((e.keyCode > 47 && e.keyCode < 90) || e.keyCode == 8) {
            var TagInput = $(this);
            var Tags = $(this).val().split(' ');
            var CurrentTag = Tags[Tags.length - 1];
            if (CurrentTag != null && CurrentTag != "") {
                Tags.pop();
                var DTO = {
                    TagStart: CurrentTag,
                    Language: $.trim($(".Language:first").text()),
                    ParentTags: Tags
                };
                $.ajax({
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    url: "/SwissChecklist/SwissChecklistServices.asmx/GetTagSuggestions",
                    data: JSON.stringify(DTO),
                    dataType: "json",
                    success: function(msg) {
                        var Results = msg.d.Values;
                        if (Results.length > 0) {
                            var SuggestList = $("<ul>", {
                                id: "TagSuggestions"
                            });
                            for (var i = 0; i < Results.length; i++) {
                                var ListItem = $("<li>", {
                                    text: Results[i].Value,
                                    title: Results[i].Value,
                                    click: function() {
                                        var JoinedTags = Tags.join(" ");
                                        var NewTextBoxValue = (JoinedTags != "" ? JoinedTags + " " : "") + $(this).attr("title");
                                        TagInput.val(NewTextBoxValue);
                                        $(this).parent("ul#TagSuggestions").remove();
                                    }
                                });
                                SuggestList.append(ListItem);
                            }
                        }
                        $(".TagField").append(SuggestList);
                    },
                    error: function() {
                        // If it fails, unbind keyup event to prevent creating errors on the page and do unneeded requests
                        TagInput.unbind("keyup");
                    }
                });
            }
            else if (event.keyCode == 27) {
                $("#TagSuggestions").remove();
            }
            else {
                return false;
            }
        }
    }).click(function(e) {
        $("#TagSuggestions").remove();
    });

    // Checklist
    $(".checklist_title.ChecklistTitle span").keypress(function(e) {
        if (e.keyCode == '13')
            return false;
        return true;
    });


    // Check url
    if (window.location.href.toLowerCase().endsWith("/de/neu") || window.location.href.toLowerCase().endsWith("/en/new")) {
        setTimeout(function() {
            $('#actionslider').slider('option', 'value', 1);
            SwissChecklist.ChecklistController.Checklist.ChangeView("change");
            $("#actionslider a").addClass("ui-state-active");
            // Mark all steps as changed
            $(".SCL_Step").each(function() {
                SwissChecklist.ChecklistController.Steps.MarkStepAsChanged($(this), false);
            });
        }, 200);
    }

    $(".authreq").click(function() {
        // TODO: Do something nice for unregistered/guest users
        $("<div>", {
            text: GetLocalizedText("NotAuthInText")
        }).dialog({
            title: GetLocalizedText("NotAuthIn"),
            resizable: false,
            draggable: false,
            modal: true
        });
        return false;
    });
    $(".functiondisabled").click(function() {
        // TODO: Do something nice for unregistered/guest users
        $("<div>", {
            text: GetLocalizedText("FunctionDisabledText")
        }).dialog({
            title: GetLocalizedText("FunctionDisabled"),
            resizable: false,
            draggable: false,
            modal: true
        });
        return false;
    });
});




/* 
* jQuery Editor
*
*/
function InsertTags(tagOpen, tagClose, sampleText, EditorID) {
    UserMayLeave = true;
    var TextArea = document.getElementById(EditorID);
    var selText, isSample = false;

    if (document.selection && document.selection.createRange) { // IE / Opera

        //save window scroll position
        if (document.documentElement && document.documentElement.scrollTop)
            var winScroll = document.documentElement.scrollTop;
        else if (document.body)
            var winScroll = document.body.scrollTop;

        //get current selection
        TextArea.focus();

        var range = document.selection.createRange();

        selText = range.text;

        //insert tags
        checkSelectedText();
        range.text = tagOpen + selText + tagClose;

        //mark sample text as selected
        if (isSample && range.moveStart) {
            if (window.opera)
                tagClose = tagClose.replace(/\n/g, '');
            range.moveStart('character', -tagClose.length - selText.length);
            range.moveEnd('character', -tagClose.length);
        }
        range.select();

        //restore window scroll position
        if (document.documentElement && document.documentElement.scrollTop)
            document.documentElement.scrollTop = winScroll
        else if (document.body)
            document.body.scrollTop = winScroll;


    } else if (TextArea.selectionStart || TextArea.selectionStart == '0') { // Firefox
        //save textarea scroll position
        var textScroll = TextArea.scrollTop;
        //get current selection
        TextArea.focus();
        var startPos = TextArea.selectionStart;
        var endPos = TextArea.selectionEnd;
        selText = TextArea.value.substring(startPos, endPos);
        //insert tags
        checkSelectedText();
        TextArea.value = TextArea.value.substring(0, startPos)
			    + tagOpen + selText + tagClose
			    + TextArea.value.substring(endPos, TextArea.value.length);
        //set new selection
        if (isSample) {
            TextArea.selectionStart = startPos + tagOpen.length;
            TextArea.selectionEnd = startPos + tagOpen.length + selText.length;
        } else {
            TextArea.selectionStart = startPos + tagOpen.length + selText.length + tagClose.length;
            TextArea.selectionEnd = TextArea.selectionStart;
        }
        //restore textarea scroll position
        TextArea.scrollTop = textScroll;
    }

    function checkSelectedText() {
        if (!selText) {
            selText = sampleText;
            isSample = true;
        } else if (selText.charAt(selText.length - 1) == ' ') { //exclude ending space char
            selText = selText.substring(0, selText.length - 1);
            tagClose += ' '
        }
    }
}

/*
* Post it
*
*/
$(function() {
    with (SwissChecklist.ChecklistController) {
        // Properties
        SwissChecklist.ChecklistController.CurrentPostItPositionElement = null;
        SwissChecklist.ChecklistController.CurrentPostItStepElement = null;
        SwissChecklist.ChecklistController.PostItOpen = false;

        // Functions
        Steps.InitSteps = function() {
            $(".SCL_Step").each(function(i) {
                var Step = $(this);
                var Notes = $(".SCL_UserNotes", Step).attr("scl:notes");
                if (Notes != "") {
                    Steps.HidePostItButton(Step);
                    Steps.ShowPostItButton(Step);
                }
            });
        }

        Steps.InitPostIt = function() {
            $(".SCL_StepLine").mouseenter(function(e) {
                var Step = $(this).parents(".SCL_Step:first");
                if (CurrentPostItStepElement == null || CurrentPostItStepElement.attr("id") != Step.attr("id")) {
                    if ($(".SCL_UserNotes", Step).attr("scl:notes") == "")
                        Steps.ShowPostItButton(Step);
                }
            });

            $(".SCL_StepLine").mouseleave(function(e) {
                var Step = $(this).parents(".SCL_Step:first");
                if (CurrentPostItStepElement == null || CurrentPostItStepElement.attr("id") != Step.attr("id")) {
                    if ($(".SCL_UserNotes", Step).attr("scl:notes") == "")
                        Steps.HidePostItButton(Step);
                }
            });
        }

        Steps.DisposePostIt = function() {
            $(".SCL_StepLine").unbind("mouseenter").unbind("mouseleave");
        }

        Steps.ClosePostIt = function() {
            var PostIt = $("#PostItBox");
            if (CurrentPostItPositionElement != null) {
                var Step = $(CurrentPostItPositionElement).parents(".SCL_Step:first");
                var NoteManager = $(".SCL_UserNotes:first", Step);

                if ($("textarea", PostIt).val() != $("textarea", PostIt).attr("title")) {
                    NoteManager.attr("scl:notes", EscapeString($("textarea", PostIt).val()))

                } else {
                    var Step = $(CurrentPostItPositionElement).parents(".SCL_Step:first");
                    var NoteManager = $(".SCL_UserNotes", Step);
                    NoteManager.attr("scl:notes", "")
                }
                if (NoteManager.attr("scl:notes") == "") {
                    Steps.HidePostItButton(CurrentPostItStepElement);
                }
            }
            $("#Templates").append($("#PostItBox"));
        }

        Steps.ShowPostItButton = function(StepObject) {
            // if there isnt a postitbutton
            var PostItButtonClone = $("#PostItButton", "#Templates").clone();
            if ($(".SCL_MouseoverButtons:first #PostItButton", StepObject).size() == 0) {
                $(".SCL_MouseoverButtons:first", StepObject).append(PostItButtonClone).show();
                PostItButtonClone.click(function() {
                    UserMayLeave = true;
                    UserIsWorkingWithTheChecklist = false;

                    if (PostItOpen == this) {
                        Steps.ClosePostIt();
                        CurrentPostItPositionElement = null;
                        CurrentPostItStepElement = null;
                        PostItOpen = null;
                    }
                    else {
                        PostItOpen = this;
                        Steps.GetPostIt(this);
                    }
                });
            }
        }

        Steps.HidePostItButton = function(StepObject) {
            // it the postitvalue is empty
            $("#PostItButton:first", StepObject).remove();
        }


        Steps.GetPostIt = function(object) {
            Steps.ClosePostIt();
            var PostItButton = $(object);
            var Step = $(object).parents(".SCL_Step:first");
            var NoteManager = $(".SCL_UserNotes", Step);
            var Checklist = Step.parents("ul:first");
            var PostIt = $("#PostItBox");

            CurrentPostItPositionElement = PostItButton;
            CurrentPostItStepElement = Step;

            Checklist.after(PostIt);


            PostIt.css("left", "535px");
            PostIt.css("top", Step.position().top + "px");

            if (NoteManager.attr("scl:notes") == "") {
                $("textarea", PostIt).val("");
            } else {
                $("textarea", PostIt).val(UnEscapeString(NoteManager.attr("scl:notes")));
            }
            setTimeout(function() {
                $("textarea", PostIt).focus();
            }, 100);
        }



        // Events
        Steps.InitPostIt();
        $("#PostItCloseButton").click(function() {
            Steps.ClosePostIt();
            CurrentPostItPositionElement = null;
            PostItOpen = null;
            if ($(".SCL_UserNotes", CurrentPostItStepElement).attr("scl:notes") == "")
                Steps.HidePostItButton(CurrentPostItStepElement);

            CurrentPostItStepElement = null;
        });

        $(document).click(function(e) {
            if ($(e.target).is("#PostItBox") == false
            && $(e.target).is(".PostItHelper") == false
            && $(e.target).is(".PostItTextBox") == false
            && $(e.target).is(".PostItButtonImage") == false) {
                Steps.ClosePostIt();
                CurrentPostItPositionElement = null;
                CurrentPostItStepElement = null;
                PostItOpen = null;
            }
        });
        Steps.InitSteps();
    }
});



// Publish and Delete script
$(document).ready(function() {
    // init Publish button
    $(".ChecklistPublishButton").click(function() {
        tb_show("Publish", "#TB_inline?height=600&width=600&inlineId=ChecklistPublish", false);
        $("#Publish_Step1").show();
        $("#Publish_Step2").hide();
        $("#Publish_Step3").hide();
        $("#ChecklistPublishSetNewMetaData").css("display", "block");
        $("#PublishChecklist_NewTitle").val($.trim($(".checklist_title.ChecklistTitle:first span").text()));
        $("#PublishTemplate_Language").val(jQuery.trim($(".Language").text()));
        jQuery.trim($(".Namespace").text()).indexOf("User:") != -1 ? $("#PublishTemplate_Library").val("My") : $("#PublishTemplate_Library").val(jQuery.trim($(".Namespace").text()));
        // Css fix
        $("#TB_window .subcolumns").css("overflow", "hidden");
        SwissChecklist.ChecklistController.NewChecklist.UpdateURLForPublish();
        return false;
    });

    // Radiobuttons
    $(".checklistpublish_option input:radio").click(function() {
        SwissChecklist.ChecklistController.Publish.DisableAllFields();
        SwissChecklist.ChecklistController.Publish.EnableFields($(this).parents("div:first"));
        SwissChecklist.ChecklistController.NewChecklist.UpdateURLForPublish();
    });

    // Next button
    $("#ChecklistPublish_Forward").click(function() {
        SwissChecklist.ChecklistController.Publish.ResetPublishStep2();
        $("#Publish_Step1").hide();
        $("#Publish_Step2").show();
        if ($("#CopyChangesToTemplateButton").is(":checked")) {
            SwissChecklist.ChecklistController.Publish.SetPublishStep2Mode("OverwriteTemplate");
        } else if ($("#CopyChangesToNewTemplateButton").is(":checked")) {
            SwissChecklist.ChecklistController.Publish.SetPublishStep2Mode("CreateNewTemplate");
        }
        else {
            // Fix if the user didn't select an option
            $("#Publish_Step1").show();
        }
        return false;
    });

    //Backbutton
    $(".ChecklistPublish_Back").click(function() {
        $("#Publish_Step1").show();
        $("#Publish_Step2").hide();
    });

    $("#PublishChecklist_NewTitle").keyup(function() {
        SwissChecklist.ChecklistController.NewChecklist.UpdateURLForPublish();
    });

    $("#PublishTemplate_Library").change(function() {
        SwissChecklist.ChecklistController.NewChecklist.UpdateURLForPublish();
    });
    $("#PublishTemplate_Language").change(function() {
        SwissChecklist.ChecklistController.NewChecklist.UpdateURLForPublish();
    });

    // Init Tags
    SwissChecklist.ChecklistController.Publish.InitCategories();

    $(".CategoryListEdit ul li input").click(function() {
        SwissChecklist.ChecklistController.Publish.ToggleCategory($(this));
    });

    // Save
    $(".PublishChecklist").click(function() {
        // Overwrite Tags from template
        SwissChecklist.ChecklistController.OverwriteChecklistTags();
        // Overwrite Description
        SwissChecklist.ChecklistController.OverwriteTemplateHeaderDescription();

        // Save whole thing
        if ($("#CopyChangesToTemplateButton").is(":checked"))
            SwissChecklist.ChecklistController.SaveChecklistForPublish($(".ChecklistContainer:first"), false, "TemplateUpdateFromChecklist", SwissChecklist.ChecklistController.Publish.PublishSucessed, SwissChecklist.ChecklistController.Publish.PublishError);
        else {
            SwissChecklist.ChecklistController.OverwriteChecklistMetaData();
            SwissChecklist.ChecklistController.SaveChecklistForPublish($(".ChecklistContainer:first"), false, "TemplateNewFromChecklist", SwissChecklist.ChecklistController.Publish.PublishSucessed, SwissChecklist.ChecklistController.Publish.PublishError);
        }

        $("#Publish_Step2").hide();
        $("#Publish_Step3").show();

        $("#ChecklistManagement").tabs('select', 0);

        var UserName = $("#ChecklistPublish_Username").text();

        var Namespace = $.trim($.trim($(".Namespace:first").text().toLowerCase()));
        if (Namespace.toLowerCase() == "my")
            Namespace = "user:" + UserName;
        if (Namespace.toLowerCase() == "public")
            Namespace = "";
        var NamespaceForLink = Namespace != "" ? Namespace + ":" : Namespace;
        var Link = "http://swisschecklist.com/" + $.trim($(".Language:first").text().toLowerCase()) + "/" + NamespaceForLink + $.trim($(".ChecklistKey:first").text().toLowerCase());
        Link = Link.toLowerCase();
        Link = Link.replace("user_", "user:");
        var ChangeLink = "http://swisschecklist.com/Default.aspx?tabid=87&Lang=" + $.trim($(".Language:first").text().toLowerCase()) + "&Checklist=" + $.trim($(".ChecklistKey:first").text().toLowerCase()) + "&ns=" + Namespace + "&mode=edit";
        ChangeLink = ChangeLink.toLowerCase();
        $("#spanTemplateLink").attr("href", Link);
        $("#spanTemplateLink").text(Link);
        $("#spanTemplateName").text($.trim($(".checklist_title.ChecklistTitle:first span").text()));
        $("#spanTemplateLinkEdit").attr("href", ChangeLink);
        $("#spanTemplateLinkEdit2").attr("href", ChangeLink);
        return false;
    });

    // Delete code
    $(".TemplateDeleteButton").click(function() {
        tb_show(" ", "#TB_inline?height=300&width=600&inlineId=TemplateDelete", false);
        $("#DeleteChecklistPanel").show();
        $("#DeleteChecklistPanelRequested").hide();
        $(".SendImage").hide();
        $(".DeleteReasonTitleIsEmpty").hide();
        return false;
    });

    $(".DeleteCancel").click(function() {
        tb_remove();
        return false;
    });

    $(".DeleteRequest").click(function() {
        SwissChecklist.ChecklistController.Delete.SendDeleteRequest();
    });



});

SwissChecklist.ChecklistController.Delete.SendDeleteRequest = function() {
    var Reason = $(".DeleteReasonText").val();

    if (Reason == "") {
        $(".DeleteReasonTitleIsEmpty").show();
    } else {
        $(".SendImage").show();

        // Get ChecklistInformations
        var ChecklistKey = $.trim($(".ChecklistKey:first").html());
        var ChecklistLanguage = $.trim($(".Language:first").html());
        var ChecklistNamespace = $.trim($(".Namespace:first").html());

        ChecklistNamespace = ChecklistNamespace.replace("User_", "User:");

        var SaveData = JSON.stringify({ 'ChecklistKey': ChecklistKey, 'ChecklistLanguage': ChecklistLanguage, 'ChecklistNamespace': ChecklistNamespace, 'Reason': Reason });
        SwissChecklist.Ajax.AjaxRequest("/SwissChecklist/SwissChecklistServices.asmx/SendTemplateDeletationRequest", SaveData, SwissChecklist.ChecklistController.Delete.DeleteRequestSended, SwissChecklist.ChecklistController.Delete.DeleteRequestFailed);
    }
}

SwissChecklist.ChecklistController.Delete.DeleteRequestSended = function(msg) {
    if (msg.d == "True") {
        $("#DeleteChecklistPanel").hide();
        $("#DeleteChecklistPanelRequested").show();
    } else {
        alert("Could not send mail");
    }
}
SwissChecklist.ChecklistController.Delete.DeleteRequestFailed = function(xhr, status, error) {
    alert("Could not send mail: " + xhr.responseText);
}

SwissChecklist.ChecklistController.Publish.DisableAllFields = function() {
    $("input, select", $(".checklistpublish_option")).not(":radio").disable();
    $(".checklistpublish_option").removeClass("active");
}

SwissChecklist.ChecklistController.Publish.EnableFields = function(Container) {
    $("input, select", Container).enable();
    $(Container).addClass("active");
}

SwissChecklist.ChecklistController.Publish.ResetPublishStep2 = function() {
    $("#Publish_Step2").children("div").css("display", "none");
}

SwissChecklist.ChecklistController.Publish.SetPublishStep2Mode = function(Mode) {
    // Set Values
    $(".Publish_SetDescription_Input").val($(".ChecklistNotesTextBox:first").val());

    if (Mode == "OverwriteTemplate") {
        $("#Publish_OverwriteTemplate_Intro").css("display", "block");
        $("#Publish_SetDescription").css("display", "block");
        $("#Publish_SetTags").css("display", "block");
        $("#ChecklistPublish_Save").css("display", "block");
    } else if (Mode == "CreateNewTemplate") {
        $("#Publish_CreateTemplate_Intro").css("display", "block");
        $("#Publish_SetDescription").css("display", "block");
        $("#Publish_SetTags").css("display", "block");
        $("#ChecklistPublish_Save").css("display", "block");
    }
}

// Categories
SwissChecklist.ChecklistController.Publish.InitCategories = function() {
    var TagsAsString = $(".ChecklistPublish_TagInput").val();
    $("li", ".CategoryListEdit").each(function(i) {
        var CategoryCheckbox = $("input", this);
        if (TagsAsString.indexOf(CategoryCheckbox.attr("name")) != -1) {
            CategoryCheckbox.attr("checked", "checked");
            $(".ChecklistPublish_Categories").text($(".ChecklistPublish_Categories").text() + " " + CategoryCheckbox.attr("name"));
            // remove from textbox
            var reg = new RegExp(CategoryCheckbox.attr("name"), "g");
            TagsAsString = TagsAsString.replace(reg, "");
            TagsAsString = TagsAsString.replace(/^\s+|\s+$|\s+/g, " ");
        }
    });
    if (typeof (TagsAsString) != "undefined") {

        var reg = new RegExp("scl:deleted", "g");
        TagsAsString = TagsAsString.replace(reg, "");
        TagsAsString = TagsAsString.replace(/^\s+|\s+$|\s+/g, " ");
        //$(".TagsChangeTextbox").val(TextFieldValue);

        var reg = new RegExp("scl:draft", "g");
        TagsAsString = TagsAsString.replace(reg, "");
        TagsAsString = TagsAsString.replace(/^\s+|\s+$|\s+/g, " ");
        //$(".TagsChangeTextbox").val(TextFieldValue);

        $(".ChecklistPublish_TagInput").val(TagsAsString);
    }
}

SwissChecklist.ChecklistController.Publish.ToggleCategory = function(Container) {
    if ($(Container).is(":checked")) {
        SwissChecklist.ChecklistController.Publish.AddCategory($(Container).attr("name"));
    } else {
        SwissChecklist.ChecklistController.Publish.RemoveCategory($(Container).attr("name"));
    }
}

SwissChecklist.ChecklistController.Publish.RemoveCategory = function(Category) {
    var CategoriesAsString = $.trim($(".ChecklistPublish_Categories").text());
    var reg = new RegExp(Category, "g");
    CategoriesAsString = CategoriesAsString.replace(reg, "");
    CategoriesAsString = CategoriesAsString.replace(/^\s+|\s+$|\s+/g, " ");
    $(".ChecklistPublish_Categories").text(CategoriesAsString);
}

SwissChecklist.ChecklistController.Publish.AddCategory = function(Category) {
    $(".ChecklistPublish_Categories").text($(".ChecklistPublish_Categories").text() + " " + Category);
}

SwissChecklist.ChecklistController.Publish.PublishSucessed = function(Message) {
    $("#ChecklistPublish_SaveStatus .LoadingPanel").css("display", "none");
    $("#ChecklistPublish_SaveStatus .ChecklistSaveCompleted").css("display", "block");
    $("#ChecklistPublish_SucessedMessage").css("display", "block");
}

SwissChecklist.ChecklistController.Publish.PublishError = function(xhr, status, error) {
    //alert(xhr.responseText);
    SwissChecklist.UI.ShowDialog($("<span>", {
        text: xhr.responseText
    }), { title: "AJAX Error" });
};

SwissChecklist.UI.ShowDialog = function(element, options) {
    $(element).dialog(options);
}