Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / ui / new_ui / ui / javascripts / jquery.magnific-popup.js @ 0ef95fe4

History | View | Annotate | Download (44.2 kB)

1 342fa48b Olga Brani
/*! Magnific Popup - v0.9.5 - 2013-08-21
2 342fa48b Olga Brani
* http://dimsemenov.com/plugins/magnific-popup/
3 342fa48b Olga Brani
* Copyright (c) 2013 Dmitry Semenov; */
4 342fa48b Olga Brani
;(function($) {
5 342fa48b Olga Brani
6 342fa48b Olga Brani
/*>>core*/
7 342fa48b Olga Brani
/**
8 342fa48b Olga Brani
 * 
9 342fa48b Olga Brani
 * Magnific Popup Core JS file
10 342fa48b Olga Brani
 * 
11 342fa48b Olga Brani
 */
12 342fa48b Olga Brani
13 342fa48b Olga Brani
14 342fa48b Olga Brani
/**
15 342fa48b Olga Brani
 * Private static constants
16 342fa48b Olga Brani
 */
17 342fa48b Olga Brani
var CLOSE_EVENT = 'Close',
18 342fa48b Olga Brani
        BEFORE_CLOSE_EVENT = 'BeforeClose',
19 342fa48b Olga Brani
        AFTER_CLOSE_EVENT = 'AfterClose',
20 342fa48b Olga Brani
        BEFORE_APPEND_EVENT = 'BeforeAppend',
21 342fa48b Olga Brani
        MARKUP_PARSE_EVENT = 'MarkupParse',
22 342fa48b Olga Brani
        OPEN_EVENT = 'Open',
23 342fa48b Olga Brani
        CHANGE_EVENT = 'Change',
24 342fa48b Olga Brani
        NS = 'mfp',
25 342fa48b Olga Brani
        EVENT_NS = '.' + NS,
26 342fa48b Olga Brani
        READY_CLASS = 'mfp-ready',
27 342fa48b Olga Brani
        REMOVING_CLASS = 'mfp-removing',
28 342fa48b Olga Brani
        PREVENT_CLOSE_CLASS = 'mfp-prevent-close';
29 342fa48b Olga Brani
30 342fa48b Olga Brani
31 342fa48b Olga Brani
/**
32 342fa48b Olga Brani
 * Private vars 
33 342fa48b Olga Brani
 */
34 342fa48b Olga Brani
var mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this'
35 342fa48b Olga Brani
        MagnificPopup = function(){},
36 342fa48b Olga Brani
        _isJQ = !!(window.jQuery),
37 342fa48b Olga Brani
        _prevStatus,
38 342fa48b Olga Brani
        _window = $(window),
39 342fa48b Olga Brani
        _body,
40 342fa48b Olga Brani
        _document,
41 342fa48b Olga Brani
        _prevContentType,
42 342fa48b Olga Brani
        _wrapClasses,
43 342fa48b Olga Brani
        _currPopupType;
44 342fa48b Olga Brani
45 342fa48b Olga Brani
46 342fa48b Olga Brani
/**
47 342fa48b Olga Brani
 * Private functions
48 342fa48b Olga Brani
 */
49 342fa48b Olga Brani
var _mfpOn = function(name, f) {
50 342fa48b Olga Brani
                mfp.ev.on(NS + name + EVENT_NS, f);
51 342fa48b Olga Brani
        },
52 342fa48b Olga Brani
        _getEl = function(className, appendTo, html, raw) {
53 342fa48b Olga Brani
                var el = document.createElement('div');
54 342fa48b Olga Brani
                el.className = 'mfp-'+className;
55 342fa48b Olga Brani
                if(html) {
56 342fa48b Olga Brani
                        el.innerHTML = html;
57 342fa48b Olga Brani
                }
58 342fa48b Olga Brani
                if(!raw) {
59 342fa48b Olga Brani
                        el = $(el);
60 342fa48b Olga Brani
                        if(appendTo) {
61 342fa48b Olga Brani
                                el.appendTo(appendTo);
62 342fa48b Olga Brani
                        }
63 342fa48b Olga Brani
                } else if(appendTo) {
64 342fa48b Olga Brani
                        appendTo.appendChild(el);
65 342fa48b Olga Brani
                }
66 342fa48b Olga Brani
                return el;
67 342fa48b Olga Brani
        },
68 342fa48b Olga Brani
        _mfpTrigger = function(e, data) {
69 342fa48b Olga Brani
                mfp.ev.triggerHandler(NS + e, data);
70 342fa48b Olga Brani
71 342fa48b Olga Brani
                if(mfp.st.callbacks) {
72 342fa48b Olga Brani
                        // converts "mfpEventName" to "eventName" callback and triggers it if it's present
73 342fa48b Olga Brani
                        e = e.charAt(0).toLowerCase() + e.slice(1);
74 342fa48b Olga Brani
                        if(mfp.st.callbacks[e]) {
75 342fa48b Olga Brani
                                mfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]);
76 342fa48b Olga Brani
                        }
77 342fa48b Olga Brani
                }
78 342fa48b Olga Brani
        },
79 342fa48b Olga Brani
        _setFocus = function() {
80 342fa48b Olga Brani
                (mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus();
81 342fa48b Olga Brani
        },
82 342fa48b Olga Brani
        _getCloseBtn = function(type) {
83 342fa48b Olga Brani
                if(type !== _currPopupType || !mfp.currTemplate.closeBtn) {
84 342fa48b Olga Brani
                        mfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) );
85 342fa48b Olga Brani
                        _currPopupType = type;
86 342fa48b Olga Brani
                }
87 342fa48b Olga Brani
                return mfp.currTemplate.closeBtn;
88 342fa48b Olga Brani
        },
89 342fa48b Olga Brani
        // Initialize Magnific Popup only when called at least once
90 342fa48b Olga Brani
        _checkInstance = function() {
91 342fa48b Olga Brani
                if(!$.magnificPopup.instance) {
92 342fa48b Olga Brani
                        mfp = new MagnificPopup();
93 342fa48b Olga Brani
                        mfp.init();
94 342fa48b Olga Brani
                        $.magnificPopup.instance = mfp;
95 342fa48b Olga Brani
                }
96 342fa48b Olga Brani
        },
97 342fa48b Olga Brani
        // Check to close popup or not
98 342fa48b Olga Brani
        // "target" is an element that was clicked
99 342fa48b Olga Brani
        _checkIfClose = function(target) {
100 342fa48b Olga Brani
101 342fa48b Olga Brani
                if($(target).hasClass(PREVENT_CLOSE_CLASS)) {
102 342fa48b Olga Brani
                        return;
103 342fa48b Olga Brani
                }
104 342fa48b Olga Brani
105 342fa48b Olga Brani
                var closeOnContent = mfp.st.closeOnContentClick;
106 342fa48b Olga Brani
                var closeOnBg = mfp.st.closeOnBgClick;
107 342fa48b Olga Brani
108 342fa48b Olga Brani
                if(closeOnContent && closeOnBg) {
109 342fa48b Olga Brani
                        return true;
110 342fa48b Olga Brani
                } else {
111 342fa48b Olga Brani
112 342fa48b Olga Brani
                        // We close the popup if click is on close button or on preloader. Or if there is no content.
113 342fa48b Olga Brani
                        if(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) {
114 342fa48b Olga Brani
                                return true;
115 342fa48b Olga Brani
                        }
116 342fa48b Olga Brani
117 342fa48b Olga Brani
                        // if click is outside the content
118 342fa48b Olga Brani
                        if(  (target !== mfp.content[0] && !$.contains(mfp.content[0], target))  ) {
119 342fa48b Olga Brani
                                if(closeOnBg) {
120 342fa48b Olga Brani
                                        // last check, if the clicked element is in DOM, (in case it's removed onclick)
121 342fa48b Olga Brani
                                        if( $.contains(document, target) ) {
122 342fa48b Olga Brani
                                                return true;
123 342fa48b Olga Brani
                                        }
124 342fa48b Olga Brani
                                }
125 342fa48b Olga Brani
                        } else if(closeOnContent) {
126 342fa48b Olga Brani
                                return true;
127 342fa48b Olga Brani
                        }
128 342fa48b Olga Brani
129 342fa48b Olga Brani
                }
130 342fa48b Olga Brani
                return false;
131 342fa48b Olga Brani
        },
132 342fa48b Olga Brani
        // CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr
133 342fa48b Olga Brani
        supportsTransitions = function() {
134 342fa48b Olga Brani
                var s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist
135 342fa48b Olga Brani
                        v = ['ms','O','Moz','Webkit']; // 'v' for vendor
136 342fa48b Olga Brani
137 342fa48b Olga Brani
                if( s['transition'] !== undefined ) {
138 342fa48b Olga Brani
                        return true; 
139 342fa48b Olga Brani
                }
140 342fa48b Olga Brani
                        
141 342fa48b Olga Brani
                while( v.length ) {
142 342fa48b Olga Brani
                        if( v.pop() + 'Transition' in s ) {
143 342fa48b Olga Brani
                                return true;
144 342fa48b Olga Brani
                        }
145 342fa48b Olga Brani
                }
146 342fa48b Olga Brani
                                
147 342fa48b Olga Brani
                return false;
148 342fa48b Olga Brani
        };
149 342fa48b Olga Brani
150 342fa48b Olga Brani
151 342fa48b Olga Brani
152 342fa48b Olga Brani
/**
153 342fa48b Olga Brani
 * Public functions
154 342fa48b Olga Brani
 */
155 342fa48b Olga Brani
MagnificPopup.prototype = {
156 342fa48b Olga Brani
157 342fa48b Olga Brani
        constructor: MagnificPopup,
158 342fa48b Olga Brani
159 342fa48b Olga Brani
        /**
160 342fa48b Olga Brani
         * Initializes Magnific Popup plugin. 
161 342fa48b Olga Brani
         * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed
162 342fa48b Olga Brani
         */
163 342fa48b Olga Brani
        init: function() {
164 342fa48b Olga Brani
                var appVersion = navigator.appVersion;
165 342fa48b Olga Brani
                mfp.isIE7 = appVersion.indexOf("MSIE 7.") !== -1; 
166 342fa48b Olga Brani
                mfp.isIE8 = appVersion.indexOf("MSIE 8.") !== -1;
167 342fa48b Olga Brani
                mfp.isLowIE = mfp.isIE7 || mfp.isIE8;
168 342fa48b Olga Brani
                mfp.isAndroid = (/android/gi).test(appVersion);
169 342fa48b Olga Brani
                mfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion);
170 342fa48b Olga Brani
                mfp.supportsTransition = supportsTransitions();
171 342fa48b Olga Brani
172 342fa48b Olga Brani
                // We disable fixed positioned lightbox on devices that don't handle it nicely.
173 342fa48b Olga Brani
                // If you know a better way of detecting this - let me know.
174 342fa48b Olga Brani
                mfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) );
175 342fa48b Olga Brani
                _body = $(document.body);
176 342fa48b Olga Brani
                _document = $(document);
177 342fa48b Olga Brani
178 342fa48b Olga Brani
                mfp.popupsCache = {};
179 342fa48b Olga Brani
        },
180 342fa48b Olga Brani
181 342fa48b Olga Brani
        /**
182 342fa48b Olga Brani
         * Opens popup
183 342fa48b Olga Brani
         * @param  data [description]
184 342fa48b Olga Brani
         */
185 342fa48b Olga Brani
        open: function(data) {
186 342fa48b Olga Brani
187 342fa48b Olga Brani
                var i;
188 342fa48b Olga Brani
189 342fa48b Olga Brani
                if(data.isObj === false) { 
190 342fa48b Olga Brani
                        // convert jQuery collection to array to avoid conflicts later
191 342fa48b Olga Brani
                        mfp.items = data.items.toArray();
192 342fa48b Olga Brani
193 342fa48b Olga Brani
                        mfp.index = 0;
194 342fa48b Olga Brani
                        var items = data.items,
195 342fa48b Olga Brani
                                item;
196 342fa48b Olga Brani
                        for(i = 0; i < items.length; i++) {
197 342fa48b Olga Brani
                                item = items[i];
198 342fa48b Olga Brani
                                if(item.parsed) {
199 342fa48b Olga Brani
                                        item = item.el[0];
200 342fa48b Olga Brani
                                }
201 342fa48b Olga Brani
                                if(item === data.el[0]) {
202 342fa48b Olga Brani
                                        mfp.index = i;
203 342fa48b Olga Brani
                                        break;
204 342fa48b Olga Brani
                                }
205 342fa48b Olga Brani
                        }
206 342fa48b Olga Brani
                } else {
207 342fa48b Olga Brani
                        mfp.items = $.isArray(data.items) ? data.items : [data.items];
208 342fa48b Olga Brani
                        mfp.index = data.index || 0;
209 342fa48b Olga Brani
                }
210 342fa48b Olga Brani
211 342fa48b Olga Brani
                // if popup is already opened - we just update the content
212 342fa48b Olga Brani
                if(mfp.isOpen) {
213 342fa48b Olga Brani
                        mfp.updateItemHTML();
214 342fa48b Olga Brani
                        return;
215 342fa48b Olga Brani
                }
216 342fa48b Olga Brani
                
217 342fa48b Olga Brani
                mfp.types = []; 
218 342fa48b Olga Brani
                _wrapClasses = '';
219 342fa48b Olga Brani
                if(data.mainEl && data.mainEl.length) {
220 342fa48b Olga Brani
                        mfp.ev = data.mainEl.eq(0);
221 342fa48b Olga Brani
                } else {
222 342fa48b Olga Brani
                        mfp.ev = _document;
223 342fa48b Olga Brani
                }
224 342fa48b Olga Brani
225 342fa48b Olga Brani
                if(data.key) {
226 342fa48b Olga Brani
                        if(!mfp.popupsCache[data.key]) {
227 342fa48b Olga Brani
                                mfp.popupsCache[data.key] = {};
228 342fa48b Olga Brani
                        }
229 342fa48b Olga Brani
                        mfp.currTemplate = mfp.popupsCache[data.key];
230 342fa48b Olga Brani
                } else {
231 342fa48b Olga Brani
                        mfp.currTemplate = {};
232 342fa48b Olga Brani
                }
233 342fa48b Olga Brani
234 342fa48b Olga Brani
235 342fa48b Olga Brani
236 342fa48b Olga Brani
                mfp.st = $.extend(true, {}, $.magnificPopup.defaults, data ); 
237 342fa48b Olga Brani
                mfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos;
238 342fa48b Olga Brani
239 342fa48b Olga Brani
                if(mfp.st.modal) {
240 342fa48b Olga Brani
                        mfp.st.closeOnContentClick = false;
241 342fa48b Olga Brani
                        mfp.st.closeOnBgClick = false;
242 342fa48b Olga Brani
                        mfp.st.showCloseBtn = false;
243 342fa48b Olga Brani
                        mfp.st.enableEscapeKey = false;
244 342fa48b Olga Brani
                }
245 342fa48b Olga Brani
                
246 342fa48b Olga Brani
247 342fa48b Olga Brani
                // Building markup
248 342fa48b Olga Brani
                // main containers are created only once
249 342fa48b Olga Brani
                if(!mfp.bgOverlay) {
250 342fa48b Olga Brani
251 342fa48b Olga Brani
                        // Dark overlay
252 342fa48b Olga Brani
                        mfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() {
253 342fa48b Olga Brani
                                mfp.close();
254 342fa48b Olga Brani
                        });
255 342fa48b Olga Brani
256 342fa48b Olga Brani
                        mfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) {
257 342fa48b Olga Brani
                                if(_checkIfClose(e.target)) {
258 342fa48b Olga Brani
                                        mfp.close();
259 342fa48b Olga Brani
                                }
260 342fa48b Olga Brani
                        });
