﻿/// <reference path="../../lib/jquery-1.4.2.min.js" />
/// <reference path="../sys/System.js" />
/// <reference path="../sys/System.Guid.js" />
/// <reference path="../sys/Date.format.js" />
/// <reference path="Controls.js" />
/// <reference path="../data/data.js" />
/// <reference path="../data/bo/Data.BO.StatusMessage.js" />

Controls.StatusBar =
            {
                id: "StatusBarII1",
                messages: new Array(),
                insertMessage: function (msg) {
                    /// <summary>Вставляет сообщение в стaтусбар</summary>
                    /// <param name="msg" type="StatusMessage">Сообщение типа : StatusMessage или просто строковое значение</param>
                    if (msg) {
                        if (!msg.title) {
                            msg = new Data.BO.StatusMessage(msg);
                        }
                        this.messages[this.messages.length] = msg;
                        var m = new Controls.PopupStatusMessage(msg);
                        if ($("#" + this.id).find('div[role="smsg"]').length > 0) {
                            $("<div role='smsg' class='statusUdefined'>" + msg.date.format('H:i:s') + " | " + msg.title + " | " + msg.text + " | " + msg.url + "</div>").insertBefore($("#" + this.id).find('div[role="smsg"]').first());
                        }
                        $("#" + this.id).scrollTop();
                    }
                },
                ///<summary>Классы всплывающего окошка (можно по желанию поменять)</summary>
                cssClasses: {
                    popupClasses: {
                        Undefined: "popupUndefined",
                        Error: "popupError",
                        Exeption: "popupExeption",
                        Warrning: "popupWarrning",
                        Info: "popupInfo",
                        Success: "popupSuccess"
                    },
                    ///<summary>Классы всплывающего окошка (можно по желанию поменять)</summary>
                    barClasses: {
                        Undefined: "barUndefined",
                        Error: "barError",
                        Exeption: "barExeption",
                        Warrning: "barWarrning",
                        Info: "barInfo",
                        Success: "barSuccess"
                    }
                },

                closePopupStatusMessage: function (sender) {
                    ///<summary>метод обработчик события click по кнопке закрыть</summary>
                    $(sender).parent().remove();
                }
            }



            Controls.PopupStatusMessage = function (msg) {
                ///<summary>Всплывающеe статусное сообщение</summary>
                ///<param name="msg" type="StatusMessage">Сообщение</param>
                ///<field name="message" type="StatusMessage">Сообщение type="StatusMessage"</field>
                var _thisRef = this;
                this.message = msg;
                this.id = "popup" + msg.id;
                this.getHtml = function () {
                    ///<summary>Возвращает html элемента</summary>
                    ///<returns type="String">html</returns>
                    if (msg) {
                        return "<div id='" + this.id + "' class='popupState " + this.cssClass() + "'><a class='closeMsg' onclick='Controls.StatusBar.closePopupStatusMessage(this)'>×</a><b>" + this.message.title + "</b><br /><span>" + this.message.text + "</span></div>";
                    }
                }

                this.cssClass = function () {
                    switch (this.message.type) {
                        case Data.BO.StatusMessageType.Undefined: return Controls.StatusBar.cssClasses.popupClasses.Undefined;
                        case Data.BO.StatusMessageType.Error: return Controls.StatusBar.cssClasses.popupClasses.Error;
                        case Data.BO.StatusMessageType.Exeption: return Controls.StatusBar.cssClasses.popupClasses.Exeption;
                        case Data.BO.StatusMessageType.Warrning: return Controls.StatusBar.cssClasses.popupClasses.Warrning;
                        case Data.BO.StatusMessageType.Info: return Controls.StatusBar.cssClasses.popupClasses.Info;
                        case Data.BO.StatusMessageType.Success: return Controls.StatusBar.cssClasses.popupClasses.Success;
                    }
                }

                this.remove = function () {
                    ///<summary>Удаляет всплывающее сообщение</summary>
                    $('#' + this.id).remove();
                }

                this.show = function () {
                    ///<summary>Показывает всплывающее окно</summary>
                    $('#' + this.id).fadeIn('slow');
                }
                this.hide = function () {
                    ///<summary>Прячет всплывающее окно</summary>
                    $('#' + this.id).fadeOut('slow');
                }

                function _addEvents() {
                    $('#' + _thisRef.id).find('a.closeMsg').click(function () {
                        _thisRef.remove();
                    });
                    $('#' + _thisRef.id).mouseenter(function () {
                        $('#' + _thisRef.id).stop();
                        $('#' + _thisRef.id).css('opacity', '1');
                    });
                    $('#' + _thisRef.Id).mouseover(function () {
                        $('#' + _thisRef.id).css('opacity', '1');
                    });
                    $('#' + _thisRef.id).mouseleave(function () { _slowHide(); });
                }

                function _slowHide() {
                    $('#' + _thisRef.id).fadeOut(6000);
                }

                this.init = function () {
                    ///<summary>Инициализация объекта (вызывается сама в конструкторе)</summary>
                    $('#popupStateCont').append(this.getHtml());
                    _addEvents();
                    $('#' + this.id).fadeIn('slow', _slowHide);
                }
                this.init();
            }

