﻿var gdWveGeodeClass = 'gdWveGeode';
var gdContentTypeAttributeName = 'gdContentType';
var gdLocationIdAttributeName = 'gdLocationId';
var gdTargetIsEmptyAttributeName = 'gdTargetIsEmpty';
var gdTargetTitleAttributeName = 'gdTargetTitle';
var gdTargetIdAttributeName = 'gdTargetId';
var gdTargetTypeAttributeName = 'gdTargetType';
var gdMenuIdAttributeName = 'gdMenuId';
var gdButtonClass = 'gd-button';
var gdHoverButton = 'hover-button';
var gdButtonCancelClass = 'gd-button-cancel';
var gdButtonSubmitClass = 'gd-button-submit';
var gdRootUrl = '';

var gdAjaxResults = {
    OK: 'OK',
    Error: 'Error'
};

var gdDisplayDurations = {
    OneSecond: 1000,
    TwoSeconds: 2000,
    ThreeSeconds: 3000
};

var gdShowStates = {
    Visible: 'Visible',
    Hidden: 'Hidden',
    Hiding: 'Hiding',
    Showing: 'Showing'
};

var gdTargetTypes = {
    Page: 'Page',
    Section: 'Section',
    Menu: 'Menu',
    Link: 'Link',
    Content: 'Content'
};

var gdEffectSpeeds = {
    Default: 500,
    Fast: 300,
    Slow: 900,
    Instant: 1
};

var gdEffects = {
    Blind: 'blind',
    Slide: 'slide'
};

var gdOpacityLevels = {
    PartiallyFaded: 0.50,
    Solid: 1.0,
    NearInvisible: 0.25,
    Invisible: 0.0
};

var gdDialogActions = {
    Cancel: 'Cancel',
    Submit: 'Submit',
    Chain: 'Chain'
};

var gdMenuIdCounter = 0;

var gdDialogActionCallbacks = [];

function registerDialogActionCallback(callbackFunction)
{
    gdDialogActionCallbacks.push(callbackFunction);
}

function notifyDialogActionListeners(dialogTitle, dialogAction, buttonClicked, nextAction) {
    for (var i = 0; i < gdDialogActionCallbacks.length; i++) {
        var callback = gdDialogActionCallbacks[i];
        if (callback)
            callback(dialogTitle, dialogAction, buttonClicked, nextAction);
    }
}

function setupTabs() {
    $('.tabs').tabs();
    $('.tabs').tabs("option", "fx", { opacity: "toggle" });
}

function getDefaultNotificationOptions(notificationOptions) {
    var notificationOptions = jQuery.extend(
        {
            successMessage: 'Done.',
            successOptions: {},
            errorMessage: 'There was a problem processing your request.',
            errorOptions: {}
        },
        notificationOptions);
    return notificationOptions;
}

function initializeButtons() {
    $('.' + gdButtonClass).hover(
	    function () {
	        $(this).addClass("ui-state-hover");
	    },
	    function () {
	        $(this).removeClass("ui-state-hover");
	    }
    );
    $('.' + gdHoverButton).hover(
	    function () {
	        $(this).addClass("ui-state-hover");
	    },
	    function () {
	        $(this).removeClass("ui-state-hover");
	    }
    );
}

function initializeTooltips() {
    /* CONFIG */
    xOffset = 10;
    yOffset = 30;
    // these 2 variable determine popup's distance from the cursor
    // you might want to adjust to get the right result
    /* END CONFIG */
    $("a.tooltip").hover(function (e) {
        this.t = this.title;
        this.title = "";
        $("body").append("<p id='tooltip' class='tooltip'>" + this.t + "</p>");
        $("#tooltip")
		.css("top", (e.pageY - yOffset) + "px")
		.css("left", (e.pageX + xOffset) + "px")
		.fadeIn("fast");
    },
    function () {
        this.title = this.t;
        $("#tooltip").remove();
    });
    $("a.tooltip").mousemove(function (e) {
        $("#tooltip")
	    .css("top", (e.pageY - yOffset) + "px")
	    .css("left", (e.pageX + xOffset) + "px");
    });
};