261 342fa48b Olga Brani
262 342fa48b Olga Brani
                        mfp.container = _getEl('container', mfp.wrap);
263 342fa48b Olga Brani
                }
264 342fa48b Olga Brani
265 342fa48b Olga Brani
                mfp.contentContainer = _getEl('content');
266 342fa48b Olga Brani
                if(mfp.st.preloader) {
267 342fa48b Olga Brani
                        mfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading);
268 342fa48b Olga Brani
                }
269 342fa48b Olga Brani
270 342fa48b Olga Brani
271 342fa48b Olga Brani
                // Initializing modules
272 342fa48b Olga Brani
                var modules = $.magnificPopup.modules;
273 342fa48b Olga Brani
                for(i = 0; i < modules.length; i++) {
274 342fa48b Olga Brani
                        var n = modules[i];
275 342fa48b Olga Brani
                        n = n.charAt(0).toUpperCase() + n.slice(1);
276 342fa48b Olga Brani
                        mfp['init'+n].call(mfp);
277 342fa48b Olga Brani
                }
278 342fa48b Olga Brani
                _mfpTrigger('BeforeOpen');
279 342fa48b Olga Brani
280 342fa48b Olga Brani
281 342fa48b Olga Brani
                if(mfp.st.showCloseBtn) {
282 342fa48b Olga Brani
                        // Close button
283 342fa48b Olga Brani
                        if(!mfp.st.closeBtnInside) {
284 342fa48b Olga Brani
                                mfp.wrap.append( _getCloseBtn() );
285 342fa48b Olga Brani
                        } else {
286 342fa48b Olga Brani
                                _mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) {
287 342fa48b Olga Brani
                                        values.close_replaceWith = _getCloseBtn(item.type);
288 342fa48b Olga Brani
                                });
289 342fa48b Olga Brani
                                _wrapClasses += ' mfp-close-btn-in';
290 342fa48b Olga Brani
                        }
291 342fa48b Olga Brani
                }
292 342fa48b Olga Brani
293 342fa48b Olga Brani
                if(mfp.st.alignTop) {
294 342fa48b Olga Brani
                        _wrapClasses += ' mfp-align-top';
295 342fa48b Olga Brani
                }
296 342fa48b Olga Brani
297 342fa48b Olga Brani
        
298 342fa48b Olga Brani
299 342fa48b Olga Brani
                if(mfp.fixedContentPos) {
300 342fa48b Olga Brani
                        mfp.wrap.css({
301 342fa48b Olga Brani
                                overflow: mfp.st.overflowY,
302 342fa48b Olga Brani
                                overflowX: 'hidden',
303 342fa48b Olga Brani
                                overflowY: mfp.st.overflowY
304 342fa48b Olga Brani
                        });
305 342fa48b Olga Brani
                } else {
306 342fa48b Olga Brani
                        mfp.wrap.css({ 
307 342fa48b Olga Brani
                                top: _window.scrollTop(),
308 342fa48b Olga Brani
                                position: 'absolute'
309 342fa48b Olga Brani
                        });
310 342fa48b Olga Brani
                }
311 342fa48b Olga Brani
                if( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) {
312 342fa48b Olga Brani
                        mfp.bgOverlay.css({
313 342fa48b Olga Brani
                                height: _document.height(),
314 342fa48b Olga Brani
                                position: 'absolute'
315 342fa48b Olga Brani
                        });
316 342fa48b Olga Brani
                }
317 342fa48b Olga Brani
318 342fa48b Olga Brani
                
319 342fa48b Olga Brani
320 342fa48b Olga Brani
                if(mfp.st.enableEscapeKey) {
321 342fa48b Olga Brani
                        // Close on ESC key
322 342fa48b Olga Brani
                        _document.on('keyup' + EVENT_NS, function(e) {
323 342fa48b Olga Brani
                                if(e.keyCode === 27) {
324 342fa48b Olga Brani
                                        mfp.close();
325 342fa48b Olga Brani
                                }
326 342fa48b Olga Brani
                        });
327 342fa48b Olga Brani
                }
328 342fa48b Olga Brani
329 342fa48b Olga Brani
                _window.on('resize' + EVENT_NS, function() {
330 342fa48b Olga Brani
                        mfp.updateSize();
331 342fa48b Olga Brani
                });
332 342fa48b Olga Brani
333 342fa48b Olga Brani
334 342fa48b Olga Brani
                if(!mfp.st.closeOnContentClick) {
335 342fa48b Olga Brani
                        _wrapClasses += ' mfp-auto-cursor';
336 342fa48b Olga Brani
                }
337 342fa48b Olga Brani
                
338 342fa48b Olga Brani
                if(_wrapClasses)
339 342fa48b Olga Brani
                        mfp.wrap.addClass(_wrapClasses);
340 342fa48b Olga Brani
341 342fa48b Olga Brani
342 342fa48b Olga Brani
                // this triggers recalculation of layout, so we get it once to not to trigger twice
343 342fa48b Olga Brani
                var windowHeight = mfp.wH = _window.height();
344 342fa48b Olga Brani
345 342fa48b Olga Brani
                
346 342fa48b Olga Brani
                var windowStyles = {};
347 342fa48b Olga Brani
348 342fa48b Olga Brani
                if( mfp.fixedContentPos ) {
349 342fa48b Olga Brani
            if(mfp._hasScrollBar(windowHeight)){
350 342fa48b Olga Brani
                var s = mfp._getScrollbarSize();
351 342fa48b Olga Brani
                if(s) {
352 342fa48b Olga Brani
                    windowStyles.paddingRight = s;
353 342fa48b Olga Brani
                }
354 342fa48b Olga Brani
            }
355 342fa48b Olga Brani
        }
356 342fa48b Olga Brani
357 342fa48b Olga Brani
                if(mfp.fixedContentPos) {
358 342fa48b Olga Brani
                        if(!mfp.isIE7) {
359 342fa48b Olga Brani
                                windowStyles.overflow = 'hidden';
360 342fa48b Olga Brani
                        } else {
361 342fa48b Olga Brani
                                // ie7 double-scroll bug
362 342fa48b Olga Brani
                                $('body, html').css('overflow', 'hidden');
363 342fa48b Olga Brani
                        }
364 342fa48b Olga Brani
                }
365 342fa48b Olga Brani
366 342fa48b Olga Brani
                
367 342fa48b Olga Brani
                
368 342fa48b Olga Brani
                var classesToadd = mfp.st.mainClass;
369 342fa48b Olga Brani
                if(mfp.isIE7) {
370 342fa48b Olga Brani
                        classesToadd += ' mfp-ie7';
371 342fa48b Olga Brani
                }
372 342fa48b Olga Brani
                if(classesToadd) {
373 342fa48b Olga Brani
                        mfp._addClassToMFP( classesToadd );
374 342fa48b Olga Brani
                }
375 342fa48b Olga Brani
376 342fa48b Olga Brani
                // add content
377 342fa48b Olga Brani
                mfp.updateItemHTML();
378 342fa48b Olga Brani
379 342fa48b Olga Brani
                _mfpTrigger('BuildControls');
380 342fa48b Olga Brani
381 342fa48b Olga Brani
382 342fa48b Olga Brani
                // remove scrollbar, add padding e.t.c
383 342fa48b Olga Brani
                $('html').css(windowStyles);
384 342fa48b Olga Brani
                
385 342fa48b Olga Brani
                // add everything to DOM
386 342fa48b Olga Brani
                mfp.bgOverlay.add(mfp.wrap).prependTo( document.body );
387 342fa48b Olga Brani
388 342fa48b Olga Brani
389 342fa48b Olga Brani
390 342fa48b Olga Brani
                // Save last focused element
391 342fa48b Olga Brani
                mfp._lastFocusedEl = document.activeElement;
392 342fa48b Olga Brani
                
393 342fa48b Olga Brani
                // Wait for next cycle to allow CSS transition
394 342fa48b Olga Brani
                setTimeout(function() {
395 342fa48b Olga Brani
                        
396 342fa48b Olga Brani
                        if(mfp.content) {
397 342fa48b Olga Brani
                                mfp._addClassToMFP(READY_CLASS);
398 342fa48b Olga Brani
                                _setFocus();
399 342fa48b Olga Brani
                        } else {
400 342fa48b Olga Brani
                                // if content is not defined (not loaded e.t.c) we add class only for BG
401 342fa48b Olga Brani
                                mfp.bgOverlay.addClass(READY_CLASS);
402 342fa48b Olga Brani
                        }
403 342fa48b Olga Brani
                        
404 342fa48b Olga Brani
                        // Trap the focus in popup
405 342fa48b Olga Brani
                        _document.on('focusin' + EVENT_NS, function (e) {
406 342fa48b Olga Brani
                                if( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) {
407 342fa48b Olga Brani
                                        _setFocus();
408 342fa48b Olga Brani
                                        return false;
409 342fa48b Olga Brani
                                }
410 342fa48b Olga Brani
                        });
411 342fa48b Olga Brani
412 342fa48b Olga Brani
                }, 16);
413 342fa48b Olga Brani
414 342fa48b Olga Brani
                mfp.isOpen = true;
415 342fa48b Olga Brani
                mfp.updateSize(windowHeight);
416 342fa48b Olga Brani
                _mfpTrigger(OPEN_EVENT);
417 342fa48b Olga Brani
        },
418 342fa48b Olga Brani
419 342fa48b Olga Brani
        /**
420 342fa48b Olga Brani
         * Closes the popup
421 342fa48b Olga Brani
         */
422 342fa48b Olga Brani
        close: function() {
423 342fa48b Olga Brani
                if(!mfp.isOpen) return;
424 342fa48b Olga Brani
                _mfpTrigger(BEFORE_CLOSE_EVENT);
425 342fa48b Olga Brani
426 342fa48b Olga Brani
                mfp.isOpen = false;
427 342fa48b Olga Brani
                // for CSS3 animation
428 342fa48b Olga Brani
                if(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition )  {
429 342fa48b Olga Brani
                        mfp._addClassToMFP(REMOVING_CLASS);
430 342fa48b Olga Brani
                        setTimeout(function() {
431 342fa48b Olga Brani
                                mfp._close();
432 342fa48b Olga Brani
                        }, mfp.st.removalDelay);
433 342fa48b Olga Brani
                } else {
434 342fa48b Olga Brani
                        mfp._close();
435 342fa48b Olga Brani
                }
436 342fa48b Olga Brani
        },
437 342fa48b Olga Brani
438 342fa48b Olga Brani
        /**
439 342fa48b Olga Brani
         * Helper for close() function
440 342fa48b Olga Brani
         */
441 342fa48b Olga Brani
        _close: function() {
442 342fa48b Olga Brani
                _mfpTrigger(CLOSE_EVENT);
443 342fa48b Olga Brani
444 342fa48b Olga Brani
                var classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' ';
445 342fa48b Olga Brani
446 342fa48b Olga Brani
                mfp.bgOverlay.detach();
447 342fa48b Olga Brani
                mfp.wrap.detach();
448 342fa48b Olga Brani
                mfp.container.empty();
449 342fa48b Olga Brani
450 342fa48b Olga Brani
                if(mfp.st.mainClass) {
451 342fa48b Olga Brani
                        classesToRemove += mfp.st.mainClass + ' ';
452 342fa48b Olga Brani
                }
453 342fa48b Olga Brani
454 342fa48b Olga Brani
                mfp._removeClassFromMFP(classesToRemove);
455 342fa48b Olga Brani
456 342fa48b Olga Brani
                if(mfp.fixedContentPos) {
457 342fa48b Olga Brani
                        var windowStyles = {paddingRight: ''};
458 342fa48b Olga Brani
                        if(mfp.isIE7) {
459 342fa48b Olga Brani
                                $('body, html').css('overflow', '');
460 342fa48b Olga Brani
                        } else {
461 342fa48b Olga Brani
                                windowStyles.overflow = '';
462 342fa48b Olga Brani
                        }
463 342fa48b Olga Brani
                        $('html').css(windowStyles);
464 342fa48b Olga Brani
                }
465 342fa48b Olga Brani
                
466 342fa48b Olga Brani
                _document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS);
467 342fa48b Olga Brani
                mfp.ev.off(EVENT_NS);
468 342fa48b Olga Brani
469 342fa48b Olga Brani
                // clean up DOM elements that aren't removed
470 342fa48b Olga Brani
                mfp.wrap.attr('class', 'mfp-wrap').removeAttr('style');
471 342fa48b Olga Brani
                mfp.bgOverlay.attr('class', 'mfp-bg');
472 342fa48b Olga Brani
                mfp.container.attr('class', 'mfp-container');
473 342fa48b Olga Brani
474 342fa48b Olga Brani
                // remove close button from target element
475 342fa48b Olga Brani
                if(mfp.st.showCloseBtn &&
476 342fa48b Olga Brani
                (!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) {
477 342fa48b Olga Brani
                        if(mfp.currTemplate.closeBtn)
478 342fa48b Olga Brani
                                mfp.currTemplate.closeBtn.detach();
479 342fa48b Olga Brani
                }
480 342fa48b Olga Brani
481 342fa48b Olga Brani
482 342fa48b Olga Brani
                if(mfp._lastFocusedEl) {
483 342fa48b Olga Brani
                        $(mfp._lastFocusedEl).focus(); // put tab focus back
484 342fa48b Olga Brani
                }
485 342fa48b Olga Brani
                mfp.currItem = null;        
486 342fa48b Olga Brani
                mfp.content = null;
487 342fa48b Olga Brani
                mfp.currTemplate = null;
488 342fa48b Olga Brani
                mfp.prevHeight = 0;
489 342fa48b Olga Brani
490 342fa48b Olga Brani
                _mfpTrigger(AFTER_CLOSE_EVENT);
491 342fa48b Olga Brani
        },
492 342fa48b Olga Brani
        
493 342fa48b Olga Brani
        updateSize: function(winHeight) {
494 342fa48b Olga Brani
495 342fa48b Olga Brani
                if(mfp.isIOS) {
496 342fa48b Olga Brani
                        // fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2
497 342fa48b Olga Brani
                        var zoomLevel = document.documentElement.clientWidth / window.innerWidth;
498 342fa48b Olga Brani
                        var height = window.innerHeight * zoomLevel;
499 342fa48b Olga Brani
                        mfp.wrap.css('height', height);
500 342fa48b Olga Brani
                        mfp.wH = height;
501 342fa48b Olga Brani
                } else {
502 342fa48b Olga Brani
                        mfp.wH = winHeight || _window.height();
503 342fa48b Olga Brani
                }
504 342fa48b Olga Brani
                // Fixes #84: popup incorrectly positioned with position:relative on body
505 342fa48b Olga Brani
                if(!mfp.fixedContentPos) {
506 342fa48b Olga Brani
                        mfp.wrap.css('height', mfp.wH);
507 342fa48b Olga Brani
                }
508 342fa48b Olga Brani
509 342fa48b Olga Brani
                _mfpTrigger('Resize');
510 342fa48b Olga Brani
511 342fa48b Olga Brani
        },
