Change the buiding tool to angular-cli
[holmes/rule-management.git] / rulemgt-frontend / src / assets / common / js / popModal.js
diff --git a/rulemgt-frontend/src/assets/common/js/popModal.js b/rulemgt-frontend/src/assets/common/js/popModal.js
new file mode 100644 (file)
index 0000000..862a31a
--- /dev/null
@@ -0,0 +1,1153 @@
+/*
+ popModal - 1.21 [18.11.15]
+ Author: vadimsva
+ Github: https://github.com/vadimsva/popModal
+ */
+/* popModal */
+(function ($) {
+    $.fn.popModal = function (method) {
+        var elem = $(this),
+            elemObj,
+            isFixed = '',
+            closeBut = '',
+            elemClass = 'popModal',
+            overflowContentClass = '',
+            asMenuClass,
+            _options,
+            animTime,
+            effectIn = 'fadeIn',
+            effectOut = 'fadeOut',
+            bl = 'bottomLeft',
+            bc = 'bottomCenter',
+            br = 'bottomRight',
+            lt = 'leftTop',
+            lc = 'leftCenter',
+            rt = 'rightTop',
+            rc = 'rightCenter',
+            currentID;
+
+        var methods = {
+            init: function (params) {
+                var _defaults = {
+                    html: '',
+                    placement: bl,
+                    showCloseBut: true,
+                    onDocumentClickClose: true,
+                    onDocumentClickClosePrevent: '',
+                    overflowContent: false,
+                    inline: true,
+                    asMenu: false,
+                    beforeLoadingContent: 'Please, wait...',
+                    onOkBut: function () {
+                        return true;
+                    },
+                    onCancelBut: function () {
+                    },
+                    onLoad: function () {
+                    },
+                    onClose: function () {
+                    }
+                };
+                _options = $.extend(_defaults, params);
+
+                if ($('body').find('.' + elemClass).length !== 0 && $('body').find('.' + elemClass).attr('data-popmodal_id') == elem.attr('data-popmodal_id')) {
+                    popModalClose();
+                } else {
+                    $('html.' + elemClass + 'Open').off('.' + elemClass + 'Event').removeClass(elemClass + 'Open');
+                    $('.' + elemClass + '_source').replaceWith($('.' + elemClass + '_content').children());
+                    $('.' + elemClass).remove();
+
+                    if (elem.css('position') == 'fixed') {
+                        isFixed = 'position:fixed;';
+                    }
+                    if (_options.asMenu) {
+                        asMenuClass = ' ' + elemClass + '_asMenu';
+                    } else {
+                        asMenuClass = '';
+                        if (_options.showCloseBut) {
+                            closeBut = $('<button type="button" class="close">&times;</button>');
+                        }
+                        if (_options.overflowContent) {
+                            overflowContentClass = ' ' + elemClass + '_contentOverflow';
+                        } else {
+                            overflowContentClass = '';
+                        }
+                    }
+
+                    currentID = new Date().getMilliseconds();
+                    elem.attr('data-popmodal_id', currentID);
+
+                    var tooltipContainer = $('<div class="' + elemClass + ' animated" style="' + isFixed + '" data-popmodal_id="' + currentID + '"></div>');
+                    var tooltipContent = $('<div class="' + elemClass + '_content' + overflowContentClass + asMenuClass + '"></div>');
+                    tooltipContainer.append(closeBut, tooltipContent);
+
+                    if ($.isFunction(_options.html)) {
+                        var beforeLoadingContent = _options.beforeLoadingContent;
+                        tooltipContent.append(beforeLoadingContent);
+                        _options.html(function (loadedContent) {
+                            tooltipContent.empty().append(loadedContent);
+                            elemObj = $('.' + elemClass);
+                            getPlacement();
+                        });
+                    } else {
+                        if ($.type(_options.html) == 'object') {
+                            _options.html.after($('<div class="popModal_source"></div>'));
+                        }
+                        tooltipContent.append(_options.html);
+                    }
+                    if ($(window).width() <= 500) {
+                        _options.inline = true;
+                    }
+
+                    if (_options.inline) {
+                        elem.after(tooltipContainer);
+                    } else {
+                        $('body').append(tooltipContainer);
+                    }
+
+                    elemObj = $('.' + elemClass);
+                    elemObj.css('height', method.html.outerHeight() + elemObj.marginBottom + elemObj.marginTop + elemObj.borderBottomWidth + elemObj.borderTopWidth + elemObj.paddingBottom + elemObj.paddingTop);
+                    var elemObjFooter = elemObj.find('.' + elemClass + '_footer');
+                    if (elemObjFooter.length != 0) {
+                        elemObj.find('.' + elemClass + '_content').css({marginBottom: elemObjFooter.outerHeight() + 15 + 'px'});
+                    }
+
+                    if (!$.isFunction(_options.html)) {
+                        var htmlStr;
+                        if ($.type(_options.html) == 'string') {
+                            htmlStr = _options.html;
+                        } else {
+                            htmlStr = _options.html[0].outerHTML;
+                        }
+                    }
+
+                    if (_options.onLoad && $.isFunction(_options.onLoad)) {
+                        _options.onLoad();
+                    }
+                    $(_options.html).trigger('load');
+
+                    elemObj.on('destroyed', function () {
+                        if (_options.onClose && $.isFunction(_options.onClose)) {
+                            _options.onClose();
+                        }
+                        $(_options.html).trigger('close');
+                    });
+
+                    getPlacement();
+
+                    if (_options.onDocumentClickClose) {
+                        $('html').on('click.' + elemClass + 'Event', function (event) {
+                            $(this).addClass(elemClass + 'Open');
+                            if (elemObj.is(':hidden')) {
+                                popModalClose();
+                            }
+                            var target = $(event.target);
+                            if (!target.parents().andSelf().is('.' + elemClass) && !target.parents().andSelf().is(elem)) {
+                                var zIndex = parseInt(target.parents().filter(function () {
+                                    return $(this).css('zIndex') !== 'auto';
+                                }).first().css('zIndex'));
+                                if (isNaN(zIndex)) {
+                                    zIndex = 0;
+                                }
+                                if (_options.onDocumentClickClosePrevent !== '' && target.is(_options.onDocumentClickClosePrevent)) {
+                                    zIndex = 9999;
+                                }
+                                var target_zIndex = target.css('zIndex');
+                                if (target_zIndex == 'auto') {
+                                    target_zIndex = 0;
+                                }
+                                if (zIndex < target_zIndex) {
+                                    zIndex = target_zIndex;
+                                }
+                                if (zIndex <= elemObj.css('zIndex')) {
+                                    popModalClose();
+                                }
+                            }
+                        });
+                    }
+
+                    $(window).resize(function () {
+                        getPlacement();
+                    });
+
+                    elemObj.find('.close').on('click', function () {
+                        popModalClose();
+                        $(this).off('click');
+                    });
+
+                    elemObj.find('[data-popmodal-but="close"]').unbind('click');
+                    elemObj.find('[data-popmodal-but="close"]').on('click', function () {
+                        popModalClose();
+                        $(this).off('click');
+                    });
+
+                    elemObj.find('[data-popmodal-but="ok"]').unbind('click');
+                    elemObj.find('[data-popmodal-but="ok"]').on('click', function (event) {
+                        var ok;
+                        if (_options.onOkBut && $.isFunction(_options.onOkBut)) {
+                            ok = _options.onOkBut(event);
+                        }
+                        if (ok !== false) {
+                            popModalClose();
+                            $(this).off('click');
+                            $(_options.html).trigger('okbut');
+                        }
+                    });
+
+                    elemObj.find('[data-popmodal-but="cancel"]').unbind('click');
+                    elemObj.find('[data-popmodal-but="cancel"]').on('click', function () {
+                        if (_options.onCancelBut && $.isFunction(_options.onCancelBut)) {
+                            _options.onCancelBut();
+                        }
+                        popModalClose();
+                        $(this).off('click');
+                        $(_options.html).trigger('cancelbut');
+                    });
+
+                    $('html').on('keydown.' + elemClass + 'Event', function (event) {
+                        if (event.keyCode == 27) {
+                            popModalClose();
+                        }
+                    });
+
+                }
+                return elemObj;
+            },
+            hide: function () {
+                popModalClose();
+            }
+        };
+
+        function getPlacement() {
+            if (_options.inline) {
+                var eLeft = elem.position().left;
+                var eTop = elem.position().top;
+            } else {
+                var eLeft = elem.offset().left;
+                var eTop = elem.offset().top;
+            }
+            var offset = 10,
+                eMLeft = parseInt(elem.css('marginLeft')),
+                ePLeft = parseInt(elem.css('paddingLeft')),
+                eMTop = parseInt(elem.css('marginTop')),
+                eHeight = elem.outerHeight(),
+                eWidth = elem.outerWidth(),
+                eObjWidth = elemObj.outerWidth(),
+                eObjHeight = elemObj.outerHeight();
+
+            var placement,
+                eOffsetLeft = elem.offset().left,
+                eOffsetRight = $(window).width() - elem.offset().left - eWidth,
+                eOffsetTop = elem.offset().top,
+                deltaL = eOffsetLeft - offset - eObjWidth,
+                deltaBL = eWidth + eOffsetLeft - eObjWidth,
+                deltaR = eOffsetRight - offset - eObjWidth,
+                deltaBR = eWidth + eOffsetRight - eObjWidth,
+                deltaCL = eWidth / 2 + eOffsetLeft - eObjWidth / 2,
+                deltaCR = eWidth / 2 + eOffsetRight - eObjWidth / 2,
+                deltaC = Math.min(deltaCR, deltaCL),
+                deltaCT = eOffsetTop - eObjHeight / 2;
+
+            function optimalPosition(current) {
+                var optimal;
+                var maxDelta = Math.max(deltaBL, deltaBR, deltaC);
+                if (isCurrentFits(current)) {
+                    optimal = current;
+                } else if (deltaBR > 0 && deltaBR == maxDelta) {
+                    optimal = bl;
+                } else if (deltaBL > 0 && deltaBL == maxDelta) {
+                    optimal = br;
+                } else if (deltaC > 0 && deltaC == maxDelta) {
+                    optimal = bc;
+                } else {
+                    optimal = current;
+                }
+                return optimal;
+            }
+
+            function isCurrentFits(current) {
+                return current == bl ? deltaBR > 0
+                    : current == br ? deltaBL > 0
+                    : deltaC > 0;
+            }
+
+            if ((/^bottom/).test(_options.placement)) {
+                placement = optimalPosition(_options.placement);
+            } else if ((/^left/).test(_options.placement)) {
+                if (deltaL > 0) {
+                    if (_options.placement == lc && deltaCT > 0) {
+                        placement = lc;
+                    } else {
+                        placement = lt;
+                    }
+                } else {
+                    placement = optimalPosition(bl);
+                }
+            } else if ((/^right/).test(_options.placement)) {
+                if (deltaR > 0) {
+                    if (_options.placement == rc && deltaCT > 0) {
+                        placement = rc;
+                    } else {
+                        placement = rt;
+                    }
+                } else {
+                    placement = optimalPosition(br);
+                }
+            }
+
+            elemObj.removeAttr('class').addClass(elemClass + ' animated ' + placement);
+            switch (placement) {
+                case (bl):
+                    elemObj.css({
+                        top: eTop + eMTop + eHeight + offset + 'px',
+                        left: eLeft + eMLeft + 'px'
+                    }).addClass(effectIn + 'Bottom');
+                    break;
+                case (br):
+                    elemObj.css({
+                        top: eTop + eMTop + eHeight + offset + 'px',
+                        left: eLeft + eMLeft + eWidth - eObjWidth + 'px'
+                    }).addClass(effectIn + 'Bottom');
+                    break;
+                case (bc):
+                    elemObj.css({
+                        top: eTop + eMTop + eHeight + offset + 'px',
+                        left: eLeft + eMLeft + (eWidth - eObjWidth) / 2 + 'px'
+                    }).addClass(effectIn + 'Bottom');
+                    break;
+                case (lt):
+                    elemObj.css({
+                        top: eTop + eMTop + 'px',
+                        left: eLeft + eMLeft - eObjWidth - offset + 'px'
+                    }).addClass(effectIn + 'Left');
+                    break;
+                case (rt):
+                    elemObj.css({
+                        top: eTop + eMTop + 'px',
+                        left: eLeft + eMLeft + eWidth + offset + 'px'
+                    }).addClass(effectIn + 'Right');
+                    break;
+                case (lc):
+                    elemObj.css({
+                        top: eTop + eMTop + eHeight / 2 - eObjHeight / 2 + 'px',
+                        left: eLeft + eMLeft - eObjWidth - offset + 'px'
+                    }).addClass(effectIn + 'Left');
+                    break;
+                case (rc):
+                    elemObj.css({
+                        top: eTop + eMTop + eHeight / 2 - eObjHeight / 2 + 'px',
+                        left: eLeft + eMLeft + eWidth + offset + 'px'
+                    }).addClass(effectIn + 'Right');
+                    break;
+            }
+        }
+
+        function popModalClose() {
+            elemObj = $('.' + elemClass);
+            if (elemObj.length) {
+                reverseEffect();
+                getAnimTime();
+                setTimeout(function () {
+                    $('.' + elemClass + '_source').replaceWith($('.' + elemClass + '_content').children());
+                    elemObj.remove();
+                    $('html.' + elemClass + 'Open').off('.' + elemClass + 'Event').removeClass(elemClass + 'Open');
+                }, animTime);
+            }
+        }
+
+        function getAnimTime() {
+            if (!animTime) {
+                animTime = elemObj.css('animationDuration');
+                if (animTime !== undefined) {
+                    animTime = animTime.replace('s', '') * 1000;
+                } else {
+                    animTime = 0;
+                }
+            }
+        }
+
+        function reverseEffect() {
+            var animClassOld = elemObj.attr('class'),
+                animClassNew = animClassOld.replace(effectIn, effectOut);
+            elemObj.removeClass(animClassOld).addClass(animClassNew);
+        }
+
+        if (methods[method]) {
+            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
+        } else if (typeof method === 'object' || !method) {
+            return methods.init.apply(this, arguments);
+        }
+
+    };
+
+    $('* [data-popmodal-bind]').bind('click', function () {
+        var elemBind = $(this).attr('data-popmodal-bind');
+        var params = {html: $(elemBind)};
+        if ($(this).attr('data-placement') !== undefined) {
+            params['placement'] = $(this).attr('data-placement');
+        }
+        if ($(this).attr('data-showclose-but') !== undefined) {
+            params['showCloseBut'] = (/^true$/i).test($(this).attr('data-showclose-but'));
+        }
+        if ($(this).attr('data-overflowcontent') !== undefined) {
+            params['overflowContent'] = (/^false$/i).test($(this).attr('data-overflowcontent'));
+        }
+        if ($(this).attr('data-ondocumentclick-close') !== undefined) {
+            params['onDocumentClickClose'] = (/^true$/i).test($(this).attr('data-ondocumentclick-close'));
+        }
+        if ($(this).attr('data-ondocumentclick-close-prevent') !== undefined) {
+            params['onDocumentClickClosePrevent'] = $(this).attr('data-ondocumentclick-close-prevent');
+        }
+        if ($(this).attr('data-inline') !== undefined) {
+            params['inline'] = (/^true$/i).test($(this).attr('data-inline'));
+        }
+        if ($(this).attr('data-beforeloading-content') !== undefined) {
+            params['beforeLoadingContent'] = $(this).attr('data-beforeloading-content');
+        }
+        $(this).popModal(params);
+    });
+
+    $.event.special.destroyed = {
+        remove: function (o) {
+            if (o.handler) {
+                o.handler();
+            }
+        }
+    };
+})(jQuery);
+
+
+/* notifyModal */
+(function ($) {
+    $.fn.notifyModal = function (method) {
+        var elem = $(this),
+            elemObj,
+            elemClass = 'notifyModal',
+            onTopClass = '',
+            _options,
+            animTime;
+
+        var methods = {
+            init: function (params) {
+                var _defaults = {
+                    duration: 2500,
+                    placement: 'center',
+                    type: 'notify',
+                    overlay: true,
+                    onClose: function () {
+                    }
+                };
+                _options = $.extend(_defaults, params);
+
+                if (_options.overlay) {
+                    onTopClass = 'overlay';
+                }
+
+                $('.' + elemClass).remove();
+                var notifyContainer = $('<div class="' + elemClass + ' ' + _options.placement + ' ' + onTopClass + ' ' + _options.type + '"></div>');
+                var notifyContent = $('<div class="' + elemClass + '_content"></div>');
+                var closeBut = $('<button type="button" class="close">&times;</button>');
+                if (elem[0] === undefined) {
+                    elem = elem['selector'];
+                } else {
+                    elem = elem[0].innerHTML;
+                }
+                notifyContent.append(closeBut, elem);
+                notifyContainer.append(notifyContent);
+                $('body').append(notifyContainer);
+
+                elemObj = $('.' + elemClass);
+                getAnimTime();
+
+                elemObj.addClass('open');
+                elemObj.click(function () {
+                    notifyModalClose();
+                });
+                if (_options.duration != -1) {
+                    notifDur = setTimeout(notifyModalClose, _options.duration);
+                }
+
+            },
+            hide: function () {
+                notifyModalClose();
+            }
+        };
+
+        function notifyModalClose() {
+            var elemObj = $('.' + elemClass);
+            elemObj.removeClass('open');
+            setTimeout(function () {
+                elemObj.remove();
+                if (_options.duration != -1) {
+                    clearTimeout(notifDur);
+                }
+                if (_options.onClose && $.isFunction(_options.onClose)) {
+                    _options.onClose();
+                }
+            }, animTime);
+        }
+
+        function getAnimTime() {
+            if (!animTime) {
+                animTime = elemObj.css('transitionDuration');
+                if (animTime !== undefined) {
+                    animTime = animTime.replace('s', '') * 1000;
+                } else {
+                    animTime = 0;
+                }
+            }
+        }
+
+        $('html').keydown(function (event) {
+            if (event.keyCode == 27) {
+                notifyModalClose();
+            }
+        });
+
+        if (methods[method]) {
+            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
+        } else if (typeof method === 'object' || !method) {
+            return methods.init.apply(this, arguments);
+        }
+
+    };
+
+    $('* [data-notifymodal-bind]').bind('click', function () {
+        var elemBind = $(this).attr('data-notifymodal-bind');
+        var params = {};
+        if ($(this).attr('data-duration') !== undefined) {
+            params['duration'] = parseInt($(this).attr('data-duration'));
+        }
+        if ($(this).attr('data-placement') !== undefined) {
+            params['placement'] = $(this).attr('data-placement');
+        }
+        if ($(this).attr('data-ontop') !== undefined) {
+            params['onTop'] = (/^true$/i).test($(this).attr('data-ontop'));
+        }
+        $(elemBind).notifyModal(params);
+    });
+
+})(jQuery);
+
+
+/* hintModal */
+(function ($) {
+    $.fn.hintModal = function (method) {
+        $('.hintModal').off();
+
+        var methods = {
+            init: function () {
+
+                $(this).on('mouseenter', function () {
+                    var elem = $(this).find('> .hintModal_container');
+                    if (elem[0].textContent.length > 1) {
+                        elem.addClass('animated fadeInBottom');
+                        getPlacement($(this), elem);
+                    }
+                });
+
+                $(this).on('mouseleave', function () {
+                    var elem = $(this).find('> .hintModal_container');
+                    if (elem[0].textContent.length > 1) {
+                        elem.removeClass('animated fadeInBottom');
+                    }
+                });
+
+                function getPlacement(elemObj, elem) {
+                    var placementDefault,
+                        classDefault = elemObj.attr('class'),
+                        eObjWidth = elemObj.outerWidth(),
+                        eWidth = elem.outerWidth(),
+                        eOffsetLeft = elemObj.offset().left,
+                        eOffsetRight = $(window).width() - elemObj.offset().left - eObjWidth,
+                        deltaBL = eObjWidth + eOffsetLeft - eWidth,
+                        deltaBR = eObjWidth + eOffsetRight - eWidth,
+                        deltaCL = eObjWidth / 2 + eOffsetLeft - eWidth / 2,
+                        deltaCR = eObjWidth / 2 + eOffsetRight - eWidth / 2,
+                        deltaC = Math.min(deltaCR, deltaCL),
+                        bl = 'bottomLeft',
+                        bc = 'bottomCenter',
+                        br = 'bottomRight';
+
+                    if (elemObj.hasClass(bl)) {
+                        placementDefault = bl;
+                    } else if (elemObj.hasClass(bc)) {
+                        placementDefault = bc;
+                    } else if (elemObj.hasClass(br)) {
+                        placementDefault = br;
+                    } else {
+                        placementDefault = bl;
+                    }
+
+                    if (elemObj.data('placement') === undefined) {
+                        elemObj.data('placement', placementDefault);
+                    }
+
+                    function optimalPosition(current) {
+                        var optimal;
+                        var maxDelta = Math.max(deltaBL, deltaBR, deltaC);
+                        if (isCurrentFits(current)) {
+                            optimal = current;
+                        } else if (deltaBR > 0 && deltaBR == maxDelta) {
+                            optimal = bl;
+                        } else if (deltaBL > 0 && deltaBL == maxDelta) {
+                            optimal = br;
+                        } else if (deltaC > 0 && deltaC == maxDelta) {
+                            optimal = bc;
+                        } else {
+                            optimal = current;
+                        }
+                        return optimal;
+                    }
+
+                    function isCurrentFits(current) {
+                        return current == bl ? deltaBR > 0
+                            : current == br ? deltaBL > 0
+                            : deltaC > 0;
+                    }
+
+                    elemObj.removeAttr('class').addClass(classDefault + ' ' + optimalPosition(elemObj.data('placement')));
+                }
+
+            }
+        };
+
+        if (methods[method]) {
+            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
+        } else if (typeof method === 'object' || !method) {
+            return methods.init.apply(this, arguments);
+        }
+
+    };
+    $('.hintModal').hintModal();
+    document.addEventListener("DOMNodeInserted", function (event) {
+        if ($(event.target).hasClass('hintModal')) {
+            $('.hintModal').hintModal();
+        }
+    }, false);
+})(jQuery);
+
+
+/* dialogModal */
+(function ($) {
+    $.fn.dialogModal = function (method) {
+        var elem = $(this),
+            elemObj,
+            elemClass = 'dialogModal',
+            prevBut = 'dialogPrev',
+            nextBut = 'dialogNext',
+            _options,
+            animTime;
+
+        var methods = {
+            init: function (params) {
+                var _defaults = {
+                    topOffset: 0,
+                    top: '10%',
+                    type: '',
+                    onOkBut: function () {
+                        return true;
+                    },
+                    onCancelBut: function () {
+                    },
+                    onLoad: function () {
+                    },
+                    onClose: function () {
+                    },
+                    onChange: function () {
+                    }
+                };
+                _options = $.extend(_defaults, params);
+
+                $('html.' + elemClass + 'Open').off('.' + elemClass + 'Event').removeClass(elemClass + 'Open');
+                $('.' + elemClass + ' .' + prevBut + ', .' + elemClass + ' .' + nextBut).off('click');
+                $('.' + elemClass).remove();
+
+                if (_options.type == '') {
+                    _options.top = 0;
+                } else {
+                    _options.top = 'calc(' + _options.top + ' + 60px)';
+                }
+
+                var currentDialog = 0,
+                    maxDialog = elem.length - 1,
+                    dialogMain = $('<div class="' + elemClass + ' ' + _options.type + '" style="top:' + _options.topOffset + 'px"></div>'),
+                    dialogContainer = $('<div class="' + elemClass + '_container" style="top:' + _options.top + '"></div>'),
+                    dialogTop = $('<div class="' + elemClass + '_top animated"></div>'),
+                    dialogHeader = $('<div class="' + elemClass + '_header"></div>'),
+                    dialogBody = $('<div class="' + elemClass + '_body animated"></div>'),
+                    dialogCloseBut = $('<button type="button" class="close">&times;</button>');
+                dialogMain.append(dialogContainer);
+                dialogContainer.append(dialogTop, dialogBody);
+                dialogTop.append(dialogHeader);
+                dialogHeader.append(dialogCloseBut);
+                dialogBody.append(elem[currentDialog].innerHTML);
+
+                if (maxDialog > 0) {
+                    dialogHeader.append($('<div class="' + nextBut + '">&rsaquo;</div><div class="' + prevBut + ' notactive">&lsaquo;</div>'));
+                }
+                dialogHeader.append('<span>' + elem.find('.' + elemClass + '_header')[currentDialog].innerHTML + '</span>');
+
+                $('body').append(dialogMain).addClass(elemClass + 'Open');
+                if (_options.type == '') {
+                    var getScrollBarWidth = dialogMain.outerWidth() - dialogMain[0].scrollWidth;
+                    dialogTop.css({right: getScrollBarWidth + 'px'});
+                }
+
+                elemObj = $('.' + elemClass);
+                getAnimTime();
+
+                if (_options.onLoad && $.isFunction(_options.onLoad)) {
+                    _options.onLoad(elemObj, currentDialog + 1);
+                }
+                elem.trigger('load', {el: elemObj, current: currentDialog + 1});
+
+                elemObj.on('destroyed', function () {
+                    if (_options.onClose && $.isFunction(_options.onClose)) {
+                        _options.onClose();
+                    }
+                    elem.trigger('close');
+                });
+
+                elemObj.addClass('open');
+                setTimeout(function () {
+                    if (_options.type != '') {
+                        dialogContainer.css({opacity: 1});
+                    }
+                    dialogTop.addClass('fadeInTopBig');
+                    dialogBody.addClass('fadeInTopBig');
+                }, animTime + 100);
+
+                bindFooterButtons();
+
+                function bindFooterButtons() {
+                    elemObj.find('[data-dialogmodal-but="close"]').on('click', function () {
+                        dialogModalClose();
+                        $(this).off('click');
+                    });
+
+                    elemObj.find('[data-dialogmodal-but="ok"]').on('click', function (event) {
+                        var ok;
+                        if (_options.onOkBut && $.isFunction(_options.onOkBut)) {
+                            ok = _options.onOkBut(event);
+                        }
+                        if (ok !== false) {
+                            dialogModalClose();
+                        }
+                        $(this).off('click');
+                        elem.trigger('okbut');
+                    });
+
+                    elemObj.find('[data-dialogmodal-but="cancel"]').on('click', function () {
+                        if (_options.onCancelBut && $.isFunction(_options.onCancelBut)) {
+                            _options.onCancelBut();
+                        }
+                        dialogModalClose();
+                        $(this).off('click');
+                        elem.trigger('cancelbut');
+                    });
+
+                    elemObj.find('[data-dialogmodal-but="prev"]').on('click', function () {
+                        elemObj.find('.' + prevBut).click();
+                    });
+
+                    elemObj.find('[data-dialogmodal-but="next"]').on('click', function () {
+                        elemObj.find('.' + nextBut).click();
+                    });
+                }
+
+                elemObj.find('.' + prevBut).on('click', function () {
+                    if (currentDialog > 0) {
+                        --currentDialog;
+                        if (currentDialog < maxDialog) {
+                            elemObj.find('.' + nextBut).removeClass('notactive');
+                        }
+                        if (currentDialog === 0) {
+                            elemObj.find('.' + prevBut).addClass('notactive');
+                        }
+                        changeDialogContent();
+                    }
+                });
+
+                elemObj.find('.' + nextBut).on('click', function () {
+                    if (currentDialog < maxDialog) {
+                        ++currentDialog;
+                        if (currentDialog > 0) {
+                            elemObj.find('.' + prevBut).removeClass('notactive');
+                        }
+                        if (currentDialog == maxDialog) {
+                            elemObj.find('.' + nextBut).addClass('notactive');
+                        }
+                        changeDialogContent();
+                    }
+                });
+
+                function changeDialogContent() {
+                    dialogBody.empty().append(elem[currentDialog].innerHTML);
+                    dialogHeader.find('span').html(elem.find('.' + elemClass + '_header')[currentDialog].innerHTML);
+                    bindFooterButtons();
+                    if (_options.onChange && $.isFunction(_options.onChange)) {
+                        _options.onChange(elemObj, currentDialog + 1);
+                    }
+                    elem.trigger('change', {el: elemObj, current: currentDialog + 1});
+                }
+
+                elemObj.find('.close').on('click', function () {
+                    dialogModalClose();
+                    $(this).off('click');
+                });
+
+                $('html').on('keydown.' + elemClass + 'Event', function (event) {
+                    if (event.keyCode == 27) {
+                        dialogModalClose();
+                    } else if (event.keyCode == 37) {
+                        elemObj.find('.' + prevBut).click();
+                    } else if (event.keyCode == 39) {
+                        elemObj.find('.' + nextBut).click();
+                    }
+                });
+
+            },
+            hide: function () {
+                dialogModalClose();
+            }
+        };
+
+        function dialogModalClose() {
+            var elemObj = $('.' + elemClass);
+            elemObj.removeClass('open');
+            setTimeout(function () {
+                elemObj.remove();
+                $('body').removeClass(elemClass + 'Open').css({paddingRight: ''});
+                $('html.' + elemClass + 'Open').off('.' + elemClass + 'Event').removeClass(elemClass + 'Open');
+                elemObj.find('.' + prevBut).off('click');
+                elemObj.find('.' + nextBut).off('click');
+            }, animTime);
+        }
+
+        function getAnimTime() {
+            if (!animTime) {
+                animTime = elemObj.css('transitionDuration');
+                if (animTime !== undefined) {
+                    animTime = animTime.replace('s', '') * 1000;
+                } else {
+                    animTime = 0;
+                }
+            }
+        }
+
+        if (methods[method]) {
+            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
+        } else if (typeof method === 'object' || !method) {
+            return methods.init.apply(this, arguments);
+        }
+
+    };
+
+    $('* [data-dialogmodal-bind]').bind('click', function () {
+        var elemBind = $(this).attr('data-dialogmodal-bind');
+        var params = {};
+        if ($(this).attr('data-topoffset') !== undefined) {
+            params['topOffset'] = $(this).attr('data-topoffset');
+        }
+        if ($(this).attr('data-top') !== undefined) {
+            params['top'] = $(this).attr('data-top');
+        }
+        if ($(this).attr('data-topoffset') !== undefined) {
+            params['type'] = $(this).attr('data-type');
+        }
+        $(elemBind).dialogModal(params);
+    });
+
+    $.event.special.destroyed = {
+        remove: function (o) {
+            if (o.handler) {
+                o.handler();
+            }
+        }
+    };
+})(jQuery);
+
+
+/* titleModal */
+(function ($) {
+    $.fn.titleModal = function (method) {
+        $('.titleModal').off();
+
+        var methods = {
+            init: function () {
+                var elem,
+                    elemObj,
+                    elemClass = 'titleModal',
+                    getElem = $('.' + elemClass),
+                    effectIn = 'fadeIn',
+                    effectOut = 'fadeOut';
+
+                getElem.on('mouseenter', function () {
+                    elem = $(this);
+                    var titleAttr;
+                    if (elem.attr('title') !== undefined || elem.css('textOverflow') == 'ellipsis' || elem.css('textOverflow') == 'clip') {
+                        if (elem.attr('title') !== undefined) {
+                            titleAttr = elem.attr('title');
+                        } else {
+                            titleAttr = elem.text();
+                        }
+                        elem.removeAttr('title');
+                        elem.attr('data-title', titleAttr);
+                        var titleModal = $('<div class="' + elemClass + '_container animated"></div>');
+                        elemObj = $('.' + elemClass + '_container');
+                        var placement = elem.attr('data-placement');
+                        if (placement === undefined) {
+                            placement = 'bottom';
+                        }
+                        if (elemObj) {
+                            elemObj.remove();
+                        }
+                        elem.append(titleModal.append(titleAttr));
+                        getPlacement(placement);
+                    }
+                });
+
+                getElem.on('mouseleave', function () {
+                    elem = $(this);
+                    var titleAttr;
+                    if (elem.attr('data-title') !== undefined) {
+                        titleAttr = elem.attr('data-title');
+                        elem.removeAttr('data-title');
+                        elem.attr('title', titleAttr);
+                        reverseEffect();
+                        elemObj.remove();
+                    }
+                });
+
+                function getPlacement(placement) {
+                    elemObj = $('.' + elemClass + '_container');
+                    var eLeft, eTop,
+                        eMLeft = elem.css('marginLeft'),
+                        eMTop = elem.css('marginTop'),
+                        eMBottom = elem.css('marginBottom'),
+                        eHeight = elem.outerHeight(),
+                        eWidth = elem.outerWidth(),
+                        eObjMTop = elemObj.css('marginTop'),
+                        eObjWidth = elemObj.outerWidth(),
+                        eObjHeight = elemObj.outerHeight();
+                    if (elem.css('position') == 'fixed' || elem.css('position') == 'absolute') {
+                        eLeft = 0;
+                        eTop = 0;
+                    } else {
+                        eLeft = elem.position().left;
+                        eTop = elem.position().top;
+                    }
+                    switch (placement) {
+                        case 'bottom':
+                            elemObj.css({
+                                marginTop: parseInt(eObjMTop) - parseInt(eMBottom) + 'px',
+                                left: eLeft + parseInt(eMLeft) + (eWidth - eObjWidth) / 2 + 'px'
+                            }).addClass(effectIn + 'Bottom');
+                            break;
+                        case 'top':
+                            elemObj.css({
+                                top: eTop + parseInt(eMTop) - eObjHeight + 'px',
+                                left: eLeft + parseInt(eMLeft) + (eWidth - eObjWidth) / 2 + 'px'
+                            }).addClass('top ' + effectIn + 'Top');
+                            break;
+                        case 'left':
+                            elemObj.css({
+                                top: eTop + parseInt(eMTop) + eHeight / 2 - eObjHeight / 2 + 'px',
+                                left: eLeft + parseInt(eMLeft) - eObjWidth - 10 + 'px'
+                            }).addClass('left ' + effectIn + 'Left');
+                            break;
+                        case 'right':
+                            elemObj.css({
+                                top: eTop + parseInt(eMTop) + eHeight / 2 - eObjHeight / 2 + 'px',
+                                left: eLeft + parseInt(eMLeft) + eWidth + 10 + 'px'
+                            }).addClass('right ' + effectIn + 'Right');
+                            break;
+                    }
+                }
+
+                function reverseEffect() {
+                    var animClassOld = elemObj.attr('class'),
+                        animClassNew = animClassOld.replace(effectIn, effectOut);
+                    elemObj.removeClass(animClassOld).addClass(animClassNew);
+                }
+
+            }
+        };
+
+        if (methods[method]) {
+            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
+        } else if (typeof method === 'object' || !method) {
+            return methods.init.apply(this, arguments);
+        }
+
+    };
+    $('.titleModal').titleModal();
+    document.addEventListener("DOMNodeInserted", function (event) {
+        if ($(event.target).hasClass('titleModal')) {
+            $('.titleModal').titleModal();
+        }
+    }, false);
+})(jQuery);
+
+
+/* confirmModal */
+(function ($) {
+    $.fn.confirmModal = function (method) {
+        var elem = $(this),
+            elemObj,
+            elemClass = 'confirmModal',
+            _options,
+            animTime;
+
+        var methods = {
+            init: function (params) {
+                var _defaults = {
+                    topOffset: 0,
+                    onOkBut: function () {
+                        return true;
+                    },
+                    onCancelBut: function () {
+                    },
+                    onLoad: function () {
+                    },
+                    onClose: function () {
+                    }
+                };
+                _options = $.extend(_defaults, params);
+
+                $('html.' + elemClass + 'Open').off('.' + elemClass + 'Event').removeClass(elemClass + 'Open');
+                $('.' + elemClass).remove();
+
+                var dialogMain = $('<div class="' + elemClass + '" style="top:' + _options.topOffset + 'px"></div>'),
+                    dialogBody = $('<div class="' + elemClass + '_body animated"></div>');
+                dialogMain.append(dialogBody);
+                dialogBody.append(elem[0].innerHTML);
+
+                $('body').append(dialogMain).addClass(elemClass + 'Open');
+
+                elemObj = $('.' + elemClass);
+                getAnimTime();
+
+                if (_options.onLoad && $.isFunction(_options.onLoad)) {
+                    _options.onLoad();
+                }
+
+                elemObj.on('destroyed', function () {
+                    if (_options.onClose && $.isFunction(_options.onClose)) {
+                        _options.onClose();
+                    }
+                });
+
+                elemObj.addClass('open');
+                setTimeout(function () {
+                    dialogBody.addClass('fadeInTopBig');
+
+                    setTimeout(function () {
+                        dialogBody.removeClass('fadeInTopBig').addClass('open');
+                    }, animTime + 100);
+
+                }, animTime + 100);
+
+                bindFooterButtons();
+
+                function bindFooterButtons() {
+                    elemObj.find('[data-confirmmodal-but="close"]').on('click', function () {
+                        confirmModalClose();
+                        $(this).off('click');
+                    });
+
+                    elemObj.find('[data-confirmmodal-but="ok"]').on('click', function (event) {
+                        var ok;
+                        if (_options.onOkBut && $.isFunction(_options.onOkBut)) {
+                            ok = _options.onOkBut(event);
+                        }
+                        if (ok !== false) {
+                            confirmModalClose();
+                        }
+                        $(this).off('click');
+                    });
+
+                    elemObj.find('[data-confirmmodal-but="cancel"]').on('click', function () {
+                        if (_options.onCancelBut && $.isFunction(_options.onCancelBut)) {
+                            _options.onCancelBut();
+                        }
+                        confirmModalClose();
+                        $(this).off('click');
+                    });
+
+
+                    function needConfirm() {
+                        dialogBody.addClass('needConfirm');
+                        setTimeout(function () {
+                            dialogBody.removeClass('needConfirm');
+                        }, animTime + 100);
+                    }
+
+                    elemObj.on('click', function (event) {
+                        var target = $(event.target);
+                        if (!target.parents().andSelf().is(dialogBody)) {
+                            needConfirm();
+                        }
+                    });
+
+                    $('html').on('keydown.' + elemClass + 'Event', function (event) {
+                        if (event.keyCode == 27) {
+                            needConfirm();
+                        }
+                    });
+
+                }
+
+            },
+            hide: function () {
+                confirmModalClose();
+            }
+        };
+
+        function confirmModalClose() {
+            var elemObj = $('.' + elemClass);
+            elemObj.removeClass('open');
+            setTimeout(function () {
+                elemObj.remove();
+                $('body').removeClass(elemClass + 'Open').css({paddingRight: ''});
+                $('html.' + elemClass + 'Open').off('.' + elemClass + 'Event').removeClass(elemClass + 'Open');
+            }, animTime);
+        }
+
+        function getAnimTime() {
+            if (!animTime) {
+                animTime = elemObj.css('transitionDuration');
+                if (animTime !== undefined) {
+                    animTime = animTime.replace('s', '') * 1000;
+                } else {
+                    animTime = 0;
+                }
+            }
+        }
+
+        if (methods[method]) {
+            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
+        } else if (typeof method === 'object' || !method) {
+            return methods.init.apply(this, arguments);
+        }
+
+    };
+
+    $('* [data-confirmmodal-bind]').bind('click', function () {
+        var elemBind = $(this).attr('data-confirmmodal-bind');
+        var params = {};
+        if ($(this).attr('data-topoffset') !== undefined) {
+            params['topOffset'] = $(this).attr('data-topoffset');
+        }
+        $(elemBind).confirmModal(params);
+    });
+
+    $.event.special.destroyed = {
+        remove: function (o) {
+            if (o.handler) {
+                o.handler();
+            }
+        }
+    };
+})(jQuery);