function getModalDialog(url, options) {
    options = options || {};
    hasSession(function () {
        $.ajax(
        {
            url: url,
            global: false,
            cache: false,
            success: function (data) {
                showModalDialog(data, url, options);
            }
        });
        //$.get(url, function(data) {
        // showModalDialog(data, url, options);
        //});
    });
}

function showModalDialog(data, url, options) {
    // ensure that options has an object value
    options = options || {};

    $("#modalDialog").html('');
    var resultDiv = $("#modalDialog").html(data);

    $(resultDiv).dialog({
        autoOpen: false,
        height: options.height,
        width: options.width,
        modal: true,
        show: gdEffects.Blind,
        hide: gdEffects.Blind,
        title: options.title,
        open: function (event, ui) {
            if (options.onBeforeOpen) { options.onBeforeOpen(); }
        },
        close: function (event, ui) {
            $("#modalDialog")
                .dialog('destroy')
            // clear internal contents of dialog
                .html('');
            if (options.onAfterClose) { options.onAfterClose(); }
        }
    });

    $(resultDiv).dialog('open');
    setupTabs();
    attachButtonCancel(resultDiv, url, options);
    attachButtonSubmit(resultDiv, url, options);
    initializeButtons();
    initializeTooltips();
}

function refreshModalDialog(data, url, options) {
    $("#modalDialog").html('');
    var resultDiv = $("#modalDialog").html(data);

    setupTabs();
    initializeButtons();
    attachButtonCancel(resultDiv, url, options);
    attachButtonSubmit(resultDiv, url, options);
    initializeTooltips();
}

function getPopUp(url, options) {
    options = options || {};
    hasSession(function () {
        $.get(url, function (data) {
            showPopUp(data, url, options);
        });
    });
}

function showPopUp(data, url, options) {
    // ensure that options has an object value
    options = options || {};

    options.cancelFunction = options.cancelFunction || function () { $(this).dialog('close'); };
    options.okFunction = options.okFunction || function () { $(this).dialog('close'); };

    options.okText = options.okText || 'Ok';
    options.cancelText = options.cancelText || 'Cancel';
    options.title = options.title || 'Select';

    options.buttons = options.buttons || {};
    options.buttons[options.cancelText] = options.cancelFunction;
    options.buttons[options.okText] = options.okFunction;

    $("#popUp").html('');
    var resultDiv = $("#popUp").html(data);

    $(resultDiv).dialog({
        autoOpen: false,
        height: options.height,
        width: options.width,
        modal: true,
        show: gdEffects.Blind,
        hide: gdEffects.Blind,
        title: options.title,
        buttons: options.buttons,
        open: function (event, ui) {
            if (options.onBeforeOpen) { options.onBeforeOpen(); }
        },
        close: function (event, ui) {
            $("#popUp").dialog('destroy');
            if (options.onAfterClose) { options.onAfterClose(); }
        }
    });

    $(resultDiv).dialog('open');
    setupTabs();
    attachButtonCancel(resultDiv, url, options);
    attachButtonSubmit(resultDiv, url, options);
    initializeButtons();
    initializeTooltips();
}

function attachButtonCancel(selector, url, options) {
    // wire up cancel button to close the modal dialog
    $('.' + gdButtonCancelClass).click(function () {
        if (options.cancelFunction) options.cancelFunction();
        $(selector).dialog('close');
        notifyDialogActionListeners(options.title, gdDialogActions.Cancel, $(this).text());
    });
}