512 342fa48b Olga Brani
513 342fa48b Olga Brani
        /**
514 342fa48b Olga Brani
         * Set content of popup based on current index
515 342fa48b Olga Brani
         */
516 342fa48b Olga Brani
        updateItemHTML: function() {
517 342fa48b Olga Brani
                var item = mfp.items[mfp.index];
518 342fa48b Olga Brani
519 342fa48b Olga Brani
                // Detach and perform modifications
520 342fa48b Olga Brani
                mfp.contentContainer.detach();
521 342fa48b Olga Brani
522 342fa48b Olga Brani
                if(mfp.content)
523 342fa48b Olga Brani
                        mfp.content.detach();
524 342fa48b Olga Brani
525 342fa48b Olga Brani
                if(!item.parsed) {
526 342fa48b Olga Brani
                        item = mfp.parseEl( mfp.index );
527 342fa48b Olga Brani
                }
528 342fa48b Olga Brani
529 342fa48b Olga Brani
                var type = item.type;        
530 342fa48b Olga Brani
531 342fa48b Olga Brani
                _mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]);
532 342fa48b Olga Brani
                // BeforeChange event works like so:
533 342fa48b Olga Brani
                // _mfpOn('BeforeChange', function(e, prevType, newType) { });
534 342fa48b Olga Brani
                
535 342fa48b Olga Brani
                mfp.currItem = item;
536 342fa48b Olga Brani
537 342fa48b Olga Brani
                
538 342fa48b Olga Brani
539 342fa48b Olga Brani
                
540 342fa48b Olga Brani
541 342fa48b Olga Brani
                if(!mfp.currTemplate[type]) {
542 342fa48b Olga Brani
                        var markup = mfp.st[type] ? mfp.st[type].markup : false;
543 342fa48b Olga Brani
544 342fa48b Olga Brani
                        // allows to modify markup
545 342fa48b Olga Brani
                        _mfpTrigger('FirstMarkupParse', markup);
546 342fa48b Olga Brani
547 342fa48b Olga Brani
                        if(markup) {
548 342fa48b Olga Brani
                                mfp.currTemplate[type] = $(markup);
549 342fa48b Olga Brani
                        } else {
550 342fa48b Olga Brani
                                // if there is no markup found we just define that template is parsed
551 342fa48b Olga Brani
                                mfp.currTemplate[type] = true;
552 342fa48b Olga Brani
                        }
553 342fa48b Olga Brani
                }
554 342fa48b Olga Brani
555 342fa48b Olga Brani
                if(_prevContentType && _prevContentType !== item.type) {
556 342fa48b Olga Brani
                        mfp.container.removeClass('mfp-'+_prevContentType+'-holder');
557 342fa48b Olga Brani
                }
558 342fa48b Olga Brani
                
559 342fa48b Olga Brani
                var newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]);
560 342fa48b Olga Brani
                mfp.appendContent(newContent, type);
561 342fa48b Olga Brani
562 342fa48b Olga Brani
                item.preloaded = true;
563 342fa48b Olga Brani
564 342fa48b Olga Brani
                _mfpTrigger(CHANGE_EVENT, item);
565 342fa48b Olga Brani
                _prevContentType = item.type;
566 342fa48b Olga Brani
                
567 342fa48b Olga Brani
                // Append container back after its content changed
568 342fa48b Olga Brani
                mfp.container.prepend(mfp.contentContainer);
569 342fa48b Olga Brani
570 342fa48b Olga Brani
                _mfpTrigger('AfterChange');
571 342fa48b Olga Brani
        },
572 342fa48b Olga Brani
573 342fa48b Olga Brani
574 342fa48b Olga Brani
        /**
575 342fa48b Olga Brani
         * Set HTML content of popup
576 342fa48b Olga Brani
         */
577 342fa48b Olga Brani
        appendContent: function(newContent, type) {
578 342fa48b Olga Brani
                mfp.content = newContent;
579 342fa48b Olga Brani
                
580 342fa48b Olga Brani
                if(newContent) {
581 342fa48b Olga Brani
                        if(mfp.st.showCloseBtn && mfp.st.closeBtnInside &&
582 342fa48b Olga Brani
                                mfp.currTemplate[type] === true) {
583 342fa48b Olga Brani
                                // if there is no markup, we just append close button element inside
584 342fa48b Olga Brani
                                if(!mfp.content.find('.mfp-close').length) {
585 342fa48b Olga Brani
                                        mfp.content.append(_getCloseBtn());
586 342fa48b Olga Brani
                                }
587 342fa48b Olga Brani
                        } else {
588 342fa48b Olga Brani
                                mfp.content = newContent;
589 342fa48b Olga Brani
                        }
590 342fa48b Olga Brani
                } else {
591 342fa48b Olga Brani
                        mfp.content = '';
592 342fa48b Olga Brani
                }
593 342fa48b Olga Brani
594 342fa48b Olga Brani
                _mfpTrigger(BEFORE_APPEND_EVENT);
595 342fa48b Olga Brani
                mfp.container.addClass('mfp-'+type+'-holder');
596 342fa48b Olga Brani
597 342fa48b Olga Brani
                mfp.contentContainer.append(mfp.content);
598 342fa48b Olga Brani
        },
599 342fa48b Olga Brani
600 342fa48b Olga Brani
601 342fa48b Olga Brani
602 342fa48b Olga Brani
        
603 342fa48b Olga Brani
        /**
604 342fa48b Olga Brani
         * Creates Magnific Popup data object based on given data
605 342fa48b Olga Brani
         * @param  {int} index Index of item to parse
606 342fa48b Olga Brani
         */
607 342fa48b Olga Brani
        parseEl: function(index) {
608 342fa48b Olga Brani
                var item = mfp.items[index],
609 342fa48b Olga Brani
                        type = item.type;
610 342fa48b Olga Brani
611 342fa48b Olga Brani
                if(item.tagName) {
612 342fa48b Olga Brani
                        item = { el: $(item) };
613 342fa48b Olga Brani
                } else {
614 342fa48b Olga Brani
                        item = { data: item, src: item.src };
615 342fa48b Olga Brani
                }
616 342fa48b Olga Brani
617 342fa48b Olga Brani
                if(item.el) {
618 342fa48b Olga Brani
                        var types = mfp.types;
619 342fa48b Olga Brani
620 342fa48b Olga Brani
                        // check for 'mfp-TYPE' class
621 342fa48b Olga Brani
                        for(var i = 0; i < types.length; i++) {
622 342fa48b Olga Brani
                                if( item.el.hasClass('mfp-'+types[i]) ) {
623 342fa48b Olga Brani
                                        type = types[i];
624 342fa48b Olga Brani
                                        break;
625 342fa48b Olga Brani
                                }
626 342fa48b Olga Brani
                        }
627 342fa48b Olga Brani
628 342fa48b Olga Brani
                        item.src = item.el.attr('data-mfp-src');
629 342fa48b Olga Brani
                        if(!item.src) {
630 342fa48b Olga Brani
                                item.src = item.el.attr('href');
631 342fa48b Olga Brani
                        }
632 342fa48b Olga Brani
                }
633 342fa48b Olga Brani
634 342fa48b Olga Brani
                item.type = type || mfp.st.type || 'inline';
635 342fa48b Olga Brani
                item.index = index;
636 342fa48b Olga Brani
                item.parsed = true;
637 342fa48b Olga Brani
                mfp.items[index] = item;
638 342fa48b Olga Brani
                _mfpTrigger('ElementParse', item);
639 342fa48b Olga Brani
640 342fa48b Olga Brani
                return mfp.items[index];
641 342fa48b Olga Brani
        },
642 342fa48b Olga Brani
643 342fa48b Olga Brani
644 342fa48b Olga Brani
        /**
645 342fa48b Olga Brani
         * Initializes single popup or a group of popups
646 342fa48b Olga Brani
         */
647 342fa48b Olga Brani
        addGroup: function(el, options) {
648 342fa48b Olga Brani
                var eHandler = function(e) {
649 342fa48b Olga Brani
                        e.mfpEl = this;
650 342fa48b Olga Brani
                        mfp._openClick(e, el, options);
651 342fa48b Olga Brani
                };
652 342fa48b Olga Brani
653 342fa48b Olga Brani
                if(!options) {
654 342fa48b Olga Brani
                        options = {};
655 342fa48b Olga Brani
                } 
656 342fa48b Olga Brani
657 342fa48b Olga Brani
                var eName = 'click.magnificPopup';
658 342fa48b Olga Brani
                options.mainEl = el;
659 342fa48b Olga Brani
                
660 342fa48b Olga Brani
                if(options.items) {
661 342fa48b Olga Brani
                        options.isObj = true;
662 342fa48b Olga Brani
                        el.off(eName).on(eName, eHandler);
663 342fa48b Olga Brani
                } else {
664 342fa48b Olga Brani
                        options.isObj = false;
665 342fa48b Olga Brani
                        if(options.delegate) {
666 342fa48b Olga Brani
                                el.off(eName).on(eName, options.delegate , eHandler);
667 342fa48b Olga Brani
                        } else {
668 342fa48b Olga Brani
                                options.items = el;
669 342fa48b Olga Brani
                                el.off(eName).on(eName, eHandler);
670 342fa48b Olga Brani
                        }
671 342fa48b Olga Brani
                }
672 342fa48b Olga Brani
        },
673 342fa48b Olga Brani
        _openClick: function(e, el, options) {
674 342fa48b Olga Brani
                var midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick;
675 342fa48b Olga Brani
676 342fa48b Olga Brani
677 342fa48b Olga Brani
                if(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey ) ) {
678 342fa48b Olga Brani
                        return;
679 342fa48b Olga Brani
                }
680 342fa48b Olga Brani
681 342fa48b Olga Brani
                var disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn;
682 342fa48b Olga Brani
683 342fa48b Olga Brani
                if(disableOn) {
684 342fa48b Olga Brani
                        if($.isFunction(disableOn)) {
685 342fa48b Olga Brani
                                if( !disableOn.call(mfp) ) {
686 342fa48b Olga Brani
                                        return true;
687 342fa48b Olga Brani
                                }
688 342fa48b Olga Brani
                        } else { // else it's number
689 342fa48b Olga Brani
                                if( _window.width() < disableOn ) {
690 342fa48b Olga Brani
                                        return true;
691 342fa48b Olga Brani
                                }
692 342fa48b Olga Brani
                        }
693 342fa48b Olga Brani
                }
694 342fa48b Olga Brani
                
695 342fa48b Olga Brani
                if(e.type) {
696 342fa48b Olga Brani
                        e.preventDefault();
697 342fa48b Olga Brani
698 342fa48b Olga Brani
                        // This will prevent popup from closing if element is inside and popup is already opened
699 342fa48b Olga Brani
                        if(mfp.isOpen) {
700 342fa48b Olga Brani
                                e.stopPropagation();
701 342fa48b Olga Brani
                        }
702 342fa48b Olga Brani
                }
703 342fa48b Olga Brani
                        
704 342fa48b Olga Brani
705 342fa48b Olga Brani
                options.el = $(e.mfpEl);
706 342fa48b Olga Brani
                if(options.delegate) {
707 342fa48b Olga Brani
                        options.items = el.find(options.delegate);
708 342fa48b Olga Brani
                }
709 342fa48b Olga Brani
                mfp.open(options);
710 342fa48b Olga Brani
        },
711 342fa48b Olga Brani
712 342fa48b Olga Brani
713 342fa48b Olga Brani
        /**
714 342fa48b Olga Brani
         * Updates text on preloader
715 342fa48b Olga Brani
         */
716 342fa48b Olga Brani
        updateStatus: function(status, text) {
717 342fa48b Olga Brani
718 342fa48b Olga Brani
                if(mfp.preloader) {
719 342fa48b Olga Brani
                        if(_prevStatus !== status) {
720 342fa48b Olga Brani
                                mfp.container.removeClass('mfp-s-'+_prevStatus);
721 342fa48b Olga Brani
                        }
722 342fa48b Olga Brani
723 342fa48b Olga Brani
                        if(!text && status === 'loading') {
724 342fa48b Olga Brani
                                text = mfp.st.tLoading;
725 342fa48b Olga Brani
                        }
726 342fa48b Olga Brani
727 342fa48b Olga Brani
                        var data = {
728 342fa48b Olga Brani
                                status: status,
729 342fa48b Olga Brani
                                text: text
730 342fa48b Olga Brani
                        };
731 342fa48b Olga Brani
                        // allows to modify status
732 342fa48b Olga Brani
                        _mfpTrigger('UpdateStatus', data);
733 342fa48b Olga Brani
734 342fa48b Olga Brani
                        status = data.status;
735 342fa48b Olga Brani
                        text = data.text;
736 342fa48b Olga Brani
737 342fa48b Olga Brani
                        mfp.preloader.html(text);
738 342fa48b Olga Brani
739 342fa48b Olga Brani
                        mfp.preloader.find('a').on('click', function(e) {
740 342fa48b Olga Brani
                                e.stopImmediatePropagation();
741 342fa48b Olga Brani
                        });
742 342fa48b Olga Brani
743 342fa48b Olga Brani
                        mfp.container.addClass('mfp-s-'+status);
744 342fa48b Olga Brani
                        _prevStatus = status;
745 342fa48b Olga Brani
                }
746 342fa48b Olga Brani
        },
747 342fa48b Olga Brani
748 342fa48b Olga Brani
749 342fa48b Olga Brani
        /*
750 342fa48b Olga Brani
                "Private" helpers that aren't private at all
751 342fa48b Olga Brani
         */
752 342fa48b Olga Brani
        _addClassToMFP: function(cName) {
753 342fa48b Olga Brani
                mfp.bgOverlay.addClass(cName);
754 342fa48b Olga Brani
                mfp.wrap.addClass(cName);
755 342fa48b Olga Brani
        },
756 342fa48b Olga Brani
        _removeClassFromMFP: function(cName) {
757 342fa48b Olga Brani
                this.bgOverlay.removeClass(cName);
758 342fa48b Olga Brani
                mfp.wrap.removeClass(cName);
759 342fa48b Olga Brani
        },
760 342fa48b Olga Brani
        _hasScrollBar: function(winHeight) {
761 342fa48b Olga Brani
                return (  (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) );
762 342fa48b Olga Brani
        },
763 342fa48b Olga Brani
        _parseMarkup: function(template, values, item) {
764 342fa48b Olga Brani
                var arr;
765 342fa48b Olga Brani
                if(item.data) {
766 342fa48b Olga Brani
                        values = $.extend(item.data, values);
767 342fa48b Olga Brani
                }
768 342fa48b Olga Brani
                _mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] );
