﻿

if (typeof vex !== 'undefined') {
    vex.defaultOptions.className = "vex-theme-flat-attack";
}



function VexDialogAddNiceCloseButton(contentClassName) {
    var closeMe = $("<div class='CloseMe'>X</div>");
    closeMe.click(function () { vex.closeTop(); });

    if (contentClassName !== undefined && contentClassName.length > 0) {
        $("div.vex-content." + contentClassName).append(closeMe);
    } else {
        $("div.vex-content").append(closeMe);
    }
}




function HandleAjaxErrorVex(jqXhr, textStatus, errorThrown) {

    //console.log(jqXhr);

    var n = "\r\n";
    var error = {};

    try {
        error = eval("(" + jqXhr.responseText + ")");
    }
    catch (err) {
        error.Message = "Unable do eval error. " + err.message;
    }



    var message = error.Message + n + n;
    message += textStatus + n + n;
    message += errorThrown + n + n;
    if (error.ExceptionType !== undefined) {
        message += error.ExceptionType + n + n;
    }

    message += "StackTrace:" + n;

    var stackTrace = "-none-";
    if (error.StackTrace !== undefined && error.StackTrace !== null) {
        stackTrace = error.StackTrace.replace(/\r\n/g, "¤");
    }

    $.each(stackTrace.split('¤'), function (index, value) {
        message += "  " + value + n;
    });

    message = "<h1>Systemfeil</h1><pre>" + message + "</pre>";

    if (typeof vex === 'undefined') {
        alert(message);
        return;
    }

    CreateVexErrorDialog(message);
}


function CreateVexErrorDialog(message) {
    vex.dialog.alert({
        unsafeMessage: message,
        overlayClosesOnClick: false,
        contentClassName: 'vex-content fault'
    });
}

function HandleAjaxError(xhr, textStatus, errorThrown) {
    HandleAjaxErrorVex(xhr, textStatus, errorThrown);
}


function ConfirmVex(message, callback, okText, cancleText, contentClassName) {

    var index = "WideNice StandardNice".indexOf(contentClassName);
    var isNiceBox = index >= 0;
    var afterOpenFunc = isNiceBox ? function () { VexDialogAddNiceCloseButton(contentClassName) } : null;

    var okOrg = vex.dialog.buttons.YES.text;
    okText = (okText == null || okText === "" ? okOrg : okText);

    var cancleOrg = vex.dialog.buttons.NO.text;
    cancleText = (cancleText == null || cancleText === "" ? cancleOrg : cancleText);

    vex.dialog.buttons.YES.text = okText;
    vex.dialog.buttons.NO.text = cancleText;

    vex.dialog.confirm({
        unsafeMessage: message,
        contentClassName: 'vex-content ' + contentClassName,
        callback: function (value) {
            if (value) {
                return callback();
            }
            return false;
        },
        afterOpen: afterOpenFunc
    });

    vex.dialog.buttons.YES.text = okOrg;
    vex.dialog.buttons.NO.text = cancleOrg;

}


function ConfirmVexValidate(message, callback, okText, cancleText, overlayClosesOnClick, contentClassName, afterOpenCallback) {

    var okOrg = vex.dialog.buttons.YES.text;
    okText = (okText == null || okText === "" ? okOrg : okText);

    var cancleOrg = vex.dialog.buttons.NO.text;
    cancleText = (cancleText == null || cancleText === "" ? cancleOrg : cancleText);

    vex.dialog.buttons.YES.text = okText;
    vex.dialog.buttons.NO.text = cancleText;

    var options = {
        unsafeMessage: message,
        contentClassName: contentClassName,
        overlayClosesOnClick: overlayClosesOnClick,
        onSubmit: function (event) {
            event.preventDefault();
            event.stopPropagation();

            callback(function () {
                vex.closeTop();
            });
        },
        afterOpen: function () {
            if (afterOpenCallback !== undefined && afterOpenCallback !== null) {
                afterOpenCallback();
            }

            // Workaround for Firefox bugg
            $("body").css("position", "fixed");
            setTimeout(function () { $("body").css("position", ""); }, 500);
        },
        callback: function () { /* Required but not needed, see onSubmit */ }
    };


    vex.dialog.confirm(options);

    vex.dialog.buttons.YES.text = okOrg;
    vex.dialog.buttons.NO.text = cancleOrg;

}



function VexDialog(message, yesButton, noButton, callback, overlayClosesOnClick, contentClassName, unsafeMessage) {

    var afterOpenFunc = (contentClassName === "WideNice") ? VexDialogAddNiceCloseButton : null;

    var buttons = [];

    if (yesButton.length > 0) {
        buttons.push($.extend({}, vex.dialog.buttons.YES, { text: yesButton }));
    }

    if (noButton.length > 0) {
        buttons.push($.extend({}, vex.dialog.buttons.NO, { text: noButton }));
    }

    vex.dialog.open({
        message: message,
        unsafeMessage: unsafeMessage,
        buttons: buttons,
        contentClassName: contentClassName,
        overlayClosesOnClick: overlayClosesOnClick,
        afterOpen: afterOpenFunc,
        onSubmit: function (event) {
            event.preventDefault();
            event.stopPropagation();
            var vexContent = $(this).parent();

            callback(function () {
                vex.close(vexContent.data().vex.id);
            });

        }
    });

}


function PromptVex(message, value, placeholder, callback, contentClassName) {

    var afterOpenFunc = (contentClassName === "PromptNice") ? VexDialogAddNiceCloseButton : null;

    vex.dialog.prompt({
        unsafeMessage: message,
        placeholder: placeholder,
        value: value,
        callback: function (input) {
            if (input === false) {
                return;
            }
            callback(input);
        },
        afterOpen: afterOpenFunc,
        contentClassName: 'vex-content ' + contentClassName
    });
}


function AlertVex(message, contentClassName, callback) {

    var afterOpenFunc = null;

    if (contentClassName === "WideNice") {
        afterOpenFunc = function () {
            var closeMe = $("<div class='CloseMe'>X</div>");
            closeMe.click(function () { vex.closeTop(); });
            $("div.vex-content.WideNice").append(closeMe);
        }
    }


    if (contentClassName === "StandardNice") {
        afterOpenFunc = function () {
            var closeMe = $("<div class='CloseMe'>X</div>");
            closeMe.click(function () { vex.closeTop(); });
            $("div.vex-content.StandardNice").append(closeMe);
        }
    }

    var options = {
        unsafeMessage: message,
        overlayClosesOnClick: true,
        contentClassName: 'vex-content ' + contentClassName,
        afterOpen: afterOpenFunc
    };

    if (callback !== undefined && callback !== null) {
        options.callback = callback;
    }

    vex.dialog.alert(options);
}

