/* arcticModal — jQuery plugin Version: 0.3 Author: Sergey Predvoditelev (sergey.predvoditelev@gmail.com) Company: Arctic Laboratory (http://arcticlab.ru/) Docs & Examples: http://arcticlab.ru/arcticmodal/ */ (function($) { var default_options = { type: 'html', // ajax или html content: '', url: '', ajax: {}, ajax_request: null, closeOnEsc: true, closeOnOverlayClick: true, clone: false, overlay: { block: undefined, tpl: '
', css: { backgroundColor: '#000', opacity: .6 } }, container: { block: undefined, tpl: '
' }, wrap: undefined, body: undefined, errors: { tpl: '
', autoclose_delay: 2000, ajax_unsuccessful_load: 'Error' }, openEffect: { type: 'fade', speed: 400 }, closeEffect: { type: 'fade', speed: 400 }, beforeOpen: $.noop, afterOpen: $.noop, beforeClose: $.noop, afterClose: $.noop, afterLoading: $.noop, afterLoadingOnShow: $.noop, errorLoading: $.noop }; var modalID = 0; var modals = $([]); var utils = { // Определяет произошло ли событие e вне блока block isEventOut: function(blocks, e) { var r = true; $(blocks).each(function() { if ($(e.target).get(0)==$(this).get(0)) r = false; if ($(e.target).closest('HTML', $(this).get(0)).length==0) r = false; }); return r; } }; var modal = { // Возвращает элемент, которым был вызван плагин getParentEl: function(el) { var r = $(el); if (r.data('arcticmodal')) return r; r = $(el).closest('.arcticmodal-container').data('arcticmodalParentEl'); if (r) return r; return false; }, // Переход transition: function(el, action, options, callback) { callback = callback==undefined ? $.noop : callback; switch (options.type) { case 'fade': action=='show' ? el.fadeIn(options.speed, callback) : el.fadeOut(options.speed, callback); break; case 'none': action=='show' ? el.show() : el.hide(); callback(); break; } }, // Подготвка содержимого окна prepare_body: function(D, $this) { // Обработчик закрытия $('.arcticmodal-close', D.body).unbind('click.arcticmodal').bind('click.arcticmodal', function() { $this.arcticmodal('close'); return false; }); }, // Инициализация элемента init_el: function($this, options) { var D = $this.data('arcticmodal'); if (D) return; D = options; modalID++; D.modalID = modalID; // Overlay D.overlay.block = $(D.overlay.tpl); D.overlay.block.css(D.overlay.css); // Container D.container.block = $(D.container.tpl); // BODY D.body = $('.arcticmodal-container_i2', D.container.block); if (options.clone) { D.body.html($this.clone(true)); } else { $this.before('