769 342fa48b Olga Brani
770 342fa48b Olga Brani
                $.each(values, function(key, value) {
771 342fa48b Olga Brani
                        if(value === undefined || value === false) {
772 342fa48b Olga Brani
                                return true;
773 342fa48b Olga Brani
                        }
774 342fa48b Olga Brani
                        arr = key.split('_');
775 342fa48b Olga Brani
                        if(arr.length > 1) {
776 342fa48b Olga Brani
                                var el = template.find(EVENT_NS + '-'+arr[0]);
777 342fa48b Olga Brani
778 342fa48b Olga Brani
                                if(el.length > 0) {
779 342fa48b Olga Brani
                                        var attr = arr[1];
780 342fa48b Olga Brani
                                        if(attr === 'replaceWith') {
781 342fa48b Olga Brani
                                                if(el[0] !== value[0]) {
782 342fa48b Olga Brani
                                                        el.replaceWith(value);
783 342fa48b Olga Brani
                                                }
784 342fa48b Olga Brani
                                        } else if(attr === 'img') {
785 342fa48b Olga Brani
                                                if(el.is('img')) {
786 342fa48b Olga Brani
                                                        el.attr('src', value);
787 342fa48b Olga Brani
                                                } else {
788 342fa48b Olga Brani
                                                        el.replaceWith( '<img src="'+value+'" class="' + el.attr('class') + '" />' );
789 342fa48b Olga Brani
                                                }
790 342fa48b Olga Brani
                                        } else {
791 342fa48b Olga Brani
                                                el.attr(arr[1], value);
792 342fa48b Olga Brani
                                        }
793 342fa48b Olga Brani
                                }
794 342fa48b Olga Brani
795 342fa48b Olga Brani
                        } else {
796 342fa48b Olga Brani
                                template.find(EVENT_NS + '-'+key).html(value);
797 342fa48b Olga Brani
                        }
798 342fa48b Olga Brani
                });
799 342fa48b Olga Brani
        },
800 342fa48b Olga Brani
801 342fa48b Olga Brani
        _getScrollbarSize: function() {
802 342fa48b Olga Brani
                // thx David
803 342fa48b Olga Brani
                if(mfp.scrollbarSize === undefined) {
804 342fa48b Olga Brani
                        var scrollDiv = document.createElement("div");
805 342fa48b Olga Brani
                        scrollDiv.id = "mfp-sbm";
806 342fa48b Olga Brani
                        scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';
807 342fa48b Olga Brani
                        document.body.appendChild(scrollDiv);
808 342fa48b Olga Brani
                        mfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;
809 342fa48b Olga Brani
                        document.body.removeChild(scrollDiv);
810 342fa48b Olga Brani
                }
811 342fa48b Olga Brani
                return mfp.scrollbarSize;
812 342fa48b Olga Brani
        }
813 342fa48b Olga Brani
814 342fa48b Olga Brani
}; /* MagnificPopup core prototype end */
815 342fa48b Olga Brani
816 342fa48b Olga Brani
817 342fa48b Olga Brani
818 342fa48b Olga Brani
819 342fa48b Olga Brani
/**
820 342fa48b Olga Brani
 * Public static functions
821 342fa48b Olga Brani
 */
822 342fa48b Olga Brani
$.magnificPopup = {
823 342fa48b Olga Brani
        instance: null,
824 342fa48b Olga Brani
        proto: MagnificPopup.prototype,
825 342fa48b Olga Brani
        modules: [],
826 342fa48b Olga Brani
827 342fa48b Olga Brani
        open: function(options, index) {
828 342fa48b Olga Brani
                _checkInstance();        
829 342fa48b Olga Brani
830 342fa48b Olga Brani
                if(!options) 
831 342fa48b Olga Brani
                        options = {};
832 342fa48b Olga Brani
833 342fa48b Olga Brani
                options.isObj = true;
834 342fa48b Olga Brani
                options.index = index || 0;
835 342fa48b Olga Brani
                return this.instance.open(options);
836 342fa48b Olga Brani
        },
837 342fa48b Olga Brani
838 342fa48b Olga Brani
        close: function() {
839 342fa48b Olga Brani
                return $.magnificPopup.instance.close();
840 342fa48b Olga Brani
        },
841 342fa48b Olga Brani
842 342fa48b Olga Brani
        registerModule: function(name, module) {
843 342fa48b Olga Brani
                if(module.options) {
844 342fa48b Olga Brani
                        $.magnificPopup.defaults[name] = module.options;
845 342fa48b Olga Brani
                }
846 342fa48b Olga Brani
                $.extend(this.proto, module.proto);                        
847 342fa48b Olga Brani
                this.modules.push(name);
848 342fa48b Olga Brani
        },
849 342fa48b Olga Brani
850 342fa48b Olga Brani
        defaults: {   
851 342fa48b Olga Brani
852 342fa48b Olga Brani
                // Info about options is in docs:
853 342fa48b Olga Brani
                // http://dimsemenov.com/plugins/magnific-popup/documentation.html#options
854 342fa48b Olga Brani
                
855 342fa48b Olga Brani
                disableOn: 0,        
856 342fa48b Olga Brani
857 342fa48b Olga Brani
                key: null,
858 342fa48b Olga Brani
859 342fa48b Olga Brani
                midClick: false,
860 342fa48b Olga Brani
861 342fa48b Olga Brani
                mainClass: '',
862 342fa48b Olga Brani
863 342fa48b Olga Brani
                preloader: true,
864 342fa48b Olga Brani
865 342fa48b Olga Brani
                focus: '', // CSS selector of input to focus after popup is opened
866 342fa48b Olga Brani
                
867 342fa48b Olga Brani
                closeOnContentClick: false,
868 342fa48b Olga Brani
869 342fa48b Olga Brani
                closeOnBgClick: true,
870 342fa48b Olga Brani
871 342fa48b Olga Brani
                closeBtnInside: true, 
872 342fa48b Olga Brani
873 342fa48b Olga Brani
                showCloseBtn: true,
874 342fa48b Olga Brani
875 342fa48b Olga Brani
                enableEscapeKey: true,
876 342fa48b Olga Brani
877 342fa48b Olga Brani
                modal: false,
878 342fa48b Olga Brani
879 342fa48b Olga Brani
                alignTop: false,
880 342fa48b Olga Brani
        
881 342fa48b Olga Brani
                removalDelay: 0,
882 342fa48b Olga Brani
                
883 342fa48b Olga Brani
                fixedContentPos: 'auto', 
884 342fa48b Olga Brani
        
885 342fa48b Olga Brani
                fixedBgPos: 'auto',
886 342fa48b Olga Brani
887 342fa48b Olga Brani
                overflowY: 'auto',
888 342fa48b Olga Brani
889 342fa48b Olga Brani
                closeMarkup: '<button title="%title%" type="button" class="mfp-close">&times;</button>',
890 342fa48b Olga Brani
891 342fa48b Olga Brani
                tClose: 'Close (Esc)',
892 342fa48b Olga Brani
893 342fa48b Olga Brani
                tLoading: 'Loading...'
894 342fa48b Olga Brani
895 342fa48b Olga Brani
        }
896 342fa48b Olga Brani
};
897 342fa48b Olga Brani
898 342fa48b Olga Brani
899 342fa48b Olga Brani
900 342fa48b Olga Brani
$.fn.magnificPopup = function(options) {
901 342fa48b Olga Brani
        _checkInstance();
902 342fa48b Olga Brani
903 342fa48b Olga Brani
        var jqEl = $(this);
904 342fa48b Olga Brani
905 342fa48b Olga Brani
        // We call some API method of first param is a string
906 342fa48b Olga Brani
        if (typeof options === "string" ) {
907 342fa48b Olga Brani
908 342fa48b Olga Brani
                if(options === 'open') {
909 342fa48b Olga Brani
                        var items,
910 342fa48b Olga Brani
                                itemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup,
911 342fa48b Olga Brani
                                index = parseInt(arguments[1], 10) || 0;
912 342fa48b Olga Brani
913 342fa48b Olga Brani
                        if(itemOpts.items) {
914 342fa48b Olga Brani
                                items = itemOpts.items[index];
915 342fa48b Olga Brani
                        } else {
916 342fa48b Olga Brani
                                items = jqEl;
917 342fa48b Olga Brani
                                if(itemOpts.delegate) {
918 342fa48b Olga Brani
                                        items = items.find(itemOpts.delegate);
919 342fa48b Olga Brani
                                }
920 342fa48b Olga Brani
                                items = items.eq( index );
921 342fa48b Olga Brani
                        }
922 342fa48b Olga Brani
                        mfp._openClick({mfpEl:items}, jqEl, itemOpts);
923 342fa48b Olga Brani
                } else {
924 342fa48b Olga Brani
                        if(mfp.isOpen)
925 342fa48b Olga Brani
                                mfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1));
926 342fa48b Olga Brani
                }
927 342fa48b Olga Brani
928 342fa48b Olga Brani
        } else {
929 342fa48b Olga Brani
930 342fa48b Olga Brani
                /*
931 342fa48b Olga Brani
                 * As Zepto doesn't support .data() method for objects 
932 342fa48b Olga Brani
                 * and it works only in normal browsers
933 342fa48b Olga Brani
                 * we assign "options" object directly to the DOM element. FTW!
934 342fa48b Olga Brani
                 */
935 342fa48b Olga Brani
                if(_isJQ) {
936 342fa48b Olga Brani
                        jqEl.data('magnificPopup', options);
937 342fa48b Olga Brani
                } else {
938 342fa48b Olga Brani
                        jqEl[0].magnificPopup = options;
939 342fa48b Olga Brani
                }
940 342fa48b Olga Brani
941 342fa48b Olga Brani
                mfp.addGroup(jqEl, options);
942 342fa48b Olga Brani
943 342fa48b Olga Brani
        }
944 342fa48b Olga Brani
        return jqEl;
945 342fa48b Olga Brani
};
946 342fa48b Olga Brani
947 342fa48b Olga Brani
948 342fa48b Olga Brani
//Quick benchmark
949 342fa48b Olga Brani
/*
950 342fa48b Olga Brani
var start = performance.now(),
951 342fa48b Olga Brani
        i,
952 342fa48b Olga Brani
        rounds = 1000;
953 342fa48b Olga Brani

954 342fa48b Olga Brani
for(i = 0; i < rounds; i++) {
955 342fa48b Olga Brani

956 342fa48b Olga Brani
}
957 342fa48b Olga Brani
console.log('Test #1:', performance.now() - start);
958 342fa48b Olga Brani

959 342fa48b Olga Brani
start = performance.now();
960 342fa48b Olga Brani
for(i = 0; i < rounds; i++) {
961 342fa48b Olga Brani

962 342fa48b Olga Brani
}
963 342fa48b Olga Brani
console.log('Test #2:', performance.now() - start);
964 342fa48b Olga Brani
*/
965 342fa48b Olga Brani
966 342fa48b Olga Brani
967 342fa48b Olga Brani
/*>>core*/
968 342fa48b Olga Brani
969 342fa48b Olga Brani
/*>>inline*/
970 342fa48b Olga Brani
971 342fa48b Olga Brani
var INLINE_NS = 'inline',
972 342fa48b Olga Brani
        _hiddenClass,
973 342fa48b Olga Brani
        _inlinePlaceholder, 
974 342fa48b Olga Brani
        _lastInlineElement,
975 342fa48b Olga Brani
        _putInlineElementsBack = function() {
976 342fa48b Olga Brani
                if(_lastInlineElement) {
977 342fa48b Olga Brani
                        _inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach();
978 342fa48b Olga Brani
                        _lastInlineElement = null;
979 342fa48b Olga Brani
                }
980 342fa48b Olga Brani
        };
981 342fa48b Olga Brani
982 342fa48b Olga Brani
$.magnificPopup.registerModule(INLINE_NS, {
983 342fa48b Olga Brani
        options: {
984 342fa48b Olga Brani
                hiddenClass: 'hide', // will be appended with `mfp-` prefix
985 342fa48b Olga Brani
                markup: '',
986 342fa48b Olga Brani
                tNotFound: 'Content not found'
987 342fa48b Olga Brani
        },
988 342fa48b Olga Brani
        proto: {
989 342fa48b Olga Brani
990 342fa48b Olga Brani
                initInline: function() {
991 342fa48b Olga Brani
                        mfp.types.push(INLINE_NS);
992 342fa48b Olga Brani
993 342fa48b Olga Brani
                        _mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() {
994 342fa48b Olga Brani
                                _putInlineElementsBack();
995 342fa48b Olga Brani
                        });
996 342fa48b Olga Brani
                },
997 342fa48b Olga Brani
998 342fa48b Olga Brani
                getInline: function(item, template) {
999 342fa48b Olga Brani
1000 342fa48b Olga Brani
                        _putInlineElementsBack();
1001 342fa48b Olga Brani
1002 342fa48b Olga Brani
                        if(item.src) {
1003 342fa48b Olga Brani
                                var inlineSt = mfp.st.inline,
1004 342fa48b Olga Brani
                                        el = $(item.src);
1005 342fa48b Olga Brani
1006 342fa48b Olga Brani
                                if(el.length) {
1007 342fa48b Olga Brani
1008 342fa48b Olga Brani
                                        // If target element has parent - we replace it with placeholder and put it back after popup is closed
1009 342fa48b Olga Brani
                                        var parent = el[0].parentNode;
1010 342fa48b Olga Brani
                                        if(parent && parent.tagName) {
1011 342fa48b Olga Brani
                                                if(!_inlinePlaceholder) {
1012 342fa48b Olga Brani
                                                        _hiddenClass = inlineSt.hiddenClass;
1013 342fa48b Olga Brani
                                                        _inlinePlaceholder = _getEl(_hiddenClass);
1014 342fa48b Olga Brani
                                                        _hiddenClass = 'mfp-'+_hiddenClass;
1015 342fa48b Olga Brani
                                                }
1016 342fa48b Olga Brani
                                                // replace target inline element with placeholder
1017 342fa48b Olga Brani
                                                _lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass);
1018 342fa48b Olga Brani
                                        }
1019 342fa48b Olga Brani
1020 342fa48b Olga Brani
                                        mfp.updateStatus('ready');
1021 342fa48b Olga Brani
                                } else {
1022 342fa48b Olga Brani
                                        mfp.updateStatus('error', inlineSt.tNotFound);
1023 342fa48b Olga Brani
                                        el = $('<div>');
1024 342fa48b Olga Brani
                                }
1025 342fa48b Olga Brani
1026 342fa48b Olga Brani
                                item.inlineElement = el;
1027 342fa48b Olga Brani
                                return el;
1028 342fa48b Olga Brani
                        }
1029 342fa48b Olga Brani
1030 342fa48b Olga Brani
                        mfp.updateStatus('ready');
1031 342fa48b Olga Brani
                        mfp._parseMarkup(template, {}, item);
1032 342fa48b Olga Brani
                        return template;
1033 342fa48b Olga Brani
                }
1034 342fa48b Olga Brani
        }
1035 342fa48b Olga Brani
});
1036 342fa48b Olga Brani
1037 342fa48b Olga Brani
/*>>inline*/
1038 342fa48b Olga Brani
1039 342fa48b Olga Brani
/*>>ajax*/
1040 342fa48b Olga Brani
var AJAX_NS = 'ajax',
1041 342fa48b Olga Brani
        _ajaxCur,
1042 342fa48b Olga Brani
        _removeAjaxCursor = function() {
1043 342fa48b Olga Brani
                if(_ajaxCur) {
1044 342fa48b Olga Brani
                        _body.removeClass(_ajaxCur);
1045 342fa48b Olga Brani
                }
1046 342fa48b Olga Brani
        };