function attachButtonSubmit(selector, url, options) {
    options = options || {};
    options.notificationOptions = getDefaultNotificationOptions(options.notificationOptions);
    var submitType;

    $('.' + gdButtonSubmitClass, selector.selector).click(function () {
        var buttonText = $(this).text();
        submitType = $(this).attr("name");
        $(this).attr("disabled", "disabled");
        $('.ckeditor').each(function () {
            var name = $(this).attr('name');
            var getDataCmd = 'CKEDITOR.instances.' + name + '.getData();';
            var editorData = eval(getDataCmd);
            var encoded = CKEDITOR.tools.htmlEncode(editorData);
            $(this).val(encoded);
        });

        if ((submitType != null) && (submitType.length > 0)) {
            if (url.indexOf('?') > 0) {
                url = url + '&submitType=' + submitType;
            }
            else {
                url = url + '?submitType=' + submitType;
            }
        }

        var successCallback = function (msg) {
            if (msg == null || msg.length == 0) {
                $(selector).dialog('close');
                notifyDialogActionListeners(options.title, gdDialogActions.Submit, buttonText);

                if (options.reloadOnSuccess) {
                    reloadPageOnAjaxSuccess(msg);
                } else if (options.notificationOptions.successMessage) {
                    $.jGrowl(options.notificationOptions.successMessage, options.notificationOptions.successOptions);
                }
                return false;
            }
            else if ($(msg).attr('id') === 'redirect') {
                var redirectUrl = $(msg).text();
                top.location = redirectUrl;
                return false;
            }
            else if ($(msg).attr('id') === 'actionchain') {
                var nextaction = $(msg).html();
                $(selector).dialog('close');
                var targetType = $(nextaction).attr('targetType');
                var targetAction = $(nextaction).attr('targetAction');
                var url = $(nextaction).attr('href');
                notifyDialogActionListeners(options.title, gdDialogActions.Chain, buttonText, targetType + '/' + targetAction);
                var targetTypeActionHandler = gdWveAction[targetType];
                if (targetTypeActionHandler) {
                    var delay = function () { doAction(targetTypeActionHandler, targetAction, url, targetType, options); };
                    setTimeout(delay, 2000);
                }
            }
            else { refreshModalDialog(msg, this.url, options); return false; }
        };

        var form = $(this).parents("form")[0];

        if ($("input:file:enabled", form).length == 0 || $("input:file:enabled", form).val().length == 0) {
            var formContents = $(form).serialize();
            $.ajax({
                url: url,
                global: false,
                cache: false,
                type: "POST",
                data: formContents,
                dataType: "html",
                success: successCallback,
                error: function (msg) {
                    refreshModalDialog(msg, this.url, options);
                    if (options.notificationOptions.errorMessage) {
                        $.jGrowl(options.notificationOptions.errorMessage, options.notificationOptions.errorOptions);
                    }
                    return false;
                }
            });
        }
        else {
            form.action = url;

            $("#success_script").data("callback", successCallback);

            form.submit();
        }
    });
}

function doAction(actionHandler, action, actionUrl, targetType, options) {
    var actionMethod = actionHandler[action];
    if (actionMethod) {
        actionMethod(actionUrl, options);
    }
    else {
        alert('No action handler was defined for ' + targetType + '/' + action + '.');
    }
}

function delayExecution(functionCall) {
    var t = setTimeout(functionCall, 5000);
}

function getConfirmation(options) {
    hasSession(function () {
        options = options || {};

        options.height = options.height || 100;
        options.width = options.width || 300;

        options.cancelFunction = options.cancelFunction || function () { $(this).dialog('close'); };
        options.okFunction = options.okFunction || function () { $(this).dialog('close'); };

        options.confirmationMessage = options.confirmationMessage || 'Are you sure?';
        options.okText = options.okText || 'OK';
        options.cancelText = options.cancelText || 'Cancel';
        options.title = options.title || 'Please confirm...';

        options.buttons = options.buttons || {};

        options.buttons[options.okText] = options.okFunction;
        options.buttons[options.cancelText] = options.cancelFunction;

        if (!options.html) {
            options.html = '<div class="confirmationMessage"><span>' + options.confirmationMessage + '</span></div>';
        }

        $(options.html).dialog(
            {
                autoOpen: true,
                height: options.height,
                width: options.width,
                modal: true,
                show: gdEffects.Blind,
                hide: gdEffects.Blind,
                title: options.title,
                buttons: options.buttons,
                open: function () {
                    $(':button').addClass(gdButtonClass);
                    initializeButtons();
                }
            }
        );
    });
}

function showAcknowledgementMessage(message, options) {
    options = options || {};

    options.sticky = options.stick || false;
    options.life = options.life || gdDisplayDurations.TwoSeconds;

    message = message || 'Done.';

    $.jGrowl(options.message, options);
}

function reloadPageOnAjaxSuccess(data) {
    if (data == null || data.length == 0) {
        reloadCurrentPage();
    }
    else {
        $.jGrowl('There was a problem processing your request.');
    }
}

