├── .gitignore ├── .publishrc ├── .travis.yml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── assets ├── blank.gif ├── fancybox_buttons.png ├── fancybox_loading.gif ├── fancybox_loading@2x.gif ├── fancybox_overlay.png ├── fancybox_sprite.png ├── fancybox_sprite@2x.png ├── helpers │ ├── fancybox_buttons.png │ ├── jquery.fancybox-buttons.css │ ├── jquery.fancybox-buttons.js │ ├── jquery.fancybox-media.js │ ├── jquery.fancybox-thumbs.css │ └── jquery.fancybox-thumbs.js ├── jquery.fancybox-buttons.css ├── jquery.fancybox-buttons.js ├── jquery.fancybox.css ├── jquery.fancybox.js ├── jquery.fancybox.pack.js ├── jquery.min.js ├── jquery.mousewheel.pack.js └── plugin.js ├── index.js └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | 10 | # Directory for instrumented libs generated by jscoverage/JSCover 11 | lib-cov 12 | 13 | # Coverage directory used by tools like istanbul 14 | coverage 15 | 16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 17 | .grunt 18 | 19 | # node-waf configuration 20 | .lock-wscript 21 | 22 | # Compiled binary addons (http://nodejs.org/api/addons.html) 23 | build/Release 24 | 25 | # Dependency directory 26 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git 27 | node_modules 28 | -------------------------------------------------------------------------------- /.publishrc: -------------------------------------------------------------------------------- 1 | { 2 | "checkCommitted": 2, 3 | "checkTracked": 2, 4 | "checkBranch": 2, 5 | "checkTaggable": 2, 6 | "checkDepVersion": 2, 7 | "checkChangelog": 2, 8 | "checkVersion": 2, 9 | "checkers": [ 10 | "checkVersion", 11 | "checkBranch", 12 | "checkCommitted", 13 | "checkTracked", 14 | "checkDepVersion", 15 | "checkChangelog", 16 | "checkTaggable" 17 | ], 18 | "runPrepublish": false, 19 | "runTest": false, 20 | "commands": [ 21 | "runTest", 22 | "runPrepublish" 23 | ], 24 | "confirm": true, 25 | "tagFormat": "<%= version %>", 26 | "branchFormat": "master", 27 | "npm": "npm", 28 | "remote": "origin", 29 | "type": [ 30 | "git", 31 | "npm" 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "stable" 4 | - "0.12" 5 | - "4.0.0" 6 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # gitbook-plugin-fancybox 2 | 3 | ## 3.0.0 4 | 5 | * Adapt plugin to GitBook 3 (pr #1) 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Lingyu Wang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # gitbook-plugin-fancybox 2 | 3 | [![Build Status](https://travis-ci.org/ly-tools/gitbook-plugin-fancybox.png)](https://travis-ci.org/ly-tools/gitbook-plugin-fancybox) 4 | [![Dependency Status](https://david-dm.org/ly-tools/gitbook-plugin-fancybox.svg)](https://david-dm.org/ly-tools/gitbook-plugin-fancybox) 5 | [![devDependency Status](https://david-dm.org/ly-tools/gitbook-plugin-fancybox/dev-status.svg)](https://david-dm.org/ly-tools/gitbook-plugin-fancybox#info=devDependencies) 6 | [![NPM version](http://img.shields.io/npm/v/gitbook-plugin-fancybox.svg?style=flat-square)](http://npmjs.org/package/gitbook-plugin-fancybox) 7 | [![node](https://img.shields.io/badge/node.js-%3E=_0.12-green.svg?style=flat-square)](http://nodejs.org/download/) 8 | [![License](http://img.shields.io/npm/l/gitbook-plugin-fancybox.svg?style=flat-square)](LICENSE) 9 | [![npm download](https://img.shields.io/npm/dm/gitbook-plugin-fancybox.svg?style=flat-square)](https://npmjs.org/package/gitbook-plugin-fancybox) 10 | 11 | A gitbook plugin to show image by graceful jQuery fancy box 12 | 13 | [DEMO](http://read.lingyu.wang/webkit-core/webkit-arch-and-module.html) 14 | 15 | ## Install 16 | 17 | ```shell 18 | $npm install --save gitbook-plugin-fancybox 19 | ``` 20 | 21 | ## Usage 22 | 23 | Add the plugin to your `book.json` like this: 24 | 25 | ```javascript 26 | { 27 | "plugins": ["fancybox"] 28 | } 29 | ``` 30 | 31 | ## Options 32 | 33 | ```javascript 34 | "pluginsConfig": { 35 | "fancybox": { 36 | //your fancybox config here 37 | } 38 | } 39 | ``` 40 | 41 | defaultConfig: 42 | 43 | ```javascript 44 | { 45 | helpers: { 46 | buttons: {} 47 | } 48 | } 49 | ``` 50 | 51 | ## License 52 | 53 | The MIT License (MIT) 54 | 55 | Copyright (c) 2015 Lingyu Wang 56 | 57 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 58 | 59 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 60 | 61 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 62 | -------------------------------------------------------------------------------- /assets/blank.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ly-tools/gitbook-plugin-fancybox/03b7425cade1398171a3efa99c7757fec92dd5f1/assets/blank.gif -------------------------------------------------------------------------------- /assets/fancybox_buttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ly-tools/gitbook-plugin-fancybox/03b7425cade1398171a3efa99c7757fec92dd5f1/assets/fancybox_buttons.png -------------------------------------------------------------------------------- /assets/fancybox_loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ly-tools/gitbook-plugin-fancybox/03b7425cade1398171a3efa99c7757fec92dd5f1/assets/fancybox_loading.gif -------------------------------------------------------------------------------- /assets/fancybox_loading@2x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ly-tools/gitbook-plugin-fancybox/03b7425cade1398171a3efa99c7757fec92dd5f1/assets/fancybox_loading@2x.gif -------------------------------------------------------------------------------- /assets/fancybox_overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ly-tools/gitbook-plugin-fancybox/03b7425cade1398171a3efa99c7757fec92dd5f1/assets/fancybox_overlay.png -------------------------------------------------------------------------------- /assets/fancybox_sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ly-tools/gitbook-plugin-fancybox/03b7425cade1398171a3efa99c7757fec92dd5f1/assets/fancybox_sprite.png -------------------------------------------------------------------------------- /assets/fancybox_sprite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ly-tools/gitbook-plugin-fancybox/03b7425cade1398171a3efa99c7757fec92dd5f1/assets/fancybox_sprite@2x.png -------------------------------------------------------------------------------- /assets/helpers/fancybox_buttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ly-tools/gitbook-plugin-fancybox/03b7425cade1398171a3efa99c7757fec92dd5f1/assets/helpers/fancybox_buttons.png -------------------------------------------------------------------------------- /assets/helpers/jquery.fancybox-buttons.css: -------------------------------------------------------------------------------- 1 | #fancybox-buttons { 2 | position: fixed; 3 | left: 0; 4 | width: 100%; 5 | z-index: 8050; 6 | } 7 | 8 | #fancybox-buttons.top { 9 | top: 10px; 10 | } 11 | 12 | #fancybox-buttons.bottom { 13 | bottom: 10px; 14 | } 15 | 16 | #fancybox-buttons ul { 17 | display: block; 18 | width: 166px; 19 | height: 30px; 20 | margin: 0 auto; 21 | padding: 0; 22 | list-style: none; 23 | border: 1px solid #111; 24 | border-radius: 3px; 25 | -webkit-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); 26 | -moz-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); 27 | box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); 28 | background: rgb(50,50,50); 29 | background: -moz-linear-gradient(top, rgb(68,68,68) 0%, rgb(52,52,52) 50%, rgb(41,41,41) 50%, rgb(51,51,51) 100%); 30 | background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgb(68,68,68)), color-stop(50%,rgb(52,52,52)), color-stop(50%,rgb(41,41,41)), color-stop(100%,rgb(51,51,51))); 31 | background: -webkit-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); 32 | background: -o-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); 33 | background: -ms-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); 34 | background: linear-gradient(to bottom, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); 35 | filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#444444', endColorstr='#222222',GradientType=0 ); 36 | } 37 | 38 | #fancybox-buttons ul li { 39 | float: left; 40 | margin: 0; 41 | padding: 0; 42 | } 43 | 44 | #fancybox-buttons a { 45 | display: block; 46 | width: 30px; 47 | height: 30px; 48 | text-indent: -9999px; 49 | background-color: transparent; 50 | background-image: url('fancybox_buttons.png'); 51 | background-repeat: no-repeat; 52 | outline: none; 53 | opacity: 0.8; 54 | } 55 | 56 | #fancybox-buttons a:hover { 57 | opacity: 1; 58 | } 59 | 60 | #fancybox-buttons a.btnPrev { 61 | background-position: 5px 0; 62 | } 63 | 64 | #fancybox-buttons a.btnNext { 65 | background-position: -33px 0; 66 | border-right: 1px solid #3e3e3e; 67 | } 68 | 69 | #fancybox-buttons a.btnPlay { 70 | background-position: 0 -30px; 71 | } 72 | 73 | #fancybox-buttons a.btnPlayOn { 74 | background-position: -30px -30px; 75 | } 76 | 77 | #fancybox-buttons a.btnToggle { 78 | background-position: 3px -60px; 79 | border-left: 1px solid #111; 80 | border-right: 1px solid #3e3e3e; 81 | width: 35px 82 | } 83 | 84 | #fancybox-buttons a.btnToggleOn { 85 | background-position: -27px -60px; 86 | } 87 | 88 | #fancybox-buttons a.btnClose { 89 | border-left: 1px solid #111; 90 | width: 35px; 91 | background-position: -56px 0px; 92 | } 93 | 94 | #fancybox-buttons a.btnDisabled { 95 | opacity : 0.4; 96 | cursor: default; 97 | } 98 | -------------------------------------------------------------------------------- /assets/helpers/jquery.fancybox-buttons.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Buttons helper for fancyBox 3 | * version: 1.0.5 (Mon, 15 Oct 2012) 4 | * @requires fancyBox v2.0 or later 5 | * 6 | * Usage: 7 | * $(".fancybox").fancybox({ 8 | * helpers : { 9 | * buttons: { 10 | * position : 'top' 11 | * } 12 | * } 13 | * }); 14 | * 15 | */ 16 | ;(function ($) { 17 | //Shortcut for fancyBox object 18 | var F = $.fancybox; 19 | 20 | //Add helper object 21 | F.helpers.buttons = { 22 | defaults : { 23 | skipSingle : false, // disables if gallery contains single image 24 | position : 'top', // 'top' or 'bottom' 25 | tpl : '
' 26 | }, 27 | 28 | list : null, 29 | buttons: null, 30 | 31 | beforeLoad: function (opts, obj) { 32 | //Remove self if gallery do not have at least two items 33 | 34 | if (opts.skipSingle && obj.group.length < 2) { 35 | obj.helpers.buttons = false; 36 | obj.closeBtn = true; 37 | 38 | return; 39 | } 40 | 41 | //Increase top margin to give space for buttons 42 | obj.margin[ opts.position === 'bottom' ? 2 : 0 ] += 30; 43 | }, 44 | 45 | onPlayStart: function () { 46 | if (this.buttons) { 47 | this.buttons.play.attr('title', 'Pause slideshow').addClass('btnPlayOn'); 48 | } 49 | }, 50 | 51 | onPlayEnd: function () { 52 | if (this.buttons) { 53 | this.buttons.play.attr('title', 'Start slideshow').removeClass('btnPlayOn'); 54 | } 55 | }, 56 | 57 | afterShow: function (opts, obj) { 58 | var buttons = this.buttons; 59 | 60 | if (!buttons) { 61 | this.list = $(opts.tpl).addClass(opts.position).appendTo('body'); 62 | 63 | buttons = { 64 | prev : this.list.find('.btnPrev').click( F.prev ), 65 | next : this.list.find('.btnNext').click( F.next ), 66 | play : this.list.find('.btnPlay').click( F.play ), 67 | toggle : this.list.find('.btnToggle').click( F.toggle ), 68 | close : this.list.find('.btnClose').click( F.close ) 69 | } 70 | } 71 | 72 | //Prev 73 | if (obj.index > 0 || obj.loop) { 74 | buttons.prev.removeClass('btnDisabled'); 75 | } else { 76 | buttons.prev.addClass('btnDisabled'); 77 | } 78 | 79 | //Next / Play 80 | if (obj.loop || obj.index < obj.group.length - 1) { 81 | buttons.next.removeClass('btnDisabled'); 82 | buttons.play.removeClass('btnDisabled'); 83 | 84 | } else { 85 | buttons.next.addClass('btnDisabled'); 86 | buttons.play.addClass('btnDisabled'); 87 | } 88 | 89 | this.buttons = buttons; 90 | 91 | this.onUpdate(opts, obj); 92 | }, 93 | 94 | onUpdate: function (opts, obj) { 95 | var toggle; 96 | 97 | if (!this.buttons) { 98 | return; 99 | } 100 | 101 | toggle = this.buttons.toggle.removeClass('btnDisabled btnToggleOn'); 102 | 103 | //Size toggle button 104 | if (obj.canShrink) { 105 | toggle.addClass('btnToggleOn'); 106 | 107 | } else if (!obj.canExpand) { 108 | toggle.addClass('btnDisabled'); 109 | } 110 | }, 111 | 112 | beforeClose: function () { 113 | if (this.list) { 114 | this.list.remove(); 115 | } 116 | 117 | this.list = null; 118 | this.buttons = null; 119 | } 120 | }; 121 | 122 | }(jQuery)); 123 | -------------------------------------------------------------------------------- /assets/helpers/jquery.fancybox-media.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Media helper for fancyBox 3 | * version: 1.0.6 (Fri, 14 Jun 2013) 4 | * @requires fancyBox v2.0 or later 5 | * 6 | * Usage: 7 | * $(".fancybox").fancybox({ 8 | * helpers : { 9 | * media: true 10 | * } 11 | * }); 12 | * 13 | * Set custom URL parameters: 14 | * $(".fancybox").fancybox({ 15 | * helpers : { 16 | * media: { 17 | * youtube : { 18 | * params : { 19 | * autoplay : 0 20 | * } 21 | * } 22 | * } 23 | * } 24 | * }); 25 | * 26 | * Or: 27 | * $(".fancybox").fancybox({, 28 | * helpers : { 29 | * media: true 30 | * }, 31 | * youtube : { 32 | * autoplay: 0 33 | * } 34 | * }); 35 | * 36 | * Supports: 37 | * 38 | * Youtube 39 | * http://www.youtube.com/watch?v=opj24KnzrWo 40 | * http://www.youtube.com/embed/opj24KnzrWo 41 | * http://youtu.be/opj24KnzrWo 42 | * http://www.youtube-nocookie.com/embed/opj24KnzrWo 43 | * Vimeo 44 | * http://vimeo.com/40648169 45 | * http://vimeo.com/channels/staffpicks/38843628 46 | * http://vimeo.com/groups/surrealism/videos/36516384 47 | * http://player.vimeo.com/video/45074303 48 | * Metacafe 49 | * http://www.metacafe.com/watch/7635964/dr_seuss_the_lorax_movie_trailer/ 50 | * http://www.metacafe.com/watch/7635964/ 51 | * Dailymotion 52 | * http://www.dailymotion.com/video/xoytqh_dr-seuss-the-lorax-premiere_people 53 | * Twitvid 54 | * http://twitvid.com/QY7MD 55 | * Twitpic 56 | * http://twitpic.com/7p93st 57 | * Instagram 58 | * http://instagr.am/p/IejkuUGxQn/ 59 | * http://instagram.com/p/IejkuUGxQn/ 60 | * Google maps 61 | * http://maps.google.com/maps?q=Eiffel+Tower,+Avenue+Gustave+Eiffel,+Paris,+France&t=h&z=17 62 | * http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16 63 | * http://maps.google.com/?ll=48.859463,2.292626&spn=0.000965,0.002642&t=m&z=19&layer=c&cbll=48.859524,2.292532&panoid=YJ0lq28OOy3VT2IqIuVY0g&cbp=12,151.58,,0,-15.56 64 | */ 65 | ;(function ($) { 66 | "use strict"; 67 | 68 | //Shortcut for fancyBox object 69 | var F = $.fancybox, 70 | format = function( url, rez, params ) { 71 | params = params || ''; 72 | 73 | if ( $.type( params ) === "object" ) { 74 | params = $.param(params, true); 75 | } 76 | 77 | $.each(rez, function(key, value) { 78 | url = url.replace( '$' + key, value || '' ); 79 | }); 80 | 81 | if (params.length) { 82 | url += ( url.indexOf('?') > 0 ? '&' : '?' ) + params; 83 | } 84 | 85 | return url; 86 | }; 87 | 88 | //Add helper object 89 | F.helpers.media = { 90 | defaults : { 91 | youtube : { 92 | matcher : /(youtube\.com|youtu\.be|youtube-nocookie\.com)\/(watch\?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*)).*/i, 93 | params : { 94 | autoplay : 1, 95 | autohide : 1, 96 | fs : 1, 97 | rel : 0, 98 | hd : 1, 99 | wmode : 'opaque', 100 | enablejsapi : 1, 101 | ps: 'docs', 102 | controls: 1 103 | }, 104 | type : 'iframe', 105 | url : '//www.youtube.com/embed/$3' 106 | }, 107 | vimeo : { 108 | matcher : /(?:vimeo(?:pro)?.com)\/(?:[^\d]+)?(\d+)(?:.*)/, 109 | params : { 110 | autoplay : 1, 111 | hd : 1, 112 | show_title : 1, 113 | show_byline : 1, 114 | show_portrait : 0, 115 | fullscreen : 1 116 | }, 117 | type : 'iframe', 118 | url : '//player.vimeo.com/video/$1' 119 | }, 120 | metacafe : { 121 | matcher : /metacafe.com\/(?:watch|fplayer)\/([\w\-]{1,10})/, 122 | params : { 123 | autoPlay : 'yes' 124 | }, 125 | type : 'swf', 126 | url : function( rez, params, obj ) { 127 | obj.swf.flashVars = 'playerVars=' + $.param( params, true ); 128 | 129 | return '//www.metacafe.com/fplayer/' + rez[1] + '/.swf'; 130 | } 131 | }, 132 | dailymotion : { 133 | matcher : /dailymotion.com\/video\/(.*)\/?(.*)/, 134 | params : { 135 | additionalInfos : 0, 136 | autoStart : 1 137 | }, 138 | type : 'swf', 139 | url : '//www.dailymotion.com/swf/video/$1' 140 | }, 141 | twitvid : { 142 | matcher : /twitvid\.com\/([a-zA-Z0-9_\-\?\=]+)/i, 143 | params : { 144 | autoplay : 0 145 | }, 146 | type : 'iframe', 147 | url : '//www.twitvid.com/embed.php?guid=$1' 148 | }, 149 | twitpic : { 150 | matcher : /twitpic\.com\/(?!(?:place|photos|events)\/)([a-zA-Z0-9\?\=\-]+)/i, 151 | type : 'image', 152 | url : '//twitpic.com/show/full/$1/' 153 | }, 154 | instagram : { 155 | matcher : /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i, 156 | type : 'image', 157 | url : '//$1/p/$2/media/?size=l' 158 | }, 159 | google_maps : { 160 | matcher : /maps\.google\.([a-z]{2,3}(\.[a-z]{2})?)\/(\?ll=|maps\?)(.*)/i, 161 | type : 'iframe', 162 | url : function( rez ) { 163 | return '//maps.google.' + rez[1] + '/' + rez[3] + '' + rez[4] + '&output=' + (rez[4].indexOf('layer=c') > 0 ? 'svembed' : 'embed'); 164 | } 165 | } 166 | }, 167 | 168 | beforeLoad : function(opts, obj) { 169 | var url = obj.href || '', 170 | type = false, 171 | what, 172 | item, 173 | rez, 174 | params; 175 | 176 | for (what in opts) { 177 | if (opts.hasOwnProperty(what)) { 178 | item = opts[ what ]; 179 | rez = url.match( item.matcher ); 180 | 181 | if (rez) { 182 | type = item.type; 183 | params = $.extend(true, {}, item.params, obj[ what ] || ($.isPlainObject(opts[ what ]) ? opts[ what ].params : null)); 184 | 185 | url = $.type( item.url ) === "function" ? item.url.call( this, rez, params, obj ) : format( item.url, rez, params ); 186 | 187 | break; 188 | } 189 | } 190 | } 191 | 192 | if (type) { 193 | obj.href = url; 194 | obj.type = type; 195 | 196 | obj.autoHeight = false; 197 | } 198 | } 199 | }; 200 | 201 | }(jQuery)); 202 | -------------------------------------------------------------------------------- /assets/helpers/jquery.fancybox-thumbs.css: -------------------------------------------------------------------------------- 1 | #fancybox-thumbs { 2 | position: fixed; 3 | left: 0; 4 | width: 100%; 5 | overflow: hidden; 6 | z-index: 8050; 7 | } 8 | 9 | #fancybox-thumbs.bottom { 10 | bottom: 2px; 11 | } 12 | 13 | #fancybox-thumbs.top { 14 | top: 2px; 15 | } 16 | 17 | #fancybox-thumbs ul { 18 | position: relative; 19 | list-style: none; 20 | margin: 0; 21 | padding: 0; 22 | } 23 | 24 | #fancybox-thumbs ul li { 25 | float: left; 26 | padding: 1px; 27 | opacity: 0.5; 28 | } 29 | 30 | #fancybox-thumbs ul li.active { 31 | opacity: 0.75; 32 | padding: 0; 33 | border: 1px solid #fff; 34 | } 35 | 36 | #fancybox-thumbs ul li:hover { 37 | opacity: 1; 38 | } 39 | 40 | #fancybox-thumbs ul li a { 41 | display: block; 42 | position: relative; 43 | overflow: hidden; 44 | border: 1px solid #222; 45 | background: #111; 46 | outline: none; 47 | } 48 | 49 | #fancybox-thumbs ul li img { 50 | display: block; 51 | position: relative; 52 | border: 0; 53 | padding: 0; 54 | max-width: none; 55 | } -------------------------------------------------------------------------------- /assets/helpers/jquery.fancybox-thumbs.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Thumbnail helper for fancyBox 3 | * version: 1.0.7 (Mon, 01 Oct 2012) 4 | * @requires fancyBox v2.0 or later 5 | * 6 | * Usage: 7 | * $(".fancybox").fancybox({ 8 | * helpers : { 9 | * thumbs: { 10 | * width : 50, 11 | * height : 50 12 | * } 13 | * } 14 | * }); 15 | * 16 | */ 17 | ;(function ($) { 18 | //Shortcut for fancyBox object 19 | var F = $.fancybox; 20 | 21 | //Add helper object 22 | F.helpers.thumbs = { 23 | defaults : { 24 | width : 50, // thumbnail width 25 | height : 50, // thumbnail height 26 | position : 'bottom', // 'top' or 'bottom' 27 | source : function ( item ) { // function to obtain the URL of the thumbnail image 28 | var href; 29 | 30 | if (item.element) { 31 | href = $(item.element).find('img').attr('src'); 32 | } 33 | 34 | if (!href && item.type === 'image' && item.href) { 35 | href = item.href; 36 | } 37 | 38 | return href; 39 | } 40 | }, 41 | 42 | wrap : null, 43 | list : null, 44 | width : 0, 45 | 46 | init: function (opts, obj) { 47 | var that = this, 48 | list, 49 | thumbWidth = opts.width, 50 | thumbHeight = opts.height, 51 | thumbSource = opts.source; 52 | 53 | //Build list structure 54 | list = ''; 55 | 56 | for (var n = 0; n < obj.group.length; n++) { 57 | list += '
  • '; 58 | } 59 | 60 | this.wrap = $('
    ').addClass(opts.position).appendTo('body'); 61 | this.list = $('').appendTo(this.wrap); 62 | 63 | //Load each thumbnail 64 | $.each(obj.group, function (i) { 65 | var el = obj.group[ i ], 66 | href = thumbSource( el ); 67 | 68 | if (!href) { 69 | return; 70 | } 71 | 72 | $("").on("load", function () { 73 | var width = this.width, 74 | height = this.height, 75 | widthRatio, heightRatio, parent; 76 | 77 | if (!that.list || !width || !height) { 78 | return; 79 | } 80 | 81 | //Calculate thumbnail width/height and center it 82 | widthRatio = width / thumbWidth; 83 | heightRatio = height / thumbHeight; 84 | 85 | parent = that.list.children().eq(i).find('a'); 86 | 87 | if (widthRatio >= 1 && heightRatio >= 1) { 88 | if (widthRatio > heightRatio) { 89 | width = Math.floor(width / heightRatio); 90 | height = thumbHeight; 91 | 92 | } else { 93 | width = thumbWidth; 94 | height = Math.floor(height / widthRatio); 95 | } 96 | } 97 | 98 | $(this).css({ 99 | width : width, 100 | height : height, 101 | top : Math.floor(thumbHeight / 2 - height / 2), 102 | left : Math.floor(thumbWidth / 2 - width / 2) 103 | }); 104 | 105 | parent.width(thumbWidth).height(thumbHeight); 106 | 107 | $(this).hide().appendTo(parent).fadeIn(300); 108 | 109 | }) 110 | .attr('src', href) 111 | .attr('title', el.title); 112 | }); 113 | 114 | //Set initial width 115 | this.width = this.list.children().eq(0).outerWidth(true); 116 | 117 | this.list.width(this.width * (obj.group.length + 1)).css('left', Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5))); 118 | }, 119 | 120 | beforeLoad: function (opts, obj) { 121 | //Remove self if gallery do not have at least two items 122 | if (obj.group.length < 2) { 123 | obj.helpers.thumbs = false; 124 | 125 | return; 126 | } 127 | 128 | //Increase bottom margin to give space for thumbs 129 | obj.margin[ opts.position === 'top' ? 0 : 2 ] += ((opts.height) + 15); 130 | }, 131 | 132 | afterShow: function (opts, obj) { 133 | //Check if exists and create or update list 134 | if (this.list) { 135 | this.onUpdate(opts, obj); 136 | 137 | } else { 138 | this.init(opts, obj); 139 | } 140 | 141 | //Set active element 142 | this.list.children().removeClass('active').eq(obj.index).addClass('active'); 143 | }, 144 | 145 | //Center list 146 | onUpdate: function (opts, obj) { 147 | if (this.list) { 148 | this.list.stop(true).animate({ 149 | 'left': Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5)) 150 | }, 150); 151 | } 152 | }, 153 | 154 | beforeClose: function () { 155 | if (this.wrap) { 156 | this.wrap.remove(); 157 | } 158 | 159 | this.wrap = null; 160 | this.list = null; 161 | this.width = 0; 162 | } 163 | } 164 | 165 | }(jQuery)); 166 | -------------------------------------------------------------------------------- /assets/jquery.fancybox-buttons.css: -------------------------------------------------------------------------------- 1 | #fancybox-buttons { 2 | position: fixed; 3 | left: 0; 4 | width: 100%; 5 | z-index: 8050; 6 | } 7 | 8 | #fancybox-buttons.top { 9 | top: 10px; 10 | } 11 | 12 | #fancybox-buttons.bottom { 13 | bottom: 10px; 14 | } 15 | 16 | #fancybox-buttons ul { 17 | display: block; 18 | width: 166px; 19 | height: 30px; 20 | margin: 0 auto; 21 | padding: 0; 22 | list-style: none; 23 | border: 1px solid #111; 24 | border-radius: 3px; 25 | -webkit-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); 26 | -moz-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); 27 | box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); 28 | background: rgb(50,50,50); 29 | background: -moz-linear-gradient(top, rgb(68,68,68) 0%, rgb(52,52,52) 50%, rgb(41,41,41) 50%, rgb(51,51,51) 100%); 30 | background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgb(68,68,68)), color-stop(50%,rgb(52,52,52)), color-stop(50%,rgb(41,41,41)), color-stop(100%,rgb(51,51,51))); 31 | background: -webkit-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); 32 | background: -o-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); 33 | background: -ms-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); 34 | background: linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); 35 | filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#444444', endColorstr='#222222',GradientType=0 ); 36 | } 37 | 38 | #fancybox-buttons ul li { 39 | float: left; 40 | margin: 0; 41 | padding: 0; 42 | } 43 | 44 | #fancybox-buttons a { 45 | display: block; 46 | width: 30px; 47 | height: 30px; 48 | text-indent: -9999px; 49 | background-color: transparent; 50 | background-image: url('fancybox_buttons.png'); 51 | background-repeat: no-repeat; 52 | outline: none; 53 | opacity: 0.8; 54 | } 55 | 56 | #fancybox-buttons a:hover { 57 | opacity: 1; 58 | } 59 | 60 | #fancybox-buttons a.btnPrev { 61 | background-position: 5px 0; 62 | } 63 | 64 | #fancybox-buttons a.btnNext { 65 | background-position: -33px 0; 66 | border-right: 1px solid #3e3e3e; 67 | } 68 | 69 | #fancybox-buttons a.btnPlay { 70 | background-position: 0 -30px; 71 | } 72 | 73 | #fancybox-buttons a.btnPlayOn { 74 | background-position: -30px -30px; 75 | } 76 | 77 | #fancybox-buttons a.btnToggle { 78 | background-position: 3px -60px; 79 | border-left: 1px solid #111; 80 | border-right: 1px solid #3e3e3e; 81 | width: 35px 82 | } 83 | 84 | #fancybox-buttons a.btnToggleOn { 85 | background-position: -27px -60px; 86 | } 87 | 88 | #fancybox-buttons a.btnClose { 89 | border-left: 1px solid #111; 90 | width: 35px; 91 | background-position: -56px 0px; 92 | } 93 | 94 | #fancybox-buttons a.btnDisabled { 95 | opacity : 0.4; 96 | cursor: default; 97 | } -------------------------------------------------------------------------------- /assets/jquery.fancybox-buttons.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Buttons helper for fancyBox 3 | * version: 1.0.5 (Mon, 15 Oct 2012) 4 | * @requires fancyBox v2.0 or later 5 | * 6 | * Usage: 7 | * $(".fancybox").fancybox({ 8 | * helpers : { 9 | * buttons: { 10 | * position : 'top' 11 | * } 12 | * } 13 | * }); 14 | * 15 | */ 16 | (function ($) { 17 | //Shortcut for fancyBox object 18 | var F = $.fancybox; 19 | 20 | //Add helper object 21 | F.helpers.buttons = { 22 | defaults : { 23 | skipSingle : false, // disables if gallery contains single image 24 | position : 'top', // 'top' or 'bottom' 25 | tpl : '
    ' 26 | }, 27 | 28 | list : null, 29 | buttons: null, 30 | 31 | beforeLoad: function (opts, obj) { 32 | //Remove self if gallery do not have at least two items 33 | 34 | if (opts.skipSingle && obj.group.length < 2) { 35 | obj.helpers.buttons = false; 36 | obj.closeBtn = true; 37 | 38 | return; 39 | } 40 | 41 | //Increase top margin to give space for buttons 42 | obj.margin[ opts.position === 'bottom' ? 2 : 0 ] += 30; 43 | }, 44 | 45 | onPlayStart: function () { 46 | if (this.buttons) { 47 | this.buttons.play.attr('title', 'Pause slideshow').addClass('btnPlayOn'); 48 | } 49 | }, 50 | 51 | onPlayEnd: function () { 52 | if (this.buttons) { 53 | this.buttons.play.attr('title', 'Start slideshow').removeClass('btnPlayOn'); 54 | } 55 | }, 56 | 57 | afterShow: function (opts, obj) { 58 | var buttons = this.buttons; 59 | 60 | if (!buttons) { 61 | this.list = $(opts.tpl).addClass(opts.position).appendTo('body'); 62 | 63 | buttons = { 64 | prev : this.list.find('.btnPrev').click( F.prev ), 65 | next : this.list.find('.btnNext').click( F.next ), 66 | play : this.list.find('.btnPlay').click( F.play ), 67 | toggle : this.list.find('.btnToggle').click( F.toggle ), 68 | close : this.list.find('.btnClose').click( F.close ) 69 | } 70 | } 71 | 72 | //Prev 73 | if (obj.index > 0 || obj.loop) { 74 | buttons.prev.removeClass('btnDisabled'); 75 | } else { 76 | buttons.prev.addClass('btnDisabled'); 77 | } 78 | 79 | //Next / Play 80 | if (obj.loop || obj.index < obj.group.length - 1) { 81 | buttons.next.removeClass('btnDisabled'); 82 | buttons.play.removeClass('btnDisabled'); 83 | 84 | } else { 85 | buttons.next.addClass('btnDisabled'); 86 | buttons.play.addClass('btnDisabled'); 87 | } 88 | 89 | this.buttons = buttons; 90 | 91 | this.onUpdate(opts, obj); 92 | }, 93 | 94 | onUpdate: function (opts, obj) { 95 | var toggle; 96 | 97 | if (!this.buttons) { 98 | return; 99 | } 100 | 101 | toggle = this.buttons.toggle.removeClass('btnDisabled btnToggleOn'); 102 | 103 | //Size toggle button 104 | if (obj.canShrink) { 105 | toggle.addClass('btnToggleOn'); 106 | 107 | } else if (!obj.canExpand) { 108 | toggle.addClass('btnDisabled'); 109 | } 110 | }, 111 | 112 | beforeClose: function () { 113 | if (this.list) { 114 | this.list.remove(); 115 | } 116 | 117 | this.list = null; 118 | this.buttons = null; 119 | } 120 | }; 121 | 122 | }(jQuery)); 123 | -------------------------------------------------------------------------------- /assets/jquery.fancybox.css: -------------------------------------------------------------------------------- 1 | /*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */ 2 | .fancybox-wrap, 3 | .fancybox-skin, 4 | .fancybox-outer, 5 | .fancybox-inner, 6 | .fancybox-image, 7 | .fancybox-wrap iframe, 8 | .fancybox-wrap object, 9 | .fancybox-nav, 10 | .fancybox-nav span, 11 | .fancybox-tmp 12 | { 13 | padding: 0; 14 | margin: 0; 15 | border: 0; 16 | outline: none; 17 | vertical-align: top; 18 | } 19 | 20 | .fancybox-wrap { 21 | position: absolute; 22 | top: 0; 23 | left: 0; 24 | -webkit-transform: translate3d(0, 0, 0); 25 | transform: translate3d(0, 0, 0); 26 | z-index: 8020; 27 | } 28 | 29 | .fancybox-skin { 30 | position: relative; 31 | background: #f9f9f9; 32 | color: #444; 33 | text-shadow: none; 34 | -webkit-border-radius: 4px; 35 | -moz-border-radius: 4px; 36 | border-radius: 4px; 37 | } 38 | 39 | .fancybox-opened { 40 | z-index: 8030; 41 | } 42 | 43 | .fancybox-opened .fancybox-skin { 44 | -webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); 45 | -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); 46 | box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); 47 | } 48 | 49 | .fancybox-outer, .fancybox-inner { 50 | position: relative; 51 | } 52 | 53 | .fancybox-inner { 54 | overflow: hidden; 55 | } 56 | 57 | .fancybox-type-iframe .fancybox-inner { 58 | -webkit-overflow-scrolling: touch; 59 | } 60 | 61 | .fancybox-error { 62 | color: #444; 63 | font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; 64 | margin: 0; 65 | padding: 15px; 66 | white-space: nowrap; 67 | } 68 | 69 | .fancybox-image, .fancybox-iframe { 70 | display: block; 71 | width: 100%; 72 | height: 100%; 73 | } 74 | 75 | .fancybox-image { 76 | max-width: 100%; 77 | max-height: 100%; 78 | } 79 | 80 | #fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span { 81 | background-image: url(fancybox_sprite.png); 82 | } 83 | 84 | #fancybox-loading { 85 | position: fixed; 86 | top: 50%; 87 | left: 50%; 88 | margin-top: -22px; 89 | margin-left: -22px; 90 | background-position: 0 -108px; 91 | opacity: 0.8; 92 | cursor: pointer; 93 | z-index: 8060; 94 | } 95 | 96 | #fancybox-loading div { 97 | width: 44px; 98 | height: 44px; 99 | background: url(fancybox_loading.gif) center center no-repeat; 100 | } 101 | 102 | .fancybox-close { 103 | position: absolute; 104 | top: -18px; 105 | right: -18px; 106 | width: 36px; 107 | height: 36px; 108 | cursor: pointer; 109 | z-index: 8040; 110 | } 111 | 112 | .fancybox-nav { 113 | position: absolute; 114 | top: 0; 115 | width: 40%; 116 | height: 100%; 117 | cursor: pointer; 118 | text-decoration: none; 119 | background: transparent url(blank.gif); /* helps IE */ 120 | -webkit-tap-highlight-color: rgba(0,0,0,0); 121 | z-index: 8040; 122 | } 123 | 124 | .fancybox-prev { 125 | left: 0; 126 | } 127 | 128 | .fancybox-next { 129 | right: 0; 130 | } 131 | 132 | .fancybox-nav span { 133 | position: absolute; 134 | top: 50%; 135 | width: 36px; 136 | height: 34px; 137 | margin-top: -18px; 138 | cursor: pointer; 139 | z-index: 8040; 140 | visibility: hidden; 141 | } 142 | 143 | .fancybox-prev span { 144 | left: 10px; 145 | background-position: 0 -36px; 146 | } 147 | 148 | .fancybox-next span { 149 | right: 10px; 150 | background-position: 0 -72px; 151 | } 152 | 153 | .fancybox-nav:hover span { 154 | visibility: visible; 155 | } 156 | 157 | .fancybox-tmp { 158 | position: absolute; 159 | top: -99999px; 160 | left: -99999px; 161 | max-width: 99999px; 162 | max-height: 99999px; 163 | overflow: visible !important; 164 | } 165 | 166 | /* Overlay helper */ 167 | 168 | .fancybox-lock { 169 | overflow: visible !important; 170 | width: auto; 171 | } 172 | 173 | .fancybox-lock body { 174 | overflow: hidden !important; 175 | } 176 | 177 | .fancybox-lock-test { 178 | overflow-y: hidden !important; 179 | } 180 | 181 | .fancybox-overlay { 182 | position: absolute; 183 | top: 0; 184 | left: 0; 185 | overflow: hidden; 186 | display: none; 187 | z-index: 8010; 188 | background: url(fancybox_overlay.png); 189 | } 190 | 191 | .fancybox-overlay-fixed { 192 | position: fixed; 193 | bottom: 0; 194 | right: 0; 195 | } 196 | 197 | .fancybox-lock .fancybox-overlay { 198 | overflow: auto; 199 | overflow-y: scroll; 200 | } 201 | 202 | /* Title helper */ 203 | 204 | .fancybox-title { 205 | visibility: hidden; 206 | font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; 207 | position: relative; 208 | text-shadow: none; 209 | z-index: 8050; 210 | } 211 | 212 | .fancybox-opened .fancybox-title { 213 | visibility: visible; 214 | } 215 | 216 | .fancybox-title-float-wrap { 217 | position: absolute; 218 | bottom: 0; 219 | right: 50%; 220 | margin-bottom: -35px; 221 | z-index: 8050; 222 | text-align: center; 223 | } 224 | 225 | .fancybox-title-float-wrap .child { 226 | display: inline-block; 227 | margin-right: -100%; 228 | padding: 2px 20px; 229 | background: transparent; /* Fallback for web browsers that doesn't support RGBa */ 230 | background: rgba(0, 0, 0, 0.8); 231 | -webkit-border-radius: 15px; 232 | -moz-border-radius: 15px; 233 | border-radius: 15px; 234 | text-shadow: 0 1px 2px #222; 235 | color: #FFF; 236 | font-weight: bold; 237 | line-height: 24px; 238 | white-space: nowrap; 239 | } 240 | 241 | .fancybox-title-outside-wrap { 242 | position: relative; 243 | margin-top: 10px; 244 | color: #fff; 245 | } 246 | 247 | .fancybox-title-inside-wrap { 248 | padding-top: 10px; 249 | } 250 | 251 | .fancybox-title-over-wrap { 252 | position: absolute; 253 | bottom: 0; 254 | left: 0; 255 | color: #fff; 256 | padding: 10px; 257 | background: #000; 258 | background: rgba(0, 0, 0, .8); 259 | } 260 | 261 | /*Retina graphics!*/ 262 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 263 | only screen and (min--moz-device-pixel-ratio: 1.5), 264 | only screen and (min-device-pixel-ratio: 1.5){ 265 | 266 | #fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span { 267 | background-image: url(fancybox_sprite@2x.png); 268 | background-size: 44px 152px; /*The size of the normal image, half the size of the hi-res image*/ 269 | } 270 | 271 | #fancybox-loading div { 272 | background-image: url(fancybox_loading@2x.gif); 273 | background-size: 24px 24px; /*The size of the normal image, half the size of the hi-res image*/ 274 | } 275 | } -------------------------------------------------------------------------------- /assets/jquery.fancybox.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * fancyBox - jQuery Plugin 3 | * version: 2.1.7 (Tue, 28 Feb 2017) 4 | * requires jQuery v1.6 or later 5 | * 6 | * Examples at http://fancyapps.com/fancybox/ 7 | * License: www.fancyapps.com/fancybox/#license 8 | * 9 | * Copyright 2017 fancyapps.com 10 | * 11 | */ 12 | 13 | ;(function (window, document, $, undefined) { 14 | "use strict"; 15 | 16 | var H = $("html"), 17 | W = $(window), 18 | D = $(document), 19 | F = $.fancybox = function () { 20 | F.open.apply( this, arguments ); 21 | }, 22 | IE = navigator.userAgent.match(/msie/i), 23 | didUpdate = null, 24 | isTouch = document.createTouch !== undefined, 25 | 26 | isQuery = function(obj) { 27 | return obj && obj.hasOwnProperty && obj instanceof $; 28 | }, 29 | isString = function(str) { 30 | return str && $.type(str) === "string"; 31 | }, 32 | isPercentage = function(str) { 33 | return isString(str) && str.indexOf('%') > 0; 34 | }, 35 | isScrollable = function(el) { 36 | return (el && !(el.style.overflow && el.style.overflow === 'hidden') && ((el.clientWidth && el.scrollWidth > el.clientWidth) || (el.clientHeight && el.scrollHeight > el.clientHeight))); 37 | }, 38 | getScalar = function(orig, dim) { 39 | var value = parseInt(orig, 10) || 0; 40 | 41 | if (dim && isPercentage(orig)) { 42 | value = F.getViewport()[ dim ] / 100 * value; 43 | } 44 | 45 | return Math.ceil(value); 46 | }, 47 | getValue = function(value, dim) { 48 | return getScalar(value, dim) + 'px'; 49 | }; 50 | 51 | $.extend(F, { 52 | // The current version of fancyBox 53 | version: '2.1.7', 54 | 55 | defaults: { 56 | padding : 15, 57 | margin : 20, 58 | 59 | width : 800, 60 | height : 600, 61 | minWidth : 100, 62 | minHeight : 100, 63 | maxWidth : 9999, 64 | maxHeight : 9999, 65 | pixelRatio: 1, // Set to 2 for retina display support 66 | 67 | autoSize : true, 68 | autoHeight : false, 69 | autoWidth : false, 70 | 71 | autoResize : true, 72 | autoCenter : !isTouch, 73 | fitToView : true, 74 | aspectRatio : false, 75 | topRatio : 0.5, 76 | leftRatio : 0.5, 77 | 78 | scrolling : 'auto', // 'auto', 'yes' or 'no' 79 | wrapCSS : '', 80 | 81 | arrows : true, 82 | closeBtn : true, 83 | closeClick : false, 84 | nextClick : false, 85 | mouseWheel : true, 86 | autoPlay : false, 87 | playSpeed : 3000, 88 | preload : 3, 89 | modal : false, 90 | loop : true, 91 | 92 | ajax : { 93 | dataType : 'html', 94 | headers : { 'X-fancyBox': true } 95 | }, 96 | iframe : { 97 | scrolling : 'auto', 98 | preload : true 99 | }, 100 | swf : { 101 | wmode: 'transparent', 102 | allowfullscreen : 'true', 103 | allowscriptaccess : 'always' 104 | }, 105 | 106 | keys : { 107 | next : { 108 | 13 : 'left', // enter 109 | 34 : 'up', // page down 110 | 39 : 'left', // right arrow 111 | 40 : 'up' // down arrow 112 | }, 113 | prev : { 114 | 8 : 'right', // backspace 115 | 33 : 'down', // page up 116 | 37 : 'right', // left arrow 117 | 38 : 'down' // up arrow 118 | }, 119 | close : [27], // escape key 120 | play : [32], // space - start/stop slideshow 121 | toggle : [70] // letter "f" - toggle fullscreen 122 | }, 123 | 124 | direction : { 125 | next : 'left', 126 | prev : 'right' 127 | }, 128 | 129 | scrollOutside : true, 130 | 131 | // Override some properties 132 | index : 0, 133 | type : null, 134 | href : null, 135 | content : null, 136 | title : null, 137 | 138 | // HTML templates 139 | tpl: { 140 | wrap : '
    ', 141 | image : '', 142 | iframe : '', 143 | error : '

    The requested content cannot be loaded.
    Please try again later.

    ', 144 | closeBtn : '', 145 | next : '', 146 | prev : '', 147 | loading : '
    ' 148 | }, 149 | 150 | // Properties for each animation type 151 | // Opening fancyBox 152 | openEffect : 'fade', // 'elastic', 'fade' or 'none' 153 | openSpeed : 250, 154 | openEasing : 'swing', 155 | openOpacity : true, 156 | openMethod : 'zoomIn', 157 | 158 | // Closing fancyBox 159 | closeEffect : 'fade', // 'elastic', 'fade' or 'none' 160 | closeSpeed : 250, 161 | closeEasing : 'swing', 162 | closeOpacity : true, 163 | closeMethod : 'zoomOut', 164 | 165 | // Changing next gallery item 166 | nextEffect : 'elastic', // 'elastic', 'fade' or 'none' 167 | nextSpeed : 250, 168 | nextEasing : 'swing', 169 | nextMethod : 'changeIn', 170 | 171 | // Changing previous gallery item 172 | prevEffect : 'elastic', // 'elastic', 'fade' or 'none' 173 | prevSpeed : 250, 174 | prevEasing : 'swing', 175 | prevMethod : 'changeOut', 176 | 177 | // Enable default helpers 178 | helpers : { 179 | overlay : true, 180 | title : true 181 | }, 182 | 183 | // Callbacks 184 | onCancel : $.noop, // If canceling 185 | beforeLoad : $.noop, // Before loading 186 | afterLoad : $.noop, // After loading 187 | beforeShow : $.noop, // Before changing in current item 188 | afterShow : $.noop, // After opening 189 | beforeChange : $.noop, // Before changing gallery item 190 | beforeClose : $.noop, // Before closing 191 | afterClose : $.noop // After closing 192 | }, 193 | 194 | //Current state 195 | group : {}, // Selected group 196 | opts : {}, // Group options 197 | previous : null, // Previous element 198 | coming : null, // Element being loaded 199 | current : null, // Currently loaded element 200 | isActive : false, // Is activated 201 | isOpen : false, // Is currently open 202 | isOpened : false, // Have been fully opened at least once 203 | 204 | wrap : null, 205 | skin : null, 206 | outer : null, 207 | inner : null, 208 | 209 | player : { 210 | timer : null, 211 | isActive : false 212 | }, 213 | 214 | // Loaders 215 | ajaxLoad : null, 216 | imgPreload : null, 217 | 218 | // Some collections 219 | transitions : {}, 220 | helpers : {}, 221 | 222 | /* 223 | * Static methods 224 | */ 225 | 226 | open: function (group, opts) { 227 | if (!group) { 228 | return; 229 | } 230 | 231 | if (!$.isPlainObject(opts)) { 232 | opts = {}; 233 | } 234 | 235 | // Close if already active 236 | if (false === F.close(true)) { 237 | return; 238 | } 239 | 240 | // Normalize group 241 | if (!$.isArray(group)) { 242 | group = isQuery(group) ? $(group).get() : [group]; 243 | } 244 | 245 | // Recheck if the type of each element is `object` and set content type (image, ajax, etc) 246 | $.each(group, function(i, element) { 247 | var obj = {}, 248 | href, 249 | title, 250 | content, 251 | type, 252 | rez, 253 | hrefParts, 254 | selector; 255 | 256 | if ($.type(element) === "object") { 257 | // Check if is DOM element 258 | if (element.nodeType) { 259 | element = $(element); 260 | } 261 | 262 | if (isQuery(element)) { 263 | obj = { 264 | href : element.data('fancybox-href') || element.attr('href'), 265 | title : $('
    ').text( element.data('fancybox-title') || element.attr('title') || '' ).html(), 266 | isDom : true, 267 | element : element 268 | }; 269 | 270 | if ($.metadata) { 271 | $.extend(true, obj, element.metadata()); 272 | } 273 | 274 | } else { 275 | obj = element; 276 | } 277 | } 278 | 279 | href = opts.href || obj.href || (isString(element) ? element : null); 280 | title = opts.title !== undefined ? opts.title : obj.title || ''; 281 | 282 | content = opts.content || obj.content; 283 | type = content ? 'html' : (opts.type || obj.type); 284 | 285 | if (!type && obj.isDom) { 286 | type = element.data('fancybox-type'); 287 | 288 | if (!type) { 289 | rez = element.prop('class').match(/fancybox\.(\w+)/); 290 | type = rez ? rez[1] : null; 291 | } 292 | } 293 | 294 | if (isString(href)) { 295 | // Try to guess the content type 296 | if (!type) { 297 | if (F.isImage(href)) { 298 | type = 'image'; 299 | 300 | } else if (F.isSWF(href)) { 301 | type = 'swf'; 302 | 303 | } else if (href.charAt(0) === '#') { 304 | type = 'inline'; 305 | 306 | } else if (isString(element)) { 307 | type = 'html'; 308 | content = element; 309 | } 310 | } 311 | 312 | // Split url into two pieces with source url and content selector, e.g, 313 | // "/mypage.html #my_id" will load "/mypage.html" and display element having id "my_id" 314 | if (type === 'ajax') { 315 | hrefParts = href.split(/\s+/, 2); 316 | href = hrefParts.shift(); 317 | selector = hrefParts.shift(); 318 | } 319 | } 320 | 321 | if (!content) { 322 | if (type === 'inline') { 323 | if (href) { 324 | content = $( isString(href) ? href.replace(/.*(?=#[^\s]+$)/, '') : href ); //strip for ie7 325 | 326 | } else if (obj.isDom) { 327 | content = element; 328 | } 329 | 330 | } else if (type === 'html') { 331 | content = href; 332 | 333 | } else if (!type && !href && obj.isDom) { 334 | type = 'inline'; 335 | content = element; 336 | } 337 | } 338 | 339 | $.extend(obj, { 340 | href : href, 341 | type : type, 342 | content : content, 343 | title : title, 344 | selector : selector 345 | }); 346 | 347 | group[ i ] = obj; 348 | }); 349 | 350 | // Extend the defaults 351 | F.opts = $.extend(true, {}, F.defaults, opts); 352 | 353 | // All options are merged recursive except keys 354 | if (opts.keys !== undefined) { 355 | F.opts.keys = opts.keys ? $.extend({}, F.defaults.keys, opts.keys) : false; 356 | } 357 | 358 | F.group = group; 359 | 360 | return F._start(F.opts.index); 361 | }, 362 | 363 | // Cancel image loading or abort ajax request 364 | cancel: function () { 365 | var coming = F.coming; 366 | 367 | if (coming && false === F.trigger('onCancel')) { 368 | return; 369 | } 370 | 371 | F.hideLoading(); 372 | 373 | if (!coming) { 374 | return; 375 | } 376 | 377 | if (F.ajaxLoad) { 378 | F.ajaxLoad.abort(); 379 | } 380 | 381 | F.ajaxLoad = null; 382 | 383 | if (F.imgPreload) { 384 | F.imgPreload.onload = F.imgPreload.onerror = null; 385 | } 386 | 387 | if (coming.wrap) { 388 | coming.wrap.stop(true, true).trigger('onReset').remove(); 389 | } 390 | 391 | F.coming = null; 392 | 393 | // If the first item has been canceled, then clear everything 394 | if (!F.current) { 395 | F._afterZoomOut( coming ); 396 | } 397 | }, 398 | 399 | // Start closing animation if is open; remove immediately if opening/closing 400 | close: function (event) { 401 | F.cancel(); 402 | 403 | if (false === F.trigger('beforeClose')) { 404 | return; 405 | } 406 | 407 | F.unbindEvents(); 408 | 409 | if (!F.isActive) { 410 | return; 411 | } 412 | 413 | if (!F.isOpen || event === true) { 414 | $('.fancybox-wrap').stop(true).trigger('onReset').remove(); 415 | 416 | F._afterZoomOut(); 417 | 418 | } else { 419 | F.isOpen = F.isOpened = false; 420 | F.isClosing = true; 421 | 422 | $('.fancybox-item, .fancybox-nav').remove(); 423 | 424 | F.wrap.stop(true, true).removeClass('fancybox-opened'); 425 | 426 | F.transitions[ F.current.closeMethod ](); 427 | } 428 | }, 429 | 430 | // Manage slideshow: 431 | // $.fancybox.play(); - toggle slideshow 432 | // $.fancybox.play( true ); - start 433 | // $.fancybox.play( false ); - stop 434 | play: function ( action ) { 435 | var clear = function () { 436 | clearTimeout(F.player.timer); 437 | }, 438 | set = function () { 439 | clear(); 440 | 441 | if (F.current && F.player.isActive) { 442 | F.player.timer = setTimeout(F.next, F.current.playSpeed); 443 | } 444 | }, 445 | stop = function () { 446 | clear(); 447 | 448 | D.unbind('.player'); 449 | 450 | F.player.isActive = false; 451 | 452 | F.trigger('onPlayEnd'); 453 | }, 454 | start = function () { 455 | if (F.current && (F.current.loop || F.current.index < F.group.length - 1)) { 456 | F.player.isActive = true; 457 | 458 | D.bind({ 459 | 'onCancel.player beforeClose.player' : stop, 460 | 'onUpdate.player' : set, 461 | 'beforeLoad.player' : clear 462 | }); 463 | 464 | set(); 465 | 466 | F.trigger('onPlayStart'); 467 | } 468 | }; 469 | 470 | if (action === true || (!F.player.isActive && action !== false)) { 471 | start(); 472 | } else { 473 | stop(); 474 | } 475 | }, 476 | 477 | // Navigate to next gallery item 478 | next: function ( direction ) { 479 | var current = F.current; 480 | 481 | if (current) { 482 | if (!isString(direction)) { 483 | direction = current.direction.next; 484 | } 485 | 486 | F.jumpto(current.index + 1, direction, 'next'); 487 | } 488 | }, 489 | 490 | // Navigate to previous gallery item 491 | prev: function ( direction ) { 492 | var current = F.current; 493 | 494 | if (current) { 495 | if (!isString(direction)) { 496 | direction = current.direction.prev; 497 | } 498 | 499 | F.jumpto(current.index - 1, direction, 'prev'); 500 | } 501 | }, 502 | 503 | // Navigate to gallery item by index 504 | jumpto: function ( index, direction, router ) { 505 | var current = F.current; 506 | 507 | if (!current) { 508 | return; 509 | } 510 | 511 | index = getScalar(index); 512 | 513 | F.direction = direction || current.direction[ (index >= current.index ? 'next' : 'prev') ]; 514 | F.router = router || 'jumpto'; 515 | 516 | if (current.loop) { 517 | if (index < 0) { 518 | index = current.group.length + (index % current.group.length); 519 | } 520 | 521 | index = index % current.group.length; 522 | } 523 | 524 | if (current.group[ index ] !== undefined) { 525 | F.cancel(); 526 | 527 | F._start(index); 528 | } 529 | }, 530 | 531 | // Center inside viewport and toggle position type to fixed or absolute if needed 532 | reposition: function (e, onlyAbsolute) { 533 | var current = F.current, 534 | wrap = current ? current.wrap : null, 535 | pos; 536 | 537 | if (wrap) { 538 | pos = F._getPosition(onlyAbsolute); 539 | 540 | if (e && e.type === 'scroll') { 541 | delete pos.position; 542 | 543 | wrap.stop(true, true).animate(pos, 200); 544 | 545 | } else { 546 | wrap.css(pos); 547 | 548 | current.pos = $.extend({}, current.dim, pos); 549 | } 550 | } 551 | }, 552 | 553 | update: function (e) { 554 | var type = (e && e.originalEvent && e.originalEvent.type), 555 | anyway = !type || type === 'orientationchange'; 556 | 557 | if (anyway) { 558 | clearTimeout(didUpdate); 559 | 560 | didUpdate = null; 561 | } 562 | 563 | if (!F.isOpen || didUpdate) { 564 | return; 565 | } 566 | 567 | didUpdate = setTimeout(function() { 568 | var current = F.current; 569 | 570 | if (!current || F.isClosing) { 571 | return; 572 | } 573 | 574 | F.wrap.removeClass('fancybox-tmp'); 575 | 576 | if (anyway || type === 'load' || (type === 'resize' && current.autoResize)) { 577 | F._setDimension(); 578 | } 579 | 580 | if (!(type === 'scroll' && current.canShrink)) { 581 | F.reposition(e); 582 | } 583 | 584 | F.trigger('onUpdate'); 585 | 586 | didUpdate = null; 587 | 588 | }, (anyway && !isTouch ? 0 : 300)); 589 | }, 590 | 591 | // Shrink content to fit inside viewport or restore if resized 592 | toggle: function ( action ) { 593 | if (F.isOpen) { 594 | F.current.fitToView = $.type(action) === "boolean" ? action : !F.current.fitToView; 595 | 596 | // Help browser to restore document dimensions 597 | if (isTouch) { 598 | F.wrap.removeAttr('style').addClass('fancybox-tmp'); 599 | 600 | F.trigger('onUpdate'); 601 | } 602 | 603 | F.update(); 604 | } 605 | }, 606 | 607 | hideLoading: function () { 608 | D.unbind('.loading'); 609 | 610 | $('#fancybox-loading').remove(); 611 | }, 612 | 613 | showLoading: function () { 614 | var el, viewport; 615 | 616 | F.hideLoading(); 617 | 618 | el = $(F.opts.tpl.loading).click(F.cancel).appendTo('body'); 619 | 620 | // If user will press the escape-button, the request will be canceled 621 | D.bind('keydown.loading', function(e) { 622 | if ((e.which || e.keyCode) === 27) { 623 | e.preventDefault(); 624 | 625 | F.cancel(); 626 | } 627 | }); 628 | 629 | if (!F.defaults.fixed) { 630 | viewport = F.getViewport(); 631 | 632 | el.css({ 633 | position : 'absolute', 634 | top : (viewport.h * 0.5) + viewport.y, 635 | left : (viewport.w * 0.5) + viewport.x 636 | }); 637 | } 638 | 639 | F.trigger('onLoading'); 640 | }, 641 | 642 | getViewport: function () { 643 | var locked = (F.current && F.current.locked) || false, 644 | rez = { 645 | x: W.scrollLeft(), 646 | y: W.scrollTop() 647 | }; 648 | 649 | if (locked && locked.length) { 650 | rez.w = locked[0].clientWidth; 651 | rez.h = locked[0].clientHeight; 652 | 653 | } else { 654 | // See http://bugs.jquery.com/ticket/6724 655 | rez.w = isTouch && window.innerWidth ? window.innerWidth : W.width(); 656 | rez.h = isTouch && window.innerHeight ? window.innerHeight : W.height(); 657 | } 658 | 659 | return rez; 660 | }, 661 | 662 | // Unbind the keyboard / clicking actions 663 | unbindEvents: function () { 664 | if (F.wrap && isQuery(F.wrap)) { 665 | F.wrap.unbind('.fb'); 666 | } 667 | 668 | D.unbind('.fb'); 669 | W.unbind('.fb'); 670 | }, 671 | 672 | bindEvents: function () { 673 | var current = F.current, 674 | keys; 675 | 676 | if (!current) { 677 | return; 678 | } 679 | 680 | // Changing document height on iOS devices triggers a 'resize' event, 681 | // that can change document height... repeating infinitely 682 | W.bind('orientationchange.fb' + (isTouch ? '' : ' resize.fb') + (current.autoCenter && !current.locked ? ' scroll.fb' : ''), F.update); 683 | 684 | keys = current.keys; 685 | 686 | if (keys) { 687 | D.bind('keydown.fb', function (e) { 688 | var code = e.which || e.keyCode, 689 | target = e.target || e.srcElement; 690 | 691 | // Skip esc key if loading, because showLoading will cancel preloading 692 | if (code === 27 && F.coming) { 693 | return false; 694 | } 695 | 696 | // Ignore key combinations and key events within form elements 697 | if (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && !(target && (target.type || $(target).is('[contenteditable]')))) { 698 | $.each(keys, function(i, val) { 699 | if (current.group.length > 1 && val[ code ] !== undefined) { 700 | F[ i ]( val[ code ] ); 701 | 702 | e.preventDefault(); 703 | return false; 704 | } 705 | 706 | if ($.inArray(code, val) > -1) { 707 | F[ i ] (); 708 | 709 | e.preventDefault(); 710 | return false; 711 | } 712 | }); 713 | } 714 | }); 715 | } 716 | 717 | if ($.fn.mousewheel && current.mouseWheel) { 718 | F.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY) { 719 | var target = e.target || null, 720 | parent = $(target), 721 | canScroll = false; 722 | 723 | while (parent.length) { 724 | if (canScroll || parent.is('.fancybox-skin') || parent.is('.fancybox-wrap')) { 725 | break; 726 | } 727 | 728 | canScroll = isScrollable( parent[0] ); 729 | parent = $(parent).parent(); 730 | } 731 | 732 | if (delta !== 0 && !canScroll) { 733 | if (F.group.length > 1 && !current.canShrink) { 734 | if (deltaY > 0 || deltaX > 0) { 735 | F.prev( deltaY > 0 ? 'down' : 'left' ); 736 | 737 | } else if (deltaY < 0 || deltaX < 0) { 738 | F.next( deltaY < 0 ? 'up' : 'right' ); 739 | } 740 | 741 | e.preventDefault(); 742 | } 743 | } 744 | }); 745 | } 746 | }, 747 | 748 | trigger: function (event, o) { 749 | var ret, obj = o || F.coming || F.current; 750 | 751 | if (obj) { 752 | if ($.isFunction( obj[event] )) { 753 | ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1)); 754 | } 755 | 756 | if (ret === false) { 757 | return false; 758 | } 759 | 760 | if (obj.helpers) { 761 | $.each(obj.helpers, function (helper, opts) { 762 | if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) { 763 | F.helpers[helper][event]($.extend(true, {}, F.helpers[helper].defaults, opts), obj); 764 | } 765 | }); 766 | } 767 | } 768 | 769 | D.trigger(event); 770 | }, 771 | 772 | isImage: function (str) { 773 | return isString(str) && str.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i); 774 | }, 775 | 776 | isSWF: function (str) { 777 | return isString(str) && str.match(/\.(swf)((\?|#).*)?$/i); 778 | }, 779 | 780 | _start: function (index) { 781 | var coming = {}, 782 | obj, 783 | href, 784 | type, 785 | margin, 786 | padding; 787 | 788 | index = getScalar( index ); 789 | obj = F.group[ index ] || null; 790 | 791 | if (!obj) { 792 | return false; 793 | } 794 | 795 | coming = $.extend(true, {}, F.opts, obj); 796 | 797 | // Convert margin and padding properties to array - top, right, bottom, left 798 | margin = coming.margin; 799 | padding = coming.padding; 800 | 801 | if ($.type(margin) === 'number') { 802 | coming.margin = [margin, margin, margin, margin]; 803 | } 804 | 805 | if ($.type(padding) === 'number') { 806 | coming.padding = [padding, padding, padding, padding]; 807 | } 808 | 809 | // 'modal' propery is just a shortcut 810 | if (coming.modal) { 811 | $.extend(true, coming, { 812 | closeBtn : false, 813 | closeClick : false, 814 | nextClick : false, 815 | arrows : false, 816 | mouseWheel : false, 817 | keys : null, 818 | helpers: { 819 | overlay : { 820 | closeClick : false 821 | } 822 | } 823 | }); 824 | } 825 | 826 | // 'autoSize' property is a shortcut, too 827 | if (coming.autoSize) { 828 | coming.autoWidth = coming.autoHeight = true; 829 | } 830 | 831 | if (coming.width === 'auto') { 832 | coming.autoWidth = true; 833 | } 834 | 835 | if (coming.height === 'auto') { 836 | coming.autoHeight = true; 837 | } 838 | 839 | /* 840 | * Add reference to the group, so it`s possible to access from callbacks, example: 841 | * afterLoad : function() { 842 | * this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : ''); 843 | * } 844 | */ 845 | 846 | coming.group = F.group; 847 | coming.index = index; 848 | 849 | // Give a chance for callback or helpers to update coming item (type, title, etc) 850 | F.coming = coming; 851 | 852 | if (false === F.trigger('beforeLoad')) { 853 | F.coming = null; 854 | 855 | return; 856 | } 857 | 858 | type = coming.type; 859 | href = coming.href; 860 | 861 | if (!type) { 862 | F.coming = null; 863 | 864 | //If we can not determine content type then drop silently or display next/prev item if looping through gallery 865 | if (F.current && F.router && F.router !== 'jumpto') { 866 | F.current.index = index; 867 | 868 | return F[ F.router ]( F.direction ); 869 | } 870 | 871 | return false; 872 | } 873 | 874 | F.isActive = true; 875 | 876 | if (type === 'image' || type === 'swf') { 877 | coming.autoHeight = coming.autoWidth = false; 878 | coming.scrolling = 'visible'; 879 | } 880 | 881 | if (type === 'image') { 882 | coming.aspectRatio = true; 883 | } 884 | 885 | if (type === 'iframe' && isTouch) { 886 | coming.scrolling = 'scroll'; 887 | } 888 | 889 | // Build the neccessary markup 890 | coming.wrap = $(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile' : 'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo( coming.parent || 'body' ); 891 | 892 | $.extend(coming, { 893 | skin : $('.fancybox-skin', coming.wrap), 894 | outer : $('.fancybox-outer', coming.wrap), 895 | inner : $('.fancybox-inner', coming.wrap) 896 | }); 897 | 898 | $.each(["Top", "Right", "Bottom", "Left"], function(i, v) { 899 | coming.skin.css('padding' + v, getValue(coming.padding[ i ])); 900 | }); 901 | 902 | F.trigger('onReady'); 903 | 904 | // Check before try to load; 'inline' and 'html' types need content, others - href 905 | if (type === 'inline' || type === 'html') { 906 | if (!coming.content || !coming.content.length) { 907 | return F._error( 'content' ); 908 | } 909 | 910 | } else if (!href) { 911 | return F._error( 'href' ); 912 | } 913 | 914 | if (type === 'image') { 915 | F._loadImage(); 916 | 917 | } else if (type === 'ajax') { 918 | F._loadAjax(); 919 | 920 | } else if (type === 'iframe') { 921 | F._loadIframe(); 922 | 923 | } else { 924 | F._afterLoad(); 925 | } 926 | }, 927 | 928 | _error: function ( type ) { 929 | $.extend(F.coming, { 930 | type : 'html', 931 | autoWidth : true, 932 | autoHeight : true, 933 | minWidth : 0, 934 | minHeight : 0, 935 | scrolling : 'no', 936 | hasError : type, 937 | content : F.coming.tpl.error 938 | }); 939 | 940 | F._afterLoad(); 941 | }, 942 | 943 | _loadImage: function () { 944 | // Reset preload image so it is later possible to check "complete" property 945 | var img = F.imgPreload = new Image(); 946 | 947 | img.onload = function () { 948 | this.onload = this.onerror = null; 949 | 950 | F.coming.width = this.width / F.opts.pixelRatio; 951 | F.coming.height = this.height / F.opts.pixelRatio; 952 | 953 | F._afterLoad(); 954 | }; 955 | 956 | img.onerror = function () { 957 | this.onload = this.onerror = null; 958 | 959 | F._error( 'image' ); 960 | }; 961 | 962 | img.src = F.coming.href; 963 | 964 | if (img.complete !== true) { 965 | F.showLoading(); 966 | } 967 | }, 968 | 969 | _loadAjax: function () { 970 | var coming = F.coming; 971 | 972 | F.showLoading(); 973 | 974 | F.ajaxLoad = $.ajax($.extend({}, coming.ajax, { 975 | url: coming.href, 976 | error: function (jqXHR, textStatus) { 977 | if (F.coming && textStatus !== 'abort') { 978 | F._error( 'ajax', jqXHR ); 979 | 980 | } else { 981 | F.hideLoading(); 982 | } 983 | }, 984 | success: function (data, textStatus) { 985 | if (textStatus === 'success') { 986 | coming.content = data; 987 | 988 | F._afterLoad(); 989 | } 990 | } 991 | })); 992 | }, 993 | 994 | _loadIframe: function() { 995 | var coming = F.coming, 996 | iframe = $(coming.tpl.iframe.replace(/\{rnd\}/g, new Date().getTime())) 997 | .attr('scrolling', isTouch ? 'auto' : coming.iframe.scrolling) 998 | .attr('src', coming.href); 999 | 1000 | // This helps IE 1001 | $(coming.wrap).bind('onReset', function () { 1002 | try { 1003 | $(this).find('iframe').hide().attr('src', '//about:blank').end().empty(); 1004 | } catch (e) {} 1005 | }); 1006 | 1007 | if (coming.iframe.preload) { 1008 | F.showLoading(); 1009 | 1010 | iframe.one('load', function() { 1011 | $(this).data('ready', 1); 1012 | 1013 | // iOS will lose scrolling if we resize 1014 | if (!isTouch) { 1015 | $(this).bind('load.fb', F.update); 1016 | } 1017 | 1018 | // Without this trick: 1019 | // - iframe won't scroll on iOS devices 1020 | // - IE7 sometimes displays empty iframe 1021 | $(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show(); 1022 | 1023 | F._afterLoad(); 1024 | }); 1025 | } 1026 | 1027 | coming.content = iframe.appendTo( coming.inner ); 1028 | 1029 | if (!coming.iframe.preload) { 1030 | F._afterLoad(); 1031 | } 1032 | }, 1033 | 1034 | _preloadImages: function() { 1035 | var group = F.group, 1036 | current = F.current, 1037 | len = group.length, 1038 | cnt = current.preload ? Math.min(current.preload, len - 1) : 0, 1039 | item, 1040 | i; 1041 | 1042 | for (i = 1; i <= cnt; i += 1) { 1043 | item = group[ (current.index + i ) % len ]; 1044 | 1045 | if (item.type === 'image' && item.href) { 1046 | new Image().src = item.href; 1047 | } 1048 | } 1049 | }, 1050 | 1051 | _afterLoad: function () { 1052 | var coming = F.coming, 1053 | previous = F.current, 1054 | placeholder = 'fancybox-placeholder', 1055 | current, 1056 | content, 1057 | type, 1058 | scrolling, 1059 | href, 1060 | embed; 1061 | 1062 | F.hideLoading(); 1063 | 1064 | if (!coming || F.isActive === false) { 1065 | return; 1066 | } 1067 | 1068 | if (false === F.trigger('afterLoad', coming, previous)) { 1069 | coming.wrap.stop(true).trigger('onReset').remove(); 1070 | 1071 | F.coming = null; 1072 | 1073 | return; 1074 | } 1075 | 1076 | if (previous) { 1077 | F.trigger('beforeChange', previous); 1078 | 1079 | previous.wrap.stop(true).removeClass('fancybox-opened') 1080 | .find('.fancybox-item, .fancybox-nav') 1081 | .remove(); 1082 | } 1083 | 1084 | F.unbindEvents(); 1085 | 1086 | current = coming; 1087 | content = coming.content; 1088 | type = coming.type; 1089 | scrolling = coming.scrolling; 1090 | 1091 | $.extend(F, { 1092 | wrap : current.wrap, 1093 | skin : current.skin, 1094 | outer : current.outer, 1095 | inner : current.inner, 1096 | current : current, 1097 | previous : previous 1098 | }); 1099 | 1100 | href = current.href; 1101 | 1102 | switch (type) { 1103 | case 'inline': 1104 | case 'ajax': 1105 | case 'html': 1106 | if (current.selector) { 1107 | content = $('
    ').html(content).find(current.selector); 1108 | 1109 | } else if (isQuery(content)) { 1110 | if (!content.data(placeholder)) { 1111 | content.data(placeholder, $('
    ').insertAfter( content ).hide() ); 1112 | } 1113 | 1114 | content = content.show().detach(); 1115 | 1116 | current.wrap.bind('onReset', function () { 1117 | if ($(this).find(content).length) { 1118 | content.hide().replaceAll( content.data(placeholder) ).data(placeholder, false); 1119 | } 1120 | }); 1121 | } 1122 | break; 1123 | 1124 | case 'image': 1125 | content = current.tpl.image.replace(/\{href\}/g, href); 1126 | break; 1127 | 1128 | case 'swf': 1129 | content = ''; 1130 | embed = ''; 1131 | 1132 | $.each(current.swf, function(name, val) { 1133 | content += ''; 1134 | embed += ' ' + name + '="' + val + '"'; 1135 | }); 1136 | 1137 | content += ''; 1138 | break; 1139 | } 1140 | 1141 | if (!(isQuery(content) && content.parent().is(current.inner))) { 1142 | current.inner.append( content ); 1143 | } 1144 | 1145 | // Give a chance for helpers or callbacks to update elements 1146 | F.trigger('beforeShow'); 1147 | 1148 | // Set scrolling before calculating dimensions 1149 | current.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling)); 1150 | 1151 | // Set initial dimensions and start position 1152 | F._setDimension(); 1153 | 1154 | F.reposition(); 1155 | 1156 | F.isOpen = false; 1157 | F.coming = null; 1158 | 1159 | F.bindEvents(); 1160 | 1161 | if (!F.isOpened) { 1162 | $('.fancybox-wrap').not( current.wrap ).stop(true).trigger('onReset').remove(); 1163 | 1164 | } else if (previous.prevMethod) { 1165 | F.transitions[ previous.prevMethod ](); 1166 | } 1167 | 1168 | F.transitions[ F.isOpened ? current.nextMethod : current.openMethod ](); 1169 | 1170 | F._preloadImages(); 1171 | }, 1172 | 1173 | _setDimension: function () { 1174 | var viewport = F.getViewport(), 1175 | steps = 0, 1176 | canShrink = false, 1177 | canExpand = false, 1178 | wrap = F.wrap, 1179 | skin = F.skin, 1180 | inner = F.inner, 1181 | current = F.current, 1182 | width = current.width, 1183 | height = current.height, 1184 | minWidth = current.minWidth, 1185 | minHeight = current.minHeight, 1186 | maxWidth = current.maxWidth, 1187 | maxHeight = current.maxHeight, 1188 | scrolling = current.scrolling, 1189 | scrollOut = current.scrollOutside ? current.scrollbarWidth : 0, 1190 | margin = current.margin, 1191 | wMargin = getScalar(margin[1] + margin[3]), 1192 | hMargin = getScalar(margin[0] + margin[2]), 1193 | wPadding, 1194 | hPadding, 1195 | wSpace, 1196 | hSpace, 1197 | origWidth, 1198 | origHeight, 1199 | origMaxWidth, 1200 | origMaxHeight, 1201 | ratio, 1202 | width_, 1203 | height_, 1204 | maxWidth_, 1205 | maxHeight_, 1206 | iframe, 1207 | body; 1208 | 1209 | // Reset dimensions so we could re-check actual size 1210 | wrap.add(skin).add(inner).width('auto').height('auto').removeClass('fancybox-tmp'); 1211 | 1212 | wPadding = getScalar(skin.outerWidth(true) - skin.width()); 1213 | hPadding = getScalar(skin.outerHeight(true) - skin.height()); 1214 | 1215 | // Any space between content and viewport (margin, padding, border, title) 1216 | wSpace = wMargin + wPadding; 1217 | hSpace = hMargin + hPadding; 1218 | 1219 | origWidth = isPercentage(width) ? (viewport.w - wSpace) * getScalar(width) / 100 : width; 1220 | origHeight = isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100 : height; 1221 | 1222 | if (current.type === 'iframe') { 1223 | iframe = current.content; 1224 | 1225 | if (current.autoHeight && iframe && iframe.data('ready') === 1) { 1226 | try { 1227 | if (iframe[0].contentWindow.document.location) { 1228 | inner.width( origWidth ).height(9999); 1229 | 1230 | body = iframe.contents().find('body'); 1231 | 1232 | if (scrollOut) { 1233 | body.css('overflow-x', 'hidden'); 1234 | } 1235 | 1236 | origHeight = body.outerHeight(true); 1237 | } 1238 | 1239 | } catch (e) {} 1240 | } 1241 | 1242 | } else if (current.autoWidth || current.autoHeight) { 1243 | inner.addClass( 'fancybox-tmp' ); 1244 | 1245 | // Set width or height in case we need to calculate only one dimension 1246 | if (!current.autoWidth) { 1247 | inner.width( origWidth ); 1248 | } 1249 | 1250 | if (!current.autoHeight) { 1251 | inner.height( origHeight ); 1252 | } 1253 | 1254 | if (current.autoWidth) { 1255 | origWidth = inner.width(); 1256 | } 1257 | 1258 | if (current.autoHeight) { 1259 | origHeight = inner.height(); 1260 | } 1261 | 1262 | inner.removeClass( 'fancybox-tmp' ); 1263 | } 1264 | 1265 | width = getScalar( origWidth ); 1266 | height = getScalar( origHeight ); 1267 | 1268 | ratio = origWidth / origHeight; 1269 | 1270 | // Calculations for the content 1271 | minWidth = getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace : minWidth); 1272 | maxWidth = getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace : maxWidth); 1273 | 1274 | minHeight = getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace : minHeight); 1275 | maxHeight = getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace : maxHeight); 1276 | 1277 | // These will be used to determine if wrap can fit in the viewport 1278 | origMaxWidth = maxWidth; 1279 | origMaxHeight = maxHeight; 1280 | 1281 | if (current.fitToView) { 1282 | maxWidth = Math.min(viewport.w - wSpace, maxWidth); 1283 | maxHeight = Math.min(viewport.h - hSpace, maxHeight); 1284 | } 1285 | 1286 | maxWidth_ = viewport.w - wMargin; 1287 | maxHeight_ = viewport.h - hMargin; 1288 | 1289 | if (current.aspectRatio) { 1290 | if (width > maxWidth) { 1291 | width = maxWidth; 1292 | height = getScalar(width / ratio); 1293 | } 1294 | 1295 | if (height > maxHeight) { 1296 | height = maxHeight; 1297 | width = getScalar(height * ratio); 1298 | } 1299 | 1300 | if (width < minWidth) { 1301 | width = minWidth; 1302 | height = getScalar(width / ratio); 1303 | } 1304 | 1305 | if (height < minHeight) { 1306 | height = minHeight; 1307 | width = getScalar(height * ratio); 1308 | } 1309 | 1310 | } else { 1311 | width = Math.max(minWidth, Math.min(width, maxWidth)); 1312 | 1313 | if (current.autoHeight && current.type !== 'iframe') { 1314 | inner.width( width ); 1315 | 1316 | height = inner.height(); 1317 | } 1318 | 1319 | height = Math.max(minHeight, Math.min(height, maxHeight)); 1320 | } 1321 | 1322 | // Try to fit inside viewport (including the title) 1323 | if (current.fitToView) { 1324 | inner.width( width ).height( height ); 1325 | 1326 | wrap.width( width + wPadding ); 1327 | 1328 | // Real wrap dimensions 1329 | width_ = wrap.width(); 1330 | height_ = wrap.height(); 1331 | 1332 | if (current.aspectRatio) { 1333 | while ((width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight) { 1334 | if (steps++ > 19) { 1335 | break; 1336 | } 1337 | 1338 | height = Math.max(minHeight, Math.min(maxHeight, height - 10)); 1339 | width = getScalar(height * ratio); 1340 | 1341 | if (width < minWidth) { 1342 | width = minWidth; 1343 | height = getScalar(width / ratio); 1344 | } 1345 | 1346 | if (width > maxWidth) { 1347 | width = maxWidth; 1348 | height = getScalar(width / ratio); 1349 | } 1350 | 1351 | inner.width( width ).height( height ); 1352 | 1353 | wrap.width( width + wPadding ); 1354 | 1355 | width_ = wrap.width(); 1356 | height_ = wrap.height(); 1357 | } 1358 | 1359 | } else { 1360 | width = Math.max(minWidth, Math.min(width, width - (width_ - maxWidth_))); 1361 | height = Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_))); 1362 | } 1363 | } 1364 | 1365 | if (scrollOut && scrolling === 'auto' && height < origHeight && (width + wPadding + scrollOut) < maxWidth_) { 1366 | width += scrollOut; 1367 | } 1368 | 1369 | inner.width( width ).height( height ); 1370 | 1371 | wrap.width( width + wPadding ); 1372 | 1373 | width_ = wrap.width(); 1374 | height_ = wrap.height(); 1375 | 1376 | canShrink = (width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight; 1377 | canExpand = current.aspectRatio ? (width < origMaxWidth && height < origMaxHeight && width < origWidth && height < origHeight) : ((width < origMaxWidth || height < origMaxHeight) && (width < origWidth || height < origHeight)); 1378 | 1379 | $.extend(current, { 1380 | dim : { 1381 | width : getValue( width_ ), 1382 | height : getValue( height_ ) 1383 | }, 1384 | origWidth : origWidth, 1385 | origHeight : origHeight, 1386 | canShrink : canShrink, 1387 | canExpand : canExpand, 1388 | wPadding : wPadding, 1389 | hPadding : hPadding, 1390 | wrapSpace : height_ - skin.outerHeight(true), 1391 | skinSpace : skin.height() - height 1392 | }); 1393 | 1394 | if (!iframe && current.autoHeight && height > minHeight && height < maxHeight && !canExpand) { 1395 | inner.height('auto'); 1396 | } 1397 | }, 1398 | 1399 | _getPosition: function (onlyAbsolute) { 1400 | var current = F.current, 1401 | viewport = F.getViewport(), 1402 | margin = current.margin, 1403 | width = F.wrap.width() + margin[1] + margin[3], 1404 | height = F.wrap.height() + margin[0] + margin[2], 1405 | rez = { 1406 | position: 'absolute', 1407 | top : margin[0], 1408 | left : margin[3] 1409 | }; 1410 | 1411 | if (current.autoCenter && current.fixed && !onlyAbsolute && height <= viewport.h && width <= viewport.w) { 1412 | rez.position = 'fixed'; 1413 | 1414 | } else if (!current.locked) { 1415 | rez.top += viewport.y; 1416 | rez.left += viewport.x; 1417 | } 1418 | 1419 | rez.top = getValue(Math.max(rez.top, rez.top + ((viewport.h - height) * current.topRatio))); 1420 | rez.left = getValue(Math.max(rez.left, rez.left + ((viewport.w - width) * current.leftRatio))); 1421 | 1422 | return rez; 1423 | }, 1424 | 1425 | _afterZoomIn: function () { 1426 | var current = F.current; 1427 | 1428 | if (!current) { 1429 | return; 1430 | } 1431 | 1432 | F.isOpen = F.isOpened = true; 1433 | 1434 | F.wrap.css('overflow', 'visible').addClass('fancybox-opened').hide().show(0); 1435 | 1436 | F.update(); 1437 | 1438 | // Assign a click event 1439 | if ( current.closeClick || (current.nextClick && F.group.length > 1) ) { 1440 | F.inner.css('cursor', 'pointer').bind('click.fb', function(e) { 1441 | if (!$(e.target).is('a') && !$(e.target).parent().is('a')) { 1442 | e.preventDefault(); 1443 | 1444 | F[ current.closeClick ? 'close' : 'next' ](); 1445 | } 1446 | }); 1447 | } 1448 | 1449 | // Create a close button 1450 | if (current.closeBtn) { 1451 | $(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', function(e) { 1452 | e.preventDefault(); 1453 | 1454 | F.close(); 1455 | }); 1456 | } 1457 | 1458 | // Create navigation arrows 1459 | if (current.arrows && F.group.length > 1) { 1460 | if (current.loop || current.index > 0) { 1461 | $(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev); 1462 | } 1463 | 1464 | if (current.loop || current.index < F.group.length - 1) { 1465 | $(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next); 1466 | } 1467 | } 1468 | 1469 | F.trigger('afterShow'); 1470 | 1471 | // Stop the slideshow if this is the last item 1472 | if (!current.loop && current.index === current.group.length - 1) { 1473 | 1474 | F.play( false ); 1475 | 1476 | } else if (F.opts.autoPlay && !F.player.isActive) { 1477 | F.opts.autoPlay = false; 1478 | 1479 | F.play(true); 1480 | } 1481 | }, 1482 | 1483 | _afterZoomOut: function ( obj ) { 1484 | obj = obj || F.current; 1485 | 1486 | $('.fancybox-wrap').trigger('onReset').remove(); 1487 | 1488 | $.extend(F, { 1489 | group : {}, 1490 | opts : {}, 1491 | router : false, 1492 | current : null, 1493 | isActive : false, 1494 | isOpened : false, 1495 | isOpen : false, 1496 | isClosing : false, 1497 | wrap : null, 1498 | skin : null, 1499 | outer : null, 1500 | inner : null 1501 | }); 1502 | 1503 | F.trigger('afterClose', obj); 1504 | } 1505 | }); 1506 | 1507 | /* 1508 | * Default transitions 1509 | */ 1510 | 1511 | F.transitions = { 1512 | getOrigPosition: function () { 1513 | var current = F.current, 1514 | element = current.element, 1515 | orig = current.orig, 1516 | pos = {}, 1517 | width = 50, 1518 | height = 50, 1519 | hPadding = current.hPadding, 1520 | wPadding = current.wPadding, 1521 | viewport = F.getViewport(); 1522 | 1523 | if (!orig && current.isDom && element.is(':visible')) { 1524 | orig = element.find('img:first'); 1525 | 1526 | if (!orig.length) { 1527 | orig = element; 1528 | } 1529 | } 1530 | 1531 | if (isQuery(orig)) { 1532 | pos = orig.offset(); 1533 | 1534 | if (orig.is('img')) { 1535 | width = orig.outerWidth(); 1536 | height = orig.outerHeight(); 1537 | } 1538 | 1539 | } else { 1540 | pos.top = viewport.y + (viewport.h - height) * current.topRatio; 1541 | pos.left = viewport.x + (viewport.w - width) * current.leftRatio; 1542 | } 1543 | 1544 | if (F.wrap.css('position') === 'fixed' || current.locked) { 1545 | pos.top -= viewport.y; 1546 | pos.left -= viewport.x; 1547 | } 1548 | 1549 | pos = { 1550 | top : getValue(pos.top - hPadding * current.topRatio), 1551 | left : getValue(pos.left - wPadding * current.leftRatio), 1552 | width : getValue(width + wPadding), 1553 | height : getValue(height + hPadding) 1554 | }; 1555 | 1556 | return pos; 1557 | }, 1558 | 1559 | step: function (now, fx) { 1560 | var ratio, 1561 | padding, 1562 | value, 1563 | prop = fx.prop, 1564 | current = F.current, 1565 | wrapSpace = current.wrapSpace, 1566 | skinSpace = current.skinSpace; 1567 | 1568 | if (prop === 'width' || prop === 'height') { 1569 | ratio = fx.end === fx.start ? 1 : (now - fx.start) / (fx.end - fx.start); 1570 | 1571 | if (F.isClosing) { 1572 | ratio = 1 - ratio; 1573 | } 1574 | 1575 | padding = prop === 'width' ? current.wPadding : current.hPadding; 1576 | value = now - padding; 1577 | 1578 | F.skin[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) ) ); 1579 | F.inner[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) - (skinSpace * ratio) ) ); 1580 | } 1581 | }, 1582 | 1583 | zoomIn: function () { 1584 | var current = F.current, 1585 | startPos = current.pos, 1586 | effect = current.openEffect, 1587 | elastic = effect === 'elastic', 1588 | endPos = $.extend({opacity : 1}, startPos); 1589 | 1590 | // Remove "position" property that breaks older IE 1591 | delete endPos.position; 1592 | 1593 | if (elastic) { 1594 | startPos = this.getOrigPosition(); 1595 | 1596 | if (current.openOpacity) { 1597 | startPos.opacity = 0.1; 1598 | } 1599 | 1600 | } else if (effect === 'fade') { 1601 | startPos.opacity = 0.1; 1602 | } 1603 | 1604 | F.wrap.css(startPos).animate(endPos, { 1605 | duration : effect === 'none' ? 0 : current.openSpeed, 1606 | easing : current.openEasing, 1607 | step : elastic ? this.step : null, 1608 | complete : F._afterZoomIn 1609 | }); 1610 | }, 1611 | 1612 | zoomOut: function () { 1613 | var current = F.current, 1614 | effect = current.closeEffect, 1615 | elastic = effect === 'elastic', 1616 | endPos = {opacity : 0.1}; 1617 | 1618 | if (elastic) { 1619 | endPos = this.getOrigPosition(); 1620 | 1621 | if (current.closeOpacity) { 1622 | endPos.opacity = 0.1; 1623 | } 1624 | } 1625 | 1626 | F.wrap.animate(endPos, { 1627 | duration : effect === 'none' ? 0 : current.closeSpeed, 1628 | easing : current.closeEasing, 1629 | step : elastic ? this.step : null, 1630 | complete : F._afterZoomOut 1631 | }); 1632 | }, 1633 | 1634 | changeIn: function () { 1635 | var current = F.current, 1636 | effect = current.nextEffect, 1637 | startPos = current.pos, 1638 | endPos = { opacity : 1 }, 1639 | direction = F.direction, 1640 | distance = 200, 1641 | field; 1642 | 1643 | startPos.opacity = 0.1; 1644 | 1645 | if (effect === 'elastic') { 1646 | field = direction === 'down' || direction === 'up' ? 'top' : 'left'; 1647 | 1648 | if (direction === 'down' || direction === 'right') { 1649 | startPos[ field ] = getValue(getScalar(startPos[ field ]) - distance); 1650 | endPos[ field ] = '+=' + distance + 'px'; 1651 | 1652 | } else { 1653 | startPos[ field ] = getValue(getScalar(startPos[ field ]) + distance); 1654 | endPos[ field ] = '-=' + distance + 'px'; 1655 | } 1656 | } 1657 | 1658 | // Workaround for http://bugs.jquery.com/ticket/12273 1659 | if (effect === 'none') { 1660 | F._afterZoomIn(); 1661 | 1662 | } else { 1663 | F.wrap.css(startPos).animate(endPos, { 1664 | duration : current.nextSpeed, 1665 | easing : current.nextEasing, 1666 | complete : F._afterZoomIn 1667 | }); 1668 | } 1669 | }, 1670 | 1671 | changeOut: function () { 1672 | var previous = F.previous, 1673 | effect = previous.prevEffect, 1674 | endPos = { opacity : 0.1 }, 1675 | direction = F.direction, 1676 | distance = 200; 1677 | 1678 | if (effect === 'elastic') { 1679 | endPos[ direction === 'down' || direction === 'up' ? 'top' : 'left' ] = ( direction === 'up' || direction === 'left' ? '-' : '+' ) + '=' + distance + 'px'; 1680 | } 1681 | 1682 | previous.wrap.animate(endPos, { 1683 | duration : effect === 'none' ? 0 : previous.prevSpeed, 1684 | easing : previous.prevEasing, 1685 | complete : function () { 1686 | $(this).trigger('onReset').remove(); 1687 | } 1688 | }); 1689 | } 1690 | }; 1691 | 1692 | /* 1693 | * Overlay helper 1694 | */ 1695 | 1696 | F.helpers.overlay = { 1697 | defaults : { 1698 | closeClick : true, // if true, fancyBox will be closed when user clicks on the overlay 1699 | speedOut : 200, // duration of fadeOut animation 1700 | showEarly : true, // indicates if should be opened immediately or wait until the content is ready 1701 | css : {}, // custom CSS properties 1702 | locked : !isTouch, // if true, the content will be locked into overlay 1703 | fixed : true // if false, the overlay CSS position property will not be set to "fixed" 1704 | }, 1705 | 1706 | overlay : null, // current handle 1707 | fixed : false, // indicates if the overlay has position "fixed" 1708 | el : $('html'), // element that contains "the lock" 1709 | 1710 | // Public methods 1711 | create : function(opts) { 1712 | var parent; 1713 | 1714 | opts = $.extend({}, this.defaults, opts); 1715 | 1716 | if (this.overlay) { 1717 | this.close(); 1718 | } 1719 | 1720 | parent = F.coming ? F.coming.parent : opts.parent; 1721 | 1722 | this.overlay = $('
    ').appendTo( parent && parent.length ? parent : 'body' ); 1723 | this.fixed = false; 1724 | 1725 | if (opts.fixed && F.defaults.fixed) { 1726 | this.overlay.addClass('fancybox-overlay-fixed'); 1727 | 1728 | this.fixed = true; 1729 | } 1730 | }, 1731 | 1732 | open : function(opts) { 1733 | var that = this; 1734 | 1735 | opts = $.extend({}, this.defaults, opts); 1736 | 1737 | if (this.overlay) { 1738 | this.overlay.unbind('.overlay').width('auto').height('auto'); 1739 | 1740 | } else { 1741 | this.create(opts); 1742 | } 1743 | 1744 | if (!this.fixed) { 1745 | W.bind('resize.overlay', $.proxy( this.update, this) ); 1746 | 1747 | this.update(); 1748 | } 1749 | 1750 | if (opts.closeClick) { 1751 | this.overlay.bind('click.overlay', function(e) { 1752 | if ($(e.target).hasClass('fancybox-overlay')) { 1753 | if (F.isActive) { 1754 | F.close(); 1755 | } else { 1756 | that.close(); 1757 | } 1758 | 1759 | return false; 1760 | } 1761 | }); 1762 | } 1763 | 1764 | this.overlay.css( opts.css ).show(); 1765 | }, 1766 | 1767 | close : function() { 1768 | W.unbind('resize.overlay'); 1769 | 1770 | if (this.el.hasClass('fancybox-lock')) { 1771 | $('.fancybox-margin').removeClass('fancybox-margin'); 1772 | 1773 | this.el.removeClass('fancybox-lock'); 1774 | 1775 | W.scrollTop( this.scrollV ).scrollLeft( this.scrollH ); 1776 | } 1777 | 1778 | $('.fancybox-overlay').remove().hide(); 1779 | 1780 | $.extend(this, { 1781 | overlay : null, 1782 | fixed : false 1783 | }); 1784 | }, 1785 | 1786 | // Private, callbacks 1787 | 1788 | update : function () { 1789 | var width = '100%', offsetWidth; 1790 | 1791 | // Reset width/height so it will not mess 1792 | this.overlay.width(width).height('100%'); 1793 | 1794 | // jQuery does not return reliable result for IE 1795 | if (IE) { 1796 | offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth); 1797 | 1798 | if (D.width() > offsetWidth) { 1799 | width = D.width(); 1800 | } 1801 | 1802 | } else if (D.width() > W.width()) { 1803 | width = D.width(); 1804 | } 1805 | 1806 | this.overlay.width(width).height(D.height()); 1807 | }, 1808 | 1809 | // This is where we can manipulate DOM, because later it would cause iframes to reload 1810 | onReady : function (opts, obj) { 1811 | var overlay = this.overlay; 1812 | 1813 | $('.fancybox-overlay').stop(true, true); 1814 | 1815 | if (!overlay) { 1816 | this.create(opts); 1817 | } 1818 | 1819 | if (opts.locked && this.fixed && obj.fixed) { 1820 | obj.locked = this.overlay.append( obj.wrap ); 1821 | obj.fixed = false; 1822 | } 1823 | 1824 | if (opts.showEarly === true) { 1825 | this.beforeShow.apply(this, arguments); 1826 | } 1827 | }, 1828 | 1829 | beforeShow : function(opts, obj) { 1830 | if (obj.locked && !this.el.hasClass('fancybox-lock')) { 1831 | if (this.fixPosition !== false) { 1832 | $('*:not(object)').filter(function(){ 1833 | return ($(this).css('position') === 'fixed' && !$(this).hasClass("fancybox-overlay") && !$(this).hasClass("fancybox-wrap") ); 1834 | }).addClass('fancybox-margin'); 1835 | } 1836 | 1837 | this.el.addClass('fancybox-margin'); 1838 | 1839 | this.scrollV = W.scrollTop(); 1840 | this.scrollH = W.scrollLeft(); 1841 | 1842 | this.el.addClass('fancybox-lock'); 1843 | 1844 | W.scrollTop( this.scrollV ).scrollLeft( this.scrollH ); 1845 | } 1846 | 1847 | this.open(opts); 1848 | }, 1849 | 1850 | onUpdate : function() { 1851 | if (!this.fixed) { 1852 | this.update(); 1853 | } 1854 | }, 1855 | 1856 | afterClose: function (opts) { 1857 | // Remove overlay if exists and fancyBox is not opening 1858 | // (e.g., it is not being open using afterClose callback) 1859 | if (this.overlay && !F.coming) { 1860 | this.overlay.fadeOut(opts.speedOut, $.proxy( this.close, this )); 1861 | } 1862 | } 1863 | }; 1864 | 1865 | /* 1866 | * Title helper 1867 | */ 1868 | 1869 | F.helpers.title = { 1870 | defaults : { 1871 | type : 'float', // 'float', 'inside', 'outside' or 'over', 1872 | position : 'bottom' // 'top' or 'bottom' 1873 | }, 1874 | 1875 | beforeShow: function (opts) { 1876 | var current = F.current, 1877 | text = current.title, 1878 | type = opts.type, 1879 | title, 1880 | target; 1881 | 1882 | if ($.isFunction(text)) { 1883 | text = text.call(current.element, current); 1884 | } 1885 | 1886 | if (!isString(text) || $.trim(text) === '') { 1887 | return; 1888 | } 1889 | 1890 | title = $('
    ' + text + '
    '); 1891 | 1892 | switch (type) { 1893 | case 'inside': 1894 | target = F.skin; 1895 | break; 1896 | 1897 | case 'outside': 1898 | target = F.wrap; 1899 | break; 1900 | 1901 | case 'over': 1902 | target = F.inner; 1903 | break; 1904 | 1905 | default: // 'float' 1906 | target = F.skin; 1907 | 1908 | title.appendTo('body'); 1909 | 1910 | if (IE) { 1911 | title.width( title.width() ); 1912 | } 1913 | 1914 | title.wrapInner(''); 1915 | 1916 | //Increase bottom margin so this title will also fit into viewport 1917 | F.current.margin[2] += Math.abs( getScalar(title.css('margin-bottom')) ); 1918 | break; 1919 | } 1920 | 1921 | title[ (opts.position === 'top' ? 'prependTo' : 'appendTo') ](target); 1922 | } 1923 | }; 1924 | 1925 | // jQuery plugin initialization 1926 | $.fn.fancybox = function (options) { 1927 | var index, 1928 | that = $(this), 1929 | selector = this.selector || '', 1930 | run = function(e) { 1931 | var what = $(this).blur(), idx = index, relType, relVal; 1932 | 1933 | if (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) { 1934 | relType = options.groupAttr || 'data-fancybox-group'; 1935 | relVal = what.attr(relType); 1936 | 1937 | if (!relVal) { 1938 | relType = 'rel'; 1939 | relVal = what.get(0)[ relType ]; 1940 | } 1941 | 1942 | if (relVal && relVal !== '' && relVal !== 'nofollow') { 1943 | what = selector.length ? $(selector) : that; 1944 | what = what.filter('[' + relType + '="' + relVal + '"]'); 1945 | idx = what.index(this); 1946 | } 1947 | 1948 | options.index = idx; 1949 | 1950 | // Stop an event from bubbling if everything is fine 1951 | if (F.open(what, options) !== false) { 1952 | e.preventDefault(); 1953 | } 1954 | } 1955 | }; 1956 | 1957 | options = options || {}; 1958 | index = options.index || 0; 1959 | 1960 | if (!selector || options.live === false) { 1961 | that.unbind('click.fb-start').bind('click.fb-start', run); 1962 | 1963 | } else { 1964 | D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run); 1965 | } 1966 | 1967 | this.filter('[data-fancybox-start=1]').trigger('click'); 1968 | 1969 | return this; 1970 | }; 1971 | 1972 | // Tests that need a body at doc ready 1973 | D.ready(function() { 1974 | var w1, w2; 1975 | 1976 | if ( $.scrollbarWidth === undefined ) { 1977 | // http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth 1978 | $.scrollbarWidth = function() { 1979 | var parent = $('
    ').appendTo('body'), 1980 | child = parent.children(), 1981 | width = child.innerWidth() - child.height( 99 ).innerWidth(); 1982 | 1983 | parent.remove(); 1984 | 1985 | return width; 1986 | }; 1987 | } 1988 | 1989 | if ( $.support.fixedPosition === undefined ) { 1990 | $.support.fixedPosition = (function() { 1991 | var elem = $('
    ').appendTo('body'), 1992 | fixed = ( elem[0].offsetTop === 20 || elem[0].offsetTop === 15 ); 1993 | 1994 | elem.remove(); 1995 | 1996 | return fixed; 1997 | }()); 1998 | } 1999 | 2000 | $.extend(F.defaults, { 2001 | scrollbarWidth : $.scrollbarWidth(), 2002 | fixed : $.support.fixedPosition, 2003 | parent : $('body') 2004 | }); 2005 | 2006 | //Get real width of page scroll-bar 2007 | w1 = $(window).width(); 2008 | 2009 | H.addClass('fancybox-lock-test'); 2010 | 2011 | w2 = $(window).width(); 2012 | 2013 | H.removeClass('fancybox-lock-test'); 2014 | 2015 | $("").appendTo("head"); 2016 | }); 2017 | 2018 | }(window, document, jQuery)); 2019 | -------------------------------------------------------------------------------- /assets/jquery.fancybox.pack.js: -------------------------------------------------------------------------------- 1 | /*! fancyBox v2.1.7 fancyapps.com | fancyapps.com/fancybox/#license */ 2 | (function(t,J,f,x){var L=f("html"),q=f(t),p=f(J),b=f.fancybox=function(){b.open.apply(this,arguments)},K=navigator.userAgent.match(/msie/i),D=null,u=J.createTouch!==x,v=function(a){return a&&a.hasOwnProperty&&a instanceof f},r=function(a){return a&&"string"===f.type(a)},G=function(a){return r(a)&&0
    ',image:'',iframe:'",error:'

    The requested content cannot be loaded.
    Please try again later.

    ',closeBtn:'',next:'',prev:'',loading:'
    '},openEffect:"fade", 6 | openSpeed:250,openEasing:"swing",openOpacity:!0,openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{}, 7 | previous:null,coming:null,current:null,isActive:!1,isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,c){if(a&&(f.isPlainObject(c)||(c={}),!1!==b.close(!0)))return f.isArray(a)||(a=v(a)?f(a).get():[a]),f.each(a,function(d,e){var k={},g,l,h,n,m;"object"===f.type(e)&&(e.nodeType&&(e=f(e)),v(e)?(k={href:e.data("fancybox-href")||e.attr("href"),title:f("
    ").text(e.data("fancybox-title")|| 8 | e.attr("title")||"").html(),isDom:!0,element:e},f.metadata&&f.extend(!0,k,e.metadata())):k=e);g=c.href||k.href||(r(e)?e:null);l=c.title!==x?c.title:k.title||"";n=(h=c.content||k.content)?"html":c.type||k.type;!n&&k.isDom&&(n=e.data("fancybox-type"),n||(n=(n=e.prop("class").match(/fancybox\.(\w+)/))?n[1]:null));r(g)&&(n||(b.isImage(g)?n="image":b.isSWF(g)?n="swf":"#"===g.charAt(0)?n="inline":r(e)&&(n="html",h=e)),"ajax"===n&&(m=g.split(/\s+/,2),g=m.shift(),m=m.shift()));h||("inline"===n?g?h=f(r(g)? 9 | g.replace(/.*(?=#[^\s]+$)/,""):g):k.isDom&&(h=e):"html"===n?h=g:n||g||!k.isDom||(n="inline",h=e));f.extend(k,{href:g,type:n,content:h,title:l,selector:m});a[d]=k}),b.opts=f.extend(!0,{},b.defaults,c),c.keys!==x&&(b.opts.keys=c.keys?f.extend({},b.defaults.keys,c.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1===b.trigger("onCancel")||(b.hideLoading(),a&&(b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&& 10 | a.wrap.stop(!0,!0).trigger("onReset").remove(),b.coming=null,b.current||b._afterZoomOut(a)))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(b.isOpen&&!0!==a?(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]()):(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut())))},play:function(a){var c=function(){clearTimeout(b.player.timer)}, 11 | d=function(){c();b.current&&b.player.isActive&&(b.player.timer=setTimeout(b.next,b.current.playSpeed))},e=function(){c();p.unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};!0===a||!b.player.isActive&&!1!==a?b.current&&(b.current.loop||b.current.index=e.index?"next":"prev"],b.router=d||"jumpto",e.loop&&(0>a&&(a=e.group.length+a%e.group.length),a%=e.group.length),e.group[a]!==x&&(b.cancel(),b._start(a)))},reposition:function(a,c){var d=b.current,e=d?d.wrap:null,k;e&&(k=b._getPosition(c),a&&"scroll"===a.type?(delete k.position,e.stop(!0,!0).animate(k,200)):(e.css(k), 13 | d.pos=f.extend({},d.dim,k)))},update:function(a){var c=a&&a.originalEvent&&a.originalEvent.type,d=!c||"orientationchange"===c;d&&(clearTimeout(D),D=null);b.isOpen&&!D&&(D=setTimeout(function(){var e=b.current;e&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(d||"load"===c||"resize"===c&&e.autoResize)&&b._setDimension(),"scroll"===c&&e.canShrink||b.reposition(a),b.trigger("onUpdate"),D=null)},d&&!u?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView, 14 | u&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"),b.trigger("onUpdate")),b.update())},hideLoading:function(){p.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,c;b.hideLoading();a=f(b.opts.tpl.loading).click(b.cancel).appendTo("body");p.bind("keydown.loading",function(a){27===(a.which||a.keyCode)&&(a.preventDefault(),b.cancel())});b.defaults.fixed||(c=b.getViewport(),a.css({position:"absolute",top:.5*c.h+c.y,left:.5*c.w+c.x}));b.trigger("onLoading")},getViewport:function(){var a= 15 | b.current&&b.current.locked||!1,c={x:q.scrollLeft(),y:q.scrollTop()};a&&a.length?(c.w=a[0].clientWidth,c.h=a[0].clientHeight):(c.w=u&&t.innerWidth?t.innerWidth:q.width(),c.h=u&&t.innerHeight?t.innerHeight:q.height());return c},unbindEvents:function(){b.wrap&&v(b.wrap)&&b.wrap.unbind(".fb");p.unbind(".fb");q.unbind(".fb")},bindEvents:function(){var a=b.current,c;a&&(q.bind("orientationchange.fb"+(u?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(c=a.keys)&&p.bind("keydown.fb", 16 | function(d){var e=d.which||d.keyCode,k=d.target||d.srcElement;if(27===e&&b.coming)return!1;d.ctrlKey||d.altKey||d.shiftKey||d.metaKey||k&&(k.type||f(k).is("[contenteditable]"))||f.each(c,function(c,k){if(1h.clientWidth||h.clientHeight&&h.scrollHeight>h.clientHeight),d=f(d).parent();0!==e&&!h&&1g||0>k)&&b.next(0>g?"up":"right"),c.preventDefault())}))},trigger:function(a,c){var d,e=c||b.coming||b.current;if(e){f.isFunction(e[a])&&(d=e[a].apply(e,Array.prototype.slice.call(arguments,1)));if(!1===d)return!1;e.helpers&&f.each(e.helpers,function(c, 18 | d){if(d&&b.helpers[c]&&f.isFunction(b.helpers[c][a]))b.helpers[c][a](f.extend(!0,{},b.helpers[c].defaults,d),e)})}p.trigger(a)},isImage:function(a){return r(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(a){return r(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var c={},d,e;a=m(a);d=b.group[a]||null;if(!d)return!1;c=f.extend(!0,{},b.opts,d);d=c.margin;e=c.padding;"number"===f.type(d)&&(c.margin=[d,d,d,d]);"number"===f.type(e)&&(c.padding= 19 | [e,e,e,e]);c.modal&&f.extend(!0,c,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});c.autoSize&&(c.autoWidth=c.autoHeight=!0);"auto"===c.width&&(c.autoWidth=!0);"auto"===c.height&&(c.autoHeight=!0);c.group=b.group;c.index=a;b.coming=c;if(!1===b.trigger("beforeLoad"))b.coming=null;else{e=c.type;d=c.href;if(!e)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=!0;if("image"=== 20 | e||"swf"===e)c.autoHeight=c.autoWidth=!1,c.scrolling="visible";"image"===e&&(c.aspectRatio=!0);"iframe"===e&&u&&(c.scrolling="scroll");c.wrap=f(c.tpl.wrap).addClass("fancybox-"+(u?"mobile":"desktop")+" fancybox-type-"+e+" fancybox-tmp "+c.wrapCSS).appendTo(c.parent||"body");f.extend(c,{skin:f(".fancybox-skin",c.wrap),outer:f(".fancybox-outer",c.wrap),inner:f(".fancybox-inner",c.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){c.skin.css("padding"+b,y(c.padding[a]))});b.trigger("onReady"); 21 | if("inline"===e||"html"===e){if(!c.content||!c.content.length)return b._error("content")}else if(!d)return b._error("href");"image"===e?b._loadImage():"ajax"===e?b._loadAjax():"iframe"===e?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width= 22 | this.width/b.opts.pixelRatio;b.coming.height=this.height/b.opts.pixelRatio;b._afterLoad()};a.onerror=function(){this.onload=this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,d){b.coming&&"abort"!==d?b._error("ajax",a):b.hideLoading()},success:function(c,d){"success"===d&&(a.content=c,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming, 23 | c=f(a.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",u?"auto":a.iframe.scrolling).attr("src",a.href);f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(d){}});a.iframe.preload&&(b.showLoading(),c.one("load",function(){f(this).data("ready",1);u||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=c.appendTo(a.inner);a.iframe.preload|| 24 | b._afterLoad()},_preloadImages:function(){var a=b.group,c=b.current,d=a.length,e=c.preload?Math.min(c.preload,d-1):0,f,g;for(g=1;g<=e;g+=1)f=a[(c.index+g)%d],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,c=b.current,d,e,k,g,l;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,c))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{c&&(b.trigger("beforeChange",c),c.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove()); 25 | b.unbindEvents();d=a.content;e=a.type;k=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin,outer:a.outer,inner:a.inner,current:a,previous:c});g=a.href;switch(e){case "inline":case "ajax":case "html":a.selector?d=f("
    ").html(d).find(a.selector):v(d)&&(d.data("fancybox-placeholder")||d.data("fancybox-placeholder",f('
    ').insertAfter(d).hide()),d=d.show().detach(),a.wrap.bind("onReset",function(){f(this).find(d).length&&d.hide().replaceAll(d.data("fancybox-placeholder")).data("fancybox-placeholder", 26 | !1)}));break;case "image":d=a.tpl.image.replace(/\{href\}/g,g);break;case "swf":d='',l="",f.each(a.swf,function(a,b){d+='';l+=" "+a+'="'+b+'"'}),d+='"}v(d)&&d.parent().is(a.inner)||a.inner.append(d);b.trigger("beforeShow"); 27 | a.inner.css("overflow","yes"===k?"scroll":"no"===k?"hidden":k);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(!b.isOpened)f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();else if(c.prevMethod)b.transitions[c.prevMethod]();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),c=0,d,e=b.wrap,k=b.skin,g=b.inner,l=b.current;d=l.width;var h=l.height,n=l.minWidth,w=l.minHeight,p=l.maxWidth, 28 | q=l.maxHeight,u=l.scrolling,r=l.scrollOutside?l.scrollbarWidth:0,z=l.margin,A=m(z[1]+z[3]),t=m(z[0]+z[2]),x,B,v,E,C,H,D,F,I;e.add(k).add(g).width("auto").height("auto").removeClass("fancybox-tmp");z=m(k.outerWidth(!0)-k.width());x=m(k.outerHeight(!0)-k.height());B=A+z;v=t+x;E=G(d)?(a.w-B)*m(d)/100:d;C=G(h)?(a.h-v)*m(h)/100:h;if("iframe"===l.type){if(I=l.content,l.autoHeight&&I&&1===I.data("ready"))try{I[0].contentWindow.document.location&&(g.width(E).height(9999),H=I.contents().find("body"),r&&H.css("overflow-x", 29 | "hidden"),C=H.outerHeight(!0))}catch(M){}}else if(l.autoWidth||l.autoHeight)g.addClass("fancybox-tmp"),l.autoWidth||g.width(E),l.autoHeight||g.height(C),l.autoWidth&&(E=g.width()),l.autoHeight&&(C=g.height()),g.removeClass("fancybox-tmp");d=m(E);h=m(C);F=E/C;n=m(G(n)?m(n,"w")-B:n);p=m(G(p)?m(p,"w")-B:p);w=m(G(w)?m(w,"h")-v:w);q=m(G(q)?m(q,"h")-v:q);H=p;D=q;l.fitToView&&(p=Math.min(a.w-B,p),q=Math.min(a.h-v,q));B=a.w-A;t=a.h-t;l.aspectRatio?(d>p&&(d=p,h=m(d/F)),h>q&&(h=q,d=m(h*F)),dB||A>t)&&d>n&&h>w&&!(19p&&(d=p,h=m(d/F)),g.width(d).height(h),e.width(d+z),a=e.width(),A=e.height();else d=Math.max(n,Math.min(d,d-(a-B))),h=Math.max(w,Math.min(h,h-(A-t)));r&&"auto"===u&&hB||A>t)&&d>n&&h>w;d=l.aspectRatio?dw&&h
    ').appendTo(c&&c.length?c:"body");this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var c=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(q.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&& 40 | this.overlay.bind("click.overlay",function(a){if(f(a.target).hasClass("fancybox-overlay"))return b.isActive?b.close():c.close(),!1});this.overlay.css(a.css).show()},close:function(){q.unbind("resize.overlay");this.el.hasClass("fancybox-lock")&&(f(".fancybox-margin").removeClass("fancybox-margin"),this.el.removeClass("fancybox-lock"),q.scrollTop(this.scrollV).scrollLeft(this.scrollH));f(".fancybox-overlay").remove().hide();f.extend(this,{overlay:null,fixed:!1})},update:function(){var a="100%",b;this.overlay.width(a).height("100%"); 41 | K?(b=Math.max(J.documentElement.offsetWidth,J.body.offsetWidth),p.width()>b&&(a=p.width())):p.width()>q.width()&&(a=p.width());this.overlay.width(a).height(p.height())},onReady:function(a,b){var d=this.overlay;f(".fancybox-overlay").stop(!0,!0);d||this.create(a);a.locked&&this.fixed&&b.fixed&&(b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){b.locked&&!this.el.hasClass("fancybox-lock")&&(!1!==this.fixPosition&&f("*:not(object)").filter(function(){return"fixed"=== 42 | f(this).css("position")&&!f(this).hasClass("fancybox-overlay")&&!f(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin"),this.scrollV=q.scrollTop(),this.scrollH=q.scrollLeft(),this.el.addClass("fancybox-lock"),q.scrollTop(this.scrollV).scrollLeft(this.scrollH));this.open(a)},onUpdate:function(){this.fixed||this.update()},afterClose:function(a){this.overlay&&!b.coming&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float", 43 | position:"bottom"},beforeShow:function(a){var c=b.current,d=c.title,e=a.type;f.isFunction(d)&&(d=d.call(c.element,c));if(r(d)&&""!==f.trim(d)){c=f('
    '+d+"
    ");switch(e){case "inside":e=b.skin;break;case "outside":e=b.wrap;break;case "over":e=b.inner;break;default:e=b.skin,c.appendTo("body"),K&&c.width(c.width()),c.wrapInner(''),b.current.margin[2]+=Math.abs(m(c.css("margin-bottom")))}c["top"===a.position?"prependTo": 44 | "appendTo"](e)}}};f.fn.fancybox=function(a){var c,d=f(this),e=this.selector||"",k=function(g){var l=f(this).blur(),h=c,k,m;g.ctrlKey||g.altKey||g.shiftKey||g.metaKey||l.is(".fancybox-wrap")||(k=a.groupAttr||"data-fancybox-group",m=l.attr(k),m||(k="rel",m=l.get(0)[k]),m&&""!==m&&"nofollow"!==m&&(l=e.length?f(e):d,l=l.filter("["+k+'="'+m+'"]'),h=l.index(this)),a.index=h,!1!==b.open(l,a)&&g.preventDefault())};a=a||{};c=a.index||0;e&&!1!==a.live?p.undelegate(e,"click.fb-start").delegate(e+":not('.fancybox-item, .fancybox-nav')", 45 | "click.fb-start",k):d.unbind("click.fb-start").bind("click.fb-start",k);this.filter("[data-fancybox-start=1]").trigger("click");return this};p.ready(function(){var a,c;f.scrollbarWidth===x&&(f.scrollbarWidth=function(){var a=f('
    ').appendTo("body"),b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});f.support.fixedPosition===x&&(f.support.fixedPosition=function(){var a=f('
    ').appendTo("body"), 46 | b=20===a[0].offsetTop||15===a[0].offsetTop;a.remove();return b}());f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")});a=f(t).width();L.addClass("fancybox-lock-test");c=f(t).width();L.removeClass("fancybox-lock-test");f("").appendTo("head")})})(window,document,jQuery); 47 | -------------------------------------------------------------------------------- /assets/jquery.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery v1.11.2 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ 2 | !function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.2",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; 3 | return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
    a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:k.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("