1047 342fa48b Olga Brani
1048 342fa48b Olga Brani
$.magnificPopup.registerModule(AJAX_NS, {
1049 342fa48b Olga Brani
1050 342fa48b Olga Brani
        options: {
1051 342fa48b Olga Brani
                settings: null,
1052 342fa48b Olga Brani
                cursor: 'mfp-ajax-cur',
1053 342fa48b Olga Brani
                tError: '<a href="%url%">The content</a> could not be loaded.'
1054 342fa48b Olga Brani
        },
1055 342fa48b Olga Brani
1056 342fa48b Olga Brani
        proto: {
1057 342fa48b Olga Brani
                initAjax: function() {
1058 342fa48b Olga Brani
                        mfp.types.push(AJAX_NS);
1059 342fa48b Olga Brani
                        _ajaxCur = mfp.st.ajax.cursor;
1060 342fa48b Olga Brani
1061 342fa48b Olga Brani
                        _mfpOn(CLOSE_EVENT+'.'+AJAX_NS, function() {
1062 342fa48b Olga Brani
                                _removeAjaxCursor();
1063 342fa48b Olga Brani
                                if(mfp.req) {
1064 342fa48b Olga Brani
                                        mfp.req.abort();
1065 342fa48b Olga Brani
                                }
1066 342fa48b Olga Brani
                        });
1067 342fa48b Olga Brani
                },
1068 342fa48b Olga Brani
1069 342fa48b Olga Brani
                getAjax: function(item) {
1070 342fa48b Olga Brani
1071 342fa48b Olga Brani
                        if(_ajaxCur)
1072 342fa48b Olga Brani
                                _body.addClass(_ajaxCur);
1073 342fa48b Olga Brani
1074 342fa48b Olga Brani
                        mfp.updateStatus('loading');
1075 342fa48b Olga Brani
1076 342fa48b Olga Brani
                        var opts = $.extend({
1077 342fa48b Olga Brani
                                url: item.src,
1078 342fa48b Olga Brani
                                success: function(data, textStatus, jqXHR) {
1079 342fa48b Olga Brani
                                        var temp = {
1080 342fa48b Olga Brani
                                                data:data,
1081 342fa48b Olga Brani
                                                xhr:jqXHR
1082 342fa48b Olga Brani
                                        };
1083 342fa48b Olga Brani
1084 342fa48b Olga Brani
                                        _mfpTrigger('ParseAjax', temp);
1085 342fa48b Olga Brani
1086 342fa48b Olga Brani
                                        mfp.appendContent( $(temp.data), AJAX_NS );
1087 342fa48b Olga Brani
1088 342fa48b Olga Brani
                                        item.finished = true;
1089 342fa48b Olga Brani
1090 342fa48b Olga Brani
                                        _removeAjaxCursor();
1091 342fa48b Olga Brani
1092 342fa48b Olga Brani
                                        _setFocus();
1093 342fa48b Olga Brani
1094 342fa48b Olga Brani
                                        setTimeout(function() {
1095 342fa48b Olga Brani
                                                mfp.wrap.addClass(READY_CLASS);
1096 342fa48b Olga Brani
                                        }, 16);
1097 342fa48b Olga Brani
1098 342fa48b Olga Brani
                                        mfp.updateStatus('ready');
1099 342fa48b Olga Brani
1100 342fa48b Olga Brani
                                        _mfpTrigger('AjaxContentAdded');
1101 342fa48b Olga Brani
                                },
1102 342fa48b Olga Brani
                                error: function() {
1103 342fa48b Olga Brani
                                        _removeAjaxCursor();
1104 342fa48b Olga Brani
                                        item.finished = item.loadError = true;
1105 342fa48b Olga Brani
                                        mfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src));
1106 342fa48b Olga Brani
                                }
1107 342fa48b Olga Brani
                        }, mfp.st.ajax.settings);
1108 342fa48b Olga Brani
1109 342fa48b Olga Brani
                        mfp.req = $.ajax(opts);
1110 342fa48b Olga Brani
1111 342fa48b Olga Brani
                        return '';
1112 342fa48b Olga Brani
                }
1113 342fa48b Olga Brani
        }
1114 342fa48b Olga Brani
});
1115 342fa48b Olga Brani
1116 342fa48b Olga Brani
1117 342fa48b Olga Brani
1118 342fa48b Olga Brani
1119 342fa48b Olga Brani
1120 342fa48b Olga Brani
        
1121 342fa48b Olga Brani
1122 342fa48b Olga Brani
/*>>ajax*/
1123 342fa48b Olga Brani
1124 342fa48b Olga Brani
/*>>image*/
1125 342fa48b Olga Brani
var _imgInterval,
1126 342fa48b Olga Brani
        _getTitle = function(item) {
1127 342fa48b Olga Brani
                if(item.data && item.data.title !== undefined) 
1128 342fa48b Olga Brani
                        return item.data.title;
1129 342fa48b Olga Brani
1130 342fa48b Olga Brani
                var src = mfp.st.image.titleSrc;
1131 342fa48b Olga Brani
1132 342fa48b Olga Brani
                if(src) {
1133 342fa48b Olga Brani
                        if($.isFunction(src)) {
1134 342fa48b Olga Brani
                                return src.call(mfp, item);
1135 342fa48b Olga Brani
                        } else if(item.el) {
1136 342fa48b Olga Brani
                                return item.el.attr(src) || '';
1137 342fa48b Olga Brani
                        }
1138 342fa48b Olga Brani
                }
1139 342fa48b Olga Brani
                return '';
1140 342fa48b Olga Brani
        };
1141 342fa48b Olga Brani
1142 342fa48b Olga Brani
$.magnificPopup.registerModule('image', {
1143 342fa48b Olga Brani
1144 342fa48b Olga Brani
        options: {
1145 342fa48b Olga Brani
                markup: '<div class="mfp-figure">'+
1146 342fa48b Olga Brani
                                        '<div class="mfp-close"></div>'+
1147 342fa48b Olga Brani
                                        '<div class="mfp-img"></div>'+
1148 342fa48b Olga Brani
                                        '<div class="mfp-bottom-bar">'+
1149 342fa48b Olga Brani
                                                '<div class="mfp-title"></div>'+
1150 342fa48b Olga Brani
                                                '<div class="mfp-counter"></div>'+
1151 342fa48b Olga Brani
                                        '</div>'+
1152 342fa48b Olga Brani
                                '</div>',
1153 342fa48b Olga Brani
                cursor: 'mfp-zoom-out-cur',
1154 342fa48b Olga Brani
                titleSrc: 'title', 
1155 342fa48b Olga Brani
                verticalFit: true,
1156 342fa48b Olga Brani
                tError: '<a href="%url%">The image</a> could not be loaded.'
1157 342fa48b Olga Brani
        },
1158 342fa48b Olga Brani
1159 342fa48b Olga Brani
        proto: {
1160 342fa48b Olga Brani
                initImage: function() {
1161 342fa48b Olga Brani
                        var imgSt = mfp.st.image,
1162 342fa48b Olga Brani
                                ns = '.image';
1163 342fa48b Olga Brani
1164 342fa48b Olga Brani
                        mfp.types.push('image');
1165 342fa48b Olga Brani
1166 342fa48b Olga Brani
                        _mfpOn(OPEN_EVENT+ns, function() {
1167 342fa48b Olga Brani
                                if(mfp.currItem.type === 'image' && imgSt.cursor) {
1168 342fa48b Olga Brani
                                        _body.addClass(imgSt.cursor);
1169 342fa48b Olga Brani
                                }
1170 342fa48b Olga Brani
                        });
1171 342fa48b Olga Brani
1172 342fa48b Olga Brani
                        _mfpOn(CLOSE_EVENT+ns, function() {
1173 342fa48b Olga Brani
                                if(imgSt.cursor) {
1174 342fa48b Olga Brani
                                        _body.removeClass(imgSt.cursor);
1175 342fa48b Olga Brani
                                }
1176 342fa48b Olga Brani
                                _window.off('resize' + EVENT_NS);
1177 342fa48b Olga Brani
                        });
1178 342fa48b Olga Brani
1179 342fa48b Olga Brani
                        _mfpOn('Resize'+ns, mfp.resizeImage);
1180 342fa48b Olga Brani
                        if(mfp.isLowIE) {
1181 342fa48b Olga Brani
                                _mfpOn('AfterChange', mfp.resizeImage);
1182 342fa48b Olga Brani
                        }
1183 342fa48b Olga Brani
                },
1184 342fa48b Olga Brani
                resizeImage: function() {
1185 342fa48b Olga Brani
                        var item = mfp.currItem;
1186 342fa48b Olga Brani
                        if(!item || !item.img) return;
1187 342fa48b Olga Brani
1188 342fa48b Olga Brani
                        if(mfp.st.image.verticalFit) {
1189 342fa48b Olga Brani
                                var decr = 0;
1190 342fa48b Olga Brani
                                // fix box-sizing in ie7/8
1191 342fa48b Olga Brani
                                if(mfp.isLowIE) {
1192 342fa48b Olga Brani
                                        decr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10);
1193 342fa48b Olga Brani
                                }
1194 342fa48b Olga Brani
                                item.img.css('max-height', mfp.wH-decr);
1195 342fa48b Olga Brani
                        }
1196 342fa48b Olga Brani
                },
1197 342fa48b Olga Brani
                _onImageHasSize: function(item) {
1198 342fa48b Olga Brani
                        if(item.img) {
1199 342fa48b Olga Brani
                                
1200 342fa48b Olga Brani
                                item.hasSize = true;
1201 342fa48b Olga Brani
1202 342fa48b Olga Brani
                                if(_imgInterval) {
1203 342fa48b Olga Brani
                                        clearInterval(_imgInterval);
1204 342fa48b Olga Brani
                                }
1205 342fa48b Olga Brani
                                
1206 342fa48b Olga Brani
                                item.isCheckingImgSize = false;
1207 342fa48b Olga Brani
1208 342fa48b Olga Brani
                                _mfpTrigger('ImageHasSize', item);
1209 342fa48b Olga Brani
1210 342fa48b Olga Brani
                                if(item.imgHidden) {
1211 342fa48b Olga Brani
                                        if(mfp.content)
1212 342fa48b Olga Brani
                                                mfp.content.removeClass('mfp-loading');
1213 342fa48b Olga Brani
                                        
1214 342fa48b Olga Brani
                                        item.imgHidden = false;
1215 342fa48b Olga Brani
                                }
1216 342fa48b Olga Brani
1217 342fa48b Olga Brani
                        }
1218 342fa48b Olga Brani
                },
1219 342fa48b Olga Brani
1220 342fa48b Olga Brani
                /**
1221 342fa48b Olga Brani
                 * Function that loops until the image has size to display elements that rely on it asap
1222 342fa48b Olga Brani
                 */
1223 342fa48b Olga Brani
                findImageSize: function(item) {
1224 342fa48b Olga Brani
1225 342fa48b Olga Brani
                        var counter = 0,
1226 342fa48b Olga Brani
                                img = item.img[0],
1227 342fa48b Olga Brani
                                mfpSetInterval = function(delay) {
1228 342fa48b Olga Brani
1229 342fa48b Olga Brani
                                        if(_imgInterval) {
1230 342fa48b Olga Brani
                                                clearInterval(_imgInterval);
1231 342fa48b Olga Brani
                                        }
1232 342fa48b Olga Brani
                                        // decelerating interval that checks for size of an image
1233 342fa48b Olga Brani
                                        _imgInterval = setInterval(function() {
1234 342fa48b Olga Brani
                                                if(img.naturalWidth > 0) {
1235 342fa48b Olga Brani
                                                        mfp._onImageHasSize(item);
1236 342fa48b Olga Brani
                                                        return;
1237 342fa48b Olga Brani
                                                }
1238 342fa48b Olga Brani
1239 342fa48b Olga Brani
                                                if(counter > 200) {
1240 342fa48b Olga Brani
                                                        clearInterval(_imgInterval);
1241 342fa48b Olga Brani
                                                }
1242 342fa48b Olga Brani
1243 342fa48b Olga Brani
                                                counter++;
1244 342fa48b Olga Brani
                                                if(counter === 3) {
1245 342fa48b Olga Brani
                                                        mfpSetInterval(10);
1246 342fa48b Olga Brani
                                                } else if(counter === 40) {
1247 342fa48b Olga Brani
                                                        mfpSetInterval(50);
1248 342fa48b Olga Brani
                                                } else if(counter === 100) {
1249 342fa48b Olga Brani
                                                        mfpSetInterval(500);
1250 342fa48b Olga Brani
                                                }
1251 342fa48b Olga Brani
                                        }, delay);
1252 342fa48b Olga Brani
                                };
1253 342fa48b Olga Brani
1254 342fa48b Olga Brani
                        mfpSetInterval(1);
1255 342fa48b Olga Brani
                },
1256 342fa48b Olga Brani
1257 342fa48b Olga Brani
                getImage: function(item, template) {
1258 342fa48b Olga Brani
1259 342fa48b Olga Brani
                        var guard = 0,
1260 342fa48b Olga Brani
1261 342fa48b Olga Brani
                                // image load complete handler
1262 342fa48b Olga Brani
                                onLoadComplete = function() {
1263 342fa48b Olga Brani
                                        if(item) {
1264 342fa48b Olga Brani
                                                if (item.img[0].complete) {
1265 342fa48b Olga Brani
                                                        item.img.off('.mfploader');
1266 342fa48b Olga Brani
                                                        
1267 342fa48b Olga Brani
                                                        if(item === mfp.currItem){
1268 342fa48b Olga Brani
                                                                mfp._onImageHasSize(item);
1269 342fa48b Olga Brani
1270 342fa48b Olga Brani
                                                                mfp.updateStatus('ready');
1271 342fa48b Olga Brani
                                                        }
1272 342fa48b Olga Brani
1273 342fa48b Olga Brani
                                                        item.hasSize = true;
1274 342fa48b Olga Brani
                                                        item.loaded = true;
1275 342fa48b Olga Brani
1276 342fa48b Olga Brani
                                                        _mfpTrigger('ImageLoadComplete');
1277 342fa48b Olga Brani
                                                        
1278 342fa48b Olga Brani
                                                }
1279 342fa48b Olga Brani
                                                else {
1280 342fa48b Olga Brani
                                                        // if image complete check fails 200 times (20 sec), we assume that there was an error.
1281 342fa48b Olga Brani
                                                        guard++;
1282 342fa48b Olga Brani
                                                        if(guard < 200) {
1283 342fa48b Olga Brani
                                                                setTimeout(onLoadComplete,100);
1284 342fa48b Olga Brani
                                                        } else {
1285 342fa48b Olga Brani
                                                                onLoadError();
1286 342fa48b Olga Brani
                                                        }
1287 342fa48b Olga Brani
                                                }
1288 342fa48b Olga Brani
                                        }
1289 342fa48b Olga Brani
                                },
1290 342fa48b Olga Brani
1291 342fa48b Olga Brani
                                // image error handler
1292 342fa48b Olga Brani
                                onLoadError = function() {
1293 342fa48b Olga Brani
                                        if(item) {
1294 342fa48b Olga Brani
                                                item.img.off('.mfploader');
1295 342fa48b Olga Brani
                                                if(item === mfp.currItem){
1296 342fa48b Olga Brani
                                                        mfp._onImageHasSize(item);
1297 342fa48b Olga Brani
                                                        mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );
1298 342fa48b Olga Brani
                                                }
1299 342fa48b Olga Brani
1300 342fa48b Olga Brani
                                                item.hasSize = true;
1301 342fa48b Olga Brani
                                                item.loaded = true;
1302 342fa48b Olga Brani
                                                item.loadError = true;
1303 342fa48b Olga Brani
                                        }
1304 342fa48b Olga Brani
                                },
1305 342fa48b Olga Brani
                                imgSt = mfp.st.image;
1306 342fa48b Olga Brani
1307 342fa48b Olga Brani
1308 342fa48b Olga Brani
                        var el = template.find('.mfp-img');
1309 342fa48b Olga Brani
                        if(el.length) {
1310 342fa48b Olga Brani
                                var img = document.createElement('img');
1311 342fa48b Olga Brani
                                img.className = 'mfp-img';
1312 342fa48b Olga Brani
                                item.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError);
1313 342fa48b Olga Brani
                                img.src = item.src;
1314 342fa48b Olga Brani
1315 342fa48b Olga Brani
                                // without clone() "error" event is not firing when IMG is replaced by new IMG
1316 342fa48b Olga Brani
                                // TODO: find a way to avoid such cloning
1317 342fa48b Olga Brani
                                if(el.is('img')) {
1318 342fa48b Olga Brani
                                        item.img = item.img.clone();
1319 342fa48b Olga Brani
                                }
1320 342fa48b Olga Brani
                                if(item.img[0].naturalWidth > 0) {
1321 342fa48b Olga Brani
                                        item.hasSize = true;
1322 342fa48b Olga Brani
                                }
1323 342fa48b Olga Brani
                        }
1324 342fa48b Olga Brani
1325 342fa48b Olga Brani
                        mfp._parseMarkup(template, {
1326 342fa48b Olga Brani
                                title: _getTitle(item),
1327 342fa48b Olga Brani
                                img_replaceWith: item.img
1328 342fa48b Olga Brani
                        }, item);
1329 342fa48b Olga Brani
1330 342fa48b Olga Brani
                        mfp.resizeImage();
1331 342fa48b Olga Brani
1332 342fa48b Olga Brani
                        if(item.hasSize) {
1333 342fa48b Olga Brani
                                if(_imgInterval) clearInterval(_imgInterval);
1334 342fa48b Olga Brani
1335 342fa48b Olga Brani
                                if(item.loadError) {
1336 342fa48b Olga Brani
                                        template.addClass('mfp-loading');
1337 342fa48b Olga Brani
                                        mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );
1338 342fa48b Olga Brani
                                } else {
1339 342fa48b Olga Brani
                                        template.removeClass('mfp-loading');
1340 342fa48b Olga Brani
                                        mfp.updateStatus('ready');
1341 342fa48b Olga Brani
                                }
1342 342fa48b Olga Brani
                                return template;
1343 342fa48b Olga Brani
                        }