function hasSession(successCallback) {
    $.ajax({
        url: gdRootUrl + '/page/HasSession',
        global: false,
        cache: false,
        data: {},
        success: function (msg, textStatus, jqXHR) { // get the context menu data
            if (msg == null || msg.length == 0 || jqXHR.responseText == null || jqXHR.responseText.length == 0 ) {
                successCallback();
            }
            else {
                var redirectUrl = gdRootUrl + '/Account/Login/SessionExpired';
                top.location = redirectUrl;
            }
        }
    });
}

function reloadCurrentPage() { window.location.reload(true); }

function processAjaxGetRequest(url, successCallback) {
    hasSession(function () {
        $.ajax({
            url: url,
            global: false,
            cache: false,
            data: {},
            success: successCallback
        });
    });
}

function processGetRequest(url) {
    window.location = url;
}

var gdPopUpAction = {
    pickUrl: function (url, targetSelector, resolveUrl) {
        getPopUp(url + '?href=' + encodeURI($('#' + targetSelector).val()),
        {
            targetSelector: targetSelector,
            title: 'Select a Link',
            height: 440,
            width: 625,
            okText: 'Select Link',
            cancelText: 'Cancel',
            okFunction: function () {
                var t = $('#selectedLinkType').val();
                switch (t) {
                    case '0':
                        var pageId = $('#SelectedSiteMapNode2').val();
                        //get the resolved page url
                        $.get(resolveUrl + "/" + pageId + "/0", function (resolvedUrl) {
                            $('#' + targetSelector).val(resolvedUrl);
                        });
                        $(this).dialog('close');
                        break;
                    case '1':
                        var docId = $('#selectedDocument').val();
                        //get the doc url
                        $.get(resolveUrl + "/" + docId + "/1", function (resolvedUrl) {
                            $('#' + targetSelector).val(resolvedUrl);
                        });
                        $(this).dialog('close');
                        break;
                    case '2':
                        var externalUrl = $('#ExternalLinkTargetUrl').val();
                        $('#' + targetSelector).val(externalUrl);
                        $(this).dialog('close');
                        break;
                    case '3':
                        break;
                }
            }
        })
    },
    insertLink: function (url, linkText, selectLinkCallback, cancelCallback) {
        getPopUp(url,
        {
            title: 'Select a Link',
            height: 440,
            width: 625,
            okText: 'Select Link',
            cancelFunction: function () { cancelCallback(); $(this).dialog('close'); },
            cancelText: 'Cancel',
            okFunction: function () {
                var t = $('#selectedLinkType').val();
                var target = $('#Target').val();
                switch (t) {
                    case '0':
                        var pageId = $('#SelectedSiteMapNode2').val();
                        var linkHtml = '<a href="' + gdRootUrl + '/Page/Get/' + pageId + '" target="' + target + '">' + linkText + '</a>';
                        selectLinkCallback(linkHtml);
                        $(this).dialog('close');
                        break;
                    case '1':
                        var docId = $('#selectedDocument').val();
                        var linkHtml = '<a href="' + gdRootUrl + '/Document/Get/' + docId + '" target="' + target + '">' + linkText + '</a>';
                        selectLinkCallback(linkHtml);
                        $(this).dialog('close');
                        break;
                    case '2':
                        var externalUrl = $('#ExternalLinkTargetUrl').val();
                        var linkHtml = '<a href="' + externalUrl + '" target="' + target + '">' + linkText + '</a>';
                        selectLinkCallback(linkHtml);
                        $(this).dialog('close');
                        break;
                    case '3':
                        break;
                }
            }
        })
    },
    insertImage: function (url, altText, selectImageCallback, cancelCallback) {
        getPopUp(url,
        {
            title: 'Select an image',
            height: 440,
            width: 625,
            okText: 'Select Image',
            cancelFunction: function () { cancelCallback(); $(this).dialog('close'); },
            cancelText: 'Cancel',
            okFunction: function () {
                var t = $('#selectedLinkType').val();
                switch (t) {
                    case '0':
                        $(this).dialog('close');
                        break;
                    case '1':
                        var docId = $('#selectedDocument').val();
                        var linkHtml = '<img src="' + gdRootUrl + '/Document/Get/' + docId + '" alt="' + altText + '" />';
                        selectImageCallback(linkHtml);
                        $(this).dialog('close');
                        break;
                    case '2':
                        var externalUrl = $('#ExternalLinkTargetUrl').val();
                        var linkHtml = '<img src="' + externalUrl + '" alt="' + altText + '" />';
                        selectImageCallback(linkHtml);
                        $(this).dialog('close');
                        break;
                    case '3':
                        $(this).dialog('close');
                        break;
                }
            }
        })
    }
}

