﻿function Dialog(id)
{
    var _dialogId = id;
    var _dialogOverlayId = "dialog-overlay-" + id;
    var _dialogSubmitButtonId = "dialog-submit-button-" + id;
    var _dialogSubmitFakeButtonId = "dialog-submit-button-" + id + "-fake";
    var _dialogCloseButtonId = "dialog-close-button-" + id;
    var _dialogCloseButtonBottomId = "dialog-close-button-bottom-" + id;
    this.OnClose = null;
    this.OnSubmit = null;
    this.OnBeforeShow = null;
    this.Id = id;
    var _self = this;

    this.Show = function (callback)
    {
        var dialog = _self;
        if ($.isFunction(_self.OnBeforeShow))
        {
            dialog.OnBeforeShow();
        }
        $("#" + _dialogCloseButtonId).one("click", function ()
        {
            dialog.Close();
            return false;
        });
        $("#" + _dialogCloseButtonBottomId).one("click", function ()
        {
            dialog.Close();
            return false;
        });
        $("#" + _dialogSubmitButtonId).unbind("click").click(function ()
        {
            dialog.Submit();
            return false;
        });
        $("#" + _dialogOverlayId).show();
        $("#" + _dialogId).fadeIn();
        $(window).unbind().keyup(function (event)
        {
            if (event && event.keyCode == 27)
            {
                _self.Close();
            }
        });
        if($.isFunction(callback)) {
            callback(_self);
        }
    }

    this.Close = function ()
    {
        HidePopupInternal(_self.OnClose);
    }

    this.Hide = function ()
    {
        HidePopupInternal();
    }

    function HidePopupInternal(closeCallback)
    {
        $("#" + _dialogSubmitButtonId).hide();
        $("#" + _dialogSubmitFakeButtonId).show();
        if ($.isFunction(closeCallback))
        {
            closeCallback();
        }
        $("#" + _dialogOverlayId).hide();
        $("#" + _dialogId).hide();

        $(window).unbind("keyup");
    }

    this.Submit = function()
    {
        if (_self.OnSubmit != null)
        {
            _self.OnSubmit();
        }
    }

    this.ShowSubmitButton = function()
    {
        $("#" + _dialogSubmitButtonId).show();
        $("#" + _dialogSubmitFakeButtonId).hide();
    }
    this.HideSubmitButton = function()
    {
        $("#" + _dialogSubmitButtonId).hide();
        $("#" + _dialogSubmitFakeButtonId).show();
    }

    this.Element = function ()
    {
        return $("#" + _dialogId);
    }

    this.Init = function ()
    {
        var dialog = _self;
        var windowWidth = $(window).width();
        var windowHeight = $(window).height();
        $("#" + _dialogOverlayId).css([{ "width": windowWidth }, { "height": windowHeight}])

        var $dialog = $("#" + _dialogId);
        var dialogWidth = $dialog.width();
        var dialogHeight = $dialog.height();
        var dialogLeftPx = (windowWidth - dialogWidth) / 2;
        var dialogTopPx = (windowHeight - dialogHeight) / 2;
        $dialog.css("left", dialogLeftPx).css("top", dialogTopPx);
        Draggable.Bind($dialog, $dialog.find(".title-holder"));
    }
    _self.Init();
};