1344 342fa48b Olga Brani
1345 342fa48b Olga Brani
                        mfp.updateStatus('loading');
1346 342fa48b Olga Brani
                        item.loading = true;
1347 342fa48b Olga Brani
1348 342fa48b Olga Brani
                        if(!item.hasSize) {
1349 342fa48b Olga Brani
                                item.imgHidden = true;
1350 342fa48b Olga Brani
                                template.addClass('mfp-loading');
1351 342fa48b Olga Brani
                                mfp.findImageSize(item);
1352 342fa48b Olga Brani
                        } 
1353 342fa48b Olga Brani
1354 342fa48b Olga Brani
                        return template;
1355 342fa48b Olga Brani
                }
1356 342fa48b Olga Brani
        }
1357 342fa48b Olga Brani
});
1358 342fa48b Olga Brani
1359 342fa48b Olga Brani
1360 342fa48b Olga Brani
1361 342fa48b Olga Brani
/*>>image*/
1362 342fa48b Olga Brani
1363 342fa48b Olga Brani
/*>>zoom*/
1364 342fa48b Olga Brani
var hasMozTransform,
1365 342fa48b Olga Brani
        getHasMozTransform = function() {
1366 342fa48b Olga Brani
                if(hasMozTransform === undefined) {
1367 342fa48b Olga Brani
                        hasMozTransform = document.createElement('p').style.MozTransform !== undefined;
1368 342fa48b Olga Brani
                }
1369 342fa48b Olga Brani
                return hasMozTransform;                
1370 342fa48b Olga Brani
        };
1371 342fa48b Olga Brani
1372 342fa48b Olga Brani
$.magnificPopup.registerModule('zoom', {
1373 342fa48b Olga Brani
1374 342fa48b Olga Brani
        options: {
1375 342fa48b Olga Brani
                enabled: false,
1376 342fa48b Olga Brani
                easing: 'ease-in-out',
1377 342fa48b Olga Brani
                duration: 300,
1378 342fa48b Olga Brani
                opener: function(element) {
1379 342fa48b Olga Brani
                        return element.is('img') ? element : element.find('img');
1380 342fa48b Olga Brani
                }
1381 342fa48b Olga Brani
        },
1382 342fa48b Olga Brani
1383 342fa48b Olga Brani
        proto: {
1384 342fa48b Olga Brani
1385 342fa48b Olga Brani
                initZoom: function() {
1386 342fa48b Olga Brani
                        var zoomSt = mfp.st.zoom,
1387 342fa48b Olga Brani
                                ns = '.zoom';
1388 342fa48b Olga Brani
                                
1389 342fa48b Olga Brani
                        if(!zoomSt.enabled || !mfp.supportsTransition) {
1390 342fa48b Olga Brani
                                return;
1391 342fa48b Olga Brani
                        }
1392 342fa48b Olga Brani
1393 342fa48b Olga Brani
                        var duration = zoomSt.duration,
1394 342fa48b Olga Brani
                                getElToAnimate = function(image) {
1395 342fa48b Olga Brani
                                        var newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'),
1396 342fa48b Olga Brani
                                                transition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing,
1397 342fa48b Olga Brani
                                                cssObj = {
1398 342fa48b Olga Brani
                                                        position: 'fixed',
1399 342fa48b Olga Brani
                                                        zIndex: 9999,
1400 342fa48b Olga Brani
                                                        left: 0,
1401 342fa48b Olga Brani
                                                        top: 0,
1402 342fa48b Olga Brani
                                                        '-webkit-backface-visibility': 'hidden'
1403 342fa48b Olga Brani
                                                },
1404 342fa48b Olga Brani
                                                t = 'transition';
1405 342fa48b Olga Brani
1406 342fa48b Olga Brani
                                        cssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition;
1407 342fa48b Olga Brani
1408 342fa48b Olga Brani
                                        newImg.css(cssObj);
1409 342fa48b Olga Brani
                                        return newImg;
1410 342fa48b Olga Brani
                                },
1411 342fa48b Olga Brani
                                showMainContent = function() {
1412 342fa48b Olga Brani
                                        mfp.content.css('visibility', 'visible');
1413 342fa48b Olga Brani
                                },
1414 342fa48b Olga Brani
                                openTimeout,
1415 342fa48b Olga Brani
                                animatedImg;
1416 342fa48b Olga Brani
1417 342fa48b Olga Brani
                        _mfpOn('BuildControls'+ns, function() {
1418 342fa48b Olga Brani
                                if(mfp._allowZoom()) {
1419 342fa48b Olga Brani
1420 342fa48b Olga Brani
                                        clearTimeout(openTimeout);
1421 342fa48b Olga Brani
                                        mfp.content.css('visibility', 'hidden');
1422 342fa48b Olga Brani
1423 342fa48b Olga Brani
                                        // Basically, all code below does is clones existing image, puts in on top of the current one and animated it
1424 342fa48b Olga Brani
                                        
1425 342fa48b Olga Brani
                                        image = mfp._getItemToZoom();
1426 342fa48b Olga Brani
1427 342fa48b Olga Brani
                                        if(!image) {
1428 342fa48b Olga Brani
                                                showMainContent();
1429 342fa48b Olga Brani
                                                return;
1430 342fa48b Olga Brani
                                        }
1431 342fa48b Olga Brani
1432 342fa48b Olga Brani
                                        animatedImg = getElToAnimate(image); 
1433 342fa48b Olga Brani
                                        
1434 342fa48b Olga Brani
                                        animatedImg.css( mfp._getOffset() );
1435 342fa48b Olga Brani
1436 342fa48b Olga Brani
                                        mfp.wrap.append(animatedImg);
1437 342fa48b Olga Brani
1438 342fa48b Olga Brani
                                        openTimeout = setTimeout(function() {
1439 342fa48b Olga Brani
                                                animatedImg.css( mfp._getOffset( true ) );
1440 342fa48b Olga Brani
                                                openTimeout = setTimeout(function() {
1441 342fa48b Olga Brani
1442 342fa48b Olga Brani
                                                        showMainContent();
1443 342fa48b Olga Brani
1444 342fa48b Olga Brani
                                                        setTimeout(function() {
1445 342fa48b Olga Brani
                                                                animatedImg.remove();
1446 342fa48b Olga Brani
                                                                image = animatedImg = null;
1447 342fa48b Olga Brani
                                                                _mfpTrigger('ZoomAnimationEnded');
1448 342fa48b Olga Brani
                                                        }, 16); // avoid blink when switching images 
1449 342fa48b Olga Brani
1450 342fa48b Olga Brani
                                                }, duration); // this timeout equals animation duration
1451 342fa48b Olga Brani
1452 342fa48b Olga Brani
                                        }, 16); // by adding this timeout we avoid short glitch at the beginning of animation
1453 342fa48b Olga Brani
1454 342fa48b Olga Brani
1455 342fa48b Olga Brani
                                        // Lots of timeouts...
1456 342fa48b Olga Brani
                                }
1457 342fa48b Olga Brani
                        });
1458 342fa48b Olga Brani
                        _mfpOn(BEFORE_CLOSE_EVENT+ns, function() {
1459 342fa48b Olga Brani
                                if(mfp._allowZoom()) {
1460 342fa48b Olga Brani
1461 342fa48b Olga Brani
                                        clearTimeout(openTimeout);
1462 342fa48b Olga Brani
1463 342fa48b Olga Brani
                                        mfp.st.removalDelay = duration;
1464 342fa48b Olga Brani
1465 342fa48b Olga Brani
                                        if(!image) {
1466 342fa48b Olga Brani
                                                image = mfp._getItemToZoom();
1467 342fa48b Olga Brani
                                                if(!image) {
1468 342fa48b Olga Brani
                                                        return;
1469 342fa48b Olga Brani
                                                }
1470 342fa48b Olga Brani
                                                animatedImg = getElToAnimate(image);
1471 342fa48b Olga Brani
                                        }
1472 342fa48b Olga Brani
                                        
1473 342fa48b Olga Brani
                                        
1474 342fa48b Olga Brani
                                        animatedImg.css( mfp._getOffset(true) );
1475 342fa48b Olga Brani
                                        mfp.wrap.append(animatedImg);
1476 342fa48b Olga Brani
                                        mfp.content.css('visibility', 'hidden');
1477 342fa48b Olga Brani
                                        
1478 342fa48b Olga Brani
                                        setTimeout(function() {
1479 342fa48b Olga Brani
                                                animatedImg.css( mfp._getOffset() );
1480 342fa48b Olga Brani
                                        }, 16);
1481 342fa48b Olga Brani
                                }
1482 342fa48b Olga Brani
1483 342fa48b Olga Brani
                        });
1484 342fa48b Olga Brani
1485 342fa48b Olga Brani
                        _mfpOn(CLOSE_EVENT+ns, function() {
1486 342fa48b Olga Brani
                                if(mfp._allowZoom()) {
1487 342fa48b Olga Brani
                                        showMainContent();
1488 342fa48b Olga Brani
                                        if(animatedImg) {
1489 342fa48b Olga Brani
                                                animatedImg.remove();
1490 342fa48b Olga Brani
                                        }
1491 342fa48b Olga Brani
                                }        
1492 342fa48b Olga Brani
                        });
1493 342fa48b Olga Brani
                },
1494 342fa48b Olga Brani
1495 342fa48b Olga Brani
                _allowZoom: function() {
1496 342fa48b Olga Brani
                        return mfp.currItem.type === 'image';
1497 342fa48b Olga Brani
                },
1498 342fa48b Olga Brani
1499 342fa48b Olga Brani
                _getItemToZoom: function() {
1500 342fa48b Olga Brani
                        if(mfp.currItem.hasSize) {
1501 342fa48b Olga Brani
                                return mfp.currItem.img;
1502 342fa48b Olga Brani
                        } else {
1503 342fa48b Olga Brani
                                return false;
1504 342fa48b Olga Brani
                        }
1505 342fa48b Olga Brani
                },
1506 342fa48b Olga Brani
1507 342fa48b Olga Brani
                // Get element postion relative to viewport
1508 342fa48b Olga Brani
                _getOffset: function(isLarge) {
1509 342fa48b Olga Brani
                        var el;
1510 342fa48b Olga Brani
                        if(isLarge) {
1511 342fa48b Olga Brani
                                el = mfp.currItem.img;
1512 342fa48b Olga Brani
                        } else {
1513 342fa48b Olga Brani
                                el = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem);
1514 342fa48b Olga Brani
                        }
1515 342fa48b Olga Brani
1516 342fa48b Olga Brani
                        var offset = el.offset();
1517 342fa48b Olga Brani
                        var paddingTop = parseInt(el.css('padding-top'),10);
1518 342fa48b Olga Brani
                        var paddingBottom = parseInt(el.css('padding-bottom'),10);
1519 342fa48b Olga Brani
                        offset.top -= ( $(window).scrollTop() - paddingTop );
1520 342fa48b Olga Brani
1521 342fa48b Olga Brani
1522 342fa48b Olga Brani
                        /*
1523 342fa48b Olga Brani
                        
1524 342fa48b Olga Brani
                        Animating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa.
1525 342fa48b Olga Brani

1526 342fa48b Olga Brani
                         */
1527 342fa48b Olga Brani
                        var obj = {
1528 342fa48b Olga Brani
                                width: el.width(),
1529 342fa48b Olga Brani
                                // fix Zepto height+padding issue
1530 342fa48b Olga Brani
                                height: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop
1531 342fa48b Olga Brani
                        };
1532 342fa48b Olga Brani
1533 342fa48b Olga Brani
                        // I hate to do this, but there is no another option
1534 342fa48b Olga Brani
                        if( getHasMozTransform() ) {
1535 342fa48b Olga Brani
                                obj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)';
1536 342fa48b Olga Brani
                        } else {
1537 342fa48b Olga Brani
                                obj.left = offset.left;
1538 342fa48b Olga Brani
                                obj.top = offset.top;
1539 342fa48b Olga Brani
                        }
1540 342fa48b Olga Brani
                        return obj;
1541 342fa48b Olga Brani
                }
1542 342fa48b Olga Brani
1543 342fa48b Olga Brani
        }
1544 342fa48b Olga Brani
});
1545 342fa48b Olga Brani
1546 342fa48b Olga Brani
1547 342fa48b Olga Brani
1548 342fa48b Olga Brani
/*>>zoom*/
1549 342fa48b Olga Brani
1550 342fa48b Olga Brani
/*>>iframe*/
1551 342fa48b Olga Brani
1552 342fa48b Olga Brani
var IFRAME_NS = 'iframe',
1553 342fa48b Olga Brani
        _emptyPage = '//about:blank',
1554 342fa48b Olga Brani
        