var gdWveAction = {
    Page: {
        create: function (url) {
            getModalDialog(url,
                {
                    onBeforeOpen: function () {
                        setupTabs();
                    },
                    title: 'Create A New Page',
                    height: 700,
                    width: 575
                }
            );
        },
        copy: function (url) {
            getModalDialog(url,
                {
                    onBeforeOpen: function () {
                        setupTabs();
                    },
                    title: 'Page Copy',
                    height: 700,
                    width: 575
                }
            );
        },
        deleteFromSystem: function (url) {
            getConfirmation(
                {
                    title: 'Delete Page',
                    confirmationMessage: 'Are you sure you want to delete this page from the system?<br />Note: The deletion of this page will not be completed until the page is published or approved in workflow',
                    height: 200,
                    width: 500,
                    okText: 'Yes, delete the page',
                    cancelText: 'Don\'t delete the page',
                    okFunction: function () {
                        $.get(url, {}, reloadPageOnAjaxSuccess);
                    }
                }
            );
        },
        openPage: function (url) {
            getModalDialog(url,
                {
                    title: 'Open a Page',
                    height: 375,
                    width: 400
                }
            );
        },
        getProperties: function (url) {
            getModalDialog(url,
                {
                    onBeforeOpen: function () {
                        setupTabs();
                    },
                    title: 'Page Properties',
                    height: 700,
                    width: 575
                }
            );
        },
        submitToWorkflow: function (url) {
            getModalDialog(url,
                {
                    title: 'Submit To Workflow',
                    height: 250,
                    width: 520,
                    notificationOptions: {
                        successMessage: 'Page submitted to workflow'
                    }
                }
            );
        },
        rejectInWorkflow: function (url) {
            getModalDialog(url,
                {
                    title: 'Reject Page',
                    height: 270,
                    width: 500,
                    reloadOnSuccess: true
                }
            );
        },
        approveInWorkflow: function (url) {
            getModalDialog(url,
                {
                    title: 'Approve Page',
                    height: 300,
                    width: 525
                }
            );
        },
        publish: function (url) {
            //processAjaxGetRequest(url, reloadPageOnAjaxSuccess);
            processGetRequest(url);
        }
    },
    Section: {
        create: function (url) {
            getModalDialog(url,
                {
                    onBeforeOpen: function () {
                        setupTabs();
                    },
                    title: 'Create A New Section',
                    height: 580,
                    width: 700,
                    reloadOnSuccess: true
                }
            );
        },
        assignContent: function (url) {
            getModalDialog(url,
                {
                    onBeforeOpen: function () { },
                    title: 'Assign Existing Content',
                    height: 630,
                    width: 600,
                    reloadOnSuccess: true
                }
            );
        },
        assign: function (url) {
            getModalDialog(url,
                {
                    onBeforeOpen: function () {
                    },
                    title: 'Assign Section',
                    height: 240,
                    width: 420,
                    reloadOnSuccess: true
                }
            );
        },
        createContent: function (url) {
            getModalDialog(url,
                {
                    onBeforeOpen: function () {
                        setupTabs();
                    },
                    title: 'Create New Content',
                    height: 610,
                    width: 700,
                    reloadOnSuccess: true
                }
            );
        },
        deleteFromSystem: function (url) {
            getConfirmation(
                {
                    title: 'Delete Section from System',
                    confirmationMessage: 'Are you sure you want to delete this section from the system?',
                    height: 120,
                    width: 320,
                    okText: 'Yes, delete the section',
                    cancelText: 'Don\'t delete the section',
                    okFunction: function () {
                        $.get(url, {}, reloadPageOnAjaxSuccess);
                    },
                    reloadOnSuccess: true
                }
            );
        },
        removeFromPage: function (url) {
            getConfirmation(
                {
                    title: 'Remove Section from Page',
                    confirmationMessage: 'Are you sure you want to remove this section from the page?',
                    height: 100,
                    width: 320,
                    cancelText: 'Don\'t remove the section',
                    okText: 'Yes, remove the section',
                    okFunction: function () {
                        $.get(url, {}, reloadPageOnAjaxSuccess);
                    },
                    reloadOnSuccess: true
                }
            );
        },
        getProperties: function (url) {
            getModalDialog(url,
                {
                    onBeforeOpen: function () {
                        setupTabs();
                    },
                    title: 'Section Properties',
                    height: 600,
                    width: 420,
                    reloadOnSuccess: true
                }
            );
        }
    },
    Content: {
        exportResponses: function (url) {
            processGetRequest(url);
        },
        buildForm: function (url) {
            getModalDialog(url,
                {
                    title: 'Build Form',
                    height: 580,
                    width: 700,
                    onAfterClose: function () {
                        reloadPageOnAjaxSuccess(null);
                    }
                }
            );
        },
        checkOut: function (url) {
            getModalDialog(url,
                {
                    onBeforeOpen: function () {
                        setupTabs();
                    },
                    title: 'Check Out Content',
                    height: 250,
                    width: 375,
                    reloadOnSuccess: true
                }
            );
        },
        checkIn: function (url) {
            getModalDialog(url,
                {
                    onBeforeOpen: function () {
                        setupTabs();
                    },
                    title: 'Check In Content',
                    height: 250,
                    width: 375,
                    reloadOnSuccess: true
                }
            );
        },
        undoCheckOut: function (url) {
            processAjaxGetRequest(url, reloadPageOnAjaxSuccess);
        },
        checkOutAndEdit: function (url) {
            getModalDialog(url,
                {
                    onBeforeOpen: function () {
                        setupTabs();
                    },
                    title: 'Check Out Content',
                    height: 250,
                    width: 320,
                    reloadOnSuccess: false
                }
            );
        },
        edit: function (url) {
            getModalDialog(url,
                {
                    onBeforeOpen: function () {
                        setupTabs();
                    },
                    title: 'Edit Content',
                    height: 735,
                    width: 870,
                    reloadOnSuccess: true
                }
            );
        },
        deleteFromSystem: function (url) {
            getConfirmation(
                {
                    title: 'Delete Content from System',
                    confirmationMessage: 'Are you sure you want to delete this content from the system?',
                    height: 100,
                    width: 320,
                    okText: 'Yes, delete the content',
                    cancelText: 'Don\'t delete the content',
                    okFunction: function () {
                        $.get(url, {}, reloadPageOnAjaxSuccess);
                    }
                }
            );
        },
        undodelete: function (url) {
            getConfirmation(
                {
                    title: 'Undo Delete',
                    confirmationMessage: 'Are you sure you want to undo delete for this piece of content?',
                    height: 100,
                    width: 400,
                    okText: 'Yes, undo delete for this content',
                    cancelText: 'Don\'t undo delete',
                    okFunction: function () {
                        $.get(url, {}, reloadPageOnAjaxSuccess);
                    }
                }
            );
        },
        moveTop: function (url) {
            processAjaxGetRequest(url, reloadPageOnAjaxSuccess);
        },
        moveUp: function (url) {
            processAjaxGetRequest(url, reloadPageOnAjaxSuccess);
        },
        moveDown: function (url) {
            processAjaxGetRequest(url, reloadPageOnAjaxSuccess);
        },
        moveBottom: function (url) {
            processAjaxGetRequest(url, reloadPageOnAjaxSuccess);
        },
        removeFromSection: function (url) {
            getConfirmation(
                {
                    title: 'Remove Content from Section',
                    confirmationMessage: 'Are you sure you want to remove this content from the section?',
                    height: 100,
                    width: 320,
                    okText: 'Yes, remove the content',
                    cancelText: 'Don\'t remove the content',
                    okFunction: function () {
                        $.get(url, {}, reloadPageOnAjaxSuccess);
                    }
                }
            );
        },
        getProperties: function (url) {
            getModalDialog(url,
                {
                    onBeforeOpen: function () {
                        setupTabs();
                    },
                    title: 'Content Properties',
                    height: 600,
                    width: 420,
                    reloadOnSuccess: true
                }
            );
        },
        submitToWorkflow: function (url) {
            getModalDialog(url,
                {
                    title: 'Submit To Workflow',
                    height: 300,
                    width: 500,
                    reloadOnSuccess: true
                }
            );
        },
        rejectInWorkflow: function (url) {
            getModalDialog(url,
                {
                    title: 'Reject Content',
                    height: 270,
                    width: 500,
                    reloadOnSuccess: true
                }
            );
        },
        approveInWorkflow: function (url) {
            getModalDialog(url,
                {
                    title: 'Approve Content',
                    height: 250,
                    width: 470,
                    reloadOnSuccess: true
                }
            );
        },
        publish: function (url) {
            processAjaxGetRequest(url, reloadPageOnAjaxSuccess);
        }
    },
    Menu: {
        createMenu: function (url) {
            getModalDialog(url,
                {
                    title: 'Create a new menu',
                    height: 380,
                    width: 700
                }
            );
        },
        assignMenu: function (url) {
            getModalDialog(url,
                {
                    title: 'Assign Menu',
                    height: 240,
                    width: 420,
                    reloadOnSuccess: true
                }
            );
        },
        assignLink: function (url) {
            getModalDialog(url,
                {
                    onBeforeOpen: function () {
                        setupTabs();
                    },
                    title: 'Assign Link',
                    height: 545,
                    width: 700,
                    reloadOnSuccess: true
                }
            );
        },
        deleteFromSystem: function (url) {
            getConfirmation(
                {
                    title: 'Delete Menu from System',
                    confirmationMessage: 'Are you sure you want to delete this menu from the system?',
                    height: 120,
                    width: 400,
                    okText: 'Yes, delete the menu',
                    cancelText: 'Don\'t delete the menu',
                    okFunction: function () {
                        $.get(url, {}, reloadPageOnAjaxSuccess);
                    }
                }
            );
        },
        deleteFromPage: function (url) {
            getConfirmation(
                {
                    title: 'Remove Menu from Page',
                    confirmationMessage: 'Are you sure you want to remove this menu from the page?',
                    height: 120,
                    width: 400,
                    okText: 'Yes, remove the menu',
                    cancelText: 'Don\'t remove the menu',
                    okFunction: function () {
                        $.get(url, {}, reloadPageOnAjaxSuccess);
                    }
                }
            );
        },
        getProperties: function (url) {
            getModalDialog(url,
                {
                    onBeforeOpen: function () {
                        setupTabs();
                    },
                    title: 'Menu Properties',
                    height: 500,
                    width: 400
                }
            );
        }
    },
    Link: {
        moveTop: function (url) {
            processAjaxGetRequest(url, reloadPageOnAjaxSuccess);
        },
        moveUp: function (url) {
            processAjaxGetRequest(url, reloadPageOnAjaxSuccess);
        },
        moveDown: function (url) {
            processAjaxGetRequest(url, reloadPageOnAjaxSuccess);
        },
        moveBottom: function (url) {
            processAjaxGetRequest(url, reloadPageOnAjaxSuccess);
        },
        create: function (url) {
            getModalDialog(url,
                {
                    onBeforeOpen: function () {
                        setupTabs();
                    },
                    title: 'Create A New Link',
                    height: 545,
                    width: 700
                }
            );
        },
        deleteFromSystem: function (url) {
            getConfirmation(
                {
                    title: 'Delete Link from System',
                    confirmationMessage: 'Are you sure you want to delete this link from the system?',
                    height: 120,
                    width: 400,
                    okText: 'Yes, delete the link',
                    cancelText: 'Don\'t delete the link',
                    okFunction: function () {
                        $.get(url, {}, reloadPageOnAjaxSuccess);
                    }
                }
            );
        },
        deleteFromMenu: function (url) {
            getConfirmation(
                {
                    title: 'Remove Link from Menu',
                    confirmationMessage: 'Are you sure you want to remove this link from the menu?',
                    height: 120,
                    width: 400,
                    okText: 'Yes, remove the link',
                    cancelText: 'Don\'t remove the link',
                    okFunction: function () {
                        $.get(url, {}, reloadPageOnAjaxSuccess);
                    }
                }
            );
        },
        getProperties: function (url) {
            getModalDialog(url,
                {
                    onBeforeOpen: function () {
                        setupTabs();
                    },
                    title: 'Link Properties',
                    height: 550,
                    width: 700
                }
            );
        }
    },
    Admin: {
        manageUsers: function (url) {
            getModalDialog(url,
            {
                onBeforeOpen: function () {
                    setupTabs();
                },
                title: 'User List',
                height: 650,
                width: 500
            });
        },
        manageGroups: function (url) {
            getModalDialog(url,
            {
                onBeforeOpen: function () {
                    setupTabs();
                },
                title: 'Group List',
                height: 650,
                width: 500
            });
        },
        workbook: function (url) {
            getModalDialog(url,
            {
                onBeforeOpen: function () {
                    setupTabs();
                },
                title: 'Workbook',
                height: 500,
                width: 500
            });
        },
        redirect: function (url) {
            window.location = url;
        }
    },
    Account: {
        redirect: function (url)  {
            window.location = url;
        }
    }
};

