﻿function Dialog(dialogElementId) {
    this.id = dialogElementId;
    var dialog = $(dialogElementId);
    var accept;
    var reject;
    var close;
    var active = true;

    this.hide = function () {
        dialog.hide();
    };

    this.show = function () {
        active = true;

        if ($(this.id)[0] !== undefined) {
            document.body.appendChild($(this.id)[0]);
        }

        adjustContentMaxHeight();
        dialog.show();
    };

    this.setHeaderContent = function (content) {
        $(dialogElementId + ' ' + '.modal-dialog-header').html(content);
    }

    this.setHeaderCaptionContent = function (content) {
        $(dialogElementId + ' ' + '.modal-dialog-caption').html(content);
    }

    this.setTextContent = function (content) {
        $(dialogElementId + ' ' + '.modal-dialog-content-text').html(content);
    }

    this.setInnerContent = function (content) {
        $(dialogElementId + ' ' + '.modal-dialog-content-inner').html(content);
    }

    this.setMessageContent = function (content) {
        $(dialogElementId + ' .applicationTextContent').html(content);
    }

    this.onAccept = function (event) {
        accept = event;
    };

    this.onReject = function (event) {
        reject = event;
    };

    this.onClose = function (event) {
        close = event;
    };

    this.content = function (content) {
        dialog.children('.modal-dialog-content').html(content);
    };

    this.allowTextFormatting = function () {
        dialog.find(".modal-dialog-content-text").css("white-space", "pre-line");
    }

    $(dialogElementId + ' ' + '.btnAccept').click(function (event) {
        event.preventDefault();
        if (accept && active) {
            accept();
        }
        dialog.hide();
    });

    $(dialogElementId + ' ' + '.btnReject').click(function () {
        if (reject) {
            reject();
        }
        dialog.hide();
        active = false;
    });

    $(dialogElementId + ' ' + '.close').click(function () {
        if (close) {
            close();
        }

        dialog.hide();
        active = false;
        return false;
    });

    this.setActive = function (value) {
        active = value;
    };

    function adjustContentMaxHeight() {
        var $header = $(dialog.find(".modal-dialog-header")[0]);
        var $buttonsSection = $(dialog.find(".modal-dialog-buttons-section")[0]);
        var $content = $(dialog.find(".modal-dialog-content")[0]);

        var windowsHeight = $(window).height();
        var headerHeight = $header.outerHeight();
        var buttonsSectionHeight = $buttonsSection.outerHeight();
        var contentHeight = windowsHeight * 0.8 - headerHeight - buttonsSectionHeight;

        $content.css("max-height", contentHeight);
    }
}

function DialogForCallbacks(dialogElementId) {
    this.id = dialogElementId;
    var dialog = $(dialogElementId);
    var accept;
    var reject;
    var close;
    var active = true;

    this.hide = function () {
        dialog.hide();
    };

    this.show = function () {
        active = true;
        document.body.appendChild($(this.id)[0]);

        dialog.show();
    };

    this.setHeaderContent = function (content) {
        $(dialogElementId + ' ' + '.modal-dialog-header').html(content);
    }

    this.setTextContent = function (content) {
        $(dialogElementId + ' ' + '.modal-dialog-content-text').html(content);
    }

    this.setInnerContent = function (content) {
        $(dialogElementId + ' ' + '.modal-dialog-content-inner').html(content);
    }

    this.setOkButton = function () {
        $(dialogElementId + ' ' + '.btnSubmit').parent('li').addClass("hidden");
        $(dialogElementId + ' ' + '.btnOk').parent('li').removeClass("hidden");
        $(dialogElementId + ' ' + '.close').parent('li').addClass("hidden"); 
    }

    this.onAccept = function (event) {
        accept = event;
    };

    this.onReject = function (event) {
        reject = event;
    };

    this.onClose = function (event) {
        close = event;
    };

    this.content = function (content) {
        dialog.children('.modal-dialog-content').html(content);
    };

    $(dialogElementId + ' ' + '.btnAccept').click(function (event) {
        event.preventDefault();
        if (accept && active) {
            accept();
        }
    });

    $(dialogElementId + ' ' + '.btnReject').click(function () {
        if (reject) {
            reject();
        }
        $(dialogElementId + ' ' + '.modal-dialog-content-inner').html("");
        dialog.hide();
        active = false;
    });

    $(dialogElementId + ' ' + '.btnOk').click(function () {
        if (close) {
            close();
        }
        
        $(dialogElementId + ' ' + '.modal-dialog-content-inner').html("");
        $(dialogElementId + ' ' + '.btnSubmit').parent('li').removeClass("hidden");
        $(dialogElementId + ' ' + '.btnOk').parent('li').addClass("hidden");

        dialog.hide();
        
        active = false;
        return false;
    });

    $(dialogElementId + ' ' + '.close').click(function () {
        if (close) {
            close();
        }
        dialog.hide();
        $(dialogElementId + ' ' + '.modal-dialog-content-inner').html("");
        active = false;
        return false;
    });

    this.setActive = function (value) {
        active = value;
    };
}