1555 342fa48b Olga Brani
        _fixIframeBugs = function(isShowing) {
1556 342fa48b Olga Brani
                if(mfp.currTemplate[IFRAME_NS]) {
1557 342fa48b Olga Brani
                        var el = mfp.currTemplate[IFRAME_NS].find('iframe');
1558 342fa48b Olga Brani
                        if(el.length) { 
1559 342fa48b Olga Brani
                                // reset src after the popup is closed to avoid "video keeps playing after popup is closed" bug
1560 342fa48b Olga Brani
                                if(!isShowing) {
1561 342fa48b Olga Brani
                                        el[0].src = _emptyPage;
1562 342fa48b Olga Brani
                                }
1563 342fa48b Olga Brani
1564 342fa48b Olga Brani
                                // IE8 black screen bug fix
1565 342fa48b Olga Brani
                                if(mfp.isIE8) {
1566 342fa48b Olga Brani
                                        el.css('display', isShowing ? 'block' : 'none');
1567 342fa48b Olga Brani
                                }
1568 342fa48b Olga Brani
                        }
1569 342fa48b Olga Brani
                }
1570 342fa48b Olga Brani
        };
1571 342fa48b Olga Brani
1572 342fa48b Olga Brani
$.magnificPopup.registerModule(IFRAME_NS, {
1573 342fa48b Olga Brani
1574 342fa48b Olga Brani
        options: {
1575 342fa48b Olga Brani
                markup: '<div class="mfp-iframe-scaler">'+
1576 342fa48b Olga Brani
                                        '<div class="mfp-close"></div>'+
1577 342fa48b Olga Brani
                                        '<iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe>'+
1578 342fa48b Olga Brani
                                '</div>',
1579 342fa48b Olga Brani
1580 342fa48b Olga Brani
                srcAction: 'iframe_src',
1581 342fa48b Olga Brani
1582 342fa48b Olga Brani
                // we don't care and support only one default type of URL by default
1583 342fa48b Olga Brani
                patterns: {
1584 342fa48b Olga Brani
                        youtube: {
1585 342fa48b Olga Brani
                                index: 'youtube.com', 
1586 342fa48b Olga Brani
                                id: 'v=', 
1587 342fa48b Olga Brani
                                src: '//www.youtube.com/embed/%id%?autoplay=1'
1588 342fa48b Olga Brani
                        },
1589 342fa48b Olga Brani
                        vimeo: {
1590 342fa48b Olga Brani
                                index: 'vimeo.com/',
1591 342fa48b Olga Brani
                                id: '/',
1592 342fa48b Olga Brani
                                src: '//player.vimeo.com/video/%id%?autoplay=1'
1593 342fa48b Olga Brani
                        },
1594 342fa48b Olga Brani
                        gmaps: {
1595 342fa48b Olga Brani
                                index: '//maps.google.',
1596 342fa48b Olga Brani
                                src: '%id%&output=embed'
1597 342fa48b Olga Brani
                        }
1598 342fa48b Olga Brani
                }
1599 342fa48b Olga Brani
        },
1600 342fa48b Olga Brani
1601 342fa48b Olga Brani
        proto: {
1602 342fa48b Olga Brani
                initIframe: function() {
1603 342fa48b Olga Brani
                        mfp.types.push(IFRAME_NS);
1604 342fa48b Olga Brani
1605 342fa48b Olga Brani
                        _mfpOn('BeforeChange', function(e, prevType, newType) {
1606 342fa48b Olga Brani
                                if(prevType !== newType) {
1607 342fa48b Olga Brani
                                        if(prevType === IFRAME_NS) {
1608 342fa48b Olga Brani
                                                _fixIframeBugs(); // iframe if removed
1609 342fa48b Olga Brani
                                        } else if(newType === IFRAME_NS) {
1610 342fa48b Olga Brani
                                                _fixIframeBugs(true); // iframe is showing
1611 342fa48b Olga Brani
                                        } 
1612 342fa48b Olga Brani
                                }// else {
1613 342fa48b Olga Brani
                                        // iframe source is switched, don't do anything
1614 342fa48b Olga Brani
                                //}
1615 342fa48b Olga Brani
                        });
1616 342fa48b Olga Brani
1617 342fa48b Olga Brani
                        _mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() {
1618 342fa48b Olga Brani
                                _fixIframeBugs();
1619 342fa48b Olga Brani
                        });
1620 342fa48b Olga Brani
                },
1621 342fa48b Olga Brani
1622 342fa48b Olga Brani
                getIframe: function(item, template) {
1623 342fa48b Olga Brani
                        var embedSrc = item.src;
1624 342fa48b Olga Brani
                        var iframeSt = mfp.st.iframe;
1625 342fa48b Olga Brani
                                
1626 342fa48b Olga Brani
                        $.each(iframeSt.patterns, function() {
1627 342fa48b Olga Brani
                                if(embedSrc.indexOf( this.index ) > -1) {
1628 342fa48b Olga Brani
                                        if(this.id) {
1629 342fa48b Olga Brani
                                                if(typeof this.id === 'string') {
1630 342fa48b Olga Brani
                                                        embedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length);
1631 342fa48b Olga Brani
                                                } else {
1632 342fa48b Olga Brani
                                                        embedSrc = this.id.call( this, embedSrc );
1633 342fa48b Olga Brani
                                                }
1634 342fa48b Olga Brani
                                        }
1635 342fa48b Olga Brani
                                        embedSrc = this.src.replace('%id%', embedSrc );
1636 342fa48b Olga Brani
                                        return false; // break;
1637 342fa48b Olga Brani
                                }
1638 342fa48b Olga Brani
                        });
1639 342fa48b Olga Brani
                        
1640 342fa48b Olga Brani
                        var dataObj = {};
1641 342fa48b Olga Brani
                        if(iframeSt.srcAction) {
1642 342fa48b Olga Brani
                                dataObj[iframeSt.srcAction] = embedSrc;
1643 342fa48b Olga Brani
                        }
1644 342fa48b Olga Brani
                        mfp._parseMarkup(template, dataObj, item);
1645 342fa48b Olga Brani
1646 342fa48b Olga Brani
                        mfp.updateStatus('ready');
1647 342fa48b Olga Brani
1648 342fa48b Olga Brani
                        return template;
1649 342fa48b Olga Brani
                }
1650 342fa48b Olga Brani
        }
1651 342fa48b Olga Brani
});
1652 342fa48b Olga Brani
1653 342fa48b Olga Brani
1654 342fa48b Olga Brani
1655 342fa48b Olga Brani
/*>>iframe*/
1656 342fa48b Olga Brani
1657 342fa48b Olga Brani
/*>>gallery*/
1658 342fa48b Olga Brani
/**
1659 342fa48b Olga Brani
 * Get looped index depending on number of slides
1660 342fa48b Olga Brani
 */
1661 342fa48b Olga Brani
var _getLoopedId = function(index) {
1662 342fa48b Olga Brani
                var numSlides = mfp.items.length;
1663 342fa48b Olga Brani
                if(index > numSlides - 1) {
1664 342fa48b Olga Brani
                        return index - numSlides;
1665 342fa48b Olga Brani
                } else  if(index < 0) {
1666 342fa48b Olga Brani
                        return numSlides + index;
1667 342fa48b Olga Brani
                }
1668 342fa48b Olga Brani
                return index;
1669 342fa48b Olga Brani
        },
1670 342fa48b Olga Brani
        _replaceCurrTotal = function(text, curr, total) {
1671 342fa48b Olga Brani
                return text.replace('%curr%', curr + 1).replace('%total%', total);
1672 342fa48b Olga Brani
        };
1673 342fa48b Olga Brani
1674 342fa48b Olga Brani
$.magnificPopup.registerModule('gallery', {
1675 342fa48b Olga Brani
1676 342fa48b Olga Brani
        options: {
1677 342fa48b Olga Brani
                enabled: false,
1678 342fa48b Olga Brani
                arrowMarkup: '<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',
1679 342fa48b Olga Brani
                preload: [0,2],
1680 342fa48b Olga Brani
                navigateByImgClick: true,
1681 342fa48b Olga Brani
                arrows: true,
1682 342fa48b Olga Brani
1683 342fa48b Olga Brani
                tPrev: 'Previous (Left arrow key)',
1684 342fa48b Olga Brani
                tNext: 'Next (Right arrow key)',
1685 342fa48b Olga Brani
                tCounter: '%curr% of %total%'
1686 342fa48b Olga Brani
        },
1687 342fa48b Olga Brani
1688 342fa48b Olga Brani
        proto: {
1689 342fa48b Olga Brani
                initGallery: function() {
1690 342fa48b Olga Brani
1691 342fa48b Olga Brani
                        var gSt = mfp.st.gallery,
1692 342fa48b Olga Brani
                                ns = '.mfp-gallery',
1693 342fa48b Olga Brani
                                supportsFastClick = Boolean($.fn.mfpFastClick);
1694 342fa48b Olga Brani
1695 342fa48b Olga Brani
                        mfp.direction = true; // true - next, false - prev
1696 342fa48b Olga Brani
                        
1697 342fa48b Olga Brani
                        if(!gSt || !gSt.enabled ) return false;
1698 342fa48b Olga Brani
1699 342fa48b Olga Brani
                        _wrapClasses += ' mfp-gallery';
1700 342fa48b Olga Brani
1701 342fa48b Olga Brani
                        _mfpOn(OPEN_EVENT+ns, function() {
1702 342fa48b Olga Brani
1703 342fa48b Olga Brani
                                if(gSt.navigateByImgClick) {
1704 342fa48b Olga Brani
                                        mfp.wrap.on('click'+ns, '.mfp-img', function() {
1705 342fa48b Olga Brani
                                                if(mfp.items.length > 1) {
1706 342fa48b Olga Brani
                                                        mfp.next();
1707 342fa48b Olga Brani
                                                        return false;
1708 342fa48b Olga Brani
                                                }
1709 342fa48b Olga Brani
                                        });
1710 342fa48b Olga Brani
                                }
1711 342fa48b Olga Brani
1712 342fa48b Olga Brani
                                _document.on('keydown'+ns, function(e) {
1713 342fa48b Olga Brani
                                        if (e.keyCode === 37) {
1714 342fa48b Olga Brani
                                                mfp.prev();
1715 342fa48b Olga Brani
                                        } else if (e.keyCode === 39) {
1716 342fa48b Olga Brani
                                                mfp.next();
1717 342fa48b Olga Brani
                                        }
1718 342fa48b Olga Brani
                                });
1719 342fa48b Olga Brani
                        });
1720 342fa48b Olga Brani
1721 342fa48b Olga Brani
                        _mfpOn('UpdateStatus'+ns, function(e, data) {
1722 342fa48b Olga Brani
                                if(data.text) {
1723 342fa48b Olga Brani
                                        data.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length);
1724 342fa48b Olga Brani
                                }
1725 342fa48b Olga Brani
                        });
1726 342fa48b Olga Brani
1727 342fa48b Olga Brani
                        _mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) {
1728 342fa48b Olga Brani
                                var l = mfp.items.length;
1729 342fa48b Olga Brani
                                values.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : '';
1730 342fa48b Olga Brani
                        });
1731 342fa48b Olga Brani
1732 342fa48b Olga Brani
                        _mfpOn('BuildControls' + ns, function() {
1733 342fa48b Olga Brani
                                if(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) {
1734 342fa48b Olga Brani
                                        var markup = gSt.arrowMarkup,
1735 342fa48b Olga Brani
                                                arrowLeft = mfp.arrowLeft = $( markup.replace('%title%', gSt.tPrev).replace('%dir%', 'left') ).addClass(PREVENT_CLOSE_CLASS),                        
1736 342fa48b Olga Brani
                                                arrowRight = mfp.arrowRight = $( markup.replace('%title%', gSt.tNext).replace('%dir%', 'right') ).addClass(PREVENT_CLOSE_CLASS);
1737 342fa48b Olga Brani
1738 342fa48b Olga Brani
                                        var eName = supportsFastClick ? 'mfpFastClick' : 'click';
1739 342fa48b Olga Brani
                                        arrowLeft[eName](function() {
1740 342fa48b Olga Brani
                                                mfp.prev();
1741 342fa48b Olga Brani
                                        });                        
1742 342fa48b Olga Brani
                                        arrowRight[eName](function() {
1743 342fa48b Olga Brani
                                                mfp.next();
1744 342fa48b Olga Brani
                                        });        
1745 342fa48b Olga Brani
1746 342fa48b Olga Brani
                                        // Polyfill for :before and :after (adds elements with classes mfp-a and mfp-b)
1747 342fa48b Olga Brani
                                        if(mfp.isIE7) {
1748 342fa48b Olga Brani
                                                _getEl('b', arrowLeft[0], false, true);
1749 342fa48b Olga Brani
                                                _getEl('a', arrowLeft[0], false, true);
1750 342fa48b Olga Brani
                                                _getEl('b', arrowRight[0], false, true);
1751 342fa48b Olga Brani
                                                _getEl('a', arrowRight[0], false, true);
1752 342fa48b Olga Brani
                                        }
1753 342fa48b Olga Brani
1754 342fa48b Olga Brani
                                        mfp.container.append(arrowLeft.add(arrowRight));
1755 342fa48b Olga Brani
                                }
1756 342fa48b Olga Brani
                        });
1757 342fa48b Olga Brani
1758 342fa48b Olga Brani
                        _mfpOn(CHANGE_EVENT+ns, function() {
1759 342fa48b Olga Brani
                                if(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout);
1760 342fa48b Olga Brani
1761 342fa48b Olga Brani
                                mfp._preloadTimeout = setTimeout(function() {
1762 342fa48b Olga Brani
                                        mfp.preloadNearbyImages();
1763 342fa48b Olga Brani
                                        mfp._preloadTimeout = null;
1764 342fa48b Olga Brani
                                }, 16);                
1765 342fa48b Olga Brani
                        });
1766 342fa48b Olga Brani
1767 342fa48b Olga Brani
1768 342fa48b Olga Brani
                        _mfpOn(CLOSE_EVENT+ns, function() {
1769 342fa48b Olga Brani
                                _document.off(ns);
1770 342fa48b Olga Brani
                                mfp.wrap.off('click'+ns);
1771 342fa48b Olga Brani
                        
1772 342fa48b Olga Brani
                                if(mfp.arrowLeft && supportsFastClick) {
1773 342fa48b Olga Brani
                                        mfp.arrowLeft.add(mfp.arrowRight).destroyMfpFastClick();
1774 342fa48b Olga Brani
                                }
1775 342fa48b Olga Brani
                                mfp.arrowRight = mfp.arrowLeft = null;
1776 342fa48b Olga Brani
                        });
1777 342fa48b Olga Brani
1778 342fa48b Olga Brani
                }, 
1779 342fa48b Olga Brani
                next: function() {
1780 342fa48b Olga Brani
                        mfp.direction = true;
1781 342fa48b Olga Brani
                        mfp.index = _getLoopedId(mfp.index + 1);
1782 342fa48b Olga Brani
                        mfp.updateItemHTML();
1783 342fa48b Olga Brani
                },
1784 342fa48b Olga Brani
                prev: function() {
1785 342fa48b Olga Brani
                        mfp.direction = false;
1786 342fa48b Olga Brani
                        mfp.index = _getLoopedId(mfp.index - 1);
1787 342fa48b Olga Brani
                        mfp.updateItemHTML();
1788 342fa48b Olga Brani
                },