function initializeAjaxProgressIndicator() {
    var ajaxProgress = $('<div id="ajaxBusy" class="centeredImage" />');
    ajaxProgress
        .html('<img src="' + gdRootUrl + '/WVE/images/ajax-loader.gif" />')
        .css(
            {
                display: 'none',
                marginLeft: 'auto',
                marginRight: 'auto',
                position: 'absolute',
                zIndex: 50000,
                top: '0px',
                paddingTop: '10px',
                height: '24px',
                width: '100%',
                textalign: 'center'
            }
        )
        ;
    $('body').append(ajaxProgress);
    $(document)
        .ajaxStart(function () { $('#ajaxBusy').show().animate({ opacity: 1.0 }, gdEffectSpeeds.Slow); })
        .ajaxStop(function () { $('#ajaxBusy').fadeOut(gdEffectSpeeds.Slow); })
        ;
}

/***************************************/

$(document).ready(function () {
    //set the root path
    gdRootUrl = $("#page-command-button").attr("rootUrl");

    if (gdRootUrl == undefined)
        gdRootUrl = '';

    initializeAjaxProgressIndicator();

    //setup the command bar
    $("#page-command-button").click(function () {
        var url = $(this).attr("menuUrl");

        $.ajax({
            url: url,
            cache: false,
            success: function (data) { // get the context menu data
                $('#page-command-button').menu({ content: data, flyOut: true });
            }
        });
    });

    $("#siteTools-command-button").click(function () {
        var url = $(this).attr("menuUrl");

        $.ajax({
            url: url,
            cache: false,
            success: function (data) { // get the context menu data
                $('#siteTools-command-button').menu({ content: data, flyOut: true });
            }
        });
    });

    $("#account-command-button").click(function () {
        var url = $(this).attr("menuUrl");

        $.ajax({
            url: url,
            cache: false,
            success: function (data) { // get the context menu data
                $('#account-command-button').menu({ content: data, flyOut: true });
            }
        });
    });

    $("#file-command-button").click(function () {
        var url = $(this).attr("href");

        var action = $(this).attr('targetAction');
        var actionHandler = gdPopUpAction[action];

        getModalDialog(url,
                {
                    title: 'Document Explorer',
                    height: 830,
                    width: 930
                }
            );

        return false;
    });

    $("#rss-builder-command-button").click(function () {
        var url = $(this).attr("href");

        var action = $(this).attr('targetAction');
        var actionHandler = gdPopUpAction[action];

        getModalDialog(url,
                {
                    title: 'Build RSS Feed',
                    height: 550,
                    width: 700
                }
            );

        return false;
    });

    // setup all the geodes on the page
    $(".gd-geode").click(function () {
        var url = $(this).attr("menuUrl");
        var id = $(this).attr("id");
        var geode = $(this);

        $.ajax({
            url: url,
            global: false,
            cache: false,
            success: function (data) { // get the context menu data
                geode.menu({ content: data, flyOut: true });
            }
        });
    });

    initializeTooltips();
});