1789 342fa48b Olga Brani
                goTo: function(newIndex) {
1790 342fa48b Olga Brani
                        mfp.direction = (newIndex >= mfp.index);
1791 342fa48b Olga Brani
                        mfp.index = newIndex;
1792 342fa48b Olga Brani
                        mfp.updateItemHTML();
1793 342fa48b Olga Brani
                },
1794 342fa48b Olga Brani
                preloadNearbyImages: function() {
1795 342fa48b Olga Brani
                        var p = mfp.st.gallery.preload,
1796 342fa48b Olga Brani
                                preloadBefore = Math.min(p[0], mfp.items.length),
1797 342fa48b Olga Brani
                                preloadAfter = Math.min(p[1], mfp.items.length),
1798 342fa48b Olga Brani
                                i;
1799 342fa48b Olga Brani
1800 342fa48b Olga Brani
                        for(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) {
1801 342fa48b Olga Brani
                                mfp._preloadItem(mfp.index+i);
1802 342fa48b Olga Brani
                        }
1803 342fa48b Olga Brani
                        for(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) {
1804 342fa48b Olga Brani
                                mfp._preloadItem(mfp.index-i);
1805 342fa48b Olga Brani
                        }
1806 342fa48b Olga Brani
                },
1807 342fa48b Olga Brani
                _preloadItem: function(index) {
1808 342fa48b Olga Brani
                        index = _getLoopedId(index);
1809 342fa48b Olga Brani
1810 342fa48b Olga Brani
                        if(mfp.items[index].preloaded) {
1811 342fa48b Olga Brani
                                return;
1812 342fa48b Olga Brani
                        }
1813 342fa48b Olga Brani
1814 342fa48b Olga Brani
                        var item = mfp.items[index];
1815 342fa48b Olga Brani
                        if(!item.parsed) {
1816 342fa48b Olga Brani
                                item = mfp.parseEl( index );
1817 342fa48b Olga Brani
                        }
1818 342fa48b Olga Brani
1819 342fa48b Olga Brani
                        _mfpTrigger('LazyLoad', item);
1820 342fa48b Olga Brani
1821 342fa48b Olga Brani
                        if(item.type === 'image') {
1822 342fa48b Olga Brani
                                item.img = $('<img class="mfp-img" />').on('load.mfploader', function() {
1823 342fa48b Olga Brani
                                        item.hasSize = true;
1824 342fa48b Olga Brani
                                }).on('error.mfploader', function() {
1825 342fa48b Olga Brani
                                        item.hasSize = true;
1826 342fa48b Olga Brani
                                        item.loadError = true;
1827 342fa48b Olga Brani
                                        _mfpTrigger('LazyLoadError', item);
1828 342fa48b Olga Brani
                                }).attr('src', item.src);
1829 342fa48b Olga Brani
                        }
1830 342fa48b Olga Brani
1831 342fa48b Olga Brani
1832 342fa48b Olga Brani
                        item.preloaded = true;
1833 342fa48b Olga Brani
                }
1834 342fa48b Olga Brani
        }
1835 342fa48b Olga Brani
});
1836 342fa48b Olga Brani
1837 342fa48b Olga Brani
/*
1838 342fa48b Olga Brani
Touch Support that might be implemented some day
1839 342fa48b Olga Brani

1840 342fa48b Olga Brani
addSwipeGesture: function() {
1841 342fa48b Olga Brani
        var startX,
1842 342fa48b Olga Brani
                moved,
1843 342fa48b Olga Brani
                multipleTouches;
1844 342fa48b Olga Brani

1845 342fa48b Olga Brani
                return;
1846 342fa48b Olga Brani

1847 342fa48b Olga Brani
        var namespace = '.mfp',
1848 342fa48b Olga Brani
                addEventNames = function(pref, down, move, up, cancel) {
1849 342fa48b Olga Brani
                        mfp._tStart = pref + down + namespace;
1850 342fa48b Olga Brani
                        mfp._tMove = pref + move + namespace;
1851 342fa48b Olga Brani
                        mfp._tEnd = pref + up + namespace;
1852 342fa48b Olga Brani
                        mfp._tCancel = pref + cancel + namespace;
1853 342fa48b Olga Brani
                };
1854 342fa48b Olga Brani

1855 342fa48b Olga Brani
        if(window.navigator.msPointerEnabled) {
1856 342fa48b Olga Brani
                addEventNames('MSPointer', 'Down', 'Move', 'Up', 'Cancel');
1857 342fa48b Olga Brani
        } else if('ontouchstart' in window) {
1858 342fa48b Olga Brani
                addEventNames('touch', 'start', 'move', 'end', 'cancel');
1859 342fa48b Olga Brani
        } else {
1860 342fa48b Olga Brani
                return;
1861 342fa48b Olga Brani
        }
1862 342fa48b Olga Brani
        _window.on(mfp._tStart, function(e) {
1863 342fa48b Olga Brani
                var oE = e.originalEvent;
1864 342fa48b Olga Brani
                multipleTouches = moved = false;
1865 342fa48b Olga Brani
                startX = oE.pageX || oE.changedTouches[0].pageX;
1866 342fa48b Olga Brani
        }).on(mfp._tMove, function(e) {
1867 342fa48b Olga Brani
                if(e.originalEvent.touches.length > 1) {
1868 342fa48b Olga Brani
                        multipleTouches = e.originalEvent.touches.length;
1869 342fa48b Olga Brani
                } else {
1870 342fa48b Olga Brani
                        //e.preventDefault();
1871 342fa48b Olga Brani
                        moved = true;
1872 342fa48b Olga Brani
                }
1873 342fa48b Olga Brani
        }).on(mfp._tEnd + ' ' + mfp._tCancel, function(e) {
1874 342fa48b Olga Brani
                if(moved && !multipleTouches) {
1875 342fa48b Olga Brani
                        var oE = e.originalEvent,
1876 342fa48b Olga Brani
                                diff = startX - (oE.pageX || oE.changedTouches[0].pageX);
1877 342fa48b Olga Brani

1878 342fa48b Olga Brani
                        if(diff > 20) {
1879 342fa48b Olga Brani
                                mfp.next();
1880 342fa48b Olga Brani
                        } else if(diff < -20) {
1881 342fa48b Olga Brani
                                mfp.prev();
1882 342fa48b Olga Brani
                        }
1883 342fa48b Olga Brani
                }
1884 342fa48b Olga Brani
        });
1885 342fa48b Olga Brani
},
1886 342fa48b Olga Brani
*/
1887 342fa48b Olga Brani
1888 342fa48b Olga Brani
1889 342fa48b Olga Brani
/*>>gallery*/
1890 342fa48b Olga Brani
1891 342fa48b Olga Brani
/*>>retina*/
1892 342fa48b Olga Brani
1893 342fa48b Olga Brani
var RETINA_NS = 'retina';
1894 342fa48b Olga Brani
1895 342fa48b Olga Brani
$.magnificPopup.registerModule(RETINA_NS, {
1896 342fa48b Olga Brani
        options: {
1897 342fa48b Olga Brani
                replaceSrc: function(item) {
1898 342fa48b Olga Brani
                        return item.src.replace(/\.\w+$/, function(m) { return '@2x' + m; });
1899 342fa48b Olga Brani
                },
1900 342fa48b Olga Brani
                ratio: 1 // Function or number.  Set to 1 to disable.
1901 342fa48b Olga Brani
        },
1902 342fa48b Olga Brani
        proto: {
1903 342fa48b Olga Brani
                initRetina: function() {
1904 342fa48b Olga Brani
                        if(window.devicePixelRatio > 1) {
1905 342fa48b Olga Brani
1906 342fa48b Olga Brani
                                var st = mfp.st.retina,
1907 342fa48b Olga Brani
                                        ratio = st.ratio;
1908 342fa48b Olga Brani
1909 342fa48b Olga Brani
                                ratio = !isNaN(ratio) ? ratio : ratio();
1910 342fa48b Olga Brani
1911 342fa48b Olga Brani
                                if(ratio > 1) {
1912 342fa48b Olga Brani
                                        _mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) {
1913 342fa48b Olga Brani
                                                item.img.css({
1914 342fa48b Olga Brani
                                                        'max-width': item.img[0].naturalWidth / ratio,
1915 342fa48b Olga Brani
                                                        'width': '100%'
1916 342fa48b Olga Brani
                                                });
1917 342fa48b Olga Brani
                                        });
1918 342fa48b Olga Brani
                                        _mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) {
1919 342fa48b Olga Brani
                                                item.src = st.replaceSrc(item, ratio);
1920 342fa48b Olga Brani
                                        });
1921 342fa48b Olga Brani
                                }
1922 342fa48b Olga Brani
                        }
1923 342fa48b Olga Brani
1924 342fa48b Olga Brani
                }
1925 342fa48b Olga Brani
        }
1926 342fa48b Olga Brani
});
1927 342fa48b Olga Brani
1928 342fa48b Olga Brani
/*>>retina*/
1929 342fa48b Olga Brani
1930 342fa48b Olga Brani
/*>>fastclick*/
1931 342fa48b Olga Brani
/**
1932 342fa48b Olga Brani
 * FastClick event implementation. (removes 300ms delay on touch devices)
1933 342fa48b Olga Brani
 * Based on https://developers.google.com/mobile/articles/fast_buttons
1934 342fa48b Olga Brani
 *
1935 342fa48b Olga Brani
 * You may use it outside the Magnific Popup by calling just:
1936 342fa48b Olga Brani
 *
1937 342fa48b Olga Brani
 * $('.your-el').mfpFastClick(function() {
1938 342fa48b Olga Brani
 *     console.log('Clicked!');
1939 342fa48b Olga Brani
 * });
1940 342fa48b Olga Brani
 *
1941 342fa48b Olga Brani
 * To unbind:
1942 342fa48b Olga Brani
 * $('.your-el').destroyMfpFastClick();
1943 342fa48b Olga Brani
 * 
1944 342fa48b Olga Brani
 * 
1945 342fa48b Olga Brani
 * Note that it's a very basic and simple implementation, it blocks ghost click on the same element where it was bound.
1946 342fa48b Olga Brani
 * If you need something more advanced, use plugin by FT Labs https://github.com/ftlabs/fastclick
1947 342fa48b Olga Brani
 * 
1948 342fa48b Olga Brani
 */
1949 342fa48b Olga Brani
1950 342fa48b Olga Brani
(function() {
1951 342fa48b Olga Brani
        var ghostClickDelay = 1000,
1952 342fa48b Olga Brani
                supportsTouch = 'ontouchstart' in window,
1953 342fa48b Olga Brani
                unbindTouchMove = function() {
1954 342fa48b Olga Brani
                        _window.off('touchmove'+ns+' touchend'+ns);
1955 342fa48b Olga Brani
                },
1956 342fa48b Olga Brani
                eName = 'mfpFastClick',
1957 342fa48b Olga Brani
                ns = '.'+eName;
1958 342fa48b Olga Brani
1959 342fa48b Olga Brani
1960 342fa48b Olga Brani
        // As Zepto.js doesn't have an easy way to add custom events (like jQuery), so we implement it in this way
1961 342fa48b Olga Brani
        $.fn.mfpFastClick = function(callback) {
1962 342fa48b Olga Brani
1963 342fa48b Olga Brani
                return $(this).each(function() {
1964 342fa48b Olga Brani
1965 342fa48b Olga Brani
                        var elem = $(this),
1966 342fa48b Olga Brani
                                lock;
1967 342fa48b Olga Brani
1968 342fa48b Olga Brani
                        if( supportsTouch ) {
1969 342fa48b Olga Brani
1970 342fa48b Olga Brani
                                var timeout,
1971 342fa48b Olga Brani
                                        startX,
1972 342fa48b Olga Brani
                                        startY,
1973 342fa48b Olga Brani
                                        pointerMoved,
1974 342fa48b Olga Brani
                                        point,
1975 342fa48b Olga Brani
                                        numPointers;
1976 342fa48b Olga Brani
1977 342fa48b Olga Brani
                                elem.on('touchstart' + ns, function(e) {
1978 342fa48b Olga Brani
                                        pointerMoved = false;
1979 342fa48b Olga Brani
                                        numPointers = 1;
1980 342fa48b Olga Brani
1981 342fa48b Olga Brani
                                        point = e.originalEvent ? e.originalEvent.touches[0] : e.touches[0];
1982 342fa48b Olga Brani
                                        startX = point.clientX;
1983 342fa48b Olga Brani
                                        startY = point.clientY;
1984 342fa48b Olga Brani
1985 342fa48b Olga Brani
                                        _window.on('touchmove'+ns, function(e) {
1986 342fa48b Olga Brani
                                                point = e.originalEvent ? e.originalEvent.touches : e.touches;
1987 342fa48b Olga Brani
                                                numPointers = point.length;
1988 342fa48b Olga Brani
                                                point = point[0];
1989 342fa48b Olga Brani
                                                if (Math.abs(point.clientX - startX) > 10 ||
1990 342fa48b Olga Brani
                                                        Math.abs(point.clientY - startY) > 10) {
1991 342fa48b Olga Brani
                                                        pointerMoved = true;
1992 342fa48b Olga Brani
                                                        unbindTouchMove();
1993 342fa48b Olga Brani
                                                }
1994 342fa48b Olga Brani
                                        }).on('touchend'+ns, function(e) {
1995 342fa48b Olga Brani
                                                unbindTouchMove();
1996 342fa48b Olga Brani
                                                if(pointerMoved || numPointers > 1) {
1997 342fa48b Olga Brani
                                                        return;
1998 342fa48b Olga Brani
                                                }
1999 342fa48b Olga Brani
                                                lock = true;
2000 342fa48b Olga Brani
                                                e.preventDefault();
2001 342fa48b Olga Brani
                                                clearTimeout(timeout);
2002 342fa48b Olga Brani
                                                timeout = setTimeout(function() {
2003 342fa48b Olga Brani
                                                        lock = false;
2004 342fa48b Olga Brani
                                                }, ghostClickDelay);
2005 342fa48b Olga Brani
                                                callback();
2006 342fa48b Olga Brani
                                        });
2007 342fa48b Olga Brani
                                });
2008 342fa48b Olga Brani
2009 342fa48b Olga Brani
                        }
2010 342fa48b Olga Brani
2011 342fa48b Olga Brani
                        elem.on('click' + ns, function() {
2012 342fa48b Olga Brani
                                if(!lock) {
2013 342fa48b Olga Brani
                                        callback();
2014 342fa48b Olga Brani
                                }
2015 342fa48b Olga Brani
                        });
2016 342fa48b Olga Brani
                });
2017 342fa48b Olga Brani
        };
2018 342fa48b Olga Brani
2019 342fa48b Olga Brani
        $.fn.destroyMfpFastClick = function() {
2020 342fa48b Olga Brani
                $(this).off('touchstart' + ns + ' click' + ns);
2021 342fa48b Olga Brani
                if(supportsTouch) _window.off('touchmove'+ns+' touchend'+ns);
2022 342fa48b Olga Brani
        };
2023 342fa48b Olga Brani
})();
2024 342fa48b Olga Brani
2025 342fa48b Olga Brani
/*>>fastclick*/
2026 342fa48b Olga Brani
})(window.jQuery || window.Zepto);