diff --git a/.gitignore b/.gitignore index 008ff31428af567d9c366d0352e378e90e826ae8..4c2d980ad58801247e4c85e3508c95d734b79055 100644 --- a/.gitignore +++ b/.gitignore @@ -5,10 +5,7 @@ /accounts /data/scheduler /data/.gitkeep -/plugins -!/plugins/simplesearch/* -!/plugins/simplesearch/*/* -!/plugins/simplesearch/*/*/* +/plugins/* config/security.yaml config/versions.yaml config/plugins/git-sync.yaml diff --git a/pages/01.home/_about/11.jpg b/pages/01.home/_about/11.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6199f752b1d7cd7d7c7a446c0e0210b8b0ec4911 Binary files /dev/null and b/pages/01.home/_about/11.jpg differ diff --git a/pages/01.home/_about/110.jpg b/pages/01.home/_about/110.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ba4bb0fecfed810a9358b14d26f158de0357454 Binary files /dev/null and b/pages/01.home/_about/110.jpg differ diff --git a/pages/01.home/_about/111.jpg b/pages/01.home/_about/111.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1f403d27fea5c743033f409e5529666be21004a0 Binary files /dev/null and b/pages/01.home/_about/111.jpg differ diff --git a/pages/01.home/_about/112.jpg b/pages/01.home/_about/112.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1c73b0c2cb3266e53ca5775f11a1699c02ae24b Binary files /dev/null and b/pages/01.home/_about/112.jpg differ diff --git a/pages/01.home/_about/114.jpg b/pages/01.home/_about/114.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f1430466b310f208dc81e03e67b786bb163ff6a Binary files /dev/null and b/pages/01.home/_about/114.jpg differ diff --git a/pages/01.home/_about/115.jpg b/pages/01.home/_about/115.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b59086ba49b4b54a355256531cd666d25e9955c Binary files /dev/null and b/pages/01.home/_about/115.jpg differ diff --git a/pages/01.home/_about/118.jpg b/pages/01.home/_about/118.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4cca945b1517d862c68e9f33d90ed1d0119485f0 Binary files /dev/null and b/pages/01.home/_about/118.jpg differ diff --git a/pages/01.home/_about/119.jpg b/pages/01.home/_about/119.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c47ca5ca2dbfd2458e22ddac67cecb30769cb82c Binary files /dev/null and b/pages/01.home/_about/119.jpg differ diff --git a/pages/01.home/_about/12.jpg b/pages/01.home/_about/12.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b18e89c19febe85c161c904ac6fe0bda0829d3b5 Binary files /dev/null and b/pages/01.home/_about/12.jpg differ diff --git a/pages/01.home/_about/120.jpg b/pages/01.home/_about/120.jpg new file mode 100644 index 0000000000000000000000000000000000000000..19efe3fb5d146b1da29b4c42bc6c59a1f9b389ec Binary files /dev/null and b/pages/01.home/_about/120.jpg differ diff --git a/pages/01.home/_about/121.jpg b/pages/01.home/_about/121.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d920aa0be7696d3d5c036f3b6cd9bff5b64f4ba Binary files /dev/null and b/pages/01.home/_about/121.jpg differ diff --git a/pages/01.home/_about/13.jpg b/pages/01.home/_about/13.jpg new file mode 100644 index 0000000000000000000000000000000000000000..acc5528d8b8da9cab54fe6a959701703981bdfa2 Binary files /dev/null and b/pages/01.home/_about/13.jpg differ diff --git a/pages/01.home/_about/14.jpg b/pages/01.home/_about/14.jpg new file mode 100644 index 0000000000000000000000000000000000000000..530017d0d064003ff73a2d1a0d8a4cbb2e026464 Binary files /dev/null and b/pages/01.home/_about/14.jpg differ diff --git a/pages/01.home/_about/15.jpg b/pages/01.home/_about/15.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a596eb6d8626a6e4a87047c43f42a1e4b977240b Binary files /dev/null and b/pages/01.home/_about/15.jpg differ diff --git a/pages/01.home/_about/16.jpg b/pages/01.home/_about/16.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26467b6bcc4f9ec3935eced15d1f759ab3388d42 Binary files /dev/null and b/pages/01.home/_about/16.jpg differ diff --git a/pages/01.home/_about/17.jpg b/pages/01.home/_about/17.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1f1226921ebd463e85477dd7e96c90ea76fb5d66 Binary files /dev/null and b/pages/01.home/_about/17.jpg differ diff --git a/pages/01.home/_about/3.jpg b/pages/01.home/_about/3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4991ebd30bebbc00a86200c04f38c9e7c012f211 Binary files /dev/null and b/pages/01.home/_about/3.jpg differ diff --git a/pages/01.home/_about/30.jpg b/pages/01.home/_about/30.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6a65f1333b59834fd8bfe83d89dde9f04b1cb423 Binary files /dev/null and b/pages/01.home/_about/30.jpg differ diff --git a/pages/01.home/_about/5.jpg b/pages/01.home/_about/5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1ce0d8af20f264ebf7ec83b5ba3eb5d4250eec5a Binary files /dev/null and b/pages/01.home/_about/5.jpg differ diff --git a/pages/01.home/_about/6.jpg b/pages/01.home/_about/6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eeb3a17ca73e00677b0e540381a1f24918ea980a Binary files /dev/null and b/pages/01.home/_about/6.jpg differ diff --git a/pages/01.home/_about/8.jpg b/pages/01.home/_about/8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d595865f77e15b2ded2a74ed53b40801c709942 Binary files /dev/null and b/pages/01.home/_about/8.jpg differ diff --git a/pages/01.home/_about/about.md b/pages/01.home/_about/about.md index 67bc3a351b8002a1d996b3d95eafb7e3cf7bc1ad..d1b9a3c24788cf6ec4bace49a667d62d846d1565 100644 --- a/pages/01.home/_about/about.md +++ b/pages/01.home/_about/about.md @@ -20,4 +20,8 @@ columns: text: Begriffe, Definitionen und Differenzierung von OpenEcoLabs für ein gutes gemeinsames Verständnis. button_text: Zum FAQ button_url: /faq +never_cache_twig: true # wenn der Slider in ein anderes Modul soll: die Zeilen ab hier rüber-cutten, die Bilder im Ordner rüber, und im twig template den entsprechenden Codeblock ab "<div class="modular-row..." rüber ins Template des neuen Moduls +unitegallery: + gallery_id: images + gallery_theme: compact --- diff --git a/pages/01.home/modular.md b/pages/01.home/modular.md index 4721a7e8e97dd80060ed6239698ba835651e0f06..e870a67ff517ca8a294b9cdd5f5167a391301a0e 100755 --- a/pages/01.home/modular.md +++ b/pages/01.home/modular.md @@ -21,4 +21,8 @@ content: # - _text # - _video # - _news + +unitegallery: + assets_in_meta: true + --- diff --git a/plugins/unitegallery/CHANGELOG.md b/plugins/unitegallery/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..e9285a41fee3e9570b16500a365a0a0c673a82f4 --- /dev/null +++ b/plugins/unitegallery/CHANGELOG.md @@ -0,0 +1,40 @@ +# v1.1.3 +## 2017-05-19 + +1. [](#bugfix) + * Allow to use gallery in non-modular pages + [https://github.com/variar/grav-plugin-unitegallery/issues/8](https://github.com/variar/grav-plugin-unitegallery/issues/8) + + +# v1.1.2 +## 2017-04-03 + +1. [](#new) + * Allow to pass custom gallery id in json options + +# v1.1.1 +## 2017-04-03 + +1. [](#new) + * Allow to pass custom gallery id to have several galleries per page. + +# v1.1.0 +## 2017-04-02 + +1. [](#new) + * Changed assets loading scheme to allow caching of pages with galleries + +# v1.0.1 +## 2017-03-26 + + +1. [](#bugfix) + * Fix validation of gallery div id field + [https://github.com/variar/grav-plugin-unitegallery/issues/2](https://github.com/variar/grav-plugin-unitegallery/issues/2) + + +# v1.0.0 +## 2017-03-19 + +1. [](#new) + * ChangeLog started... diff --git a/plugins/unitegallery/LICENSE b/plugins/unitegallery/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..46b16acf849e624b6312265a6f1a8fcfddb13ee2 --- /dev/null +++ b/plugins/unitegallery/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2017 Anton Filimonov + +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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +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. diff --git a/plugins/unitegallery/README.md b/plugins/unitegallery/README.md new file mode 100644 index 0000000000000000000000000000000000000000..554f55e78f9411656836c384395b35b04c420adc --- /dev/null +++ b/plugins/unitegallery/README.md @@ -0,0 +1,214 @@ +# Grav Unitegallery Plugin + +`Unitegallery` is a [Grav](http://github.com/getgrav/grav) Plugin that provides +[Twig](http://github.com/twigphp/Twig) extension for creating images gallery using [Unitegallery](http://unitegallery.net) +javascript library + +# Installation + +Installing the Unitegallery plugin can be done in one of two ways. The GPM (Grav Package Manager) installation method enables you to quickly and easily install the plugin with a simple terminal command, while the manual method enables you to do so via a zip file. + +## GPM Installation (Preferred) + +The simplest way to install this plugin is via the [Grav Package Manager (GPM)](http://learn.getgrav.org/advanced/grav-gpm) through your system's terminal (also called the command line). From the root of your Grav install type: + + bin/gpm install unitegallery + +This will install the Unitegallery plugin into your `/user/plugins` directory within Grav. Its files can be found under `/your/site/grav/user/plugins/unitegallery`. + +## Manual Installation + +To install this plugin, just download the zip version of this repository and unzip it under `/your/site/grav/user/plugins`. Then, rename the folder to `unitegallery`. +You can find these files on [GitHub](https://github.com/getgrav/grav-plugin-unitegallery). + +You should now have all the plugin files under + + /your/site/grav/user/plugins/unitegallery + +>> NOTE: This plugin is a modular component for Grav which requires [Grav](http://github.com/getgrav/grav), and a theme to be installed in order to operate. + +# Usage + +The `unitegallery` provides new [Twig](http://github.com/twigphp/Twig) extension that adds function `unite_gallery` +to be used in templates. Pass images collection as firts argument and gallery +options (json string) as optional second argument. + +This functions goes through each image in passed collection, generates thumbnails (which are cached), +collects images metadata and outputs special div as required by [Unitegallery](http://unitegallery.net) +javascript library. Also all css and js files needed for selected theme are added to page assets. + +>> NOTE: When page with the gallery is loaded first time thumbnails for each new image are generated. This can be quite time consuming process. Consider loading page manually when new images are added, so that users of your site will not encounter long page load time. + +To create the gallery you should call `unite_gallery` from twig template for desired page. +For example add template `gallery.html.twig` inside `<your_theme>/templates/modular` directory with simple content: +``` +<div class="modular-row gallery-container {{ page.header.class }}"> + {{ unite_gallery(page.media.images) }} +</div> +``` + +Then create new subpage with name `gallery.md` inside your modular page and add some images so the structure looks like this: +``` +user +|--pages + |--page1 + |--page2 + |--page_with_gallery + |--modular.md + |--_pictures + |--gallery.md + |--image01.jpg + |--image01.jpg.meta.yaml + |--image02.jpg + |--image02.jpg.meta.yaml +``` + +Content of `gallery.md` can be like this: +``` +--- +title: My fancy gallery +--- +``` + +And `modular.md` simply includes child pages: +``` +--- +title: My Gallery Page + +content: + items: @self.modular +--- +``` + +To pass custom gallery parameters modify twig template and pass them as json: +``` +// with custom options (passed directly to unitegallery js function) +{{ unite_gallery(page.media.images, '{"gallery_theme":"tiles", "tiles_type":"justified"}') }} +``` + +Output html example: + +```html + <div id="unite-gallery" style="display:none;"> + <img alt="Image 1 Title" src="/images/6/6/8/a/2/668a2df0c6571575ae7dd9216234864a4f7c4bc0.jpg" + data-image="/images/9/f/a/5/d/9fa5d6c0eb6c711fd4a9f58f9c13c3f191b66cb4.jpg" + data-description="Image 1 Description"> + </div> + + <script type="text/javascript"> + jQuery(document).ready(function(){ + jQuery("#unite-gallery").unitegallery({"tiles_type":"justified","gallery_theme":"tiles"}); + }); + </script> +``` + +Grav images [metadata files](https://learn.getgrav.org/content/media#metafiles) are used to fill title and description using following properties mapping: +* meta.alt_text is used for alt attribute +* meta.description is used for data-description attribute + +# Issues with page caching +This plugin uses twig function to add assets (js and css) to the page. +This doesn't work very well with Grav caching system. +There are two workarounds: + 1. Disable twig caching for the gallery page. + Adding `never_cache_twig: true` to `gallery.md` from example above should do the trick. + 2. Enabling `assets_in_meta` parameter for this plugin (either per page) or globally. + This will save assets calculated during first twig processing and add them + each time page is processed. This parameter is enabled by default. + After switching it on cache for all gallery pages should be updated (either by cleaning all cache or by doing some changes to affected pages). + For best perfomance consider disabling this mode globally and switching it on only for gallery pages. + Using the example above `modular.md` should look like this: + ``` + --- + title: My Gallery Page + + content: + items: @self.modular + + unitegallery: + assets_in_meta: true + --- + ``` + +# Several galleries in one modular page +If several galleries are going to be used on the same page then optional third +argument should be passed to `unite_gallery` function to create `div` elements +with custom ids: +``` +// with custom div id +{{ unite_gallery(page.media.images, '{"gallery_theme":"tiles", "tiles_type":"justified"}', 'gallery1') }} +{{ unite_gallery(page.media.images, '{}', 'gallery2') }} +``` + +Also custom id can be set in json options: +``` +// with custom div id in json options +{{ unite_gallery(page.media.images, '{"gallery_theme":"tiles", "grav_gallery_div_id":"gallery1"}') }} +``` + +This allows to create galleries from several subfolders of modular page: + +``` +user +|--pages + |--page1 + |--page2 + |--page_with_gallery + |--modular.md + |--_photo1 + | |--gallery.md + | |--image01.jpg + | |--image01.jpg.meta.yaml + | |--image02.jpg + | |--image02.jpg.meta.yaml + |--_photo2 + |--gallery.md + |--image01.jpg + |--image01.jpg.meta.yaml + |--image02.jpg + |--image02.jpg.meta.yaml +``` + +To pass gallery ids from page header `gallery.html.twig` should be modified: +``` +<div class="modular-row gallery-container {{ page.header.class }}"> + {{ unite_gallery(page.media.images, {"gallery_theme":"tiles"}, page.header.unitegallery.gallery_id) }} +</div> +``` + +Then in `gallery.md` files for individual galleries set gallery_id in page header: +``` +--- +title: My fancy gallery +unitegallery: + gallery_id: gallery1 +--- +``` + +# Gallery in non-modular page +When using gallery in non-modular page gallery theme **must** be set in page header: +``` +--- +title: My fancy gallery +unitegallery: + gallery_theme: tiles +--- +``` + +Call to unite_gallery in page template **must** either take theme from page header or not set it at all: +``` +<div class="gallery-container {{ page.header.class }}"> + {{ unite_gallery(page.media.images, {"gallery_theme":page.header.unitegallery.gallery_theme}, page.header.unitegallery.gallery_id) }} +</div> +``` + +# Config Defaults + +``` +enabled: true +assets_in_meta: true +gallery_theme: default +gallery_div_id: unite-gallery +thumb_width: 600 +thumb_height: 600 +``` diff --git a/plugins/unitegallery/blueprints.yaml b/plugins/unitegallery/blueprints.yaml new file mode 100644 index 0000000000000000000000000000000000000000..78cc90db05f2673d1f986babefe3640d32958420 --- /dev/null +++ b/plugins/unitegallery/blueprints.yaml @@ -0,0 +1,77 @@ +name: Unitegallery +version: 1.1.3 +description: This plugin adds twig function to create media galleries using Unitegallery js library +icon: th-large +author: + name: Anton Filimonov + email: anton.filimonov@gmail.com +homepage: https://github.com/variar/grav-plugin-unitegallery +bugs: https://github.com/variar/grav-plugin-unitegallery/issues +license: MIT +keywords: gallery, images, unitegallery + +form: + validation: strict + fields: + enabled: + type: toggle + label: Plugin status + highlight: 1 + default: 0 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + assets_in_meta: + type: toggle + label: Store assets in page metadata + help: Allows to pass assets from twig to this plugin in case of caching. Can be enabled per-page. Cache should be rebuilt after enabling this. + highlight: 1 + default: 1 + options: + 1: Enabled + 0: Disabled + validate: + type: bool + + gallery_theme: + type: select + label: Gallery theme + help: Select theme for the gallery that will be used by default. Can be customized from twig. + default: default + options: + default: Default + tiles: Tiles + tilesgrid: TilesGrid + carousel: Carousel + compact: Compact + grid: Grid + slider: Slider + + gallery_div_id: + type: text + label: Id for gallery div + help: Use this to set desired div id for the main gallery div + default: 'unite-gallery' + validate: + type: text + pattern: ^\S+$ + message: Valid HTML5 element Id expected (no whitespace charachers allowed) + + thumb_width: + type: number + label: Thumbnail width + default: 600 + validate: + type: number + min: 100 + + thumb_height: + type: integer + label: Thumbnail height + default: 600 + validate: + type: number + min: 100 diff --git a/plugins/unitegallery/twig/unitegallery_extension.php b/plugins/unitegallery/twig/unitegallery_extension.php new file mode 100644 index 0000000000000000000000000000000000000000..d2b6be066cc091d8d3a72dd318dbea5542058d83 --- /dev/null +++ b/plugins/unitegallery/twig/unitegallery_extension.php @@ -0,0 +1,178 @@ +<?php +/** + * @author Anton Filimonov <anton.filimonov@gmail.com> + */ +use Grav\Common\Grav; +use Grav\Common\Page\Medium\ImageFile; +use Grav\Common\Page\Medium\ImageMedium; +use Gregwar\Image\Image; + +class UniteGalleryTwigExtension extends \Twig_Extension +{ + /** @var Grav */ + protected $grav; + protected $gallery_theme; + protected $gallery_div_id; + protected $thumb_width; + protected $thumb_height; + + protected $locator; + protected $assets; + + public function __construct() + { + $this->grav = Grav::instance(); + $this->locator = $this->grav['locator']; + $this->assets = $this->grav['assets']; + + $this->loadParamsFromConfig([ + 'gallery_theme' => 'gallery_theme', + 'gallery_div_id' => 'gallery_div_id', + 'thumb_width' => 'thumb_width', + 'thumb_height' => 'thumb_height', + ], 'plugins.unitegallery.'); + } + + public function getName() { + return 'UniteGalleryTwigExtension'; + } + + public function getFunctions() + { + return [ + new \Twig_SimpleFunction('unite_gallery', [$this, 'uniteGallery']), + ]; + } + + /** + * @param ImageMedium[] $images + * @param string $options + * @param string $custom_gallery_id + * @return string + */ + public function uniteGallery(array $images, $options = '{}', $custom_gallery_id = null) + { + $gallery_theme = null; + + $page_gallery_theme = null; + $page_header = $this->grav["page"]->header(); + if(property_exists($page_header, "unitegallery.merged")) { + $page_gallery_theme = $page_header->{"unitegallery.merged"}->get("gallery_theme"); + } + + $gallery_options = json_decode($options); + if (property_exists($gallery_options, 'gallery_theme')) { + $gallery_theme = $gallery_options->gallery_theme; + } + else { + $gallery_theme = $page_gallery_theme; + is_null($gallery_theme) && $gallery_theme = $this->gallery_theme; + is_null($gallery_theme) && $gallery_theme = 'default'; + + $gallery_options->gallery_theme = $gallery_theme; + } + + $this->addAssets($gallery_theme); + + $gallery_div_id = $custom_gallery_id; + if (is_null($gallery_div_id) && property_exists($gallery_options, 'grav_gallery_div_id')) { + $gallery_div_id = $gallery_options->grav_gallery_div_id; + } + is_null($gallery_div_id) && $gallery_div_id = $this->gallery_div_id; + is_null($gallery_div_id) && $gallery_div_id = "unite-gallery"; + + return $this->buildImagesDiv($images, $gallery_div_id) + . $this->buildGalleryScript($gallery_options, $gallery_div_id); + } + + /** + * @param string $gallery_theme + * @return $this + */ + protected function addAssets($gallery_theme) + { + $assets_path = 'plugin://unitegallery/vendor/unitegallery/'; + $theme_assets_prefix = $assets_path . 'themes/' . $gallery_theme . '/ug-theme-'. $gallery_theme; + + $jsAssets = [$assets_path . 'js/unitegallery.min.js', $theme_assets_prefix . '.js']; + $cssAssets = [$assets_path . 'css/unite-gallery.css', $theme_assets_prefix . '.css']; + + // saving assets in page meta to use in pageInitialzied event hook + // for cached pages + $page = $this->grav['page']; + $pageMeta = $page->getContentMeta('unitegallery_assets'); + if (empty($pageMeta)) { + $pageMeta = ['js'=> [], 'css' => []]; + } + + foreach ($jsAssets as $js) { + $this->grav['assets']->addJs($js); + array_push($pageMeta['js'], $js); + } + foreach ($cssAssets as $css) { + $this->grav['assets']->addCss($css); + array_push($pageMeta['css'], $css); + } + + $page->addContentMeta('unitegallery_assets', $pageMeta); + + return $this; + } + + /** + * @param ImageMedium[] $images + * @return string + */ + protected function buildImagesDiv(array $images, $gallery_div_id = 'unite-gallery') + { + $output = '<div id="' . $gallery_div_id . '" style="display:none;">' . PHP_EOL; + + $cachePath = $this->locator->findResource('cache://images', true); + foreach ($images as $image) { + $thumbImagePath = Image::open($image->get('filepath')) + ->setCacheDir($cachePath) + ->setActualCacheDir($cachePath) + ->cropResize($this->thumb_width, $this->thumb_height) + ->jpeg(); + + $thumbMedium = \Grav\Common\Page\Medium\MediumFactory::fromFile($thumbImagePath); + + $meta = $image->meta(); + + $output .= '<img alt="' . $meta['alt_text'] . '"'; + $output .= ' data-description="' . $meta['description'] . '"'; + $output .= ' src="' . $thumbMedium->url() . '"'; + $output .= ' data-image="' . $image->url() . '"'; + $output .= '>' . PHP_EOL; + } + + $output .= '</div>' . PHP_EOL; + return $output; + } + + /** + * @param object $gallery_options + * @param string $gallery_div_id + * @return string + */ + protected function buildGalleryScript($gallery_options, $gallery_div_id = 'unite-gallery') + { + return '<script type="text/javascript"> + jQuery(document).ready(function(){ + jQuery("#' . $gallery_div_id . '").unitegallery('.json_encode($gallery_options).'); + }); + </script>' . PHP_EOL; + } + + /** + * @param array $mapParams + * @param string $configPrefix + * @return $this + */ + protected function loadParamsFromConfig(array $mapParams, $configPrefix) { + foreach ($mapParams as $nameConfigParam => $nameParam) { + $this->{$nameParam} = $this->grav['config']->get($configPrefix . $nameConfigParam); + } + return $this; + } +} diff --git a/plugins/unitegallery/unitegallery.php b/plugins/unitegallery/unitegallery.php new file mode 100644 index 0000000000000000000000000000000000000000..92321f8fb86c806884919fdd72471483e1ef3084 --- /dev/null +++ b/plugins/unitegallery/unitegallery.php @@ -0,0 +1,86 @@ +<?php +namespace Grav\Plugin; +use Grav\Common\Grav; +use Grav\Common\Plugin; + +class UniteGalleryPlugin extends Plugin +{ + /** + * @return array + */ + public static function getSubscribedEvents() + { + return [ + 'onPluginsInitialized' => ['onPluginsInitialized', 0], + ]; + } + + public function onPluginsInitialized() + { + // Don't proceed if we are in the admin plugin + if ($this->isAdmin()) { + return; + } + + $this->enable([ + 'onTwigExtensions' => ['onTwigExtensions', 0], + 'onPageInitialized' => ['onPageInitialized', 0], + ]); + } + + public function onTwigExtensions() + { + require_once(__DIR__ . '/twig/unitegallery_extension.php'); + $this->grav['twig']->twig->addExtension(new \UniteGalleryTwigExtension()); + } + + public function onPageInitialized() + { + $page = $this->grav['page']; + + $config = $this->mergeConfig($page); + + if (!$config->get('assets_in_meta', true)) + return; + + $meta = []; + + // Initialize all page content up front before Twig happens + if (isset($page->header()->content['items'])) { + foreach ($page->collection() as $item) { + $item->content(); + $item_meta = $item->getContentMeta('unitegallery_assets'); + if ($item_meta) { + $meta = array_merge_recursive($meta, $item_meta); + } + } + } + $page->content(); + + // get the meta and check for assets + $page_meta = $page->getContentMeta('unitegallery_assets'); + if ($page_meta) { + $meta = array_merge_recursive($meta, $page_meta); + } + + if (empty($meta)) { + $gallery_theme = $config->get('gallery_theme', "default"); + $assets_path = 'plugin://unitegallery/vendor/unitegallery/'; + $theme_assets_prefix = $assets_path . 'themes/' . $gallery_theme . '/ug-theme-'. $gallery_theme; + + $meta['js'] = [$assets_path . 'js/unitegallery.min.js', $theme_assets_prefix . '.js']; + $meta['css'] = [$assets_path . 'css/unite-gallery.css', $theme_assets_prefix . '.css']; + + $page->addContentMeta('unitegallery_assets', $meta); + } + + if (!empty($meta)) { + foreach ($meta['js'] as $js) { + $this->grav['assets']->addJs($js); + } + foreach ($meta['css'] as $css) { + $this->grav['assets']->addCss($css); + } + } + } +} diff --git a/plugins/unitegallery/unitegallery.yaml b/plugins/unitegallery/unitegallery.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f40d57c337ee5034a5f88059efd71fb854576134 --- /dev/null +++ b/plugins/unitegallery/unitegallery.yaml @@ -0,0 +1,6 @@ +enabled: true +assets_in_meta: true +gallery_theme: tiles +gallery_div_id: unite-gallery +thumb_width: 600 +thumb_height: 600 diff --git a/plugins/unitegallery/vendor/unitegallery/LICENSE.txt b/plugins/unitegallery/vendor/unitegallery/LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..4c1a4432e243dc27049ea6bd5215f03f09c4c59d --- /dev/null +++ b/plugins/unitegallery/vendor/unitegallery/LICENSE.txt @@ -0,0 +1,24 @@ +The MIT License (MIT) + +Copyright (c) 2015 Max Valiano | http://unitegallery.net + +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: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +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. diff --git a/plugins/unitegallery/vendor/unitegallery/css/unite-gallery.css b/plugins/unitegallery/vendor/unitegallery/css/unite-gallery.css new file mode 100644 index 0000000000000000000000000000000000000000..3a249e3da199470fee16c2ecf480721d6173ccdd --- /dev/null +++ b/plugins/unitegallery/vendor/unitegallery/css/unite-gallery.css @@ -0,0 +1,1361 @@ +.---------Protection--------{} + +.ug-gallery-wrapper, +.ug-gallery-wrapper *{ + transition: all !important; + -o-transition: all !important; + -webkit-transition: all; + -moz-transition: all !important; + -ms-transition: all !important; + max-width:none; +} + +.ug-gallery-wrapper{ + z-index:0; +} + +.ug-item-wrapper img{ + width:auto; + max-width:none; + margin:0px; + padding:0px; +} + +.ug-videoplayer-wrapper video{ + height:100%; + width:100%; + visibility: visible !important; +} + + +.---------General_Styles--------{} + +.ug-rtl{ + direction:rtl; +} + +.ug-gallery-wrapper{ + overflow:hidden; + position:relative; + font-family:Arial, Helvetica, sans-serif; +} + +.ug-error-message{ + text-align:center; + padding-top:30px; + padding-bottom:30px; + font-size:20px; + color:#F30D0D; +} + +.ug-error-message-wrapper{ + width:100%; + height:100%; + border:1px solid black; +} + +.ug-gallery-wrapper .ug-canvas-pie{ + position:absolute; + z-index:4; +} + +.ug-gallery-wrapper .ug-progress-bar{ + position:absolute; + overflow:hidden; + z-index:4; +} + +.ug-gallery-wrapper .ug-progress-bar-inner{ + xposition:absolute; +} + +.ug-gallery-wrapper.ug-fullscreen{ + height: 100% !important; + width: 100% !important; + max-width:none !important; + max-height:none !important; +} + +.ug-gallery-wrapper.ug-fake-fullscreen{ + position: fixed !important; + height: auto !important; + width: auto !important; + max-width:none !important; + max-height:none !important; + margin: 0px !important; + padding: 0px !important; + top: 0px !important; + left: 0px !important; + bottom: 0px !important; + right: 0px !important; + z-index: 999999 !important; +} + +.ug-body-fullscreen{ + overflow: hidden !important; + height: 100% !important; + width: 100% !important; + margin:0px !important; + padding:0px !important; +} + +.ug-gallery-wrapper .ug-preloader-trans{ + display:block; + height:35px; + width:32px; + height:32px; + background-image:url('../images/loader_skype_trans.gif'); + background-repeat:no-repeat; +} + + +.--------------SLIDER------------------{} + +.ug-gallery-wrapper .ug-slider-wrapper{ + position:absolute; + overflow:hidden; + z-index:1; + background-color:#000000; +} + + +.ug-slider-wrapper .ug-slide-wrapper{ + position:absolute; +} + +.ug-slide-wrapper.ug-slide-clickable{ + cursor:pointer; +} + +.ug-slider-wrapper .ug-slider-inner{ + position:absolute; + z-index:0; +} + +.ug-slider-wrapper .ug-item-wrapper{ + position:absolute; + overflow:hidden; +} + +.ug-slider-wrapper, +.ug-item-wrapper img{ + + -webkit-user-select: none; /* make unselectable */ + -moz-user-select: none; + -ms-user-select: none; + max-width:none !important; + box-sizing:border-box; +} + +.ug-slider-wrapper .ug-slider-preloader{ + position:absolute; + z-index:1; + border:2px solid #ffffff; + border-radius:6px; + background-color:#ffffff; + background-position:center center; + background-repeat:no-repeat; +} + +.ug-slider-preloader.ug-loader1{ + width:30px; + height:30px; + background-image:url('../images/loader-white1.gif'); +} + +.ug-slider-preloader.ug-loader1.ug-loader-black{ + background-image:url('../images/loader-black1.gif'); +} + +.ug-slider-preloader.ug-loader2{ + width:32px; + height:32px; + background-image:url('../images/loader-white2.gif'); +} + +.ug-slider-preloader.ug-loader2.ug-loader-black{ + background-image:url('../images/loader-black2.gif'); +} + +.ug-slider-preloader.ug-loader3{ + width:38px; + height:38px; + background-image:url('../images/loader-white3.gif'); +} + +.ug-slider-preloader.ug-loader3.ug-loader-black{ + background-image:url('../images/loader-black3.gif'); +} + +.ug-slider-preloader.ug-loader4{ + width:32px; + height:32px; + background-image:url('../images/loader-white4.gif'); + background-color:white; +} + +.ug-slider-preloader.ug-loader4.ug-loader-black{ + background-image:url('../images/loader-black4.gif'); +} + +.ug-slider-preloader.ug-loader5{ + width:60px; + height:8px; + background-image:url('../images/loader-white5.gif'); + background-color:white; + border:none; + border-radius:0px; +} + +.ug-slider-preloader.ug-loader5.ug-loader-black{ + background-image:url('../images/loader-black5.gif'); + border:2px solid #000000; +} + +.ug-slider-preloader.ug-loader6{ + width:32px; + height:32px; + background-image:url('../images/loader-white6.gif'); +} + +.ug-slider-preloader.ug-loader6.ug-loader-black{ + background-image:url('../images/loader-black6.gif'); +} + +.ug-slider-preloader.ug-loader7{ + width:32px; + height:10px; + background-image:url('../images/loader-white7.gif'); + border-width:3px; + border-radius:3px; +} + +.ug-slider-preloader.ug-loader7.ug-loader-black{ + background-image:url('../images/loader-black7.gif'); +} + +.ug-slider-preloader.ug-loader-black{ + border-color:#000000; + background-color:#000000; +} + +.ug-slider-preloader.ug-loader-nobg{ + background-color:transparent; +} + +.ug-slider-wrapper .ug-button-videoplay{ + position:absolute; + z-index:2; + cursor:pointer; +} + +.ug-slider-wrapper .ug-button-videoplay.ug-type-square{ + width:86px; + height:66px; + background-image:url('../images/play-button-square.png'); + background-position:0px -66px; +} + +.ug-slider-wrapper .ug-button-videoplay.ug-type-square.ug-button-hover{ + background-position:0px 0px; +} + + +.ug-slider-wrapper .ug-button-videoplay.ug-type-round{ + width:76px; + height:76px; + background-image:url('../images/play-button-round.png'); + opacity:0.9; + filter: alpha(opacity = 90); + transition: all 0.3s ease 0s !important; +} + + +.ug-slider-wrapper .ug-button-videoplay.ug-type-round.ug-button-hover{ + opacity:1; + filter: alpha(opacity = 100); + transition: all 0.3s ease 0s !important; +} + + +.--------------VIDEO_PLAYER------------------{} + +.ug-gallery-wrapper .ug-videoplayer{ + position:absolute; + z-index:100; + background-color:#000000; + background-image:url('../images/loader-black1.gif'); + background-repeat:no-repeat; + background-position:center center; + box-sizing:border-box; + -moz-box-sizing:border-box; +} + +.ug-videoplayer .ug-videoplayer-wrapper{ + width:100%; + height:100%; + background-color:#000000; + background-image:url('../images/loader-black1.gif'); + background-repeat:no-repeat; + background-position:center center; +} + + +.ug-videoplayer .ug-videoplayer-button-close{ + position:absolute; + height:64px; + width:64px; + background-image:url('../images/button-close.png'); + cursor:pointer; + z-index:1000; +} + + +.ug-videoplayer .ug-videoplayer-button-close:hover{ + background-position: 0px -64px; +} + +.--------------THUMBS_STRIP------------------{} + + +.ug-gallery-wrapper .ug-thumbs-strip, +.ug-gallery-wrapper .ug-thumbs-grid{ + position:absolute; + overflow:hidden; + + -webkit-user-select: none; /* make unselectable */ + -moz-user-select: none; + -ms-user-select: none; + + xbackground-color:green; + z-index:10; +} + +.ug-thumbs-strip.ug-dragging{ + xcursor: -webkit-grab; + xcursor: -moz-grab; +} + +.ug-gallery-wrapper .ug-thumbs-strip-inner, +.ug-gallery-wrapper .ug-thumbs-grid-inner{ + position:absolute; +} + +.ug-thumb-wrapper.ug-thumb-generated{ + position:absolute; + overflow:hidden; + + -webkit-user-select: none; /* make unselectable */ + -moz-user-select: none; + -ms-user-select: none; + + box-sizing:border-box; + -moz-box-sizing:border-box; +} + + +.ug-thumb-wrapper.ug-thumb-generated .ug-thumb-loader, +.ug-thumb-wrapper.ug-thumb-generated .ug-thumb-error{ + position:absolute; + top:0px; + left:0px; + background-repeat:no-repeat; + background-position:center center; +} + +.ug-thumb-wrapper .ug-thumb-border-overlay{ + position:absolute; + top:0px; + left:0px; + z-index:4; + box-sizing:border-box; + -moz-box-sizing:border-box; + border-style:solid; +} + +.ug-thumb-wrapper .ug-thumb-overlay{ + position:absolute; + top:0px; + left:0px; + z-index:3; +} + +.ug-thumb-wrapper.ug-thumb-generated .ug-thumb-loader-dark{ + background-image:url('../images/loader.gif'); +} + +.ug-thumb-wrapper.ug-thumb-generated .ug-thumb-loader-bright{ + background-image:url('../images/loader_bright.gif'); +} + +.ug-thumb-wrapper.ug-thumb-generated .ug-thumb-error{ + background-image:url('../images/not_loaded.png'); +} + +.ug-thumb-wrapper.ug-thumb-generated img{ + position:absolute; + z-index:1; + max-width:none !important; +} + +.ug-thumb-wrapper.ug-thumb-generated img.ug-thumb-image-overlay{ + position:absolute; + z-index:2; + max-width:none !important; +} + + +/* bw desaturate effect lightweight */ +img.ug-bw-effect{ + filter: grayscale(100%); + filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale"); /* Firefox 10+, Firefox on Android */ + -moz-filter: grayscale(100%); + -webkit-filter: grayscale(100%); +} + +/* blur effect desaturate effect lightweight */ +img.ug-blur-effect{ + + filter: blur(0.8px); + -webkit-filter: blur(0.8px); + -moz-filter: blur(0.8px); + -o-filter: blur(0.8px); + -ms-filter: blur(0.8px); + filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id='blur'><feGaussianBlur stdDeviation=\'0.8\' /></filter></svg>#blur"); /* Firefox 10+, Firefox on Android */ + filter:progid:DXImageTransform.Microsoft.Blur(PixelRadius='0.8'); +} + +img.ug-sepia-effect{ + -webkit-filter: sepia(1); + -webkit-filter: sepia(100%); -moz-filter: sepia(100%); + -ms-filter: sepia(100%); -o-filter: sepia(100%); + filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'sepia\'><feColorMatrix values=\'0.14 0.45 0.05 0 0 0.12 0.39 0.04 0 0 0.08 0.28 0.03 0 0 0 0 0 1 0\' /></filter></svg>#sepia"); /* Firefox 10+, Firefox on Android */ + filter: sepia(100%); + background-color: #5E2612; + filter: alpha(opacity = 50); + zoom:1; +} + + +.--------------BULLETS------------------{} + + +.ug-gallery-wrapper .ug-bullets{ + position: absolute; + top:0px; + left:0px; + margin:0px; + padding:0px; +} + +.ug-gallery-wrapper .ug-bullets .ug-bullet{ + background-repeat:no-repeat; + cursor:pointer; + display:block; + float:left; + z-index:2; +} + +.ug-gallery-wrapper .ug-bullets .ug-bullet:first-child{ + margin-left:0px; +} + + +.--------------TEXT_PANEL------------------{} + +.ug-gallery-wrapper .ug-textpanel{ + position:absolute; + overflow:hidden; +} + +.ug-slider-wrapper .ug-textpanel{ + z-index:2; +} + +.ug-gallery-wrapper .ug-textpanel-bg, +.ug-gallery-wrapper .ug-textpanel-title, +.ug-gallery-wrapper .ug-textpanel-description{ + display:block; + position:absolute; + margin:0px; + padding:0px; +} + + +.ug-gallery-wrapper .ug-textpanel-bg{ + background-color:#000000; + opacity:0.4; + filter: alpha(opacity = 40); + z-index:1; +} + +.ug-textpanel-textwrapper{ + overflow:hidden; +} + +.ug-gallery-wrapper .ug-textpanel-title{ + font-size:16px; + font-weight:bold; + color:white; + text-align:left; + z-index:2; +} + +.ug-gallery-wrapper .ug-textpanel-description{ + font-size:14px; + color:white; + text-align:left; + z-index:3; +} + + +.--------------ZOOM_PANEL------------------{} + +.ug-slider-wrapper .ug-zoompanel{ + position:absolute; + top:200px; + left:100px; +} + +.ug-zoompanel .ug-zoompanel-button{ + background-repeat: no-repeat; + cursor:pointer; + display:block; +} + + +.--------------ZOOM_PANEL_BUTTONS------------------{} + +.ug-gallery-wrapper .ug-arrow-left{ + position:absolute; + background-repeat:no-repeat; + display:block; + cursor:pointer; +} + +.ug-gallery-wrapper .ug-arrow-right{ + position:absolute; + background-repeat:no-repeat; + cursor:pointer; +} + + +.--------------GRID_PANEL_AND_ARROWS------------------{} + + +.ug-gallery-wrapper .ug-grid-panel{ + position:absolute; + background-color: #000000; + xbackground-color: blue; + + z-index:2; +} + + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow{ + position:absolute; + background-repeat:no-repeat; + cursor:pointer; + z-index:11; +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow.ug-button-disabled{ + cursor:default; +} + + +/* handle tip */ +.ug-gallery-wrapper .ug-panel-handle-tip{ + position:absolute; + z-index:13; + cursor:pointer; +} + +.ug-gallery-wrapper .ug-overlay-disabled{ + position:absolute; + z-index:100; + width:100%; + height:100%; + background-color:#000000; + opacity: 0.3; + filter: alpha(opacity=30); + background-image:url('../images/cover-grid.png'); +} + + +.--------------STRIP_PANEL------------------{} + +.ug-gallery-wrapper .ug-strip-panel{ + position:absolute; + background-color:#000000; + z-index:2; +} + +.ug-strip-panel .ug-strip-arrow{ + position:absolute; + cursor:pointer; +} + +.ug-strip-panel .ug-strip-arrow.ug-button-disabled{ + cursor:default; +} + + +.ug-strip-panel .ug-strip-arrow-tip{ + position:absolute; +} + +.--------------TILES------------------{} + +.ug-thumb-wrapper.ug-tile{ + display:block; + position:absolute; + box-sizing:border-box; + -moz-box-sizing:border-box; + overflow:hidden; + padding:0px; + margin:0px; +} + +.ug-tile .ug-tile-cloneswrapper{ + position:absolute; + width:0px; + height:0px; + top:0px; + left:0px; + overflow:hidden; + opacity:0; + filter: alpha(opacity = 90); +} + + +/* transit something */ +/* transit fixed size items */ +/* transit image overlay */ + +.ug-tiles-transit.ug-tiles-transition-active .ug-thumb-wrapper.ug-tile, +.ug-tiles-transit.ug-tiles-transition-active .ug-thumb-wrapper.ug-tile .ug-trans-enabled{ + transition: left 0.7s ease 0s, top 0.7s ease 0s, width 0.7s ease 0s, height 0.7s ease 0s !important; +} + + +.ug-thumb-wrapper.ug-tile.ug-tile-clickable{ + cursor: pointer; +} + +.ug-thumb-wrapper.ug-tile .ug-image-container{ + position:absolute; + overflow:hidden; + z-index:1; + top:0px; + left:0px; +} + +.ug-thumb-wrapper.ug-tile img.ug-thumb-image{ + + -webkit-user-select: none; /* make unselectable */ + -moz-user-select: none; + -ms-user-select: none; + max-width:none !important; + max-height:none !important; + + display:block; + border:none; + padding:0px !important; + margin:0px !important; + + width:auto; + height:auto; + position:absolute; +} + + +.ug-thumb-wrapper.ug-tile .ug-tile-image-overlay{ + position:absolute; + overflow:hidden; + z-index:2; + top:0px; + left:0px; +} + +.ug-thumb-wrapper.ug-tile .ug-tile-image-overlay img{ + width:100%; + max-width:none !important; +} + +.ug-tiletype-justified .ug-thumb-wrapper.ug-tile .ug-tile-image-overlay img{ + height:100%; + max-width:none !important; +} + +.ug-thumb-wrapper.ug-tile .ug-tile-icon{ + position:absolute; + width:38px; + height:38px; + background-repeat:no-repeat; + background-position:0 0; + xbackground-color:green; + z-index:6; + top:1px; + left:1px; + cursor:pointer; +} + +.ug-thumb-wrapper.ug-tile .ug-tile-icon.ug-icon-link{ + background-image:url('../images/icon-link32.png'); +} + +.ug-thumb-wrapper.ug-tile .ug-tile-icon.ug-icon-zoom{ + background-image:url('../images/icon-zoom32.png'); +} + +.ug-thumb-wrapper.ug-tile .ug-tile-icon.ug-icon-play{ + background-image:url('../images/icon-play32.png'); +} + +.ug-thumb-wrapper.ug-tile .ug-tile-icon:hover{ + background-position:0 -38px; +} + + +.ug-thumbs-grid .ug-tile-image-overlay img{ + width:auto; + height:auto; + position:absolute; + max-width:none !important; +} + +/* text panel on tiles*/ + +.ug-tile .ug-textpanel{ + z-index: 5; + cursor:default; +} + +.ug-tile.ug-tile-clickable .ug-textpanel{ + cursor:pointer; +} + +.ug-tile .ug-textpanel-title{ + font-size:14px; + font-weight:bold; +} + +.--------------CAROUSEL------------------{} + +.ug-gallery-wrapper .ug-carousel-wrapper{ + position:absolute; + overflow:hidden; +} + +.ug-gallery-wrapper .ug-carousel-inner{ + position:absolute; +} + + +.------------------LIGHTBOX---------------------{} + +.ug-gallery-wrapper.ug-lightbox{ + display: none; + position: fixed; + border: none; + padding:0px; + margin:0px; + outline: invert none medium; + overflow: hidden; + top: 0; + left: 0; + width: 100%; + height: 100%; + max-width:none !important; + max-height:none !important; + z-index: 999999; +} + +.ug-lightbox .ug-lightbox-top-panel{ + position:absolute; + z-index:2; +} + +.ug-lightbox .ug-lightbox-top-panel-overlay{ + width:100%; + height:100%; + position:absolute; + background-color:#000000; + opacity:0.4; + filter: alpha(opacity=40); +} + + +.ug-lightbox .ug-lightbox-overlay{ + z-index:1; + width:100%; + height:100%; + background-color:#000000; + opacity:1; +} + +.ug-lightbox .ug-slider-wrapper{ + z-index:1; + xbackground-color:green; + background-color:transparent !important; +} + +.ug-lightbox .ug-textpanel{ + z-index: 2; +} + + +.ug-lightbox .ug-lightbox-arrow-left, +.ug-lightbox .ug-lightbox-arrow-right{ + position:absolute; + width:50px; + height:55px; + background-repeat:no-repeat; + background-image:url('../images/lightbox-arrow-left.png'); + background-position:0px 0px; + z-index:3; + cursor:pointer; +} + +.ug-lightbox .ug-lightbox-arrow-right{ + background-image:url('../images/lightbox-arrow-right.png'); +} + +.ug-lightbox .ug-lightbox-button-close{ + position:absolute; + width:36px; + height:36px; + background-repeat:no-repeat; + background-image:url('../images/lightbox-icon-close.png'); + background-position:0px 0px; + z-index:4; + cursor:pointer; +} + + +.ug-lightbox-compact .ug-lightbox-button-close{ + width:45px; + height:41px; + background-image:url('../images/lightbox-icon-close-compact2.png'); +} + + +.ug-lightbox .ug-lightbox-arrow-left.ug-arrow-hover, +.ug-lightbox .ug-lightbox-arrow-right.ug-arrow-hover{ + background-position:0px -55px; +} + +.ug-lightbox .ug-lightbox-button-close.ug-button-hover{ + background-position:0px -35px; +} + +.ug-lightbox-compact .ug-lightbox-button-close.ug-button-hover{ + background-position:0px -40px; +} + +.ug-lightbox .ug-lightbox-numbers{ + position:absolute; + color:#e5e5e5; + font-size:12px; + top:14px; + left:8px; + z-index:3; +} + +.ug-lightbox-compact .ug-lightbox-numbers{ + font-size: 14px; + padding-right:5px; + padding-top:7px; +} + +.ug-lightbox .ug-textpanel-title, +.ug-lightbox .ug-textpanel-description{ + font-size: 14px; + font-weight: normal; + color: #e5e5e5; +} + +.ug-lightbox-compact .ug-textpanel-title, +.ug-lightbox-compact .ug-textpanel-description{ + color:#F3F3F3; + font-size: 16px; +} + +.------------------CATEGORY_TABS---------------------{} + + .ug-tabs-wrapper{ + margin-top:0px; + margin-bottom:20px; + text-align:center; + } + + .ug-tabs-wrapper a.ug-tab{ + display: inline-block; + cursor:pointer; + text-decoration:none; + color:#ffffff; + padding-left:8px; + padding-right:8px; + padding-top:6px; + padding-bottom:6px; + margin-left:5px; + background-color:#333333; + border-radius:3px; + font-size:12px; + font-weight:normal; + + border: 1px solid #969696; + } + + .ug-tabs-wrapper a.ug-tab:hover{ + background-color: #707070 !important; + } + + .ug-tabs-wrapper a.ug-tab.ug-tab-selected, + .ug-tabs-wrapper a.ug-tab.ug-tab-selected:hover{ + background-color: #2077A2 !important; + cursor:default !important; + } + + .ug-tabs-wrapper a.ug-tab:first-child{ + margin-left:0px !important; + } + + +.------------------DEFAULT_SKIN---------------------{} + +/* --- arrows -- */ + +.ug-arrow-left.ug-skin-default, +.ug-arrow-right.ug-skin-default{ + width:15px; + height:30px; + background-image:url('../skins/default/slider_arrow_left.png'); + background-position:0px 0px; +} + +.ug-arrow-right.ug-skin-default{ + background-image:url('../skins/default/slider_arrow_right.png'); +} + +.ug-arrow-left.ug-skin-default.ug-arrow-hover, +.ug-arrow-right.ug-skin-default.ug-arrow-hover{ + background-position:0px -30px; +} + +.ug-arrow-left.ug-skin-default.ug-arrow-disabled, +.ug-arrow-right.ug-skin-default.ug-arrow-disabled{ + background-position:0px -60px; +} + +/* --- bullets -- */ + +.ug-bullets.ug-skin-default .ug-bullet{ + width:15px; + height:15px; + background-image:url('../skins/default/slider_bullets.png'); + background-position:top left; + margin-left:5px; +} + +.ug-bullets.ug-skin-default .ug-bullet.ug-bullet-active{ + background-position:bottom left; +} + +.ug-bullets.ug-skin-default.ug-bullets-gray .ug-bullet{ + background-image:url('../skins/default/tile_bullets_gray.png'); +} + +.ug-bullets.ug-skin-default.ug-bullets-blue .ug-bullet{ + background-image:url('../skins/default/tile_bullets_blue.png'); +} + +.ug-bullets.ug-skin-default.ug-bullets-brown .ug-bullet{ + background-image:url('../skins/default/tile_bullets_brown.png'); +} + +.ug-bullets.ug-skin-default.ug-bullets-green .ug-bullet{ + background-image:url('../skins/default/tile_bullets_green.png'); +} + +.ug-bullets.ug-skin-default.ug-bullets-red .ug-bullet{ + background-image:url('../skins/default/tile_bullets_red.png'); +} + +.ug-button-tile-navigation{ + width:36px; + height:36px; + background-position:top left; + cursor:pointer; + float:left; +} + +.ug-button-tile-navigation.ug-button-tile-left{ + background-image:url('../skins/default/tile_button_left.png'); +} + +.ug-button-tile-navigation.ug-button-tile-right{ + background-image:url('../skins/default/tile_button_right.png'); +} + +.ug-button-tile-navigation:hover{ + background-position:bottom left; +} + +.ug-button-tile-navigation.ug-button-disabled{ + opacity:0.6; +} + +.ug-button-tile-navigation.ug-button-disabled:hover{ + background-position:top left; +} + +.ug-button-tile-navigation.ug-button-tile-play{ + background-image:url('../skins/default/tile_button_play_pause.png'); + width:35px; +} + +.ug-button-tile-navigation.ug-button-tile-play.ug-pause-icon{ + background-position:bottom left; +} + +.ug-button-tile-navigation.ug-button-tile-play:hover{ + background-position:top left; +} + +.ug-button-tile-navigation.ug-button-tile-play.ug-pause-icon:hover{ + background-position:bottom left; +} + + +/* --- play button -- */ + +.ug-button-play.ug-skin-default{ + position:absolute; + background-image:url('../skins/default/button_playpause.png'); + width:14px; + height:17px; + cursor:pointer; + background-position:0px 0px; +} + +.ug-button-play.ug-skin-default.ug-button-hover{ + background-position:0px -17px; +} + +.ug-button-play.ug-skin-default.ug-stop-mode{ + background-position:0px -34px; +} + +.ug-button-play.ug-skin-default.ug-stop-mode.ug-button-hover{ + background-position:0px -51px; +} + +/* --- fullscreen button -- */ + +.ug-button-fullscreen.ug-skin-default{ + position:absolute; + background-image:url('../skins/default/button_fullscreen.png'); + width:16px; + height:16px; + cursor:pointer; + background-position:0px 0px; +} + +.ug-button-fullscreen.ug-skin-default.ug-button-hover{ + background-position:0px -16px; +} + +.ug-button-fullscreen.ug-skin-default.ug-fullscreenmode{ + background-position:0px -32px; +} + +.ug-button-fullscreen.ug-skin-default.ug-fullscreenmode.ug-button-hover{ + background-position:0px -48px; +} + + +/* --- zoom panel --- */ + +.ug-zoompanel.ug-skin-default .ug-zoompanel-button{ + background-repeat: no-repeat; + cursor:pointer; + height: 23px; + width: 23px; + margin-top:5px; + background-position: 0px 0px; +} + +.ug-zoompanel.ug-skin-default .ug-zoompanel-plus{ + margin-top:0px; +} + +.ug-zoompanel.ug-skin-default .ug-zoompanel-plus{ + background-image:url('../skins/default/icon_zoom_plus.png'); +} + +.ug-zoompanel.ug-skin-default .ug-zoompanel-minus{ + background-image:url('../skins/default/icon_zoom_minus.png'); +} + +.ug-zoompanel.ug-skin-default .ug-zoompanel-return{ + background-image:url('../skins/default/icon_zoom_back.png'); +} + +.ug-zoompanel.ug-skin-default .ug-zoompanel-button.ug-button-hover{ + background-position: 0px -23px; +} + +.ug-zoompanel.ug-skin-default .ug-zoompanel-button-disabled, +.ug-zoompanel.ug-skin-default .ug-zoompanel-button.ug-button-hover.ug-zoompanel-button-disabled{ + background-position: 0px -46px; + cursor:default; +} + + +/* --- Grid Panel Arrows -- */ + +/*--- down arrow ---*/ + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-down.ug-skin-default{ + width:30px; + height:15px; + background-position:0px 0px; + background-image:url('../skins/default/arrow_grid_down.png'); +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-down.ug-skin-default.ug-button-hover{ + background-position:0px -15px; +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-down.ug-skin-default.ug-button-hover.ug-button-disabled, +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-down.ug-skin-default.ug-button-disabled{ + background-position:0px -30px; +} + + +/*--- up arrow ---*/ + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-up.ug-skin-default{ + width:30px; + height:15px; + background-position:0px 0px; + background-image:url('../skins/default/arrow_grid_up.png'); +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-up.ug-skin-default.ug-button-hover{ + background-position:0px -15px; +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-up.ug-skin-default.ug-button-hover.ug-button-disabled, +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-up.ug-skin-default.ug-button-disabled{ + background-position:0px -30px; +} + +/*--- left arrow ---*/ + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-left.ug-skin-default{ + width:40px; + height:40px; + background-position:0px -40px; + background-image:url('../skins/default/grid_arrow_left.png'); +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-left.ug-skin-default.ug-button-hover{ + background-position:0px -0px; +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-left.ug-skin-default.ug-button-hover.ug-button-disabled, +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-left.ug-skin-default.ug-button-disabled{ + background-position:0px -80px; +} + +/*--- right arrow ---*/ + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-right.ug-skin-default{ + width:40px; + height:40px; + background-position:0px -40px; + background-image:url('../skins/default/grid_arrow_right.png'); +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-right.ug-skin-default.ug-button-hover{ + background-position:0px -0px; +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-right.ug-skin-default.ug-button-hover.ug-button-disabled, +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-right.ug-skin-default.ug-button-disabled{ + background-position:0px -80px; +} + +/*--- left arrow - horizontal panel type ---*/ + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-left-hortype.ug-skin-default{ + width:15px; + height:30px; + background-image:url('../skins/default/slider_arrow_left.png'); + background-position:0px 0px; +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-left-hortype.ug-skin-default.ug-button-hover{ + background-position:0px -30px; +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-left-hortype.ug-skin-default.ug-button-hover.ug-button-disabled, +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-left-hortype.ug-skin-default.ug-button-disabled{ + background-position:0px -60px; +} + + +/*--- right arrow - horizontal panel type ---*/ + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-right-hortype.ug-skin-default{ + width:15px; + height:30px; + background-image:url('../skins/default/slider_arrow_right.png'); + background-position:0px 0px; +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-right-hortype.ug-skin-default.ug-button-hover{ + background-position:0px -30px; +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-right-hortype.ug-skin-default.ug-button-hover.ug-button-disabled, +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-right-hortype.ug-skin-default.ug-button-disabled{ + background-position:0px -60px; +} + + +/* --- Strip Panel Arrows -- */ + +/* left and right arrows */ + +.ug-strip-panel .ug-strip-arrow-left.ug-skin-default, +.ug-strip-panel .ug-strip-arrow-right.ug-skin-default{ + width:25px; + height:50px; +} + +.ug-strip-panel .ug-strip-arrow-left.ug-skin-default .ug-strip-arrow-tip, +.ug-strip-panel .ug-strip-arrow-right.ug-skin-default .ug-strip-arrow-tip{ + background-position:0px 0px; + background-repeat:no-repeat; + width:4px; + height:7px; +} + +.ug-strip-panel .ug-strip-arrow-left.ug-skin-default .ug-strip-arrow-tip{ + background-image:url('../skins/default/arrows_strip_left.png'); +} + +.ug-strip-panel .ug-strip-arrow-right.ug-skin-default .ug-strip-arrow-tip{ + background-image:url('../skins/default/arrows_strip_right.png'); +} + +.ug-strip-panel .ug-strip-arrow-left.ug-skin-default.ug-button-hover .ug-strip-arrow-tip, +.ug-strip-panel .ug-strip-arrow-right.ug-skin-default.ug-button-hover .ug-strip-arrow-tip{ + background-position:0px -7px; +} + + +/* up and down arrows */ + +.ug-strip-panel .ug-strip-arrow-up.ug-skin-default, +.ug-strip-panel .ug-strip-arrow-down.ug-skin-default{ + height:25px; + width:50px; +} + +.ug-strip-panel .ug-strip-arrow-up.ug-skin-default .ug-strip-arrow-tip, +.ug-strip-panel .ug-strip-arrow-down.ug-skin-default .ug-strip-arrow-tip{ + background-position:0px 0px; + background-repeat:no-repeat; + width:7px; + height:4px; +} + +.ug-strip-panel .ug-strip-arrow-up.ug-skin-default .ug-strip-arrow-tip{ + background-image:url('../skins/default/arrows_strip_up.png'); +} + +.ug-strip-panel .ug-strip-arrow-down.ug-skin-default .ug-strip-arrow-tip{ + background-image:url('../skins/default/arrows_strip_down.png'); +} + +.ug-strip-panel .ug-strip-arrow-up.ug-skin-default.ug-button-hover .ug-strip-arrow-tip, +.ug-strip-panel .ug-strip-arrow-down.ug-skin-default.ug-button-hover .ug-strip-arrow-tip{ + background-position:-7px 0px; +} + +.ug-strip-panel .ug-strip-arrow.ug-skin-default.ug-button-disabled .ug-strip-arrow-tip{ + background-position:0px 0px; + opacity:0.5; + filter: alpha(opacity = 50); +} + + +/* --- Panel Handle Tip -- */ + +/* left and right handle */ +.ug-gallery-wrapper .ug-handle-tip-left.ug-skin-default, +.ug-gallery-wrapper .ug-handle-tip-right.ug-skin-default{ + width:22px; + height:36px; + background-image:url('../skins/default/grid_handle_black_left.png'); + background-repeat:no-repeat; + background-position:0px -36px; +} + +.ug-gallery-wrapper .ug-handle-tip-right.ug-skin-default{ + background-image:url('../skins/default/grid_handle_black_right.png'); + background-position:0px -36px; +} + +.ug-gallery-wrapper .ug-handle-tip-left.ug-button-hover.ug-skin-default, +.ug-gallery-wrapper .ug-handle-tip-right.ug-button-hover.ug-skin-default{ + background-position:0px -0px; +} + +.ug-gallery-wrapper .ug-handle-tip-left.ug-skin-default.ug-button-closed, +.ug-gallery-wrapper .ug-handle-tip-right.ug-skin-default.ug-button-closed{ + background-position:0px -108px; +} + +.ug-gallery-wrapper .ug-handle-tip-left.ug-skin-default.ug-button-closed.ug-button-hover, +.ug-gallery-wrapper .ug-handle-tip-right.ug-skin-default.ug-button-closed.ug-button-hover{ + background-position:0px -72px; +} + + +/* top and bottom handle */ + +.ug-gallery-wrapper .ug-handle-tip-top.ug-skin-default, +.ug-gallery-wrapper .ug-handle-tip-bottom.ug-skin-default{ + width:36px; + height:22px; + background-image:url('../skins/default/grid_handle_black_top.png'); + background-repeat:no-repeat; + background-position:-36px 0px; +} + +.ug-gallery-wrapper .ug-handle-tip-bottom.ug-skin-default{ + background-image:url('../skins/default/grid_handle_black_bottom.png'); + background-position:-36px 0px; +} + +.ug-gallery-wrapper .ug-handle-tip-top.ug-skin-default.ug-button-hover, +.ug-gallery-wrapper .ug-handle-tip-bottom.ug-skin-default.ug-button-hover{ + background-position:0px 0px; +} + +.ug-gallery-wrapper .ug-handle-tip-top.ug-skin-default.ug-button-closed, +.ug-gallery-wrapper .ug-handle-tip-bottom.ug-skin-default.ug-button-closed{ + background-position:-108px 0px; +} + +.ug-gallery-wrapper .ug-handle-tip-top.ug-skin-default.ug-button-closed.ug-button-hover, +.ug-gallery-wrapper .ug-handle-tip-bottom.ug-skin-default.ug-button-closed.ug-button-hover{ + background-position:-72px 0px; +} + diff --git a/plugins/unitegallery/vendor/unitegallery/images/button-close.png b/plugins/unitegallery/vendor/unitegallery/images/button-close.png new file mode 100644 index 0000000000000000000000000000000000000000..67097ab1dfa9c5f016006794e4d72b139fa7a807 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/button-close.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/cover-grid.png b/plugins/unitegallery/vendor/unitegallery/images/cover-grid.png new file mode 100644 index 0000000000000000000000000000000000000000..b07e3964f7b7388ec397d3ab1569652e399b4a99 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/cover-grid.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/icon-link32.png b/plugins/unitegallery/vendor/unitegallery/images/icon-link32.png new file mode 100644 index 0000000000000000000000000000000000000000..95fc503745223cb10cf615203711ed66ad4965d7 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/icon-link32.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/icon-play32.png b/plugins/unitegallery/vendor/unitegallery/images/icon-play32.png new file mode 100644 index 0000000000000000000000000000000000000000..b2541f80e9f5b277d5d99d9b5c0e81e9377bfdbe Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/icon-play32.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/icon-zoom32.png b/plugins/unitegallery/vendor/unitegallery/images/icon-zoom32.png new file mode 100644 index 0000000000000000000000000000000000000000..b860fa2e2bfe92984aa2a03e4bdddacdd902d285 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/icon-zoom32.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/lightbox-arrow-left.png b/plugins/unitegallery/vendor/unitegallery/images/lightbox-arrow-left.png new file mode 100644 index 0000000000000000000000000000000000000000..85a98c4dd31e4e8d26fd6c983580464f1d83ec1d Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/lightbox-arrow-left.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/lightbox-arrow-right.png b/plugins/unitegallery/vendor/unitegallery/images/lightbox-arrow-right.png new file mode 100644 index 0000000000000000000000000000000000000000..55002d0a3753a7db1ca6d28c7745697f48e9bfd4 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/lightbox-arrow-right.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/lightbox-icon-close-compact.png b/plugins/unitegallery/vendor/unitegallery/images/lightbox-icon-close-compact.png new file mode 100644 index 0000000000000000000000000000000000000000..6831a2816137da1aa4e0b56f1c1bd8e60bac127e Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/lightbox-icon-close-compact.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/lightbox-icon-close-compact2.png b/plugins/unitegallery/vendor/unitegallery/images/lightbox-icon-close-compact2.png new file mode 100644 index 0000000000000000000000000000000000000000..35472e2ff594436bf5c2a2045f3986a24d0cace1 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/lightbox-icon-close-compact2.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/lightbox-icon-close.png b/plugins/unitegallery/vendor/unitegallery/images/lightbox-icon-close.png new file mode 100644 index 0000000000000000000000000000000000000000..373f1d7d9145abfed1ec519b8340310bbc355c2b Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/lightbox-icon-close.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/loader-black1.gif b/plugins/unitegallery/vendor/unitegallery/images/loader-black1.gif new file mode 100644 index 0000000000000000000000000000000000000000..7b46af5c75c87c9baff4242c3a6ae41e00f0860c Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/loader-black1.gif differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/loader-black2.gif b/plugins/unitegallery/vendor/unitegallery/images/loader-black2.gif new file mode 100644 index 0000000000000000000000000000000000000000..3190e6574dad47c12deb3766bd77bdbefa2f7e4a Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/loader-black2.gif differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/loader-black3.gif b/plugins/unitegallery/vendor/unitegallery/images/loader-black3.gif new file mode 100644 index 0000000000000000000000000000000000000000..b2c21a6486061e7bd5d63dd85bc645fe6bf6e215 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/loader-black3.gif differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/loader-black4.gif b/plugins/unitegallery/vendor/unitegallery/images/loader-black4.gif new file mode 100644 index 0000000000000000000000000000000000000000..d4af63c7a422e9dec579f7dff36d7e1ec16ee72a Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/loader-black4.gif differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/loader-black5.gif b/plugins/unitegallery/vendor/unitegallery/images/loader-black5.gif new file mode 100644 index 0000000000000000000000000000000000000000..13fa9377c45bf88e54e26552facee529d4201be8 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/loader-black5.gif differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/loader-black6.gif b/plugins/unitegallery/vendor/unitegallery/images/loader-black6.gif new file mode 100644 index 0000000000000000000000000000000000000000..40f2edf7425a548db8ac4057167523663fb55fff Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/loader-black6.gif differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/loader-black7.gif b/plugins/unitegallery/vendor/unitegallery/images/loader-black7.gif new file mode 100644 index 0000000000000000000000000000000000000000..4ebece64d204ad709196640428854a841ac79178 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/loader-black7.gif differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/loader-white1.gif b/plugins/unitegallery/vendor/unitegallery/images/loader-white1.gif new file mode 100644 index 0000000000000000000000000000000000000000..53dd589fa194f5db985e4301c7a73ed4f1b9ad99 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/loader-white1.gif differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/loader-white2.gif b/plugins/unitegallery/vendor/unitegallery/images/loader-white2.gif new file mode 100644 index 0000000000000000000000000000000000000000..aa0e7cf3c6ced9572af35f1d3041045d6a8c68ea Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/loader-white2.gif differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/loader-white3.gif b/plugins/unitegallery/vendor/unitegallery/images/loader-white3.gif new file mode 100644 index 0000000000000000000000000000000000000000..f2257b33afbd8be9d54df2fa57bf8f5cc73b2755 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/loader-white3.gif differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/loader-white4.gif b/plugins/unitegallery/vendor/unitegallery/images/loader-white4.gif new file mode 100644 index 0000000000000000000000000000000000000000..78395cb219d9e92dee5c037220265fb0278a63d2 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/loader-white4.gif differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/loader-white5.gif b/plugins/unitegallery/vendor/unitegallery/images/loader-white5.gif new file mode 100644 index 0000000000000000000000000000000000000000..13fa9377c45bf88e54e26552facee529d4201be8 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/loader-white5.gif differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/loader-white6.gif b/plugins/unitegallery/vendor/unitegallery/images/loader-white6.gif new file mode 100644 index 0000000000000000000000000000000000000000..e7825334ce8122fec196b96c364980d7c7d50393 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/loader-white6.gif differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/loader-white7.gif b/plugins/unitegallery/vendor/unitegallery/images/loader-white7.gif new file mode 100644 index 0000000000000000000000000000000000000000..89b511cc294f8747894b6c0ebede52df20dd2fef Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/loader-white7.gif differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/loader.gif b/plugins/unitegallery/vendor/unitegallery/images/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..d0bce1542342e912da81a2c260562df172f30d73 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/loader.gif differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/loader_bright.gif b/plugins/unitegallery/vendor/unitegallery/images/loader_bright.gif new file mode 100644 index 0000000000000000000000000000000000000000..9a62c58ba9537f9cd2429fab16f0f9c3cb9b09a3 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/loader_bright.gif differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/loader_skype_trans.gif b/plugins/unitegallery/vendor/unitegallery/images/loader_skype_trans.gif new file mode 100644 index 0000000000000000000000000000000000000000..135f74271979740b3ebd827a04fb1cc8e82ef970 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/loader_skype_trans.gif differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/not_loaded.png b/plugins/unitegallery/vendor/unitegallery/images/not_loaded.png new file mode 100644 index 0000000000000000000000000000000000000000..356a129863a11b3f82a335a2f07535b8773dff2b Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/not_loaded.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/play-button-round.png b/plugins/unitegallery/vendor/unitegallery/images/play-button-round.png new file mode 100644 index 0000000000000000000000000000000000000000..3a57eb81c849f282b88f66e073ea9f9bc8acd1fe Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/play-button-round.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/play-button-square.png b/plugins/unitegallery/vendor/unitegallery/images/play-button-square.png new file mode 100644 index 0000000000000000000000000000000000000000..bbc3c20930e59ccedb8ed4ff20720b15447f5fcf Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/play-button-square.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/images/transparent.png b/plugins/unitegallery/vendor/unitegallery/images/transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..bf12d1292a3bf96b311cbf9f3de15e8efa5f7d0e Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/images/transparent.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/js/jquery-11.0.min.js b/plugins/unitegallery/vendor/unitegallery/js/jquery-11.0.min.js new file mode 100644 index 0000000000000000000000000000000000000000..73f33fb3aa529308d1f3f2f4fc253c4abed95374 --- /dev/null +++ b/plugins/unitegallery/vendor/unitegallery/js/jquery-11.0.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!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="".trim,l={},m="1.11.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,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=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.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},n.extend=n.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||n.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&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.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(l.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&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},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=s(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:k&&!k.call("\ufeff\xa0")?function(a){return null==a?"":k.call(a)}:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.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=s(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),n.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||n.guid++,e):void 0},now:function(){return+new Date},support:l}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=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)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(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 mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(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 typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="<select t=''><option selected=''></option></select>",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.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},z=b?function(a,b){if(a===b)return j=!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===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.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=db.selectors={cacheLength:50,createPseudo:fb,match:V,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(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===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]||db.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]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(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(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.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+" ").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(),t=!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&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&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]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)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&&(t&&((l[s]||(l[s]={}))[a]=[u,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()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(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),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?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===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.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 X.test(a.nodeName)},input:function(a){return W.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:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=jb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=kb(b);function nb(){}nb.prototype=d.filters=d.pseudos,d.setFilters=new nb;function ob(a,b){var c,e,f,g,h,i,j,k=x[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=Q.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?db.error(a):x(a,i).slice(0)}function pb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;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=[u,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[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(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 sb(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 tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(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?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=a.document,A=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,B=n.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]:A.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=z.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return y.find(a);this.length=1,this[0]=d}return this.context=z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};B.prototype=n.fn,y=n(z);var C=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!n(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}}),n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(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&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function E(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return E(a,"nextSibling")},prev:function(a){return E(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(D[a]||(e=n.unique(e)),C.test(a)&&(e=e.reverse())),this.pushStack(e)}});var F=/\S+/g,G={};function H(a){var b=G[a]={};return n.each(a.match(F)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?G[a]||H(a):n.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){n.each(b,function(b,c){var d=n.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&&n.each(arguments,function(a,c){var d;while((d=n.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?n.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},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.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?n.extend(a,d):d}},e={};return d.pipe=d.then,n.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&&n.isFunction(a.promise)?e:0,g=1===f?a:n.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]&&n.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 I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){if(a===!0?!--n.readyWait:!n.isReady){if(!z.body)return setTimeout(n.ready);n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(z,[n]),n.fn.trigger&&n(z).trigger("ready").off("ready"))}}});function J(){z.addEventListener?(z.removeEventListener("DOMContentLoaded",K,!1),a.removeEventListener("load",K,!1)):(z.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(z.addEventListener||"load"===event.type||"complete"===z.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===z.readyState)setTimeout(n.ready);else if(z.addEventListener)z.addEventListener("DOMContentLoaded",K,!1),a.addEventListener("load",K,!1);else{z.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&z.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!n.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}J(),n.ready()}}()}return I.promise(b)};var L="undefined",M;for(M in n(l))break;l.ownLast="0"!==M,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c=z.getElementsByTagName("body")[0];c&&(a=z.createElement("div"),a.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",b=z.createElement("div"),c.appendChild(a).appendChild(b),typeof b.style.zoom!==L&&(b.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1",(l.inlineBlockNeedsLayout=3===b.offsetWidth)&&(c.style.zoom=1)),c.removeChild(a),a=b=null)}),function(){var a=z.createElement("div");if(null==l.deleteExpando){l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}}a=null}(),n.acceptData=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(n.acceptData(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.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()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f +}}function S(a,b,c){if(n.acceptData(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.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=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d]));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.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 n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=["Top","Right","Bottom","Left"],V=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},W=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;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},X=/^(?:checkbox|radio)$/i;!function(){var a=z.createDocumentFragment(),b=z.createElement("div"),c=z.createElement("input");if(b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a>",l.leadingWhitespace=3===b.firstChild.nodeType,l.tbody=!b.getElementsByTagName("tbody").length,l.htmlSerialize=!!b.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==z.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,a.appendChild(c),l.appendChecked=c.checked,b.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,a.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){l.noCloneEvent=!1}),b.cloneNode(!0).click()),null==l.deleteExpando){l.deleteExpando=!0;try{delete b.test}catch(d){l.deleteExpando=!1}}a=b=c=null}(),function(){var b,c,d=z.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),l[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var Y=/^(?:input|select|textarea)$/i,Z=/^key/,$=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,ab=/^([^.]*)(?:\.(.+)|)$/;function bb(){return!0}function cb(){return!1}function db(){try{return z.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof n===L||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(F)||[""],h=b.length;while(h--)f=ab.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.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?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(F)||[""],j=b.length;while(j--)if(h=ab.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,m,o=[d||z],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||z,3!==d.nodeType&&8!==d.nodeType&&!_.test(p+n.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[n.expando]?b:new n.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]:n.makeArray(c,[b]),k=n.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!n.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||z)&&o.push(l.defaultView||l.parentWindow||a)}m=0;while((h=o[m++])&&!b.isPropagationStopped())b.type=m>1?i:k.bindType||p,f=(n._data(h,"events")||{})[b.type]&&n._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&n.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)&&n.acceptData(d)&&g&&d[p]&&!n.isWindow(d)){l=d[g],l&&(d[g]=null),n.event.triggered=p;try{d[p]()}catch(r){}n.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.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=((n.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?n(c,this).index(i)>=0:n.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=$.test(e)?this.mouseHooks:Z.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||z),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||z,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==db()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===db()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=z.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===L&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&(a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault())?bb:cb):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:cb,isPropagationStopped:cb,isImmediatePropagationStopped:cb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=bb,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=bb,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submitBubbles||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?b.form:void 0;c&&!n._data(c,"submitBubbles")&&(n.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),n._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.changeBubbles||(n.event.special.change={setup:function(){return Y.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),n.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),n.event.simulate("change",this,a,!0)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;Y.test(b.nodeName)&&!n._data(b,"changeBubbles")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a,!0)}),n._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!Y.test(this.nodeName)}}),l.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=cb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return n().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=cb),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});function eb(a){var b=fb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var fb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gb=/ jQuery\d+="(?:null|\d+)"/g,hb=new RegExp("<(?:"+fb+")[\\s/>]","i"),ib=/^\s+/,jb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,kb=/<([\w:]+)/,lb=/<tbody/i,mb=/<|&#?\w+;/,nb=/<(?:script|style|link)/i,ob=/checked\s*(?:[^=]|=\s*.checked.)/i,pb=/^$|\/(?:java|ecma)script/i,qb=/^true\/(.*)/,rb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,sb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},tb=eb(z),ub=tb.appendChild(z.createElement("div"));sb.optgroup=sb.option,sb.tbody=sb.tfoot=sb.colgroup=sb.caption=sb.thead,sb.th=sb.td;function vb(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==L?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==L?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,vb(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function wb(a){X.test(a.type)&&(a.defaultChecked=a.checked)}function xb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function yb(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function zb(a){var b=qb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ab(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}function Bb(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._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++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Cb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(yb(b).text=a.text,zb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&X.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)}}n.extend({clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!hb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ub.innerHTML=a.outerHTML,ub.removeChild(f=ub.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=vb(f),h=vb(a),g=0;null!=(e=h[g]);++g)d[g]&&Cb(e,d[g]);if(b)if(c)for(h=h||vb(a),d=d||vb(f),g=0;null!=(e=h[g]);g++)Bb(e,d[g]);else Bb(a,f);return d=vb(f,"script"),d.length>0&&Ab(d,!i&&vb(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,m=a.length,o=eb(b),p=[],q=0;m>q;q++)if(f=a[q],f||0===f)if("object"===n.type(f))n.merge(p,f.nodeType?[f]:f);else if(mb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(kb.exec(f)||["",""])[1].toLowerCase(),k=sb[i]||sb._default,h.innerHTML=k[1]+f.replace(jb,"<$1></$2>")+k[2],e=k[0];while(e--)h=h.lastChild;if(!l.leadingWhitespace&&ib.test(f)&&p.push(b.createTextNode(ib.exec(f)[0])),!l.tbody){f="table"!==i||lb.test(f)?"<table>"!==k[1]||lb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)n.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}n.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),l.appendChecked||n.grep(vb(p,"input"),wb),q=0;while(f=p[q++])if((!d||-1===n.inArray(f,d))&&(g=n.contains(f.ownerDocument,f),h=vb(o.appendChild(f),"script"),g&&Ab(h),c)){e=0;while(f=h[e++])pb.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.deleteExpando,m=n.event.special;null!=(d=a[h]);h++)if((b||n.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k?delete d[i]:typeof d.removeAttribute!==L?d.removeAttribute(i):d[i]=null,c.push(f))}}}),n.fn.extend({text:function(a){return W(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).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=xb(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=xb(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?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(vb(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&Ab(vb(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(vb(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.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 n.clone(this,a,b)})},html:function(a){return W(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(gb,""):void 0;if(!("string"!=typeof a||nb.test(a)||!l.htmlSerialize&&hb.test(a)||!l.leadingWhitespace&&ib.test(a)||sb[(kb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(jb,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(vb(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,n.cleanData(vb(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,k=this.length,m=this,o=k-1,p=a[0],q=n.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&ob.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(i=n.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=n.map(vb(i,"script"),yb),f=g.length;k>j;j++)d=i,j!==o&&(d=n.clone(d,!0,!0),f&&n.merge(g,vb(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,n.map(g,zb),j=0;f>j;j++)d=g[j],pb.test(d.type||"")&&!n._data(d,"globalEval")&&n.contains(h,d)&&(d.src?n._evalUrl&&n._evalUrl(d.src):n.globalEval((d.text||d.textContent||d.innerHTML||"").replace(rb,"")));i=c=null}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],g=n(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Db,Eb={};function Fb(b,c){var d=n(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:n.css(d[0],"display");return d.detach(),e}function Gb(a){var b=z,c=Eb[a];return c||(c=Fb(a,b),"none"!==c&&c||(Db=(Db||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Db[0].contentWindow||Db[0].contentDocument).document,b.write(),b.close(),c=Fb(a,b),Db.detach()),Eb[a]=c),c}!function(){var a,b,c=z.createElement("div"),d="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";c.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],a.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(a.style.opacity),l.cssFloat=!!a.style.cssFloat,c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===c.style.backgroundClip,a=c=null,l.shrinkWrapBlocks=function(){var a,c,e,f;if(null==b){if(a=z.getElementsByTagName("body")[0],!a)return;f="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",c=z.createElement("div"),e=z.createElement("div"),a.appendChild(c).appendChild(e),b=!1,typeof e.style.zoom!==L&&(e.style.cssText=d+";width:1px;padding:1px;zoom:1",e.innerHTML="<div></div>",e.firstChild.style.width="5px",b=3!==e.offsetWidth),a.removeChild(c),a=c=e=null}return b}}();var Hb=/^margin/,Ib=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Jb,Kb,Lb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Jb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),Ib.test(g)&&Hb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):z.documentElement.currentStyle&&(Jb=function(a){return a.currentStyle},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ib.test(g)&&!Lb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Mb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h=z.createElement("div"),i="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",j="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";h.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",b=h.getElementsByTagName("a")[0],b.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(b.style.opacity),l.cssFloat=!!b.style.cssFloat,h.style.backgroundClip="content-box",h.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===h.style.backgroundClip,b=h=null,n.extend(l,{reliableHiddenOffsets:function(){if(null!=c)return c;var a,b,d,e=z.createElement("div"),f=z.getElementsByTagName("body")[0];if(f)return e.setAttribute("className","t"),e.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=z.createElement("div"),a.style.cssText=i,f.appendChild(a).appendChild(e),e.innerHTML="<table><tr><td></td><td>t</td></tr></table>",b=e.getElementsByTagName("td"),b[0].style.cssText="padding:0;margin:0;border:0;display:none",d=0===b[0].offsetHeight,b[0].style.display="",b[1].style.display="none",c=d&&0===b[0].offsetHeight,f.removeChild(a),e=f=null,c},boxSizing:function(){return null==d&&k(),d},boxSizingReliable:function(){return null==e&&k(),e},pixelPosition:function(){return null==f&&k(),f},reliableMarginRight:function(){var b,c,d,e;if(null==g&&a.getComputedStyle){if(b=z.getElementsByTagName("body")[0],!b)return;c=z.createElement("div"),d=z.createElement("div"),c.style.cssText=i,b.appendChild(c).appendChild(d),e=d.appendChild(z.createElement("div")),e.style.cssText=d.style.cssText=j,e.style.marginRight=e.style.width="0",d.style.width="1px",g=!parseFloat((a.getComputedStyle(e,null)||{}).marginRight),b.removeChild(c)}return g}});function k(){var b,c,h=z.getElementsByTagName("body")[0];h&&(b=z.createElement("div"),c=z.createElement("div"),b.style.cssText=i,h.appendChild(b).appendChild(c),c.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;display:block;padding:1px;border:1px;width:4px;margin-top:1%;top:1%",n.swap(h,null!=h.style.zoom?{zoom:1}:{},function(){d=4===c.offsetWidth}),e=!0,f=!1,g=!0,a.getComputedStyle&&(f="1%"!==(a.getComputedStyle(c,null)||{}).top,e="4px"===(a.getComputedStyle(c,null)||{width:"4px"}).width),h.removeChild(b),c=h=null)}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Nb=/alpha\([^)]*\)/i,Ob=/opacity\s*=\s*([^)]*)/,Pb=/^(none|table(?!-c[ea]).+)/,Qb=new RegExp("^("+T+")(.*)$","i"),Rb=new RegExp("^([+-])=("+T+")","i"),Sb={position:"absolute",visibility:"hidden",display:"block"},Tb={letterSpacing:0,fontWeight:400},Ub=["Webkit","O","Moz","ms"];function Vb(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ub.length;while(e--)if(b=Ub[e]+c,b in a)return b;return d}function Wb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&V(d)&&(f[g]=n._data(d,"olddisplay",Gb(d.nodeName)))):f[g]||(e=V(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Xb(a,b,c){var d=Qb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Yb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+U[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+U[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+U[f]+"Width",!0,e))):(g+=n.css(a,"padding"+U[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+U[f]+"Width",!0,e)));return g}function Zb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Jb(a),g=l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Kb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ib.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Yb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Kb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=Vb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Rb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]="",i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Vb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Kb(a,b,d)),"normal"===f&&b in Tb&&(f=Tb[b]),""===c||c?(e=parseFloat(f),c===!0||n.isNumeric(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?0===a.offsetWidth&&Pb.test(n.css(a,"display"))?n.swap(a,Sb,function(){return Zb(a,b,d)}):Zb(a,b,d):void 0},set:function(a,c,d){var e=d&&Jb(a);return Xb(a,c,d?Yb(a,b,d,l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Ob.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Nb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Nb.test(f)?f.replace(Nb,e):f+" "+e)}}),n.cssHooks.marginRight=Mb(l.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},Kb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+U[d]+b]=f[d]||f[d-2]||f[0];return e}},Hb.test(a)||(n.cssHooks[a+b].set=Xb)}),n.fn.extend({css:function(a,b){return W(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Jb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b) +},a,b,arguments.length>1)},show:function(){return Wb(this,!0)},hide:function(){return Wb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){V(this)?n(this).show():n(this).hide()})}});function $b(a,b,c,d,e){return new $b.prototype.init(a,b,c,d,e)}n.Tween=$b,$b.prototype={constructor:$b,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=$b.propHooks[this.prop];return a&&a.get?a.get(this):$b.propHooks._default.get(this)},run:function(a){var b,c=$b.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):$b.propHooks._default.set(this),this}},$b.prototype.init.prototype=$b.prototype,$b.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},$b.propHooks.scrollTop=$b.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=$b.prototype.init,n.fx.step={};var _b,ac,bc=/^(?:toggle|show|hide)$/,cc=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),dc=/queueHooks$/,ec=[jc],fc={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=cc.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&cc.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function gc(){return setTimeout(function(){_b=void 0}),_b=n.now()}function hc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=U[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function ic(a,b,c){for(var d,e=(fc[b]||[]).concat(fc["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function jc(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&V(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k=Gb(a.nodeName),"none"===j&&(j=k),"inline"===j&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==k?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],bc.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}if(!n.isEmptyObject(o)){r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=ic(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function kc(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function lc(a,b,c){var d,e,f=0,g=ec.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=_b||gc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:_b||gc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(kc(k,j.opts.specialEasing);g>f;f++)if(d=ec[f].call(j,a,k,j.opts))return d;return n.map(k,ic,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(lc,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],fc[c]=fc[c]||[],fc[c].unshift(b)},prefilter:function(a,b){b?ec.unshift(a):ec.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(V).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=lc(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&dc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(hc(b,!0),a,d,e)}}),n.each({slideDown:hc("show"),slideUp:hc("hide"),slideToggle:hc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(_b=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),_b=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ac||(ac=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(ac),ac=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e=z.createElement("div");e.setAttribute("className","t"),e.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=e.getElementsByTagName("a")[0],c=z.createElement("select"),d=c.appendChild(z.createElement("option")),b=e.getElementsByTagName("input")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==e.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=d.selected,l.enctype=!!z.createElement("form").enctype,c.disabled=!0,l.optDisabled=!d.disabled,b=z.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value,a=b=c=d=e=null}();var mc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(mc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.text(a)}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(l.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var nc,oc,pc=n.expr.attrHandle,qc=/^(?:checked|selected)$/i,rc=l.getSetAttribute,sc=l.input;n.fn.extend({attr:function(a,b){return W(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===L?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?oc:nc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(F);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?sc&&rc||!qc.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(rc?c:d)},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),oc={set:function(a,b,c){return b===!1?n.removeAttr(a,c):sc&&rc||!qc.test(c)?a.setAttribute(!rc&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=pc[b]||n.find.attr;pc[b]=sc&&rc||!qc.test(b)?function(a,b,d){var e,f;return d||(f=pc[b],pc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,pc[b]=f),e}:function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),sc&&rc||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):nc&&nc.set(a,b,c)}}),rc||(nc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},pc.id=pc.name=pc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:nc.set},n.attrHooks.contenteditable={set:function(a,b,c){nc.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var tc=/^(?:input|select|textarea|button|object)$/i,uc=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return W(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):tc.test(a.nodeName)||uc.test(a.nodeName)&&a.href?0:-1}}}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var vc=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(F)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===L||"boolean"===c)&&(this.className&&n._data(this,"__className__",this.className),this.className=this.className||a===!1?"":n._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(vc," ").indexOf(b)>=0)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var wc=n.now(),xc=/\?/,yc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(yc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var zc,Ac,Bc=/#.*$/,Cc=/([?&])_=[^&]*/,Dc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Ec=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Fc=/^(?:GET|HEAD)$/,Gc=/^\/\//,Hc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ic={},Jc={},Kc="*/".concat("*");try{Ac=location.href}catch(Lc){Ac=z.createElement("a"),Ac.href="",Ac=Ac.href}zc=Hc.exec(Ac.toLowerCase())||[];function Mc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(F)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nc(a,b,c,d){var e={},f=a===Jc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Oc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Pc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Qc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ac,type:"GET",isLocal:Ec.test(zc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Oc(Oc(a,n.ajaxSettings),b):Oc(n.ajaxSettings,a)},ajaxPrefilter:Mc(Ic),ajaxTransport:Mc(Jc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Dc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||Ac)+"").replace(Bc,"").replace(Gc,zc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(F)||[""],null==k.crossDomain&&(c=Hc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===zc[1]&&c[2]===zc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(zc[3]||("http:"===zc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),Nc(Ic,k,b,v),2===t)return v;h=k.global,h&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Fc.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(xc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Cc.test(e)?e.replace(Cc,"$1_="+wc++):e+(xc.test(e)?"&":"?")+"_="+wc++)),k.ifModified&&(n.lastModified[e]&&v.setRequestHeader("If-Modified-Since",n.lastModified[e]),n.etag[e]&&v.setRequestHeader("If-None-Match",n.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Kc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Nc(Jc,k,b,v)){v.readyState=1,h&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Pc(k,v,c)),u=Qc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(n.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!l.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||n.css(a,"display"))},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var Rc=/%20/g,Sc=/\[\]$/,Tc=/\r?\n/g,Uc=/^(?:submit|button|image|reset|file)$/i,Vc=/^(?:input|select|textarea|keygen)/i;function Wc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||Sc.test(a)?d(a,e):Wc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Wc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Wc(c,a[c],b,e);return d.join("&").replace(Rc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Vc.test(this.nodeName)&&!Uc.test(a)&&(this.checked||!X.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(Tc,"\r\n")}}):{name:b.name,value:c.replace(Tc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&$c()||_c()}:$c;var Xc=0,Yc={},Zc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Yc)Yc[a](void 0,!0)}),l.cors=!!Zc&&"withCredentials"in Zc,Zc=l.ajax=!!Zc,Zc&&n.ajaxTransport(function(a){if(!a.crossDomain||l.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Xc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Yc[g],b=void 0,f.onreadystatechange=n.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Yc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function $c(){try{return new a.XMLHttpRequest}catch(b){}}function _c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=z.head||n("head")[0]||z.documentElement;return{send:function(d,e){b=z.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var ad=[],bd=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=ad.pop()||n.expando+"_"+wc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(bd.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&bd.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(bd,"$1"+e):b.jsonp!==!1&&(b.url+=(xc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,ad.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||z;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var cd=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&cd)return cd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=a.slice(h,a.length),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&n.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var dd=a.document.documentElement;function ed(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?(typeof e.getBoundingClientRect!==L&&(d=e.getBoundingClientRect()),c=ed(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||dd;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||dd})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return W(this,function(a,d,e){var f=ed(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Mb(l.pixelPosition,function(a,c){return c?(c=Kb(a,b),Ib.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return W(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var fd=a.jQuery,gd=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=gd),b&&a.jQuery===n&&(a.jQuery=fd),n},typeof b===L&&(a.jQuery=a.$=n),n}); diff --git a/plugins/unitegallery/vendor/unitegallery/js/unitegallery.js b/plugins/unitegallery/vendor/unitegallery/js/unitegallery.js new file mode 100644 index 0000000000000000000000000000000000000000..5e269481b986fe32b89a923c9fe242189ab02275 --- /dev/null +++ b/plugins/unitegallery/vendor/unitegallery/js/unitegallery.js @@ -0,0 +1,24667 @@ +// Unite Gallery, Version: 1.7.40, released 29 Nov 2016 + + + +/** + * write something to debug line + */ +function debugLine(html,addRandom, addHtml){ + + if(html === true) + html = "true"; + + if(html === false) + html = "false"; + + var output = html; + + if(typeof html == "object"){ + output = ""; + for(name in html){ + var value = html[name]; + output += " " + name + ": " + value; + } + } + + if(addRandom == true && !addHtml) + output += " " + Math.random(); + + if(addHtml == true){ + var objLine = jQuery("#debug_line"); + objLine.width(200); + + if(objLine.height() >= 500) + objLine.html(""); + + var currentHtml = objLine.html(); + output = currentHtml + "<br> -------------- <br>" + output; + } + + jQuery("#debug_line").show().html(output); + +} + +/** + * + * debug side some object + */ +function debugSide(obj){ + + var html = ""; + for(name in obj){ + var value = obj[name]; + html += name+" : " + value + "<br>"; + } + + jQuery("#debug_side").show().html(html); + +} + + +/** + * output some string to console + */ +function trace(str){ + + if(typeof console != "undefined") + console.log(str); + +} + + + + +/** -------------- UgFunctions class ---------------------*/ + +function UGFunctions(){ + + var g_browserPrefix = null; + var t = this; + var g_temp = { + starTime:0, + arrThemes:[], + isTouchDevice:-1, + isRgbaSupported: -1, + timeCache:{}, + dataCache:{}, + lastEventType:"", //for validate touchstart click + lastEventTime:0, + handle: null //interval handle + }; + + this.debugVar = ""; + + this.z__________FULL_SCREEN___________ = function(){} + + + + /** + * move to full screen mode + * fullscreen ID - the ID of current fullscreen + */ + this.toFullscreen = function(element, fullscreenID) { + + if(element.requestFullscreen) { + element.requestFullscreen(); + } else if(element.mozRequestFullScreen) { + element.mozRequestFullScreen(); + } else if(element.webkitRequestFullscreen) { + element.webkitRequestFullscreen(); + } else if(element.msRequestFullscreen) { + element.msRequestFullscreen(); + } else{ + return(false); + } + + return(true); + } + + + /** + * exit full screen mode + * return if operation success (or if fullscreen mode supported) + */ + this.exitFullscreen = function() { + if(t.isFullScreen() == false) + return(false); + + if(document.exitFullscreen) { + document.exitFullscreen(); + + } else if(document.cancelFullScreen) { + document.cancelFullScreen(); + + } else if(document.mozCancelFullScreen) { + document.mozCancelFullScreen(); + + } else if(document.webkitExitFullscreen) { + document.webkitExitFullscreen(); + + } else if(document.msExitFullscreen) { + document.msExitFullscreen(); + + }else{ + return(false); + } + + return(true); + } + + /** + * cross browser attach even function + */ + function addEvent(evnt, elem, func) { + if (elem.addEventListener) // W3C DOM + elem.addEventListener(evnt,func,false); + else if (elem.attachEvent) { // IE DOM + elem.attachEvent("on"+evnt, func); + } + else { // No much to do + elem[evnt] = func; + } + } + + + /** + * add fullscreen event to some function + */ + this.addFullScreenChangeEvent = function(func){ + + if(document["webkitCancelFullScreen"]) + addEvent("webkitfullscreenchange",document,func); + else if(document["msExitFullscreen"]) + addEvent("MSFullscreenChange",document,func); + else if(document["mozCancelFullScreen"]) + addEvent("mozfullscreenchange",document,func); + else + addEvent("fullscreenchange",document,func); + } + + + /** + * destroy the full screen change event + */ + this.destroyFullScreenChangeEvent = function(){ + + jQuery(document).unbind("fullscreenChange"); + jQuery(document).unbind("mozfullscreenchange"); + jQuery(document).unbind("webkitfullscreenchange"); + jQuery(document).unbind("MSFullscreenChange"); + } + + + /** + * get the fullscreen element + */ + this.getFullScreenElement = function(){ + + var fullscreenElement = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement; + + return(fullscreenElement); + } + + /** + * return if fullscreen enabled + */ + this.isFullScreen = function(){ + + var isFullScreen = document.fullscreen || document.mozFullScreen || document.webkitIsFullScreen || document.msFullscreenElement; + + if(!isFullScreen) + isFullScreen = false; + else + isFullScreen = true; + + return(isFullScreen); + } + + + + this.z__________GET_PROPS___________ = function(){} + + /** + * get browser prefix, can be empty if not detected. + */ + this.getBrowserPrefix = function(){ + + if(g_browserPrefix !== null) + return g_browserPrefix; + + var arrayOfPrefixes = ['webkit','Moz','ms','O']; + + var div = document.createElement("div"); + + for(var index in arrayOfPrefixes){ + var prefix = arrayOfPrefixes[index]; + + if(prefix+"Transform" in div.style){ + prefix = prefix.toLowerCase(); + g_browserPrefix = prefix; + return(prefix); + } + } + + g_browserPrefix = ""; + return ""; + } + + /** + * get image inside parent data by image (find parent and size) + * scaleMode: fit, down, fill, fitvert + */ + this.getImageInsideParentDataByImage = function(objImage, scaleMode, objPadding){ + + var objParent = objImage.parent(); + + var objOrgSize = t.getImageOriginalSize(objImage); + + var objData = t.getImageInsideParentData(objParent, objOrgSize.width, objOrgSize.height, scaleMode, objPadding); + + return(objData); + } + + + /** + * get data of image inside parent + * scaleMode: fit, down, fill, fitvert + */ + this.getImageInsideParentData = function(objParent, originalWidth, originalHeight, scaleMode, objPadding, maxWidth, maxHeight){ + + if(!objPadding) + var objPadding = {}; + + var objOutput = {}; + + if(typeof maxWidth === "undefined") + var maxWidth = objParent.width(); + + if(typeof maxHeight === "undefined") + var maxHeight = objParent.height(); + + if(objPadding.padding_left) + maxWidth -= objPadding.padding_left; + + if(objPadding.padding_right) + maxWidth -= objPadding.padding_right; + + if(objPadding.padding_top) + maxHeight -= objPadding.padding_top; + + if(objPadding.padding_bottom) + maxHeight -= objPadding.padding_bottom; + + var imageWidth = null; + var imageHeight = "100%"; + var imageTop = null; + var imageLeft = null; + var style = "display:block;margin:0px auto;"; + + if(originalWidth > 0 && originalHeight > 0){ + + //get image size and position + + if(scaleMode == "down" && originalWidth < maxWidth && originalHeight < maxHeight){ + + imageHeight = originalHeight; + imageWidth = originalWidth; + imageLeft = (maxWidth - imageWidth) / 2; + imageTop = (maxHeight - imageHeight) / 2; + + }else if(scaleMode == "fill"){ + var ratio = originalWidth / originalHeight; + + imageHeight = maxHeight; + imageWidth = imageHeight * ratio; + + if(imageWidth < maxWidth){ + imageWidth = maxWidth; + imageHeight = imageWidth / ratio; + + //center y position + imageLeft = 0; + imageTop = Math.round((imageHeight - maxHeight) / 2 * -1); + }else{ //center x position + imageTop = 0; + imageLeft = Math.round((imageWidth - maxWidth) / 2 * -1); + } + + } + else{ //fit to borders + var ratio = originalWidth / originalHeight; + imageHeight = maxHeight; + imageWidth = imageHeight * ratio; + imageTop = 0; + imageLeft = (maxWidth - imageWidth) / 2; + + if(scaleMode != "fitvert" && imageWidth > maxWidth){ + imageWidth = maxWidth; + imageHeight = imageWidth / ratio; + imageLeft = 0; + imageTop = (maxHeight - imageHeight) / 2; + } + + } + + imageWidth = Math.floor(imageWidth); + imageHeight = Math.floor(imageHeight); + + imageTop = Math.floor(imageTop); + imageLeft = Math.floor(imageLeft); + + style="position:absolute;"; + } + + //set padding + if(objPadding.padding_top) + imageTop += objPadding.padding_top; + + if(objPadding.padding_left) + imageLeft += objPadding.padding_left; + + objOutput.imageWidth = imageWidth; + objOutput.imageHeight = imageHeight; + objOutput.imageTop = imageTop; + objOutput.imageLeft = imageLeft; + objOutput.imageRight = imageLeft + imageWidth; + if(imageTop == 0 || imageHeight == "100%") + objOutput.imageBottom = null; + else + objOutput.imageBottom = imageTop + imageHeight; + + objOutput.style = style; + + return(objOutput); + } + + + /** + * get element center position inside parent + * even if the object bigger than the parent + */ + this.getElementCenterPosition = function(element, objPadding){ + + var parent = element.parent(); + var objSize = t.getElementSize(element); + var objSizeParent = t.getElementSize(parent); + + var parentWidth = objSizeParent.width; + var parentHeight = objSizeParent.height; + + if(objPadding && objPadding.padding_top !== undefined) + parentHeight -= objPadding.padding_top; + + if(objPadding && objPadding.padding_bottom !== undefined) + parentHeight -= objPadding.padding_bottom; + + if(objPadding && objPadding.padding_left !== undefined) + parentWidth -= objPadding.padding_left; + + if(objPadding && objPadding.padding_right !== undefined) + parentWidth -= objPadding.padding_right; + + + var output = {}; + output.left = Math.round((parentWidth - objSize.width) / 2); + output.top = Math.round((parentHeight - objSize.height) / 2); + + if(objPadding && objPadding.padding_top !== undefined) + output.top += objPadding.padding_top; + + if(objPadding && objPadding.padding_left !== undefined) + output.left += objPadding.padding_left; + + + return(output); + } + + + /** + * get the center of the element + * includeParent - including left / right related to the parent + */ + this.getElementCenterPoint = function(element, includeParent){ + + if(!includeParent) + var includeParent = false; + + var objSize = t.getElementSize(element); + var output = {}; + + output.x = objSize.width / 2; + output.y = objSize.height / 2; + + if(includeParent == true){ + output.x += objSize.left; + output.y += objSize.top; + } + + output.x = Math.round(output.x); + output.y = Math.round(output.y); + + return(output); + } + + + /** + * + * get mouse position from the event + * optimised to every device + */ + this.getMousePosition = function(event, element){ + + var output = { + pageX: event.pageX, + pageY: event.pageY, + clientX: event.clientX, + clientY: event.clientY + }; + + if(event.originalEvent && event.originalEvent.touches && event.originalEvent.touches.length > 0){ + output.pageX = event.originalEvent.touches[0].pageX; + output.pageY = event.originalEvent.touches[0].pageY; + output.clientX = event.originalEvent.touches[0].clientX; + output.clientY = event.originalEvent.touches[0].clientY; + } + + /** + * get element's mouse position + */ + if(element){ + var elementPos = element.offset(); + output.mouseX = output.pageX - elementPos.left; + output.mouseY = output.pageY - elementPos.top; + } + + return(output); + } + + /** + * get mouse element related point from page related point + */ + this.getMouseElementPoint = function(point, element){ + + //rename the input and output + var newPoint = {x: point.pageX, y: point.pageY}; + + var elementPoint = t.getElementLocalPoint(newPoint, element); + + return(elementPoint); + } + + + /** + * get element local point from global point position + */ + this.getElementLocalPoint = function(point, element){ + + var elementPoint = {}; + var elementPos = element.offset(); + + elementPoint.x = Math.round(point.x - elementPos.left); + elementPoint.y = Math.round(point.y - elementPos.top); + + return(elementPoint); + } + + + /** + * get image oritinal size + * if originalWidth, originalHeight is set, just return them. + */ + this.getImageOriginalSize = function(objImage, originalWidth, originalHeight){ + + if(typeof originalWidth != "undefined" && typeof originalHeight != "undefined") + return({width:originalWidth, height:originalHeight}); + + var htmlImage = objImage[0]; + + if(typeof htmlImage == "undefined") + throw new Error("getImageOriginalSize error - Image not found"); + + var output = {}; + + if(typeof htmlImage.naturalWidth == "undefined"){ + + //check from cache + if(typeof objImage.data("naturalWidth") == "number"){ + var output = {}; + output.width = objImage.data("naturalWidth"); + output.height = objImage.data("naturalHeight"); + return(output); + } + + //load new image + var newImg = new Image(); + newImg.src = htmlImage.src; + + if (newImg.complete) { + output.width = newImg.width; + output.height = newImg.height; + + //caching + objImage.data("naturalWidth", output.width); + objImage.data("naturalHeight", output.height); + return(output); + + } + + return({width:0,height:0}); + + }else{ + + output.width = htmlImage.naturalWidth; + output.height = htmlImage.naturalHeight; + + return(output); + } + + } + + + /** + * get current image ratio from original size + */ + this.getimageRatio = function(objImage){ + + var originalSize = t.getImageOriginalSize(objImage); + var size = t.getElementSize(objImage); + var ratio = size.width / originalSize.width; + + return(ratio); + } + + /** + * tells if the image fit the parent (smaller then the parent) + */ + this.isImageFitParent = function(objImage){ + var objParent = objImage.parent(); + var sizeImage = t.getElementSize(objImage); + var sizeParent = t.getElementSize(objParent); + + if(sizeImage.width <= sizeParent.width && sizeImage.height <= sizeParent.height) + return(true); + + return(false); + } + + /** + * get size and position of some object + */ + this.getElementSize = function(element){ + + if(element === undefined){ + throw new Error("Can't get size, empty element"); + } + + var obj = element.position(); + + obj.height = element.outerHeight(); + obj.width = element.outerWidth(); + + obj.left = Math.round(obj.left); + obj.top = Math.round(obj.top); + + obj.right = obj.left + obj.width; + obj.bottom = obj.top + obj.height; + + return(obj); + } + + + + /** + * return true if the element is bigger then it's parent + */ + this.isElementBiggerThenParent = function(element){ + + var objParent = element.parent(); + var objSizeElement = t.getElementSize(element); + var objSizeParent = t.getElementSize(objParent); + + if(objSizeElement.width > objSizeParent.width || objSizeElement.height > objSizeParent.height) + return(true); + + return(false); + } + + + /** + * tells if the mouse point inside image + * the mouse point is related to image pos + */ + this.isPointInsideElement = function(point, objSize){ + + var isMouseXInside = (point.x >= 0 && point.x < objSize.width); + if(isMouseXInside == false) + return(false); + + var isMouseYInside = (point.y >= 0 && point.y < objSize.height); + if(isMouseYInside == false) + return(false); + + return(true); + } + + + /** + * get element relative position according the parent + * if the left / top is offset text (left , center, right / top, middle , bottom) + * the element can be number size as well + */ + this.getElementRelativePos = function(element, pos, offset, objParent){ + + if(!objParent) + var objParent = element.parent(); + + if(typeof element == "number"){ + var elementSize = { + width: element, + height: element + }; + }else + var elementSize = t.getElementSize(element); + + var parentSize = t.getElementSize(objParent); + + + switch(pos){ + case "top": + case "left": + pos = 0; + if(offset) + pos += offset; + break; + case "center": + pos = Math.round((parentSize.width - elementSize.width) / 2); + if(offset) + pos += offset; + + break; + case "right": + pos = parentSize.width - elementSize.width; + if(offset) + pos -= offset; + break; + case "middle": + pos = Math.round((parentSize.height - elementSize.height) / 2); + if(offset) + pos += offset; + break; + case "bottom": + pos = parentSize.height - elementSize.height; + if(offset) + pos -= offset; + break; + } + + return(pos); + } + + + + this.z_________SET_ELEMENT_PROPS_______ = function(){} + + + /** + * + * zoom image inside parent + * the mouse point is page offset position, can be null + * return true if zoomed and false if not zoomed + */ + this.zoomImageInsideParent = function(objImage, zoomIn, step, point, scaleMode, maxZoomRatio, objPadding){ + + if(!step) + var step = 1.2; + + if(!scaleMode) + var scaleMode = "fit"; + + var zoomRatio = step; + + var objParent = objImage.parent(); + + var objSize = t.getElementSize(objImage); + var objOriginalSize = t.getImageOriginalSize(objImage); + + + var isMouseInside = false; + var newHeight,newWidth, panX = 0, panY = 0, newX, newY,panOrientX = 0, panOrientY = 0; + + if(!point){ + isMouseInside = false; + }else{ + var pointImg = t.getMouseElementPoint(point, objImage); + isMouseInside = t.isPointInsideElement(pointImg, objSize); + + //if mouse point outside image, set orient to image center + panOrientX = pointImg.x; + panOrientY = pointImg.y; + } + + if(isMouseInside == false){ + var imgCenterPoint = t.getElementCenterPoint(objImage); + panOrientX = imgCenterPoint.x; + panOrientY = imgCenterPoint.y; + } + + //zoom: + if(zoomIn == true){ //zoom in + + newHeight = objSize.height * zoomRatio; + newWidth = objSize.width * zoomRatio; + + if(panOrientX != 0) + panX = -(panOrientX * zoomRatio - panOrientX); + + if(panOrientY != 0) + panY = -(panOrientY * zoomRatio - panOrientY); + + + }else{ //zoom out + + newHeight = objSize.height / zoomRatio; + newWidth = objSize.width / zoomRatio; + + var objScaleData = t.getImageInsideParentData(objParent, objOriginalSize.width, objOriginalSize.height, scaleMode, objPadding); + + //go back to original size + if(newWidth < objScaleData.imageWidth){ + + t.scaleImageFitParent(objImage, objOriginalSize.width, objOriginalSize.height, scaleMode, objPadding); + return(true); + } + + if(isMouseInside == true){ + if(panOrientX != 0) + panX = -(panOrientX / zoomRatio - panOrientX); + + if(panOrientY != 0) + panY = -(panOrientY / zoomRatio - panOrientY); + } + + } + + //check max zoom ratio, ix exeeded, abort + if(maxZoomRatio){ + var expectedZoomRatio = 1; + if(objOriginalSize.width != 0) + expectedZoomRatio = newWidth / objOriginalSize.width; + + if(expectedZoomRatio > maxZoomRatio) + return(false); + } + + //resize the element + t.setElementSize(objImage, newWidth, newHeight); + + //set position: + + //if zoom out and mouse point not inside image, + //get the image to center + if(zoomIn == false && isMouseInside == false){ + var posCenter = t.getElementCenterPosition(objImage); + newX = posCenter.left; + newY = posCenter.top; + }else{ + + newX = objSize.left + panX; + newY = objSize.top + panY; + } + + t.placeElement(objImage, newX, newY); + + return(true); + } + + + + /** + * place some element to some position + * if the left / top is offset text (left , center, right / top, middle , bottom) + * then put it in parent by the offset. + */ + this.placeElement = function(element, left, top, offsetLeft, offsetTop, objParent){ + + + if(jQuery.isNumeric(left) == false || jQuery.isNumeric(top) == false){ + + if(!objParent) + var objParent = element.parent(); + + var elementSize = t.getElementSize(element); + var parentSize = t.getElementSize(objParent); + } + + //select left position + if(jQuery.isNumeric(left) == false){ + + switch(left){ + case "left": + left = 0; + if(offsetLeft) + left += offsetLeft; + break; + case "center": + left = Math.round((parentSize.width - elementSize.width) / 2); + if(offsetLeft) + left += offsetLeft; + break; + case "right": + left = parentSize.width - elementSize.width; + if(offsetLeft) + left -= offsetLeft; + break; + } + } + + //select top position + if(jQuery.isNumeric(top) == false){ + + switch(top){ + case "top": + top = 0; + if(offsetTop) + top += offsetTop; + break; + case "middle": + case "center": + top = Math.round((parentSize.height - elementSize.height) / 2); + if(offsetTop) + top += offsetTop; + break; + case "bottom": + top = parentSize.height - elementSize.height; + if(offsetTop) + top -= offsetTop; + break; + } + + } + + + var objCss = { + "position":"absolute", + "margin":"0px" + }; + + if(left !== null) + objCss.left = left; + + if(top !== null) + objCss.top = top; + + element.css(objCss); + } + + + /** + * place element inside parent center. + * the element should be absolute position + */ + this.placeElementInParentCenter = function(element){ + + t.placeElement(element, "center", "middle"); + } + + + /** + * set element size and position + */ + this.setElementSizeAndPosition = function(element,left,top,width,height){ + + var objCss = { + "width":width+"px", + "height":height+"px", + "left":left+"px", + "top":top+"px", + "position":"absolute", + "margin":"0px" + } + + element.css(objCss); + } + + /** + * set widht and height of the element + */ + this.setElementSize = function(element, width, height){ + + var objCss = { + "width":width+"px" + } + + if(height !== null && typeof height != "undefined") + objCss["height"] = height+"px" + + element.css(objCss); + } + + + /** + * clone element size and position + */ + this.cloneElementSizeAndPos = function(objSource, objTarget, isOuter, offsetX, offsetY){ + + var objSize = objSource.position(); + + if(objSize == undefined){ + throw new Error("Can't get size, empty element"); + } + + if(isOuter === true){ + objSize.height = objSource.outerHeight(); + objSize.width = objSource.outerWidth(); + }else{ + objSize.height = objSource.height(); + objSize.width = objSource.width(); + } + + objSize.left = Math.round(objSize.left); + objSize.top = Math.round(objSize.top); + + if(offsetX) + objSize.left += offsetX; + + if(offsetY) + objSize.top += offsetY; + + t.setElementSizeAndPosition(objTarget, objSize.left, objSize.top, objSize.width, objSize.height); + } + + + /** + * place image inside parent, scale it by the options + * and scale it to fit the parent. + * scaleMode: fit, down, fill + */ + this.placeImageInsideParent = function(urlImage, objParent, originalWidth, originalHeight, scaleMode, objPadding){ + var obj = t.getImageInsideParentData(objParent, originalWidth, originalHeight, scaleMode, objPadding); + + //set html image: + var htmlImage = "<img"; + + if(obj.imageWidth !== null){ + htmlImage += " width = '" + obj.imageWidth + "'"; + obj.style += "width:" + obj.imageWidth + ";"; + } + + if(obj.imageHeight != null){ + + if(obj.imageHeight == "100%"){ + htmlImage += " height = '" + obj.imageHeight+"'"; + obj.style += "height:" + obj.imageHeight+";"; + }else{ + htmlImage += " height = '" + obj.imageHeight + "'"; + obj.style += "height:" + obj.imageHeight + "px;"; + } + + } + + if(obj.imageTop !== null) + obj.style += "top:"+obj.imageTop+"px;"; + + if(obj.imageLeft !== null){ + obj.style += "left:"+obj.imageLeft+"px;"; + } + + urlImage = t.escapeDoubleSlash(urlImage); + + htmlImage += " style='"+obj.style+"'"; + htmlImage += " src=\""+urlImage+"\""; + htmlImage += ">"; + + objParent.html(htmlImage); + + //return the image just created + var objImage = objParent.children("img"); + + return(objImage); + } + + + /** + * scale image to fit parent, and place it into parent + * parent can be width , height, or object + */ + this.scaleImageCoverParent = function(objImage, objParent, pHeight){ + + if(typeof objParent == "number"){ + var parentWidth = objParent; + var parentHeight = pHeight; + }else{ + var parentWidth = objParent.outerWidth(); + var parentHeight = objParent.outerHeight(); + } + + var objOriginalSize = t.getImageOriginalSize(objImage); + + var imageWidth = objOriginalSize.width; + var imageHeight = objOriginalSize.height; + + var ratio = imageWidth / imageHeight; + + var fitHeight = parentHeight; + var fitWidth = fitHeight * ratio; + var posy = 0, posx = 0; + + if(fitWidth < parentWidth){ + fitWidth = parentWidth; + fitHeight = fitWidth / ratio; + + //center y position + posx = 0; + posy = Math.round((fitHeight - parentHeight) / 2 * -1); + }else{ //center x position + posy = 0; + posx = Math.round((fitWidth - parentWidth) / 2 * -1); + } + + fitWidth = Math.round(fitWidth); + fitHeight = Math.round(fitHeight); + + objImage.css({"width":fitWidth+"px", + "height":fitHeight+"px", + "left":posx+"px", + "top":posy+"px"}); + } + + + + + /** + * resize image to fit the parent, scale it by the options + * scaleMode: fit, down, fill + */ + this.scaleImageFitParent = function(objImage, originalWidth, originalHeight, scaleMode, objPadding){ + + var objParent = objImage.parent(); + + var obj = t.getImageInsideParentData(objParent, originalWidth, originalHeight, scaleMode, objPadding); + + var updateCss = false; + + var objCss = {}; + + if(obj.imageWidth !== null){ + updateCss = true + objImage.removeAttr("width"); + objCss["width"] = obj.imageWidth+"px"; + } + + if(obj.imageHeight != null){ + updateCss = true + objImage.removeAttr("height"); + objCss["height"] = obj.imageHeight+"px"; + } + + if(obj.imageTop !== null){ + updateCss = true; + objCss.top = obj.imageTop+"px"; + } + + if(obj.imageLeft !== null){ + updateCss = true; + objCss.left = obj.imageLeft+"px"; + } + + if(updateCss == true){ + + objCss.position = "absolute"; + objCss.margin = "0px 0px"; + + objImage.css(objCss); + } + + + return(obj); + } + + + /** + * scale image by height + */ + this.scaleImageByHeight = function(objImage, height, originalWidth, originalHeight){ + + var objOriginalSize = t.getImageOriginalSize(objImage, originalWidth, originalHeight); + + var ratio = objOriginalSize.width / objOriginalSize.height; + var width = Math.round(height * ratio); + height = Math.round(height); + + t.setElementSize(objImage, width, height); + } + + + /** + * scale image by height + */ + this.scaleImageByWidth = function(objImage, width, originalWidth, originalHeight){ + + var objOriginalSize = t.getImageOriginalSize(objImage, originalWidth, originalHeight); + + var ratio = objOriginalSize.width / objOriginalSize.height; + + var height = Math.round(width / ratio); + width = Math.round(width); + + t.setElementSize(objImage, width, height); + + } + + + /** + * scale image to exact size in parent, by setting image size and padding + */ + this.scaleImageExactSizeInParent = function(objImage, originalWidth, originalHeight, exactWidth, exactHeight, scaleMode){ + + var objParent = objImage.parent(); + var parentSize = t.getElementSize(objParent); + + if(parentSize.width < exactWidth) + exactWidth = parentSize.width; + + if(parentSize.height < exactHeight) + exactHeight = parentSize.height; + + var obj = t.getImageInsideParentData(null, originalWidth, originalHeight, scaleMode, null, exactWidth, exactHeight); + + var imageWidth = exactWidth; + var imageHeight = exactHeight; + + var paddingLeft = obj.imageLeft; + var paddingRight = obj.imageLeft; + var paddingTop = obj.imageTop; + var paddingBottom = obj.imageTop; + var imageLeft = Math.round((parentSize.width - exactWidth) / 2); + var imageTop = Math.round((parentSize.height - exactHeight) / 2); + + var totalWidth = obj.imageWidth + paddingLeft + paddingRight; + var diff = exactWidth - totalWidth; + if(diff != 0) + paddingRight += diff; + + var totalHeight = obj.imageHeight + paddingTop + paddingBottom; + + var diff = exactHeight - totalHeight; + if(diff != 0) + paddingBottom += diff; + + //update css: + objImage.removeAttr("width"); + objImage.removeAttr("height"); + + var objCss = { + position: "absolute", + margin: "0px 0px" + }; + + objCss["width"] = imageWidth+"px"; + objCss["height"] = imageHeight+"px"; + objCss["left"] = imageLeft+"px"; + objCss["top"] = imageTop+"px"; + objCss["padding-left"] = paddingLeft+"px"; + objCss["padding-top"] = paddingTop+"px"; + objCss["padding-right"] = paddingRight+"px"; + objCss["padding-bottom"] = paddingBottom+"px"; + + objImage.css(objCss); + + //return size object + + var objReturn = {}; + objReturn["imageWidth"] = imageWidth; + objReturn["imageHeight"] = imageHeight; + return(objReturn); + } + + + /** + * show some element and make opacity:1 + */ + this.showElement = function(element, element2, element3){ + + element.show().fadeTo(0,1); + + if(element2) + element2.show().fadeTo(0,1); + + if(element3) + element3.show().fadeTo(0,1); + + } + + + this.z_________GALLERY_RELATED_FUNCTIONS_______ = function(){} + + /** + * disable button + */ + this.disableButton = function(objButton, className){ + if(!className) + var className = "ug-button-disabled"; + + if(t.isButtonDisabled(objButton, className) == false) + objButton.addClass(className); + } + + + /** + * convert custom prefix options + * prefix - the prefix. + * base - after the prefix text. example lightbox_slider_option (lightbox - prefix, slider - base) + */ + this.convertCustomPrefixOptions = function(objOptions, prefix, base){ + + if(!prefix) + return(objOptions); + + var modifiedOptions = {}; + + jQuery.each(objOptions, function(key, option){ + + if(key.indexOf(prefix + "_"+base+"_") === 0){ + var newKey = key.replace(prefix+"_"+base+"_", base+"_"); + modifiedOptions[newKey] = option; + }else{ + modifiedOptions[key] = option; + } + + }); + + return(modifiedOptions); + } + + + /** + * enable button + */ + this.enableButton = function(objButton, className){ + if(!className) + var className = "ug-button-disabled"; + + if(t.isButtonDisabled(objButton, className) == true) + objButton.removeClass(className); + } + + + /** + * check if some buggon disabled + */ + this.isButtonDisabled = function(objButton, className){ + if(!className) + var className = "ug-button-disabled"; + + if(objButton.hasClass(className)) + return(true); + + return(false); + } + + + + this.z_________MATH_FUNCTIONS_______ = function(){} + + /** + * + * normalize the value for readable "human" setting value. + */ + this.normalizeSetting = function(realMin, realMax, settingMin, settingMax, value, fixBounds){ + if(!fixBounds) + var fixBounds = false; + + var ratio = (value - settingMin) / (settingMax - settingMin); + value = realMin + (realMax - realMin) * ratio; + + if(fixBounds == true){ + if(value < realMin) + value = realMin; + + if(value > realMax) + value = realMax; + } + + return(value); + } + + + /** + * + * get "real" setting from normalized setting + */ + this.getNormalizedValue = function(realMin, realMax, settingMin, settingMax, realValue){ + + var ratio = (realValue - realMin) / (realMax - realMin); + realValue = realMin + (settingMax - settingMin) * ratio; + + return(realValue); + } + + + /** + * get distance between 2 points + */ + this.getDistance = function(x1,y1,x2,y2) { + + var distance = Math.round(Math.sqrt(Math.abs(((x2-x1)*(x2-x1)) + ((y2-y1)*(y2-y1))))); + + return distance; + } + + + /** + * get center point of the 2 points + */ + this.getMiddlePoint = function(x1,y1,x2,y2){ + var output = {} + output.x = x1 + Math.round((x2 - x1) / 2); + output.y = y1 + Math.round((y2 - y1) / 2); + + return(output); + } + + + /** + * get number of items in space width gap + * even item sizes + * by lowest + */ + this.getNumItemsInSpace = function(spaceSize, itemsSize, gapSize){ + var numItems = Math.floor((spaceSize + gapSize) / (itemsSize + gapSize)); + return(numItems); + } + + /** + * get number of items in space width gap + * even item sizes + * by Math.round + */ + this.getNumItemsInSpaceRound = function(spaceSize, itemsSize, gapSize){ + var numItems = Math.round((spaceSize + gapSize) / (itemsSize + gapSize)); + return(numItems); + } + + /** + * get space (width in carousel for example) by num items, item size, and gap size + */ + this.getSpaceByNumItems = function(numItems, itemSize, gapSize){ + var space = numItems * itemSize + (numItems-1) * gapSize; + return(space); + } + + + /** + * get item size by space and gap + */ + this.getItemSizeInSpace = function(spaceSize, numItems, gapSize){ + var itemSize = Math.floor((spaceSize - (numItems-1) * gapSize) / numItems); + + return(itemSize); + } + + + /** + * get column x pos with even column sizes, start from 0 + */ + this.getColX = function(col, colWidth, colGap){ + + var posx = col * (colWidth + colGap); + + return posx; + } + + + /** + * get column number by index + */ + this.getColByIndex = function(numCols, index){ + var col = index % numCols; + return(col); + } + + + /** + * get col and row by index + */ + this.getColRowByIndex = function(index, numCols){ + + var row = Math.floor(index / numCols); + var col = Math.floor(index % numCols); + + return({col:col,row:row}); + } + + + /** + * get index by row, col, numcols + */ + this.getIndexByRowCol = function(row, col, numCols){ + + if(row < 0) + return(-1); + + if(col < 0) + return(-1); + + var index = row * numCols + col; + return(index); + } + + /** + * get previous row item in the same column + */ + this.getPrevRowSameColIndex = function(index, numCols){ + var obj = t.getColRowByIndex(index, numCols); + var prevIndex = t.getIndexByRowCol(obj.row-1, obj.col, numCols); + return(prevIndex); + } + + /** + * get next row item in the same column + */ + this.getNextRowSameColIndex = function(index, numCols){ + var obj = t.getColRowByIndex(index, numCols); + var nextIndex = t.getIndexByRowCol(obj.row+1, obj.col, numCols); + return(nextIndex); + } + + + this.z_________DATA_FUNCTIONS_______ = function(){} + + + /** + * set data value + */ + this.setGlobalData = function(key, value){ + + jQuery.data(document.body, key, value); + + } + + /** + * get global data + */ + this.getGlobalData = function(key){ + + var value = jQuery.data(document.body, key); + + return(value); + } + + this.z_________EVENT_DATA_FUNCTIONS_______ = function(){} + + + /** + * handle scroll top, return if scroll mode or not + */ + this.handleScrollTop = function(storedEventID){ + + if(t.isTouchDevice() == false) + return(null); + + var objData = t.getStoredEventData(storedEventID); + + var horPass = 15; + var vertPass = 15; + + //check if need to set some movement + if(objData.scrollDir === null){ + + if(Math.abs(objData.diffMouseX) > horPass) + objData.scrollDir = "hor"; + else + if(Math.abs(objData.diffMouseY) > vertPass && Math.abs(objData.diffMouseY) > Math.abs(objData.diffMouseX) ){ + objData.scrollDir = "vert"; + objData.scrollStartY = objData.lastMouseClientY; + objData.scrollOrigin = jQuery(document).scrollTop(); + + g_temp.dataCache[storedEventID].scrollStartY = objData.lastMouseClientY; + g_temp.dataCache[storedEventID].scrollOrigin = objData.scrollOrigin; + } + + //update scrollDir + g_temp.dataCache[storedEventID].scrollDir = objData.scrollDir; + } + + if(objData.scrollDir !== "vert") + return(objData.scrollDir); + + + var currentScroll = jQuery(document).scrollTop(); + + var scrollPos = objData.scrollOrigin - (objData.lastMouseClientY - objData.scrollStartY); + + if(scrollPos >= 0) + jQuery(document).scrollTop(scrollPos); + + return(objData.scrollDir); + } + + + /** + * return true / false if was vertical scrolling + */ + this.wasVerticalScroll = function(storedEventID){ + var objData = t.getStoredEventData(storedEventID); + + if(objData.scrollDir === "vert") + return(true); + + return(false); + } + + + /** + * store event data + */ + this.storeEventData = function(event, id, addData){ + + var mousePos = t.getMousePosition(event); + var time = jQuery.now(); + + var obj = { + startTime: time, + lastTime: time, + startMouseX: mousePos.pageX, + startMouseY: mousePos.pageY, + lastMouseX: mousePos.pageX, + lastMouseY: mousePos.pageY, + + startMouseClientY: mousePos.clientY, + lastMouseClientY: mousePos.clientY, + + scrollTop: jQuery(document).scrollTop(), + scrollDir: null + }; + + if(addData) + obj = jQuery.extend(obj, addData); + + g_temp.dataCache[id] = obj; + + } + + + /** + * update event data with last position + */ + this.updateStoredEventData = function(event, id, addData){ + + if(!g_temp.dataCache[id]) + throw new Error("updateEventData error: must have stored cache object"); + + var obj = g_temp.dataCache[id]; + + var mousePos = t.getMousePosition(event); + obj.lastTime = jQuery.now(); + + if(mousePos.pageX !== undefined){ + obj.lastMouseX = mousePos.pageX; + obj.lastMouseY = mousePos.pageY; + obj.lastMouseClientY = mousePos.clientY; + } + + if(addData) + obj = jQuery.extend(obj, addData); + + g_temp.dataCache[id] = obj; + } + + /** + * get stored event data + */ + this.getStoredEventData = function(id, isVertical){ + if(!g_temp.dataCache[id]) + throw new Error("updateEventData error: must have stored cache object"); + + var obj = g_temp.dataCache[id]; + + obj.diffMouseX = obj.lastMouseX - obj.startMouseX; + obj.diffMouseY = obj.lastMouseY - obj.startMouseY; + + obj.diffMouseClientY = obj.lastMouseClientY - obj.startMouseClientY; + + obj.diffTime = obj.lastTime - obj.startTime; + + //get mouse position according orientation + if(isVertical === true){ + obj.startMousePos = obj.lastMouseY; + obj.lastMousePos = obj.lastMouseY; + obj.diffMousePos = obj.diffMouseY; + }else{ + obj.startMousePos = obj.lastMouseX; + obj.lastMousePos = obj.lastMouseX; + obj.diffMousePos = obj.diffMouseX; + } + + return(obj); + } + + /** + * return if click event approved according the done motion + */ + this.isApproveStoredEventClick = function(id, isVertical){ + + if(!g_temp.dataCache[id]) + return(true); + + var objData = t.getStoredEventData(id, isVertical); + + var passedDistanceAbs = Math.abs(objData.diffMousePos); + + if(objData.diffTime > 400) + return(false); + + if(passedDistanceAbs > 30) + return(false); + + return(true); + + } + + + /** + * clear stored event data + */ + this.clearStoredEventData = function(id){ + g_temp.dataCache[id] = null; + } + + this.z_________CHECK_SUPPORT_FUNCTIONS_______ = function(){} + + + + /** + * is canvas exists in the browser + */ + this.isCanvasExists = function(){ + + var canvas = jQuery('<canvas width="500" height="500" > </canvas>')[0]; + + if(typeof canvas.getContext == "function") + return(true); + + return(false); + } + + /** + * tells if vertical scrollbar exists + */ + this.isScrollbarExists = function(){ + var hasScrollbar = window.innerWidth > document.documentElement.clientWidth; + return(hasScrollbar); + } + + /** + * check if this device are touch enabled + */ + this.isTouchDevice = function(){ + + //get from cache + if(g_temp.isTouchDevice !== -1) + return(g_temp.isTouchDevice); + + try{ + document.createEvent("TouchEvent"); + g_temp.isTouchDevice = true; + } + catch(e){ + g_temp.isTouchDevice = false; + } + + return(g_temp.isTouchDevice); + } + + + + /** + * check if + */ + this.isRgbaSupported = function(){ + + if(g_temp.isRgbaSupported !== -1) + return(g_temp.isRgbaSupported); + + var scriptElement = document.getElementsByTagName('script')[0]; + var prevColor = scriptElement.style.color; + try { + scriptElement.style.color = 'rgba(1,5,13,0.44)'; + } catch(e) {} + var result = scriptElement.style.color != prevColor; + scriptElement.style.color = prevColor; + + g_temp.isRgbaSupported = result; + + return result; + } + + this.z_________GENERAL_FUNCTIONS_______ = function(){} + + + /** + * check if current jquery version is more then minimal version + * version can be "1.8.0" for example + */ + this.checkMinJqueryVersion = function(version){ + + var arrCurrent = jQuery.fn.jquery.split('.'); + var arrMin = version.split('.'); + + for (var i=0, len=arrCurrent.length; i<len; i++) { + + var numCurrent = parseInt(arrCurrent[i]); + var numMin = parseInt(arrMin[i]); + + if(typeof arrMin[i] == "undefined") + return(true); + + if(numMin > numCurrent) + return(false); + + if(numCurrent > numMin) + return(true); + } + + + //if all equal then all ok + return true; + } + + + /** + * get css size parameter, like width. if % given, leave it, if number without px - add px. + */ + this.getCssSizeParam = function(sizeParam){ + if(jQuery.isNumeric(sizeParam)) + return(sizeParam + "px"); + + return(sizeParam); + } + + /** + * convert hex color to rgb color + */ + this.convertHexToRGB = function(hexInput, opacity){ + + var hex = hexInput.replace('#',''); + if(hex === hexInput) + return(hexInput); + + r = parseInt(hex.substring(0,2), 16); + g = parseInt(hex.substring(2,4), 16); + b = parseInt(hex.substring(4,6), 16); + result = 'rgba('+r+','+g+','+b+','+opacity+')'; + return result; + } + + /** + * get timestamp to string + */ + this.timestampToString = function(stamp){ + + var d = new Date(stamp); + var str = d.getDate() + "/" + d.getMonth(); + str += " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds() + ":" + d.getMilliseconds(); + + return(str); + } + + /** + * get touches array (if exists) from the event + */ + this.getArrTouches = function(event){ + + var arrTouches = []; + + if(event.originalEvent && event.originalEvent.touches && event.originalEvent.touches.length > 0){ + arrTouches = event.originalEvent.touches; + } + + return(arrTouches); + } + + /** + * extract touch positions from arrTouches + */ + this.getArrTouchPositions = function(arrTouches){ + + var arrOutput = []; + + for(var i=0;i<arrTouches.length;i++){ + + var point = { + pageX:arrTouches[i].pageX, + pageY:arrTouches[i].pageY + }; + + arrOutput.push(point); + } + + return(arrOutput); + } + + + /** + * start time debug + */ + this.startTimeDebug = function(){ + g_temp.starTime = jQuery.now(); + } + + /** + * show time debug + */ + this.showTimeDebug = function(){ + + var endTime = jQuery.now(); + var diffTime = endTime - g_temp.starTime; + + debugLine({"Time Passed": diffTime},true); + } + + + /** + * put progress indicator to some parent by type + * return the progress indicator object + */ + this.initProgressIndicator = function(type, options, objParent){ + + //check canvas compatability + if(type != "bar" && t.isCanvasExists() == false) + type = "bar"; + + //put the progress indicator + switch(type){ + case "bar": + var g_objProgress = new UGProgressBar(); + g_objProgress.putHidden(objParent, options); + break; + default: + case "pie": + var g_objProgress = new UGProgressPie(); + g_objProgress.putHidden(objParent, options); + break; + case "pie2": + options.type_fill = true; + + var g_objProgress = new UGProgressPie(); + g_objProgress.putHidden(objParent, options); + break; + } + + return(g_objProgress); + } + + + /** + * add to button ug-nohover class on ipad + * need to be processed in css + */ + this.setButtonMobileReady = function(objButton){ + + objButton.on("touchstart",function(event){ + //event.preventDefault(); + jQuery(this).addClass("ug-nohover"); + }); + + objButton.on("mousedown touchend",function(event){ + + //debugLine("button touchend",true,true); + //event.preventDefault(); + event.stopPropagation(); + event.stopImmediatePropagation(); + + //debugLine(event.type, true, true); + + return(false); + }); + + } + + + /** + * register gallery theme + */ + this.registerTheme = function(themeName){ + + g_temp.arrThemes.push(themeName); + } + + /** + * get themes array + */ + this.getArrThemes = function(){ + + return(g_temp.arrThemes); + } + + + /** + * check if theme exists + */ + this.isThemeRegistered = function(theme){ + + if(jQuery.inArray(theme, g_temp.arrThemes) !== -1) + return(true); + + return(false); + } + + /** + * get first registered theme name + */ + this.getFirstRegisteredTheme = function(){ + if(g_temp.arrThemes.length == 0) + return(""); + var themeName = g_temp.arrThemes[0]; + + return(themeName); + } + + + + + /** + * function checks if enought time passsed between function calls. + * good for filtering same time events + */ + this.isTimePassed = function(handlerName, timeLimit){ + + if(!timeLimit) + var timeLimit = 100; + + var currentTime = jQuery.now(); + if(g_temp.timeCache.hasOwnProperty(handlerName) == false) + lastTime = 0; + else + lastTime = g_temp.timeCache[handlerName]; + + var diffTime = currentTime - lastTime; + + g_temp.timeCache[handlerName] = currentTime; + + //debugLine(diffTime,true,true); + + if(diffTime <= timeLimit) + return(false); + + return(true); + } + + + /** + * check if continious event is over like resize + */ + this.whenContiniousEventOver = function(handlerName, onEventOver, timeLimit){ + + if(!timeLimit) + var timeLimit = 300; + + + if(g_temp.timeCache.hasOwnProperty(handlerName) == true && g_temp.timeCache[handlerName] != null){ + clearTimeout(g_temp.timeCache[handlerName]); + g_temp.timeCache[handlerName] = null; + } + + g_temp.timeCache[handlerName] = setTimeout(onEventOver, timeLimit); + } + + + /** + * validate click and touchstart events. + * if click comes after touchstart, return false. + */ + this.validateClickTouchstartEvent = function(eventType){ + + var returnVal = true; + + var diff = jQuery.now() - g_temp.lastEventTime; + + //debugLine({lastType:g_temp.lastEventType, diff:diff},true, true); + + if(eventType == "click" && g_temp.lastEventType == "touchstart" && diff < 1000) + returnVal = false; + + g_temp.lastEventTime = jQuery.now(); + g_temp.lastEventType = eventType; + + return(returnVal); + } + + /** + * add some class on hover (hover event) + */ + this.addClassOnHover = function(element,className){ + if(!className) + var className = "ug-button-hover"; + + element.hover(function(){ + jQuery(this).addClass(className); + },function(){ + jQuery(this).removeClass(className); + }); + + } + + /** + * destroy hover effect on elements + */ + this.destroyButton = function(element){ + element.off("mouseenter"); + element.off("mouseleave"); + element.off("click"); + element.off("touchstart"); + element.off("touchend"); + element.off("mousedown"); + } + + /** + * set button on click event, advanced + */ + this.setButtonOnClick = function(objButton, onClickFunction){ + + t.setButtonMobileReady(objButton); + + objButton.on("click touchstart", function(event){ + + objThis = jQuery(this); + + event.stopPropagation(); + event.stopImmediatePropagation(); + + if(t.validateClickTouchstartEvent(event.type) == false) + return(true); + + onClickFunction(objThis, event); + }); + + } + + /** + * load javascript dynamically + */ + this.loadJs = function(url, addProtocol){ + + if(addProtocol === true) + url = location.protocol + "//" + url; + + var tag = document.createElement('script'); + tag.src = url; + var firstScriptTag = document.getElementsByTagName('script')[0]; + firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); + } + + /** + * load css dymanically + */ + this.loadCss = function(url, addProtocol){ + if(addProtocol === true) + url = location.protocol + "//" + url; + + var tag=document.createElement("link"); + tag.setAttribute("rel", "stylesheet"); + tag.setAttribute("type", "text/css"); + tag.setAttribute("href", url); + + document.getElementsByTagName("head")[0].appendChild(tag); + } + + /** + * add event listener with old browsers fallback + */ + this.addEvent = function(elem, event, func ) { + + if (typeof (elem.addEventListener) != "undefined") { + elem.addEventListener(event, func, false); + } else if (elem.attachEvent) { + elem.attachEvent('on' + event, func); + } + + } + + + + + /** + * fire event where all images are loaded + */ + this.checkImagesLoaded = function(objImages, onComplete, onProgress){ + + var arrImages = []; + var counter = 0; + var numImages = objImages.length; + + //if no images - exit + if(numImages == 0 && onComplete){ + onComplete(); + return(false); + } + + //nested function + function checkComplete(image, isError){ + counter++; + + if(typeof onProgress == "function"){ + + setTimeout(function(){ + onProgress(image, isError); + }); + } + + if(counter == numImages && typeof onComplete == "function"){ + setTimeout(function(){ + onComplete(); + }); + } + + } + + + //start a little later + setTimeout(function(){ + + //start the function + for(var index=0;index < numImages; index++){ + var image = objImages[index]; + + //arrImages.push(jQuery(image)); + if(image.naturalWidth !== undefined && image.naturalWidth !== 0){ + checkComplete(objImages[index], false); + } + else{ + var proxyImage = jQuery('<img/>'); + proxyImage.data("index", index); + + proxyImage.on("load", function(){ + var index = jQuery(this).data("index"); + checkComplete(objImages[index], false); + }); + proxyImage.on("error", function(){ + var index = jQuery(this).data("index"); + checkComplete(objImages[index], true); + }); + proxyImage.attr("src", image.src); + } + } + + }); + + + } + + + /** + * run the function when the element size will be not 0 + */ + this.waitForWidth = function(element, func){ + var width = element.width(); + if(width != 0){ + func(); + return(false); + } + + g_temp.handle = setInterval(function(){ + width = element.width(); + if(width != 0){ + clearInterval(g_temp.handle); + func(); + } + + }, 300); + + } + + /** + * shuffle (randomise) array + */ + this.arrayShuffle = function(arr){ + + if(typeof arr != "object") + return(arr); + + for(var j, x, i = arr.length; i; j = parseInt(Math.random() * i), x = arr[--i], arr[i] = arr[j], arr[j] = x); + return arr; + } + + + /** + * get object length + */ + this.getObjectLength = function(object){ + var num = 0; + for(var item in object) + num++; + return num; + } + + /** + * normalize the percent, return always between 0 and 1 + */ + this.normalizePercent = function(percent){ + + if(percent < 0) + percent = 0; + + if(percent > 1) + percent = 1; + + return(percent); + } + + + /** + * strip tags from string + */ + this.stripTags = function(html){ + + var text = html.replace(/(<([^>]+)>)/ig,""); + + return(text); + } + + + /** + * escape double slash + */ + this.escapeDoubleSlash = function(str){ + + return str.replace('"','\"'); + } + + + /** + * html entitles + */ + this.htmlentitles = function(html){ + var text = jQuery('<div/>').text(html).html(); + return(text); + } + + + this.z_________END_GENERAL_FUNCTIONS_______ = function(){} + +} + + + +var g_ugFunctions = new UGFunctions(); + + +/** -------------- END UgFunctions class ---------------------*/ + + + +/** -------------- MouseWheel ---------------------*/ + +!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e:e(jQuery)}(function(e){function t(t){var s=t||window.event,a=h.call(arguments,1),u=0,r=0,d=0,f=0;if(t=e.event.fix(s),t.type="mousewheel","detail"in s&&(d=-1*s.detail),"wheelDelta"in s&&(d=s.wheelDelta),"wheelDeltaY"in s&&(d=s.wheelDeltaY),"wheelDeltaX"in s&&(r=-1*s.wheelDeltaX),"axis"in s&&s.axis===s.HORIZONTAL_AXIS&&(r=-1*d,d=0),u=0===d?r:d,"deltaY"in s&&(d=-1*s.deltaY,u=d),"deltaX"in s&&(r=s.deltaX,0===d&&(u=-1*r)),0!==d||0!==r){if(1===s.deltaMode){var c=e.data(this,"mousewheel-line-height");u*=c,d*=c,r*=c}else if(2===s.deltaMode){var m=e.data(this,"mousewheel-page-height");u*=m,d*=m,r*=m}return f=Math.max(Math.abs(d),Math.abs(r)),(!l||l>f)&&(l=f,i(s,f)&&(l/=40)),i(s,f)&&(u/=40,r/=40,d/=40),u=Math[u>=1?"floor":"ceil"](u/l),r=Math[r>=1?"floor":"ceil"](r/l),d=Math[d>=1?"floor":"ceil"](d/l),t.deltaX=r,t.deltaY=d,t.deltaFactor=l,t.deltaMode=0,a.unshift(t,u,r,d),o&&clearTimeout(o),o=setTimeout(n,200),(e.event.dispatch||e.event.handle).apply(this,a)}}function n(){l=null}function i(e,t){return r.settings.adjustOldDeltas&&"mousewheel"===e.type&&t%120===0}var o,l,s=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],a="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],h=Array.prototype.slice;if(e.event.fixHooks)for(var u=s.length;u;)e.event.fixHooks[s[--u]]=e.event.mouseHooks;var r=e.event.special.mousewheel={version:"3.1.9",setup:function(){if(this.addEventListener)for(var n=a.length;n;)this.addEventListener(a[--n],t,!1);else this.onmousewheel=t;e.data(this,"mousewheel-line-height",r.getLineHeight(this)),e.data(this,"mousewheel-page-height",r.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var e=a.length;e;)this.removeEventListener(a[--e],t,!1);else this.onmousewheel=null},getLineHeight:function(t){return parseInt(e(t)["offsetParent"in e.fn?"offsetParent":"parent"]().css("fontSize"),10)},getPageHeight:function(t){return e(t).height()},settings:{adjustOldDeltas:!0}};e.fn.extend({mousewheel:function(e){return e?this.bind("mousewheel",e):this.trigger("mousewheel")},unmousewheel:function(e){return this.unbind("mousewheel",e)}})}); + +/** -------------- EASING FUNCTIONS ---------------------*/ + +(function(factory){if(typeof define==="function"&&define.amd){define(["jquery"],function($){return factory($)})}else if(typeof module==="object"&&typeof module.exports==="object"){exports=factory(require("jquery"))}else{factory(jQuery)}})(function($){$.easing["jswing"]=$.easing["swing"];var pow=Math.pow,sqrt=Math.sqrt,sin=Math.sin,cos=Math.cos,PI=Math.PI,c1=1.70158,c2=c1*1.525,c3=c1+1,c4=2*PI/3,c5=2*PI/4.5;function bounceOut(x){var n1=7.5625,d1=2.75;if(x<1/d1){return n1*x*x}else if(x<2/d1){return n1*(x-=1.5/d1)*x+.75}else if(x<2.5/d1){return n1*(x-=2.25/d1)*x+.9375}else{return n1*(x-=2.625/d1)*x+.984375}}$.extend($.easing,{def:"easeOutQuad",swing:function(x){return $.easing[$.easing.def](x)},easeInQuad:function(x){return x*x},easeOutQuad:function(x){return 1-(1-x)*(1-x)},easeInOutQuad:function(x){return x<.5?2*x*x:1-pow(-2*x+2,2)/2},easeInCubic:function(x){return x*x*x},easeOutCubic:function(x){return 1-pow(1-x,3)},easeInOutCubic:function(x){return x<.5?4*x*x*x:1-pow(-2*x+2,3)/2},easeInQuart:function(x){return x*x*x*x},easeOutQuart:function(x){return 1-pow(1-x,4)},easeInOutQuart:function(x){return x<.5?8*x*x*x*x:1-pow(-2*x+2,4)/2},easeInQuint:function(x){return x*x*x*x*x},easeOutQuint:function(x){return 1-pow(1-x,5)},easeInOutQuint:function(x){return x<.5?16*x*x*x*x*x:1-pow(-2*x+2,5)/2},easeInSine:function(x){return 1-cos(x*PI/2)},easeOutSine:function(x){return sin(x*PI/2)},easeInOutSine:function(x){return-(cos(PI*x)-1)/2},easeInExpo:function(x){return x===0?0:pow(2,10*x-10)},easeOutExpo:function(x){return x===1?1:1-pow(2,-10*x)},easeInOutExpo:function(x){return x===0?0:x===1?1:x<.5?pow(2,20*x-10)/2:(2-pow(2,-20*x+10))/2},easeInCirc:function(x){return 1-sqrt(1-pow(x,2))},easeOutCirc:function(x){return sqrt(1-pow(x-1,2))},easeInOutCirc:function(x){return x<.5?(1-sqrt(1-pow(2*x,2)))/2:(sqrt(1-pow(-2*x+2,2))+1)/2},easeInElastic:function(x){return x===0?0:x===1?1:-pow(2,10*x-10)*sin((x*10-10.75)*c4)},easeOutElastic:function(x){return x===0?0:x===1?1:pow(2,-10*x)*sin((x*10-.75)*c4)+1},easeInOutElastic:function(x){return x===0?0:x===1?1:x<.5?-(pow(2,20*x-10)*sin((20*x-11.125)*c5))/2:pow(2,-20*x+10)*sin((20*x-11.125)*c5)/2+1},easeInBack:function(x){return c3*x*x*x-c1*x*x},easeOutBack:function(x){return 1+c3*pow(x-1,3)+c1*pow(x-1,2)},easeInOutBack:function(x){return x<.5?pow(2*x,2)*((c2+1)*2*x-c2)/2:(pow(2*x-2,2)*((c2+1)*(x*2-2)+c2)+2)/2},easeInBounce:function(x){return 1-bounceOut(1-x)},easeOutBounce:bounceOut,easeInOutBounce:function(x){return x<.5?(1-bounceOut(1-2*x))/2:(1+bounceOut(2*x-1))/2}})}); + +/** -------------- JQuery Color Animations ---------------------*/ + +!function(r,n){ + if(typeof r.cssHooks == "undefined") //error protection + return(false); + function t(r,n,t){var e=f[n.type]||{};return null==r?t||!n.def?null:n.def:(r=e.floor?~~r:parseFloat(r),isNaN(r)?n.def:e.mod?(r+e.mod)%e.mod:0>r?0:e.max<r?e.max:r)}function e(n){var t=l(),e=t._rgba=[];return n=n.toLowerCase(),h(u,function(r,o){var a,s=o.re.exec(n),i=s&&o.parse(s),u=o.space||"rgba";return i?(a=t[u](i),t[c[u].cache]=a[c[u].cache],e=t._rgba=a._rgba,!1):void 0}),e.length?("0,0,0,0"===e.join()&&r.extend(e,a.transparent),t):a[n]}function o(r,n,t){return t=(t+1)%1,1>6*t?r+(n-r)*t*6:1>2*t?n:2>3*t?r+(n-r)*(2/3-t)*6:r}var a,s="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",i=/^([\-+])=\s*(\d+\.?\d*)/,u=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(r){return[r[1],r[2],r[3],r[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(r){return[2.55*r[1],2.55*r[2],2.55*r[3],r[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(r){return[parseInt(r[1],16),parseInt(r[2],16),parseInt(r[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(r){return[parseInt(r[1]+r[1],16),parseInt(r[2]+r[2],16),parseInt(r[3]+r[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(r){return[r[1],r[2]/100,r[3]/100,r[4]]}}],l=r.Color=function(n,t,e,o){return new r.Color.fn.parse(n,t,e,o)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},f={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},p=l.support={},d=r("<p>")[0],h=r.each;d.style.cssText="background-color:rgba(1,1,1,.5)",p.rgba=d.style.backgroundColor.indexOf("rgba")>-1,h(c,function(r,n){n.cache="_"+r,n.props.alpha={idx:3,type:"percent",def:1}}),l.fn=r.extend(l.prototype,{parse:function(o,s,i,u){if(o===n)return this._rgba=[null,null,null,null],this;(o.jquery||o.nodeType)&&(o=r(o).css(s),s=n);var f=this,p=r.type(o),d=this._rgba=[];return s!==n&&(o=[o,s,i,u],p="array"),"string"===p?this.parse(e(o)||a._default):"array"===p?(h(c.rgba.props,function(r,n){d[n.idx]=t(o[n.idx],n)}),this):"object"===p?(o instanceof l?h(c,function(r,n){o[n.cache]&&(f[n.cache]=o[n.cache].slice())}):h(c,function(n,e){var a=e.cache;h(e.props,function(r,n){if(!f[a]&&e.to){if("alpha"===r||null==o[r])return;f[a]=e.to(f._rgba)}f[a][n.idx]=t(o[r],n,!0)}),f[a]&&r.inArray(null,f[a].slice(0,3))<0&&(f[a][3]=1,e.from&&(f._rgba=e.from(f[a])))}),this):void 0},is:function(r){var n=l(r),t=!0,e=this;return h(c,function(r,o){var a,s=n[o.cache];return s&&(a=e[o.cache]||o.to&&o.to(e._rgba)||[],h(o.props,function(r,n){return null!=s[n.idx]?t=s[n.idx]===a[n.idx]:void 0})),t}),t},_space:function(){var r=[],n=this;return h(c,function(t,e){n[e.cache]&&r.push(t)}),r.pop()},transition:function(r,n){var e=l(r),o=e._space(),a=c[o],s=0===this.alpha()?l("transparent"):this,i=s[a.cache]||a.to(s._rgba),u=i.slice();return e=e[a.cache],h(a.props,function(r,o){var a=o.idx,s=i[a],l=e[a],c=f[o.type]||{};null!==l&&(null===s?u[a]=l:(c.mod&&(l-s>c.mod/2?s+=c.mod:s-l>c.mod/2&&(s-=c.mod)),u[a]=t((l-s)*n+s,o)))}),this[o](u)},blend:function(n){if(1===this._rgba[3])return this;var t=this._rgba.slice(),e=t.pop(),o=l(n)._rgba;return l(r.map(t,function(r,n){return(1-e)*o[n]+e*r}))},toRgbaString:function(){var n="rgba(",t=r.map(this._rgba,function(r,n){return null==r?n>2?1:0:r});return 1===t[3]&&(t.pop(),n="rgb("),n+t.join()+")"},toHslaString:function(){var n="hsla(",t=r.map(this.hsla(),function(r,n){return null==r&&(r=n>2?1:0),n&&3>n&&(r=Math.round(100*r)+"%"),r});return 1===t[3]&&(t.pop(),n="hsl("),n+t.join()+")"},toHexString:function(n){var t=this._rgba.slice(),e=t.pop();return n&&t.push(~~(255*e)),"#"+r.map(t,function(r){return r=(r||0).toString(16),1===r.length?"0"+r:r}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(r){if(null==r[0]||null==r[1]||null==r[2])return[null,null,null,r[3]];var n,t,e=r[0]/255,o=r[1]/255,a=r[2]/255,s=r[3],i=Math.max(e,o,a),u=Math.min(e,o,a),l=i-u,c=i+u,f=.5*c;return n=u===i?0:e===i?60*(o-a)/l+360:o===i?60*(a-e)/l+120:60*(e-o)/l+240,t=0===l?0:.5>=f?l/c:l/(2-c),[Math.round(n)%360,t,f,null==s?1:s]},c.hsla.from=function(r){if(null==r[0]||null==r[1]||null==r[2])return[null,null,null,r[3]];var n=r[0]/360,t=r[1],e=r[2],a=r[3],s=.5>=e?e*(1+t):e+t-e*t,i=2*e-s;return[Math.round(255*o(i,s,n+1/3)),Math.round(255*o(i,s,n)),Math.round(255*o(i,s,n-1/3)),a]},h(c,function(e,o){var a=o.props,s=o.cache,u=o.to,c=o.from;l.fn[e]=function(e){if(u&&!this[s]&&(this[s]=u(this._rgba)),e===n)return this[s].slice();var o,i=r.type(e),f="array"===i||"object"===i?e:arguments,p=this[s].slice();return h(a,function(r,n){var e=f["object"===i?r:n.idx];null==e&&(e=p[n.idx]),p[n.idx]=t(e,n)}),c?(o=l(c(p)),o[s]=p,o):l(p)},h(a,function(n,t){l.fn[n]||(l.fn[n]=function(o){var a,s=r.type(o),u="alpha"===n?this._hsla?"hsla":"rgba":e,l=this[u](),c=l[t.idx];return"undefined"===s?c:("function"===s&&(o=o.call(this,c),s=r.type(o)),null==o&&t.empty?this:("string"===s&&(a=i.exec(o),a&&(o=c+parseFloat(a[2])*("+"===a[1]?1:-1))),l[t.idx]=o,this[u](l)))})})}),l.hook=function(n){var t=n.split(" ");h(t,function(n,t){r.cssHooks[t]={set:function(n,o){var a,s,i="";if("transparent"!==o&&("string"!==r.type(o)||(a=e(o)))){if(o=l(a||o),!p.rgba&&1!==o._rgba[3]){for(s="backgroundColor"===t?n.parentNode:n;(""===i||"transparent"===i)&&s&&s.style;)try{i=r.css(s,"backgroundColor"),s=s.parentNode}catch(u){}o=o.blend(i&&"transparent"!==i?i:"_default")}o=o.toRgbaString()}try{n.style[t]=o}catch(u){}}},r.fx.step[t]=function(n){n.colorInit||(n.start=l(n.elem,t),n.end=l(n.end),n.colorInit=!0),r.cssHooks[t].set(n.elem,n.start.transition(n.end,n.pos))}})},l.hook(s),r.cssHooks.borderColor={expand:function(r){var n={};return h(["Top","Right","Bottom","Left"],function(t,e){n["border"+e+"Color"]=r}),n}},a=r.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery); + + +/** -------------- SOME GENERAL FUNCTIONS ---------------------*/ + +/** + * ismouseover function - check if the mouse over some object + */ +!function(t){function e(){try{var i=this===document?t(this):t(this).contents();}catch(error){return(false);}i.mousemove(function(e){t.mlp={x:e.pageX,y:e.pageY}}),i.find("iframe").on("load",e)}t.mlp={x:0,y:0},t(e),t.fn.ismouseover=function(){var e=!1;return this.eq(0).each(function(){var i=t(this).is("iframe")?t(this).contents().find("body"):t(this),n=i.offset();e=n.left<=t.mlp.x&&n.left+i.outerWidth()>t.mlp.x&&n.top<=t.mlp.y&&n.top+i.outerHeight()>t.mlp.y}),e}}(jQuery); + + + +function UGThumbsGeneral(){ + + var t = this, g_objThis = jQuery(t); + + var g_gallery = new UniteGalleryMain(), g_objGallery, g_objects, g_objWrapper; + var g_arrItems, g_objStrip, g_objParent; + var g_functions = new UGFunctions(); + var g_strip; + var outer_options; + + this.events = { + SETOVERSTYLE: "thumbmouseover", + SETNORMALSTYLE: "thumbmouseout", + SETSELECTEDSTYLE: "thumbsetselected", + + PLACEIMAGE: "thumbplaceimage", + AFTERPLACEIMAGE: "thumb_after_place_image", + IMAGELOADERROR: "thumbimageloaderror", + THUMB_IMAGE_LOADED: "thumb_image_loaded" + }; + + var g_options = { + thumb_width:88, //thumb width + thumb_height:50, //thumb height + thumb_fixed_size: true, //true,false - fixed/dynamic thumbnail width + thumb_resize_by: "height", //set resize by width or height of the image in case of non fixed size, + + thumb_border_effect:true, //true, false - specify if the thumb has border + thumb_border_width: 0, //thumb border width + thumb_border_color: "#000000", //thumb border color + thumb_over_border_width: 0, //thumb border width in mouseover state + thumb_over_border_color: "#d9d9d9", //thumb border color in mouseover state + thumb_selected_border_width: 1, //thumb width in selected state + thumb_selected_border_color: "#d9d9d9", //thumb border color in selected state + + thumb_round_corners_radius:0, //thumb border radius + + thumb_color_overlay_effect: true, //true,false - thumb color overlay effect, release the overlay on mouseover and selected states + thumb_overlay_color: "#000000", //thumb overlay color + thumb_overlay_opacity: 0.4, //thumb overlay color opacity + thumb_overlay_reverse:false, //true,false - reverse the overlay, will be shown on selected state only + + thumb_image_overlay_effect: false, //true,false - images orverlay effect on normal state only + thumb_image_overlay_type: "bw", //bw , blur, sepia - the type of image effect overlay, black and white, sepia and blur. + + thumb_transition_duration: 200, //thumb effect transition duration + thumb_transition_easing: "easeOutQuad", //thumb effect transition easing + + thumb_show_loader: true, //show thumb loader while loading the thumb + thumb_loader_type: "dark", //dark, light - thumb loader type + + thumb_wrapper_as_link: false, //set thumb as link + thumb_link_newpage: false //set the link to open newpage + } + + var g_temp = { + touchEnabled: false, + num_thumbs_checking:0, + customThumbs:false, + funcSetCustomThumbHtml:null, + isEffectBorder: false, + isEffectOverlay: false, + isEffectImage: false, + colorOverlayOpacity: 1, + thumbInnerReduce: 0, + allowOnResize: true //allow onresize event + }; + + + var g_serviceParams = { //service variables + timeout_thumb_check:100, + thumb_max_check_times:600, //60 seconds + eventSizeChange: "thumb_size_change" + }; + + /** + * init the thumbs object + */ + this.init = function(gallery, customOptions){ + g_objects = gallery.getObjects(); + g_gallery = gallery; + g_objGallery = jQuery(gallery); + g_objWrapper = g_objects.g_objWrapper; + g_arrItems = g_objects.g_arrItems; + + g_options = jQuery.extend(g_options, customOptions); + + //set effects vars: + g_temp.isEffectBorder = g_options.thumb_border_effect; + g_temp.isEffectOverlay = g_options.thumb_color_overlay_effect; + g_temp.isEffectImage = g_options.thumb_image_overlay_effect; + + } + + this._____________EXTERNAL_SETTERS__________ = function(){}; + + /** + * append the thumbs html to some parent + */ + this.setHtmlThumbs = function(objParent){ + + g_objParent = objParent; + + var numItems = g_gallery.getNumItems(); + + //set image effect class + if(g_temp.isEffectImage == true){ + var imageEffectClass = getImageEffectsClass(); + } + + //append thumbs to strip + for(var i=0;i<numItems;i++){ + + var objItem = g_arrItems[i]; + + var classAddition = ""; + if(g_temp.customThumbs == false) + classAddition = " ug-thumb-generated"; + + var zIndex = objItem.index + 1; + var thumbStyle = "style='z-index:"+zIndex+";'"; + + var htmlThumb = "<div class='ug-thumb-wrapper"+classAddition+"' " + thumbStyle + "></div>"; + + if(g_options.thumb_wrapper_as_link == true){ + var urlLink = objItem.link; + if(objItem.link == "") + urlLink = "javascript:void(0)"; + + var linkTarget = ""; + if(g_options.thumb_link_newpage == true && objItem.link) + linkTarget = " target='_blank'"; + + var htmlThumb = "<a href='" + urlLink + "'"+linkTarget+" class='ug-thumb-wrapper"+classAddition+"'></a>"; + } + + var objThumbWrapper = jQuery(htmlThumb); + + var objImage = objItem.objThumbImage; + + if(g_temp.customThumbs == false){ + + if(g_options.thumb_show_loader == true && objImage){ + + var loaderClass = "ug-thumb-loader-dark"; + if(g_options.thumb_loader_type == "bright") + loaderClass = "ug-thumb-loader-bright"; + + objThumbWrapper.append("<div class='ug-thumb-loader " + loaderClass + "'></div>"); + objThumbWrapper.append("<div class='ug-thumb-error' style='display:none'></div>"); + } + + if(objImage){ + objImage.addClass("ug-thumb-image"); + + //if image overlay effects active, clone the image, and set the effects class on it + if(g_options.thumb_image_overlay_effect == true){ + var objImageOverlay = objImage.clone().appendTo(objThumbWrapper); + + objImageOverlay.addClass("ug-thumb-image-overlay " + imageEffectClass).removeClass("ug-thumb-image"); + objImageOverlay.fadeTo(0,0); + objItem.objImageOverlay = objImageOverlay; + } + + objThumbWrapper.append(objImage); + } + + }//end if not custom thumb + + if(g_temp.isEffectBorder) + objThumbWrapper.append("<div class='ug-thumb-border-overlay'></div>"); + + if(g_temp.isEffectOverlay) + objThumbWrapper.append("<div class='ug-thumb-overlay'></div>"); + + g_objParent.append(objThumbWrapper); + + //only custom thumbs function + if(g_temp.customThumbs){ + + g_temp.funcSetCustomThumbHtml(objThumbWrapper, objItem); + + } + + //add thumb wrapper object to items array + g_arrItems[i].objThumbWrapper = objThumbWrapper; + + } + } + + + function _______________SETTERS______________(){}; + + + /** + * set thumb size with all the inside components (without the image). + * else, set to all the thumbs + */ + function setThumbSize(width, height, objThumb, innerOnly){ + + var objCss = { + width: width+"px", + height: height+"px" + }; + + var objCssInner = { + width: width-g_temp.thumbInnerReduce+"px", + height: height-g_temp.thumbInnerReduce+"px" + }; + + var selectorsString = ".ug-thumb-loader, .ug-thumb-error, .ug-thumb-border-overlay, .ug-thumb-overlay"; + + //set thumb size + if(objThumb){ + if(innerOnly !== true) + objThumb.css(objCss); + + objThumb.children(selectorsString).css(objCssInner); + } + else{ //set to all items + g_objParent.children(".ug-thumb-wrapper").css(objCss); + g_objParent.find(selectorsString).css(objCssInner); + } + + } + + + /** + * set thumb border effect + */ + function setThumbBorderEffect(objThumb, borderWidth, borderColor, noAnimation){ + + if(!noAnimation) + var noAnimation = false; + + if(g_gallery.isFakeFullscreen()) + noAnimation = true; + + var objBorderOverlay = objThumb.children(".ug-thumb-border-overlay"); + + //set the border to thumb and not to overlay if no border size transition + /* + if(g_options.thumb_border_width == g_options.thumb_over_border_width + && g_options.thumb_border_width == g_options.thumb_selected_border_width) + objBorderOverlay = objThumb; + */ + + var objCss = {}; + + objCss["border-width"] = borderWidth + "px"; + + if(borderWidth != 0) + objCss["border-color"] = borderColor; + + if(noAnimation && noAnimation === true){ + objBorderOverlay.css(objCss); + + if(borderWidth == 0) + objBorderOverlay.hide(); + else + objBorderOverlay.show(); + } + else{ + + if(borderWidth == 0) + objBorderOverlay.stop().fadeOut(g_options.thumb_transition_duration); + else + objBorderOverlay.show().stop().fadeIn(g_options.thumb_transition_duration); + + animateThumb(objBorderOverlay, objCss); + } + + } + + + /** + * set thumb border effect + */ + function setThumbColorOverlayEffect(objThumb, isActive, noAnimation){ + + var objOverlay = objThumb.children(".ug-thumb-overlay"); + + var animationDuration = g_options.thumb_transition_duration; + if(noAnimation && noAnimation === true) + animationDuration = 0; + + if(isActive){ + objOverlay.stop(true).fadeTo(animationDuration, g_temp.colorOverlayOpacity); + }else{ + objOverlay.stop(true).fadeTo(animationDuration, 0); + } + + } + + + /** + * set thumbnail bw effect + */ + function setThumbImageOverlayEffect(objThumb, isActive, noAnimation){ + + var objImage = objThumb.children("img.ug-thumb-image"); + var objImageOverlay = objThumb.children("img.ug-thumb-image-overlay"); + + var animationDuration = g_options.thumb_transition_duration; + if(noAnimation && noAnimation === true) + animationDuration = 0; + + if(isActive){ + objImageOverlay.stop(true).fadeTo(animationDuration,1); + }else{ + //show the image, hide the overlay + objImage.fadeTo(0,1); + objImageOverlay.stop(true).fadeTo(animationDuration,0); + } + + } + + + /** + * on thumb mouse out - return the thumb style to original + */ + this.setThumbNormalStyle = function(objThumb, noAnimation, fromWhere){ + + if(g_temp.customThumbs == true){ + objThumb.removeClass("ug-thumb-over"); + } + + if(g_temp.isEffectBorder) + setThumbBorderEffect(objThumb, g_options.thumb_border_width, g_options.thumb_border_color, noAnimation); + + if(g_temp.isEffectOverlay){ + var isSet = (g_options.thumb_overlay_reverse == true)?false:true; + setThumbColorOverlayEffect(objThumb, isSet, noAnimation); + } + + if(g_temp.isEffectImage){ + setThumbImageOverlayEffect(objThumb, true, noAnimation); + } + + g_objThis.trigger(t.events.SETNORMALSTYLE, objThumb); + } + + + /** + * on thumb mouse over - turn thumb style to over position + */ + this.setThumbOverStyle = function(objThumb){ + + if(g_temp.customThumbs == true){ + objThumb.addClass("ug-thumb-over"); + } + + //border effect + if(g_temp.isEffectBorder) + setThumbBorderEffect(objThumb, g_options.thumb_over_border_width, g_options.thumb_over_border_color); + + //color overlay effect + if(g_temp.isEffectOverlay){ + var isSet = (g_options.thumb_overlay_reverse == true)?true:false; + setThumbColorOverlayEffect(objThumb, isSet); + } + + //image overlay effect + if(g_temp.isEffectImage == true){ + setThumbImageOverlayEffect(objThumb, false); + } + + //trigger event for parent classes + g_objThis.trigger(t.events.SETOVERSTYLE, objThumb); + } + + + /** + * set thumb selected style + */ + function setThumbSelectedStyle(objThumb, noAnimation){ + + if(g_temp.isEffectBorder) + setThumbBorderEffect(objThumb, g_options.thumb_selected_border_width, g_options.thumb_selected_border_color, noAnimation); + + if(g_temp.isEffectOverlay){ + var isSet = (g_options.thumb_overlay_reverse == true)?true:false; + setThumbColorOverlayEffect(objThumb, isSet, noAnimation); + } + + //image overlay effect + if(g_temp.isEffectImage) + setThumbImageOverlayEffect(objThumb, false, noAnimation); + + + g_objThis.trigger(t.events.SETSELECTEDSTYLE, objThumb); + + } + + + /** + * set loading error of the thumb + */ + function setItemThumbLoadedError(objThumb){ + + var objItem = t.getItemByThumb(objThumb); + + objItem.isLoaded = true; + objItem.isThumbImageLoaded = false; + + if(g_temp.customThumbs == true){ + + g_objThis.trigger(t.events.IMAGELOADERROR, objThumb); + return(true); + + } + + objThumb.children(".ug-thumb-loader").hide(); + objThumb.children(".ug-thumb-error").show(); + } + + + /** + * set border radius of all the thmbs + */ + function setThumbsBorderRadius(){ + + if(g_options.thumb_round_corners_radius <= 0) + return(false); + + //set radius: + var objCss = { + "border-radius":g_options.thumb_round_corners_radius + "px" + }; + + g_objParent.find(".ug-thumb-wrapper, .ug-thumb-wrapper .ug-thumb-border-overlay").css(objCss); + + } + + + /** + * animate thumb transitions + */ + function animateThumb(objThumb, objThumbCss){ + + objThumb.stop(true).animate(objThumbCss ,{ + duration: g_options.thumb_transition_duration, + easing: g_options.thumb_transition_easing, + queue: false + }); + + } + + + /** + * redraw the thumb style according the state + */ + function redrawThumbStyle(objThumb){ + + if(isThumbSelected(objThumb) == true) + setThumbSelectedStyle(objThumb, true, "redraw"); + else + t.setThumbNormalStyle(objThumb, true, "redraw"); + } + + + + + /** + * place thumb image + * retrun - false, if already loaded + * return true - if was set on this function + * isForce - set the image anyway + */ + function placeThumbImage(objThumb, objImage, objItem){ + + //scale the image + if(g_options.thumb_fixed_size == true){ + g_functions.scaleImageCoverParent(objImage, objThumb); + } + else{ + + //variant size + + if(g_options.thumb_resize_by == "height") //horizontal strip + g_functions.scaleImageByHeight(objImage, g_options.thumb_height); + else //vertical strip + g_functions.scaleImageByWidth(objImage, g_options.thumb_width); + + var imageSize = g_functions.getElementSize(objImage); + g_functions.placeElement(objImage, 0, 0); + setThumbSize(imageSize.width, imageSize.height, objThumb); + + } + + //hide loader + objThumb.children(".ug-thumb-loader").hide(); + + //show image + objImage.show(); + + //if overlay effect exists + if(g_options.thumb_image_overlay_effect == false){ + objImage.fadeTo(0,1); + } + else{ + + //place bw image also if exists + if(g_options.thumb_image_overlay_effect == true){ + copyPositionToThumbOverlayImage(objImage); + } + + //hide the original image (avoid blinking at start) + objImage.fadeTo(0,0); + + //redraw the style, because this function can overwrite it + redrawThumbStyle(objThumb); + } + + g_objThis.trigger(t.events.AFTERPLACEIMAGE, objThumb); + + } + + + + /** + * copy image position to bw image (if exists) + */ + function copyPositionToThumbOverlayImage(objImage){ + + var objImageBW = objImage.siblings(".ug-thumb-image-overlay"); + if(objImageBW.length == 0) + return(false); + + var objSize = g_functions.getElementSize(objImage); + + var objCss = { + "width":objSize.width+"px", + "height":objSize.height+"px", + "left":objSize.left+"px", + "top":objSize.top+"px" + } + + objImageBW.css(objCss); + + //show the image + if(g_temp.customThumbs == false) + objImageBW.fadeTo(0,1); + + } + + + + + function _______________GETTERS______________(){}; + + + /** + * get the image effects class from the options + */ + function getImageEffectsClass(){ + + var imageEffectClass = ""; + var arrEffects = g_options.thumb_image_overlay_type.split(","); + + for(var index in arrEffects){ + var effect = arrEffects[index]; + + switch(effect){ + case "bw": + imageEffectClass += " ug-bw-effect"; + break; + case "blur": + imageEffectClass += " ug-blur-effect"; + break; + case "sepia": + imageEffectClass += " ug-sepia-effect"; + break; + } + } + + return(imageEffectClass); + } + + /** + * get if the thumb is selected + */ + function isThumbSelected(objThumbWrapper){ + + if(objThumbWrapper.hasClass("ug-thumb-selected")) + return(true); + + return(false); + } + + + function _______________EVENTS______________(){}; + + /** + * on thumb size change - triggered by parent on custom thumbs type + */ + function onThumbSizeChange(temp, objThumb){ + + objThumb = jQuery(objThumb); + var objItem = t.getItemByThumb(objThumb); + + var objSize = g_functions.getElementSize(objThumb); + + setThumbSize(objSize.width, objSize.height, objThumb, true); + + redrawThumbStyle(objThumb); + } + + + /** + * on thumb mouse over + */ + function onMouseOver(objThumb){ + + + //if touch enabled unbind event + if(g_temp.touchEnabled == true){ + objThumbs.off("mouseenter").off("mouseleave"); + return(true); + } + + if(isThumbSelected(objThumb) == false) + t.setThumbOverStyle(objThumb); + + } + + + /** + * on thumb mouse out + */ + function onMouseOut(objThumb){ + + if(g_temp.touchEnabled == true) + return(true); + + if(isThumbSelected(objThumb) == false) + t.setThumbNormalStyle(objThumb, false); + } + + + /** + * on image loaded event + */ + function onImageLoaded(image, isForce){ + + if(!isForce) + var isForce = false; + + var objImage = jQuery(image); + var objThumb = objImage.parents(".ug-thumb-wrapper"); + + if(objThumb.parent().length == 0) //don't treat detached thumbs + return(false); + + objItem = t.getItemByThumb(objThumb); + + if(objItem.isLoaded == true && isForce === false) + return(false); + + t.triggerImageLoadedEvent(objThumb, objImage); + + if(g_temp.customThumbs == true){ + + g_objThis.trigger(t.events.PLACEIMAGE, [objThumb, objImage]); + + }else{ + + placeThumbImage(objThumb, objImage, objItem); + + } + + } + + + /** + * on image loaded - set appropriete item vars + */ + function onThumbImageLoaded(data, objThumb, objImage){ + + objItem = t.getItemByThumb(objThumb); + + objItem.isLoaded = true; + objItem.isThumbImageLoaded = true; + + var objSize = g_functions.getImageOriginalSize(objImage); + + objItem.thumbWidth = objSize.width; + objItem.thumbHeight = objSize.height; + objItem.thumbRatioByWidth = objSize.width / objSize.height; + objItem.thumbRatioByHeight = objSize.height / objSize.width; + + } + + + /** + * set thumbnails html properties + */ + this.setHtmlProperties = function(){ + + //set thumb params + if(g_temp.customThumbs == false){ + var objThumbCss = {}; + + //set thumb fixed size + if(g_options.thumb_fixed_size == true) + setThumbSize(g_options.thumb_width, g_options.thumb_height); + + setThumbsBorderRadius(); + } + + //set normal style to all the thumbs + g_objParent.children(".ug-thumb-wrapper").each(function(){ + var objThumb = jQuery(this); + redrawThumbStyle(objThumb); + }); + + + //set color. if empty set from css + if(g_temp.isEffectOverlay){ + + if(g_options.thumb_overlay_color){ + + var objCss = {}; + if(g_functions.isRgbaSupported()){ + var colorRGB = g_functions.convertHexToRGB(g_options.thumb_overlay_color, g_options.thumb_overlay_opacity); + objCss["background-color"] = colorRGB; + }else{ + objCss["background-color"] = g_options.thumb_overlay_color; + g_temp.colorOverlayOpacity = g_options.thumb_overlay_opacity; + } + + g_objParent.find(".ug-thumb-wrapper .ug-thumb-overlay").css(objCss); + } + + } + + } + + + /** + * set the thumb on selected state + */ + this.setThumbSelected = function(objThumbWrapper){ + + if(g_temp.customThumbs == true) + objThumbWrapper.removeClass("ug-thumb-over"); + + if(isThumbSelected(objThumbWrapper) == true) + return(true); + + objThumbWrapper.addClass("ug-thumb-selected"); + + //set thumb selected style + setThumbSelectedStyle(objThumbWrapper); + } + + /** + * set the thumb unselected state + */ + this.setThumbUnselected = function(objThumbWrapper){ + + //remove the selected class + objThumbWrapper.removeClass("ug-thumb-selected"); + + t.setThumbNormalStyle(objThumbWrapper, false, "set unselected"); + } + + + /** + * set the options of the strip + */ + this.setOptions = function(objOptions){ + + g_options = jQuery.extend(g_options, objOptions); + + } + + + /** + * set thumb inner reduce - reduce this number when resizing thumb inner + */ + this.setThumbInnerReduce = function(innerReduce){ + + g_temp.thumbInnerReduce = innerReduce; + + } + + /** + * set custom thumbs + * allowedEffects - border, overlay, image + */ + this.setCustomThumbs = function(funcSetHtml, arrAlowedEffects, customOptions){ + + g_temp.customThumbs = true; + + if(typeof funcSetHtml != "function") + throw new Error("The argument should be function"); + + + g_temp.funcSetCustomThumbHtml = funcSetHtml; + + //enable effects: + if(jQuery.inArray("overlay", arrAlowedEffects) == -1) + g_temp.isEffectOverlay = false; + + if(jQuery.inArray("border", arrAlowedEffects) == -1) + g_temp.isEffectBorder = false; + + g_temp.isEffectImage = false; //for custom effects the image is always off + + //check for dissalow onresize + if(customOptions && customOptions.allow_onresize === false){ + g_temp.allowOnResize = false; + } + + } + + + + + + + this._____________EXTERNAL_GETTERS__________ = function(){}; + + /** + * get the options object + */ + this.getOptions = function(){ + + return(g_options); + } + + + /** + * get num thumbs + */ + this.getNumThumbs = function(){ + var numThumbs = g_arrItems.length; + return(numThumbs); + } + + + /** + * get thumb image + */ + this.getThumbImage = function(objThumb){ + + var objImage = objThumb.find(".ug-thumb-image"); + return(objImage); + } + + + /** + * get thumbs by index + */ + this.getThumbByIndex = function(index){ + var objThumbs = t.getThumbs(); + + if(index >= objThumbs.length || index < 0) + throw new Error("Wrong thumb index"); + + var objThumb = jQuery(objThumbs[index]); + + return(objThumb); + } + + + /** + * get all thumbs jquery object + */ + this.getThumbs = function(){ + return(g_objParent.children(".ug-thumb-wrapper")); + } + + /** + * get item by thumb object + */ + this.getItemByThumb = function(objThumb){ + + var index = objThumb.data("index"); + + if(index === undefined) + index = objThumb.index(); + + var arrItem = g_arrItems[index]; + return(arrItem); + } + + + /** + * is thumb loaded + */ + this.isThumbLoaded = function(objThumb){ + + var objItem = t.getItemByThumb(objThumb); + + return(objItem.isLoaded); + } + + + /** + * get global thumb size + */ + this.getGlobalThumbSize = function(){ + + var objSize = { + width:g_options.thumb_width, + height: g_options.thumb_height + }; + + return(objSize); + } + + + this._____________EXTERNAL_OTHERS__________ = function(){}; + + + + /** + * init events + */ + this.initEvents = function(){ + + var objThumbs = g_objParent.find(".ug-thumb-wrapper"); + + objThumbs.on("touchstart",function(){ + g_temp.touchEnabled = true; + objThumbs.off("mouseenter").off("mouseleave"); + }); + + if(g_temp.allowOnResize == true) + g_objWrapper.on(g_serviceParams.eventSizeChange, onThumbSizeChange); + + objThumbs.hover(function(event){ //on mouse enter + var objThumb = jQuery(this); + onMouseOver(objThumb); + }, function(event){ //on mouse leave + var objThumb = jQuery(this); + onMouseOut(objThumb); + }); + + + //on image loaded event - for setting the image sizes + g_objThis.on(t.events.THUMB_IMAGE_LOADED, onThumbImageLoaded); + + } + + + /** + * destroy the thumb element + */ + this.destroy = function(){ + var objThumbs = g_objParent.find(".ug-thumb-wrapper"); + objThumbs.off("touchstart"); + g_objWrapper.off(g_serviceParams.eventSizeChange); + objThumbs.off("mouseenter"); + objThumbs.off("mouseleave"); + g_objThis.off(t.events.THUMB_IMAGE_LOADED); + } + + + /** + * preload thumbs images and put them into the thumbnails + */ + this.loadThumbsImages = function(){ + + var objImages = g_objParent.find(".ug-thumb-image"); + g_functions.checkImagesLoaded(objImages, null, function(objImage,isError){ + + if(isError == false){ + onImageLoaded(objImage, true); + } + else{ + var objItem = jQuery(objImage).parent(); + setItemThumbLoadedError(objItem); + } + }); + } + + + /** + * trigger image loaded event + */ + this.triggerImageLoadedEvent = function(objThumb, objImage){ + + g_objThis.trigger(t.events.THUMB_IMAGE_LOADED, [objThumb, objImage]); + + } + + + /** + * hide thumbs + */ + this.hideThumbs = function(){ + + g_objParent.find(".ug-thumb-wrapper").hide(); + + } + +} + +/** + * thumbs class + * addon to strip gallery + */ +function UGThumbsStrip(){ + + var t = this; + var g_gallery = new UniteGalleryMain(), g_objGallery, g_objects, g_objWrapper; + var g_arrItems, g_objStrip, g_objStripInner; + var g_aviaControl, g_touchThumbsControl, g_functions = new UGFunctions(); + var g_isVertical = false, g_thumbs = new UGThumbsGeneral(); + var g_functions = new UGFunctions(); + + var g_options = { + strip_vertical_type: false, + strip_thumbs_align: "left", //left, center, right, top, middle, bottom - the align of the thumbs when they smaller then the strip size. + strip_space_between_thumbs:6, //space between thumbs + strip_thumb_touch_sensetivity:15, //from 1-100, 1 - most sensetive, 100 - most unsensetive + strip_scroll_to_thumb_duration:500, //duration of scrolling to thumb + strip_scroll_to_thumb_easing:"easeOutCubic", //easing of scrolling to thumb animation + strip_control_avia:true, //avia control - move the strip according strip moseover position + strip_control_touch:true, //touch control - move the strip by dragging it + strip_padding_top: 0, //add some space from the top + strip_padding_bottom: 0, //add some space from the bottom + strip_padding_left: 0, //add some space from left + strip_padding_right: 0 //add some space from right + } + + var g_temp = { + isRunOnce:false, + is_placed:false, + isNotFixedThumbs: false, + handle: null + }; + + var g_sizes = { + stripSize:0, //set after position thumbs + stripActiveSize:0, //strip size without the padding + stripInnerSize:0, + thumbSize:0, + thumbSecondSize:0 //size of the height and width of the strip + } + + this.events = { //events variables + STRIP_MOVE:"stripmove", + INNER_SIZE_CHANGE:"size_change" + } + + //the defaults for vertical align + var g_defaultsVertical = { + strip_thumbs_align: "top", + thumb_resize_by: "width" + } + + + /** + * set the thumbs strip html + */ + this.setHtml = function(objParent){ + + if(!objParent){ + var objParent = g_objWrapper; + if(g_options.parent_container != null) + objParent = g_options.parent_container; + } + + objParent.append("<div class='ug-thumbs-strip'><div class='ug-thumbs-strip-inner'></div></div>"); + g_objStrip = objParent.children(".ug-thumbs-strip"); + + g_objStripInner = g_objStrip.children(".ug-thumbs-strip-inner"); + + //put the thumbs to inner strip + g_thumbs.setHtmlThumbs(g_objStripInner); + + //hide thumbs on not fixed mode + if(g_temp.isNotFixedThumbs == true) + g_thumbs.hideThumbs(); + + } + + + function ___________GENERAL___________(){}; + + + /** + * init the strip + */ + function initStrip(gallery, customOptions){ + + g_objects = gallery.getObjects(); + g_gallery = gallery; + + g_gallery.attachThumbsPanel("strip", t); + + g_objGallery = jQuery(gallery); + g_objWrapper = g_objects.g_objWrapper; + g_arrItems = g_objects.g_arrItems; + + g_options = jQuery.extend(g_options, customOptions); + g_isVertical = g_options.strip_vertical_type; + + //set vertical defaults + if(g_isVertical == true){ + g_options = jQuery.extend(g_options, g_defaultsVertical); + g_options = jQuery.extend(g_options, customOptions); + + customOptions.thumb_resize_by = "width"; + } + + g_thumbs.init(gallery, customOptions); + + onAfterSetOptions(); + } + + + /** + * run this funcion after set options. + */ + function onAfterSetOptions(){ + + var thumbsOptions = g_thumbs.getOptions(); + + g_temp.isNotFixedThumbs = (thumbsOptions.thumb_fixed_size === false); + g_isVertical = g_options.strip_vertical_type; + } + + + /** + * run the strip + */ + function runStrip(){ + + g_thumbs.setHtmlProperties(); + + initSizeParams(); + + fixSize(); + + positionThumbs(); + + //run only once + if(g_temp.isRunOnce == false){ + + //init thumbs strip touch + if(g_options.strip_control_touch == true){ + g_touchThumbsControl = new UGTouchThumbsControl(); + g_touchThumbsControl.init(t); + } + + //init thumbs strip avia control + if(g_options.strip_control_avia == true){ + g_aviaControl = new UGAviaControl(); + g_aviaControl.init(t); + } + + checkControlsEnableDisable(); + + g_thumbs.loadThumbsImages(); + + initEvents(); + } + + + g_temp.isRunOnce = true; + + } + + + /** + * store strip size and strip active size in vars + * do after all strip size change + */ + function storeStripSize(size){ + + g_sizes.stripSize = size; + + if(g_isVertical == false) + g_sizes.stripActiveSize = g_sizes.stripSize - g_options.strip_padding_left - g_options.strip_padding_right; + else + g_sizes.stripActiveSize = g_sizes.stripSize - g_options.strip_padding_top - g_options.strip_padding_bottom; + + if(g_sizes.stripActiveSize < 0) + g_sizes.stripActiveSize = 0; + + } + + + /** + * init some size parameters, before size init and after position thumbs + */ + function initSizeParams(){ + + //set thumb outer size: + var arrThumbs = g_objStripInner.children(".ug-thumb-wrapper"); + var firstThumb = jQuery(arrThumbs[0]); + var thumbsRealWidth = firstThumb.outerWidth(); + var thumbsRealHeight = firstThumb.outerHeight(); + var thumbs_options = g_thumbs.getOptions(); + + if(g_isVertical == false){ //horizontal + + g_sizes.thumbSize = thumbsRealWidth; + + if(thumbs_options.thumb_fixed_size == true){ + g_sizes.thumbSecondSize = thumbsRealHeight; + } else { + g_sizes.thumbSecondSize = thumbs_options.thumb_height; + } + + storeStripSize(g_objStrip.width()); + g_sizes.stripInnerSize = g_objStripInner.width(); + + }else{ //vertical + g_sizes.thumbSize = thumbsRealHeight; + + if(thumbs_options.thumb_fixed_size == true){ + g_sizes.thumbSecondSize = thumbsRealWidth; + } else { + g_sizes.thumbSecondSize = thumbs_options.thumb_width; + } + + storeStripSize(g_objStrip.height()); + + g_sizes.stripInnerSize = g_objStripInner.height(); + } + + + } + + + + + /** + * set size of inner strip according the orientation + */ + function setInnerStripSize(innerSize){ + + if(g_isVertical == false) + g_objStripInner.width(innerSize); + else + g_objStripInner.height(innerSize); + + g_sizes.stripInnerSize = innerSize; + + checkControlsEnableDisable(); + + jQuery(t).trigger(t.events.INNER_SIZE_CHANGE); + } + + + /** + * position thumbnails in the thumbs panel + */ + function positionThumbs(){ + + var arrThumbs = g_objStripInner.children(".ug-thumb-wrapper"); + + var posx = 0; + var posy = 0; + + if(g_isVertical == false) + posy = g_options.strip_padding_top; + + for (i = 0; i < arrThumbs.length; i++) { + + var objThumb = jQuery(arrThumbs[i]); + + //skip from placing if not loaded yet on non fixed mode + if(g_temp.isNotFixedThumbs == true){ + objItem = g_thumbs.getItemByThumb(objThumb); + if(objItem.isLoaded == false) + continue; + + //the thumb is hidden if not placed + objThumb.show(); + } + + g_functions.placeElement(objThumb, posx, posy); + + if(g_isVertical == false) + posx += objThumb.outerWidth() + g_options.strip_space_between_thumbs; + else + posy += objThumb.outerHeight() + g_options.strip_space_between_thumbs; + } + + //set strip size, width or height + if(g_isVertical == false) + var innerStripSize = posx - g_options.strip_space_between_thumbs; + else + var innerStripSize = posy - g_options.strip_space_between_thumbs; + + setInnerStripSize(innerStripSize); + } + + + + /** + * fix strip and inner size + */ + function fixSize(){ + + if(g_isVertical == false){ //fix horizontal + + var height = g_sizes.thumbSecondSize; + + var objCssStrip = {}; + objCssStrip["height"] = height+"px"; + + //set inner strip params + var objCssInner = {}; + objCssInner["height"] = height+"px"; + + }else{ //fix vertical + + var width = g_sizes.thumbSecondSize; + + var objCssStrip = {}; + objCssStrip["width"] = width+"px"; + + //set inner strip params + var objCssInner = {}; + objCssInner["width"] = width+"px"; + + } + + g_objStrip.css(objCssStrip); + g_objStripInner.css(objCssInner); + } + + + + /** + * scroll by some number + * . + */ + function scrollBy(scrollStep){ + + var innerPos = t.getInnerStripPos(); + var finalPos = innerPos + scrollStep; + + finalPos = t.fixInnerStripLimits(finalPos); + + t.positionInnerStrip(finalPos, true); + } + + + /** + * scroll to thumb from min. (left or top) position + */ + function scrollToThumbMin(objThumb){ + + var objThumbPos = getThumbPos(objThumb); + + var scrollPos = objThumbPos.min * -1; + scrollPos = t.fixInnerStripLimits(scrollPos); + + t.positionInnerStrip(scrollPos, true); + } + + + /** + * scroll to thumb from max. (right or bottom) position + */ + function scrollToThumbMax(objThumb){ + + var objThumbPos = getThumbPos(objThumb); + + var scrollPos = objThumbPos.max * -1 + g_sizes.stripSize; + scrollPos = t.fixInnerStripLimits(scrollPos); + + t.positionInnerStrip(scrollPos, true); + } + + + /** + * scroll to some thumbnail + */ + function scrollToThumb(objThumb){ + + if(isStripMovingEnabled() == false) + return(false); + + var objBounds = getThumbsInsideBounds(); + + var objThumbPos = getThumbPos(objThumb); + + if(objThumbPos.min < objBounds.minPosThumbs){ + + var prevThumb = objThumb.prev(); + if(prevThumb.length) + scrollToThumbMin(prevThumb); + else + scrollToThumbMin(objThumb); + + }else if(objThumbPos.max > objBounds.maxPosThumbs){ + + var nextThumb = objThumb.next(); + if(nextThumb.length) + scrollToThumbMax(nextThumb); + else + scrollToThumbMax(objThumb); + + } + + } + + /** + * scroll to selected thumb + */ + function scrollToSelectedThumb(){ + + var selectedItem = g_gallery.getSelectedItem(); + if(selectedItem == null) + return(true); + + var objThumb = selectedItem.objThumbWrapper; + if(objThumb) + scrollToThumb(objThumb); + + } + + + + /** + * check that the inner strip off the limits position, and reposition it if there is a need + */ + function checkAndRepositionInnerStrip(){ + if(isStripMovingEnabled() == false) + return(false); + + var pos = t.getInnerStripPos(); + + var posFixed = t.fixInnerStripLimits(pos); + + if(pos != posFixed) + t.positionInnerStrip(posFixed, true); + } + + + /** + * enable / disable controls according inner width (move enabled). + */ + function checkControlsEnableDisable(){ + + var isMovingEndbled = isStripMovingEnabled(); + + if(isMovingEndbled == true){ + + if(g_aviaControl) + g_aviaControl.enable(); + + if(g_touchThumbsControl) + g_touchThumbsControl.enable(); + + }else{ + + if(g_aviaControl) + g_aviaControl.disable(); + + if(g_touchThumbsControl) + g_touchThumbsControl.disable(); + + } + + } + + /** + * align inner strip according the options + */ + function alignInnerStrip(){ + + if(isStripMovingEnabled()) + return(false); + + if(g_isVertical == false) + g_functions.placeElement(g_objStripInner, g_options.strip_thumbs_align, 0); + else + g_functions.placeElement(g_objStripInner, 0, g_options.strip_thumbs_align); + + } + + + function ___________EVENTS___________(){}; + + /** + * on thumb click event. Select the thumb + */ + function onThumbClick(objThumb){ + + //cancel click event only if passed significant movement + if(t.isTouchMotionActive()){ + + var isSignificantPassed = g_touchThumbsControl.isSignificantPassed(); + if(isSignificantPassed == true) + return(true); + } + + //run select item operation + var objItem = g_thumbs.getItemByThumb(objThumb); + + g_gallery.selectItem(objItem); + } + + + /** + * on some thumb placed, run the resize, but with time passed + */ + function onThumbPlaced(){ + + clearTimeout(g_temp.handle); + + g_temp.handle = setTimeout(function(){ + + positionThumbs(); + + },50); + + + } + + /** + * on item change + */ + function onItemChange(){ + + var objItem = g_gallery.getSelectedItem(); + g_thumbs.setThumbSelected(objItem.objThumbWrapper); + scrollToThumb(objItem.objThumbWrapper); + } + + + /** + * init panel events + */ + function initEvents(){ + + g_thumbs.initEvents(); + + var objThumbs = g_objStrip.find(".ug-thumb-wrapper"); + + objThumbs.on("click touchend", function(event){ + + var clickedThumb = jQuery(this); + onThumbClick(clickedThumb); + }); + + //on item change, make the thumb selected + g_objGallery.on(g_gallery.events.ITEM_CHANGE, onItemChange); + + + //position thumbs after each load on non fixed mode + if(g_temp.isNotFixedThumbs){ + + jQuery(g_thumbs).on(g_thumbs.events.AFTERPLACEIMAGE, onThumbPlaced); + + } + + } + + + /** + * destroy the strip panel events + */ + this.destroy = function(){ + + var objThumbs = g_objStrip.find(".ug-thumb-wrapper"); + + objThumbs.off("click"); + objThumbs.off("touchend"); + g_objGallery.off(g_gallery.events.ITEM_CHANGE); + + jQuery(g_thumbs).off(g_thumbs.events.AFTERPLACEIMAGE); + + if(g_touchThumbsControl) + g_touchThumbsControl.destroy(); + + if(g_aviaControl) + g_aviaControl.destroy(); + + g_thumbs.destroy(); + } + + + function ____________GETTERS___________(){}; + + + /** + * check if the inner width is more then strip width + */ + function isStripMovingEnabled(){ + + if(g_sizes.stripInnerSize > g_sizes.stripActiveSize) + return(true); + else + return(false); + + } + + + /** + * get bounds, if the thumb not in them, it need to be scrolled + * minPosThumbs, maxPosThumbs - the min and max position that the thumbs should be located to be visible + */ + function getThumbsInsideBounds(){ + var obj = {}; + var innerPos = t.getInnerStripPos(); + + //the 1 is gap that avoid exact bounds + obj.minPosThumbs = innerPos * -1 + 1; + obj.maxPosThumbs = innerPos * -1 + g_sizes.stripSize - 1; + + return(obj); + } + + + /** + * get thumb position according the orientation in the inner strip + */ + function getThumbPos(objThumb){ + + var objReturn = {}; + + var objPos = objThumb.position(); + + if(g_isVertical == false){ + objReturn.min = objPos.left; + objReturn.max = objPos.left + g_sizes.thumbSize; + }else{ + objReturn.min = objPos.top; + objReturn.max = objPos.top + g_sizes.thumbSize; + } + + + return(objReturn); + } + + + + + this.________EXTERNAL_GENERAL___________ = function(){}; + + /** + * init function for avia controls + */ + this.init = function(gallery, customOptions){ + + initStrip(gallery, customOptions); + } + + + /** + * set html and properties + */ + this.run = function(){ + runStrip(); + } + + + + + /** + * position inner strip on some pos according the orientation + */ + this.positionInnerStrip = function(pos, isAnimate){ + + if(isAnimate === undefined) + var isAnimate = false; + + if(g_isVertical == false) + var objPosition = {"left": pos + "px"}; + else + var objPosition = {"top": pos + "px"}; + + if(isAnimate == false){ //normal position + + g_objStripInner.css(objPosition); + t.triggerStripMoveEvent(); + } + else{ //position with animation + + t.triggerStripMoveEvent(); + + g_objStripInner.stop(true).animate(objPosition ,{ + duration: g_options.strip_scroll_to_thumb_duration, + easing: g_options.strip_scroll_to_thumb_easing, + queue: false, + progress:function(){t.triggerStripMoveEvent()}, + always: function(){t.triggerStripMoveEvent()} + }); + + } + + } + + /** + * trigger event - on strip move + */ + this.triggerStripMoveEvent = function(){ + + //trigger onstripmove event + jQuery(t).trigger(t.events.STRIP_MOVE); + + } + + + + /** + * return true if the touch animation or dragging is active + */ + this.isTouchMotionActive = function(){ + if(!g_touchThumbsControl) + return(false); + + var isActive = g_touchThumbsControl.isTouchActive(); + + return(isActive); + } + + + /** + * check if thmb item visible, means inside the visible part of the inner strip + */ + this.isItemThumbVisible = function(objItem){ + + var objThumb = objItem.objThumbWrapper; + var thumbPos = objThumb.position(); + + var posMin = t.getInnerStripPos() * -1; + + if(g_isVertical == false){ + var posMax = posMin + g_sizes.stripSize; + var thumbPosMin = thumbPos.left; + var thumbPosMax = thumbPos.left + objThumb.width(); + }else{ + var posMax = posMin + g_sizes.stripSize; + var thumbPosMin = thumbPos.top; + var thumbPosMax = thumbPos.top + objThumb.height(); + } + + var isVisible = false; + if(thumbPosMax >= posMin && thumbPosMin <= posMax) + isVisible = true; + + return(isVisible); + } + + /** + * get inner strip position according the orientation + */ + this.getInnerStripPos = function(){ + + if(g_isVertical == false) + return g_objStripInner.position().left; + else + return g_objStripInner.position().top; + } + + + /** + * get inner strip limits + */ + this.getInnerStripLimits = function(){ + + var output = {}; + + if(g_isVertical == false) + output.maxPos = g_options.strip_padding_left; + else + output.maxPos = g_options.strip_padding_top; + + //debugLine(g_sizes.stripActiveSize); + + output.minPos = -(g_sizes.stripInnerSize - g_sizes.stripActiveSize); + + return(output); + } + + + /** + * fix inner position by check boundaries limit + */ + this.fixInnerStripLimits = function(distPos){ + + var minPos; + + var objLimits = t.getInnerStripLimits(); + + if(distPos > objLimits.maxPos) + distPos = objLimits.maxPos; + + if(distPos < objLimits.minPos) + distPos = objLimits.minPos; + + return(distPos); + } + + + + /** + * scroll left or down + */ + this.scrollForeward = function(){ + scrollBy(-g_sizes.stripSize); + } + + + /** + * scroll left or down + */ + this.scrollBack = function(){ + + scrollBy(g_sizes.stripSize); + } + + + this.________EXTERNAL_SETTERS___________ = function(){}; + + + /** + * set the options of the strip + */ + this.setOptions = function(objOptions){ + + g_options = jQuery.extend(g_options, objOptions); + + g_thumbs.setOptions(objOptions); + + onAfterSetOptions(); + } + + + /** + * set size of the strip + * the height size is set automatically from options + */ + this.setSizeVertical = function(height){ + + if(g_isVertical == false){ + throw new Error("setSizeVertical error, the strip size is not vertical"); + return(false); + } + + var width = g_sizes.thumbSecondSize; + + var objCssStrip = {}; + objCssStrip["width"] = width+"px"; + objCssStrip["height"] = height+"px"; + + g_objStrip.css(objCssStrip); + + storeStripSize(height); + + //set inner strip params + var objCssInner = {}; + objCssInner["width"] = width+"px"; + objCssInner["left"] = "0px"; + objCssInner["top"] = "0px"; + + g_objStripInner.css(objCssInner); + + g_temp.is_placed = true; + + checkControlsEnableDisable(); + } + + + /** + * set size of the strip + * the height size is set automatically from options + */ + this.setSizeHorizontal = function(width){ + + if(g_isVertical == true){ + throw new Error("setSizeHorizontal error, the strip size is not horizontal"); + return(false); + } + + var height = g_sizes.thumbSecondSize + g_options.strip_padding_top + g_options.strip_padding_bottom; + + var objCssStrip = {}; + objCssStrip["width"] = width+"px"; + objCssStrip["height"] = height+"px"; + + g_objStrip.css(objCssStrip); + + storeStripSize(width); + + var innerLeft = g_options.strip_padding_left; + + //set inner strip params + var objCssInner = {}; + objCssInner["height"] = height+"px"; + objCssInner["left"] = innerLeft + "px"; + objCssInner["top"] = "0px"; + + g_objStripInner.css(objCssInner); + + g_temp.is_placed = true; + + checkControlsEnableDisable(); + } + + + /** + * set position of the strip + */ + this.setPosition = function(left, top, offsetLeft, offsetTop){ + g_functions.placeElement(g_objStrip, left, top, offsetLeft, offsetTop); + } + + + /** + * resize the panel according the orientation + */ + this.resize = function(newSize){ + + if(g_isVertical == false){ + + g_objStrip.width(newSize); + g_sizes.stripActiveSize = newSize - g_options.strip_padding_left - g_options.strip_padding_right; + + }else{ + g_objStrip.height(newSize); + g_sizes.stripActiveSize = newSize - g_options.strip_padding_top - g_options.strip_padding_bottom; + } + + storeStripSize(newSize); + + checkControlsEnableDisable(); + + checkAndRepositionInnerStrip(); + + alignInnerStrip(); + + scrollToSelectedThumb(); + } + + + /** + * set the thumb unselected state + */ + this.setThumbUnselected = function(objThumbWrapper){ + + g_thumbs.setThumbUnselected(objThumbWrapper); + + } + + + /** + * set custom thumbs + */ + this.setCustomThumbs = function(funcSetHtml){ + + g_thumbs.setCustomThumbs(funcSetHtml); + + } + + + + + this.________EXTERNAL_GETTERS___________ = function(){}; + + /** + * get objects + */ + this.getObjects = function(){ + + var thumbsOptions = g_thumbs.getOptions(); + var commonOpitions = jQuery.extend(g_options, thumbsOptions); + + var obj = { + g_gallery: g_gallery, + g_objGallery: g_objGallery, + g_objWrapper:g_objWrapper, + g_arrItems:g_arrItems, + g_objStrip : g_objStrip, + g_objStripInner : g_objStripInner, + g_aviaControl:g_aviaControl, + g_touchThumbsControl:g_touchThumbsControl, + isVertical: g_isVertical, + g_options: commonOpitions, + g_thumbs: g_thumbs + }; + + return(obj); + } + + + /** + * get thumbs onject + */ + this.getObjThumbs = function(){ + + return(g_thumbs); + } + + + /** + * get selected thumb + */ + this.getSelectedThumb = function(){ + + var selectedIndex = g_gallery.getSelectedItemIndex(); + if(selectedIndex == -1) + return(null); + + return g_thumbs.getThumbByIndex(selectedIndex); + } + + + /** + * get strip size and position object + */ + this.getSizeAndPosition = function(){ + + var obj = g_functions.getElementSize(g_objStrip); + + return(obj); + } + + /** + * get thumbs strip height + */ + this.getHeight = function(){ + + var stripHeight = g_objStrip.outerHeight(); + + return(stripHeight) + } + + + /** + * get thumbs strip width + */ + this.getWidth = function(){ + + var stripWidth = g_objStrip.outerWidth(); + + return(stripWidth); + } + + + + /** + * get all stored sizes object + */ + this.getSizes = function(){ + + return(g_sizes); + } + + + /** + * return if vertical orientation or not + */ + this.isVertical = function(){ + return(g_isVertical); + } + + + /** + * return if the strip is placed or not + */ + this.isPlaced = function(){ + + return(g_temp.is_placed); + } + + /** + * return if the strip moving enabled or not + */ + this.isMoveEnabled = function(){ + var isEnabled = isStripMovingEnabled(); + return(isEnabled); + } + +} + + +/** + * touch thumbs control class + * addon to strip gallery + */ +function UGTouchThumbsControl(){ + + var g_parent, g_gallery, g_objGallery, g_objects; + var g_objStrip, g_objStripInner, g_options, g_isVertical; + var g_functions = new UGFunctions(); + + //service variables + var g_serviceParams = { + touch_portion_time:200, //the time in ms that the potion is counts for continue touch movement + thumb_touch_slowFactor:0, //set from user + minDeltaTime: 70, //don't alow portion less then the minTime + minPath: 10, //if less then this path, dont' continue motion + limitsBreakAddition: 30, //the limits break addition for second return animation + returnAnimateSpeed: 500, //the speed of return animation + animationEasing: "easeOutCubic", //animation easing function + returnAnimationEasing: "easeOutCubic" //return animation easing function + }; + + + var g_temp = { //temp variables + touch_active:false, + loop_active:false, + mousePos:0, + innerPos:0, + startPos:0, + startTime:0, + lastTime:0, + buttonReleaseTime:0, + lastPos:0, + lastPortionPos:0, + lastDeltaTime:0, + lastDeltaPos:0, + speed:0, + handle:"", + touchEnabled: false, + isControlEnabled: true + }; + + + /** + * enable the control + */ + this.enable = function(){ + g_temp.isControlEnabled = true; + } + + + /** + * disable the control + */ + this.disable = function(){ + g_temp.isControlEnabled = false; + } + + /** + * init function for avia controls + */ + this.init = function(objStrip){ + + g_parent = objStrip; + g_objects = objStrip.getObjects(); + + g_gallery = g_objects.g_gallery; + g_objGallery = g_objects.g_objGallery; //jquery object + + g_objStrip = g_objects.g_objStrip; + g_objStripInner = g_objects.g_objStripInner; + g_options = g_objects.g_options; + g_isVertical = g_objects.isVertical; + + setServiceParams(); + + initEvents(); + } + + /** + * get action related variables + */ + function getActionVars(){ + + var currentTime = jQuery.now(); + + var obj = {}; + obj.passedTime = g_temp.lastTime - g_temp.startTime; + obj.lastActiveTime = currentTime - g_temp.buttonReleaseTime; + obj.passedDistance = g_temp.lastPos - g_temp.startPos; + obj.passedDistanceAbs = Math.abs(obj.passedDistance); + + return(obj); + } + + /** + * return if passed some significant movement + */ + this.isSignificantPassed = function(){ + var objVars = getActionVars(); + if(objVars.passedTime > 300) + return(true); + + if(objVars.passedDistanceAbs > 30) + return(true); + + return(false); + } + + + /** + * return true if the touch dragging or animate motion is active + */ + this.isTouchActive = function(){ + + if(g_temp.touch_active == true) + return(true); + + //check if still animating + if(g_objStripInner.is(":animated") == true) + return(true); + + //check if just ended, the touch active continue for a few moments. + var objVars = getActionVars(); + if(objVars.lastActiveTime < 50) + return(true); + + return(false); + } + + /** + * set service parameters from user parameters + */ + function setServiceParams(){ + + //set slow factor by sensetivity of touch motion + g_serviceParams.thumb_touch_slowFactor = g_functions.normalizeSetting(0.00005, 0.01, 1, 100, g_options.strip_thumb_touch_sensetivity, true); + + //debugLine("slowfactor "+ g_serviceParams.thumb_touch_slowFactor); + } + + + /** + * get mouse position based on orientation + */ + function getMouseOrientPosition(event){ + + if(g_isVertical == false) + return(g_functions.getMousePosition(event).pageX); + else + return(g_functions.getMousePosition(event).pageY); + } + + /** + * position the strip according the touch drag diff + */ + function handleStripDrag(mousePos){ + var diff = g_temp.mousePos - mousePos; + var distPos = g_temp.innerPos - diff; + + //make harder to drag the limits + var objLimits = g_parent.getInnerStripLimits(); + + if(distPos > objLimits.maxPos){ + var path = distPos - objLimits.maxPos; + distPos = objLimits.maxPos + path/3; + } + + if(distPos < objLimits.minPos){ + var path = objLimits.minPos - distPos; + distPos = objLimits.minPos - path/3; + } + + g_parent.positionInnerStrip(distPos); + } + + + /** + * store initial touch values + */ + function storeInitTouchValues(pagePos){ + var currentInnerPos = g_parent.getInnerStripPos(); + + //remember current mouse position and inner strip position + g_temp.mousePos = pagePos; + g_temp.innerPos = currentInnerPos; + g_temp.lastPortionPos = currentInnerPos; + g_temp.lastDeltaTime = 0; + g_temp.lastDeltaPos = 0; + + //init position and time related variables + g_temp.startTime = jQuery.now(); + g_temp.startPos = g_temp.innerPos; + + g_temp.lastTime = g_temp.startTime; + g_temp.lastPos = g_temp.startPos; + g_temp.speed = 0; + } + + + /** + * store touch portion data + */ + function storeTouchPortionData(){ + + //calc speed + var currentTime = jQuery.now(); + var deltaTime = currentTime - g_temp.lastTime; + + if(deltaTime >= g_serviceParams.touch_portion_time){ + g_temp.lastDeltaTime = currentTime - g_temp.lastTime; + if(g_temp.lastDeltaTime > g_serviceParams.touch_portion_time) + g_temp.lastDeltaTime = g_serviceParams.touch_portion_time; + + g_temp.lastDeltaPos = g_temp.lastPos - g_temp.lastPortionPos; + + g_temp.lastPortionPos = g_temp.lastPos; + g_temp.lastTime = currentTime; + + } + + } + + + /** + * continue touch motion - touch motion ending. + */ + function continueTouchMotion(){ + + var slowFactor = g_serviceParams.thumb_touch_slowFactor; + + //don't alow portion less then the minTime + var minDeltaTime = g_serviceParams.minDeltaTime; + + //if less then this path, dont' continue motion + var minPath = g_serviceParams.minPath; + + var currentInnerPos = g_parent.getInnerStripPos(); + + var currentTime = jQuery.now(); + var deltaTime = currentTime - g_temp.lastTime; + var deltaPos = currentInnerPos - g_temp.lastPortionPos; + + //if time too fast, take last portion values + if(deltaTime < minDeltaTime && g_temp.lastDeltaTime > 0){ + deltaTime = g_temp.lastDeltaTime; + deltaPos = g_temp.lastDeltaPos + deltaPos; + } + + //fix delta time + if(deltaTime < minDeltaTime) + deltaTime = minDeltaTime; + + var dir = (deltaPos > 0)?1:-1; + + var speed = 0; + if(deltaTime > 0) + speed = deltaPos / deltaTime; + + var path = (speed * speed) / (slowFactor * 2) * dir; + + //disable path for very slow motions + if(Math.abs(path) <= minPath) + path = 0; + + + var innerStripPos = g_parent.getInnerStripPos(); + var newPos = innerStripPos + path; + + var correctPos = g_parent.fixInnerStripLimits(newPos); + var objLimits = g_parent.getInnerStripLimits(); + + //check the off the limits and return (second animation) + var limitsBreakAddition = g_serviceParams.limitsBreakAddition; + var doQueue = false; + var returnPos = correctPos; + + //fix the first animation position (off the limits) + if(newPos > objLimits.maxPos){ + doQueue = true; + correctPos = limitsBreakAddition; + if(newPos < limitsBreakAddition) + correctPos = newPos; + } + + if(newPos < objLimits.minPos){ + doQueue = true; + var maxStopPos = objLimits.minPos - limitsBreakAddition; + correctPos = maxStopPos; + if(newPos > maxStopPos) + correctPos = newPos; + } + + var correctPath = correctPos - innerStripPos; + + //set animation speed + var animateSpeed = Math.abs(Math.round(speed / slowFactor)); + + //fix animation speed according the paths difference + if(path != 0) + animateSpeed = animateSpeed * correctPath / path; + + + //Do first animation + if(innerStripPos != correctPos){ + + var animateProps = {"left":correctPos+"px"}; + if(g_isVertical == true) + animateProps = {"top":correctPos+"px"}; + + g_objStripInner.animate(animateProps ,{ + duration: animateSpeed, + easing: g_serviceParams.animationEasing, + queue: true, + progress:onAnimateProgress + }); + + } + + + //do second animation if off limits + if(doQueue == true){ + var returnAnimateSpeed = g_serviceParams.returnAnimateSpeed; + + var returnAnimateProps = {"left":returnPos+"px"}; + if(g_isVertical == true) + returnAnimateProps = {"top":returnPos+"px"}; + + + g_objStripInner.animate(returnAnimateProps,{ + duration: returnAnimateSpeed, + easing: g_serviceParams.returnAnimationEasing, + queue: true, + progress:onAnimateProgress + }); + } + + } + + /** + * on animate progress event. store position and trigger event to gallery + */ + function onAnimateProgress(){ + g_temp.lastPos = g_parent.getInnerStripPos(); + g_parent.triggerStripMoveEvent(); + } + + /** + * start loop while touching strip + */ + function startStripTouchLoop(){ + + if(g_temp.loop_active == true) + return(true); + + g_temp.loop_active = true; + g_temp.handle = setInterval(storeTouchPortionData,10); + } + + + /** + * end loop when not touching + */ + function endStripTouchLoop(event){ + + if(g_temp.loop_active == false) + return(true); + + if(event){ + var pagePos = getMouseOrientPosition(event); + continueTouchMotion(pagePos); + } + + g_temp.loop_active = false; + g_temp.handle = clearInterval(g_temp.handle); + } + + + /** + * on tuch end event + */ + function onTouchEnd(event){ + + if(g_temp.isControlEnabled == false) + return(true); + + g_temp.buttonReleaseTime = jQuery.now(); + + if(g_temp.touch_active == false){ + endStripTouchLoop(event); + return(true); + } + + event.preventDefault(); + + g_temp.touch_active = false; + + endStripTouchLoop(event); + + g_objStrip.removeClass("ug-dragging"); + + } + + + /** + * on touch start - start the motion + * @param event + */ + function onTouchStart(event){ + + if(g_temp.isControlEnabled == false) + return(true); + + event.preventDefault(); + + g_temp.touch_active = true; //don't move this up + + var pagePos = getMouseOrientPosition(event); + + //stop inner animation if exist + g_objStripInner.stop(true); + + //store initial touch values + storeInitTouchValues(pagePos); + startStripTouchLoop(); + + g_objStrip.addClass("ug-dragging"); + } + + + /** + * on touch move event, move the strip + */ + function onTouchMove(event){ + + if(g_temp.isControlEnabled == false) + return(true); + + if(g_temp.touch_active == false) + return(true); + + event.preventDefault(); + + //detect moving without button press + if(event.buttons == 0){ + g_temp.touch_active = false; + + endStripTouchLoop(event); + return(true); + } + + //store current position + var pagePos = getMouseOrientPosition(event); + g_temp.lastPos = g_parent.getInnerStripPos(); + + handleStripDrag(pagePos); + + storeTouchPortionData(); + + } + + + /** + * init strip touch events + */ + function initEvents(){ + + //strip mouse down - drag start + g_objStrip.bind("mousedown touchstart",onTouchStart); + + + //on body mouse up - drag end + jQuery(window).add("body").bind("mouseup touchend",onTouchEnd); + + //on body move + jQuery("body").bind("mousemove touchmove", onTouchMove); + + } + + + /** + * destroy the touch events + */ + this.destroy = function(){ + g_objStrip.unbind("mousedown"); + g_objStrip.unbind("touchstart"); + jQuery(window).add("body").unbind("mouseup").unbind("touchend"); + jQuery("body").unbind("mousemove").unbind("touchmove"); + } +} + + +/** -------------- Panel Base Functions ---------------------*/ + +function UGPanelsBase(){ + + var g_temp, g_panel, g_objPanel, g_options, g_objThis; + var g_gallery = new UniteGalleryMain(); + var t = this, g_objHandle, g_objGallery; + var g_functions = new UGFunctions(); + + + /** + * init the base panel + */ + this.init = function(gallery, g_tempArg, g_panelArg, options, g_objThisArg){ + g_temp = g_tempArg; + g_panel = g_panelArg; + g_gallery = gallery; + g_options = options; + g_objThis = g_objThisArg; + + g_objGallery = jQuery(g_gallery); + } + + /** + * set common panels html + */ + this.setHtml = function(g_objPanelArg){ + + g_objPanel = g_objPanelArg; + + if(g_temp.panelType == "strip") + var enable_handle = g_options.strippanel_enable_handle; + else + var enable_handle = g_options.gridpanel_enable_handle; + + // add handle + if (enable_handle == true) { + g_objHandle = new UGPanelHandle(); + g_objHandle.init(g_panel, g_objPanel, g_options, g_temp.panelType, g_gallery); + g_objHandle.setHtml(); + } + + + //set disabled at start if exists + if(g_temp.isDisabledAtStart === true){ + var html = "<div class='ug-overlay-disabled'></div>"; + g_objPanel.append(html); + + setTimeout(function(){ + g_objPanel.children(".ug-overlay-disabled").hide(); + }, g_temp.disabledAtStartTimeout); + + } + + } + + + /** + * place common elements + */ + this.placeElements = function(){ + + // place handle + if (g_objHandle) + g_objHandle.placeHandle(); + } + + + /** + * init common events + */ + this.initEvents = function(){ + + // set handle events + if (g_objHandle){ + g_objHandle.initEvents(); + + //set on slider action events + g_objGallery.on(g_gallery.events.SLIDER_ACTION_START, function(){ + g_objHandle.hideHandle(); + }); + + g_objGallery.on(g_gallery.events.SLIDER_ACTION_END, function(){ + g_objHandle.showHandle(); + }); + + } + + } + + /** + * destroy the panel events + */ + this.destroy = function(){ + + if(g_objHandle){ + g_objHandle.destroy(); + g_objGallery.off(g_gallery.events.SLIDER_ACTION_START); + g_objGallery.off(g_gallery.events.SLIDER_ACTION_END); + } + + } + + /** + * place panel with some animation + */ + function placePanelAnimation(panelDest, functionOnComplete) { + + switch (g_temp.orientation) { + case "right": // vertical + case "left": + var objCss = { + left : panelDest + "px" + }; + break; + case "top": + case "bottom": + var objCss = { + top : panelDest + "px" + }; + break; + } + + g_objPanel.stop(true).animate(objCss, { + duration : 300, + easing : "easeInOutQuad", + queue : false, + complete : function() { + if (functionOnComplete) + functionOnComplete(); + } + }); + + } + + + /** + * place the panel without animation + * + * @param panelDest + */ + function placePanelNoAnimation(panelDest) { + + switch (g_temp.orientation) { + case "right": // vertical + case "left": + g_functions.placeElement(g_objPanel, panelDest, null); + break; + case "top": + case "bottom": + g_functions.placeElement(g_objPanel, null, panelDest); + break; + } + } + + /** + * event on panel slide finish + */ + function onPanelSlideFinish() { + + g_objThis.trigger(g_panel.events.FINISH_MOVE); + + } + + + /** + * open the panel + */ + this.openPanel = function(noAnimation) { + + if (!noAnimation) + var noAnimation = false; + + if (g_objPanel.is(":animated")) + return (false); + + if (g_temp.isClosed == false) + return (false); + + g_temp.isClosed = false; + + g_objThis.trigger(g_panel.events.OPEN_PANEL); + + if (noAnimation === false) + placePanelAnimation(g_temp.originalPos, onPanelSlideFinish); + else { + + placePanelNoAnimation(g_temp.originalPos); + onPanelSlideFinish(); + } + + } + + + /** + * close the panel (slide in) + */ + this.closePanel = function(noAnimation) { + + if (!noAnimation) + var noAnimation = false; + + if (g_objPanel.is(":animated")) + return (false); + + if (g_temp.isClosed == true) + return (false); + + var panelDest = t.getClosedPanelDest(); + + g_temp.isClosed = true; + + g_objThis.trigger(g_panel.events.CLOSE_PANEL); + + if (noAnimation === false) + placePanelAnimation(panelDest, onPanelSlideFinish); + else { + placePanelNoAnimation(panelDest); + onPanelSlideFinish(); + } + + } + + /** + * set the panel that it's in closed state, and set original pos for opening + * later + */ + this.setClosedState = function(originalPos) { + + g_temp.originalPos = originalPos; + g_objThis.trigger(g_panel.events.CLOSE_PANEL); + + g_temp.isClosed = true; + } + + /** + * set the panel opened state + */ + this.setOpenedState = function(originalPos) { + g_objThis.trigger(g_panel.events.OPEN_PANEL); + + g_temp.isClosed = false; + } + + /** + * get closed panel destanation + */ + this.getClosedPanelDest = function() { + + var objPanelSize = g_functions.getElementSize(g_objPanel), panelDest; + + switch (g_temp.orientation) { + case "left": + g_temp.originalPos = objPanelSize.left; + panelDest = -g_temp.panelWidth; + break; + case "right": + g_temp.originalPos = objPanelSize.left; + var gallerySize = g_gallery.getSize(); + panelDest = gallerySize.width; + break; + case "top": + g_temp.originalPos = objPanelSize.top; + panelDest = -g_temp.panelHeight; + break; + case "bottom": + g_temp.originalPos = objPanelSize.top; + var gallerySize = g_gallery.getSize(); + panelDest = gallerySize.height; + break; + } + + return (panelDest); + } + + + /** + * tells if the panel is closed + */ + this.isPanelClosed = function() { + + return (g_temp.isClosed); + } + + + /** + * set the panel disabled at start, called after init before setHtml + * it's enabled again after timeout end + */ + this.setDisabledAtStart = function(timeout){ + + if(timeout <= 0) + return(false); + + g_temp.isDisabledAtStart = true; + g_temp.disabledAtStartTimeout = timeout; + + } + + +} + + +/** -------------- Panel Handle object ---------------------*/ + +function UGPanelHandle(){ + + var t = this, g_objPanel, g_panel, g_objHandleTip, g_panelOptions = {}; + var g_functions = new UGFunctions(); + + var g_options = { + panel_handle_align: "top", //top, middle, bottom , left, right, center - close handle tip align on the handle bar according panel orientation + panel_handle_offset: 0, //offset of handle bar according the valign + panel_handle_skin: 0 //skin of the handle, if empty inherit from gallery skin + }; + + + /** + * init the handle + */ + this.init = function(panel, objPanel, panelOptions, panelType, gallery){ + g_panel = panel; + g_objPanel = objPanel; + + //set needed options + switch(panelType){ + case "grid": + g_options.panel_handle_align = panelOptions.gridpanel_handle_align; + g_options.panel_handle_offset = panelOptions.gridpanel_handle_offset; + g_options.panel_handle_skin = panelOptions.gridpanel_handle_skin; + break; + case "strip": + g_options.panel_handle_align = panelOptions.strippanel_handle_align; + g_options.panel_handle_offset = panelOptions.strippanel_handle_offset; + g_options.panel_handle_skin = panelOptions.strippanel_handle_skin; + break; + default: + throw new Error("Panel handle error: wrong panel type: " + panelType); + break; + } + + //set arrows skin: + var galleryOptions = gallery.getOptions(); + var globalSkin = galleryOptions.gallery_skin; + if(g_options.panel_handle_skin == "") + g_options.panel_handle_skin = globalSkin; + + + } + + + /** + * set handle html + */ + this.setHtml = function(){ + + var orientation = g_panel.getOrientation(); + + var classTip = "ug-panel-handle-tip"; + + switch(orientation){ + case "right": + classTip += " ug-handle-tip-left"; + break; + case "left": + classTip += " ug-handle-tip-right"; + break; + case "bottom": + classTip += " ug-handle-tip-top"; + break; + case "top": + classTip += " ug-handle-tip-bottom"; + break; + } + + g_objPanel.append("<div class='"+classTip+" ug-skin-" + g_options.panel_handle_skin + "'></div>"); + g_objHandleTip = g_objPanel.children(".ug-panel-handle-tip"); + } + + + /** + * remove hover state of the tip + */ + function removeHoverState(){ + + g_objHandleTip.removeClass("ug-button-hover"); + } + + /** + * add closed state class + */ + function setClosedState(){ + + g_objHandleTip.addClass("ug-button-closed"); + } + + /** + * add closed state class + */ + function removeClosedState(){ + g_objHandleTip.removeClass("ug-button-closed"); + } + + /** + * on handle click, close or open panel + */ + function onHandleClick(event){ + + event.stopPropagation(); + event.stopImmediatePropagation(); + + if(g_functions.validateClickTouchstartEvent(event.type) == false) + return(true); + + if(g_panel.isPanelClosed()) + g_panel.openPanel(); + else + g_panel.closePanel(); + } + + /** + * init events + */ + this.initEvents = function(){ + g_functions.addClassOnHover(g_objHandleTip); + g_objHandleTip.bind("click touchstart", onHandleClick); + + //on panel open + jQuery(g_panel).on(g_panel.events.OPEN_PANEL, function(){ + removeHoverState(); + removeClosedState(); + }); + + //one panel close + jQuery(g_panel).on(g_panel.events.CLOSE_PANEL, function(){ + removeHoverState(); + setClosedState(); + }); + + } + + /** + * destroy the handle panel events + */ + this.destroy = function(){ + g_functions.destroyButton(g_objHandleTip); + jQuery(g_panel).off(g_panel.events.OPEN_PANEL); + jQuery(g_panel).off(g_panel.events.CLOSE_PANEL); + } + + + + /** + * check and fix align option, set write direction + */ + function checkAndFixAlign(){ + var orientation = g_panel.getOrientation(); + + switch(orientation){ + case "right": + case "left": + if(g_options.panel_handle_align != "top" && g_options.panel_handle_align != "bottom") + g_options.panel_handle_align = "top"; + break; + case "bottom": + if(g_options.panel_handle_align != "left" && g_options.panel_handle_align != "right") + g_options.panel_handle_align = "left"; + break; + case "top": + if(g_options.panel_handle_align != "left" && g_options.panel_handle_align != "right") + g_options.panel_handle_align = "right"; + break; + } + + } + + + /** + * place the panel + */ + this.placeHandle = function(){ + var handleSize = g_functions.getElementSize(g_objHandleTip); + + checkAndFixAlign(); + + var orientation = g_panel.getOrientation(); + + switch(orientation){ + case "left": + g_functions.placeElement(g_objHandleTip, "right", g_options.panel_handle_align, -handleSize.width); + break; + case "right": + g_functions.placeElement(g_objHandleTip, -handleSize.width, g_options.panel_handle_align, 0 ,g_options.panel_handle_offset); + break; + case "top": + g_functions.placeElement(g_objHandleTip, g_options.panel_handle_align, "bottom", g_options.panel_handle_offset, -handleSize.height); + break; + case "bottom": + g_functions.placeElement(g_objHandleTip, g_options.panel_handle_align, "top", g_options.panel_handle_offset, -handleSize.height); + break; + default: + throw new Error("Wrong panel orientation: " + orientation); + break; + } + + } + + /** + * hide the handle + */ + this.hideHandle = function(){ + + if(g_objHandleTip.is(":visible") == true) + g_objHandleTip.hide(); + + } + + /** + * show the handle + */ + this.showHandle = function(){ + + if(g_objHandleTip.is(":visible") == false) + g_objHandleTip.show(); + + } + + +} + +/** + * grid panel class addon to grid gallery + */ +function UGStripPanel() { + + var t = this, g_objThis = jQuery(this); + var g_gallery = new UniteGalleryMain(), g_objGallery, g_objWrapper, g_objPanel; + var g_functions = new UGFunctions(), g_objStrip = new UGThumbsStrip(), g_panelBase = new UGPanelsBase(); + var g_objButtonNext, g_objButtonPrev; + + this.events = { + FINISH_MOVE : "gridpanel_move_finish", // called after close or open panel (slide finish). + OPEN_PANEL : "open_panel", // called before opening the panel. + CLOSE_PANEL : "close_panel" // called before closing the panel. + }; + + var g_options = { + + strippanel_vertical_type : false, // true, false - specify if the panel is vertical or horizonatal type + + strippanel_padding_top : 8, // space from top of the panel + strippanel_padding_bottom : 8, // space from bottom of the panel + + strippanel_padding_left : 0, // space from left of the panel + strippanel_padding_right : 0, // space from right of the panel + + strippanel_enable_buttons : true, // enable buttons from the sides of the panel + strippanel_buttons_skin : "", // skin of the buttons, if empty inherit from gallery skin + + strippanel_padding_buttons : 2, // padding between the buttons and the panel + + strippanel_buttons_role : "scroll_strip", // scroll_strip, advance_item - the role of the side buttons + + strippanel_enable_handle : true, // enable grid handle + strippanel_handle_align : "top", // top, middle, bottom , left, right, center - close handle tip align on the handle bar according panel orientation + strippanel_handle_offset : 0, // offset of handle bar according the valign + + strippanel_handle_skin : "", // skin of the handle, if empty inherit from gallery skin + + strippanel_background_color : "" // background color of the strip wrapper, if not set, it will be taken from the css + + }; + + var g_defaults_vertical = { + strip_vertical_type : true, + strippanel_padding_left : 8, + strippanel_padding_right : 8, + strippanel_padding_top : 0, + strippanel_padding_bottom : 0 + }; + + var g_defaults_no_buttons = { + strippanel_padding_left : 8, + strippanel_padding_right : 8, + strippanel_padding_top : 8, + strippanel_padding_bottom : 8 + }; + + var g_temp = { + panelType: "strip", + panelWidth : 0, + panelHeight : 0, + isEventsInited : false, + isClosed : false, + orientation : null, + originalPos : null, + isFirstRun : true + }; + + /** + * init the panel + */ + function initPanel(gallery, customOptions) { + g_gallery = gallery; + + g_objGallery = jQuery(g_gallery); + + g_options = jQuery.extend(g_options, customOptions); + + var repeatCustomOptions = false; + + if (g_options.strippanel_vertical_type == true) { + g_options = jQuery.extend(g_options, g_defaults_vertical); + repeatCustomOptions = true; + } + + if (g_options.strippanel_enable_buttons == false) { + g_options = jQuery.extend(g_options, g_defaults_no_buttons); + repeatCustomOptions = true; + } + + if (repeatCustomOptions == true) + g_options = jQuery.extend(g_options, customOptions); // do the + + + // set arrows skin: + var galleryOptions = g_gallery.getOptions(); + var globalSkin = galleryOptions.gallery_skin; + if (g_options.strippanel_buttons_skin == "") + g_options.strippanel_buttons_skin = globalSkin; + + g_objWrapper = g_gallery.getElement(); + + //init the base panel object: + g_panelBase.init(g_gallery, g_temp, t, g_options, g_objThis); + + //init thumbs strip + g_objStrip = new UGThumbsStrip(); + g_objStrip.init(g_gallery, g_options); + + } + + + /** + * validate panel before run + */ + function validatePanelBeforeRun() { + + if (g_options.strippanel_vertical_type == false) { // horizontal + // validate + if (g_temp.panelWidth == 0) { + throw new Error( + "Strip panel error: The width not set, please set width"); + return (false); + } + + } else { // vertical validate + + if (g_temp.panelHeight == 0) { + throw new Error( + "Strip panel error: The height not set, please set height"); + return (false); + } + + } + + // validate orientation + if (g_temp.orientation == null) { + throw new Error( + "Wrong orientation, please set panel orientation before run"); + return (false); + } + + return (true); + } + + /** + * run the panel + */ + function runPanel() { + + // validation + if (g_temp.isFirstRun == true && validatePanelBeforeRun() == false) + return (false); + + g_objStrip.run(); + + setElementsSize(); + placeElements(); + + initEvents(); + + g_temp.isFirstRun = false; + + checkSideButtons(); + } + + /** + * set panel html + */ + function setPanelHtml(parentContainer) { + + if (!parentContainer) + var parentContainer = g_objWrapper; + + // add panel wrapper + parentContainer.append("<div class='ug-strip-panel'></div>"); + + g_objPanel = parentContainer.children('.ug-strip-panel'); + + // add arrows: + if (g_options.strippanel_enable_buttons == true) { + + var arrowPrevClass = "ug-strip-arrow-left"; + var arrowNextClass = "ug-strip-arrow-right"; + if (g_options.strippanel_vertical_type == true) { + arrowPrevClass = "ug-strip-arrow-up"; + arrowNextClass = "ug-strip-arrow-down"; + } + + g_objPanel.append("<div class='ug-strip-arrow " + arrowPrevClass + + " ug-skin-" + g_options.strippanel_buttons_skin + + "'><div class='ug-strip-arrow-tip'></div></div>"); + g_objPanel.append("<div class='ug-strip-arrow " + arrowNextClass + + " ug-skin-" + g_options.strippanel_buttons_skin + + "'><div class='ug-strip-arrow-tip'></div></div>"); + + } + + g_panelBase.setHtml(g_objPanel); + + g_objStrip.setHtml(g_objPanel); + + if (g_options.strippanel_enable_buttons == true) { + g_objButtonPrev = g_objPanel.children("." + arrowPrevClass); + g_objButtonNext = g_objPanel.children("." + arrowNextClass); + } + + setHtmlProperties(); + } + + /** + * set html properties according the options + */ + function setHtmlProperties() { + + // set panel background color + if (g_options.strippanel_background_color != "") + g_objPanel.css("background-color", + g_options.strippanel_background_color); + + } + + /** + * set elements size horizontal type + */ + function setElementsSize_hor() { + + // get strip height + var stripHeight = g_objStrip.getHeight(); + var panelWidth = g_temp.panelWidth; + + // set buttons height + if (g_objButtonNext) { + g_objButtonPrev.height(stripHeight); + g_objButtonNext.height(stripHeight); + + // arrange buttons tip + var prevTip = g_objButtonPrev.children(".ug-strip-arrow-tip"); + g_functions.placeElement(prevTip, "center", "middle"); + + var nextTip = g_objButtonNext.children(".ug-strip-arrow-tip"); + g_functions.placeElement(nextTip, "center", "middle"); + } + + // set panel height + var panelHeight = stripHeight + g_options.strippanel_padding_top + + g_options.strippanel_padding_bottom; + + // set panel size + g_objPanel.width(panelWidth); + g_objPanel.height(panelHeight); + + g_temp.panelHeight = panelHeight; + + // set strip size + var stripWidth = panelWidth - g_options.strippanel_padding_left - g_options.strippanel_padding_right; + + if (g_objButtonNext) { + var buttonWidth = g_objButtonNext.outerWidth(); + stripWidth = stripWidth - buttonWidth * 2 - g_options.strippanel_padding_buttons * 2; + } + + g_objStrip.resize(stripWidth); + } + + /** + * set elements size vertical type + */ + function setElementsSize_vert() { + + // get strip width + var stripWidth = g_objStrip.getWidth(); + var panelHeight = g_temp.panelHeight; + + // set buttons height + if (g_objButtonNext) { + g_objButtonPrev.width(stripWidth); + g_objButtonNext.width(stripWidth); + + // arrange buttons tip + var prevTip = g_objButtonPrev.children(".ug-strip-arrow-tip"); + g_functions.placeElement(prevTip, "center", "middle"); + + var nextTip = g_objButtonNext.children(".ug-strip-arrow-tip"); + g_functions.placeElement(nextTip, "center", "middle"); + } + + // set panel width + var panelWidth = stripWidth + g_options.strippanel_padding_left + + g_options.strippanel_padding_right; + + // set panel size + g_objPanel.width(panelWidth); + g_objPanel.height(panelHeight); + + g_temp.panelWidth = panelWidth; + + // set strip size + var stripHeight = panelHeight - g_options.strippanel_padding_top + - g_options.strippanel_padding_bottom; + + if (g_objButtonNext) { + var buttonHeight = g_objButtonNext.outerHeight(); + stripHeight = stripHeight - buttonHeight * 2 + - g_options.strippanel_padding_buttons * 2; + } + + g_objStrip.resize(stripHeight); + } + + /** + * set elements size and place the elements + */ + function setElementsSize() { + + if (g_options.strippanel_vertical_type == false) + setElementsSize_hor(); + else + setElementsSize_vert(); + } + + /** + * place elements horizontally + */ + function placeElements_hor() { + + // place buttons + if (g_objButtonNext) { + g_functions.placeElement(g_objButtonPrev, "left", "top", + g_options.strippanel_padding_left, + g_options.strippanel_padding_top); + g_functions.placeElement(g_objButtonNext, "right", "top", + g_options.strippanel_padding_right, + g_options.strippanel_padding_top); + } + + var stripX = g_options.strippanel_padding_left; + if (g_objButtonNext) + stripX += g_objButtonNext.outerWidth() + + g_options.strippanel_padding_buttons; + + g_objStrip.setPosition(stripX, g_options.strippanel_padding_top); + + } + + /** + * place elements vertically + */ + function placeElements_vert() { + + // place buttons + if (g_objButtonNext) { + g_functions.placeElement(g_objButtonPrev, "left", "top", + g_options.strippanel_padding_left, + g_options.strippanel_padding_top); + g_functions.placeElement(g_objButtonNext, "left", "bottom", + g_options.strippanel_padding_left, + g_options.strippanel_padding_bottom); + } + + var stripY = g_options.strippanel_padding_top; + if (g_objButtonNext) + stripY += g_objButtonNext.outerHeight() + + g_options.strippanel_padding_buttons; + + g_objStrip.setPosition(g_options.strippanel_padding_left, stripY); + } + + /** + * place elements + */ + function placeElements() { + + if (g_options.strippanel_vertical_type == false) + placeElements_hor(); + else + placeElements_vert(); + + g_panelBase.placeElements(); + + } + + + + function __________EVENTS___________() { + } + ; + + /** + * on next button click + */ + function onNextButtonClick(objButton) { + + if (g_functions.isButtonDisabled(objButton)) + return (true); + + if (g_options.strippanel_buttons_role == "advance_item") + g_gallery.nextItem(); + else + g_objStrip.scrollForeward(); + } + + /** + * on previous button click + */ + function onPrevButtonClick(objButton) { + + if (g_functions.isButtonDisabled(objButton)) + return (true); + + if (g_options.strippanel_buttons_role == "advance_item") + g_gallery.prevItem(); + else + g_objStrip.scrollBack(); + } + + /** + * check buttons if they need to be disabled or not + */ + function checkSideButtons() { + + if (!g_objButtonNext) + return (true); + + // if the strip not movable - disable both buttons + if (g_objStrip.isMoveEnabled() == false) { + g_functions.disableButton(g_objButtonPrev); + g_functions.disableButton(g_objButtonNext); + return (true); + } + + // check the limits + var limits = g_objStrip.getInnerStripLimits(); + var pos = g_objStrip.getInnerStripPos(); + + if (pos >= limits.maxPos) { + g_functions.disableButton(g_objButtonPrev); + } else { + g_functions.enableButton(g_objButtonPrev); + } + + if (pos <= limits.minPos) + g_functions.disableButton(g_objButtonNext); + else + g_functions.enableButton(g_objButtonNext); + + } + + /** + * on strip move event + */ + function onStripMove() { + checkSideButtons(); + } + + /** + * on item change event, disable or enable buttons according the images + * position + */ + function onItemChange() { + + if (g_gallery.isLastItem()) + g_functions.disableButton(g_objButtonNext); + else + g_functions.enableButton(g_objButtonNext); + + if (g_gallery.isFirstItem()) + g_functions.disableButton(g_objButtonPrev); + else + g_functions.enableButton(g_objButtonPrev); + + } + + + /** + * init panel events + */ + function initEvents() { + + if (g_temp.isEventsInited == true) + return (false); + + g_temp.isEventsInited = true; + + // buttons events + if (g_objButtonNext) { + + // add hove class + g_functions.addClassOnHover(g_objButtonNext, "ug-button-hover"); + g_functions.addClassOnHover(g_objButtonPrev, "ug-button-hover"); + + // add click events + g_functions.setButtonOnClick(g_objButtonPrev, onPrevButtonClick); + g_functions.setButtonOnClick(g_objButtonNext, onNextButtonClick); + + // add disable / enable buttons on strip move event + if (g_options.strippanel_buttons_role != "advance_item") { + + jQuery(g_objStrip).on(g_objStrip.events.STRIP_MOVE, onStripMove); + + jQuery(g_objStrip).on(g_objStrip.events.INNER_SIZE_CHANGE, checkSideButtons); + + g_objGallery.on(g_gallery.events.SIZE_CHANGE, checkSideButtons); + + } else { + var galleryOptions = g_gallery.getOptions(); + if (galleryOptions.gallery_carousel == false) + jQuery(g_gallery).on(g_gallery.events.ITEM_CHANGE, onItemChange); + } + + } + + g_panelBase.initEvents(); + } + + /** + * destroy the strip panel events + */ + this.destroy = function(){ + + if(g_objButtonNext){ + g_functions.destroyButton(g_objButtonNext); + g_functions.destroyButton(g_objButtonPrev); + jQuery(g_objStrip).off(g_objStrip.events.STRIP_MOVE); + jQuery(g_gallery).off(g_gallery.events.ITEM_CHANGE); + jQuery(g_gallery).off(g_gallery.events.SIZE_CHANGE); + } + + g_panelBase.destroy(); + g_objStrip.destroy(); + } + + + /** + * get panel orientation + */ + this.getOrientation = function() { + + return (g_temp.orientation); + } + + /** + * set panel orientation (left, right, top, bottom) + */ + this.setOrientation = function(orientation) { + + g_temp.orientation = orientation; + } + + + /** + * init the panel + */ + this.init = function(gallery, customOptions) { + initPanel(gallery, customOptions); + } + + /** + * run the panel + */ + this.run = function() { + runPanel(); + } + + /** + * place panel html + */ + this.setHtml = function(parentContainer) { + setPanelHtml(parentContainer); + } + + /** + * get the panel element + */ + this.getElement = function() { + return (g_objPanel); + } + + /** + * get panel size object + */ + this.getSize = function() { + + var objSize = g_functions.getElementSize(g_objPanel); + + return (objSize); + } + + /** + * set panel width (for horizonal type) + */ + this.setWidth = function(width) { + + g_temp.panelWidth = width; + + } + + /** + * set panel height (for vertical type) + */ + this.setHeight = function(height) { + + g_temp.panelHeight = height; + + } + + /** + * resize the panel + */ + this.resize = function(newWidth) { + t.setWidth(newWidth); + setElementsSize(); + placeElements(); + } + + this.__________Functions_From_Base_____ = function() {} + + /** + * tells if the panel is closed + */ + this.isPanelClosed = function() { + return (g_panelBase.isPanelClosed()); + } + + /** + * get closed panel destanation + */ + this.getClosedPanelDest = function() { + return g_panelBase.getClosedPanelDest(); + } + + /** + * open the panel + */ + this.openPanel = function(noAnimation) { + g_panelBase.openPanel(noAnimation); + } + + + /** + * close the panel (slide in) + */ + this.closePanel = function(noAnimation) { + g_panelBase.closePanel(noAnimation); + } + + /** + * set the panel opened state + */ + this.setOpenedState = function(originalPos) { + g_panelBase.setOpenedState(originalPos); + } + + /** + * set the panel that it's in closed state, and set original pos for opening later + */ + this.setClosedState = function(originalPos) { + g_panelBase.setClosedState(originalPos); + } + + /** + * set custom thumbs of the strip + */ + this.setCustomThumbs = function(funcSetHtml){ + + g_objStrip.setCustomThumbs(funcSetHtml); + + } + + /** + * set panel disabled at start + */ + this.setDisabledAtStart = function(timeout){ + + g_panelBase.setDisabledAtStart(timeout); + + } + +} + + +/** + * grid panel class + * addon to grid gallery + */ +function UGGridPanel(){ + + var t = this, g_objThis = jQuery(this); + var g_gallery = new UniteGalleryMain(), g_objGallery, g_objWrapper, g_objPanel; + var g_functions = new UGFunctions(); + var g_objGrid = new UGThumbsGrid(); + var g_panelBase = new UGPanelsBase(); + var g_objArrowNext, g_objArrowPrev; + + this.events = { + FINISH_MOVE: "gridpanel_move_finish", //called after close or open panel (slide finish). + OPEN_PANEL: "open_panel", //called before opening the panel. + CLOSE_PANEL: "close_panel" //called before closing the panel. + }; + + var g_options = { + gridpanel_vertical_scroll: true, //vertical or horizontal grid scroll and arrows + gridpanel_grid_align: "middle", //top , middle , bottom, left, center, right - the align of the grid panel in the gallery + gridpanel_padding_border_top: 10, //padding between the top border of the panel + gridpanel_padding_border_bottom: 4, //padding between the bottom border of the panel + gridpanel_padding_border_left: 10, //padding between the left border of the panel + gridpanel_padding_border_right: 10, //padding between the right border of the panel + + gridpanel_arrows_skin: "", //skin of the arrows, if empty inherit from gallery skin + gridpanel_arrows_align_vert: "middle", //borders, grid, middle - vertical align of arrows, to the top and bottom botders, to the grid, or in the middle space. + gridpanel_arrows_padding_vert: 4, //padding between the arrows and the grid, in case of middle align, it will be minimal padding + gridpanel_arrows_align_hor: "center", //borders, grid, center - horizontal align of arrows, to the left and right botders, to the grid, or in the center space. + gridpanel_arrows_padding_hor: 10, //in case of horizontal type only, minimal size from the grid in case of "borders" and size from the grid in case of "grid" + + gridpanel_space_between_arrows: 20, //space between arrows on horizontal grids only + gridpanel_arrows_always_on: false, //always show arrows even if the grid is one pane only + + gridpanel_enable_handle: true, //enable grid handle + gridpanel_handle_align: "top", //top, middle, bottom , left, right, center - close handle tip align on the handle bar according panel orientation + gridpanel_handle_offset: 0, //offset of handle bar according the valign + gridpanel_handle_skin: "", //skin of the handle, if empty inherit from gallery skin + + gridpanel_background_color:"" //background color of the grid wrapper, if not set, it will be taken from the css + }; + + + //default options for vertical scroll + var g_defaultsVertical = { + gridpanel_grid_align: "middle", //top , middle , bottom + gridpanel_padding_border_top: 2, //padding between the top border of the panel + gridpanel_padding_border_bottom: 2 //padding between the bottom border of the panel + }; + + //default options for horizontal type panel + var g_defaultsHorType = { + gridpanel_grid_align: "center" //left, center, right + }; + + var g_temp = { + panelType: "grid", + isHorType: false, + arrowsVisible: false, + panelHeight: 0, + panelWidth: 0, + originalPosX:null, + isEventsInited: false, + isClosed: false, + orientation: null + }; + + + /** + * init the grid panel + */ + function initGridPanel(gallery, customOptions){ + + g_gallery = gallery; + + validateOrientation(); + + //set defaults and custom options + if(customOptions && customOptions.vertical_scroll){ + g_options.gridpanel_vertical_scroll = customOptions.vertical_scroll; + } + + g_options = jQuery.extend(g_options, customOptions); + + //set defautls for horizontal panel type + if(g_temp.isHorType == true){ + + g_options = jQuery.extend(g_options, g_defaultsHorType); + g_options = jQuery.extend(g_options, customOptions); + + }else if(g_options.gridpanel_vertical_scroll == true){ + + //set defaults for vertical scroll + g_options = jQuery.extend(g_options, g_defaultsVertical); + g_options = jQuery.extend(g_options, customOptions); + g_options.grid_panes_direction = "bottom"; + } + + //set arrows skin: + var galleryOptions = g_gallery.getOptions(); + var globalSkin = galleryOptions.gallery_skin; + if(g_options.gridpanel_arrows_skin == "") + g_options.gridpanel_arrows_skin = globalSkin; + + + //get the gallery wrapper + var objects = gallery.getObjects(); + g_objWrapper = objects.g_objWrapper; + + //init the base panel object: + g_panelBase.init(g_gallery, g_temp, t, g_options, g_objThis); + + //init the grid + g_objGrid = new UGThumbsGrid(); + g_objGrid.init(g_gallery, g_options); + + } + + + /** + * validate the orientation if exists + */ + function validateOrientation(){ + + if(g_temp.orientation == null) + throw new Error("Wrong orientation, please set panel orientation before run"); + + } + + /** + * run the rid panel + */ + function runPanel(){ + + //validate orientation + validateOrientation(); + + processOptions(); + + g_objGrid.run(); + + setArrows(); + setPanelSize(); + placeElements(); + + initEvents(); + } + + + /** + * set html of the grid panel + */ + function setHtmlPanel(){ + + //add panel wrapper + g_objWrapper.append("<div class='ug-grid-panel'></div>"); + + g_objPanel = g_objWrapper.children('.ug-grid-panel'); + + //add arrows: + if(g_temp.isHorType){ + + g_objPanel.append("<div class='grid-arrow grid-arrow-left-hortype ug-skin-" + g_options.gridpanel_arrows_skin + "'></div>"); + g_objPanel.append("<div class='grid-arrow grid-arrow-right-hortype ug-skin-" + g_options.gridpanel_arrows_skin + "'></div>"); + + g_objArrowPrev = g_objPanel.children(".grid-arrow-left-hortype"); + g_objArrowNext = g_objPanel.children(".grid-arrow-right-hortype"); + } + else if(g_options.gridpanel_vertical_scroll == false){ //horizonatl arrows + g_objPanel.append("<div class='grid-arrow grid-arrow-left ug-skin-" + g_options.gridpanel_arrows_skin + "'></div>"); + g_objPanel.append("<div class='grid-arrow grid-arrow-right ug-skin-" + g_options.gridpanel_arrows_skin + "'></div>"); + + g_objArrowPrev = g_objPanel.children(".grid-arrow-left"); + g_objArrowNext = g_objPanel.children(".grid-arrow-right"); + + }else{ //vertical arrows + g_objPanel.append("<div class='grid-arrow grid-arrow-up ug-skin-" + g_options.gridpanel_arrows_skin + "'></div>"); + g_objPanel.append("<div class='grid-arrow grid-arrow-down ug-skin-" + g_options.gridpanel_arrows_skin + "'></div>"); + + g_objArrowPrev = g_objPanel.children(".grid-arrow-up"); + g_objArrowNext = g_objPanel.children(".grid-arrow-down"); + } + + g_panelBase.setHtml(g_objPanel); + + //hide the arrows + g_objArrowPrev.fadeTo(0,0); + g_objArrowNext.fadeTo(0,0); + + g_objGrid.setHtml(g_objPanel); + + setHtmlProperties(); + } + + + /** + * set html properties according the options + */ + function setHtmlProperties(){ + + //set panel background color + if(g_options.gridpanel_background_color != "") + g_objPanel.css("background-color",g_options.gridpanel_background_color); + } + + + /** + * process and fix certain options, avoid arrows and validate options + */ + function processOptions(){ + + if(g_options.gridpanel_grid_align == "center") + g_options.gridpanel_grid_align = "middle"; + } + + + /** + * place panel with some animation + */ + function placePanelAnimation(panelX, functionOnComplete){ + + var objCss = {left: panelX + "px"}; + + g_objPanel.stop(true).animate(objCss ,{ + duration: 300, + easing: "easeInOutQuad", + queue: false, + complete: function(){ + if(functionOnComplete) + functionOnComplete(); + } + }); + + } + + + + /** + * get max height of the grid according the arrows size + */ + function getGridMaxHeight(){ + + //check space taken without arrows for one pane grids + var spaceTaken = g_options.gridpanel_padding_border_top + g_options.gridpanel_padding_border_bottom; + var maxGridHeight = g_temp.panelHeight - spaceTaken; + + if(g_options.gridpanel_arrows_always_on == false){ + var numPanes = g_objGrid.getNumPanesEstimationByHeight(maxGridHeight); + if(numPanes == 1) + return(maxGridHeight); + } + + //count the size with arrows + var arrowsSize = g_functions.getElementSize(g_objArrowNext); + var arrowsHeight = arrowsSize.height; + + var spaceTaken = arrowsHeight + g_options.gridpanel_arrows_padding_vert; + + if(g_options.gridpanel_vertical_scroll == true) //in case of 2 arrows multiply by 2 + spaceTaken *= 2; + + spaceTaken += g_options.gridpanel_padding_border_top + g_options.gridpanel_padding_border_bottom; + + maxGridHeight = g_temp.panelHeight - spaceTaken; + + return(maxGridHeight); + } + + + /** + * get grid maximum width + */ + function getGridMaxWidth(){ + + //check space taken without arrows for one pane grids + var spaceTaken = g_options.gridpanel_padding_border_left + g_options.gridpanel_padding_border_right; + + var maxGridWidth = g_temp.panelWidth - spaceTaken; + + if(g_options.gridpanel_arrows_always_on == false){ + var numPanes = g_objGrid.getNumPanesEstimationByWidth(maxGridWidth); + + if(numPanes == 1) + return(maxGridWidth); + } + + //count the size with arrows + var arrowsSize = g_functions.getElementSize(g_objArrowNext); + var arrowsWidth = arrowsSize.width; + + spaceTaken += (arrowsWidth + g_options.gridpanel_arrows_padding_hor) * 2; + + maxGridWidth = g_temp.panelWidth - spaceTaken; + + return(maxGridWidth); + } + + + /** + * enable / disable arrows according the grid + */ + function setArrows(){ + + var showArrows = false; + if(g_options.gridpanel_arrows_always_on == true){ + showArrows = true; + } + else{ + var numPanes = g_objGrid.getNumPanes(); + if(numPanes > 1) + showArrows = true; + } + + if(showArrows == true){ //show arrows + + g_objArrowNext.show().fadeTo(0,1); + g_objArrowPrev.show().fadeTo(0,1); + g_temp.arrowsVisible = true; + + }else{ //hide arrows + + g_objArrowNext.hide(); + g_objArrowPrev.hide(); + g_temp.arrowsVisible = false; + + } + + } + + + /** + * set panel size by the given height and grid width + */ + function setPanelSize(){ + var gridSize = g_objGrid.getSize(); + + //set panel size + if(g_temp.isHorType == true) + g_temp.panelHeight = gridSize.height + g_options.gridpanel_padding_border_top + g_options.gridpanel_padding_border_bottom; + else + g_temp.panelWidth = gridSize.width + g_options.gridpanel_padding_border_left + g_options.gridpanel_padding_border_right; + + g_functions.setElementSize(g_objPanel, g_temp.panelWidth, g_temp.panelHeight); + + } + + + /** + * place the panel without animation + * @param panelDest + */ + function placePanelNoAnimation(panelDest){ + + switch(g_temp.orientation){ + case "right": //vertical + case "left": + g_functions.placeElement(g_objPanel, panelDest, null); + break; + } + + } + + + + function __________EVENTS___________(){}; + + + + /** + * event on panel slide finish + */ + function onPanelSlideFinish(){ + + g_objThis.trigger(t.events.FINISH_MOVE); + + } + + + /** + * init panel events + */ + function initEvents(){ + + if(g_temp.isEventsInited == true) + return(false); + + g_temp.isEventsInited = true; + + if(g_objArrowPrev){ + g_functions.addClassOnHover(g_objArrowPrev); + g_objGrid.attachPrevPaneButton(g_objArrowPrev); + } + + + if(g_objArrowNext){ + g_functions.addClassOnHover(g_objArrowNext); + g_objGrid.attachNextPaneButton(g_objArrowNext); + } + + g_panelBase.initEvents(); + + } + + + /** + * destroy the events + */ + this.destroy = function(){ + + if(g_objArrowPrev) + g_functions.destroyButton(g_objArrowPrev); + + if(g_objArrowNext) + g_functions.destroyButton(g_objArrowNext); + + g_panelBase.destroy(); + + g_objGrid.destroy(); + } + + + function ______PLACE_ELEMENTS___________(){}; + + + /** + * get padding left of the grid + */ + function getGridPaddingLeft(){ + + var gridPanelLeft = g_options.gridpanel_padding_border_left; + + return(gridPanelLeft); + } + + + /** + * place elements vertical - grid only + */ + function placeElements_noarrows(){ + + //place grid + var gridY = g_options.gridpanel_grid_align, gridPaddingY = 0; + + switch(gridY){ + case "top": + gridPaddingY = g_options.gridpanel_padding_border_top; + + break; + case "bottom": + gridPaddingY = g_options.gridpanel_padding_border_bottom; + break; + } + + var gridPanelLeft = getGridPaddingLeft(); + + var gridElement = g_objGrid.getElement(); + g_functions.placeElement(gridElement, gridPanelLeft, gridY, 0 , gridPaddingY); + + } + + + /** + * place elements vertical - with arrows + */ + function placeElementsVert_arrows(){ + + //place grid + var gridY, prevArrowY, nextArrowY, nextArrowPaddingY; + var objArrowSize = g_functions.getElementSize(g_objArrowPrev); + var objGridSize = g_objGrid.getSize(); + + + switch(g_options.gridpanel_grid_align){ + default: + case "top": + gridY = g_options.gridpanel_padding_border_top + objArrowSize.height + g_options.gridpanel_arrows_padding_vert; + break; + case "middle": + gridY = "middle"; + break; + case "bottom": + gridY = g_temp.panelHeight - objGridSize.height - objArrowSize.height - g_options.gridpanel_padding_border_bottom - g_options.gridpanel_arrows_padding_vert; + break; + } + + //place the grid + var gridPanelLeft = getGridPaddingLeft(); + + var gridElement = g_objGrid.getElement(); + g_functions.placeElement(gridElement, gridPanelLeft, gridY); + + var objGridSize = g_objGrid.getSize(); + + //place arrows + switch(g_options.gridpanel_arrows_align_vert){ + default: + case "center": + case "middle": + prevArrowY = (objGridSize.top - objArrowSize.height) / 2; + nextArrowY = objGridSize.bottom + (g_temp.panelHeight - objGridSize.bottom - objArrowSize.height) / 2; + nextArrowPaddingY = 0; + break; + case "grid": + prevArrowY = objGridSize.top - objArrowSize.height - g_options.gridpanel_arrows_padding_vert_vert + nextArrowY = objGridSize.bottom + g_options.gridpanel_arrows_padding_vert; + nextArrowPaddingY = 0; + break; + case "border": + case "borders": + prevArrowY = g_options.gridpanel_padding_border_top; + nextArrowY = "bottom"; + nextArrowPaddingY = g_options.gridpanel_padding_border_bottom; + break; + } + + g_functions.placeElement(g_objArrowPrev, "center", prevArrowY); + + g_functions.placeElement(g_objArrowNext, "center", nextArrowY, 0, nextArrowPaddingY); + } + + + /** + * place elements vertical + */ + function placeElementsVert(){ + + if(g_temp.arrowsVisible == true) + placeElementsVert_arrows(); + else + placeElements_noarrows(); + } + + + /** + * place elements horizontal with arrows + */ + function placeElementsHor_arrows(){ + + var arrowsY, prevArrowPadding, arrowsPaddingY, nextArrowPadding; + var objArrowSize = g_functions.getElementSize(g_objArrowPrev); + var objGridSize = g_objGrid.getSize(); + + //place grid + var gridY = g_options.gridpanel_padding_border_top; + + switch(g_options.gridpanel_grid_align){ + case "middle": + + switch(g_options.gridpanel_arrows_align_vert){ + default: + var elementsHeight = objGridSize.height + g_options.gridpanel_arrows_padding_vert + objArrowSize.height; + gridY = (g_temp.panelHeight - elementsHeight) / 2; + break; + case "border": + case "borders": + var remainHeight = g_temp.panelHeight - objArrowSize.height - g_options.gridpanel_padding_border_bottom; + gridY = (remainHeight - objGridSize.height) / 2; + break; + } + + break; + case "bottom": + var elementsHeight = objGridSize.height + objArrowSize.height + g_options.gridpanel_arrows_padding_vert; + gridY = g_temp.panelHeight - elementsHeight - g_options.gridpanel_padding_border_bottom; + break; + } + + var gridElement = g_objGrid.getElement(); + var gridPanelLeft = getGridPaddingLeft(); + + g_functions.placeElement(gridElement, gridPanelLeft, gridY); + + var objGridSize = g_objGrid.getSize(); + + switch(g_options.gridpanel_arrows_align_vert){ + default: + case "center": + case "middle": + arrowsY = objGridSize.bottom + (g_temp.panelHeight - objGridSize.bottom - objArrowSize.height) / 2; + arrowsPaddingY = 0; + break; + case "grid": + arrowsY = objGridSize.bottom + g_options.gridpanel_arrows_padding_vert; + arrowsPaddingY = 0; + break; + case "border": + case "borders": + arrowsY = "bottom"; + arrowsPaddingY = g_options.gridpanel_padding_border_bottom; + break; + } + + prevArrowPadding = -objArrowSize.width/2 - g_options.gridpanel_space_between_arrows / 2; + + g_functions.placeElement(g_objArrowPrev, "center", arrowsY, prevArrowPadding, arrowsPaddingY); + + //place next arrow + var nextArrowPadding = Math.abs(prevArrowPadding); //make positive + + g_functions.placeElement(g_objArrowNext, "center", arrowsY, nextArrowPadding, arrowsPaddingY); + + } + + + /** + * place elements horizonatal + */ + function placeElementsHor(){ + + if(g_temp.arrowsVisible == true) + placeElementsHor_arrows(); + else + placeElements_noarrows(); + + } + + + /** + * place elements horizontal type with arrows + */ + function placeElementsHorType_arrows(){ + + //place grid + var gridX, prevArrowX, nextArrowX, arrowsY; + var objArrowSize = g_functions.getElementSize(g_objArrowPrev); + var objGridSize = g_objGrid.getSize(); + + switch(g_options.gridpanel_grid_align){ + default: + case "left": + gridX = g_options.gridpanel_padding_border_left + g_options.gridpanel_arrows_padding_hor + objArrowSize.width; + break; + case "middle": + case "center": + gridX = "center"; + break; + case "right": + gridX = g_temp.panelWidth - objGridSize.width - objArrowSize.width - g_options.gridpanel_padding_border_right - g_options.gridpanel_arrows_padding_hor; + break; + } + + //place the grid + var gridElement = g_objGrid.getElement(); + g_functions.placeElement(gridElement, gridX, g_options.gridpanel_padding_border_top); + objGridSize = g_objGrid.getSize(); + + //place arrows, count Y + switch(g_options.gridpanel_arrows_align_vert){ + default: + case "center": + case "middle": + arrowsY = (objGridSize.height - objArrowSize.height) / 2 + objGridSize.top; + break; + case "top": + arrowsY = g_options.gridpanel_padding_border_top + g_options.gridpanel_arrows_padding_vert; + break; + case "bottom": + arrowsY = g_temp.panelHeight - g_options.gridpanel_padding_border_bottom - g_options.gridpanel_arrows_padding_vert - objArrowSize.height; + break; + } + + //get arrows X + switch(g_options.gridpanel_arrows_align_hor){ + default: + case "borders": + prevArrowX = g_options.gridpanel_padding_border_left; + nextArrowX = g_temp.panelWidth - g_options.gridpanel_padding_border_right - objArrowSize.width; + break; + case "grid": + prevArrowX = objGridSize.left - g_options.gridpanel_arrows_padding_hor - objArrowSize.width; + nextArrowX = objGridSize.right + g_options.gridpanel_arrows_padding_hor; + break; + case "center": + prevArrowX = (objGridSize.left - objArrowSize.width) / 2; + nextArrowX = objGridSize.right + (g_temp.panelWidth - objGridSize.right - objArrowSize.width) / 2; + break; + } + + g_functions.placeElement(g_objArrowPrev, prevArrowX, arrowsY); + g_functions.placeElement(g_objArrowNext, nextArrowX, arrowsY); + } + + + /** + * place elements horizontal type without arrows + */ + function placeElementHorType_noarrows(){ + + var gridX; + var objGridSize = g_objGrid.getSize(); + + switch(g_options.gridpanel_grid_align){ + default: + case "left": + gridX = g_options.gridpanel_padding_border_left; + break; + case "middle": + case "center": + gridX = "center"; + break; + case "right": + gridX = g_temp.panelWidth - objGridSize.width - g_options.gridpanel_padding_border_right; + break; + } + + //place the grid + var gridElement = g_objGrid.getElement(); + g_functions.placeElement(gridElement, gridX, g_options.gridpanel_padding_border_top); + } + + + /** + * place elements when the grid in horizontal position + */ + function placeElementsHorType(){ + + if(g_temp.arrowsVisible == true) + placeElementsHorType_arrows(); + else + placeElementHorType_noarrows(); + + } + + + /** + * place the arrows + */ + function placeElements(){ + + if(g_temp.isHorType == false){ + + if(g_options.gridpanel_vertical_scroll == true) + placeElementsVert(); + else + placeElementsHor(); + + }else{ + placeElementsHorType(); + } + + g_panelBase.placeElements(); + } + + + /** + * get panel orientation + */ + this.getOrientation = function(){ + + return(g_temp.orientation); + } + + + /** + * set panel orientation (left, right, top, bottom) + */ + this.setOrientation = function(orientation){ + + g_temp.orientation = orientation; + + //set isHorType temp variable for ease of use + switch(orientation){ + case "right": + case "left": + g_temp.isHorType = false; + break; + case "top": + case "bottom": + g_temp.isHorType = true; + break; + default: + throw new Error("Wrong grid panel orientation: " + orientation); + break; + } + + } + + /** + * set panel height + */ + this.setHeight = function(height){ + + if(g_temp.isHorType == true) + throw new Error("setHeight is not appliable to this orientatio ("+g_temp.orientation+"). Please use setWidth"); + + g_temp.panelHeight = height; + var gridMaxHeight = getGridMaxHeight(); + + g_objGrid.setMaxHeight(gridMaxHeight); + } + + + /** + * set panel width + */ + this.setWidth = function(width){ + + if(g_temp.isHorType == false) + throw new Error("setWidth is not appliable to this orientatio ("+g_temp.orientation+"). Please use setHeight"); + + g_temp.panelWidth = width; + + var gridMaxWidth = getGridMaxWidth(); + + g_objGrid.setMaxWidth(gridMaxWidth); + } + + + /** + * init the panel + */ + this.init = function(gallery, customOptions){ + + initGridPanel(gallery, customOptions); + } + + /** + * place panel html + */ + this.setHtml = function(){ + setHtmlPanel(); + } + + + /** + * run the panel + */ + this.run = function(){ + + runPanel(); + } + + + /** + * get the panel element + */ + this.getElement = function(){ + return(g_objPanel); + } + + + /** + * get panel size object + */ + this.getSize = function(){ + + var objSize = g_functions.getElementSize(g_objPanel); + + return(objSize); + } + + this.__________Functions_From_Base_____ = function() {} + + /** + * tells if the panel is closed + */ + this.isPanelClosed = function() { + return (g_panelBase.isPanelClosed()); + } + + /** + * get closed panel destanation + */ + this.getClosedPanelDest = function() { + return g_panelBase.getClosedPanelDest(); + } + + /** + * open the panel + */ + this.openPanel = function(noAnimation) { + g_panelBase.openPanel(noAnimation); + } + + + /** + * close the panel (slide in) + */ + this.closePanel = function(noAnimation) { + g_panelBase.closePanel(noAnimation); + } + + /** + * set the panel opened state + */ + this.setOpenedState = function(originalPos) { + g_panelBase.setOpenedState(originalPos); + } + + /** + * set the panel that it's in closed state, and set original pos for opening later + */ + this.setClosedState = function(originalPos) { + g_panelBase.setClosedState(originalPos); + } + + + /** + * set panel disabled at start + */ + this.setDisabledAtStart = function(timeout){ + + g_panelBase.setDisabledAtStart(timeout); + + } + + +} + +/** + * thumbs class + * addon to strip gallery + */ +function UGThumbsGrid(){ + + var t = this, g_objThis = jQuery(this); + var g_gallery = new UniteGalleryMain(), g_objGallery, g_objects, g_objWrapper; + var g_functions = new UGFunctions(), g_arrItems, g_objGrid, g_objInner; + var g_thumbs = new UGThumbsGeneral(), g_tilesDesign = new UGTileDesign(); + + var g_options = { + grid_panes_direction: "left", //where panes will move -> left, bottom + grid_num_cols: 2, //number of grid columns + grid_min_cols: 2, //minimum number of columns (for horizontal type) - the tile size is dynamic + grid_num_rows: 2, //number of grid rows (for horizontal type) + grid_space_between_cols: 10, //space between columns + grid_space_between_rows: 10, //space between rows + grid_space_between_mobile: 10, //space between rows and cols mobile + grid_transition_duration: 300, //transition of the panes change duration + grid_transition_easing: "easeInOutQuad", //transition of the panes change easing function + grid_carousel: false, //next pane goes to first when last + grid_padding: 0, //set padding to the grid + grid_vertical_scroll_ondrag: false //scroll the gallery on vertical drag + }; + + this.events = { + PANE_CHANGE: "pane_change" + }; + + var g_temp = { + eventSizeChange: "thumb_size_change", + isHorizontal: false, + isMaxHeight:false, //set if the height that set is max height. In that case need a height correction + isMaxWidth:false, //set if the height that set is max height. In that case need a height correction + gridHeight: 0, + gridWidth: 0, + innerWidth: 0, + innerHeight:0, + numPanes:0, + arrPanes:0, + numThumbs:0, + currentPane:0, + numThumbsInPane:0, + isNavigationVertical:false, + touchActive: false, + startScrollPos:0, + isFirstTimeRun:true, + isTilesMode: false, + storedEventID: "thumbsgrid", + tileMaxWidth:null, + tileMaxHeight:null, + spaceBetweenCols: null, + spaceBetweenRows: null + }; + + + function __________GENERAL_________(){}; + + /** + * init the gallery + */ + function init(gallery, customOptions, isTilesMode){ + + g_objects = gallery.getObjects(); + g_gallery = gallery; + + g_gallery.attachThumbsPanel("grid", t); + + g_objGallery = jQuery(gallery); + g_objWrapper = g_objects.g_objWrapper; + g_arrItems = g_objects.g_arrItems; + + if(isTilesMode === true) + g_temp.isTilesMode = true; + + g_temp.numThumbs = g_arrItems.length; + + setOptions(customOptions); + + if(g_temp.isTilesMode == true){ + + g_tilesDesign.setFixedMode(); + g_tilesDesign.setApproveClickFunction(isApproveTileClick); + g_tilesDesign.init(gallery, g_options); + + var options_td = g_tilesDesign.getOptions(); + g_temp.tileMaxHeight = options_td.tile_height; + g_temp.tileMaxWidth = options_td.tile_width; + + g_thumbs = g_tilesDesign.getObjThumbs(); + }else{ + + //disable the dynamic size in thumbs + customOptions.thumb_fixed_size = true; + + g_thumbs.init(gallery, customOptions); + } + + } + + + /** + * set the grid panel html + */ + function setHtml(parentContainer){ + + var objParent = g_objWrapper; + + if(parentContainer) + objParent = parentContainer; + + objParent.append("<div class='ug-thumbs-grid'><div class='ug-thumbs-grid-inner'></div></div>"); + g_objGrid = objParent.children(".ug-thumbs-grid"); + g_objInner = g_objGrid.children(".ug-thumbs-grid-inner"); + + //put the thumbs to inner strip + + if(g_temp.isTilesMode == true) + g_tilesDesign.setHtml(g_objInner); + else + g_thumbs.setHtmlThumbs(g_objInner); + + } + + + /** + * validate before running the grid + */ + function validateBeforeRun(){ + + if(g_temp.isHorizontal == false){ //vertical type + if(g_temp.gridHeight == 0) + throw new Error("You must set height before run."); + }else{ + if(g_temp.gridWidth == 0) + throw new Error("You must set width before run."); + } + + } + + + /** + * run the gallery after init and set html + */ + function run(){ + + var selectedItem = g_gallery.getSelectedItem(); + + validateBeforeRun(); + + if(g_temp.isFirstTimeRun == true){ + + initEvents(); + + if(g_temp.isTilesMode == true){ + + initGridDynamicSize(); + initSizeParams(); + g_tilesDesign.run(); + + }else{ + g_thumbs.setHtmlProperties(); + initSizeParams(); + g_thumbs.loadThumbsImages(); + } + + }else{ + + if(g_temp.isTilesMode == true){ + + //check if dynamic size changed. If do, run the thumbs again + var isChanged = initGridDynamicSize(); + + if(isChanged == true){ + initSizeParams(); + g_tilesDesign.run(); + } + } + + } + + positionThumbs(); + + if(g_temp.isFirstTimeRun == true && g_temp.isTilesMode){ + + var objTiles = g_thumbs.getThumbs(); + + //fire size change event + objTiles.each(function(index, tile){ + + g_objWrapper.trigger(g_temp.eventSizeChange, jQuery(tile)); + }); + + objTiles.fadeTo(0,1); + } + + if(selectedItem != null) + scrollToThumb(selectedItem.index); + + //trigger pane change event on the start + g_objThis.trigger(t.events.PANE_CHANGE, g_temp.currentPane); + + g_temp.isFirstTimeRun = false; + } + + /** + * get thumb size object + */ + function getThumbsSize(){ + if(g_temp.isTilesMode == true) + var objThumbSize = g_tilesDesign.getGlobalTileSize(); + else + var objThumbSize = g_thumbs.getGlobalThumbSize(); + + return(objThumbSize); + } + + + /** + * init grid dynamic size (tiles mode) + */ + function initGridDynamicSize(){ + + if(g_temp.isTilesMode == false) + throw new Error("Dynamic size can be set only in tiles mode"); + + var isChanged = false; + var isMobile = g_gallery.isMobileMode(); + + //--- set space between cols and rows + + var spaceOld = g_temp.spaceBetweenCols; + + if(isMobile == true){ + g_temp.spaceBetweenCols = g_options.grid_space_between_mobile; + g_temp.spaceBetweenRows = g_options.grid_space_between_mobile; + }else{ + g_temp.spaceBetweenCols = g_options.grid_space_between_cols; + g_temp.spaceBetweenRows = g_options.grid_space_between_rows; + } + + if(g_temp.spaceBetweenCols != spaceOld) + isChanged = true; + + //set tile size + + var lastThumbSize = getThumbsSize(); + var lastThumbWidth = lastThumbSize.width; + + var tileWidth = g_temp.tileMaxWidth; + var numCols = g_functions.getNumItemsInSpace(g_temp.gridWidth, g_temp.tileMaxWidth, g_temp.spaceBetweenCols); + + if(numCols < g_options.grid_min_cols){ + tileWidth = g_functions.getItemSizeInSpace(g_temp.gridWidth, g_options.grid_min_cols, g_temp.spaceBetweenCols); + } + + g_tilesDesign.setTileSizeOptions(tileWidth); + + if(tileWidth != lastThumbWidth) + isChanged = true; + + + return(isChanged); + } + + + /** + * init grid size horizontal + * get height param + */ + function initSizeParamsHor(){ + + var objThumbSize = getThumbsSize(); + + var thumbsHeight = objThumbSize.height; + + //set grid size + var gridWidth = g_temp.gridWidth; + var gridHeight = g_options.grid_num_rows * thumbsHeight + (g_options.grid_num_rows-1) * g_temp.spaceBetweenRows + g_options.grid_padding*2; + + g_temp.gridHeight = gridHeight; + + g_functions.setElementSize(g_objGrid, gridWidth, gridHeight); + + //set inner size (as grid size, will be corrected after placing thumbs + g_functions.setElementSize(g_objInner, gridWidth, gridHeight); + + //set initial inner size params + g_temp.innerWidth = gridWidth; + g_temp.innerHeight = gridHeight; + } + + + /** + * init size params vertical + */ + function initSizeParamsVert(){ + + var objThumbSize = getThumbsSize(); + + var thumbsWidth = objThumbSize.width; + + //set grid size + var gridWidth = g_options.grid_num_cols * thumbsWidth + (g_options.grid_num_cols-1) * g_temp.spaceBetweenCols + g_options.grid_padding*2; + var gridHeight = g_temp.gridHeight; + + g_temp.gridWidth = gridWidth; + + g_functions.setElementSize(g_objGrid, gridWidth, gridHeight); + + //set inner size (as grid size, will be corrected after placing thumbs + g_functions.setElementSize(g_objInner, gridWidth, gridHeight); + + //set initial inner size params + g_temp.innerWidth = gridWidth; + g_temp.innerHeight = gridHeight; + + } + + /** + * init grid size + */ + function initSizeParams(){ + + if(g_temp.isHorizontal == false) + initSizeParamsVert(); + else + initSizeParamsHor(); + + } + + + + /** + * goto pane by index + */ + function scrollToThumb(thumbIndex){ + + var paneIndex = getPaneIndexByThumbIndex(thumbIndex); + if(paneIndex == -1) + return(false); + + t.gotoPane(paneIndex, "scroll"); + + } + + + /** + * set the options of the strip + */ + function setOptions(objOptions){ + + g_options = jQuery.extend(g_options, objOptions); + + g_thumbs.setOptions(objOptions); + + //set vertical or horizon + g_temp.isNavigationVertical = (g_options.grid_panes_direction == "top" || g_options.grid_panes_direction == "bottom") + + g_temp.spaceBetweenCols = g_options.grid_space_between_cols; + g_temp.spaceBetweenRows = g_options.grid_space_between_rows; + + } + + + /** + * position the thumbs and init panes horizontally + */ + function positionThumb_hor(){ + + var arrThumbs = g_objInner.children(".ug-thumb-wrapper"); + + var posx = 0; + var posy = 0; + var counter = 0; + var baseX = 0; + var maxx = 0, maxy = 0; + g_temp.innerWidth = 0; + g_temp.numPanes = 1; + g_temp.arrPanes = []; + g_temp.numThumbsInPane = 0; + + //set first pane position + g_temp.arrPanes.push(baseX); + + var numThumbs = arrThumbs.length; + + for(i=0;i < numThumbs; i++){ + var objThumb = jQuery(arrThumbs[i]); + g_functions.placeElement(objThumb, posx, posy); + + var thumbWidth = objThumb.outerWidth(); + var thumbHeight = objThumb.outerHeight(); + + //count maxx + if(posx > maxx) + maxx = posx; + + //count maxy + var endY = posy + thumbHeight; + if(endY > maxy) + maxy = endY; + + //count maxx end + var endX = maxx + thumbWidth; + if(endX > g_temp.innerWidth) + g_temp.innerWidth = endX; + + posx += thumbWidth + g_temp.spaceBetweenCols; + + //next row + counter++; + if(counter >= g_options.grid_num_cols){ + posy += thumbHeight + g_temp.spaceBetweenRows; + posx = baseX; + counter = 0; + } + + //count number thumbs in pane + if(g_temp.numPanes == 1) + g_temp.numThumbsInPane++; + + //prepare next pane + if((posy + thumbHeight) > g_temp.gridHeight){ + posy = 0; + baseX = g_temp.innerWidth + g_temp.spaceBetweenCols; + posx = baseX; + counter = 0; + + //correct max height size (do it once only) + if(g_temp.isMaxHeight == true && g_temp.numPanes == 1){ + g_temp.gridHeight = maxy; + g_objGrid.height(g_temp.gridHeight); + } + + //save next pane props (if exists) + if(i < (numThumbs - 1)){ + g_temp.numPanes++; + + //set next pane position + g_temp.arrPanes.push(baseX); + + } + } + } + + + //set inner strip width and height + g_objInner.width(g_temp.innerWidth); + + //set grid height + if(g_temp.isMaxHeight == true && g_temp.numPanes == 1){ + g_temp.gridHeight = maxy; + g_objGrid.height(maxy); + } + + } + + + /** + * position the thumbs and init panes vertically + */ + function positionThumb_vert(){ + var arrThumbs = g_objInner.children(".ug-thumb-wrapper"); + + var posx = 0; + var posy = 0; + var maxy = 0; + var counter = 0; + var baseX = 0; + var paneStartY = 0; + + g_temp.innerWidth = 0; + g_temp.numPanes = 1; + g_temp.arrPanes = []; + g_temp.numThumbsInPane = 0; + + //set first pane position + g_temp.arrPanes.push(baseX); + + var numThumbs = arrThumbs.length; + + for(i=0;i < numThumbs; i++){ + var objThumb = jQuery(arrThumbs[i]); + g_functions.placeElement(objThumb, posx, posy); + + var thumbWidth = objThumb.outerWidth(); + var thumbHeight = objThumb.outerHeight(); + + posx += thumbWidth + g_temp.spaceBetweenCols; + + var endy = (posy + thumbHeight); + if(endy > maxy) + maxy = endy; + + //next row + counter++; + if(counter >= g_options.grid_num_cols){ + posy += thumbHeight + g_temp.spaceBetweenRows; + posx = baseX; + counter = 0; + } + + //count number thumbs in pane + if(g_temp.numPanes == 1) + g_temp.numThumbsInPane++; + + //prepare next pane + endy = (posy + thumbHeight); + var paneMaxY = paneStartY + g_temp.gridHeight; + + //advance next pane + if(endy > paneMaxY){ + + //correct max height size (do it once only) + if(g_temp.isMaxHeight == true && g_temp.numPanes == 1){ + g_temp.gridHeight = maxy; + g_objGrid.height(g_temp.gridHeight); + paneMaxY = g_temp.gridHeight; + } + + posy = paneMaxY + g_temp.spaceBetweenRows; + paneStartY = posy; + baseX = 0; + posx = baseX; + counter = 0; + + //save next pane props (if exists) + if(i < (numThumbs - 1)){ + g_temp.numPanes++; + + //set next pane position + g_temp.arrPanes.push(posy); + + } + } + + }//for + + //set inner height + g_objInner.height(maxy); + g_temp.innerHeight = maxy; + + //set grid height + if(g_temp.isMaxHeight == true && g_temp.numPanes == 1){ + g_temp.gridHeight = maxy; + g_objGrid.height(maxy); + } + + } + + + /** + * position the thumbs horizontal type + */ + function positionThumb_hortype(){ + + var arrThumbs = g_objInner.children(".ug-thumb-wrapper"); + + var baseX = g_options.grid_padding; + var baseY = g_options.grid_padding; + var posy = baseY; + var posx = baseX; + var maxx = 0, maxy = 0, paneMaxY = 0, gridMaxY = 0; + var rowsCounter = 0; + + g_temp.innerWidth = 0; + g_temp.numPanes = 1; + g_temp.arrPanes = []; + g_temp.numThumbsInPane = 0; + + //set first pane position + g_temp.arrPanes.push(baseX-g_options.grid_padding); + + var numThumbs = arrThumbs.length; + + for(i=0;i < numThumbs; i++){ + var objThumb = jQuery(arrThumbs[i]); + + var thumbWidth = objThumb.outerWidth(); + var thumbHeight = objThumb.outerHeight(); + + //check end of the size, start a new row + if((posx - baseX + thumbWidth) > g_temp.gridWidth){ + rowsCounter++; + posy = 0; + + if(rowsCounter >= g_options.grid_num_rows){ + + //change to a new pane + rowsCounter = 0; + baseX = posx; + posy = baseY; + paneMaxY = 0; + + //change grid width to max width + if(g_temp.numPanes == 1){ + g_temp.gridWidth = maxx+g_options.grid_padding; + g_objGrid.width(g_temp.gridWidth); + + g_temp.gridHeight = gridMaxY + g_options.grid_padding; + g_objGrid.height(g_temp.gridHeight); + + } + + g_temp.numPanes++; + g_temp.arrPanes.push(baseX-g_options.grid_padding); + + }else{ //start new line in existing pane + posx = baseX; + posy = paneMaxY + g_temp.spaceBetweenRows; + } + } + + //place the thumb + g_functions.placeElement(objThumb, posx, posy); + + //count maxx + var endX = posx + thumbWidth; + if(endX > maxx) + maxx = endX; + + //count maxy + var endY = posy + thumbHeight; + + if(endY > paneMaxY) //pane height + paneMaxY = endY; + + if(endY > gridMaxY) //total height + gridMaxY = endY; + + if(endY > maxy) + maxy = endY; + + //count maxx end + var endX = maxx + thumbWidth; + if(endX > g_temp.innerWidth) + g_temp.innerWidth = endX; + + posx += thumbWidth + g_temp.spaceBetweenCols; + + //count number thumbs in pane + if(g_temp.numPanes == 1) + g_temp.numThumbsInPane++; + + + }//end for + + //set inner strip width and height + g_temp.innerWidth = maxx + g_options.grid_padding; + g_temp.innerHeight = gridMaxY + g_options.grid_padding; + + g_objInner.width(g_temp.innerWidth); + g_objInner.height(g_temp.innerHeight); + + + //set grid height + if(g_temp.numPanes == 1){ + g_temp.gridWidth = maxx + g_options.grid_padding; + g_temp.gridHeight = gridMaxY + g_options.grid_padding; + + g_objGrid.width(g_temp.gridWidth); + g_objGrid.height(g_temp.gridHeight); + + } + + + } + + + /** + * position the thumbs and init panes related and width related vars + */ + function positionThumbs(){ + + if(g_temp.isHorizontal == false){ //position vertical type + + if(g_temp.isNavigationVertical) + positionThumb_vert(); + else + positionThumb_hor(); + + }else{ + positionThumb_hortype(); + } + + } + + + /** + * validate thumb index + */ + function validateThumbIndex(thumbIndex){ + + if(thumbIndex < 0 || thumbIndex >= g_temp.numThumbs){ + throw new Error("Thumb not exists: " + thumbIndex); + return(false); + } + + return(true); + } + + + /** + * + * validate that the pane index exists + */ + function validatePaneIndex(paneIndex){ + + if(paneIndex >= g_temp.numPanes || paneIndex < 0){ + throw new Error("Pane " + index + " doesn't exists."); + return(false); + } + + return(true); + } + + /** + * validate inner position + */ + function validateInnerPos(pos){ + + var absPos = Math.abs(pos); + + if(g_temp.isNavigationVertical == false){ + + if(absPos < 0 || absPos >= g_temp.innerWidth){ + throw new Error("wrong inner x position: " + pos); + return(false); + } + + }else{ + + if(absPos < 0 || absPos >= g_temp.innerHeight){ + throw new Error("wrong inner y position: " + pos); + return(false); + } + + } + + return(true); + } + + + + + /** + * + * set inner strip position + */ + function setInnerPos(pos){ + + var objCss = getInnerPosObj(pos); + if(objCss == false) + return(false); + + g_objInner.css(objCss); + } + + + /** + * animate inner to some position + */ + function animateInnerTo(pos){ + + var objCss = getInnerPosObj(pos); + if(objCss == false) + return(false); + + g_objInner.stop(true).animate(objCss ,{ + duration: g_options.grid_transition_duration, + easing: g_options.grid_transition_easing, + queue: false + }); + + } + + /** + * animate back to current pane + */ + function animateToCurrentPane(){ + + var innerPos = -g_temp.arrPanes[g_temp.currentPane]; + animateInnerTo(innerPos); + } + + + + function __________GETTERS_________(){}; + + /** + * get inner object size according the orientation + */ + function getInnerSize(){ + + if(g_temp.isNavigationVertical == true) + return(g_temp.innerHeight); + else + return(g_temp.innerWidth); + } + + + /** + * get pane width or height according the orientation + */ + function getPaneSize(){ + + if(g_temp.isNavigationVertical == true) + return(g_temp.gridHeight); + else + return(g_temp.gridWidth); + } + + + /** + * get object of iner position move + */ + function getInnerPosObj(pos){ + + var obj = {}; + if(g_temp.isNavigationVertical == true) + obj.top = pos + "px"; + else + obj.left = pos + "px"; + + return(obj); + } + + + /** + * get mouse position according the orientation + */ + function getMousePos(event){ + + var mousePos = g_functions.getMousePosition(event); + + if(g_temp.isNavigationVertical == true) + return(mousePos.pageY); + else + return(mousePos.pageX); + + } + + + /** + * get inner position according the orientation + */ + function getInnerPos(){ + + var objSize = g_functions.getElementSize(g_objInner); + + if(g_temp.isNavigationVertical == true) + return(objSize.top); + else + return(objSize.left); + + } + + /** + * get pane by thumb index + */ + function getPaneIndexByThumbIndex(thumbIndex){ + + //validate thumb index + if(validateThumbIndex(thumbIndex) == false) + return(-1); + + var numPane = Math.floor(thumbIndex / g_temp.numThumbsInPane); + + return(numPane); + } + + /** + * get position of some pane + */ + function getPanePosition(index){ + + var pos = g_temp.arrPanes[index]; + return(pos); + } + + + /** + * return if passed some significant movement, for thumb click + */ + function isSignificantPassed(){ + + if(g_temp.numPanes == 1) + return(false); + + var objData = g_functions.getStoredEventData(g_temp.storedEventID); + + var passedTime = objData.diffTime; + + var currentInnerPos = getInnerPos(); + var passedDistanceAbs = Math.abs(currentInnerPos - objData.startInnerPos); + + if(passedDistanceAbs > 30) + return(true); + + if(passedDistanceAbs > 5 && passedTime > 300) + return(true); + + return(false); + } + + + + /** + * check if the movement that was held is valid for pane change + */ + function isMovementValidForChange(){ + + var objData = g_functions.getStoredEventData(g_temp.storedEventID); + + //check position, if more then half, move + var currentInnerPos = getInnerPos(); + diffPos = Math.abs(objData.startInnerPos - currentInnerPos); + + var paneSize = getPaneSize(); + var breakSize = Math.round(paneSize * 3 / 8); + + if(diffPos >= breakSize) + return(true); + + if(objData.diffTime < 300 && diffPos > 25) + return(true); + + return(false); + } + + + /** + * return if passed some significant movement + */ + function isApproveTileClick(){ + + if(g_temp.numPanes == 1) + return(true); + + var isApprove = g_functions.isApproveStoredEventClick(g_temp.storedEventID, g_temp.isNavigationVertical); + + return(isApprove); + } + + + function __________EVENTS_______(){}; + + + /** + * on thumb click event + */ + function onThumbClick(event){ + + //event.preventDefault(); + if(isSignificantPassed() == true) + return(true); + + //run select item operation + var objThumb = jQuery(this); + var objItem = g_thumbs.getItemByThumb(objThumb); + + g_gallery.selectItem(objItem); + } + + + /** + * on touch start + */ + function onTouchStart(event){ + + if(g_temp.numPanes == 1) + return(true); + + if(g_temp.touchActive == true) + return(true); + + if(g_temp.isTilesMode == false) + event.preventDefault(); + + g_temp.touchActive = true; + + var addData = { + startInnerPos: getInnerPos() + }; + + g_functions.storeEventData(event, g_temp.storedEventID, addData); + + } + + + /** + * handle scroll top, return if scroll mode or not + */ + function handleScrollTop(){ + + if(g_options.grid_vertical_scroll_ondrag == false) + return(false); + + if(g_temp.isNavigationVertical == true) + return(false); + + var scrollDir = g_functions.handleScrollTop(g_temp.storedEventID); + + if(scrollDir === "vert") + return(true); + + return(false); + } + + + /** + * on touch move + */ + function onTouchMove(event){ + + if(g_temp.touchActive == false) + return(true); + + event.preventDefault(); + + g_functions.updateStoredEventData(event, g_temp.storedEventID); + + var objData = g_functions.getStoredEventData(g_temp.storedEventID, g_temp.isNavigationVertical); + + //check if was vertical scroll + var isScroll = handleScrollTop(); + if(isScroll) + return(true); + + + var diff = objData.diffMousePos; + var innerPos = objData.startInnerPos + diff; + var direction = (diff > 0) ? "prev":"next"; + var lastPaneSize = g_temp.arrPanes[g_temp.numPanes-1]; + + //slow down when off limits + if(g_options.grid_carousel == false && innerPos > 0 && direction == "prev"){ + innerPos = innerPos / 3; + } + + //debugLine({lastSize:lastPaneSize,innerPos: innerPos}); + + if(g_options.grid_carousel == false && innerPos < -lastPaneSize && direction == "next"){ + innerPos = objData.startInnerPos + diff / 3; + } + + setInnerPos(innerPos); + + } + + + /** + * on touch end + * change panes or return to current pane + */ + function onTouchEnd(event){ + + if(g_temp.touchActive == false) + return(true); + + g_functions.updateStoredEventData(event, g_temp.storedEventID); + var objData = g_functions.getStoredEventData(g_temp.storedEventID, g_temp.isNavigationVertical); + + //event.preventDefault(); + g_temp.touchActive = false; + + if(isMovementValidForChange() == false){ + animateToCurrentPane(); + return(true); + } + + //move pane or return back + var innerPos = getInnerPos(); + var diff = innerPos - objData.startInnerPos; + var direction = (diff > 0) ? "prev":"next"; + + if(direction == "next"){ + + if(g_options.grid_carousel == false && t.isLastPane()) + animateToCurrentPane(); + else + t.nextPane(); + } + else{ + + if(g_options.grid_carousel == false && t.isFirstPane()){ + animateToCurrentPane(); + } + else + t.prevPane(); + } + + } + + + /** + * on item change + */ + function onItemChange(){ + + var objItem = g_gallery.getSelectedItem(); + g_thumbs.setThumbSelected(objItem.objThumbWrapper); + + scrollToThumb(objItem.index); + + } + + + /** + * init panel events + */ + function initEvents(){ + + if(g_temp.isTilesMode == false){ + + g_thumbs.initEvents(); + var objThumbs = g_objGrid.find(".ug-thumb-wrapper"); + objThumbs.on("click touchend",onThumbClick); + + g_objGallery.on(g_gallery.events.ITEM_CHANGE, onItemChange); + + }else{ + g_tilesDesign.initEvents(); + } + + //touch drag events + + //slider mouse down - drag start + g_objGrid.bind("mousedown touchstart",onTouchStart); + + //on body move + jQuery("body").bind("mousemove touchmove",onTouchMove); + + //on body mouse up - drag end + jQuery(window).add("body").bind("mouseup touchend", onTouchEnd); + + } + + + /** + * destroy the events + */ + this.destroy = function(){ + + if(g_temp.isTilesMode == false){ + + var objThumbs = g_objGrid.find(".ug-thumb-wrapper"); + objThumbs.off("click"); + objThumbs.off("touchend"); + g_objGallery.on(g_gallery.events.ITEM_CHANGE); + g_thumbs.destroy(); + + }else{ + g_tilesDesign.destroy(); + } + + g_objGrid.unbind("mousedown"); + g_objGrid.unbind("touchstart"); + jQuery("body").unbind("mousemove"); + jQuery("body").unbind("touchmove"); + + jQuery(window).add("body").unbind("touchend"); + jQuery(window).add("body").unbind("mouseup"); + + g_objThis.off(t.events.PANE_CHANGE); + + } + + + + this.__________EXTERNAL_GENERAL_________ = function(){}; + + /** + * set the thumb unselected state + */ + this.setThumbUnselected = function(objThumbWrapper){ + + g_thumbs.setThumbUnselected(objThumbWrapper); + + } + + /** + * check if thmb item visible, means inside the visible part of the inner strip + */ + this.isItemThumbVisible = function(objItem){ + var itemIndex = objItem.index; + var paneIndex = getPaneIndexByThumbIndex(itemIndex); + + if(paneIndex == g_temp.currentPane) + return(true); + + return(false); + } + + + this.__________EXTERNAL_API_________ = function(){}; + + /** + * get estimation of number of panes by the height of the grid. + */ + this.getNumPanesEstimationByHeight = function(gridHeight){ + + if(g_temp.isTilesMode == true){ + + var thumbHeight = g_options.tile_height; + + }else{ + var thumbsOptions = g_thumbs.getOptions(); + var thumbHeight = thumbsOptions.thumb_height; + } + + var numThumbs = g_thumbs.getNumThumbs(); + var numRows = Math.ceil(numThumbs / g_options.grid_num_cols); + + var totalHeight = numRows * thumbHeight + (numRows-1) * g_temp.spaceBetweenRows; + + var numPanes = Math.ceil(totalHeight / gridHeight); + + return(numPanes); + } + + /** + * get estimation of number of panes by the width of the grid. + */ + this.getNumPanesEstimationByWidth = function(gridWidth){ + + if(g_temp.isTilesMode){ + var thumbWidth = g_options.tile_width; + }else{ + var thumbsOptions = g_thumbs.getOptions(); + var thumbWidth = thumbsOptions.thumb_width; + } + + var numThumbs = g_thumbs.getNumThumbs(); + var numCols = Math.ceil(numThumbs / g_options.grid_num_rows); + + var totalWidth = numCols * thumbWidth + (numCols-1) * g_temp.spaceBetweenCols; + + var numPanes = Math.ceil(totalWidth / gridWidth); + + return(numPanes); + } + + + /** + * get height estimation by width, works only in tiles mode + */ + this.getHeightEstimationByWidth = function(width){ + + if(g_temp.isTilesMode == false) + throw new Error("This function works only with tiles mode"); + + var numThumbs = g_thumbs.getNumThumbs(); + var numCols = g_functions.getNumItemsInSpace(width, g_options.tile_width, g_temp.spaceBetweenCols); + var numRows = Math.ceil(numThumbs / numCols); + + if(numRows > g_options.grid_num_rows) + numRows = g_options.grid_num_rows; + + var gridHeight = g_functions.getSpaceByNumItems(numRows, g_options.tile_height, g_temp.spaceBetweenRows); + gridHeight += g_options.grid_padding * 2; + + return(gridHeight); + } + + /** + * get the grid element + */ + this.getElement = function(){ + return(g_objGrid); + } + + /** + * get element size and position + */ + this.getSize = function(){ + + var objSize = g_functions.getElementSize(g_objGrid); + return(objSize); + + } + + /** + * get number of panes + */ + this.getNumPanes = function(){ + + return(g_temp.numPanes); + } + + /** + * get if the current pane is first + */ + this.isFirstPane = function(){ + + if(g_temp.currentPane == 0) + return(true); + + return(false); + } + + + /** + * get if the current pane is last + */ + this.isLastPane = function(){ + + if(g_temp.currentPane == (g_temp.numPanes -1) ) + return(true); + + return(false); + } + + + /** + * get pane number, and num panes + */ + this.getPaneInfo = function(){ + + var obj = { + pane: g_temp.currentPane, + total: g_temp.numPanes + }; + + return(obj); + } + + + /** + * get current pane + */ + this.getPane = function(){ + + return(g_temp.currentPane); + } + + + /** + * set grid width (horizontal type) + */ + this.setWidth = function(gridWidth){ + g_temp.gridWidth = gridWidth; + g_temp.isHorizontal = true; + } + + /** + * set max width, the width will be corrected by the number of items + * set vertical type + */ + this.setMaxWidth = function(maxWidth){ + g_temp.gridWidth = maxWidth; + g_temp.isMaxWidth = true; + g_temp.isHorizontal = true; + } + + + /** + * set grid height (vertical type) + */ + this.setHeight = function(gridHeight){ + g_temp.gridHeight = gridHeight; + g_temp.isHorizontal = false; + + } + + /** + * set max height, the height will be corrected by the number of items + * set the vertical type + */ + this.setMaxHeight = function(maxHeight){ + g_temp.gridHeight = maxHeight; + g_temp.isMaxHeight = true; + g_temp.isHorizontal = false; + } + + + /** + * goto some pane + * force skip current pane checks + */ + this.gotoPane = function(index, fromWhere){ + + if(validatePaneIndex(index) == false) + return(false); + + if(index == g_temp.currentPane) + return(false); + + var innerPos = -g_temp.arrPanes[index]; + + g_temp.currentPane = index; + animateInnerTo(innerPos); + + //trigger pane change event + g_objThis.trigger(t.events.PANE_CHANGE, index); + } + + + /** + * foreward to the next pane + */ + this.nextPane = function(){ + + var nextPaneIndex = g_temp.currentPane+1; + + if(nextPaneIndex >= g_temp.numPanes){ + + if(g_options.grid_carousel == false) + return(true); + + nextPaneIndex = 0; + } + + t.gotoPane(nextPaneIndex, "next"); + } + + + /** + * foreward to the next pane + */ + this.prevPane = function(){ + + var prevPaneIndex = g_temp.currentPane-1; + if(prevPaneIndex < 0){ + prevPaneIndex = g_temp.numPanes-1; + + if(g_options.grid_carousel == false) + return(false); + } + + t.gotoPane(prevPaneIndex, "prev"); + } + + + /** + * set next pane button + */ + this.attachNextPaneButton = function(objButton){ + + g_functions.setButtonOnClick(objButton, t.nextPane); + + if(g_options.grid_carousel == true) + return(true); + + if(t.isLastPane()) + objButton.addClass("ug-button-disabled"); + + //set disabled button class if first pane + g_objThis.on(t.events.PANE_CHANGE, function(){ + + if(t.isLastPane()) + objButton.addClass("ug-button-disabled"); + else + objButton.removeClass("ug-button-disabled"); + + }); + + } + + + /** + * set prev pane button + */ + this.attachPrevPaneButton = function(objButton){ + + g_functions.setButtonOnClick(objButton, t.prevPane); + + if(g_options.grid_carousel == true) + return(true); + + if(t.isFirstPane()) + objButton.addClass("ug-button-disabled"); + + //set disabled button class if first pane + g_objThis.on(t.events.PANE_CHANGE, function(){ + + if(t.isFirstPane()) + objButton.addClass("ug-button-disabled"); + else + objButton.removeClass("ug-button-disabled"); + + }); + + } + + + /** + * attach bullets object + */ + this.attachBullets = function(objBullets){ + + objBullets.setActive(g_temp.currentPane); + + jQuery(objBullets).on(objBullets.events.BULLET_CLICK, function(data, numBullet){ + t.gotoPane(numBullet, "theme"); + objBullets.setActive(numBullet); + }); + + jQuery(t).on(t.events.PANE_CHANGE, function(data, numPane){ + objBullets.setActive(numPane); + }); + + } + + + /** + * get tile design object + */ + this.getObjTileDesign = function(){ + return g_tilesDesign; + } + + + /** + * init function + */ + this.init = function(gallery, customOptions, isTilesMode){ + + init(gallery, customOptions, isTilesMode); + } + + + + /** + * set html and properties + */ + this.run = function(){ + run(); + } + + + /** + * set html + */ + this.setHtml = function(parentContainer){ + + setHtml(parentContainer); + } + +} + + + +/** + * tiles class + */ +function UGTiles(){ + + var t = this, g_objThis = jQuery(this); + var g_gallery = new UniteGalleryMain(), g_objGallery, g_objWrapper, g_objParent; + var g_functions = new UGFunctions(), g_arrItems, g_objTileDesign = new UGTileDesign(); + var g_thumbs = new UGThumbsGeneral(), g_vars = {}; + var g_arrNestedGridRow, g_arrNestedItems; + + + var g_options = { + tiles_type: "columns", //columns / justified - tiles layout type + tiles_col_width: 250, //column width - exact or base according the settings + tiles_align:"center", //align of the tiles in the space + tiles_exact_width: false, //exact width of column - disables the min and max columns + tiles_space_between_cols: 3, //space between images + tiles_space_between_cols_mobile: 3, //space between cols for mobile type + tiles_include_padding: true, //include padding at the sides of the columns, equal to current space between cols + tiles_min_columns: 2, //min columns + tiles_max_columns: 0, //max columns (0 for unlimited) + tiles_keep_order: false, //keep order - slower algorytm + tiles_set_initial_height: true, //set some estimated height before images show + + tiles_justified_row_height: 150, //base row height of the justified type + tiles_justified_space_between: 3, //space between the tiles justified type + + tiles_nested_optimal_tile_width: 250, // tiles optimal width + tiles_nested_col_width: null, // nested tiles column width + tiles_nested_debug: false, + + tiles_enable_transition: true //enable transition when screen width change + }; + + this.events = { + THUMB_SIZE_CHANGE: "thumb_size_change", + TILES_FIRST_PLACED: "tiles_first_placed", //only in case of justified + ALL_TILES_LOADED: "all_tiles_loaded" + }; + + var g_temp = { + isFixedMode: false, //is tiles is custom sized, not related to the images that inside + isFirstTimeRun:true, //if run once + handle:null, //interval handle + isTransActive: false, //is transition active + isTransInited: false, //if the transition function is set + isAllLoaded: false + }; + + var g_nestedWork = { + colWidth: null, + nestedOptimalCols: 5, + gridY: 0, + maxColumns: 0, //maxColumns + columnsValueToEnableHeightResize: 3, //columns Value To Enable Height Resize + resizeLeftRightToColumn: true, + currentItem: 0, + currentGap: null, + optimalTileWidth: null, + maxGridY:0 + } + + + function __________GENERAL_________(){}; + + + /** + * init the gallery + */ + function init(gallery, customOptions){ + + g_objects = gallery.getObjects(); + g_gallery = gallery; + g_objGallery = jQuery(gallery); + g_objWrapper = g_objects.g_objWrapper; + g_arrItems = g_objects.g_arrItems; + + g_options = jQuery.extend(g_options, customOptions); + + modifyOptions(); + + g_objTileDesign.init(gallery, g_options); + + g_thumbs = g_objTileDesign.getObjThumbs(); + + } + + + /** + * modify options + */ + function modifyOptions(){ + + if(g_options.tiles_min_columns < 1) + g_options.tiles_min_columns = 1; + + //protection of max columns, can't be more then min columns + if(g_options.tiles_max_columns != 0 && g_options.tiles_max_columns < g_options.tiles_min_columns){ + g_options.tiles_max_columns = g_options.tiles_min_columns; + } + + } + + + /** + * set the grid panel html + */ + function setHtml(objParent){ + + if(!objParent) + var objParent = g_objWrapper; + + g_objParent = objParent; + + var tilesType = g_options.tiles_type; + objParent.addClass("ug-tiletype-"+tilesType); + + g_objTileDesign.setHtml(objParent); + + objParent.children(".ug-thumb-wrapper").hide(); + } + + + /** + * set class that enables transition + */ + function setTransition(){ + + //set the tiles in resting mode, to activate their own transitions + g_objParent.addClass("ug-tiles-rest-mode"); + + g_temp.isTransInited = true; + + //add css tansition + if(g_options.tiles_enable_transition == true){ + g_objParent.addClass("ug-tiles-transit"); + + //add image overlay transition + var optionsTile = g_objTileDesign.getOptions(); + + if(optionsTile.tile_enable_image_effect == true && optionsTile.tile_image_effect_reverse == false) + g_objParent.addClass("ug-tiles-transit-overlays"); + + g_temp.isTransActive = true; + } + + } + + + /** + * get parent width + */ + function getParentWidth(){ + return g_functions.getElementSize(g_objParent).width; + } + + + /** + * do some actions before transition + */ + function doBeforeTransition(){ + + if(g_temp.isTransInited == false) + return(false); + + g_objParent.addClass("ug-tiles-transition-active"); + g_objParent.removeClass("ug-tiles-rest-mode"); + + //prepare for transition + if(g_temp.isTransActive == false) + return(false); + + g_objTileDesign.disableEvents(); + } + + + /** + * set after transition classes + */ + function doAfterTransition_setClasses(){ + + if(g_temp.isTransInited == false) + return(false); + + g_objParent.removeClass("ug-tiles-transition-active"); + g_objParent.addClass("ug-tiles-rest-mode"); + } + + + /** + * do some actions after transition + */ + function doAfterTransition(){ + + + if(g_temp.isTransActive == true){ + + //trigger size change after transition + setTimeout(function(){ + + g_objTileDesign.enableEvents(); + g_objTileDesign.triggerSizeChangeEventAllTiles(); + + doAfterTransition_setClasses(); + + + }, 800); + + //control size change + if(g_temp.handle) + clearTimeout(g_temp.handle); + + g_temp.handle = setTimeout(function(){ + + doAfterTransition_setClasses(); + + g_objTileDesign.triggerSizeChangeEventAllTiles(); + g_temp.handle = null; + + }, 2000); + + + }else{ + + g_objTileDesign.triggerSizeChangeEventAllTiles(); + + doAfterTransition_setClasses(); + + } + + } + + + function __________COLUMN_TYPE_RELATED_________(){}; + + /** + * count width by number of columns + */ + function fillTilesVars_countWidthByCols(){ + + g_vars.colWidth = (g_vars.availWidth - g_vars.colGap * (g_vars.numCols-1)) / g_vars.numCols; + g_vars.colWidth = Math.floor(g_vars.colWidth); + + g_vars.totalWidth = g_functions.getSpaceByNumItems(g_vars.numCols, g_vars.colWidth, g_vars.colGap); + + } + + + + /** + * fill common tiles vars + */ + function fillTilesVars(){ + + g_vars.colWidth = g_options.tiles_col_width; + g_vars.minCols = g_options.tiles_min_columns; + g_vars.maxCols = g_options.tiles_max_columns; + + if(g_gallery.isMobileMode() == false){ + g_vars.colGap = g_options.tiles_space_between_cols; + } else { + g_vars.colGap = g_options.tiles_space_between_cols_mobile; + } + + //set gallery width + g_vars.galleryWidth = getParentWidth(); + + g_vars.availWidth = g_vars.galleryWidth; + + if(g_options.tiles_include_padding == true) + g_vars.availWidth = g_vars.galleryWidth - g_vars.colGap*2; + + //set the column number by exact width + if(g_options.tiles_exact_width == true){ + + g_vars.numCols = g_functions.getNumItemsInSpace(g_vars.availWidth, g_vars.colWidth, g_vars.colGap); + + if(g_vars.maxCols > 0 && g_vars.numCols > g_vars.maxCols) + g_vars.numCols = g_vars.maxCols; + + //if less then min cols count width by cols + if(g_vars.numCols < g_vars.minCols){ + g_vars.numCols = g_vars.minCols; + + fillTilesVars_countWidthByCols(); + + }else{ + g_vars.totalWidth = g_vars.numCols * (g_vars.colWidth + g_vars.colGap) - g_vars.colGap; + } + + } else { + + //set dynamic column number + + var numCols = g_functions.getNumItemsInSpaceRound(g_vars.availWidth, g_vars.colWidth, g_vars.colGap); + + if(numCols < g_vars.minCols) + numCols = g_vars.minCols; + else + if(g_vars.maxCols != 0 && numCols > g_vars.maxCols) + numCols = g_vars.maxCols; + + g_vars.numCols = numCols; + + fillTilesVars_countWidthByCols(); + + } + + switch(g_options.tiles_align){ + case "center": + default: + //add x to center point + g_vars.addX = Math.round( (g_vars.galleryWidth - g_vars.totalWidth) / 2 ); + break; + case "left": + g_vars.addX = 0; + break; + case "right": + g_vars.addX = g_vars.galleryWidth - g_vars.totalWidth; + break; + } + + g_vars.maxColHeight = 0; + + //get posx array (constact to all columns) + g_vars.arrPosx = []; + for(col = 0; col < g_vars.numCols; col++){ + var colX = g_functions.getColX(col, g_vars.colWidth, g_vars.colGap); + g_vars.arrPosx[col] = colX + g_vars.addX; + } + + //empty heights array + g_vars.colHeights = [0]; + + } + + + + + + /** + * get column with minimal height + */ + function getTilesMinCol(){ + var numCol = 0; + + var minHeight = 999999999; + + for(col = 0; col < g_vars.numCols; col++){ + + if(g_vars.colHeights[col] == undefined || g_vars.colHeights[col] == 0) + return col; + + if(g_vars.colHeights[col] < minHeight){ + numCol = col; + minHeight = g_vars.colHeights[col]; + } + + } + + return(numCol); + } + + + /** + * place tile as it loads + */ + function placeTile(objTile, toShow, setGalleryHeight, numCol){ + + if(numCol === null || typeof numCol == "undefined") + var numCol = getTilesMinCol(); + + //set posy + var posy = 0; + if(g_vars.colHeights[numCol] !== undefined) + posy = g_vars.colHeights[numCol]; + + var itemHeight = g_objTileDesign.getTileHeightByWidth(g_vars.colWidth, objTile, "placeTile"); + + if(itemHeight === null){ //for custom html tile + if(g_options.tiles_enable_transition == true) + throw new Error("Can't know tile height, please turn off transition"); + + var itemSize = g_functions.getElementSize(objTile); + itemHeight = itemSize.height; + } + + var posx = g_vars.arrPosx[numCol]; + + g_functions.placeElement(objTile, posx, posy); + + var realHeight = posy + itemHeight; + + g_vars.colHeights[numCol] = realHeight + g_vars.colGap; + + //set max height + if(g_vars.maxColHeight < realHeight) + g_vars.maxColHeight = realHeight; + + if(toShow == true) + objTile.show().fadeTo(0,1); + + if(setGalleryHeight == true){ + g_objParent.height(g_vars.maxColHeight); + } + + } + + + /** + * place the tiles + */ + function placeTiles(toShow){ + + if(!toShow) + toShow = false; + + fillTilesVars(); + + var objThumbs = g_thumbs.getThumbs(); + + //do some operation before the transition + doBeforeTransition(); + + //resize all thumbs + g_objTileDesign.resizeAllTiles(g_vars.colWidth, g_objTileDesign.resizemode.VISIBLE_ELEMENTS); + + //place elements + for(var index = 0; index < objThumbs.length; index++){ + var objTile = jQuery(objThumbs[index]); + var col = undefined; + if(g_options.tiles_keep_order == true) + col = g_functions.getColByIndex(g_vars.numCols, index); + + placeTile(objTile, toShow, false, col); + } + + //bring back the state after transition + doAfterTransition(); + + //set gallery height, according the transition + var galleryHeight = g_objParent.height(); + + if(g_temp.isTransActive == true && galleryHeight > g_vars.maxColHeight) + setTimeout(function(){ + g_objParent.height(g_vars.maxColHeight); + },700); + else + g_objParent.height(g_vars.maxColHeight); + } + + + /** + * check if alowed to place ordered tile + */ + function isOrderedTilePlaceAlowed(objTile){ + + var index = objTile.index(); + + //don't allow double put items + var currentItem = g_gallery.getItem(index); + if(currentItem.ordered_placed === true) + return(false); + + + var prevIndex = g_functions.getPrevRowSameColIndex(index, g_vars.numCols); + + //put first item in the column + if(prevIndex < 0) + return(true); + + //check if previous tile in column is placed + var objPrevItem = g_gallery.getItem(prevIndex); + if(objPrevItem.ordered_placed === true) + return(true); + + return(false); + } + + + /** + * place ordered tile + */ + function placeOrderedTile(objTile, isForce){ + + if(isForce !== true){ + + var isAlowed = isOrderedTilePlaceAlowed(objTile); + + if(isAlowed == false) + return(false); + } + + var index = objTile.index(); + + var col = g_functions.getColByIndex(g_vars.numCols, index); + + var objItem = g_gallery.getItem(index); + + g_objTileDesign.resizeTile(objTile, g_vars.colWidth); + + placeTile(objTile, true, true, col); + + objItem.ordered_placed = true; + + //check by recursion and place next items in column + var numItems = g_gallery.getNumItems(); + var nextIndex = g_functions.getNextRowSameColIndex(index, g_vars.numCols); + if(nextIndex >= numItems) + return(false); + + var nextTile = g_thumbs.getThumbByIndex(nextIndex); + var nextItem = g_gallery.getItem(nextIndex); + + var isLoaded = g_thumbs.isThumbLoaded(nextTile); + + if(g_thumbs.isThumbLoaded(nextTile) && !nextItem.ordered_placed) + placeOrderedTile(nextTile, true); + } + + + /** + * on single image load + */ + function onSingleImageLoad(objImage, isError){ + + if(isError == true) + return(false); + + objImage = jQuery(objImage); + var objTile = jQuery(objImage).parent(); + + g_thumbs.triggerImageLoadedEvent(objTile, objImage); + + if(g_options.tiles_keep_order == true){ + + placeOrderedTile(objTile); + + }else{ + + g_objTileDesign.resizeTile(objTile, g_vars.colWidth); + placeTile(objTile, true, true); + } + + } + + + + /** + * run columns type + */ + function runColumnsType(){ + + var objThumbs = g_thumbs.getThumbs(); + + g_temp.isAllLoaded = false; + + fillTilesVars(); + + var diffWidth = Math.abs(g_vars.galleryWidth - g_vars.totalWidth); + + //set initial height of the parent by estimation + if(g_options.tiles_set_initial_height == true && g_functions.isScrollbarExists() == false && diffWidth < 25){ + + var numThumbs = objThumbs.length; + var numRows = Math.ceil(objThumbs.length / g_vars.numCols); + var estimateHeight = numRows * g_options.tiles_col_width * 0.75; + + g_objParent.height(estimateHeight); + fillTilesVars(); + } + + + objThumbs.fadeTo(0,0); + var objImages = jQuery(g_objParent).find("img.ug-thumb-image"); + + + if(g_temp.isFixedMode == true){ //fixed mode type - just place tiles before images loaded + + g_objThis.trigger(t.events.TILES_FIRST_PLACED); + + placeTiles(true); + + g_functions.checkImagesLoaded(objImages, function(){ + setTransition(); + g_objThis.trigger(t.events.ALL_TILES_LOADED); + }); + + }else{ //dynamic size type + + var initNumCols = g_vars.numCols; + var initWidth = g_vars.galleryWidth; + var isFirstPlace = false; + + //on place the tile as it loads. After all tiles loaded,check position again. + g_functions.checkImagesLoaded(objImages, function(){ + + fillTilesVars(); + + if(initNumCols != g_vars.numCols || initWidth != g_vars.galleryWidth){ + placeTiles(false); + } + + setTransition(); + + g_objThis.trigger(t.events.ALL_TILES_LOADED); + + } ,function(objImage, isError){ + + if(isFirstPlace == false) + g_objThis.trigger(t.events.TILES_FIRST_PLACED); + + isFirstPlace = true; + + onSingleImageLoad(objImage, isError); + + }); + + }//end dynamic mode type + + + } + + + function __________JUSTIFIED_TYPE_RELATED_________(){}; + + /** + * ------------ JUSTIFIED TYPE RELATED FUNCTIONS ---------------- + */ + + function getJustifiedData(){ + + var galleryWidth = getParentWidth(); + + var objTiles = g_thumbs.getThumbs(); + var rowHeightOpt = g_options.tiles_justified_row_height; + var arrWidths = []; + var totalWidth = 0; + var gap = g_options.tiles_justified_space_between; + var numTiles = objTiles.length; + + //get arr widths and total width + jQuery.each(objTiles, function(index, objTile){ + objTile = jQuery(objTile); + + var objItem = g_thumbs.getItemByThumb(objTile); + + var tileWidth = objItem.thumbWidth; + var tileHeight = objItem.thumbHeight; + + if (tileHeight !== rowHeightOpt) + tileWidth = Math.floor(objItem.thumbRatioByWidth * rowHeightOpt); + + arrWidths[index] = tileWidth; + + totalWidth += tileWidth; + }); + + + var numRows = Math.ceil(totalWidth / galleryWidth); + + if(numRows > numTiles) + numRows = numTiles; + + var finalRowWidth = totalWidth / numRows; + + //fill rows array, break tiles to rows + var arrRows = [], eachRowWidth = 0; + var rowsWidths = [], rowsTiles = [], row = []; + var progressWidth = 0, numRow = 0; + + jQuery.each(objTiles, function(index, objTile){ + var tileWidth = arrWidths[index]; + + if( (progressWidth + tileWidth / 2) > (numRow+1) * finalRowWidth){ + + rowsWidths[arrRows.length] = eachRowWidth; + arrRows.push(row); + row = []; + eachRowWidth = 0; + numRow++; + } + + progressWidth += tileWidth; + eachRowWidth += tileWidth; + + row.push(objTile); + }); + + rowsWidths[arrRows.length] = eachRowWidth; + arrRows.push(row); + + + //set heights and position images: + var arrRowWidths = []; + var arrRowHeights = []; + var totalHeight = 0; + + jQuery.each(arrRows, function(index, row){ + + var numTiles = row.length; + var rowWidth = rowsWidths[index]; + + var gapWidth = (row.length-1) * gap; + + var ratio = (galleryWidth - gapWidth) / rowWidth; + var rowHeight = Math.round(rowHeightOpt * ratio); + + //count total height + totalHeight += rowHeight; + if(index > 0) + totalHeight += gap; + + arrRowHeights.push(rowHeight); + + //ratio between 2 heights for fixing image width: + var ratioHeights = rowHeight / rowHeightOpt; + + //set tiles sizes: + var arrRowTileWidths = []; + var actualRowWidth = gapWidth; + + jQuery.each(row, function(indexInRow, tile){ + var objTile = jQuery(tile); + var tileIndex = objTile.index(); + var tileWidth = arrWidths[tileIndex]; + var newWidth = Math.round(tileWidth * ratioHeights); + + arrRowTileWidths[indexInRow] = newWidth; + actualRowWidth += newWidth; + }); + + //fix images widths by adding or reducing 1 pixel + var diff = actualRowWidth - galleryWidth; + + var newTotal = 0; + jQuery.each(arrRowTileWidths, function(indexInRow, width){ + + if(diff == 0) + return(false); + + if(diff < 0){ + arrRowTileWidths[indexInRow] = width + 1; + diff++; + }else{ + arrRowTileWidths[indexInRow] = width - 1; + diff--; + } + + //if at last item diff stays, add all diff + if(indexInRow == (arrRowTileWidths.length-1) && diff != 0) + arrRowTileWidths[indexInRow] -= diff; + }); + + arrRowWidths[index] = arrRowTileWidths; + }); + + + var objData = { + arrRows: arrRows, + arrRowWidths: arrRowWidths, + arrRowHeights: arrRowHeights, + gap: gap, + totalHeight: totalHeight + }; + + return(objData); + } + + + /** + * put justified images + */ + function placeJustified(toShow){ + + if(!toShow) + var toShow = false; + + var parentWidth = getParentWidth(); + + var objData = getJustifiedData(); + + //if the width changed after height change (because of scrollbar), recalculate + g_objParent.height(objData.totalHeight); + + var parentWidthAfter = getParentWidth(); + if(parentWidthAfter != parentWidth) + objData = getJustifiedData(); + + doBeforeTransition(); + + var posy = 0; + var totalWidth = 0; //just count total widht for check / print + jQuery.each(objData.arrRows, function(index, row){ + + var arrRowTileWidths = objData.arrRowWidths[index]; + var rowHeight = objData.arrRowHeights[index]; + + //resize and place tiles + var posx = 0; + jQuery.each(row, function(indexInRow, tile){ + + var objTile = jQuery(tile); + var tileHeight = rowHeight; + var tileWidth = arrRowTileWidths[indexInRow]; + + g_objTileDesign.resizeTile(objTile, tileWidth, tileHeight, g_objTileDesign.resizemode.VISIBLE_ELEMENTS); + g_functions.placeElement(objTile, posx, posy); + + posx += tileWidth; + + if(posx > totalWidth) + totalWidth = posx; + + posx += objData.gap; + + if(toShow == true) + jQuery(tile).show(); + + }); + + posy += (rowHeight + objData.gap); + + }); + + doAfterTransition(); + + } + + + + /** + * run justified type gallery + */ + function runJustifiedType(){ + + var objImages = jQuery(g_objWrapper).find("img.ug-thumb-image"); + var objTiles = g_thumbs.getThumbs(); + + g_temp.isAllLoaded = false; + + objTiles.fadeTo(0,0); + + g_functions.checkImagesLoaded(objImages, function(){ + + setTimeout(function(){ + placeJustified(true); + objTiles.fadeTo(0,1); + g_objThis.trigger(t.events.TILES_FIRST_PLACED); + setTransition(); + + g_objThis.trigger(t.events.ALL_TILES_LOADED); + + }); + + }, function(objImage, isError){ + + objImage = jQuery(objImage); + var objTile = jQuery(objImage).parent(); + g_thumbs.triggerImageLoadedEvent(objTile, objImage); + + }); + + } + + + + + function __________NESTED_TYPE_RELATED_________() { }; + + + /** + * ------------ NESTED TYPE RELATED FUNCTIONS ---------------- + */ + function runNestedType() { + + var objImages = jQuery(g_objWrapper).find("img.ug-thumb-image"); + var objTiles = g_thumbs.getThumbs(); + + g_temp.isAllLoaded = false; + + objTiles.fadeTo(0, 0); + + g_functions.checkImagesLoaded(objImages, function () { + + if(g_gallery.isMobileMode() == true){ + placeTiles(true); + } + else + placeNestedImages(true); + + g_objThis.trigger(t.events.TILES_FIRST_PLACED); + setTransition(); + + g_objThis.trigger(t.events.ALL_TILES_LOADED); + + }, function (objImage, isError) { + + objImage = jQuery(objImage); + var objTile = jQuery(objImage).parent(); + g_thumbs.triggerImageLoadedEvent(objTile, objImage); + + }); + + } + + + /** + * fill nested vars + */ + function fillNestedVars(){ + + var galleryWidth = getParentWidth(); + g_nestedWork.galleryWidth = galleryWidth; + + g_arrNestedGridRow = {}; + g_nestedWork.colWidth = g_options.tiles_nested_col_width; + g_nestedWork.optimalTileWidth = g_options.tiles_nested_optimal_tile_width; + + g_nestedWork.currentGap = g_options.tiles_space_between_cols; + + if(g_gallery.isMobileMode() == true) + g_nestedWork.currentGap = g_options.tiles_space_between_cols_mobile; + + if(g_nestedWork.colWidth == null){ + g_nestedWork.colWidth = Math.floor(g_nestedWork.optimalTileWidth/g_nestedWork.nestedOptimalCols); + } else if (g_nestedWork.optimalTileWidth > g_nestedWork.colWidth) { + g_nestedWork.nestedOptimalCols = Math.ceil(g_nestedWork.optimalTileWidth / g_nestedWork.colWidth); + } else { + g_nestedWork.nestedOptimalCols = 1; + } + + g_nestedWork.maxColumns = g_functions.getNumItemsInSpace(galleryWidth, g_nestedWork.colWidth, g_nestedWork.currentGap); + + //fix col width - justify tiles + g_nestedWork.colWidth = g_functions.getItemSizeInSpace(galleryWidth, g_nestedWork.maxColumns, g_nestedWork.currentGap); + + g_nestedWork.gridY = 0; + g_arrNestedItems = [] + + //trace(g_nestedWork); + + var objTiles = g_thumbs.getThumbs(); + objTiles.each(function(){ + var objTile = jQuery(this); + var sizes = setNestedSize(objTile); + g_arrNestedItems.push(sizes); + }); + + if (g_nestedWork.optimalTileWidth > g_nestedWork.colWidth) { + g_nestedWork.nestedOptimalCols = Math.ceil(g_nestedWork.optimalTileWidth / g_nestedWork.colWidth); + } else { + g_nestedWork.nestedOptimalCols = 1; + } + + g_nestedWork.totalWidth = g_nestedWork.maxColumns*(g_nestedWork.colWidth+g_nestedWork.currentGap)-g_nestedWork.currentGap; + + switch(g_options.tiles_align){ + case "center": + default: + //add x to center point + g_nestedWork.addX = Math.round( (g_nestedWork.galleryWidth - g_nestedWork.totalWidth) / 2 ); + break; + case "left": + g_nestedWork.addX = 0; + break; + case "right": + g_nestedWork.addX = g_nestedWork.galleryWidth - g_nestedWork.totalWidth; + break; + } + + + g_nestedWork.maxGridY = 0; + } + + + /** + * place Nested type images + */ + function placeNestedImages(toShow){ + + var parentWidth = getParentWidth(); + + fillNestedVars(); + placeNestedImagesCycle(); + + var totalHeight = g_nestedWork.maxGridY * (g_nestedWork.colWidth + g_nestedWork.currentGap) - g_nestedWork.currentGap; + + //if the width changed after height change (because of scrollbar), recalculate + g_objParent.height(totalHeight); + + var parentWidthAfter = getParentWidth(); + + if(parentWidthAfter != parentWidth){ + fillNestedVars(); + placeNestedImagesCycle(); + } + + if(g_options.tiles_nested_debug == false) + drawNestedImages(toShow); + + } + + + /** + * set Nested size + */ + function setNestedSize(objTile){ + + var dimWidth, dimHeight; + var output = {}; + + var colWidth = g_nestedWork.colWidth; + var gapWidth = g_nestedWork.currentGap; + + var objImageSize = g_objTileDesign.getTileImageSize(objTile); + var index = objTile.index(); + + var maxDim = Math.ceil(getPresettedRandomByWidth(index)*(g_nestedWork.nestedOptimalCols*1/3) + g_nestedWork.nestedOptimalCols * 2/3); + + var imgWidth = objImageSize.width; + var imgHeight = objImageSize.height; + + var ratio = imgWidth/imgHeight; + + if(imgWidth>imgHeight){ + dimWidth = maxDim; + dimHeight = Math.round(dimWidth/ratio); + if(dimHeight == 0){ + dimHeight = 1; + } + } else { + dimHeight = maxDim; + dimWidth = Math.round(dimHeight*ratio); + if(dimWidth == 0){ + dimWidth = 1; + } + } + + output.dimWidth = dimWidth; + output.dimHeight = dimHeight; + output.width = dimWidth * colWidth + gapWidth*(dimWidth-1); + output.height = dimHeight * colWidth + gapWidth*(dimHeight-1); + output.imgWidth = imgWidth; + output.imgHeight = imgHeight; + output.left = 0; + output.top = 0; + return output; + } + + + /** + * get presetted random [0,1] from int + */ + function getPresettedRandomByWidth(index){ + return Math.abs(Math.sin(Math.abs(Math.sin(index)*1000))); + } + + + /** + * place nested images debug + */ + function placeNestedImagesDebug(toShow, placeOne){ + + if(placeOne == false){ + for(var i = g_nestedWork.currentItem; i<g_arrNestedItems.length; i++){ + placeNestedImage(i, true); + } + g_nestedWork.currentItem = g_arrNestedItems.length-1; + } else { + placeNestedImage(g_nestedWork.currentItem, true); + } + + for(var i = 0; i<=g_nestedWork.currentItem; i++){ + drawNestedImage(i, true); + } + + g_nestedWork.currentItem++; + + } + + + /** + * start cycle of placing imgaes + */ + function placeNestedImagesCycle(placeOne){ + + if(g_options.tiles_nested_debug == true){ + + if(typeof placeOne === 'undefined') + placeOne = true; + + placeNestedImagesDebug(true, placeOne); + + return(false); + } + + for(var i = 0; i < g_arrNestedItems.length; i++) + placeNestedImage(i, true); + + } + + + /** + * place Nested Image + */ + function placeNestedImage(tileID, toShow){ + + if(!toShow) + var toShow = false; + + g_nestedWork.maxColHeight = 0; + + var rowsValue = g_functions.getObjectLength(g_arrNestedGridRow); + + for(var row = g_nestedWork.gridY; row<=rowsValue+1; row++){ + for (var column = 0; column < g_nestedWork.maxColumns; column++) { + if (isGridRowExists(g_nestedWork.gridY) == false || isGridCellTaken(g_nestedWork.gridY, column) == false) { + var totalFree = getTotalFreeFromPosition(column); + calculateOptimalStretchAndPosition(tileID, totalFree, column); + + return; + } + } + g_nestedWork.gridY++; + } + + } + + + /** + * calculate optimal stretch of tile + */ + function calculateOptimalStretchAndPosition(tileID, totalFree, column){ + + var sizes = jQuery.extend(true, {}, g_arrNestedItems[tileID]); + var currentWidth = sizes.dimWidth; + var placeForNextImage = totalFree - sizes.dimWidth; + var optimalWidth = g_nestedWork.nestedOptimalCols; + var onlyCurrentImage = (totalFree<=sizes.dimWidth || placeForNextImage<=0.33*optimalWidth || totalFree<=optimalWidth); + + //Width stretching if needed + if(onlyCurrentImage){ // if free space is smaller than image width - place to this space anyway + resizeToNewWidth(tileID, totalFree); + } else if (placeForNextImage<=optimalWidth){ // if there are place for 2 images + if(optimalWidth>=4){ + if(isGridImageAligned(Math.floor(totalFree/2), column) == true){ + resizeToNewWidth(tileID, Math.floor(totalFree/2)+1); + } else { + resizeToNewWidth(tileID, Math.floor(totalFree/2)); + } + } else { + resizeToNewWidth(objImage, totalFree); + } + } else { + if(isGridImageAligned(currentWidth, column) == true){ + switch(currentWidth>=optimalWidth){ + case true: + resizeToNewWidth(tileID, currentWidth-1); + break + case false: + resizeToNewWidth(tileID, currentWidth+1); + break + + } + } + } + + //Height stretching if needed + sizes = jQuery.extend(true, {}, g_arrNestedItems[tileID]); + var columnInfo = getGridColumnHeight(tileID, sizes.dimWidth, column); // [columnHeight, imagesIDs] + + if(g_nestedWork.columnsValueToEnableHeightResize <= columnInfo[0] && g_nestedWork.maxColumns>=2*g_nestedWork.nestedOptimalCols){ + + var sideHelper = getGridImageVerticalDifference(column, sizes); + var columnSizes = resizeToNewHeight(tileID, sideHelper.newHeight, true); + g_arrNestedItems[tileID].dimHeight = columnSizes.dimHeight; + var columnResizes = redistributeColumnItems(columnInfo, columnSizes.dimWidth, column); + var columnCrosshairs = getColumnCrosshairsCount(columnResizes); + var disableColumnResizes = false; + + if(columnCrosshairs >= 2){ + disableColumnResizes = true; + } + + if(sideHelper.newHeight>=sizes.dimHeight){ + sizes = resizeToNewHeight(tileID, sideHelper.newHeight, true); + } + var sideResizes = getSideResizeInfo(sideHelper.idToResize, sideHelper.newHeight, sizes.dimHeight); + sizes.top = g_nestedWork.gridY; + sizes.left = column; + sideResizes.push({"tileID": tileID, "sizes": sizes}); + + var sideResizesVal = calcResizeRatio(sideResizes); + var columnResizesVal = calcResizeRatio(columnResizes); + + if(sideResizesVal<columnResizesVal || disableColumnResizes == true) { + applyResizes(sideResizes); + return; + } else { + applyResizes(columnResizes); + return; + } + + + } + sizes.left = column; + sizes.top = g_nestedWork.gridY; + g_arrNestedItems[tileID] = sizes; + putImageToGridRow(tileID, sizes, column, g_nestedWork.gridY); + + g_nestedWork.maxGridY = sizes.top + sizes.dimHeight; + + } + + /** + * check columns crosshairs + */ + function getColumnCrosshairsCount(tilesAndSizes){ + + var crosshairsCountR = 0; + var crosshairsCountL = 0; + + for(var i = 0; i<tilesAndSizes.length-1; i++){ + + var sizes = tilesAndSizes[i].sizes; + var topItem = -1; + var bottomItem = -1; + if(isGridRowExists(sizes.top+sizes.dimHeight) && g_nestedWork.maxColumns>sizes.left+sizes.dimWidth){ + topItem = g_arrNestedGridRow[sizes.top+sizes.dimHeight-1][sizes.left+sizes.dimWidth]; + bottomItem = g_arrNestedGridRow[sizes.top+sizes.dimHeight][sizes.left+sizes.dimWidth]; + } + if(topItem != bottomItem){ + crosshairsCountR++; + } + } + + for(var i = 0; i<tilesAndSizes.length-1; i++){ + + var sizes = tilesAndSizes[i].sizes; + var topItem = -1; + var bottomItem = -1; + if(isGridRowExists(sizes.top+sizes.dimHeight) && sizes.left-1>=0){ + topItem = g_arrNestedGridRow[sizes.top+sizes.dimHeight-1][sizes.left-1]; + bottomItem = g_arrNestedGridRow[sizes.top+sizes.dimHeight][sizes.left-1]; + } + if(topItem != bottomItem){ + crosshairsCountL++; + } + } + return Math.max(crosshairsCountL, crosshairsCountR); + } + + /** + * get size resize info + */ + function getSideResizeInfo(idToResize, newHeight, dimHeight){ + + var currentTile = g_arrNestedItems[idToResize]; + var tileHeight = currentTile.dimHeight; + var tileWidth = currentTile.dimWidth; + var tileLeft = currentTile.left; + var tileTop = currentTile.top; + var tileDimTop = parseInt(tileTop / (g_nestedWork.colWidth + g_nestedWork.currentGap)); + var tileDimLeft = parseInt(tileLeft / (g_nestedWork.colWidth + g_nestedWork.currentGap)); + var newSideHeight = tileHeight - newHeight + dimHeight; + + var sideSizes = resizeToNewHeight(idToResize, newSideHeight, true); + var output = []; + output.push({"tileID": idToResize, "sizes": sideSizes}); + return output; + } + + /** + * apply resizes to fix column + */ + function applyResizes(resizeTilesAndSizes){ + + for(var i = 0; i<resizeTilesAndSizes.length; i++){ + var sizes = resizeTilesAndSizes[i].sizes; + var tileID = resizeTilesAndSizes[i].tileID; + g_arrNestedItems[tileID]=jQuery.extend(true, {}, sizes); + putImageToGridRow(tileID, sizes, sizes.left, sizes.top); + } + + } + + /** + * redistribute heights in column + * returns current item sizes + */ + function redistributeColumnItems(columnInfo, columnWidth){ + + var originalHeight = 0; + var columnHeight = 0; + var objTiles = []; + var cordX = 0, cordY = 0; + + for(var i = 0; i<columnInfo[1].length; i++){ + var tileID = columnInfo[1][i]; + var currentTile = g_arrNestedItems[columnInfo[1][i]]; + columnHeight += currentTile.dimHeight; + if(i==0){ + var sizes = resizeToNewWidth(tileID, columnWidth, true); + originalHeight += sizes.dimHeight; + objTiles.push([columnInfo[1][i], sizes.dimHeight]); + continue; + } + originalHeight += currentTile.dimHeight; + objTiles.push([tileID, currentTile.dimHeight]); + } + + cordX = currentTile.left; + cordY = currentTile.top; + + var tempHeight = columnHeight; + var output = []; + + for(var i = objTiles.length-1; i>=0; i--){ + var tileID = objTiles[i][0]; + var newHeight; + if(i != 0) { + newHeight = Math.max(Math.round(columnHeight*1/3),Math.floor(objTiles[i][1] * (columnHeight / originalHeight))); + tempHeight = tempHeight - newHeight; + sizes = resizeToNewHeight(tileID, newHeight, true); + sizes.left = cordX; + sizes.top = cordY; + output.push({"tileID": tileID, "sizes": sizes}); + cordY += sizes.dimHeight; + } else { + newHeight = tempHeight; + sizes = resizeToNewHeight(tileID, newHeight, true); + sizes.left = cordX; + sizes.top = cordY; + output.push({"tileID": tileID, "sizes": sizes}); + } + } + return output; + } + + /** + * Calculate num of objects in current column and return they are ID's + */ + function getGridColumnHeight(tileID, dimWidth, column){ + var tempY = g_nestedWork.gridY-1; + var curImage = 0; + var prevImage = 0; + var columnHeight = 1; + var imagesIDs = []; + var toReturn = []; + imagesIDs.push(tileID); + if(tempY>=0){ + prevImage = 0; + while(tempY>=0){ + curImage = g_arrNestedGridRow[tempY][column]; + if( (typeof g_arrNestedGridRow[tempY][column-1] === 'undefined' || g_arrNestedGridRow[tempY][column-1] != g_arrNestedGridRow[tempY][column]) + &&(typeof g_arrNestedGridRow[tempY][column+dimWidth] === 'undefined' || g_arrNestedGridRow[tempY][column+dimWidth-1] != g_arrNestedGridRow[tempY][column+dimWidth]) + &&(g_arrNestedGridRow[tempY][column]==g_arrNestedGridRow[tempY][column+dimWidth-1])){ + if(prevImage != curImage){ + columnHeight++; + imagesIDs.push(curImage); + } + } else { + toReturn.push(columnHeight); + toReturn.push(imagesIDs); + return toReturn; + } + tempY--; + prevImage = curImage; + } + toReturn.push(columnHeight); + toReturn.push(imagesIDs); + return toReturn; + } + return [0, []]; + } + + /** + * get new height based on left and right difference + */ + function getGridImageVerticalDifference(column, sizes){ + var newHeightR = 0; + var newHeightL = 0; + var dimWidth = sizes.dimWidth; + var dimHeight = sizes.dimHeight; + var leftID = 0; + var rightID = 0; + var array = jQuery.map(g_arrNestedGridRow, function(value, index) { + return [value]; + }); + + if(typeof array[g_nestedWork.gridY] === 'undefined' || typeof array[g_nestedWork.gridY][column-1]=== 'undefined'){ + newHeightL = 0; + } else { + var tempY=0; + while(true){ + if(typeof g_arrNestedGridRow[g_nestedWork.gridY+tempY] !== 'undefined' && g_arrNestedGridRow[g_nestedWork.gridY+tempY][column-1] != -1 ){ + leftID = g_arrNestedGridRow[g_nestedWork.gridY+tempY][column-2]; + tempY++; + newHeightL++; + } else { + break; + } + } + } + + if(typeof array[g_nestedWork.gridY] === 'undefined' || typeof array[g_nestedWork.gridY][column+dimWidth]=== 'undefined'){ + newHeightR = 0; + } else { + tempY=0; + while(true){ + if(typeof g_arrNestedGridRow[g_nestedWork.gridY+tempY] !== 'undefined' && g_arrNestedGridRow[g_nestedWork.gridY+tempY][column+dimWidth] != -1 ){ + rightID = g_arrNestedGridRow[g_nestedWork.gridY+tempY][column+dimWidth+1]; + tempY++; + newHeightR++; + } else { + break; + } + } + } + + var newHeight = 0; + var idToResize = 0; + if(Math.abs(dimHeight - newHeightL) < Math.abs(dimHeight - newHeightR) && newHeightL != 0) { + newHeight = newHeightL; + idToResize = leftID; + } else if (newHeightR !=0) { + newHeight = newHeightR; + idToResize = rightID; + } else { + newHeight = dimHeight; //malo li + } + + var output = {"newHeight": newHeight, "idToResize": idToResize}; + + return output; + } + + /** + * resize to new Dim width + */ + function resizeToNewWidth(tileID, newDimWidth, toReturn) { + if(!toReturn){ + toReturn = false; + } + + var colWidth = g_nestedWork.colWidth; + var gapWidth = g_nestedWork.currentGap; + var currentTile = g_arrNestedItems[tileID]; + var imgWidth = currentTile.imgWidth; + var imgHeight = currentTile.imgHeight; + var ratio = imgWidth / imgHeight; + dimWidth = newDimWidth; + dimHeight = Math.round(dimWidth / ratio); + if(toReturn == true){ + var sizes = jQuery.extend(true, {}, currentTile); + sizes.dimWidth = dimWidth; + sizes.dimHeight = dimHeight; + sizes.width = dimWidth * colWidth + gapWidth * (dimWidth - 1); + sizes.height = dimHeight * colWidth + gapWidth * (dimHeight - 1); + return sizes; + } + currentTile.dimWidth = dimWidth; + currentTile.dimHeight = dimHeight; + currentTile.width = dimWidth * colWidth + gapWidth * (dimWidth - 1); + currentTile.height = dimHeight * colWidth + gapWidth * (dimHeight - 1); + } + + /** + * resize to new height without width changing + */ + function resizeToNewHeight(tileID, newDimHeight, toReturn) { + + if(!toReturn){ + toReturn = false; + } + + var currentTile = g_arrNestedItems[tileID]; + var dimWidth = currentTile.dimWidth; + var colWidth = g_nestedWork.colWidth; + var gapWidth = g_nestedWork.currentGap; + + if(toReturn == true){ + var sizes = jQuery.extend(true, {}, currentTile); + + sizes.dimHeight = newDimHeight; + sizes.width = dimWidth * colWidth + gapWidth * (dimWidth - 1); + sizes.height = newDimHeight * colWidth + gapWidth * (newDimHeight - 1); + + return sizes; + } + + currentTile.dimHeight = newDimHeight; + currentTile.width = dimWidth * colWidth + gapWidth * (dimWidth - 1); + currentTile.height = newDimHeight * colWidth + gapWidth * (newDimHeight - 1); + } + + /** + * calc resize koef + */ + function calcResizeRatio(objTilesAndSizes){ + var tempResizes = 0; + var tempNum = 0; + + for(var i = 0; i<objTilesAndSizes.length; i++){ + var sizes = g_arrNestedItems[objTilesAndSizes[i].tileID]; + if((sizes.dimHeight != 0) && (sizes.height != 0)){ + resizeVal = (sizes.dimWidth/sizes.dimHeight)/(sizes.imgWidth/sizes.imgHeight); + } else { + return; + } + if(resizeVal < 1){ + resizeVal = 1/resizeVal; + } + tempResizes += resizeVal; + tempNum++; + } + return tempResizes/tempNum; + } + + /** + * check for column break + */ + function isGridImageAligned(dimWidth, column){ + var y = g_nestedWork.gridY-1; + if(y<=0 || isGridRowExists(y) == false){ + return false; + } + if(g_arrNestedGridRow[y][column+dimWidth-1]!=g_arrNestedGridRow[y][column+dimWidth]) { + return true; + } + + return false; + } + + /** + * get free line length in GridRow + */ + function getTotalFreeFromPosition(column){ + var x = column; + var totalFree = 0; + if(isGridRowExists(g_nestedWork.gridY) == true){ + while(isGridCellTaken(g_nestedWork.gridY, x) == false){ + totalFree ++; + x++; + } + } else { + totalFree = g_nestedWork.maxColumns; + } + return totalFree; + } + + /** + * is nestedGridRow row exists + */ + function isGridRowExists(y){ + if(typeof g_arrNestedGridRow[y] === 'undefined'){ + return false; + } + return true; + } + + + /** + * put image to grid row + */ + function putImageToGridRow(id, sizes, gridX, gridY){ + + for (var y = 0; y < sizes.dimHeight; y++) { + for (var x = 0; x < sizes.dimWidth; x++) { + if (isGridRowExists(gridY+y) == 0) { + addGridRow(gridY+y); + } + + setGridCellValue(gridY+y, gridX+x, id); + } + } + } + + /** + * add grid with Y index + */ + function addGridRow(y){ + g_arrNestedGridRow[y] = new Object; + for (var t = 0; t < g_nestedWork.maxColumns; t++) { + g_arrNestedGridRow[y][t] = -1; + } + } + + /** + * isGridRowCellTaken + */ + function isGridCellTaken(y,x){ + return (g_arrNestedGridRow[y][x] != -1); + } + + /** + * set nestedGridRow cell value + */ + function setGridCellValue(y,x,value){ + g_arrNestedGridRow[y][x]=value; + } + + + /** + * draw nested images + */ + function drawNestedImages(toShow){ + + if(!toShow) + var toShow = false; + + doBeforeTransition(); + + for(var i = 0; i<g_arrNestedItems.length; i++){ + drawNestedImage(i, toShow); + } + + g_objParent.height(g_nestedWork.maxColHeight); + + doAfterTransition(); + } + + + /** + * draw nested image + */ + function drawNestedImage(i, toShow){ + + var objTile = g_thumbs.getThumbByIndex(i); + + var sizes = g_arrNestedItems[i]; + var newY = sizes.top * (g_nestedWork.colWidth + g_nestedWork.currentGap); + var newX = g_nestedWork.addX + sizes.left * (g_nestedWork.colWidth + g_nestedWork.currentGap); + + g_objTileDesign.resizeTile(objTile, sizes.width, sizes.height, g_objTileDesign.resizemode.VISIBLE_ELEMENTS); + + g_functions.placeElement(objTile, newX, newY); + + if(newY + sizes.height > g_nestedWork.maxColHeight){ + g_nestedWork.maxColHeight = newY + sizes.height; + }; + + if(toShow == true){ + objTile.fadeTo(0, 1); + } + + } + + + function __________COMMON_AND_EVENTS_______(){}; + + + /** + * on resize event + */ + function onResize(){ + + if(g_temp.isFirstTimeRun == true) + return(true); + + if(g_temp.isAllLoaded == false) + return(false); + + switch(g_options.tiles_type){ + case "columns": + placeTiles(false); + break; + case "justified": + placeJustified(false); + break; + case "nested": + + var isMobileMode = g_gallery.isMobileMode(); + if(isMobileMode == true){ + placeTiles(false); + } + else + placeNestedImages(false); + + break; + } + + } + + + /** + * init panel events + */ + function initEvents(){ + + //only on first placed start size change event + g_objThis.on(t.events.ALL_TILES_LOADED, function(){ + + if(g_temp.isAllLoaded == true) + return(true); + + g_temp.isAllLoaded = true; + + }); + + g_objGallery.on(g_gallery.events.SIZE_CHANGE, onResize); + + g_objTileDesign.initEvents(); + + } + + + /** + * run the gallery after init and set html + */ + function run(){ + + //show tiles + g_objWrapper.children(".ug-tile").show(); + + if(g_temp.isFirstTimeRun == true){ + initEvents(); + } + + g_objTileDesign.run(); + + switch(g_options.tiles_type){ + default: + case "columns": + runColumnsType(); + break; + case "justified": + runJustifiedType(); + break; + case "nested": + runNestedType(); + break; + } + + + g_temp.isFirstTimeRun = false; + } + + + /** + * destroy the events + */ + this.destroy = function(){ + + g_objGallery.off(g_gallery.events.SIZE_CHANGE); + g_objTileDesign.destroy(); + } + + /** + * set the custom size mode. + * set it before the init + */ + this.setFixedSizeMode = function(){ + g_temp.isFixedMode = true; + g_objTileDesign.setFixedMode(); + } + + + /** + * init function for avia controls + */ + this.init = function(gallery, customOptions){ + + init(gallery, customOptions); + } + + + /** + * set html + */ + this.setHtml = function(objParent){ + setHtml(objParent); + } + + /** + * get tile design object + */ + this.getObjTileDesign = function(){ + return(g_objTileDesign); + } + + /** + * set html and properties + */ + this.run = function(){ + run(); + } + + +} + + + +/** + * tiles design class + */ +function UGTileDesign(){ + + var t = this, g_objThis = jQuery(this); + var g_gallery = new UniteGalleryMain(), g_objGallery; + var g_functions = new UGFunctions(), g_objParentWrapper, g_objWrapper; + var g_thumbs = new UGThumbsGeneral(), g_items; + + this.resizemode = { //modes constants for resize tile + FULL: "full", + WRAPPER_ONLY: "wrapper_only", + VISIBLE_ELEMENTS: "visible_elements" + }; + + this.sizeby = { //sizeby option constants + GLOBAL_RATIO: "global_ratio", + TILE_RATIO: "tile_ratio", + IMAGE_RATIO: "image_ratio", + CUSTOM: "custom" + }; + + this.events = { + TILE_CLICK: "tile_click" + }; + + var g_options = { + + tile_width: 250, //in case of fixed size: tile width + tile_height: 200, //in case of fixed size: tile height + tile_size_by:t.sizeby.IMAGE_RATIO, //image ratio, tile ratio , global_ratio - decide by what parameter resize the tile + tile_visible_before_image:false, //tile visible before image load + + tile_enable_background:true, //enable backgruond of the tile + tile_background_color: "#F0F0F0", //tile background color + + tile_enable_border:false, //enable border of the tile + tile_border_width:3, //tile border width + tile_border_color:"#F0F0F0", //tile border color + tile_border_radius:0, //tile border radius (applied to border only, not to outline) + + tile_enable_outline: false, //enable outline of the tile (works only together with the border) + tile_outline_color: "#8B8B8B", //tile outline color + + tile_enable_shadow:false, //enable shadow of the tile + tile_shadow_h:1, //position of horizontal shadow + tile_shadow_v:1, //position of vertical shadow + tile_shadow_blur:3, //shadow blur + tile_shadow_spread:2, //shadow spread + tile_shadow_color:"#8B8B8B", //shadow color + + tile_enable_action: true, //enable tile action on click like lightbox + tile_as_link: false, //act the tile as link, no lightbox will appear + tile_link_newpage: true, //open the tile link in new page + + tile_enable_overlay: true, //enable tile color overlay (on mouseover) + tile_overlay_opacity: 0.4, //tile overlay opacity + tile_overlay_color: "#000000", //tile overlay color + + tile_enable_icons: true, //enable icons in mouseover mode + tile_show_link_icon: false, //show link icon (if the tile has a link). In case of tile_as_link this option not enabled + tile_videoplay_icon_always_on: 'never', //'always', 'never', 'mobile_only', 'desktop_only' always show video play icon + tile_space_between_icons: 26, //initial space between icons, (on small tiles it may change) + + tile_enable_image_effect:false, //enable tile image effect + tile_image_effect_type: "bw", //bw, blur, sepia - tile effect type + tile_image_effect_reverse: false, //reverce the image, set only on mouseover state + + tile_enable_textpanel: false, //enable textpanel + tile_textpanel_source: "title", //title,desc,desc_title,title_and_desc. source of the textpanel. desc_title - if description empty, put title + tile_textpanel_always_on: false, //textpanel always visible - for inside type + tile_textpanel_appear_type: "slide", //slide, fade - appear type of the textpanel on mouseover + tile_textpanel_position:"inside_bottom", //inside_bottom, inside_top, inside_center, top, bottom the position of the textpanel + tile_textpanel_offset:0 //vertical offset of the textpanel + }; + + + var g_defaults = { + thumb_color_overlay_effect: true, + thumb_overlay_reverse: true, + thumb_image_overlay_effect: false, + tile_textpanel_enable_description: false, + tile_textpanel_bg_opacity: 0.6, + tile_textpanel_padding_top:8, + tile_textpanel_padding_bottom: 8 + }; + + var g_temp = { + ratioByHeight:0, + ratioByWidth:0, + eventSizeChange: "thumb_size_change", + funcCustomTileHtml: null, + funcCustomPositionElements: null, + funcParentApproveClick: null, + isSaparateIcons: false, + tileInnerReduce: 0, //how much reduce from the tile inner elements from border mostly + isTextpanelOutside: false, //is the textpanel is out of tile image border + hasImageContainer:false, + isVideoplayIconAlwaysOn:false, + isTextPanelHidden:false + }; + + + /** + * init the tile object + */ + function init(gallery, customOptions){ + + g_gallery = gallery; + + g_objGallery = jQuery(gallery); + + var objects = g_gallery.getObjects(); + g_objWrapper = objects.g_objWrapper; + + g_items = g_gallery.getArrItems(); + + g_options = jQuery.extend(g_options, g_defaults); + + g_options = jQuery.extend(g_options, customOptions); + + modifyOptions(); + + g_thumbs.init(gallery, g_options); + + var objCustomOptions = {allow_onresize:false}; + + var customThumbsAdd = ["overlay"]; + + if(g_temp.funcCustomTileHtml) + customThumbsAdd = []; + + g_thumbs.setCustomThumbs(setHtmlThumb, customThumbsAdd, objCustomOptions); + + //get thumb default options too: + var thumbOptions = g_thumbs.getOptions(); + g_options = jQuery.extend(g_options, thumbOptions); + + //set ratios of fixed mode + g_temp.ratioByWidth = g_options.tile_width / g_options.tile_height; + g_temp.ratioByHeight = g_options.tile_height / g_options.tile_width; + + + //set if tile has image container + if(g_options.tile_size_by == t.sizeby.GLOBAL_RATIO && g_temp.isTextpanelOutside) + g_temp.hasImageContainer = true; + + } + + + /** + * set thumb and textpanel options according tile options + */ + function modifyOptions(){ + + //set overlay related options + if(g_options.tile_enable_overlay == true){ + + g_options.thumb_overlay_opacity = g_options.tile_overlay_opacity; + g_options.thumb_overlay_color = g_options.tile_overlay_color; + + }else if(g_options.tile_enable_icons == false){ //if nothing on overlay - turn it off + g_options.thumb_color_overlay_effect = false; + }else{ //if icons enabled - make it transparent + g_options.thumb_overlay_opacity = 0; + } + + //set item as link + if(g_options.tile_as_link){ + g_options.thumb_wrapper_as_link = true; + g_options.thumb_link_newpage = g_options.tile_link_newpage; + } + + //outline cannot appear without border + if(g_options.tile_enable_outline == true && g_options.tile_enable_border == false) + g_options.tile_enable_outline = false; + + //set inner reduce value - in case of the border + g_temp.tileInnerReduce = 0; + if(g_options.tile_enable_border){ + g_temp.tileInnerReduce = g_options.tile_border_width * 2; + g_thumbs.setThumbInnerReduce(g_temp.tileInnerReduce); + } + + //check if saparate icons + g_temp.isSaparateIcons = !g_functions.isRgbaSupported(); + + //set if the textpanel is enabled and outside + if(g_options.tile_enable_textpanel == true){ + + //optimize for touch device + switch(g_options.tile_textpanel_position){ + case "top": + g_options.tile_textpanel_align = "top"; + case "bottom": + g_temp.isTextpanelOutside = true; + g_options.tile_textpanel_always_on = true; + g_options.tile_textpanel_offset = 0; + break; + case "inside_top": + g_options.tile_textpanel_align = "top"; + break; + case "middle": + g_options.tile_textpanel_align = "middle"; + g_options.tile_textpanel_appear_type = "fade"; + break; + } + + //if text panel oppearing with the overlay, icons should be saparated + if(g_options.tile_textpanel_always_on == false) + g_temp.isSaparateIcons = true; + + } + + + //if the textpanel offset is not from the border, it's always fade. + if(g_options.tile_textpanel_offset != 0){ + g_options.tile_textpanel_appear_type = "fade"; + g_options.tile_textpanel_margin = g_options.tile_textpanel_offset; + } + + //enable description if needed + if(g_options.tile_textpanel_source == "title_and_desc"){ + g_options.tile_textpanel_enable_description = true; + g_options.tile_textpanel_desc_style_as_title = true; + } + + } + + + /** + * set options before render + */ + function modifyOptionsBeforeRender(){ + + var isMobile = g_gallery.isMobileMode(); + + //set text panel show / hide + + g_temp.isTextPanelHidden = false; + if(isMobile == true && g_options.tile_textpanel_always_on == false) + g_temp.isTextPanelHidden = true; + + + //set video icon always on true / false + + g_temp.isVideoplayIconAlwaysOn = g_options.tile_videoplay_icon_always_on; + + switch(g_options.tile_videoplay_icon_always_on){ + case "always": + g_temp.isVideoplayIconAlwaysOn = true; + break; + case "never": + g_temp.isVideoplayIconAlwaysOn = false; + break; + case "mobile_only": + g_temp.isVideoplayIconAlwaysOn = (isMobile == true)?true:false; + break; + case "desktop_only": + g_temp.isVideoplayIconAlwaysOn = (isMobile == false)?true:false; + break; + } + + + } + + + /** + * set thumb html + */ + function setHtmlThumb(objThumbWrapper, objItem){ + + objThumbWrapper.addClass("ug-tile"); + + if(g_temp.funcCustomTileHtml){ + g_temp.funcCustomTileHtml(objThumbWrapper, objItem); + return(false); + } + + var html = ""; + + //add image container + if(g_temp.hasImageContainer == true){ + html += "<div class='ug-image-container ug-trans-enabled'>"; + } + + //add thumb image: + var classImage = "ug-thumb-image"; + + if(g_options.tile_enable_image_effect == false || g_options.tile_image_effect_reverse == true) + classImage += " ug-trans-enabled"; + + var imageAlt = g_functions.stripTags(objItem.title); + imageAlt = g_functions.htmlentitles(imageAlt); + + html += "<img src=\""+g_functions.escapeDoubleSlash(objItem.urlThumb)+"\" alt='"+imageAlt+"' class='"+classImage+"'>"; + + if(g_temp.hasImageContainer == true){ + html += "</div>"; + } + + objThumbWrapper.append(html); + + + if(g_options.tile_size_by == t.sizeby.GLOBAL_RATIO){ + objThumbWrapper.fadeTo(0,0); //turn on in thumbsGeneral + } + + //---- set thumb styles ---- + + //set border: + var objCss = {}; + + if(g_options.tile_enable_background == true){ + objCss["background-color"] = g_options.tile_background_color; + } + + if(g_options.tile_enable_border == true){ + objCss["border-width"] = g_options.tile_border_width+"px"; + objCss["border-style"] = "solid"; + objCss["border-color"] = g_options.tile_border_color; + + if(g_options.tile_border_radius) + objCss["border-radius"] = g_options.tile_border_radius+"px"; + } + + //set outline: + if(g_options.tile_enable_outline == true){ + objCss["outline"] = "1px solid " + g_options.tile_outline_color; + } + + //set shadow + if(g_options.tile_enable_shadow == true){ + var htmlShadow = g_options.tile_shadow_h+"px "; + htmlShadow += g_options.tile_shadow_v+"px "; + htmlShadow += g_options.tile_shadow_blur+"px "; + htmlShadow += g_options.tile_shadow_spread+"px "; + htmlShadow += g_options.tile_shadow_color; + + objCss["box-shadow"] = htmlShadow; + } + + objThumbWrapper.css(objCss); + + + //----- add icons + + var htmlAdd = ""; + + if(g_options.tile_enable_icons){ + + //add zoom icon + if(g_options.tile_as_link == false && g_options.tile_enable_action == true){ + var iconPlayClass = "ug-button-play ug-icon-zoom"; + if(objItem.type != "image") + iconPlayClass = "ug-button-play ug-icon-play"; + + htmlAdd += "<div class='ug-tile-icon " + iconPlayClass + "' style='display:none'></div>"; + } + + //add link icon + if(objItem.link && g_options.tile_show_link_icon == true || g_options.tile_as_link == true){ + + if(g_options.tile_as_link == false){ + var linkTarget = ""; + if(g_options.tile_link_newpage == true) + linkTarget = " target='_blank'"; + + htmlAdd += "<a href='"+objItem.link+"'"+linkTarget+" class='ug-tile-icon ug-icon-link'></a>"; + }else{ + htmlAdd += "<div class='ug-tile-icon ug-icon-link' style='display:none'></div>"; + } + + } + + var toSaparateIcon = g_temp.isSaparateIcons; + if(toSaparateIcon == false && objItem.type != "image" && g_temp.isVideoplayIconAlwaysOn == true) + toSaparateIcon = true; + + if(toSaparateIcon) //put the icons on the thumb + var objOverlay = objThumbWrapper; + else + var objOverlay = objThumbWrapper.children(".ug-thumb-overlay"); + + objOverlay.append(htmlAdd); + + var objButtonZoom = objOverlay.children("." + iconPlayClass); + + if(objButtonZoom.length == 0) + objButtonZoom = null; + else + objButtonZoom.hide(); + + var objButtonLink = objOverlay.children(".ug-icon-link"); + + if(objButtonLink.length == 0) + objButtonLink = null; + else + objButtonLink.hide(); + + //if only zoom icon, make the tile clickable for lightbox open + if(!objButtonLink && g_options.tile_enable_action == true) + objThumbWrapper.addClass("ug-tile-clickable"); + + } //if icons enabled + else{ //if the icons don't enabled, set the tile clickable + + if(g_options.tile_enable_action == true) + objThumbWrapper.addClass("ug-tile-clickable"); + + } + + //add image overlay + if(g_options.tile_enable_image_effect == true){ + + var imageEffectClassAdd = ""; + if(g_options.tile_image_effect_reverse == false) + imageEffectClassAdd = " ug-trans-enabled"; + + var imageOverlayHtml = "<div class='ug-tile-image-overlay"+imageEffectClassAdd+"' >"; + var imageEffectClass = " ug-"+g_options.tile_image_effect_type+"-effect"; + + imageOverlayHtml += "<img src=\""+g_functions.escapeDoubleSlash(objItem.urlThumb)+"\" alt='"+objItem.title+"' class='"+imageEffectClass + imageEffectClassAdd+"'>"; + imageOverlayHtml += "</div>"; + + objThumbWrapper.append(imageOverlayHtml); + + //hide the image overlay if reversed + if(g_options.tile_image_effect_reverse == true){ + objThumbWrapper.children(".ug-tile-image-overlay").fadeTo(0,0); + } + + } + + + //add text panel + if(g_options.tile_enable_textpanel == true){ + + var objTextPanel = new UGTextPanel(); + objTextPanel.init(g_gallery, g_options, "tile"); + + //set transition class + var textpanelAddClass = ""; + if(g_options.tile_textpanel_always_on == true || g_temp.isTextpanelOutside == true) + textpanelAddClass = "ug-trans-enabled"; + + objTextPanel.appendHTML(objThumbWrapper, textpanelAddClass); + + var panelTitle = objItem.title; + var panelDesc = ""; + + switch(g_options.tile_textpanel_source){ + case "desc": + case "description": + panelTitle = objItem.description; + break; + case "desc_title": + if(objItem.description != "") + panelTitle = objItem.description; + break; + case "title_and_desc": + panelTitle = objItem.title; + panelDesc = objItem.description; + break; + } + + objTextPanel.setTextPlain(panelTitle, panelDesc); + + if(g_options.tile_textpanel_always_on == false) + objTextPanel.getElement().fadeTo(0,0); + + objThumbWrapper.data("objTextPanel", objTextPanel); + + //if textpanel always on, it has to be under the overlay + if(g_options.tile_textpanel_always_on == true){ + var textPanelElement = getTextPanelElement(objThumbWrapper); + textPanelElement.css("z-index",2); + } + + //if text panel is outside, clone textpanel + if(g_temp.isTextpanelOutside == true){ + + var htmlClone = "<div class='ug-tile-cloneswrapper'></div>"; + objThumbWrapper.append(htmlClone); + var objCloneWrapper = objThumbWrapper.children(".ug-tile-cloneswrapper"); + + var objTextPanelClone = new UGTextPanel(); + objTextPanelClone.init(g_gallery, g_options, "tile"); + objTextPanelClone.appendHTML(objCloneWrapper); + objTextPanelClone.setTextPlain(panelTitle, panelDesc); + objThumbWrapper.data("objTextPanelClone", objTextPanelClone); + } + + } + + //add additional html + if(objItem.addHtml !== null) + objThumbWrapper.append(objItem.addHtml); + + } + + + /** + * load tile image, place the image on load + */ + this.loadTileImage = function(objTile){ + + var objImage = t.getTileImage(objTile); + + g_functions.checkImagesLoaded(objImage, null, function(objImage,isError){ + onPlaceImage(null, objTile, jQuery(objImage)); + }); + + } + + function _________________GETTERS________________(){}; + + + + /** + * get image overlay + */ + function getTileOverlayImage(objTile){ + var objOverlayImage = objTile.children(".ug-tile-image-overlay"); + return(objOverlayImage); + } + + /** + * get tile color overlay + */ + function getTileOverlay(objTile){ + var objOverlay = objTile.children(".ug-thumb-overlay"); + return(objOverlay); + } + + + /** + * get image container + */ + function getTileImageContainer(objTile){ + if(g_temp.hasImageContainer == false) + return(null); + + var objImageContainer = objTile.children(".ug-image-container"); + + return(objImageContainer); + } + + + /** + * get image effect + */ + function getTileImageEffect(objTile){ + var objImageEffect = objTile.find(".ug-tile-image-overlay img"); + return(objImageEffect); + } + + + /** + * get text panel + */ + function getTextPanel(objTile){ + var objTextPanel = objTile.data("objTextPanel"); + + return(objTextPanel); + } + + + /** + * get cloned text panel + */ + function getTextPanelClone(objTile){ + var objTextPanelClone = objTile.data("objTextPanelClone"); + + return(objTextPanelClone); + + } + + + /** + * get text panel element from the tile + */ + function getTextPanelElement(objTile){ + var objTextPanel = objTile.children(".ug-textpanel"); + + return(objTextPanel); + } + + + /** + * get text panel element cloned + */ + function getTextPanelCloneElement(objTile){ + var objTextPanel = objTile.find(".ug-tile-cloneswrapper .ug-textpanel"); + + if(objTextPanel.length == 0) + throw new Error("text panel cloned element not found"); + + return(objTextPanel); + + } + + + /** + * get text panel height + */ + function getTextPanelHeight(objTile){ + + if(g_temp.isTextpanelOutside == true) + var objTextPanel = getTextPanelCloneElement(objTile); + else + var objTextPanel = getTextPanelElement(objTile); + + + if(!objTextPanel) + return(0); + + var objSize = g_functions.getElementSize(objTextPanel); + return(objSize.height); + } + + + /** + * get button link + */ + function getButtonLink(objTile){ + var objButton = objTile.find(".ug-icon-link"); + if(objButton.length == 0) + return(null); + + return objButton; + } + + + /** + * get tile ratio + */ + function getTileRatio(objTile, fromWhere){ + + //global ratio + var ratio = g_temp.ratioByHeight; + + switch(g_options.tile_size_by){ + default: //global ratio + ratio = g_temp.ratioByHeight; + break; + case t.sizeby.IMAGE_RATIO: + + if(!objTile) + throw new Error("tile should be given for tile ratio"); + + var item = t.getItemByTile(objTile); + + if(typeof item.thumbRatioByHeight != "undefined"){ + + if(item.thumbRatioByHeight == 0){ + trace(item); + throw new Error("the item ratio not inited yet"); + } + + ratio = item.thumbRatioByHeight; + } + + break; + case t.sizeby.CUSTOM: + return null; + break; + } + + return(ratio); + } + + + /** + * get button zoom + */ + function getButtonZoom(objTile){ + var objButton = objTile.find(".ug-button-play"); + + if(objButton.length == 0) + return(null); + + return objButton; + } + + + /** + * tells if the tile is over style + */ + function isOverStyle(objTile){ + + if(objTile.hasClass("ug-thumb-over")) + return(true); + + return(false); + } + + + /** + * check if the tile is clickable + */ + function isTileClickable(objTile){ + + return objTile.hasClass("ug-tile-clickable"); + } + + + /** + * return if the items icon always on + */ + function isItemIconAlwaysOn(objItem){ + + if(g_options.tile_enable_icons == true && g_temp.isVideoplayIconAlwaysOn == true && objItem.type != "image") + return(true); + + return(false); + } + + + function _________________SETTERS________________(){}; + + + /** + * position tile images elements + * width, height - tile width height + */ + function positionElements_images(objTile, width, height, visibleOnly){ + + var objImageOverlay = getTileOverlayImage(objTile); + var objThumbImage = t.getTileImage(objTile); + var objImageEffect = getTileImageEffect(objTile); + + //reduce borders + width -= g_temp.tileInnerReduce; + height -= g_temp.tileInnerReduce; + + var imagePosy = null; + + //reduce textpanel height + if(g_temp.isTextpanelOutside == true){ + + var textHeight = getTextPanelHeight(objTile); + height -= textHeight; + + if(g_options.tile_textpanel_position == "top"){ + imagePosy = textHeight; + } + + /** + * if has image container + */ + if(g_temp.hasImageContainer == true){ + var objImageContainer = getTileImageContainer(objTile); + g_functions.setElementSize(objImageContainer, width, height); + + if(imagePosy !== null) + g_functions.placeElement(objImageContainer, 0, imagePosy); + } + + } + + //scale image + if(g_options.tile_enable_image_effect == false){ + + g_functions.scaleImageCoverParent(objThumbImage, width, height); + + if(g_temp.hasImageContainer == false && imagePosy !== null) + g_functions.placeElement(objThumbImage, 0, imagePosy); + + }else{ //width the effect + + //set what to resize + var dontResize = "nothing"; + if(visibleOnly === true && g_temp.isTextpanelOutside == false){ + if(g_options.tile_image_effect_reverse == true){ + dontResize = "effect"; + }else{ + dontResize = "image"; + } + } + + //resize image effect + if(dontResize != "effect"){ + g_functions.setElementSize(objImageOverlay, width, height); + + if(imagePosy !== null) + g_functions.placeElement(objImageOverlay, 0, imagePosy); + + g_functions.scaleImageCoverParent(objImageEffect, width, height); + } + + + //resize image + if(dontResize != "image"){ + + if(g_temp.hasImageContainer == true){ + g_functions.scaleImageCoverParent(objThumbImage, width, height); + }else{ + + //if can't clone, resize + if(dontResize == "effect"){ + g_functions.scaleImageCoverParent(objThumbImage, width, height); + if(imagePosy !== null) + g_functions.placeElement(objThumbImage, 0, imagePosy); + } + else + g_functions.cloneElementSizeAndPos(objImageEffect, objThumbImage, false, null, imagePosy); + + } + + } + + + + } + + } + + + /** + * position text panel + * panelType - default or clone + */ + function positionElements_textpanel(objTile, panelType, tileWidth, tileHeight){ + + var panelWidth = null; + if(tileWidth) + panelWidth = tileWidth - g_temp.tileInnerReduce; + + if(tileHeight) + tileHeight -= g_temp.tileInnerReduce; + + if(panelType == "clone"){ + var objTextPanelClone = getTextPanelClone(objTile); + objTextPanelClone.refresh(true, true, panelWidth); + var objItem = t.getItemByTile(objTile); + objItem.textPanelCloneSizeSet = true; + + return(false); + } + + var objTextPanel = getTextPanel(objTile); + + if(!objTextPanel) + return(false); + + var panelHeight = null; + + //set panel height also + if(g_temp.isTextpanelOutside == true) + panelHeight = getTextPanelHeight(objTile); + + objTextPanel.refresh(false, true, panelWidth, panelHeight); + + var isPosition = (g_options.tile_textpanel_always_on == true || g_options.tile_textpanel_appear_type == "fade"); + + if(isPosition){ + + if(g_temp.isTextpanelOutside == true && tileHeight && g_options.tile_textpanel_position == "bottom"){ + + var posy = tileHeight - panelHeight; + objTextPanel.positionPanel(posy); + }else + objTextPanel.positionPanel(); + } + + } + + + /** + * position the elements + */ + function positionElements(objTile){ + + var objItem = t.getItemByTile(objTile); + var objButtonZoom = getButtonZoom(objTile); + var objButtonLink = getButtonLink(objTile); + var sizeTile = g_functions.getElementSize(objTile); + + positionElements_images(objTile, sizeTile.width, sizeTile.height); + + //position text panel: + if(g_options.tile_enable_textpanel == true) + positionElements_textpanel(objTile, "regular", sizeTile.width, sizeTile.height); + + + //position overlay: + var overlayWidth = sizeTile.width - g_temp.tileInnerReduce; + var overlayHeight = sizeTile.height - g_temp.tileInnerReduce; + var overlayY = 0; + if(g_temp.isTextpanelOutside == true){ + var textHeight = getTextPanelHeight(objTile); + overlayHeight -= textHeight; + if(g_options.tile_textpanel_position == "top") + overlayY = textHeight; + } + + var objOverlay = getTileOverlay(objTile); + g_functions.setElementSizeAndPosition(objOverlay, 0, overlayY, overlayWidth, overlayHeight); + + //set vertical gap for icons + if(objButtonZoom || objButtonLink){ + + var gapVert = 0; + if( g_options.tile_enable_textpanel == true && g_temp.isTextPanelHidden == false && g_temp.isTextpanelOutside == false){ + var objTextPanelElement = getTextPanelElement(objTile); + var texPanelSize = g_functions.getElementSize(objTextPanelElement); + if(texPanelSize.height > 0) + gapVert = Math.floor((texPanelSize.height / 2) * -1); + } + + } + + if(objButtonZoom && objButtonLink){ + var sizeZoom = g_functions.getElementSize(objButtonZoom); + var sizeLink = g_functions.getElementSize(objButtonLink); + var spaceBetween = g_options.tile_space_between_icons; + + var buttonsWidth = sizeZoom.width + spaceBetween + sizeLink.width; + var buttonsX = Math.floor((sizeTile.width - buttonsWidth) / 2); + + //trace("X: "+buttonsX+" "+"space: " + spaceBetween); + + //if space more then padding, calc even space. + if(buttonsX < spaceBetween){ + spaceBetween = Math.floor((sizeTile.width - sizeZoom.width - sizeLink.width) / 3); + buttonsWidth = sizeZoom.width + spaceBetween + sizeLink.width; + buttonsX = Math.floor((sizeTile.width - buttonsWidth) / 2); + } + + g_functions.placeElement(objButtonZoom, buttonsX, "middle", 0 ,gapVert); + g_functions.placeElement(objButtonLink, buttonsX + sizeZoom.width + spaceBetween, "middle", 0, gapVert); + + }else{ + + if(objButtonZoom) + g_functions.placeElement(objButtonZoom, "center", "middle", 0, gapVert); + + if(objButtonLink) + g_functions.placeElement(objButtonLink, "center", "middle", 0, gapVert); + + } + + if(objButtonZoom) + objButtonZoom.show(); + + if(objButtonLink) + objButtonLink.show(); + } + + + /** + * set tiles htmls + */ + this.setHtml = function(objParent){ + g_objParentWrapper = objParent; + + modifyOptionsBeforeRender(); + + g_thumbs.setHtmlThumbs(objParent); + } + + + /** + * set the overlay effect + */ + function setImageOverlayEffect(objTile, isActive){ + + var objItem = t.getItemByTile(objTile); + var objOverlayImage = getTileOverlayImage(objTile); + + var animationDuration = g_options.thumb_transition_duration; + + if(g_options.tile_image_effect_reverse == false){ + + var objThumbImage = t.getTileImage(objTile); + + if(isActive){ + objThumbImage.fadeTo(0,1); + objOverlayImage.stop(true).fadeTo(animationDuration, 0); + } + else + objOverlayImage.stop(true).fadeTo(animationDuration, 1); + + }else{ + + if(isActive){ + objOverlayImage.stop(true).fadeTo(animationDuration, 1); + } + else{ + objOverlayImage.stop(true).fadeTo(animationDuration, 0); + } + } + + } + + + /** + * set textpanel effect + */ + function setTextpanelEffect(objTile, isActive){ + + var animationDuration = g_options.thumb_transition_duration; + + var objTextPanel = getTextPanelElement(objTile); + if(!objTextPanel) + return(true); + + if(g_options.tile_textpanel_appear_type == "slide"){ + + var panelSize = g_functions.getElementSize(objTextPanel); + if(panelSize.width == 0) + return(false); + + var startPos = -panelSize.height; + var endPos = 0; + var startClass = {}, endClass = {}; + + var posName = "bottom"; + if(g_options.tile_textpanel_position == "inside_top") + posName = "top"; + + startClass[posName] = startPos+"px"; + endClass[posName] = endPos+"px"; + + if(isActive == true){ + + objTextPanel.fadeTo(0,1); + + if(objTextPanel.is(":animated") == false) + objTextPanel.css(startClass); + + endClass["opacity"] = 1; + + objTextPanel.stop(true).animate(endClass, animationDuration); + + }else{ + + objTextPanel.stop(true).animate(startClass, animationDuration); + + } + + }else{ //fade effect + + if(isActive == true){ + objTextPanel.stop(true).fadeTo(animationDuration, 1); + }else{ + objTextPanel.stop(true).fadeTo(animationDuration, 0); + } + + } + + } + + + /** + * set thumb border effect + */ + function setIconsEffect(objTile, isActive, noAnimation){ + + var animationDuration = g_options.thumb_transition_duration; + if(noAnimation && noAnimation === true) + animationDuration = 0; + + var g_objIconZoom = getButtonZoom(objTile); + var g_objIconLink = getButtonLink(objTile); + var opacity = isActive?1:0; + + if(g_objIconZoom) + g_objIconZoom.stop(true).fadeTo(animationDuration, opacity); + + if(g_objIconLink) + g_objIconLink.stop(true).fadeTo(animationDuration, opacity); + + } + + + + /** + * set tile over style + */ + function setOverStyle(data, objTile){ + + objTile = jQuery(objTile); + + if(g_options.tile_enable_image_effect) + setImageOverlayEffect(objTile, true); + + if(g_options.tile_enable_textpanel == true && g_options.tile_textpanel_always_on == false && g_temp.isTextPanelHidden == false) + setTextpanelEffect(objTile, true); + + //show/hide icons - if saparate (if not, they are part of the overlay) + //if the type is video and icon always on - the icon should stay + if(g_temp.isSaparateIcons && g_options.tile_enable_icons == true){ + var isSet = (g_options.thumb_overlay_reverse == true); + + var objItem = t.getItemByTile(objTile); + if(isItemIconAlwaysOn(objItem) == false) + setIconsEffect(objTile, isSet, false); + + } + + } + + + /** + * set normal style + */ + function setNormalStyle(data, objTile){ + + objTile = jQuery(objTile); + + if(g_options.tile_enable_image_effect) + setImageOverlayEffect(objTile, false); + + if(g_options.tile_enable_textpanel == true && g_options.tile_textpanel_always_on == false) + setTextpanelEffect(objTile, false); + + //show/hide icons - if saparate (if not, they are part of the overlay) + if(g_temp.isSaparateIcons == true && g_options.tile_enable_icons == true){ + + var isSet = (g_options.thumb_overlay_reverse == true)?false:true; + + var objItem = t.getItemByTile(objTile); + if(isItemIconAlwaysOn(objItem) == false) + setIconsEffect(objTile, isSet, false); + else{ //make icon always appear + setIconsEffect(objTile, true, true); + } + + } + + } + + + /** + * set all tiles normal style + */ + function setAllTilesNormalStyle(objTileExcept){ + + var objTiles = g_thumbs.getThumbs().not(objTileExcept); + objTiles.each(function(index, objTile){ + g_thumbs.setThumbNormalStyle(jQuery(objTile)); + }); + + } + + + function _________________EVENTS________________(){}; + + + /** + * on tile size change, place elements + */ + function onSizeChange(data, objTile, forcePosition){ + + objTile = jQuery(objTile); + + //position elements only if the image loaded (placed) + if(g_options.tile_visible_before_image == true && objTile.data("image_placed") !== true && forcePosition !== true) + return(true); + + positionElements(objTile); + + g_thumbs.setThumbNormalStyle(objTile); + } + + + /** + * on place image event after images loaded + */ + function onPlaceImage(data, objTile, objImage){ + + positionElements(objTile); + objImage.fadeTo(0,1); + + objTile.data("image_placed", true); + } + + + /** + * on tile click on mobile devices on normal state + * set the tile over state + */ + function onMobileClick(objTile){ + + if(isTileClickable(objTile) == true){ + g_objThis.trigger(t.events.TILE_CLICK, objTile); + return(true); + } + + if(isOverStyle(objTile) == false){ + setAllTilesNormalStyle(objTile); + g_thumbs.setThumbOverStyle(objTile); + } + + } + + + /** + * on tile click event + */ + function onTileClick(event){ + + var objTile = jQuery(this); + + var tagname = objTile.prop("tagName").toLowerCase(); + var isApproved = true; + if(g_temp.funcParentApproveClick && g_temp.funcParentApproveClick() == false) + isApproved = false; + + if(tagname == "a"){ + + if(isApproved == false) + event.preventDefault(); + + }else{ //in case of div + + if(isOverStyle(objTile) == false){ //mobile click version + + if(isApproved == true) + onMobileClick(objTile); + + }else{ + if(isTileClickable(objTile) == false) + return(true); + + if(isApproved == true) + g_objThis.trigger(t.events.TILE_CLICK, objTile); + } + + + } + + } + + + /** + * click on zoom button (as tile click) + */ + function onZoomButtonClick(event){ + + event.stopPropagation(); + + var objTile = jQuery(this).parents(".ug-tile"); + + var isApproved = true; + + if(g_temp.funcParentApproveClick && g_temp.funcParentApproveClick() == false) + isApproved = false; + + if(isOverStyle(objTile) == false){ + onMobileClick(objTile); + return(true); + } + + if(isApproved == true){ + g_objThis.trigger(t.events.TILE_CLICK, objTile); + return(false); + } + + } + + + /** + * on link icon click + */ + function onLinkButtonClick(event){ + var objTile = jQuery(this).parents(".ug-tile"); + + if(g_temp.funcParentApproveClick && g_temp.funcParentApproveClick() == false) + event.preventDefault(); + + //allow click only from over style + if(isOverStyle(objTile) == false && g_options.tile_as_link == false){ + event.preventDefault(); + onMobileClick(objTile); + } + + } + + + /** + * init events + */ + this.initEvents = function(){ + + g_thumbs.initEvents(); + + //connect the over and normal style of the regular thumbs + jQuery(g_thumbs).on(g_thumbs.events.SETOVERSTYLE, setOverStyle); + jQuery(g_thumbs).on(g_thumbs.events.SETNORMALSTYLE, setNormalStyle); + jQuery(g_thumbs).on(g_thumbs.events.PLACEIMAGE, onPlaceImage); + + g_objWrapper.on(g_temp.eventSizeChange, onSizeChange); + + g_objParentWrapper.delegate(".ug-tile .ug-button-play", "click", onZoomButtonClick); + + g_objParentWrapper.delegate(".ug-tile", "click", onTileClick); + + g_objParentWrapper.delegate(".ug-tile .ug-icon-link", "click", onLinkButtonClick); + } + + + /** + * destroy the element events + */ + this.destroy = function(){ + + jQuery(g_thumbs).off(g_thumbs.events.SETOVERSTYLE); + jQuery(g_thumbs).off(g_thumbs.events.SETNORMALSTYLE); + jQuery(g_thumbs).off(g_thumbs.events.PLACEIMAGE); + g_objWrapper.off(g_temp.eventSizeChange); + + if(g_options.tile_enable_textpanel == true){ + var objThumbs = g_thumbs.getThumbs(); + jQuery.each(objThumbs, function(index, thumb){ + var textPanel = getTextPanel(jQuery(thumb)); + if(textPanel) + textPanel.destroy(); + }); + } + + g_thumbs.destroy(); + + } + + + /** + * external init + */ + this.init = function(gallery, g_thumbs, customOptions){ + + init(gallery, g_thumbs, customOptions); + } + + /** + * set fixed mode + */ + this.setFixedMode = function(){ + + g_options.tile_size_by = t.sizeby.GLOBAL_RATIO; + g_options.tile_visible_before_image = true; + } + + + /** + * set parent approve click function + */ + this.setApproveClickFunction = function(funcApprove){ + g_temp.funcParentApproveClick = funcApprove; + } + + + + /** + * resize tile. If no size given, resize to original size + * the resize mode taken from resize modes constants, default is full + */ + this.resizeTile = function(objTile, newWidth, newHeight, resizeMode){ + + //if textpanel outside - refresh the textpanel first + if(g_temp.isTextpanelOutside == true) + positionElements_textpanel(objTile, "clone", newWidth); + + if(!newWidth){ + + var newWidth = g_options.tile_width; + var newHeight = g_options.tile_height; + + }else{ //only height is missing + if(!newHeight){ + + var newHeight = t.getTileHeightByWidth(newWidth, objTile, "resizeTile"); + } + } + + g_functions.setElementSize(objTile, newWidth, newHeight); + + switch(resizeMode){ + default: + case t.resizemode.FULL: + t.triggerSizeChangeEvent(objTile, true); + break; + case t.resizemode.WRAPPER_ONLY: + return(true); + break; + case t.resizemode.VISIBLE_ELEMENTS: + + if(g_temp.funcCustomTileHtml){ + t.triggerSizeChangeEvent(objTile, true); + return(true); + } + + //resize images + positionElements_images(objTile, newWidth, newHeight, true); + + //resize text panel, if visible + if(g_options.tile_enable_textpanel == true && g_options.tile_textpanel_always_on == true && newWidth){ + positionElements_textpanel(objTile, "regular", newWidth, newHeight); + } + + break; + } + + } + + + /** + * resize all tiles + */ + this.resizeAllTiles = function(newWidth, resizeMode){ + + modifyOptionsBeforeRender(); + + var newHeight = null; + + if(g_options.tile_size_by == t.sizeby.GLOBAL_RATIO) + newHeight = t.getTileHeightByWidth(newWidth,null,"resizeAllTiles"); + + var objTiles = g_thumbs.getThumbs(); + objTiles.each(function(index, objTile){ + t.resizeTile(jQuery(objTile), newWidth, newHeight, resizeMode); + }); + + } + + + /** + * trigger size change events + * the force is only for fixed size mode + */ + this.triggerSizeChangeEvent = function(objTile, isForce){ + + if(!objTile) + return(false); + + if(!isForce) + var isForce = false; + + g_objWrapper.trigger(g_temp.eventSizeChange, [objTile, isForce]); + + } + + + /** + * trigger size change event to all tiles + * the force is only for fixed mode + */ + this.triggerSizeChangeEventAllTiles = function(isForce){ + + var objThumbs = g_thumbs.getThumbs(); + + objThumbs.each(function(){ + var objTile = jQuery(this); + + t.triggerSizeChangeEvent(objTile, isForce); + + }); + + } + + + + + + /** + * disable all events + */ + this.disableEvents = function(){ + var objThumbs = g_thumbs.getThumbs(); + objThumbs.css("pointer-events", "none"); + } + + + /** + * enable all events + */ + this.enableEvents = function(){ + var objThumbs = g_thumbs.getThumbs(); + objThumbs.css("pointer-events", "auto"); + } + + /** + * set new options + */ + this.setOptions = function(newOptions){ + g_options = jQuery.extend(g_options, newOptions); + g_thumbs.setOptions(newOptions); + } + + + /** + * set new tile size, this function will not resize, and keep ratio + */ + this.setTileSizeOptions = function(newTileWidth){ + + if(g_options.tile_size_by !== t.sizeby.GLOBAL_RATIO) + throw new Error("setNewTileOptions works with global ration only"); + + g_options.tile_width = newTileWidth; + g_options.tile_height = Math.floor(newTileWidth * g_temp.ratioByHeight); + + + } + + + /** + * set custom tile html function + */ + this.setCustomFunctions = function(funcCustomHtml, funcPositionElements){ + g_temp.funcCustomTileHtml = funcCustomHtml; + g_temp.funcCustomPositionElements = funcPositionElements; + } + + + /** + * run the tile design + */ + this.run = function(){ + + //resize all tiles + var objThumbs = g_thumbs.getThumbs(); + + if(g_options.tile_size_by == t.sizeby.GLOBAL_RATIO){ + t.resizeAllTiles(g_options.tile_width, t.resizemode.WRAPPER_ONLY); + } + + //hide original image if image effect active + if(g_options.tile_enable_image_effect == true && g_options.tile_image_effect_reverse == false) + objThumbs.children(".ug-thumb-image").fadeTo(0,0); + + g_thumbs.setHtmlProperties(); + + if(g_options.tile_visible_before_image == true){ + + //if textpanel outside - refresh the textpanel first + objThumbs.children(".ug-thumb-image").fadeTo(0,0); + g_thumbs.loadThumbsImages(); + } + + } + + + this._____________EXTERNAL_GETTERS____________=function(){}; + + + /** + * get thumbs general option + */ + this.getObjThumbs = function(){ + return g_thumbs; + } + + /** + * get options + */ + this.getOptions = function(){ + return g_options; + } + + /** + * get tile image + */ + this.getTileImage = function(objTile){ + var objImage = objTile.find("img.ug-thumb-image"); + return(objImage); + } + + + /** + * get item from tile + */ + this.getItemByTile = function(objTile){ + return g_thumbs.getItemByThumb(objTile); + } + + + /** + * get tile height by width + */ + this.getTileHeightByWidth = function(newWidth, objTile, fromWhere){ + + var ratio = getTileRatio(objTile, fromWhere); + + if(ratio === null) + return(null); + + var height = Math.floor( (newWidth - g_temp.tileInnerReduce) * ratio) + g_temp.tileInnerReduce; + + if(objTile && g_temp.isTextpanelOutside == true && g_options.tile_size_by == t.sizeby.IMAGE_RATIO) + height += getTextPanelHeight(objTile); + + return(height); + } + + + /** + * get tile original size + */ + this.getTileImageSize = function(objTile){ + var objItem = t.getItemByTile(objTile); + if(!objItem.thumbWidth || !objItem.thumbHeight) + throw new Error("Can't get image size - image not inited."); + + var objSize = { + width: objItem.thumbWidth, + height: objItem.thumbHeight + }; + + return(objSize); + } + + + /** + * get tile size + */ + this.getGlobalTileSize = function(){ + + if(g_options.tile_size_by != t.sizeby.GLOBAL_RATIO) + throw new Error("The size has to be global ratio"); + + var objSize = { + width: g_options.tile_width, + height: g_options.tile_height + }; + + return(objSize); + } + + +} + +/** + * avia control class + * addon to strip gallery + */ +function UGAviaControl(){ + + var g_parent, g_gallery, g_objects, g_objStrip, g_objStripInner, g_options; + var g_isVertical; + + var g_temp = { + touchEnabled:false, //variable that tells if touch event was before move event + isMouseInsideStrip: false, + strip_finalPos:0, + handle_timeout:"", + isStripMoving:false, + isControlEnabled: true + }; + + + /** + * enable the control + */ + this.enable = function(){ + g_temp.isControlEnabled = true; + } + + /** + * disable the control + */ + this.disable = function(){ + g_temp.isControlEnabled = false; + } + + /** + * init function for avia controls + */ + this.init = function(objParent){ + g_parent = objParent; + + g_objects = objParent.getObjects(); + + g_gallery = g_objects.g_gallery; + + g_objStrip = g_objects.g_objStrip; + g_objStripInner = g_objects.g_objStripInner; + g_options = g_objects.g_options; + g_isVertical = g_objects.isVertical; + + initEvents(); + } + + /** + * get mouse position from event according the orientation + */ + function getMousePos(event){ + + if(g_isVertical == false) + return(event.pageX); + + return(event.pageY); + } + + /** + * handle avia strip control event on body mouse move + */ + function initEvents(event){ + + //make sure that the avia control will not work on touch devices + jQuery("body").on("touchstart", function(event){ + + if(g_temp.isControlEnabled == false) + return(true); + + g_temp.touchEnabled = true; + + }); + + //on body move + jQuery("body").mousemove(function(event){ + + if(g_temp.isControlEnabled == false) + return(true); + + //protection for touch devices, disable the avia events + if(g_temp.touchEnabled == true){ + jQuery("body").off("mousemove"); + return(true); + } + + g_temp.isMouseInsideStrip = g_objStrip.ismouseover(); + var strip_touch_active = g_parent.isTouchMotionActive(); + + if(g_temp.isMouseInsideStrip == true && strip_touch_active == false){ + + var mousePos = getMousePos(event); + + moveStripToMousePosition(mousePos); + }else{ + stopStripMovingLoop(); + } + + }); + + } + + + /** + * destroy the avia control events + */ + this.destroy = function(){ + + jQuery("body").off("touchstart"); + jQuery("body").off("mousemove"); + + } + + + /** + * get inner y position according mouse y position on the strip + */ + function getInnerPosY(mouseY){ + + var innerOffsetTop = g_options.strip_padding_top; + var innerOffsetBottom = g_options.strip_padding_bottom; + + var stripHeight = g_objStrip.height(); + var innerHeight = g_objStripInner.height(); + + //if all thumbs visible, no need to move + if(stripHeight > innerHeight) + return(null); + + //find y position inside the strip + var stripOffset = g_objStrip.offset(); + var offsetY = stripOffset.top; + var posy = mouseY - offsetY - innerOffsetTop; + if(posy < 0) + return(null); + + //set measure line parameters + var mlineStart = g_options.thumb_height; + var mlineEnd = stripHeight - g_options.thumb_height; + var mLineSize = mlineEnd - mlineStart; + + //fix position borders on the measure line + if(posy < mlineStart) + posy = mlineStart; + + if(posy > mlineEnd) + posy = mlineEnd; + + //count the ratio of the position on the measure line + var ratio = (posy - mlineStart) / mLineSize; + var innerPosY = (innerHeight - stripHeight) * ratio; + innerPosY = Math.round(innerPosY) * -1 + innerOffsetTop; + + return(innerPosY); + } + + + /** + * get inner x position according mouse x position on the strip + */ + function getInnerPosX(mouseX){ + + var innerOffsetLeft = g_options.strip_padding_left; + var innerOffsetRight = g_options.strip_padding_right; + + var stripWidth = g_objStrip.width() - innerOffsetLeft - innerOffsetRight; + var innerWidth = g_objStripInner.width(); + + //if all thumbs visible, no need to move + if(stripWidth > innerWidth) + return(null); + + var stripOffset = g_objStrip.offset(); + var offsetX = stripOffset.left; + var posx = mouseX - offsetX - innerOffsetLeft; + + //set measure line parameters + var mlineStart = g_options.thumb_width; + var mlineEnd = stripWidth - g_options.thumb_width; + var mLineSize = mlineEnd - mlineStart; + + //fix position borders on the measure line + if(posx < mlineStart) + posx = mlineStart; + + if(posx > mlineEnd) + posx = mlineEnd; + + //count the ratio of the position on the measure line + var ratio = (posx - mlineStart) / mLineSize; + var innerPosX = (innerWidth - stripWidth) * ratio; + innerPosX = Math.round(innerPosX) * -1 + innerOffsetLeft; + + + return(innerPosX); + } + + + /** + * move strip stap to final position + */ + function moveStripStep(){ + + if(g_temp.is_strip_moving == false){ + return(false); + } + + var innerPos = g_parent.getInnerStripPos(); + + if(Math.floor(innerPos) == Math.floor(g_temp.strip_finalPos)){ + stopStripMovingLoop(); + } + + //calc step + var diff = Math.abs(g_temp.strip_finalPos - innerPos); + + var dpos; + if(diff < 1){ + dpos = diff; + } + else{ + + dpos = diff / 4; + if(dpos > 0 && dpos < 1) + dpos = 1; + } + + if(g_temp.strip_finalPos < innerPos) + dpos = dpos * -1; + + var newPos = innerPos + dpos; + + g_parent.positionInnerStrip(newPos); + + } + + + /** + * start loop of strip moving + */ + function startStripMovingLoop(){ + + if(g_temp.isStripMoving == true) + return(false); + + g_temp.isStripMoving = true; + g_temp.handle_timeout = setInterval(moveStripStep,10); + } + + /** + * stop loop of strip moving + */ + function stopStripMovingLoop(){ + + if(g_temp.isStripMoving == false) + return(false); + + g_temp.isStripMoving = false; + g_temp.handle_timeout = clearInterval(g_temp.handle_timeout); + } + + /** + * get inner position according the orientation + * taken by the mouse position + */ + function getInnerPos(mousePos){ + + if(g_isVertical == false) + return getInnerPosX(mousePos); + else + return getInnerPosY(mousePos); + + } + + + /** + * move the strip to mouse position on it + * mousex - mouse position relative to the document + */ + function moveStripToMousePosition(mousePos){ + + var innerPos = getInnerPos(mousePos); + + if(innerPos === null) + return(false); + + g_temp.is_strip_moving = true; + g_temp.strip_finalPos = innerPos; + + startStripMovingLoop(); + } + +} + +/** + * slider class + * addon to strip gallery + */ +function UGSlider(){ + + var t = this, g_objThis = jQuery(t); + var g_gallery = new UniteGalleryMain(), g_objGallery, g_objWrapper, g_objThumbs; + //the video arrows is independent arrows that is not sitting on the controls + var g_objSlider, g_objInner, g_objSlide1, g_objSlide2, g_objSlide3, g_objArrowLeft, g_objArrowRight; + var g_objTouchSlider, g_objZoomSlider, g_objZoomPanel, g_objButtonPlay = null, g_objButtonFullscreen = null, g_objBullets = null; + var g_objVideoPlayer = new UGVideoPlayer(), g_optionsPrefix; + var g_functions = new UGFunctions(), g_objProgress = null, g_objTextPanel = null; + + + this.events = { + ITEM_CHANGED: "item_changed", //on item changed + BEFORE_SWITCH_SLIDES: "before_switch", //before slides switching + BEFORE_RETURN: "before_return", //before return from pan or from zoom + AFTER_RETURN: "after_return", //after return from pan or from zoom + ZOOM_START: "slider_zoom_start", //on zoom start + ZOOM_END: "slider_zoom_end", //on zoom move + ZOOMING: "slider_zooming", //on zooming + ZOOM_CHANGE: "slider_zoom_change", //on slide image image zoom change + START_DRAG: "start_drag", //on slider drag start + AFTER_DRAG_CHANGE: "after_drag_change", //after finish drag chagne transition + ACTION_START: "action_start", //on slide action start + ACTION_END: "action_end", //on slide action stop + CLICK: "slider_click", //on click event + TRANSITION_START:"slider_transition_start", //before transition start event + TRANSITION_END:"slider_transition_end", //on transition end event + AFTER_PUT_IMAGE: "after_put_image", //after put slide image + IMAGE_MOUSEENTER: "slider_image_mouseenter", //on slide image mouseonter + IMAGE_MOUSELEAVE: "slider_image_mouseleave", //on slide image mouseleave + CURRENTSLIDE_LOAD_START: "slider_current_loadstart", //on current slide load image start + CURRENTSLIDE_LOAD_END: "slider_current_loadend" //on finish load current slide image + } + + var g_options = { + slider_scale_mode: "fill", //fit: scale down and up the image to always fit the slider + //down: scale down only, smaller images will be shown, don't enlarge images (scale up) + //fill: fill the entire slider space by scaling, cropping and centering the image + //fitvert: make the image always fill the vertical slider area + slider_scale_mode_media: "fill", //fill, fit, down, fitvert - scale mode on media items + slider_scale_mode_fullscreen: "down", //fill, fit, down, fitvert - scale mode on fullscreen. + + slider_item_padding_top: 0, //padding top of the slider item + slider_item_padding_bottom: 0, //padding bottom of the slider item + slider_item_padding_left: 0, //padding left of the slider item + slider_item_padding_right: 0, //padding right of the slider item + + slider_background_color: "", //slider background color, set if you want to change default + slider_background_opacity: 1, //slider background opacity + + slider_image_padding_top: 0, //padding top of the image inside the item + slider_image_padding_bottom: 0, //padding bottom of the image inside the item + slider_image_padding_left: 0, //padding left of the image inside the item + slider_image_padding_right: 0, //padding right of the image inside the item + + slider_image_border: false, //enable border around the image + slider_image_border_width: 10, //image border width + slider_image_border_color: "#ffffff", //image border color + slider_image_border_radius: 0, //image border radius + slider_image_border_maxratio: 0.35, //max ratio that the border can take from the image + slider_image_shadow: false, //enable border shadow the image + + slider_video_constantsize: false, //constant video size mode for video items + slider_video_constantsize_scalemode: "fit", //fit,down: constant video size scale mode + slider_video_constantsize_width: 854, //constant video size width + slider_video_constantsize_height: 480, //constant video size height + + slider_video_padding_top: 0, //padding top of the video player inside the item + slider_video_padding_bottom: 0, //padding bottom of the video player inside the item + slider_video_padding_left: 0, //padding left of the video player inside the item + slider_video_padding_right: 0, //padding right of the video player inside the item + + slider_video_enable_closebutton: true, //enable video close button + + slider_transition: "slide", //fade, slide - the transition of the slide change + slider_transition_speed:300, //transition duration of slide change + slider_transition_easing: "easeInOutQuad", //transition easing function of slide change + + slider_control_swipe:true, //true,false - enable swiping control + slider_control_zoom:true, //true, false - enable zooming control + slider_zoom_mousewheel: true, //enable zoom on mousewheel + slider_vertical_scroll_ondrag: false, //vertical scroll on slider area drag + slider_loader_type: 1, //shape of the loader (1-7) + slider_loader_color:"white", //color of the loader: (black , white) + slider_enable_links: true, //enable slide as link functionality + slider_links_newpage: false, //open the slide link in new page + + slider_enable_bullets: false, //enable the bullets onslider element + slider_bullets_skin: "", //skin of the bullets, if empty inherit from gallery skin + slider_bullets_space_between: -1, //set the space between bullets. If -1 then will be set default space from the skins + slider_bullets_align_hor:"center", //left, center, right - bullets horizontal align + slider_bullets_align_vert:"bottom", //top, middle, bottom - bullets vertical algin + slider_bullets_offset_hor:0, //bullets horizontal offset + slider_bullets_offset_vert:10, //bullets vertical offset + + slider_enable_arrows: true, //enable arrows onslider element + slider_arrows_skin: "", //skin of the slider arrows, if empty inherit from gallery skin + + slider_arrow_left_align_hor:"left", //left, center, right - left arrow horizonal align + slider_arrow_left_align_vert:"middle", //top, middle, bottom - left arrow vertical align + slider_arrow_left_offset_hor:20, //left arrow horizontal offset + slider_arrow_left_offset_vert:0, //left arrow vertical offset + + slider_arrow_right_align_hor:"right", //left, center, right - right arrow horizontal algin + slider_arrow_right_align_vert:"middle", //top, middle, bottom - right arrow vertical align + slider_arrow_right_offset_hor:20, //right arrow horizontal offset + slider_arrow_right_offset_vert:0, //right arrow vertical offset + + slider_enable_progress_indicator: true, //enable progress indicator element + slider_progress_indicator_type: "pie", //pie, pie2, bar (if pie not supported, it will switch to bar automatically) + slider_progress_indicator_align_hor:"right", //left, center, right - progress indicator horizontal align + slider_progress_indicator_align_vert:"top", //top, middle, bottom - progress indicator vertical align + slider_progress_indicator_offset_hor:10, //progress indicator horizontal offset + slider_progress_indicator_offset_vert:10, //progress indicator vertical offset + + slider_enable_play_button: true, //true,false - enable play / pause button onslider element + slider_play_button_skin: "", //skin of the slider play button, if empty inherit from gallery skin + slider_play_button_align_hor:"left", //left, center, right - play button horizontal align + slider_play_button_align_vert:"top", //top, middle, bottom - play button vertical align + slider_play_button_offset_hor:40, //play button horizontal offset + slider_play_button_offset_vert:8, //play button vertical offset + slider_play_button_mobilehide:false, //hide the play button on mobile + + slider_enable_fullscreen_button: true, //true,false - enable fullscreen button onslider element + slider_fullscreen_button_skin: "", //skin of the slider fullscreen button, if empty inherit from gallery skin + slider_fullscreen_button_align_hor:"left", //left, center, right - fullscreen button horizonatal align + slider_fullscreen_button_align_vert:"top", //top, middle, bottom - fullscreen button vertical align + slider_fullscreen_button_offset_hor:11, //fullscreen button horizontal offset + slider_fullscreen_button_offset_vert:9, //fullscreen button vertical offset + slider_fullscreen_button_mobilehide:false, //hide the button on mobile + + slider_enable_zoom_panel: true, //true,false - enable the zoom buttons, works together with zoom control. + slider_zoompanel_skin: "", //skin of the slider zoom panel, if empty inherit from gallery skin + slider_zoompanel_align_hor:"left", //left, center, right - zoom panel horizontal align + slider_zoompanel_align_vert:"top", //top, middle, bottom - zoom panel vertical align + slider_zoompanel_offset_hor:12, //zoom panel horizontal offset + slider_zoompanel_offset_vert:92, //zoom panel vertical offset + slider_zoompanel_mobilehide:false, //hide the zoom panel on mobile + + slider_controls_always_on: false, //true,false - controls are always on, false - show only on mouseover + slider_controls_appear_ontap: true, //true,false - appear controls on tap event on touch devices + slider_controls_appear_duration: 300, //the duration of appearing controls + + slider_enable_text_panel: true, //true,false - enable the text panel + slider_textpanel_always_on: true, //true,false - text panel are always on, false - show only on mouseover + + slider_videoplay_button_type: "square" //square, round - the videoplay button type, square or round + }; + + + //default options for bar progress incicator + var g_defaultsProgressBar = { + slider_progress_indicator_align_hor:"left", //left, center, right + slider_progress_indicator_align_vert:"bottom", //top, middle, bottom + slider_progress_indicator_offset_hor:0, //horizontal offset + slider_progress_indicator_offset_vert:0 //vertical offset + }; + + var g_temp = { + isRunOnce: false, + isTextPanelSaparateHover: false, //if the panel need to be appeared without the controls object on mouseover + numPrev:1, + numCurrent:2, + numNext: 3, + isControlsVisible: true, + currentControlsMode: "image" + }; + + function __________GENERAL___________(){}; + + + /** + * init the slider + */ + function initSlider(objGallery, objOptions, optionsPrefix){ + g_gallery = objGallery; + + //change options by prefix + if(optionsPrefix){ + g_optionsPrefix = optionsPrefix; + objOptions = g_functions.convertCustomPrefixOptions(objOptions, g_optionsPrefix, "slider"); + } + + g_objGallery = jQuery(objGallery); + + var objects = g_gallery.getObjects(); + g_objWrapper = objects.g_objWrapper; + g_objThumbs = objects.g_objThumbs; + + //set progress indicator bar defaults if type bar + if(objOptions.hasOwnProperty("slider_progress_indicator_type")) + g_options.slider_progress_indicator_type = objOptions.slider_progress_indicator_type; + + if(g_options.slider_progress_indicator_type == "bar"){ + g_options = jQuery.extend(g_options, g_defaultsProgressBar); + } + + if(objOptions) + t.setOptions(objOptions); + + processOptions(); + + //init bullets: + if(g_options.slider_enable_bullets == true){ + g_objBullets = new UGBullets(); + var bulletsOptions = { + bullets_skin: g_options.slider_bullets_skin, + bullets_space_between: g_options.slider_bullets_space_between + } + g_objBullets.init(g_gallery, bulletsOptions); + } + + //init text panel + if(g_options.slider_enable_text_panel){ + g_objTextPanel = new UGTextPanel(); + g_objTextPanel.init(g_gallery, g_options, "slider"); + } + + if(g_options.slider_enable_zoom_panel){ + g_objZoomPanel = new UGZoomButtonsPanel(); + g_objZoomPanel.init(t, g_options); + } + + var galleryID = g_gallery.getGalleryID(); + + //init video player + g_objVideoPlayer.init(g_options, false, galleryID); + } + + + /** + * run the slider functionality + */ + function runSlider(){ + + if(g_temp.isRunOnce == true) + return(false); + + g_temp.isRunOnce = true; + + //set background color + if(g_options.slider_background_color){ + var bgColor = g_options.slider_background_color; + + if(g_options.slider_background_opacity != 1) + bgColor = g_functions.convertHexToRGB(bgColor, g_options.slider_background_opacity); + + g_objSlider.css("background-color", bgColor); + + }else if(g_options.slider_background_opacity != 1){ //set opacity with default color + + bgColor = g_functions.convertHexToRGB("#000000", g_options.slider_background_opacity); + g_objSlider.css("background-color", bgColor); + + } + + //init touch slider control + if(g_options.slider_control_swipe == true){ + g_objTouchSlider = new UGTouchSliderControl(); + g_objTouchSlider.init(t, g_options); + } + + //init zoom slider control + if(g_options.slider_control_zoom == true){ + g_objZoomSlider = new UGZoomSliderControl(); + g_objZoomSlider.init(t, g_options); + } + + //run the text panel + if(g_objTextPanel) + g_objTextPanel.run(); + + initEvents(); + } + + + /** + * process the options + */ + function processOptions(){ + var galleryOptions = g_gallery.getOptions(); + + //set skins: + var globalSkin = galleryOptions.gallery_skin; + + if(g_options.slider_bullets_skin == "") + g_options.slider_bullets_skin = globalSkin; + + if(g_options.slider_arrows_skin == "") + g_options.slider_arrows_skin = globalSkin; + + if(g_options.slider_zoompanel_skin == "") + g_options.slider_zoompanel_skin = globalSkin; + + if(g_options.slider_play_button_skin == "") + g_options.slider_play_button_skin = globalSkin; + + if(g_options.slider_fullscreen_button_skin == "") + g_options.slider_fullscreen_button_skin = globalSkin; + + g_options.video_enable_closebutton = g_options.slider_video_enable_closebutton; + + //set mousewheel option depends on the gallery option + if(galleryOptions.gallery_mousewheel_role != "zoom") + g_options.slider_zoom_mousewheel = false; + + } + + + /** + * + * get html slide + */ + function getHtmlSlide(loaderClass, numSlide){ + + var classVideoplay = "ug-type-square"; + if(g_options.slider_videoplay_button_type == "round") + classVideoplay = "ug-type-round"; + + var html = ""; + html += "<div class='ug-slide-wrapper ug-slide"+numSlide+"'>"; + html += "<div class='ug-item-wrapper'></div>"; + html += "<div class='ug-slider-preloader "+loaderClass+"'></div>"; + html += "<div class='ug-button-videoplay "+classVideoplay+"' style='display:none'></div>"; + html += "</div>"; + + return(html); + } + + + /** + * set the slider html + */ + function setHtmlSlider(objParent){ + + if(objParent) + g_objWrapper = objParent; + + //get if the slide has controls + var loaderClass = getLoaderClass(); + var galleryOptions = g_gallery.getOptions(); + + var html = "<div class='ug-slider-wrapper'>"; + + html += "<div class='ug-slider-inner'>"; + html += getHtmlSlide(loaderClass,1); + html += getHtmlSlide(loaderClass,2); + html += getHtmlSlide(loaderClass,3); + + html += "</div>"; //end inner + + //---------------- + + //add arrows + if(g_options.slider_enable_arrows == true){ + html += "<div class='ug-slider-control ug-arrow-left ug-skin-"+g_options.slider_arrows_skin+"'></div>"; + html += "<div class='ug-slider-control ug-arrow-right ug-skin-"+g_options.slider_arrows_skin+"'></div>"; + } + + //add play button + if(g_options.slider_enable_play_button == true){ + html += "<div class='ug-slider-control ug-button-play ug-skin-"+g_options.slider_play_button_skin+"'></div>"; + } + + //add fullscreen button + if(g_options.slider_enable_fullscreen_button == true){ + html += "<div class='ug-slider-control ug-button-fullscreen ug-skin-"+g_options.slider_fullscreen_button_skin+"'></div>"; + } + + + html += "</div>"; //end slider + + + g_objWrapper.append(html); + + //---------------- + + //set objects + g_objSlider = g_objWrapper.children(".ug-slider-wrapper"); + g_objInner = g_objSlider.children(".ug-slider-inner"); + + + g_objSlide1 = g_objInner.children(".ug-slide1"); + g_objSlide2 = g_objInner.children(".ug-slide2"); + g_objSlide3 = g_objInner.children(".ug-slide3"); + + //set slides data + g_objSlide1.data("slidenum",1); + g_objSlide2.data("slidenum",2); + g_objSlide3.data("slidenum",3); + + //add bullets + if(g_objBullets) + g_objBullets.appendHTML(g_objSlider); + + //---------------- + + //get arrows object + if(g_options.slider_enable_arrows == true){ + g_objArrowLeft = g_objSlider.children(".ug-arrow-left"); + g_objArrowRight = g_objSlider.children(".ug-arrow-right"); + } + + //get play button + if(g_options.slider_enable_play_button == true){ + g_objButtonPlay = g_objSlider.children(".ug-button-play"); + } + + //get fullscreen button + if(g_options.slider_enable_fullscreen_button == true){ + g_objButtonFullscreen = g_objSlider.children(".ug-button-fullscreen"); + } + + + //---------------- + + //add progress indicator + if(g_options.slider_enable_progress_indicator == true){ + + g_objProgress = g_functions.initProgressIndicator(g_options.slider_progress_indicator_type, g_options, g_objSlider); + + var finalType = g_objProgress.getType(); + + //change options in case of type change + if(finalType == "bar" && g_options.slider_progress_indicator_type == "pie"){ + g_options.slider_progress_indicator_type = "bar"; + g_options = jQuery.extend(g_options, g_defaultsProgressBar); + } + + g_gallery.setProgressIndicator(g_objProgress); + } + + //---------------- + + //add text panel (hidden) + if(g_options.slider_enable_text_panel == true){ + + g_objTextPanel.appendHTML(g_objSlider); + + //hide panel saparatelly from the controls object + if(g_options.slider_textpanel_always_on == false){ + + //hide the panel + var panelElement = g_objTextPanel.getElement(); + panelElement.hide().data("isHidden", true); + + g_temp.isTextPanelSaparateHover = true; + + } + + } + + //---------------- + + //add zoom buttons panel: + if(g_options.slider_enable_zoom_panel == true){ + g_objZoomPanel.appendHTML(g_objSlider); + } + + + //add video player + g_objVideoPlayer.setHtml(g_objInner); + } + + + /** + * position elements that related to slide + */ + function positionSlideElements(objSlide){ + + //position preloader + var objPreloader = getSlidePreloader(objSlide); + g_functions.placeElementInParentCenter(objPreloader); + + //position video play button + var objVideoPlayButton = getSlideVideoPlayButton(objSlide); + g_functions.placeElementInParentCenter(objVideoPlayButton); + } + + + /** + * position elements + */ + function positionElements(){ + + //place bullets + if(g_objBullets){ + objBullets = g_objBullets.getElement(); + + //strange bug fix (bullets width: 20) by double placing + g_functions.placeElement(objBullets, g_options.slider_bullets_align_hor, g_options.slider_bullets_align_vert, g_options.slider_bullets_offset_hor, g_options.slider_bullets_offset_vert); + g_functions.placeElement(objBullets, g_options.slider_bullets_align_hor, g_options.slider_bullets_align_vert, g_options.slider_bullets_offset_hor, g_options.slider_bullets_offset_vert); + + } + + //place arrows + if(g_options.slider_enable_arrows == true){ + g_functions.placeElement(g_objArrowLeft, g_options.slider_arrow_left_align_hor, g_options.slider_arrow_left_align_vert, g_options.slider_arrow_left_offset_hor, g_options.slider_arrow_left_offset_vert); + g_functions.placeElement(g_objArrowRight, g_options.slider_arrow_right_align_hor, g_options.slider_arrow_left_align_vert, g_options.slider_arrow_right_offset_hor, g_options.slider_arrow_right_offset_vert); + } + + //hide controls + if(g_options.slider_controls_always_on == false) + hideControls(true); + + //place progress indicator + if(g_objProgress){ + + var objProgressElement = g_objProgress.getElement(); + + if(g_options.slider_progress_indicator_type == "bar"){ + var sliderWidth = g_objSlider.width(); + g_objProgress.setSize(sliderWidth); + g_functions.placeElement(objProgressElement, "left", g_options.slider_progress_indicator_align_vert, 0, g_options.slider_progress_indicator_offset_vert); + + }else{ + g_functions.placeElement(objProgressElement, g_options.slider_progress_indicator_align_hor, g_options.slider_progress_indicator_align_vert, g_options.slider_progress_indicator_offset_hor, g_options.slider_progress_indicator_offset_vert); + + } + } + + //position text panel + if(g_objTextPanel) + g_objTextPanel.positionPanel(); + + //position controls elements + placeControlsElements(); + + //place slide elements + positionSlideElements(g_objSlide1); + positionSlideElements(g_objSlide2); + positionSlideElements(g_objSlide3); + + checkMobileModify(); + + } + + + /** + * place elements that located on "controls" div + */ + function placeControlsElements(){ + + if(g_objButtonPlay) + g_functions.placeElement(g_objButtonPlay, g_options.slider_play_button_align_hor, g_options.slider_play_button_align_vert, g_options.slider_play_button_offset_hor, g_options.slider_play_button_offset_vert); + + //position fullscreen button + if(g_objButtonFullscreen) + g_functions.placeElement(g_objButtonFullscreen, g_options.slider_fullscreen_button_align_hor, g_options.slider_fullscreen_button_align_vert, g_options.slider_fullscreen_button_offset_hor, g_options.slider_fullscreen_button_offset_vert); + + //position zoom panel + if(g_objZoomPanel){ + var zoomPanelElement = g_objZoomPanel.getElement(); + g_functions.placeElement(zoomPanelElement, g_options.slider_zoompanel_align_hor, g_options.slider_zoompanel_align_vert, g_options.slider_zoompanel_offset_hor, g_options.slider_zoompanel_offset_vert); + } + } + + + + /** + * position slides by their order + */ + function positionSlides(){ + + var slides = t.getSlidesReference(); + var posX = 0, posY = 0, innerWidth; + var posXPrev=0, posXCurrent = 0, posXNext, nextHasItem, prevHasItem; + + nextHasItem = t.isSlideHasItem(slides.objNextSlide); + prevHasItem = t.isSlideHasItem(slides.objPrevSlide); + + if(prevHasItem){ + posXCurrent = slides.objPrevSlide.outerWidth(); + slides.objPrevSlide.css("z-index",1); + }else + slides.objPrevSlide.hide(); + + posXNext = posXCurrent + slides.objCurrentSlide.outerWidth(); + + innerWidth = posXNext; + if(nextHasItem){ + innerWidth = posXNext + slides.objNextSlide.outerWidth(); + slides.objPrevSlide.css("z-index",2); + }else + slides.objNextSlide.hide(); + + slides.objCurrentSlide.css("z-index",3); + + //set inner size and position + g_functions.placeElement(slides.objCurrentSlide, posXCurrent, posY); + g_objInner.css({"left":-posXCurrent+"px", width:innerWidth+"px"}); + + //position prev + if(prevHasItem){ + g_functions.placeElement(slides.objPrevSlide, posXPrev, posY); + g_functions.showElement(slides.objPrevSlide); + } + + if(nextHasItem){ + g_functions.showElement(slides.objNextSlide); + g_functions.placeElement(slides.objNextSlide, posXNext, posY); + } + + } + + + + /** + * resize the slide image inside item + */ + function resizeSlideItem(objSlide){ + var index = objSlide.data("index"); + if(index === undefined || index == null) + return(false); + + var objItem = g_gallery.getItem(index); + + if(!objItem) + return(false); + + setItemToSlide(objSlide, objItem); + } + + + /** + * show the preloader + * show the index, so only the current index load will hide. + */ + function showPreloader(objPreloader){ + + objPreloader.stop(true).show(100); + + } + + /** + * hide the preloader + */ + function hidePreloader(objPreloader){ + + objPreloader.stop(true).hide(100); + } + + /** + * get proper image border width + */ + function getImageBorderWidth(objImage, imageData){ + + var borderWidth = g_options.slider_image_border_width; + + if(borderWidth <= 10) + return(borderWidth); + + //set image size + var imageSize = g_functions.getElementSize(objImage); + var imageWidth = imageSize.width; + var imageHeight = imageSize.height; + + if(imageData){ + if(imageData.hasOwnProperty("imageWidth")) + imageWidth = imageData.imageWidth; + + if(imageData.hasOwnProperty("imageHeight")) + imageHeight = imageData.imageHeight; + + } + + if(imageWidth <= 0) + return(borderWidth); + + //take the less size + var totalSize = (imageWidth < imageHeight)?imageWidth:imageHeight; + var borderSize = borderWidth * 2; + + var borderRatio = borderSize / totalSize; + + if(borderRatio < g_options.slider_image_border_maxratio) + return(borderWidth); + + //change border width + var borderWidth = (totalSize * g_options.slider_image_border_maxratio)/2; + + borderWidth = Math.round(borderWidth); + + return(borderWidth); + + } + + + /** + * set slider image css design according the settings + */ + function setImageDesign(objImage, slideType, imageData){ + + var css = {}; + if(g_options.slider_image_border == true){ + css["border-style"] = "solid"; + + var borderWidth = getImageBorderWidth(objImage, imageData); + + css["border-width"] = borderWidth+"px"; + css["border-color"] = g_options.slider_image_border_color; + css["border-radius"] = g_options.slider_image_border_radius; + } + + if(slideType != "image" && g_options.slider_video_constantsize == true) + css["background-color"] = "#000000"; + + if(g_options.slider_image_shadow == true){ + css["box-shadow"] = "3px 3px 10px 0px #353535"; + } + + objImage.css(css); + } + + + /** + * scale image constant size (for video items) + */ + function scaleImageConstantSize(objImage, objItem){ + + var constantWidth = g_options.slider_video_constantsize_width; + var constantHeight = g_options.slider_video_constantsize_height; + var scaleMode = g_options.slider_video_constantsize_scalemode; + + var objSize = g_functions.scaleImageExactSizeInParent(objImage, objItem.imageWidth, objItem.imageHeight, constantWidth, constantHeight, scaleMode); + + + return(objSize); + } + + + /** + * + * set item to slide + */ + function setImageToSlide(objSlide, objItem, isForce){ + + var objItemWrapper = objSlide.children(".ug-item-wrapper"); + + var objPreloader = getSlidePreloader(objSlide); + + if(typeof objItem.urlImage == "undefined" || objItem.urlImage == "") + throw new Error("The slide don't have big image defined ( data-image='imageurl' ). Please check gallery items.", "showbig"); + + var urlImage = objItem.urlImage; + + var currentImage = objSlide.data("urlImage"); + + objSlide.data("urlImage",urlImage); + + var scaleMode = t.getScaleMode(objSlide); + + var slideType = t.getSlideType(objSlide); + + objPadding = t.getObjImagePadding(); + + + if(currentImage == urlImage && isForce !== true){ + + var objImage = objItemWrapper.children("img"); + + if(objItem.imageWidth == 0 || objItem.imageHeight == 0){ + g_gallery.checkFillImageSize(objImage, objItem); + } + + var objImageData = {}; + + if(slideType != "image" && g_options.slider_video_constantsize == true){ + objImageData = scaleImageConstantSize(objImage, objItem); + } + else{ + objImageData = g_functions.scaleImageFitParent(objImage, objItem.imageWidth, objItem.imageHeight, scaleMode, objPadding); + } + + setImageDesign(objImage, slideType, objImageData); + g_objThis.trigger(t.events.AFTER_PUT_IMAGE, objSlide); + + } + else{ //place the image inside parent first time + + objImage = g_functions.placeImageInsideParent(urlImage, objItemWrapper, objItem.imageWidth, objItem.imageHeight, scaleMode, objPadding); + + //set image loaded on load: + if(objItem.isBigImageLoaded == true){ + objImage.fadeTo(0,1); + hidePreloader(objPreloader); + + if(slideType != "image" && g_options.slider_video_constantsize == true) + var objImageData = scaleImageConstantSize(objImage, objItem); + else + var objImageData = g_functions.getImageInsideParentData(objItemWrapper, objItem.imageWidth, objItem.imageHeight, scaleMode, objPadding); + + //set missing css width + objImage.css("width",objImageData.imageWidth+"px"); + + setImageDesign(objImage, slideType, objImageData); + + g_objThis.trigger(t.events.AFTER_PUT_IMAGE, objSlide); + } + else{ //if the image not loaded, load the image and show it after. + objImage.fadeTo(0,0); + showPreloader(objPreloader); + objSlide.data("isLoading", true); + + if(t.isSlideCurrent(objSlide)) + g_objThis.trigger(t.events.CURRENTSLIDE_LOAD_START); + + objImage.data("itemIndex", objItem.index); + objImage.on("load",function(){ + + //place the image normally with coordinates + var objImage = jQuery(this); + var itemIndex = objImage.data("itemIndex"); + + objImage.fadeTo(0,1); + + //get and hide preloader + var objSlide = objImage.parent().parent(); + var slideType = t.getSlideType(objSlide); + var objPreloader = getSlidePreloader(objSlide); + var objPadding = t.getObjImagePadding(); + var scaleMode = t.getScaleMode(objSlide); + + hidePreloader(objPreloader); + objSlide.data("isLoading", false); + + if(t.isSlideCurrent(objSlide)) + g_objThis.trigger(t.events.CURRENTSLIDE_LOAD_END); + + g_gallery.onItemBigImageLoaded(null, objImage); + + var objItem = g_gallery.getItem(itemIndex); + + var objImageData = {}; + + if(slideType != "image" && g_options.slider_video_constantsize == true) + scaleImageConstantSize(objImage, objItem); + else{ + objImageData = g_functions.scaleImageFitParent(objImage, objItem.imageWidth, objItem.imageHeight, scaleMode, objPadding); + } + + objImage.fadeTo(0,1); + + setImageDesign(objImage, slideType, objImageData); + + g_objThis.trigger(t.events.AFTER_PUT_IMAGE, objSlide); + }); + } + + } + + + } + + + + /** + * set slider image by url + * if item not set, get current slide item + */ + function setItemToSlide(objSlide, objItem){ + + try{ + + var objItemWrapper = objSlide.children(".ug-item-wrapper"); + + //if the item is empty, remove the image from slide + if(objItem == null){ + objItemWrapper.html(""); + objSlide.removeData("index"); + objSlide.removeData("type"); + objSlide.removeData("urlImage"); + return(false); + } + + var currentIndex = objSlide.data("index"); + + objSlide.data("index",objItem.index); + objSlide.data("type", objItem.type); + + //set link class + if(g_options.slider_enable_links == true && objItem.type == "image"){ + + if(objItem.link) + objSlide.addClass("ug-slide-clickable"); + else + objSlide.removeClass("ug-slide-clickable"); + } + + setImageToSlide(objSlide, objItem); + + //show type related elements + var objVideoPlayButton = getSlideVideoPlayButton(objSlide); + switch(objItem.type){ + case "image": + objVideoPlayButton.hide(); + break; + default: //video + objVideoPlayButton.show(); + break; + } + + }catch(error){ + + if(typeof error.fileName != "undefined" && error.fileName == "showbig") + g_gallery.showErrorMessageReplaceGallery(error.message); + + objItemWrapper.html(""); + throw new Error(error); + return(true); + } + + } + + + + /** + * hide the panel + */ + function hideTextPanel(){ + + if(!g_objTextPanel) + return(false); + + if(isTextPanelHidden() == true) + return(false); + + var panelElement = g_objTextPanel.getElement(); + + var animationTime = 0; + if(g_temp.isTextPanelSaparateHover == true || g_options.slider_textpanel_always_on == true){ + animationTime = g_options.slider_controls_appear_duration; + } + + panelElement.stop().fadeTo(animationTime, 0); + + panelElement.data("isHidden", true); + } + + + /** + * show the text panel + */ + function showTextPanel(){ + + if(!g_objTextPanel) + return(false); + + if(isTextPanelHidden() == false) + return(false); + + var panelElement = g_objTextPanel.getElement(); + + var animationTime = 0; + + if(g_temp.isTextPanelSaparateHover == true || g_options.slider_textpanel_always_on == true){ + + panelElement.show(); + g_objTextPanel.positionElements(); + + animationTime = g_options.slider_controls_appear_duration; + } + + panelElement.stop().show().fadeTo(animationTime,1); + + panelElement.data("isHidden", false); + + } + + + /** + * check if the text panel is hidden or not + */ + function isTextPanelHidden(){ + + var panelElement = g_objTextPanel.getElement(); + + var isHidden = panelElement.data("isHidden"); + if(isHidden === false) + return(false); + + return(true); + } + + + /** + * validate that the slide is certain type, if not, throw error + */ + function validateSlideType(type, objSlide){ + if(objSlide == undefined) + var objSlide = t.getCurrentSlide(); + + var slideType = t.getSlideType(objSlide); + + if(slideType != type){ + throw new Error("Wrong slide type: "+ slideType +", should be: "+type); + return(false); + } + + return(true); + } + + function __________VIDEO_PLAYER_______(){}; + + + + /** + * set video player position + */ + function setVideoPlayerPosition(){ + + var objCurrentSlide = t.getCurrentSlide(); + var objImage = t.getSlideImage(objCurrentSlide); + + var slideSize = g_functions.getElementSize(objCurrentSlide); + var left = slideSize.left; + var top = slideSize.top; + + //set by image position + if(g_options.slider_video_constantsize == true){ + + var imageSize = g_functions.getElementSize(objImage); + left += imageSize.left; + top += imageSize.top; + + }else{ //set video padding + + left += g_options.slider_video_padding_left; + top += g_options.slider_video_padding_top; + + } + + g_objVideoPlayer.setPosition(left, top); + } + + + /** + * set video player constant size + */ + function setVideoPlayerConstantSize(){ + + var videoWidth = g_options.slider_video_constantsize_width; + var videoHeight = g_options.slider_video_constantsize_height; + + g_objVideoPlayer.setSize(videoWidth, videoHeight); + + //set video design + var videoElement = g_objVideoPlayer.getObject(); + + setImageDesign(videoElement, "video"); + } + + + function __________TRANSITION_______(){}; + + + + /** + * do the transition between the current and the next + */ + function doTransition(direction, objItem, forceTransition){ + + g_objThis.trigger(t.events.TRANSITION_START); + + var transition = g_options.slider_transition; + if(forceTransition) + transition = forceTransition; + + //stop current slide action + t.stopSlideAction(null, true); + + switch(transition){ + default: + case "fade": + transitionFade(objItem); + break; + case "slide": + transitionSlide(direction, objItem); + break; + case "lightbox_open": //fade transition without animation + transitionFade(objItem, false, true); + break; + } + + } + + + /** + * switch slide numbers after transition (by direction) + * + */ + this.switchSlideNums = function(direction){ + + //trigger item changed effect + g_objThis.trigger(t.events.BEFORE_SWITCH_SLIDES); + + switch(direction){ + case "left": + var currentNum = g_temp.numCurrent; + g_temp.numCurrent = g_temp.numNext; + g_temp.numNext = g_temp.numPrev; + g_temp.numPrev = currentNum; + break; + case "right": + var currentNum = g_temp.numCurrent; + g_temp.numCurrent = g_temp.numPrev; + g_temp.numPrev = g_temp.numNext; + g_temp.numNext = currentNum; + break; + default: + throw new Error("wrong direction: "+ direction); + break; + } + + //trace(g_temp.numCurrent); + + //trigger item changed effect + g_objThis.trigger(t.events.ITEM_CHANGED); + } + + + /** + * do slide transition + */ + function transitionSlide(direction, objItem){ + + var animating = t.isAnimating(); + + if(animating == true){ + g_temp.itemWaiting = objItem; + return(true); + } + + //always clear next item on transition start + // next item can be only in the middle of the transition. + if(g_temp.itemWaiting != null) + g_temp.itemWaiting = null; + + var slides = t.getSlidesReference(); + + + switch(direction){ + case "right": //change to prev item + setItemToSlide(slides.objPrevSlide, objItem); + positionSlides(); + + var posPrev = g_functions.getElementSize(slides.objPrevSlide); + var destX = -posPrev.left; + + t.switchSlideNums("right"); + + break; + case "left": //change to next item + setItemToSlide(slides.objNextSlide, objItem); + positionSlides(); + + var posNext = g_functions.getElementSize(slides.objNextSlide); + var destX = -posNext.left; + + t.switchSlideNums("left"); + + break; + default: + throw new Error("wrong direction: "+direction); + break; + } + + var transSpeed = g_options.slider_transition_speed; + var transEasing = g_options.slider_transition_easing; + + + var animateParams = { + duration: transSpeed, + easing: transEasing, + queue: false, + always:function(){ + + t.stopSlideAction(); + g_objVideoPlayer.hide(); + + //transit next item if waiting + if(g_temp.itemWaiting != null){ + var direction = getSlideDirection(g_temp.itemWaiting); + transitionSlide(direction, g_temp.itemWaiting); + }else{ + //if no item waiting, please neighbour items in places + t.placeNabourItems(); + g_objThis.trigger(t.events.TRANSITION_END); + } + + } + }; + + + g_objInner.animate({left:destX+"px"}, animateParams); + + } + + + /** + * + * animate opacity in and out + */ + function animateOpacity(objItem, opacity, completeFunction){ + + if(completeFunction) + objItem.fadeTo(g_options.slider_transition_speed, opacity, completeFunction); + else + objItem.fadeTo(g_options.slider_transition_speed, opacity); + } + + + /** + * do fade transition + */ + function transitionFade(objItem, noAnimation, noHidePlayer){ + + if(!noAnimation) + var noAnimation = false; + + var slides = t.getSlidesReference(); + + setItemToSlide(slides.objNextSlide, objItem); + + var objCurrentPos = g_functions.getElementSize(slides.objCurrentSlide); + + g_functions.placeElement(slides.objNextSlide,objCurrentPos.left,objCurrentPos.top); + + //switch slide nums + var currentNum = g_temp.numCurrent; + g_temp.numCurrent = g_temp.numNext; + g_temp.numNext = currentNum; + + g_objThis.trigger(t.events.ITEM_CHANGED); + + slides.objNextSlide.stop(true); + slides.objCurrentSlide.stop(true); + + if(noAnimation == true){ + + slides.objCurrentSlide.fadeTo(0, 0); + slides.objNextSlide.fadeTo(0, 1); + t.placeNabourItems(); + g_objThis.trigger(t.events.TRANSITION_END); + + if(noHidePlayer !== true) + g_objVideoPlayer.hide(); + + }else{ + slides.objNextSlide.fadeTo(0,0); + + animateOpacity(slides.objCurrentSlide,0,function(){ + t.placeNabourItems(); + g_objThis.trigger(t.events.TRANSITION_END); + if(noHidePlayer !== true) + g_objVideoPlayer.hide(); + }); + + if(g_objVideoPlayer.isVisible() == true){ + var videoElement = g_objVideoPlayer.getObject(); + animateOpacity(videoElement, 0); + } + + //animate to next show next + animateOpacity(slides.objNextSlide,1); + } + + } + + + + + function __________CONTROLS_OBJECT_______(){}; + + /** + * modify the slider for mobile + */ + function modifyForMobile(){ + + if(g_options.slider_fullscreen_button_mobilehide == true && g_objButtonFullscreen) + g_objButtonFullscreen.hide(); + + if(g_options.slider_play_button_mobilehide == true && g_objButtonPlay) + g_objButtonPlay.hide(); + + if(g_options.slider_zoompanel_mobilehide == true && g_objZoomPanel) + g_objZoomPanel.getElement().hide(); + + } + + + /** + * modify for no mobile + */ + function modifyForDesctop(){ + + if(g_options.slider_fullscreen_button_mobilehide == true && g_objButtonFullscreen) + g_objButtonFullscreen.show(); + + if(g_options.slider_play_button_mobilehide == true && g_objButtonPlay) + g_objButtonPlay.show(); + + if(g_options.slider_zoompanel_mobilehide == true && g_objZoomPanel) + g_objZoomPanel.getElement().show(); + + } + + + /** + * check and modify for mobile or desctop + */ + function checkMobileModify(){ + + var isMobile = g_gallery.isMobileMode(); + + if(isMobile) + modifyForMobile(); + else + modifyForDesctop(); + + } + + + /** + * get a jquery set of the controls objects + */ + function getControlsObjects(){ + + var objControl = g_objSlider.children(".ug-slider-control"); + + return(objControl); + } + + + /** + * hide the controls + */ + function hideControls(noAnimation){ + + if(g_functions.isTimePassed("sliderControlsToggle") == false) + return(false); + + if(g_temp.isControlsVisible == false) + return(false); + + if(!noAnimation) + var noAnimation = false; + + var objControls = getControlsObjects(); + + if(noAnimation === true) + objControls.stop().fadeTo(0,0).hide(); + else{ + objControls.stop().fadeTo(g_options.slider_controls_appear_duration, 0, function(){objControls.hide()}); + } + + g_temp.isControlsVisible = false; + } + + + /** + * show controls only if they meaned to be shown + * @param noAnimation + */ + function checkAndShowControls(noAnimation){ + + if(g_options.slider_controls_always_on == true) + showControls(noAnimation); + } + + + /** + * hide the controls + */ + function showControls(noAnimation){ + + //validate for short time pass + if(g_functions.isTimePassed("sliderControlsToggle") == false) + return(false); + + if(g_temp.isControlsVisible == true) + return(true); + + + if(!noAnimation) + var noAnimation = false; + + var objControls = getControlsObjects(); + + if(noAnimation === true) + objControls.stop().show(); + else{ + + objControls.stop().show().fadeTo(0,0); + objControls.fadeTo(g_options.slider_controls_appear_duration, 1); + + } + + g_temp.isControlsVisible = true; + + } + + + + /** + * toggle the controls (show, hide) + */ + function toggleControls(){ + + if(g_temp.isControlsVisible == false) + showControls(); + else + hideControls(); + } + + + /** + * set controls mode + * modes: image, video + */ + function setControlsMode(mode){ + + if(mode == g_temp.currentControlsMode) + return(false); + + switch(mode){ + case "image": + if(g_objZoomPanel) + g_objZoomPanel.getElement().show(); + break; + case "video": + if(g_objZoomPanel) + g_objZoomPanel.getElement().hide(); + break; + default: + throw new Error("wrong controld mode: " + mode); + break; + } + + g_temp.currentControlsMode = mode; + + } + + + + function __________EVENTS___________(){}; + + /** + * on item change event + */ + function onItemChange(data, arg_objItem, role){ + + //trace("slider on change"); + + var objItem = g_gallery.getSelectedItem(); + + t.setItem(objItem, false, role); + + var itemIndex = objItem.index; + + //set active bullet + if(g_objBullets) + g_objBullets.setActive(itemIndex); + + //handle text panel + if(g_objTextPanel){ + if(g_temp.isTextPanelSaparateHover == false) + showTextPanel(); + } + + if(objItem.type == "image"){ + setControlsMode("image"); + //placeControlsElements(); + } + else{ + setControlsMode("video"); + } + + } + + + /** + * on bullet click - change the item to selected + */ + function onBulletClick(event, bulletIndex){ + g_gallery.selectItem(bulletIndex); + } + + + /** + * on touch end + * toggle controls + */ + function onClick(event){ + + //double tap action + if(g_objTouchSlider && g_objTouchSlider.isTapEventOccured(event) == false) + return(true); + + g_objThis.trigger(t.events.CLICK, event); + + + } + + + /** + * on actual click event + */ + function onActualClick(){ + + //check link + var currentSlide = t.getCurrentSlide(); + var isClickable = currentSlide.hasClass("ug-slide-clickable"); + var objItem = t.getCurrentItem(); + + if(isClickable){ + + //redirect to link + if(g_options.slider_links_newpage == false){ + location.href = objItem.link; + }else{ + window.open(objItem.link, '_blank'); + } + + return(true); + } + + //check toggle controls + if(g_options.slider_controls_always_on == false && + g_options.slider_controls_appear_ontap == true && t.isCurrentSlideType("image") == true){ + + toggleControls(); + + //show text panel if hidden + if(g_objTextPanel && g_options.slider_textpanel_always_on == true && t.isCurrentSlideType("image") && t.isCurrentSlideImageFit()) + showTextPanel(); + } + + + } + + + /** + * on zoom start event + */ + function onZoomChange(event){ + + if(g_objTextPanel && t.isCurrentSlideType("image") && t.isCurrentSlideImageFit() == false) + hideTextPanel(); + } + + + /** + * on mouse enter + */ + function onMouseEnter(){ + + showControls(); + + } + + + /** + * on mouse leave + */ + function onMouseLeave(){ + + hideControls(); + + } + + + /** + * on slide video play button click + */ + function objVideoPlayClick(objButton){ + var objSlide = objButton.parent(); + t.startSlideAction(objSlide); + } + + /** + * on video player show event + */ + function onVideoPlayerShow(){ + + if(g_gallery.isPlayMode()){ + g_gallery.pausePlaying(); + } + + g_objThis.trigger(t.events.ACTION_START); + } + + + /** + * on video player hide event + */ + function onVideoPlayerHide(){ + + if(g_gallery.isPlayMode()){ + g_gallery.continuePlaying(); + } + + g_objThis.trigger(t.events.ACTION_END); + } + + + /** + * on item image update, update the image inside the slider if relevant + */ + function onItemImageUpdate(event, index, urlImage){ + + if(g_objSlide1.data("index") == index){ + objItem = g_gallery.getItem(index); + setImageToSlide(g_objSlide1, objItem, true); //force + } + + if(g_objSlide2.data("index") == index){ + objItem = g_gallery.getItem(index); + setImageToSlide(g_objSlide2, objItem, true); + } + + if(g_objSlide3.data("index") == index){ + objItem = g_gallery.getItem(index); + setImageToSlide(g_objSlide3, objItem, true); + } + + } + + + /** + * after image loaded. position video play button + */ + function onSlideImageLoaded(data, objSlide){ + + objSlide = jQuery(objSlide); + var objImage = t.getSlideImage(objSlide); + var objButtonVideoPlay = getSlideVideoPlayButton(objSlide); + var objSize = g_functions.getElementSize(objImage); + + g_functions.placeElement(objButtonVideoPlay, "center", "middle", objSize.left, objSize.top, objImage); + } + + + /** + * init event of current slide + */ + function initSlideEvents(objSlide){ + + //set video player events + var objVideoPlayButton = getSlideVideoPlayButton(objSlide); + g_functions.addClassOnHover(objVideoPlayButton); + + g_functions.setButtonOnClick(objVideoPlayButton, objVideoPlayClick); + + } + + + /** + * init events + */ + function initEvents(){ + + //on item image update, update the image inside the slider if relevant + g_objGallery.on(g_gallery.events.ITEM_IMAGE_UPDATED, onItemImageUpdate); + + + //on item change, change the item in the slider. + g_objGallery.on(g_gallery.events.ITEM_CHANGE, onItemChange); + + if(g_objBullets) + jQuery(g_objBullets).on(g_objBullets.events.BULLET_CLICK,onBulletClick); + + //arrows events + if(g_options.slider_enable_arrows == true){ + + g_functions.addClassOnHover(g_objArrowRight, "ug-arrow-hover"); + g_functions.addClassOnHover(g_objArrowLeft, "ug-arrow-hover"); + + g_gallery.setNextButton(g_objArrowRight); + g_gallery.setPrevButton(g_objArrowLeft); + } + + + //show / hide controls + if(g_options.slider_controls_always_on == false){ + + //assign hover evens only if no touch device + g_objSlider.hover(onMouseEnter, onMouseLeave); + + } + + //touch events appear on tap event + g_objSlider.on("touchend click", onClick); + + //actual click event + g_objThis.on(t.events.CLICK, onActualClick); + + //show / hide text panel, if it's saparate from controls + if(g_objTextPanel && g_temp.isTextPanelSaparateHover == true){ + g_objSlider.hover(showTextPanel, hideTextPanel); + } + + //init play / pause button + if(g_objButtonPlay){ + g_functions.addClassOnHover(g_objButtonPlay, "ug-button-hover"); + g_gallery.setPlayButton(g_objButtonPlay); + } + + //init fullscreen button + if(g_objButtonFullscreen){ + g_functions.addClassOnHover(g_objButtonFullscreen, "ug-button-hover"); + g_gallery.setFullScreenToggleButton(g_objButtonFullscreen); + } + + //on zoom start / end events + if(g_objZoomSlider){ + g_objThis.on(t.events.ZOOM_CHANGE, onZoomChange); + } + + if(g_objZoomPanel) + g_objZoomPanel.initEvents(); + + //init video player related events + g_objVideoPlayer.initEvents(); + + //video API events + jQuery(g_objVideoPlayer).on(g_objVideoPlayer.events.SHOW, onVideoPlayerShow); + jQuery(g_objVideoPlayer).on(g_objVideoPlayer.events.HIDE, onVideoPlayerHide); + + //add slide events + initSlideEvents(g_objSlide1); + initSlideEvents(g_objSlide2); + initSlideEvents(g_objSlide3); + + //on image loaded + g_objThis.on(t.events.AFTER_PUT_IMAGE, onSlideImageLoaded); + + //image mouseenter / mouseleave event + + //set mouseover events on the images + g_objSlider.delegate(".ug-item-wrapper img","mouseenter",function(event){ + g_objThis.trigger(t.events.IMAGE_MOUSEENTER); + }); + + g_objSlider.delegate(".ug-item-wrapper img","mouseleave",function(event){ + var isMouseOver = t.isMouseInsideSlideImage(event); + + if(isMouseOver == false) + g_objThis.trigger(t.events.IMAGE_MOUSELEAVE); + }); + + } + + + /** + * destroy slider events + */ + this.destroy = function(){ + + g_objThis.off(t.events.AFTER_PUT_IMAGE); + + g_objGallery.off(g_gallery.events.ITEM_IMAGE_UPDATED); + g_objGallery.off(g_gallery.events.ITEM_CHANGE); + + if(g_objBullets) + jQuery(g_objBullets).on(g_objBullets.events.BULLET_CLICK); + + g_objSlider.off("mouseenter"); + g_objSlider.off("mouseleave"); + + g_objSlider.off("touchend"); + g_objSlider.off("click"); + g_objThis.off(t.events.CLICK); + + if(g_objZoomSlider) + g_objThis.off(t.events.ZOOM_CHANGE); + + g_objThis.off(t.events.BEFORE_SWITCH_SLIDES); + jQuery(g_objVideoPlayer).off(g_objVideoPlayer.events.SHOW); + jQuery(g_objVideoPlayer).off(g_objVideoPlayer.events.HIDE); + + g_objVideoPlayer.destroy(); + + g_objSlider.undelegate(".ug-item-wrapper img","mouseenter"); + g_objSlider.undelegate(".ug-item-wrapper img","mouseleave"); + } + + + function __________GETTERS___________(){}; + + /** + * get loader class by loader type + */ + function getLoaderClass(){ + var loaderClass; + switch(g_options.slider_loader_type){ + default: + case 1: loaderClass = "ug-loader1";break; + case 2: loaderClass = "ug-loader2";break; + case 3: loaderClass = "ug-loader3";break; + case 4: loaderClass = "ug-loader4";break; + case 5: loaderClass = "ug-loader5";break; + case 6: loaderClass = "ug-loader6";break; + case 7: loaderClass = "ug-loader7";break; + case 8: loaderClass = "ug-loader8";break; + case 9: loaderClass = "ug-loader9";break; + } + + if(g_options.slider_loader_color == "black") + loaderClass += " ug-loader-black"; + + return(loaderClass); + } + + + + /** + * + * get slide by number + */ + function getSlideByNum(num){ + + switch(num){ + case 1: + return(g_objSlide1); + break; + case 2: + return(g_objSlide2); + break; + case 3: + return(g_objSlide3); + break; + default: + throw new Error("wrong num: " + num); + break; + } + } + + + /** + * + * get slide direction of current item + */ + function getSlideDirection(objItem){ + + var slides = t.getSlidesReference(); + + //validate if the item is not selected already + var currentIndex = slides.objCurrentSlide.data("index"); + var nextIndex = objItem.index; + + var direction = "left"; + if(currentIndex > nextIndex) + direction = "right"; + + return(direction); + } + + + /** + * get slide preloader + */ + function getSlidePreloader(objSlide){ + + if(!objSlide) + var objSlide = t.getCurrentSlide(); + + var objPreloader = objSlide.children(".ug-slider-preloader"); + return(objPreloader); + } + + /** + * get slide videoplay button + */ + function getSlideVideoPlayButton(objSlide){ + var objButton = objSlide.children(".ug-button-videoplay"); + return(objButton); + } + + + + /** + * get slide item + */ + function getSlideItem(objSlide){ + if(!objSlide) + var objSlide = t.getCurrentSlide(); + + var index = objSlide.data("index"); + if(index == undefined) + return(null); + + var objItem = g_gallery.getItem(index); + return(objItem); + } + + + /** + * get slide number + */ + function getNumSlide(objSlide){ + var numSlide = objSlide.data("slidenum"); + return(numSlide); + } + + + + this.________EXTERNAL_GENERAL___________ = function(){}; + + + /** + * init function for avia controls + * options: width / height + */ + this.init = function(objGallery, objOptions, optionsPrefix){ + + initSlider(objGallery, objOptions, optionsPrefix); + } + + /** + * get slide image + */ + this.getSlideImage = function(objSlide){ + + if(!objSlide) + var objSlide = t.getCurrentSlide(); + + var objImage = objSlide.find(".ug-item-wrapper img"); + return(objImage); + } + + + /** + * set slider html + */ + this.setHtml = function(objParent){ + + setHtmlSlider(objParent); + } + + + /** + * run the slider + */ + this.run = function(){ + + runSlider(); + } + + + /** + * check if the inner object in place, for panning znd zooming posibility check + */ + this.isInnerInPlace = function(){ + + var slides = t.getSlidesReference(); + + var posCurrent = g_functions.getElementSize(slides.objCurrentSlide); + var inPlaceX = -posCurrent.left; + var objInnerSize = g_functions.getElementSize(g_objInner); + + if(inPlaceX == objInnerSize.left) + return(true); + else + return(false); + } + + /** + * is animating + */ + this.isAnimating = function(){ + + var isAnimated = g_objInner.is(":animated"); + + return(isAnimated); + } + + /** + * check if the slide is current + */ + this.isSlideCurrent = function(objSlide){ + var numSlide = objSlide.data("slidenum"); + if(g_temp.numCurrent == numSlide) + return(true); + + return(false); + } + + + /** + * + * tells if the slide has item + */ + this.isSlideHasItem = function(objSlide){ + var index = objSlide.data("index"); + if(index === undefined || index === null) + return(false); + + return(true); + } + + + /** + * get image padding object for scaling the image + */ + this.getObjImagePadding = function(){ + + var objPadding = { + padding_top: g_options.slider_image_padding_top, + padding_bottom: g_options.slider_image_padding_bottom, + padding_left: g_options.slider_image_padding_left, + padding_right: g_options.slider_image_padding_right + }; + + return(objPadding); + } + + + /** + * get items reference by their order + */ + this.getSlidesReference = function(){ + + var obj = { + objPrevSlide: getSlideByNum(g_temp.numPrev), + objNextSlide: getSlideByNum(g_temp.numNext), + objCurrentSlide: getSlideByNum(g_temp.numCurrent) + }; + + return(obj); + } + + + /** + * get current slide + */ + this.getCurrentSlide = function(){ + + var slides = t.getSlidesReference(); + + return(slides.objCurrentSlide); + } + + + /** + * get index of current item + */ + this.getCurrentItemIndex = function(){ + + var slides = t.getSlidesReference(); + + var currentIndex = slides.objCurrentSlide.data("index"); + if(currentIndex === null || currentIndex === undefined) + currentIndex = -1; + + return(currentIndex); + } + + + /** + * get current slide item + */ + this.getCurrentItem = function(){ + var currentIndex = t.getCurrentItemIndex(); + if(currentIndex == -1) + return(null); + + var objItem = g_gallery.getItem(currentIndex); + + return(objItem); + } + + + /** + * get type of some slide + */ + this.getSlideType = function(objSlide){ + + if(objSlide == undefined) + objSlide = t.getCurrentSlide(); + + var type = objSlide.data("type"); + return(type); + } + + + /** + * is mouse inside slide image + * get mouse position from event + */ + this.isMouseInsideSlideImage = function(event){ + + var objImage = t.getSlideImage(); + + var point = g_functions.getMousePosition(event); + if(point.pageX === undefined) + point = g_objTouchSlider.getLastMousePos(); + + var pointImg = g_functions.getMouseElementPoint(point, objImage); + var objSize = g_functions.getElementSize(objImage); + isMouseInside = g_functions.isPointInsideElement(pointImg, objSize); + + return(isMouseInside); + } + + + /** + * check if current slide type is certain type + */ + this.isCurrentSlideType = function(type){ + var currentSlideType = t.getSlideType(); + if(currentSlideType == type) + return(true); + + return(false); + } + + + /** + * check if current slide is loading image + */ + this.isCurrentSlideLoadingImage = function(){ + var currentSlide = t.getCurrentSlide(); + var isLoading = currentSlide.data("isLoading"); + if(isLoading === true) + return(true); + + return(false); + } + + + /** + * change the slider to some item content + */ + this.setItem = function(objItem, forseTransition, role){ + + var slides = t.getSlidesReference(); + + //validate if the item is not selected already + var currentIndex = slides.objCurrentSlide.data("index"); + var nextIndex = objItem.index; + + if(nextIndex == currentIndex){ + return(true); + } + + var isFirstSlide = (currentIndex == undefined); + + if(isFirstSlide){ + setItemToSlide(slides.objCurrentSlide, objItem); + t.placeNabourItems(); + + }else{ + + var direction = "left"; //move foreward + + var numItems = g_gallery.getNumItems(); + + if(role == "next") + direction = "left"; + else if(role == "prev" || currentIndex > nextIndex) + direction = "right"; + else if(currentIndex > nextIndex) + direction = "right"; + + doTransition(direction, objItem, forseTransition); + } + + } + + + /** + * when the transition complete, put the next / prev items at their place + */ + this.placeNabourItems = function(){ + + var slides = t.getSlidesReference(); + var currentIndex = slides.objCurrentSlide.data("index"); + + var itemPrev = g_gallery.getPrevItem(currentIndex); + var itemNext = g_gallery.getNextItem(currentIndex); + + //trace(itemPrev); + //trace(itemNext); + + //trace("place " + currentIndex, "next: "+); + + setItemToSlide(slides.objNextSlide, itemNext); + setItemToSlide(slides.objPrevSlide, itemPrev); + + positionSlides(); + } + + + + this.________EXTERNAL_API___________ = function(){}; + + + /** + * stop some slide action if active + */ + this.stopSlideAction = function(objSlide, isPause){ + + if(!objSlide) + objSlide = t.getCurrentSlide(); + + if(isPause === true) + g_objVideoPlayer.pause(); + else + g_objVideoPlayer.hide(); + + // trace("stop action"); + + } + + + + /** + * start some slide action if exists + */ + this.startSlideAction = function(objSlide){ + + // trace("start action"); + + if(!objSlide) + objSlide = t.getCurrentSlide(); + + var objItem = getSlideItem(objSlide); + + if(objItem.type == "image") + return(true) + + if(g_options.slider_video_constantsize == true) + setVideoPlayerConstantSize(); + + setVideoPlayerPosition(); + + g_objVideoPlayer.show(); + + switch(objItem.type){ + case "youtube": + g_objVideoPlayer.playYoutube(objItem.videoid); + break; + case "vimeo": + g_objVideoPlayer.playVimeo(objItem.videoid); + break; + case "html5video": + g_objVideoPlayer.playHtml5Video(objItem.videoogv, objItem.videowebm, objItem.videomp4, objItem.urlImage); + break; + case "soundcloud": + g_objVideoPlayer.playSoundCloud(objItem.trackid); + break; + case "wistia": + g_objVideoPlayer.playWistia(objItem.videoid); + break; + } + + } + + + /** + * get the scale mode according the state (normal, fullscreen). + */ + this.getScaleMode = function(objSlide){ + + if(!objSlide) + var objSlide = t.getCurrentSlide(); + + var slideType = t.getSlideType(objSlide); + + //return media scale mode + if(slideType != "image") + return(g_options.slider_scale_mode_media); + + if(g_options.slider_scale_mode == g_options.slider_scale_mode_fullscreen) + return(g_options.slider_scale_mode); + + if(g_gallery.isFullScreen() == true) + return(g_options.slider_scale_mode_fullscreen); + else + return(g_options.slider_scale_mode); + + } + + + /** + * get slider objects + */ + this.getObjects = function(){ + + var obj = { + g_objSlider: g_objSlider, + g_objInner: g_objInner, + g_options: g_options, + g_objZoomSlider: g_objZoomSlider + }; + + return(obj); + } + + + /** + * get zoom object + */ + this.getObjZoom = function(){ + + return(g_objZoomSlider); + } + + + + /** + * get slider options + */ + this.getOptions = function(){ + + return(g_options); + } + + + /** + * get slider element + */ + this.getElement = function(){ + + return(g_objSlider); + } + + /** + * get video object + */ + this.getVideoObject = function(){ + return(g_objVideoPlayer); + } + + + /** + * return true if current slider image fit the slider + * @returns + */ + this.isCurrentSlideImageFit = function(){ + var objSlide = t.getCurrentSlide(); + + var slideType = t.getSlideType(objSlide); + + validateSlideType("image", objSlide); + + var objImage = t.getSlideImage(objSlide); + + //if image don't yet added to dom, return false + if(objImage.length == 0) + return(false); + + var isFit = g_functions.isImageFitParent(objImage); + + return(isFit); + } + + + /** + * check if current image in place + */ + this.isCurrentImageInPlace = function(){ + + var objImage = t.getSlideImage(); + if(objImage.length == 0) + return(false); + + var scaleMode = t.getScaleMode(); + var objPadding = t.getObjImagePadding(); + var objItem = getSlideItem(); + + var objParent = objImage.parent(); + + var objFitSize = g_functions.getImageInsideParentData(objParent, objItem.imageWidth, objItem.imageHeight, scaleMode, objPadding); + var objSize = g_functions.getElementSize(objImage); + + var output = false; + + if(objFitSize.imageWidth == objSize.width) + output = true; + + return(output); + } + + + /** + * if slide is bussy in some action + */ + this.isSlideActionActive = function(){ + + return g_objVideoPlayer.isVisible(); + } + + /** + * return if swipe action active + */ + this.isSwiping = function(){ + if(!g_objTouchSlider) + return(false); + + var isActive = g_objTouchSlider.isTouchActive(); + + return(isActive); + } + + + /** + * if slider preloading image (if preloader visible) + */ + this.isPreloading = function(){ + + var objPreloader = getSlidePreloader(); + if(objPreloader.is(":visible")) + return(true); + + return(false); + } + + /** + * set the options + */ + this.setOptions = function(objOptions){ + + //change options by prefix + if(g_optionsPrefix) + objOptions = g_functions.convertCustomPrefixOptions(objOptions, g_optionsPrefix, "slider"); + + g_options = jQuery.extend(g_options, objOptions); + + } + + + /** + * set the slider size + * works well on resize too. + */ + this.setSize = function(width, height){ + + if(width < 0 || height < 0) + return(true); + + var objCssSlider = {}; + objCssSlider["width"] = width + "px"; + objCssSlider["height"] = height + "px"; + g_objSlider.css(objCssSlider); + + //set inner: + var objCssInner = {}; + objCssInner["height"] = height + "px"; + objCssInner["top"] = "0px"; + objCssInner["left"] = "0px"; + g_objInner.css(objCssInner); + + //set slide wrapper + var objCssSlide = {}; + objCssSlide["height"] = height + "px"; + objCssSlide["width"] = width + "px"; + + g_objSlide1.css(objCssSlide); + g_objSlide2.css(objCssSlide); + g_objSlide3.css(objCssSlide); + + var itemWidth = width - g_options.slider_item_padding_left - g_options.slider_item_padding_right; + var itemHeight = height - g_options.slider_item_padding_top - g_options.slider_item_padding_bottom; + + //set item wrapper + var objCssItemWrapper = {}; + objCssItemWrapper["width"] = itemWidth + "px"; + objCssItemWrapper["height"] = itemHeight + "px"; + objCssItemWrapper["top"] = g_options.slider_item_padding_top + "px"; + objCssItemWrapper["left"] = g_options.slider_item_padding_left + "px"; + + g_objSlider.find(".ug-item-wrapper").css(objCssItemWrapper); + + + //set text panel size + if(g_objTextPanel){ + g_objTextPanel.setSizeByParent(); + } + + positionElements(); + + //set image to slides + resizeSlideItem(g_objSlide1); + resizeSlideItem(g_objSlide2); + resizeSlideItem(g_objSlide3); + + positionSlides(); + + //set video player size + var currentSlideType = t.getSlideType(); + + if(currentSlideType != "image" && g_options.slider_video_constantsize == true){ + + setVideoPlayerConstantSize(); + }else{ + var videoWidth = width - g_options.slider_video_padding_left - g_options.slider_video_padding_right; + var videoHeight = height - g_options.slider_video_padding_top - g_options.slider_video_padding_bottom; + + //set video player size + g_objVideoPlayer.setSize(videoWidth, videoHeight); + } + + setVideoPlayerPosition(); + + } + + + /** + * refresh slide items after options change + */ + this.refreshSlideItems = function(){ + + if(t.isAnimating() == true) + return(true); + + resizeSlideItem(g_objSlide1); + resizeSlideItem(g_objSlide2); + resizeSlideItem(g_objSlide3); + positionSlides(); + + } + + + /** + * is mouse over the slider + */ + this.isMouseOver = function(){ + + return g_objSlider.ismouseover(); + } + + /** + * set slider position + */ + this.setPosition = function(left, top){ + + g_functions.placeElement(g_objSlider, left, top); + + } + + + /** + * zoom in + */ + this.zoomIn = function(){ + if(!g_objZoomSlider) + return(true); + + g_objZoomSlider.zoomIn(); + } + + /** + * zoom out + */ + this.zoomOut = function(){ + + if(!g_objZoomSlider) + return(true); + + g_objZoomSlider.zoomOut(); + + } + + /** + * zoom back to original + */ + this.zoomBack = function(){ + + if(!g_objZoomSlider) + return(true); + + g_objZoomSlider.zoomBack(); + } + + +} + +/** -------------- TextPanel class ---------------------*/ + +function UGTextPanel(){ + + var t = this; + var g_objPanel, g_objParent, g_objTitle, g_objDesc; + var g_objBG, g_objTextWrapper, g_gallery; + var g_functions = new UGFunctions(), g_optionsPrefix = ""; + + var g_options = { + textpanel_align:"bottom", //(top , bottom), textpanel align according the parent + textpanel_margin:0, //margin from the textpanel position according the textpanel_align + textpanel_text_valign:"middle", //middle, top, bottom - text vertical align + textpanel_padding_top:10, //textpanel padding top + textpanel_padding_bottom:10, //textpanel padding bottom + textpanel_height: null, //textpanel height. if null it will be set dynamically + textpanel_padding_title_description: 5, //the space between the title and the description + textpanel_padding_right: 11, //cut some space for text from right + textpanel_padding_left: 11, //cut some space for text from left + textpanel_fade_duration: 200, //the fade duration of textpanel appear + textpanel_enable_title: true, //enable the title text + textpanel_enable_description: true, //enable the description text + textpanel_enable_bg: true, //enable the textpanel background + textpanel_bg_color:"#000000", //textpanel background color + textpanel_bg_opacity: 0.4, //textpanel background opacity + + textpanel_title_color:null, //textpanel title color. if null - take from css + textpanel_title_font_family:null, //textpanel title font family. if null - take from css + textpanel_title_text_align:null, //textpanel title text align. if null - take from css + textpanel_title_font_size:null, //textpanel title font size. if null - take from css + textpanel_title_bold:null, //textpanel title bold. if null - take from css + textpanel_css_title:{}, //textpanel additional css of the title + + textpanel_desc_color:null, //textpanel description font family. if null - take from css + textpanel_desc_font_family:null, //textpanel description font family. if null - take from css + textpanel_desc_text_align:null, //textpanel description text align. if null - take from css + textpanel_desc_font_size:null, //textpanel description font size. if null - take from css + textpanel_desc_bold:null, //textpanel description bold. if null - take from css + textpanel_css_description:{}, //textpanel additional css of the description + + textpanel_desc_style_as_title: false, //set that the description style will be as title + + textpanel_bg_css:{} //textpanel background css + }; + + var g_temp = { + isFirstTime: true, + setInternalHeight: true //flag if set internal height or not + }; + + + /** + * position elements from top + */ + function positionElementsTop(animateHeight, startY){ + + if(!startY) + var startY = g_options.textpanel_padding_top; + + //place title + var maxy = startY; + + //place title + if(g_objTitle){ + var titleY = maxy; + g_functions.placeElement(g_objTitle, 0, titleY); + + var objTitleSize = g_functions.getElementSize(g_objTitle); + + var maxy = objTitleSize.bottom; + } + + //place description + var textDesc = ""; + if(g_objDesc) + textDesc = jQuery.trim(g_objDesc.text()); + + if(textDesc != ""){ + + var descY = maxy; + + if(g_objTitle) + descY += g_options.textpanel_padding_title_description; + + g_functions.placeElement(g_objDesc, 0, descY); + var objDescSize = g_functions.getElementSize(g_objDesc); + maxy = objDescSize.bottom; + } + + //change panel height + if(!g_options.textpanel_height && g_temp.setInternalHeight == true){ + + var panelHeight = maxy + g_options.textpanel_padding_bottom; + + setHeight(panelHeight, animateHeight); + } + + } + + /** + * get total text and description height + */ + function getTotalTextHeight(){ + var totalHeight = 0; + + if(g_objTitle) + totalHeight += g_objTitle.outerHeight(); + + if(g_objDesc){ + var textDesc = ""; + if(g_objDesc) + textDesc = jQuery.trim(g_objDesc.text()); + + if(textDesc != ""){ + if(g_objTitle) + totalHeight += g_options.textpanel_padding_title_description; + + totalHeight += g_objDesc.outerHeight(); + } + + } + + + return(totalHeight); + } + + + /** + * position elements to center + */ + function positionElementsMiddle(){ + + var totalTextHeight = getTotalTextHeight(); + var startY = (g_objTextWrapper.height() - totalTextHeight) / 2; + + positionElementsTop(false, startY); + } + + + /** + * position elements to bottom + */ + function positionElementBottom(){ + + var totalTextHeight = getTotalTextHeight(); + var startY = g_objTextWrapper.height() - totalTextHeight - g_options.textpanel_padding_bottom; + + positionElementsTop(false, startY); + } + + + /** + * position elements inside the panel + */ + this.positionElements = function(animateHeight){ + + //if(g_objPanel.is(":visible") == false) + //trace("the text panel is hidden. can't position elements") + + //if height not set, position only top + if(!g_options.textpanel_height || g_options.textpanel_text_valign == "top"){ + positionElementsTop(animateHeight); + return(false); + } + + switch(g_options.textpanel_text_valign){ + default: + case "top": + positionElementsTop(false); //no animation in this case + break; + case "bottom": + positionElementBottom(); + break; + case "center": + case "middle": + positionElementsMiddle(); + break; + } + + } + + + /** + * set new panel height + */ + function setHeight(height, animateHeight){ + + if(!animateHeight) + var animateHeight = false; + + if(animateHeight == true){ + + if(g_objBG){ + + //avoid background jumps + var currentHeight = g_objBG.height(); + if(height > currentHeight) + g_objBG.height(height); + } + + var objCss = {height: height+"px"}; + g_objPanel.add(g_objTextWrapper).animate(objCss, g_options.textpanel_fade_duration); + + }else{ + + if(g_objBG) + g_objBG.height(height); + + g_objPanel.add(g_objTextWrapper).height(height); + } + + } + + + + + /** + * init the panel + */ + this.init = function(objGallery, customOptions, optionsPrefix){ + + g_gallery = objGallery; + + //change options by prefix + if(optionsPrefix){ + g_optionsPrefix = optionsPrefix; + customOptions = g_functions.convertCustomPrefixOptions(customOptions,g_optionsPrefix,"textpanel"); + + } + + if(customOptions) + g_options = jQuery.extend(g_options, customOptions); + + //validation: + if(g_options.textpanel_enable_title == false && g_options.textpanel_enable_description == false) + throw new Error("Textpanel Error: The title or description must be enabled"); + + if(g_options.textpanel_height && g_options.textpanel_height < 0) + g_options.textpanel_height = null; + + //copy desc style from title + if(g_options.textpanel_desc_style_as_title == true){ + if(!g_options.textpanel_desc_color) + g_options.textpanel_desc_color = g_options.textpanel_title_color; + + if(!g_options.textpanel_desc_bold) + g_options.textpanel_desc_bold = g_options.textpanel_title_bold; + + if(!g_options.textpanel_desc_font_family) + g_options.textpanel_desc_font_family = g_options.textpanel_title_font_family; + + if(!g_options.textpanel_desc_font_size) + g_options.textpanel_desc_font_size = g_options.textpanel_title_font_size; + + if(!g_options.textpanel_desc_text_align) + g_options.textpanel_desc_text_align = g_options.textpanel_title_text_align; + } + + } + + + /** + * append the bullets html to some parent + */ + this.appendHTML = function(objParent, addClass){ + g_objParent = objParent; + + if(addClass){ + addClass = " "+addClass; + }else + addClass = ""; + + var html = "<div class='ug-textpanel"+addClass+"'>"; + + if(g_options.textpanel_enable_bg == true) + html += "<div class='ug-textpanel-bg"+addClass+"'></div>"; + + html += "<div class='ug-textpanel-textwrapper"+addClass+"'>"; + + if(g_options.textpanel_enable_title == true) + html += "<div class='ug-textpanel-title"+addClass+"'></div>"; + + if(g_options.textpanel_enable_description == true) + html += "<div class='ug-textpanel-description"+addClass+"'></div>"; + + html += "</div></div>"; + + objParent.append(html); + + g_objPanel = objParent.children(".ug-textpanel"); + g_objTextWrapper = g_objPanel.children(".ug-textpanel-textwrapper"); + + setCss(); + + } + + + /** + * set panel css according the options + */ + function setCss(){ + + //set background css + if(g_options.textpanel_enable_bg == true){ + g_objBG = g_objPanel.children(".ug-textpanel-bg"); + g_objBG.fadeTo(0,g_options.textpanel_bg_opacity); + + var objCssBG = {"background-color":g_options.textpanel_bg_color}; + objCssBG = jQuery.extend(objCssBG, g_options.textpanel_bg_css); + + g_objBG.css(objCssBG); + } + + + //set title css from options + if(g_options.textpanel_enable_title == true){ + g_objTitle = g_objTextWrapper.children(".ug-textpanel-title"); + var objCssTitle = {}; + + if(g_options.textpanel_title_color !== null) + objCssTitle["color"] = g_options.textpanel_title_color; + + if(g_options.textpanel_title_font_family !== null) + objCssTitle["font-family"] = g_options.textpanel_title_font_family; + + if(g_options.textpanel_title_text_align !== null) + objCssTitle["text-align"] = g_options.textpanel_title_text_align; + + if(g_options.textpanel_title_font_size !== null) + objCssTitle["font-size"] = g_options.textpanel_title_font_size+"px"; + + if(g_options.textpanel_title_bold !== null){ + + if(g_options.textpanel_title_bold === true) + objCssTitle["font-weight"] = "bold"; + else + objCssTitle["font-weight"] = "normal"; + + } + + //set additional css + if(g_options.textpanel_css_title) + objCssTitle = jQuery.extend(objCssTitle, g_options.textpanel_css_title); + + g_objTitle.css(objCssTitle); + } + + //set description css + if(g_options.textpanel_enable_description == true){ + g_objDesc = g_objTextWrapper.children(".ug-textpanel-description"); + + var objCssDesc = {}; + + if(g_options.textpanel_desc_color !== null) + objCssDesc["color"] = g_options.textpanel_desc_color; + + if(g_options.textpanel_desc_font_family !== null) + objCssDesc["font-family"] = g_options.textpanel_desc_font_family; + + if(g_options.textpanel_desc_text_align !== null) + objCssDesc["text-align"] = g_options.textpanel_desc_text_align; + + if(g_options.textpanel_desc_font_size !== null) + objCssDesc["font-size"] = g_options.textpanel_desc_font_size+"px"; + + if(g_options.textpanel_desc_bold !== null){ + + if(g_options.textpanel_desc_bold === true) + objCssDesc["font-weight"] = "bold"; + else + objCssDesc["font-weight"] = "normal"; + + } + + //set additional css + if(g_options.textpanel_css_title) + objCssDesc = jQuery.extend(objCssDesc, g_options.textpanel_css_description); + + g_objDesc.css(objCssDesc); + } + + } + + /** + * on item change, set the text + */ + function onItemChange(){ + var objItem = g_gallery.getSelectedItem(); + t.setText(objItem.title, objItem.description); + } + + + /** + * init events + */ + function initEvents(){ + + //on item change, set the text in the slider. + jQuery(g_gallery).on(g_gallery.events.ITEM_CHANGE, onItemChange); + } + + + /** + * destroy the events + */ + this.destroy = function(){ + jQuery(g_gallery).off(g_gallery.events.ITEM_CHANGE); + } + + /** + * run the text panel + */ + this.run = function(){ + + t.setSizeByParent(); + + initEvents(); + } + + /** + * set panel size + */ + this.setPanelSize = function(panelWidth, panelHeight){ + + g_temp.setInternalHeight = true; + + if(!panelHeight) + var panelHeight = 80; //some default number + else + g_temp.setInternalHeight = false; + + if(g_options.textpanel_height) + panelHeight = g_options.textpanel_height; + + g_objPanel.width(panelWidth); + g_objPanel.height(panelHeight); + + //set background size + if(g_objBG){ + g_objBG.width(panelWidth); + g_objBG.height(panelHeight); + } + + //set textwrapper size and position + var textWrapperWidth = panelWidth - g_options.textpanel_padding_left - g_options.textpanel_padding_right; + var textWrapperLeft = g_options.textpanel_padding_left; + + g_functions.setElementSizeAndPosition(g_objTextWrapper, textWrapperLeft, 0, textWrapperWidth, panelHeight); + + //set text width + if(g_objTitle) + g_objTitle.width(textWrapperWidth); + + //set description height + if(g_objDesc) + g_objDesc.width(textWrapperWidth); + + if(g_temp.isFirstTime == false) + t.positionElements(false); + } + + + /** + * set size by parent. the height is set to default meanwhile + */ + this.setSizeByParent = function(){ + + var objSize = g_functions.getElementSize(g_objParent); + t.setPanelSize(objSize.width); + } + + /** + * set plain sext without other manipulations + */ + this.setTextPlain = function(title, description){ + + if(g_objTitle) + g_objTitle.html(title); + + if(g_objDesc) + g_objDesc.html(description); + + } + + + /** + * set html text + */ + this.setText = function(title, description){ + + if(g_temp.isFirstTime == true){ + + t.setTextPlain(title, description); + + g_temp.isFirstTime = false; + + t.positionElements(false); + + }else{ //width animation + + g_objTextWrapper.stop().fadeTo(g_options.textpanel_fade_duration,0,function(){ + + t.setTextPlain(title, description); + + t.positionElements(true); + + jQuery(this).fadeTo(g_options.textpanel_fade_duration,1); + }); + + } + + } + + + + + /** + * position the panel + */ + this.positionPanel = function(customTop, customLeft){ + + var objCss = {}; + + if(customTop !== undefined && customTop !== null){ + objCss.top = customTop; + objCss.bottom = "auto"; + }else{ + + switch(g_options.textpanel_align){ + case "top": + objCss.top = g_options.textpanel_margin + "px"; + break; + case "bottom": + objCss.top = "auto"; + objCss.bottom = g_options.textpanel_margin + "px"; + break; + case "middle": + objCss.top = g_functions.getElementRelativePos(g_objPanel, "middle", g_options.textpanel_margin); + break; + } + + } + + if(customLeft !== undefined && customLeft !== null) + objCss.left = customLeft; + + g_objPanel.css(objCss); + } + + + /** + * set custom options + */ + this.setOptions = function(objOptions){ + + if(g_optionsPrefix) + objOptions = g_functions.convertCustomPrefixOptions(objOptions, g_optionsPrefix, "textpanel"); + + g_options = jQuery.extend(g_options, objOptions); + + } + + + /** + * get html element + */ + this.getElement = function(){ + + return(g_objPanel); + } + + /** + * get element size + */ + this.getSize = function(){ + + var objSize = g_functions.getElementSize(g_objPanel); + return(objSize); + } + + + /** + * refresh panel size, position and contents + */ + this.refresh = function(toShow, noPosition, panelWidth, panelHeight){ + + setCss(); + + if(!panelWidth) + t.setSizeByParent(); + else + t.setPanelSize(panelWidth, panelHeight); + + t.positionElements(false); + + if(noPosition !== true) + t.positionPanel(); + + if(toShow === true) + t.show(); + } + + + /** + * hide the panel + */ + this.hide = function(){ + + g_objPanel.hide(); + } + + /** + * show the panel + */ + this.show = function(){ + g_objPanel.show(); + } + + /** + * get options + */ + this.getOptions = function(){ + return(g_options); + } + + /** + * get text panel option + */ + this.getOption = function(optionName){ + + if(g_options.hasOwnProperty(optionName) == false) + return(null); + + return(g_options[optionName]); + } + + +} + +/** -------------- UGZoomButtonsPanel class ---------------------*/ + +/** + * zoom buttons panel class + */ +function UGZoomButtonsPanel(){ + + var t = this; + var g_objPanel, g_objParent, g_objButtonPlus, g_objButtonMinus, g_objButtonReturn; + var g_slider = new UGSlider; + var g_functions = new UGFunctions(); + + var g_options = { + slider_zoompanel_skin: "" //skin of the zoom panel, if empty inherit from gallery skin + }; + + var g_temp = { + + }; + + + /** + * init the panel + */ + this.init = function(objSlider, customOptions){ + + g_slider = objSlider; + + if(customOptions) + g_options = jQuery.extend(g_options, customOptions); + } + + + /** + * append the bullets html to some parent + */ + this.appendHTML = function(objParent){ + g_objParent = objParent; + + var html = "<div class='ug-slider-control ug-zoompanel ug-skin-"+g_options.slider_zoompanel_skin+"'>"; + + html += "<div class='ug-zoompanel-button ug-zoompanel-plus'></div>"; + html += "<div class='ug-zoompanel-button ug-zoompanel-minus ug-zoompanel-button-disabled'></div>"; + html += "<div class='ug-zoompanel-button ug-zoompanel-return ug-zoompanel-button-disabled'></div>"; + + html += "</div>"; + + objParent.append(html); + + g_objPanel = objParent.children(".ug-zoompanel"); + g_objButtonPlus = g_objPanel.children(".ug-zoompanel-plus"); + g_objButtonMinus = g_objPanel.children(".ug-zoompanel-minus"); + g_objButtonReturn = g_objPanel.children(".ug-zoompanel-return"); + + } + + + /** + * set objects - use it instead insert html + */ + this.setObjects = function(objButtonPlus, objButtonMinus, objButtonReturn){ + + g_objButtonPlus = objButtonPlus; + g_objButtonMinus = objButtonMinus; + g_objButtonReturn = objButtonReturn; + + if(g_objButtonMinus) + g_objButtonMinus.addClass("ug-zoompanel-button-disabled"); + + if(g_objButtonReturn) + g_objButtonReturn.addClass("ug-zoompanel-button-disabled"); + + } + + + /** + * get buttons element + */ + this.getElement = function(){ + + return(g_objPanel); + } + + + /** + * check if the button disabled + */ + function isButtonDisabled(objButton){ + + if(!objButton) + return(true); + + if(objButton.hasClass("ug-zoompanel-button-disabled")) + return(true); + + return(false); + } + + + /** + * disable some button + */ + function disableButton(objButton){ + + if(objButton) + objButton.addClass("ug-zoompanel-button-disabled"); + } + + /** + * enable some button + */ + function enableButton(objButton){ + + if(objButton) + objButton.removeClass("ug-zoompanel-button-disabled"); + } + + + /** + * on zoom change + */ + function onZoomChange(){ + + //skip not image types + if(g_slider.isCurrentSlideType("image") == false) + return(true); + + var isFit = g_slider.isCurrentSlideImageFit(); + + if(isFit == true){ //if fit, disable buttons + + if(isButtonDisabled(g_objButtonMinus) == false){ + disableButton(g_objButtonMinus); + disableButton(g_objButtonReturn); + } + + }else{ //if not fit, enable minus buttons + + if(isButtonDisabled(g_objButtonMinus) == true){ + enableButton(g_objButtonMinus); + enableButton(g_objButtonReturn); + } + + } + + } + + /** + * init zoompanel events + */ + t.initEvents = function(){ + + //add hover class on buttons + g_functions.addClassOnHover(g_objButtonPlus, "ug-button-hover"); + g_functions.addClassOnHover(g_objButtonMinus, "ug-button-hover"); + g_functions.addClassOnHover(g_objButtonReturn, "ug-button-hover"); + + //set buttons click events + + g_functions.setButtonOnClick(g_objButtonPlus, function(){ + + if(isButtonDisabled(g_objButtonPlus) == true) + return(true); + + g_slider.zoomIn(); + }); + + g_functions.setButtonOnClick(g_objButtonMinus, function(){ + + if(isButtonDisabled(g_objButtonMinus) == true) + return(true); + + g_slider.zoomOut(); + }); + + g_functions.setButtonOnClick(g_objButtonReturn, function(){ + + if(isButtonDisabled(g_objButtonReturn) == true) + return(true); + + g_slider.zoomBack(); + }); + + //on zoom change event + jQuery(g_slider).on(g_slider.events.ZOOM_CHANGE,onZoomChange); + jQuery(g_slider).on(g_slider.events.ITEM_CHANGED,onZoomChange); + + } + + +} + + +/** -------------- UgBullets class ---------------------*/ + +function UGBullets(){ + + var t = this, g_numBullets = 0, g_gallery = new UniteGalleryMain(); + var g_objBullets, g_objParent, g_activeIndex = -1, g_bulletWidth; + var g_functions = new UGFunctions(); + + var g_temp = { + isInited:false + }; + + var g_options = { + bullets_skin: "", //bullets_skin: "" //skin of the bullets, if empty inherit from gallery skin + bullets_addclass: "", //bullets object class addition + bullets_space_between:-1 //set the space between bullets. If -1 then will be set default space from the skins + } + + + /** + * the events + */ + this.events = { + BULLET_CLICK : "bullet_click" + }; + + /** + * init the bullets + */ + this.init = function(gallery, customOptions, numBullets){ + g_gallery = gallery; + + if(numBullets) + g_numBullets = numBullets; + else + g_numBullets = g_gallery.getNumItems(); + + g_temp.isInited = true; + g_options = jQuery.extend(g_options, customOptions); + + if(g_options.bullets_skin == "") + g_options.bullets_skin = g_options.gallery_skin; + + } + + /** + * add bullets to the html + */ + function setHtmlBullets(){ + var html = ""; + + var addHtml = ""; + if(g_options.bullets_space_between != -1) + addHtml = " style='margin-left:" + g_options.bullets_space_between + "px'"; + + for(var i=0; i< g_numBullets; i++){ + if(i == 0) + html += "<div class='ug-bullet'></div>"; + else + html += "<div class='ug-bullet'"+addHtml+"></div>"; + } + + g_objBullets.html(html); + + //set bullet width value + if(!g_bulletWidth){ + var objBullet = g_objBullets.find(".ug-bullet:first-child"); + if(objBullet.length) + g_bulletWidth = objBullet.width(); + } + } + + /** + * get total bullets width + */ + this.getBulletsWidth = function(){ + if(g_numBullets == 0) + return(0); + + if(!g_bulletWidth) + return(0); + + var totalWidth = g_numBullets*g_bulletWidth+(g_numBullets-1)*g_options.bullets_space_between; + return(totalWidth); + } + + + /** + * append the bullets html to some parent + */ + this.appendHTML = function(objParent){ + g_objParent = objParent; + + validateInited(); + var addClass = ""; + if(g_options.bullets_addclass != "") + addClass = " " + g_options.bullets_addclass; + + var html = "<div class='ug-slider-control ug-bullets ug-skin-"+g_options.bullets_skin + addClass+"'>"; + + html += "</div>"; + + g_objBullets = jQuery(html); + + objParent.append(g_objBullets); + + setHtmlBullets(); + + initEvents(); + } + + + /** + * update number of bullets + */ + this.updateNumBullets = function(numBullets){ + + g_numBullets = numBullets; + setHtmlBullets(); + initEvents(); + } + + + /** + * + * on bullet click + */ + function onBulletClick(objBullet){ + + //filter not active only + if(t.isActive(objBullet) == true) + return(true); + + var index = objBullet.index(); + + jQuery(t).trigger(t.events.BULLET_CLICK, index); + } + + + /** + * init the bullets events + * trigger bullet click event + */ + function initEvents(){ + + var objBullets = g_objBullets.children(".ug-bullet"); + + g_functions.setButtonOnClick(objBullets, onBulletClick); + + objBullets.on("mousedown mouseup",function(event){ + //event.preventDefault(); + return(false); + }); + + } + + + /** + * get the bullets element + */ + this.getElement = function(){ + return g_objBullets; + } + + + /** + * set some item active + */ + this.setActive = function(index){ + validateInited(); + validateIndex(index); + + var children = g_objBullets.children(".ug-bullet"); + children.removeClass("ug-bullet-active"); + + var bullet = jQuery(children[index]); + bullet.addClass("ug-bullet-active"); + + g_activeIndex = index; + } + + + /** + * check if the bullet is active + */ + this.isActive = function(index){ + validateIndex(index); + + if(typeof index != "number") + var objBullet = index; + else{ + var objBullet = g_objBullets.children(".ug-bullet")[index]; + } + + if(objBullet.hasClass("ug-bullet-active")) + return(true); + + return(false); + } + + + /** + * get bullets number + */ + this.getNumBullets = function(){ + return(g_numBullets); + } + + /** + * validate bullets index + */ + function validateIndex(index){ + if(index < 0 || index >= g_numBullets) + throw new Error("wrong bullet index: " + index); + } + + + /** + * validate that the bullets are inited + */ + function validateInited(){ + + if(g_temp.isInited == true) + return(true); + + throw new Error("The bullets are not inited!"); + } + + + +} + +/** -------------- UgProgressBar class ---------------------*/ + +function UGProgressBar(){ + + var t = this, g_isInited = false; + var g_percent = 0, g_objBar, g_objInner, g_functions = new UGFunctions(); + + var g_options = { + slider_progressbar_color:"#ffffff", //progress bar color + slider_progressbar_opacity: 0.6, //progress bar opacity + slider_progressbar_line_width: 5 //progress bar line width + } + + + /** + * put progress pie to some wrapper + */ + this.put = function(g_objWrapper, userOptions){ + + if(userOptions) + g_options = jQuery.extend(g_options, userOptions); + + g_objWrapper.append("<div class='ug-progress-bar'><div class='ug-progress-bar-inner'></div></div>"); + g_objBar = g_objWrapper.children(".ug-progress-bar"); + g_objInner = g_objBar.children(".ug-progress-bar-inner"); + + //init the objects + g_objInner.css("background-color", g_options.slider_progressbar_color); + g_objBar.height(g_options.slider_progressbar_line_width); + g_objInner.height(g_options.slider_progressbar_line_width); + g_objInner.width("0%"); + + //set opacity old way (because ie bug) + var opacity = g_options.slider_progressbar_opacity; + + var objInnerHTML = g_objInner[0]; + objInnerHTML.style.opacity = opacity; + objInnerHTML.style.filter = 'alpha(opacity=' + opacity*100 + ')'; + } + + + /** + * put the pie hidden + */ + this.putHidden = function(g_objWrapper, userOptions){ + t.put(g_objWrapper, userOptions); + g_objBar.hide(); + } + + /** + * get the bar object + */ + this.getElement = function(){ + + return(g_objBar); + } + + /** + * set progress bar size + */ + this.setSize = function(width){ + + g_objBar.width(width); + g_objInner.width(width); + t.draw(); + } + + + /** + * set position + */ + this.setPosition = function(left, top, offsetLeft, offsetTop){ + + g_functions.placeElement(g_objBar, left, top, offsetLeft, offsetTop); + } + + + /** + * draw the progress bar + */ + this.draw = function(){ + var innerWidth = g_percent * 100; + + g_objInner.width(innerWidth + "%"); + } + + + /** + * set and draw the progress + */ + this.setProgress = function(percent){ + + g_percent = g_functions.normalizePercent(percent); + + //debugLine(g_percent, true); + + t.draw(); + } + + /** + * get type string + */ + this.getType = function(){ + return("bar"); + } + +} + +/** -------------- UgProgressPie class ---------------------*/ + +function UGProgressPie(){ + + var t = this, g_isInited = false; + var g_percent, g_objPie, g_functions = new UGFunctions(); + + var g_options = { + slider_progresspie_type_fill: false, //false is stroke, true is fill - the progress pie type, stroke of fill + slider_progresspie_color1: "#B5B5B5", //the first color of the progress pie + slider_progresspie_color2: "#E5E5E5", //progress pie second color + slider_progresspie_stroke_width: 6, //progress pie stroke width + slider_progresspie_width: 30, //progess pie width + slider_progresspie_height:30 //progress pie height + } + + + /** + * put progress pie to some wrapper + */ + this.put = function(g_objWrapper, userOptions){ + + if(userOptions) + g_options = jQuery.extend(g_options, userOptions); + + g_objWrapper.append("<canvas class='ug-canvas-pie' width='"+g_options.slider_progresspie_width+"' height='"+g_options.slider_progresspie_height+"'></canvas>"); + g_objPie = g_objWrapper.children(".ug-canvas-pie"); + } + + + /** + * put the pie hidden + */ + this.putHidden = function(g_objWrapper, userOptions){ + t.put(g_objWrapper, userOptions); + draw(0.1); + g_objPie.hide(); + } + + + /** + * get jquery object + */ + this.getElement = function(){ + return(g_objPie); + } + + /** + * set position + */ + this.setPosition = function(left, top){ + + g_functions.placeElement(g_objPie, left, top); + + } + + /** + * get the height and width of the object + */ + this.getSize = function(){ + + var obj = { + width: g_options.slider_progresspie_width, + height: g_options.slider_progresspie_height + }; + + return(obj); + } + + /** + * draw the progress pie + */ + function draw(percent){ + + if(!percent) + var percent = 0; + + var radius = Math.min(g_options.slider_progresspie_width, g_options.slider_progresspie_height) / 2; + + var ctx = g_objPie[0].getContext('2d'); + + //init the context + if(g_isInited == false){ + + g_isInited = true; + + ctx.rotate(Math.PI*(3/2)); + ctx.translate(-2 * radius,0); + } + + ctx.clearRect(0,0,g_options.slider_progresspie_width, g_options.slider_progresspie_height); + + var centerX = g_options.slider_progresspie_width / 2; + var centerY = g_options.slider_progresspie_height / 2; + + //draw main arc + var startPoint = 0; + var endPoint = percent * Math.PI * 2; + + + if(g_options.slider_progresspie_type_fill == true){ //fill + + ctx.beginPath(); + ctx.moveTo(centerX, centerY); + ctx.arc(centerX,centerY,radius,startPoint, endPoint); + ctx.lineTo(centerX, centerY); + + ctx.fillStyle = g_options.slider_progresspie_color1; + ctx.fill(); + ctx.closePath(); + + }else{ //stroke + ctx.globalCompositeOperation = "source-over"; + + ctx.beginPath(); + ctx.moveTo(centerX, centerY); + ctx.arc(centerX,centerY,radius,startPoint, endPoint); + ctx.lineTo(centerX, centerY); + + ctx.fillStyle = g_options.slider_progresspie_color1; + ctx.fill(); + ctx.closePath(); + + ctx.globalCompositeOperation = "destination-out"; + + var radius2 = radius - g_options.slider_progresspie_stroke_width; + + ctx.beginPath(); + + ctx.moveTo(centerX, centerY); + ctx.arc(centerX,centerY,radius2,startPoint, endPoint); + ctx.lineTo(centerX, centerY); + + ctx.fillStyle = g_options.slider_progresspie_color1; + ctx.fill(); + + ctx.closePath(); + } + + + //draw rest arc (only on fill type): + if(g_options.slider_progresspie_type_fill == true){ + startPoint = endPoint; + endPoint = Math.PI * 2; + ctx.beginPath(); + ctx.arc(centerX,centerY,radius,startPoint, endPoint); + ctx.lineTo(centerX, centerY); + ctx.fillStyle = g_options.slider_progresspie_color2; + ctx.fill(); + ctx.closePath(); + } + + } + + + /** + * set progress (0-1) + */ + this.setProgress = function(percent){ + + percent = g_functions.normalizePercent(percent); + + g_percent = percent; + draw(percent); + } + + /** + * get type string + */ + this.getType = function(){ + return("pie"); + } + +} + +/**f + * touch thumbs control class + * addon to strip gallery + */ +function UGTouchSliderControl(){ + + var g_objSlider, g_objInner, g_parent = new UGSlider(); + var g_objParent, g_options, t=this; + + var g_functions = new UGFunctions(); + + + var g_options = { + slider_transition_continuedrag_speed: 250, //the duration of continue dragging after drag end + slider_transition_continuedrag_easing: "linear", //easing function of continue dragging animation + slider_transition_return_speed: 300, //the duration of the "return to place" animation + slider_transition_return_easing: "easeInOutQuad" //easing function of the "return to place" animation + }; + + var g_temp = { + touch_active: false, + startMouseX: 0, + startMouseY: 0, + lastMouseX: 0, + lastMouseY: 0, + startPosx:0, + startTime:0, + isInitDataValid:false, + slides: null, + lastNumTouches:0, + isDragging: false, + storedEventID: "touchSlider", + videoStartX: 0, + isDragVideo: false, + videoObject: null + }; + + + /** + * get diff inner object position from current item pos + */ + function getDiffPosFromCurrentItem(slides){ + + if(!slides) + var slides = g_parent.getSlidesReference(); + + var posCurrent = g_functions.getElementSize(slides.objCurrentSlide); + var inPlaceX = -posCurrent.left; + var objInnerSize = g_functions.getElementSize(g_objInner); + var diffPos = inPlaceX - objInnerSize.left; + + return(diffPos); + } + + /** + * check if the movement that was held is valid for slide change + */ + function isMovementValidForChange(){ + + var slides = g_parent.getSlidesReference(); + + //check position, if more then half, move + var diffPos = getDiffPosFromCurrentItem(slides); + + var breakSize = Math.round(slides.objCurrentSlide.width() * 3 / 8); + + if(Math.abs(diffPos) >= breakSize) + return(true); + + //check gesture, if vertical mostly then not move + var diffX = Math.abs(g_temp.lastMouseX - g_temp.startMouseX); + var diffY = Math.abs(g_temp.lastMouseY - g_temp.startMouseY); + + //debugLine("diffx: " + diffX, true, true); + + if(diffX < 20) + return(false); + + //if(diffY >= diffX) + //return(false); + + //check time. Short time always move + var endTime = jQuery.now(); + var diffTime = endTime - g_temp.startTime; + + //debugLine("time: " + diffTime, true); + + if(diffTime < 500) + return(true); + + + return(false); + } + + /** + * check tab event occured + * invokes on touchend event on the slider object + */ + this.isTapEventOccured = function(event){ + + //validate one touch + var arrTouches = g_functions.getArrTouches(event); + var numTouches = arrTouches.length; + + if(numTouches != 0 || g_temp.lastNumTouches != 0){ + g_temp.lastNumTouches = numTouches; + return(false); + } + + g_temp.lastNumTouches = numTouches; + + var slides = g_parent.getSlidesReference(); + + //check position, if more then half, move + var diffPos = getDiffPosFromCurrentItem(slides); + + //check gesture, if vertical mostly then not move + var diffX = Math.abs(g_temp.lastMouseX - g_temp.startMouseX); + var diffY = Math.abs(g_temp.lastMouseY - g_temp.startMouseY); + + //check by time + var endTime = jQuery.now(); + var diffTime = endTime - g_temp.startTime; + + //combine move and time + if(diffX < 20 && diffY < 50 && diffTime < 500) + return(true); + + return(false); + } + + /** + * return the item to place + */ + function returnToPlace(slides){ + + if(g_parent.isInnerInPlace() == true) + return(false); + + //trigger before return event + g_objParent.trigger(g_parent.events.BEFORE_RETURN); + + if(!slides) + var slides = g_parent.getSlidesReference(); + + var posCurrent = g_functions.getElementSize(slides.objCurrentSlide); + var destX = -posCurrent.left; + + //animate objects + g_objInner.animate({left:destX+"px"},{ + duration: g_options.slider_transition_return_speed, + easing: g_options.slider_transition_continuedrag_easing, + queue: false, + progress: function(animation, number, remainingMS){ + + //check drag video + if(g_temp.isDragVideo == true){ + var objSize = g_functions.getElementSize(g_objInner); + var innerX = objSize.left; + + var posDiff = innerX - destX; + + var videoPosX = g_temp.videoStartX + posDiff; + g_temp.videoObject.css("left", videoPosX); + } + + }, + complete: function(){ + g_objParent.trigger(g_parent.events.AFTER_RETURN); + } + }); + + } + + + /** + * + * change the item to given direction + */ + function changeItem(direction){ + + g_parent.getVideoObject().hide(); + g_parent.switchSlideNums(direction); + g_parent.placeNabourItems(); + + } + + /** + * continue the dragging by changing the slides to the right place. + */ + function continueSlideDragChange(){ + + //get data + var slides = g_parent.getSlidesReference(); + + var diffPos = getDiffPosFromCurrentItem(slides); + + if(diffPos == 0) + return(false); + + var direction = (diffPos > 0) ? "left" : "right"; + + var isReturn = false; + + switch(direction){ + case "right": //change to prev item + + if( g_parent.isSlideHasItem(slides.objPrevSlide) ){ + + var posPrev = g_functions.getElementSize(slides.objPrevSlide); + var destX = -posPrev.left; + + }else //return current item + isReturn = true; + + break; + case "left": //change to next item + + if( g_parent.isSlideHasItem(slides.objNextSlide) ){ + + var posNext = g_functions.getElementSize(slides.objNextSlide); + var destX = -posNext.left; + + }else + isReturn = true; + break; + } + + + if(isReturn == true){ + returnToPlace(slides); + + }else{ + + //animate objects + g_objInner.stop().animate({left:destX+"px"},{ + duration: g_options.slider_transition_continuedrag_speed, + easing: g_options.slider_transition_continuedrag_easing, + queue: false, + progress: function(){ + + //check drag video + if(g_temp.isDragVideo == true){ + var objSize = g_functions.getElementSize(g_objInner); + var innerX = objSize.left; + var posDiff = innerX - g_temp.startPosx; + var videoPosX = g_temp.videoStartX + posDiff; + g_temp.videoObject.css("left", videoPosX); + } + + }, + always:function(){ + changeItem(direction); + g_objParent.trigger(g_parent.events.AFTER_DRAG_CHANGE); + } + }); + + } + + + } + + + /** + * handle slider drag on mouse drag + */ + function handleSliderDrag(event){ + + var diff = g_temp.lastMouseX - g_temp.startMouseX; + + if(diff == 0) + return(true); + + var direction = (diff < 0) ? "left":"right"; + + var objZoomSlider = g_parent.getObjZoom(); + + //don't drag if the zoom panning enabled + //store init position after image zoom pan end + if(objZoomSlider){ + + var isPanEnabled = objZoomSlider.isPanEnabled(event,direction); + + if(isPanEnabled == true){ + g_temp.isInitDataValid = false; + return(true); + }else{ + + if(g_temp.isInitDataValid == false){ + storeInitTouchData(event); + return(true); + } + + } + } + + //set inner div position + var currentPosx = g_temp.startPosx + diff; + + //check out of borders and slow down the motion: + if(diff > 0 && currentPosx > 0) + currentPosx = currentPosx / 3; + + else if(diff < 0 ){ + + var innerEnd = currentPosx + g_objInner.width(); + var sliderWidth = g_objSlider.width(); + + if( innerEnd < sliderWidth ){ + currentPosx = g_temp.startPosx + diff/3; + } + } + + if(g_temp.isDragging == false){ + g_temp.isDragging = true; + g_objParent.trigger(g_parent.events.START_DRAG); + } + + g_objInner.css("left", currentPosx+"px"); + + //drag video + if(g_temp.isDragVideo == true){ + var posDiff = currentPosx - g_temp.startPosx; + var videoPosX = g_temp.videoStartX + posDiff; + + g_temp.videoObject.css("left", videoPosX); + } + + } + + /** + * store init touch position + */ + function storeInitTouchData(event){ + + var mousePos = g_functions.getMousePosition(event); + + g_temp.startMouseX = mousePos.pageX; + + //debugLine("startx:" + g_temp.startMouseX, true, true); + + g_temp.startMouseY = mousePos.pageY; + + g_temp.lastMouseX = g_temp.startMouseX; + g_temp.lastMouseY = g_temp.startMouseY; + g_temp.startTime = jQuery.now(); + + var arrTouches = g_functions.getArrTouches(event); + g_temp.startArrTouches = g_functions.getArrTouchPositions(arrTouches); + + var objPos = g_functions.getElementSize(g_objInner); + + g_temp.startPosx = objPos.left; + + g_temp.isInitDataValid = true; + + //check if video object need to be dragged + g_temp.isDragVideo = false; + + + g_functions.storeEventData(event, g_temp.storedEventID); + } + + /** + * disable touch active + */ + function disableTouchActive(who){ + + g_temp.touch_active = false; + + //debugLine("disable: " + who, true, true); + } + + /** + * enable the touch active + */ + function enableTouchActive(who, event){ + + g_temp.touch_active = true; + storeInitTouchData(event); + + //debugLine("enable: " + who, true, true); + } + + + /** + * on touch slide start + * + */ + function onTouchStart(event){ + + event.preventDefault(); + + g_temp.isDragging = false; + + //debugLine("touchstart", true, true); + + //check if the slides are changing from another event. + if(g_parent.isAnimating() == true){ + g_objInner.stop(true, true); + } + + //check num touches + var arrTouches = g_functions.getArrTouches(event); + if(arrTouches.length > 1){ + + if(g_temp.touch_active == true){ + disableTouchActive("1"); + } + + return(true); + } + + if(g_temp.touch_active == true){ + return(true); + } + + enableTouchActive("1", event); + + } + + + /** + * + * on touch move event + */ + function onTouchMove(event){ + + if(g_temp.touch_active == false) + return(true); + + //detect moving without button press + if(event.buttons == 0){ + disableTouchActive("2"); + + continueSlideDragChange(); + + return(true); + } + + g_functions.updateStoredEventData(event, g_temp.storedEventID); + + event.preventDefault(); + + var mousePos = g_functions.getMousePosition(event); + g_temp.lastMouseX = mousePos.pageX; + g_temp.lastMouseY = mousePos.pageY; + + //debugLine("lastX:" + g_temp.lastMouseX, true, true); + + var scrollDir = null; + + if(g_options.slider_vertical_scroll_ondrag == true) + scrollDir = g_functions.handleScrollTop(g_temp.storedEventID); + + if(scrollDir !== "vert") + handleSliderDrag(event); + + } + + /** + * on touch end event + */ + function onTouchEnd(event){ + + //debugLine("touchend", true, true); + + var arrTouches = g_functions.getArrTouches(event); + var numTouches = arrTouches.length; + var isParentInPlace = g_parent.isInnerInPlace(); + + if(isParentInPlace == true && g_temp.touch_active == false && numTouches == 0){ + + return(true); + } + + if(numTouches == 0 && g_temp.touch_active == true){ + + disableTouchActive("3"); + + var isValid = false; + + var wasVerticalScroll = g_functions.wasVerticalScroll(g_temp.storedEventID); + + if(wasVerticalScroll == false) + isValid = isMovementValidForChange(); + + if(isValid == true) + continueSlideDragChange(); //change the slide + else + returnToPlace(); //return the inner object to place (if not in place) + + }else{ + + if(numTouches == 1 && g_temp.touch_active == false){ + + enableTouchActive("2",event); + } + + } + + } + + + /** + * init touch events + */ + function initEvents(){ + + //slider mouse down - drag start + g_objSlider.bind("mousedown touchstart",onTouchStart); + + //on body move + jQuery("body").bind("mousemove touchmove",onTouchMove); + + //on body mouse up - drag end + jQuery(window).add("body").bind("mouseup touchend", onTouchEnd); + + } + + + + /** + * init function for avia controls + */ + this.init = function(objSlider, customOptions){ + + g_parent = objSlider; + g_objParent = jQuery(g_parent); + g_objects = objSlider.getObjects(); + + g_objSlider = g_objects.g_objSlider; + g_objInner = g_objects.g_objInner; + + g_options = jQuery.extend(g_options, customOptions); + + initEvents(); + } + + + /** + * get last mouse position + */ + this.getLastMousePos = function(){ + var obj = { + pageX: g_temp.lastMouseX, + pageY: g_temp.lastMouseY + }; + + return(obj); + } + + + /** + * is touch active + */ + this.isTouchActive = function(){ + + return(g_temp.touch_active); + + } + + +} +/** + * touch thumbs control class + * addon to strip gallery + */ +function UGZoomSliderControl(){ + + var g_objSlider, g_objInner, g_parent = new UGSlider(), g_objParent; + + var g_functions = new UGFunctions(); + + var t = this; + + var g_options = { + slider_zoom_step: 1.2, //the step of zooming with mouse wheel or zoom button + slider_zoom_max_ratio: 6, //max zoom ratio + slider_zoom_return_pan_duration: 400, //the return from pan animation duration + slider_zoom_return_pan_easing: "easeOutCubic" //the return from pan wasing function + }; + + var g_temp = { + isPanActive:false, + startMouseX:0, + startMouseY:0, + lastMouseX:0, + lastMouseY:0, + startImageX:0, + startImageY:0, + panXActive:false, + panYActive:false, + objImage:null, + objImageSize:null, + objParent:null, + objParentSize:null, + objSlide:null, + storeImageLastTime:0, + + isZoomActive: false, + startDistance:0, + startMiddlePoint:null, + imageOrientPoint:null, + objFitImageSize:null, + isZoomedOnce:false + }; + + + /** + * init the object + */ + function initObject(objSlider, customOptions){ + + g_parent = objSlider; + g_objParent = jQuery(g_parent); + g_objects = objSlider.getObjects(); + g_objSlider = g_objects.g_objSlider; + g_objInner = g_objects.g_objInner; + + g_options = jQuery.extend(g_options, customOptions); + + initEvents(); + } + + + /** + * get fit image to slider scale mode + * the fill become fit + */ + function getFitScaleMode(){ + + var scaleMode = g_parent.getScaleMode(); + + if(scaleMode != "down") + scaleMode = "fit"; + + return(scaleMode); + } + + + /** + * cache current slide and image + */ + function storeCurrentImage(){ + + //prevent continious image storring + var currentTime = jQuery.now(); + var diff = currentTime - g_temp.storeImageLastTime; + + if(diff < 20) + return(false); + + var slides = g_parent.getSlidesReference(); + g_temp.objSlide = slides.objCurrentSlide; + g_temp.objImage = slides.objCurrentSlide.find("img"); + + if(g_temp.objImage.length == 0) + return(false); + + g_temp.objImageSize = g_functions.getElementSize(g_temp.objImage); + g_temp.objParent = g_temp.objImage.parent(); + g_temp.objParentSize = g_functions.getElementSize(g_temp.objParent); + + var scaleMode = getFitScaleMode(); + + objPadding = g_parent.getObjImagePadding(); + + g_temp.objFitImageSize = g_functions.getImageInsideParentDataByImage(g_temp.objImage, scaleMode, objPadding); + + var currentTime = jQuery.now(); + g_temp.storeImageLastTime = currentTime; + + return(true); + } + + + /** + * zoom current image + * mode: in, out, back + */ + function zoomCurrentImage(mode, mousePos){ + + var slides = g_parent.getSlidesReference(); + var objImage = slides.objCurrentSlide.find("img"); + var scaleMode = getFitScaleMode(); + + g_objParent.trigger(g_parent.events.ZOOM_START); + + //flag if the images zoomed + var isZoomed = true; + + var objPadding = g_parent.getObjImagePadding(); + + if(mode == "back"){ + var objOriginalSize = g_functions.getImageOriginalSize(objImage); + g_functions.scaleImageFitParent(objImage, objOriginalSize.width, objOriginalSize.height, scaleMode, objPadding); + } + else{ + var zoomIn = (mode == "in")?true:false; + + isZoomed = g_functions.zoomImageInsideParent(objImage, zoomIn, g_options.slider_zoom_step, mousePos, scaleMode, g_options.slider_zoom_max_ratio, objPadding); + } + + if(isZoomed == true){ + g_objParent.trigger(g_parent.events.ZOOMING); + g_objParent.trigger(g_parent.events.ZOOM_CHANGE); + g_objParent.trigger(g_parent.events.ZOOM_END); + } + + } + + + function ____________PAN_____________(){}; + + + /** + * check if pan is posible for the current image + * check if the image is bigger then the parent + */ + function isPanPosible(objImage, event, stictTouchesCheck){ + + //check num touches, strict means that even if 0 - pan not posible + var arrTouches = g_functions.getArrTouches(event); + + if(stictTouchesCheck === true){ + + if(arrTouches.length != 1) + return(false); + }else{ + if(arrTouches.length > 1) + return(false); + } + + if(g_functions.isElementBiggerThenParent(objImage)) + return(true); + + return(false); + } + + + /** + * store pan values + */ + function storePanInitValues(event){ + + var mousePos = g_functions.getMousePosition(event); + + g_temp.startMouseX = mousePos.pageX; + g_temp.startMouseY = mousePos.pageY; + + g_temp.lastMouseX = g_temp.startMouseX; + g_temp.lastMouseY = g_temp.startMouseY; + + g_temp.startImageX = g_temp.objImageSize.left; + g_temp.startImageY = g_temp.objImageSize.top; + + g_temp.panXActive = (g_temp.objImageSize.width > g_temp.objParentSize.width); + g_temp.panYActive = (g_temp.objImageSize.height > g_temp.objParentSize.height); + + } + + + /** + * check pan start, and start if posible + */ + function startPan(event){ + + g_temp.isPanActive = true; + storePanInitValues(event); + + } + + + /** + * pan the image + */ + function panImage(event){ + + if(g_temp.objImage == undefined || g_temp.objImage.length == 0) + return(true); + + var mousePos = g_functions.getMousePosition(event); + + var diffX = mousePos.pageX - g_temp.startMouseX; + var diffY = mousePos.pageY - g_temp.startMouseY; + + //get active direction + var diffLastX = mousePos.pageX - g_temp.lastMouseX; + var diffLastY = mousePos.pageY - g_temp.lastMouseY; + + var directionX = (diffLastX < 0) ? "left":"right"; + var directionY = (diffLastY < 0) ? "up":"down"; + + g_temp.lastMouseX = mousePos.pageX; + g_temp.lastMouseY = mousePos.pageY; + + var posImage = g_functions.getElementSize(g_temp.objImage); + + //var imageX = g_temp.startImageX + diffX; + //var imageY = g_temp.startImageY + diffY; + + + //slow down if no pan available in this point + //slow down y + + if(g_temp.panYActive == false){ + + diffLastY = 0; + + }else{ //zoom enabled + + if(directionY == "down" && posImage.top > 0){ + + diffLastY = diffLastY / 3; + + }else if(directionY == "up" && posImage.bottom < g_temp.objParentSize.height){ + + diffLastY = diffLastY / 3; + + } + } + + //slow down x (only if the pan enabled) + if(g_temp.panXActive == false || g_parent.isInnerInPlace() == false){ + + diffLastX = 0; + + }else{ //zoom enabled + + if(directionX == "right" && posImage.left > 0){ + diffLastX = diffLastX / 3; + } + else if(directionX == "left" && posImage.right < g_temp.objParentSize.width){ + diffLastX = diffLastX / 3; + } + } + + var imageX = posImage.left + diffLastX; + var imageY = posImage.top + diffLastY; + + + g_functions.placeElement(g_temp.objImage, imageX, imageY); + + } + + + + + /** + * return the image to place if it's out of borders + */ + function checkReturnAfterPan(){ + + var isReturnX = false, isReturnY = false, newX = 0, newY = 0; + var objSize = g_functions.getElementSize(g_temp.objImage); + var objImagePadding = g_parent.getObjImagePadding(); + + var objCenterPos = g_functions.getElementCenterPosition(g_temp.objImage, objImagePadding); + + g_temp.panXActive = (g_temp.objImageSize.width > g_temp.objParentSize.width); + g_temp.panYActive = (g_temp.objImageSize.height > g_temp.objParentSize.height); + + + if(g_temp.panYActive == true){ + + if(objSize.top > 0){ //off limit top + + newY = 0; + isReturnY = true; + + }else if(objSize.bottom < g_temp.objParentSize.height){ //off limit bottom + + newY = g_temp.objParentSize.height - objSize.height; + isReturnY = true; + + } + + }else{ //pan not active y - return to center + + if(objSize.top != objCenterPos.top){ + isReturnY = true; + newY = objCenterPos.top; + } + + } + + + //check return x to place + if(g_temp.panXActive == true){ + + if(objSize.left > 0){ //off limit left + + newX = 0; + isReturnX = true; + + }else if(objSize.right < g_temp.objParentSize.width){ //off limit right + + newX = g_temp.objParentSize.width - objSize.width; + isReturnX = true; + + } + + }else{ //pan not active x - return to center + + // debugLine("not active", true); + + if(objSize.left != objCenterPos.left){ + isReturnX = true; + newX = objCenterPos.left; + } + } + + + //do the animation + var objCss = {}; + if(isReturnY == true) + objCss.top = newY + "px"; + + if(isReturnX == true) + objCss.left = newX + "px"; + + + if(isReturnY == true || isReturnX == true){ + + g_temp.objImage.animate(objCss,{ + duration: g_options.slider_zoom_return_pan_duration, + easing: g_options.slider_zoom_return_pan_easing, + queue: false + }); + + } + + } + + /** + * check if the image animating or not + */ + function isImageAnimating(){ + + if(g_temp.objImage && g_temp.objImage.is(":animated")) + return(true); + + return(false); + } + + function ____________END_PAN_____________(){}; + + function ________TOUCH_ZOOM_____________(){}; + + /** + * start touch zoom + */ + function startTouchZoom(arrTouches){ + + g_temp.isZoomActive = true; + + //store init diff + g_temp.startDistance = g_functions.getDistance(arrTouches[0].pageX, arrTouches[0].pageY, arrTouches[1].pageX, arrTouches[1].pageY); + if(g_temp.startDistance == 0) + g_temp.startDistance = 1; + + + //store init positions + g_temp.startMiddlePoint = g_functions.getMiddlePoint(arrTouches[0].pageX, arrTouches[0].pageY, arrTouches[1].pageX, arrTouches[1].pageY); + + g_temp.objImageSize = g_functions.getElementSize(g_temp.objImage); + + g_temp.startImageX = g_temp.objImageSize.left; + g_temp.startImageY = g_temp.objImageSize.top; + + //set orient point + g_temp.imageOrientPoint = g_functions.getElementLocalPoint(g_temp.startMiddlePoint, g_temp.objImage); + + var isInsideImage = g_functions.isPointInsideElement(g_temp.imageOrientPoint, g_temp.objImageSize); + if(isInsideImage == false){ + g_temp.imageOrientPoint = g_functions.getElementCenterPoint(g_temp.objImage); + } + + //trigger start zoom event + g_objParent.trigger(g_parent.events.ZOOM_START); + } + + + /** + * check num touches, if not 2 - end zoom + */ + function checkTouchZoomEnd(event){ + + if(g_temp.isZoomActive == false) + return(false); + + var arrTouches = g_functions.getArrTouches(event); + if(arrTouches.length != 2){ //end touch zoom + + g_temp.isZoomActive = false; + + //trigger end zoom event + g_objParent.trigger(g_parent.events.ZOOM_END); + } + + } + + + /** + * check start touch zoom + */ + function checkTouchZoomStart(event){ + + if(g_temp.isZoomActive == true) + return(true); + + + var arrTouches = g_functions.getArrTouches(event); + + if(arrTouches.length != 2) + return(true); + + startTouchZoom(arrTouches); + } + + + /** + * do touch zoom on touch devices + */ + function doTouchZoom(event){ + + var arrTouches = g_functions.getArrTouches(event); + + var distance = g_functions.getDistance(arrTouches[0].pageX, arrTouches[0].pageY, arrTouches[1].pageX, arrTouches[1].pageY); + var zoomRatio = distance / g_temp.startDistance; + + var middlePoint = g_functions.getMiddlePoint(arrTouches[0].pageX, arrTouches[0].pageY, arrTouches[1].pageX, arrTouches[1].pageY); + + //set zoom data: + var newWidth = g_temp.objImageSize.width * zoomRatio; + var newHeight = g_temp.objImageSize.height * zoomRatio; + + //check max zoom ratio: + var objOriginalSize = g_functions.getImageOriginalSize(g_temp.objImage); + var expectedZoomRatio = 1; + if(objOriginalSize.width > 0) + expectedZoomRatio = newWidth / objOriginalSize.width; + + if(expectedZoomRatio > g_options.slider_zoom_max_ratio) + return(true); + + //set pan data: + panX = -(g_temp.imageOrientPoint.x * zoomRatio - g_temp.imageOrientPoint.x); + panY = -(g_temp.imageOrientPoint.y * zoomRatio - g_temp.imageOrientPoint.y); + + var diffMiddleX = (middlePoint.x - g_temp.startMiddlePoint.x); + var diffMiddleY = (middlePoint.y - g_temp.startMiddlePoint.y); + + var posx = g_temp.startImageX + panX + diffMiddleX; + var posy = g_temp.startImageY + panY + diffMiddleY; + + + //resize and place: + g_functions.setElementSizeAndPosition(g_temp.objImage, posx, posy, newWidth, newHeight); + + //trigger zooming event + g_objParent.trigger(g_parent.events.ZOOMING); + g_objParent.trigger(g_parent.events.ZOOM_CHANGE); + + /* + debugLine({ + middleStartX: g_temp.startMiddlePoint.x, + middleX: middlePoint.x, + diffMiddleX: diffMiddleX + }); + */ + + } + + + /** + * check return the image from zoom + */ + function checkReturnFromZoom(){ + + if(g_temp.objImage == undefined || g_temp.objImage.length == 0) + return(true); + + var objSize = g_functions.getElementSize(g_temp.objImage); + + if(objSize.width < g_temp.objFitImageSize.imageWidth){ + + g_temp.objImage.css({ + position:"absolute", + margin:"none" + }); + + var objCss = { + top: g_temp.objFitImageSize.imageTop + "px", + left: g_temp.objFitImageSize.imageLeft + "px", + width: g_temp.objFitImageSize.imageWidth + "px", + height: g_temp.objFitImageSize.imageHeight + "px" + }; + + g_temp.objImage.animate(objCss,{ + duration: g_options.slider_zoom_return_pan_duration, + easing: g_options.slider_zoom_return_pan_easing, + queue: false + }); + + }else{ + checkReturnAfterPan(); + } + + } + + + function ________END_TOUCH_ZOOM_____________(){}; + + + /** + * + * touch start event - start pan, remember start pan data + */ + function onTouchStart(event){ + + //if no image type, exit + if(g_parent.isCurrentSlideType("image") == false) + return(true); + + var isStored = storeCurrentImage(); + + if(g_temp.objImage == undefined || g_temp.objImage.length == 0) + return(true); + + event.preventDefault(); + + //stop animation if exists + if(isImageAnimating() == true){ + g_temp.objImage.stop(true); + } + + if(g_temp.isZoomActive == true){ + + checkTouchZoomEnd(event); + + }else{ + + checkTouchZoomStart(event); + + } + + //if zoom started stop panning, if not, start panning + if(g_temp.isZoomActive == true){ + + g_temp.isPanActive = false; + + }else if(isPanPosible(g_temp.objImage, event) == true && g_temp.isZoomedOnce == true){ + + startPan(event); + } + + /* + debugLine({ + pan: g_temp.isPanActive, + zoom: g_temp.isZoomActive, + event: "start" + }, true); + */ + + } + + + /** + * touch end event - bring the image to place + */ + function onTouchEnd(event){ + + if(g_parent.isCurrentSlideType("image") == false) + return(true); + + //check if some gallery button clicked + var objTarget = jQuery(event.target); + if(objTarget.data("ug-button") == true){ + //event.preventDefault(); + return(false); + } + + var isStored = storeCurrentImage(); + + if(g_temp.objImage == undefined || g_temp.objImage.length == 0) + return(true); + + var panWasActive = g_temp.isPanActive; + var zoomWasActive = g_temp.isZoomActive; + + //if the inner not in place, don't return noting, let the slide change + if(g_parent.isInnerInPlace() == false){ + g_temp.isZoomActive = false; + g_temp.isPanActive = false; + return(true); + } + + //check end zoom + if(g_temp.isZoomActive == true){ + checkTouchZoomEnd(event); + }else{ + checkTouchZoomStart(event); + } + + + if(g_temp.isZoomActive == true){ + + g_temp.isPanActive = false; + + }else{ + + var panPosible = isPanPosible(g_temp.objImage, event, true); + + if(g_temp.isPanActive == true ){ + + g_temp.isPanActive = false; + + }else if(panPosible == true){ + + startPan(event); + } + + } + + /* + debugLine({ + pan:g_temp.isPanActive, + zoom: g_temp.isZoomActive + }, true); + */ + + if((panWasActive || zoomWasActive) && g_temp.isZoomActive == false && g_temp.isPanActive == false){ + checkReturnFromZoom(); + } + + + } + + + /** + * + * touch move event - pan + */ + function onTouchMove(event){ + + if(g_parent.isCurrentSlideType("image") == false) + return(true); + + //check touch zoom (pinch gesture) + if(g_temp.isZoomActive == true){ + + doTouchZoom(event); + + }else if(g_temp.isPanActive == true){ + + panImage(event); + + } + + + } + + + /** + * on slider mousewheel event + */ + function onSliderMouseWheel(event, delta, deltaX, deltaY){ + + if(g_options.slider_zoom_mousewheel == false) + return(true); + + if(g_parent.isCurrentSlideType("image") == false) + return(true); + + event.preventDefault(); + + //prevent default only if needed + //if(zoomIn == true || zoomIn == false && g_functions.isElementBiggerThenParent(objImage)) + //event.preventDefault(); + + + var zoomIn = (delta > 0); + var mousePos = g_functions.getMousePosition(event); + var mode = (zoomIn == true) ? "in":"out"; + + zoomCurrentImage(mode, mousePos); + } + + + /** + * init touch events + */ + function initEvents(){ + + //debugLine("init"); + g_objSlider.on("mousewheel",onSliderMouseWheel); + + //slider mouse down - pan start + g_objSlider.bind("mousedown touchstart",onTouchStart); + + //on body move + jQuery("body").bind("mousemove touchmove",onTouchMove); + + //on body mouse up - pan end + jQuery(window).add("body").bind("mouseup touchend", onTouchEnd); + + //event before image returned to init position + g_objParent.bind(g_parent.events.BEFORE_RETURN, function(){ + + checkReturnFromZoom(); + }); + + //on item change update isZoomedOnce event. Allow panning only if zoomed once + g_objParent.bind(g_parent.events.ITEM_CHANGED, function(){ + g_temp.isZoomedOnce = false; + }); + + g_objParent.bind(g_parent.events.ZOOM_CHANGE, function(){ + g_temp.isZoomedOnce = true; + }); + + } + + this.________EXTERNAL_____________ = function(){}; + + /** + * check if the image is zoomed, and there is a place for left panning + */ + this.isPanEnabled = function(event, direction){ + + storeCurrentImage(); + + if(g_temp.objImage == undefined || g_temp.objImage.length == 0) + return(false); + + if(g_temp.isZoomedOnce == false) + return(false); + + if(isPanPosible(g_temp.objImage, event) == false) + return(false); + + if(g_parent.isInnerInPlace() == false) + return(false); + + if(direction == "left"){ + + if(g_temp.objImageSize.right <= g_temp.objParentSize.width) + return(false); + + }else{ //right direction + + if(g_temp.objImageSize.left >= 0) + return(false); + } + + return(true); + } + + + /** + * init function for avia controls + */ + this.init = function(objSlider, customOptions){ + + initObject(objSlider, customOptions); + } + + /** + * zoom in + */ + this.zoomIn = function(){ + zoomCurrentImage("in"); + } + + /** + * zoom out + */ + this.zoomOut = function(){ + zoomCurrentImage("out"); + } + + /** + * zoom back + */ + this.zoomBack = function(){ + + zoomCurrentImage("back"); + } +} +/** -------------- Wistia API ---------------------*/ + +function UGWistiaAPI(){ + + this.isAPILoaded = false; + var t = this, g_objThis = jQuery(this), g_intHandle; + var g_player, g_isPlayerReady = false; + + this.events = { + START_PLAYING: "start_playing", + STOP_PLAYING: "stop_playing", + VIDEO_ENDED: "video_ended" + }; + + + /** + * check if sound cloud active + */ + function isWistiaActive(){ + + return(typeof Wistia != "undefined"); + } + + /** + * load vimeo API + */ + this.loadAPI = function(){ + + if(g_ugWistiaAPI.isAPILoaded == true) + return(true); + + if(isWistiaActive()){ + g_ugWistiaAPI.isAPILoaded = true; + return(true); + } + + g_ugFunctions.loadJs("fast.wistia.com/assets/external/E-v1.js", true); + + g_ugWistiaAPI.isAPILoaded = true; + } + + + /** + * actually put the video + */ + function putVideoActually(divID, videoID, width, height, isAutoplay){ + + g_player = null; + g_isPlayerReady = false; + + var htmlID = divID + "_video"; + + var html = "<div id='"+htmlID+"' class='wistia_embed' style='width:"+width+";height:"+height+";' data-video-width='"+width+"' data-video-height='"+height+"'> </div>"; + + jQuery("#"+divID).html(html); + + g_player = Wistia.embed(videoID, { + version: "v1", + videoWidth: width, + videoHeight: height, + container: htmlID, + autoPlay: isAutoplay + }); + + g_isPlayerReady = true; + + initEvents(); + } + + + /** + * init events + */ + function initEvents(){ + + //set "play" event + + g_player.bind('play', function(){ + g_objThis.trigger(t.events.START_PLAYING); + }); + + //set "pause event" + g_player.bind('pause', function(){ + g_objThis.trigger(t.events.STOP_PLAYING); + }); + + g_player.bind('end', function(){ + g_objThis.trigger(t.events.STOP_PLAYING); + g_objThis.trigger(t.events.VIDEO_ENDED); + }); + + } + + + /** + * do some command + */ + this.doCommand = function(command){ + + if(g_player == null) + return(false); + + if(g_isPlayerReady == false) + return(false); + + switch(command){ + case "play": + g_player.play(); + break; + case "pause": + g_player.pause(); + break; + } + + } + + /** + * do pause command + */ + this.pause = function(){ + t.doCommand("pause"); + } + + /** + * do play command + */ + this.play = function(){ + t.doCommand("play"); + } + + + /** + * put the vimeo video + */ + this.putVideo = function(divID, videoID, width, height, isAutoplay){ + + if(isWistiaActive()){ + putVideoActually(divID, videoID, width, height, isAutoplay); + return(true); + } + + + //if no API present, wait for the API being ready + this.loadAPI(); + g_intHandle = setInterval(function(){ + + if(isWistiaActive()){ + putVideoActually(divID, videoID, width, height, isAutoplay); + clearInterval(g_intHandle); + } + + }, 500); + + } + + + /** + * get if the player is ready + */ + this.isPlayerReady = function(){ + + if(g_isPlayerReady && g_player) + return(true); + + return(false); + } + + +} + +/** -------------- Sound Cloud API ---------------------*/ + +function UGSoundCloudAPI(){ + + this.isAPILoaded = false; + var t = this, g_objThis = jQuery(this), g_intHandle; + var g_player, g_lastContainerID; + + this.events = { + START_PLAYING: "start_playing", + STOP_PLAYING: "stop_playing", + VIDEO_ENDED: "video_ended" + }; + + /** + * check if sound cloud active + */ + function isSCActive(){ + + return(typeof SC != "undefined"); + } + + /** + * load vimeo API + */ + this.loadAPI = function(){ + + if(g_ugSoundCloudAPI.isAPILoaded == true) + return(true); + + if(isSCActive()){ + g_ugSoundCloudAPI.isAPILoaded = true; + return(true); + } + + g_ugFunctions.loadJs("w.soundcloud.com/player/api.js", true); + + g_ugSoundCloudAPI.isAPILoaded = true; + } + + /** + * actually put the video + */ + function putSoundActually(divID, trackID, width, height, isAutoplay){ + + g_player = null; + g_isPlayerReady = false; + + var iframeID = divID+"_iframe"; + + var url = location.protocol+"//w.soundcloud.com/player/?url=http://api.soundcloud.com/tracks/"+trackID; + url += "&buying=false&liking=false&download=false&sharing=false&show_artwork=true&show_comments=false&show_playcount=true&show_user=false&hide_related=true&visual=true&start_track=0&callback=true"; + + if(isAutoplay === true) + url += "&auto_play=true"; + else + url += "&auto_play=false"; + + var html = "<iframe id='"+iframeID+"' src="+url+" width='"+width+"' height='"+height+"' frameborder='0' scrolling='no' webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>"; + + jQuery("#"+divID).html(html); + + //get the player object + g_player = SC.Widget(iframeID); + + g_player.bind(SC.Widget.Events.READY, function() { + + if(g_player){ + g_isPlayerReady = true; + initEvents(); + } + + }); + + g_lastContainerID = divID; + } + + + /** + * init events + */ + function initEvents(){ + + + //set "play" event + g_player.bind(SC.Widget.Events.PLAY, function(){ + g_objThis.trigger(t.events.START_PLAYING); + }); + + //set "pause event" + g_player.bind(SC.Widget.Events.PAUSE, function(){ + g_objThis.trigger(t.events.STOP_PLAYING); + }); + + g_player.bind(SC.Widget.Events.FINISH, function(){ + g_objThis.trigger(t.events.STOP_PLAYING); + g_objThis.trigger(t.events.VIDEO_ENDED); + }); + + } + + + /** + * put the youtube video + */ + this.putSound = function(divID, trackID, width, height, isAutoplay){ + + if(isSCActive()){ + putSoundActually(divID, trackID, width, height, isAutoplay); + return(true); + } + + + //if no API present, wait for the API being ready + this.loadAPI(); + g_intHandle = setInterval(function(){ + + if(isSCActive()){ + putSoundActually(divID, trackID, width, height, isAutoplay); + clearInterval(g_intHandle); + } + + }, 500); + + } + + + /** + * do some command + */ + this.doCommand = function(command){ + + if(g_player == null) + return(false); + + if(g_isPlayerReady == false) + return(false); + + switch(command){ + case "play": + g_player.play(); + break; + case "pause": + g_player.pause(); + break; + } + + } + + + /** + * pause video + */ + this.pause = function(){ + t.doCommand("pause"); + } + + + /** + * play video + */ + this.play = function(){ + t.doCommand("play"); + } + + /** + * destroy the player + */ + this.destroy = function(){ + + g_isPlayerReady = false; + g_player = null; + + if(g_lastContainerID){ + jQuery("#" + g_lastContainerID).html(""); + g_lastContainerID = null; + } + + } + +} + +/** -------------- html5 Video API ---------------------*/ + +function UGHtml5MediaAPI(){ + + this.isAPILoaded = false; + var t = this, g_objThis = jQuery(this), g_intHandle; + var g_player; + + this.events = { + START_PLAYING: "start_playing", + STOP_PLAYING: "stop_playing", + VIDEO_ENDED: "video_ended" + }; + + /** + * load vimeo API + */ + this.loadAPI = function(){ + + if(g_ugHtml5MediaAPI.isAPILoaded == true) + return(true); + + + if(isMediaElementActive()){ + g_ugHtml5MediaAPI.isAPILoaded = true; + return(true); + } + + g_ugFunctions.loadJs("cdnjs.cloudflare.com/ajax/libs/mediaelement/2.18.1/mediaelement.min.js", true); + g_ugFunctions.loadCss("cdnjs.cloudflare.com/ajax/libs/mediaelement/2.18.1/mediaelementplayer.min.css", true); + + g_ugHtml5MediaAPI.isAPILoaded = true; + } + + /** + * return true if the mediaelement is active + */ + function isMediaElementActive(){ + + return(typeof mejs != "undefined"); + } + + + /** + * actually put the video + */ + function putVideoActually(divID, data, width, height, isAutoplay){ + + g_player = null; + g_isPlayerReady = false; + + var urlFlash = location.protocol + "//cdnjs.cloudflare.com/ajax/libs/mediaelement/2.18.1/flashmediaelement-cdn.swf"; + var urlSilverlight = location.protocol + "//cdnjs.cloudflare.com/ajax/libs/mediaelement/2.18.1/silverlightmediaelement.xap"; + + var htmlID = divID + "_video"; + var htmlAutoplay = ""; + if(isAutoplay && isAutoplay === true) + htmlAutoplay = "autoplay='autoplay'" + + var htmlPoster = ""; + if(data.posterImage) + htmlPoster = "poster='"+data.posterImage+"'"; + + var html = "<video id='"+htmlID+"' width='"+width+"' height='"+height+"' controls='controls' preload='none' "+htmlAutoplay+" "+htmlPoster+">"; + + if(data.mp4 != "") + html += "<source type='video/mp4' src='"+data.mp4+"' />"; + + if(data.webm != "") + html += "<source type='video/webm' src='"+data.webm+"' />"; + + if(data.ogv != "") + html += "<source type='video/ogg' src='"+data.ogv+"' />"; + + html += "<object width='"+width+"' height='"+height+"' type='application/x-shockwave-flash' data='"+urlFlash+"'>"; + html += "<param name='movie' value='"+urlFlash+"' />"; + html += "<param name='flashvars' value='controls=true&file="+data.mp4+"' />"; + html += "</object>"; + + html += "</video>"; + + jQuery("#"+divID).html(html); + + new MediaElement(htmlID, { + enablePluginDebug: false, + flashName: urlFlash, + silverlightName: urlSilverlight, + success: function (mediaElement, domObject) { + g_isPlayerReady = true; + g_player = mediaElement; + + if(isAutoplay == false) + g_player.pause(); + + initEvents(); + }, + error: function (objError) { + trace(objError); + } + }); + + } + + + /** + * init player events function + */ + function initEvents(){ + + g_ugFunctions.addEvent(g_player, "play", function(){ + g_objThis.trigger(t.events.START_PLAYING); + }); + + g_ugFunctions.addEvent(g_player, "pause", function(){ + g_objThis.trigger(t.events.STOP_PLAYING); + }); + + g_ugFunctions.addEvent(g_player, "ended", function(){ + g_objThis.trigger(t.events.STOP_PLAYING); + g_objThis.trigger(t.events.VIDEO_ENDED); + }); + + } + + + /** + * put the vimeo video + */ + this.putVideo = function(divID, data, width, height, isAutoplay){ + + if(isMediaElementActive()){ + putVideoActually(divID, data, width, height, isAutoplay); + return(true); + } + + + //if no API present, wait for the API being ready + this.loadAPI(); + g_intHandle = setInterval(function(){ + + if(isMediaElementActive()){ + putVideoActually(divID, data, width, height, isAutoplay); + clearInterval(g_intHandle); + } + + }, 500); + + } + + /** + * do some command + */ + this.doCommand = function(command){ + + if(g_player == null) + return(false); + + if(g_isPlayerReady == false) + return(false); + + switch(command){ + case "play": + g_player.play(); + break; + case "pause": + g_player.pause(); + break; + } + + } + + + /** + * pause video + */ + this.pause = function(){ + t.doCommand("pause"); + } + + + /** + * play video + */ + this.play = function(){ + t.doCommand("play"); + } + +} + + +/** -------------- Vimeo API class ---------------------*/ + +function UGVimeoAPI(){ + + this.isAPILoaded = false; + + var t = this, g_objThis = jQuery(this), g_intHandle; + var g_player = null, g_isPlayerReady = false, g_lastCotnainerID, g_cueChangeAutoplay = false; + + + this.events = { + START_PLAYING: "start_playing", + STOP_PLAYING: "stop_playing", + VIDEO_ENDED: "video_ended" + }; + + /** + * load vimeo API + */ + this.loadAPI = function(){ + + if(g_ugVimeoAPI.isAPILoaded == true) + return(true); + + if(isFroogaloopActive()){ + g_ugVimeoAPI.isAPILoaded = true; + return(true); + } + + g_ugFunctions.loadJs("f.vimeocdn.com/js/froogaloop2.min.js", true); + + g_ugVimeoAPI.isAPILoaded = true; + } + + + + /** + * tells if the froogaloop library active + */ + function isFroogaloopActive(){ + + return(typeof Froogaloop != "undefined"); + } + + + /** + * actually put the video + */ + function putVideoActually(divID, videoID, width, height, isAutoplay){ + + g_player = null; + g_isPlayerReady = false; + + var url = location.protocol+"//player.vimeo.com/video/"+videoID+"?api=1"; + + if(isAutoplay === true) + url += "&byline=0&autoplay=1&title=0&portrait=0"; + + var html = "<iframe src="+url+" width='"+width+"' height='"+height+"' frameborder='0' webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>"; + + jQuery("#"+divID).html(html); + + //get the player object + var iframe = jQuery("#"+divID + " iframe")[0]; + + g_player = Froogaloop(iframe); + + g_player.addEvent('ready', function(){ + + if(g_player){ + g_isPlayerReady = true; + initEvents(); + } + + }); + + g_lastCotnainerID = divID; + } + + /** + * init events + */ + function initEvents(){ + + if(!g_player) + return(false); + + //set "cuechange" event + g_player.addEvent('cuechange', function(){ + + if(g_cueChangeAutoplay == true) + t.play(); + + }); + + //set "play" event + g_player.addEvent('play', function(){ + g_objThis.trigger(t.events.START_PLAYING); + }); + + //set "pause event" + g_player.addEvent('pause', function(){ + g_objThis.trigger(t.events.STOP_PLAYING); + }); + + g_player.addEvent('finish', function(){ + g_objThis.trigger(t.events.STOP_PLAYING); + g_objThis.trigger(t.events.VIDEO_ENDED); + }); + + } + + + /** + * do some command + */ + this.doCommand = function(command){ + + if(g_player == null) + return(false); + + if(g_isPlayerReady == false) + return(false); + + switch(command){ + default: + g_player.api(command); + break; + } + + } + + /** + * do pause command + */ + this.pause = function(){ + t.doCommand("pause"); + } + + /** + * do play command + */ + this.play = function(){ + t.doCommand("play"); + } + + /** + * desrtoy the player and empty the div + */ + this.destroy = function(){ + + if(g_player){ + g_player.api("unload"); + g_player = null; + g_isPlayerReady = false; + } + + if(g_lastCotnainerID){ + jQuery("#" + g_lastCotnainerID).html(""); + } + + } + + /** + * put the vimeo video + */ + this.putVideo = function(divID, videoID, width, height, isAutoplay){ + + if(isFroogaloopActive()){ + putVideoActually(divID, videoID, width, height, isAutoplay); + return(true); + } + + + //if no API present, wait for the API being ready + this.loadAPI(); + g_intHandle = setInterval(function(){ + + if(isFroogaloopActive()){ + putVideoActually(divID, videoID, width, height, isAutoplay); + clearInterval(g_intHandle); + } + + }, 500); + + } + + + /** + * get if the player is ready + */ + this.isPlayerReady = function(){ + + if(g_isPlayerReady && g_player) + return(true); + + return(false); + } + + /** + * change the video + */ + this.changeVideo = function(videoID, isAutoplay){ + + if(t.isPlayerReady() == false) + return(false); + + g_cueChangeAutoplay = isAutoplay; + + g_player.api("loadVideo", videoID); + } + + + /** + * get video images + */ + this.getVideoImages = function(videoID, itemIndex, onSuccessFunction){ + + var url = location.protocol+"//vimeo.com/api/v2/video/"+videoID+".json"; + jQuery.get(url, {}, function(data){ + var obj = {}; + obj.preview = data[0].thumbnail_large; + obj.thumb = data[0].thumbnail_medium; + onSuccessFunction(itemIndex, obj); + }); + } + + +} + + +/** -------------- Youtube API class ---------------------*/ + +function UGYoutubeAPI(){ + + this.isAPILoaded = false; + var t = this, g_player = null, g_intHandle, g_isPlayerReady = false; + var g_objThis = jQuery(this), g_prevState = -1, g_lastContainerID; //unstarted + + var g_options = { + video_youtube_showinfo: true + } + + this.events = { + START_PLAYING: "start_playing", + STOP_PLAYING: "stop_playing", + VIDEO_ENDED: "video_ended" + }; + + + /** + * actually put the video + */ + function putVideoActually(divID, videoID, width, height, isAutoplay){ + + if(g_player && g_isPlayerReady){ + g_player.destroy(); + } + + var playerVars = { + controls:2, + showinfo:g_options.video_youtube_showinfo, + rel:0 + }; + + if(isAutoplay === true) + playerVars.autoplay = 1; + + g_isPlayerReady = false; + + g_player = new YT.Player(divID, { + height: height, + width: width, + videoId: videoID, + playerVars: playerVars, + events: { + 'onReady': onPlayerReady, + 'onStateChange': onPlayerStateChange + } + }); + + g_lastContainerID = divID; + } + + + /** + * check if YT active + */ + function isYTActive(){ + + if(typeof YT != "undefined" && typeof YT.Player != "undefined") + return(true); + + return(false); + } + + + /** + * set options + */ + this.setOptions = function(objOptions){ + g_options = jQuery.extend(g_options, objOptions); + } + + + /** + * put the youtube video + */ + this.putVideo = function(divID, videoID, width, height, isAutoplay){ + + if(isYTActive()){ + putVideoActually(divID, videoID, width, height, isAutoplay); + return(true); + } + + //if no API present, wait for the API being ready + this.loadAPI(); + g_intHandle = setInterval(function(){ + + if(isYTActive()){ + putVideoActually(divID, videoID, width, height, isAutoplay); + clearInterval(g_intHandle); + } + + }, 500); + + } + + + /** + * on player ready event + */ + function onPlayerReady(){ + g_isPlayerReady = true; + } + + + /** + * on player state change event + * trigger events + */ + function onPlayerStateChange(){ + + if(typeof g_player.getPlayerState != "function"){ + trace("Youtube API error: can't get player state"); + return(false); + } + + var state = g_player.getPlayerState(); + + switch(state){ + case YT.PlayerState.PLAYING: + g_objThis.trigger(t.events.START_PLAYING); + break; + case YT.PlayerState.ENDED: + g_objThis.trigger(t.events.STOP_PLAYING); + g_objThis.trigger(t.events.VIDEO_ENDED); + break; + default: + if(g_prevState == YT.PlayerState.PLAYING) + g_objThis.trigger(t.events.STOP_PLAYING); + break; + } + + g_prevState = state; + } + + + /** + * load youtube API + */ + this.loadAPI = function(){ + + if(g_ugYoutubeAPI.isAPILoaded == true) + return(true); + + if(typeof YT != "undefined"){ + g_ugYoutubeAPI.isAPILoaded = true; + return(true); + } + + g_ugFunctions.loadJs("https://www.youtube.com/player_api", false); + + g_ugYoutubeAPI.isAPILoaded = true; + + } + + + /** + * do some command + */ + this.doCommand = function(command, opt1){ + + if(!g_player) + return(true); + + if(g_isPlayerReady == false) + return(false); + + switch(command){ + case "play": + if(typeof g_player.playVideo != "function") + return(false); + + g_player.playVideo(); + break; + case "pause": + if(typeof g_player.pauseVideo != "function") + return(false); + + g_player.pauseVideo(); + break; + case "seek": + if(typeof g_player.seekTo != "function") + return(false); + + g_player.seekTo(opt1); + break; + case "stopToBeginning": + var state = g_player.getPlayerState(); + + g_player.pauseVideo(); + + switch(state){ + case YT.PlayerState.PLAYING: + case YT.PlayerState.ENDED: + case YT.PlayerState.PAUSED: + g_player.seekTo(0); + break; + } + break; + } + } + + /** + * play video + */ + this.play = function(){ + t.doCommand("play"); + } + + /** + * stop the video + */ + this.pause = function(){ + t.doCommand("pause"); + } + + /** + * destroy player + */ + this.destroy = function(){ + try{ + + if(g_player){ + g_isPlayerReady = false; + g_player.clearVideo(); + g_player.destroy(); + } + + }catch(objError){ + + jQuery("#"+g_lastContainerID).html(""); + + } + + } + + /** + * stop the video and seek to start + */ + this.stopToBeginning = function(){ + t.doCommand("stopToBeginning"); + } + + /** + * change the video + */ + this.changeVideo = function(videoID, isAutoplay){ + + if(t.isPlayerReady() == false) + return(false); + + if(isAutoplay && isAutoplay == true) + g_player.loadVideoById(videoID, 0, "large"); + else + g_player.cueVideoById(videoID, 0, "large"); + } + + + /** + * get if the player is ready + */ + this.isPlayerReady = function(){ + + if(g_isPlayerReady && g_player) + return(true); + + return(false); + } + + + + /** + * get preview and thumbs images according the ID + */ + this.getVideoImages = function(videoID){ + var obj = {}; + obj.preview = "https://i.ytimg.com/vi/"+videoID+"/sddefault.jpg"; + obj.thumb = "https://i.ytimg.com/vi/"+videoID+"/default.jpg"; + return(obj); + } + + +} + +/** -------------- Video Player Class ---------------------*/ + + +function UGVideoPlayer(){ + + var t = this, g_galleryID, g_objThis = jQuery(this), g_functions = new UGFunctions(); + var g_youtubeAPI = new UGYoutubeAPI(), g_vimeoAPI = new UGVimeoAPI(); + var g_html5API = new UGHtml5MediaAPI(), g_soundCloudAPI = new UGSoundCloudAPI(), g_wistiaAPI = new UGWistiaAPI(); + var g_objPlayer, g_objYoutube, g_objVimeo, g_objHtml5, g_objButtonClose, g_objSoundCloud, g_objWistia; + var g_activePlayerType = null; + + var g_options = { + video_enable_closebutton: true + }; + + this.events = { + SHOW: "video_show", + HIDE: "video_hide", + PLAY_START: "video_play_start", + PLAY_STOP: "video_play_stop", + VIDEO_ENDED: "video_ended" + }; + + var g_temp = { + standAloneMode: false, + youtubeInnerID:"", + vimeoPlayerID:"", + html5PlayerID:"", + wistiaPlayerID:"", + soundCloudPlayerID:"" + }; + + + /** + * init the object + */ + this.init = function(optOptions, isStandAloneMode, galleryID){ + g_galleryID = galleryID; + + if(!g_galleryID) + throw new Error("missing gallery ID for video player, it's a must!"); + + g_options = jQuery.extend(g_options, optOptions); + + g_youtubeAPI.setOptions(g_options); + + if(isStandAloneMode && isStandAloneMode == true) + g_temp.standAloneMode = true; + + } + + + /** + * set the player html + */ + this.setHtml = function(objParent){ + + g_temp.youtubeInnerID = g_galleryID + "_youtube_inner"; + g_temp.vimeoPlayerID = g_galleryID + "_videoplayer_vimeo"; + g_temp.html5PlayerID = g_galleryID + "_videoplayer_html5"; + g_temp.wistiaPlayerID = g_galleryID + "_videoplayer_wistia"; + g_temp.soundCloudPlayerID = g_galleryID + "_videoplayer_soundcloud"; + + + var html = "<div class='ug-videoplayer' style='display:none'>"; + html += "<div class='ug-videoplayer-wrapper ug-videoplayer-youtube' style='display:none'><div id='"+g_temp.youtubeInnerID+"'></div></div>"; + html += "<div id='"+g_temp.vimeoPlayerID+"' class='ug-videoplayer-wrapper ug-videoplayer-vimeo' style='display:none'></div>"; + html += "<div id='"+g_temp.html5PlayerID+"' class='ug-videoplayer-wrapper ug-videoplayer-html5'></div>"; + html += "<div id='"+g_temp.soundCloudPlayerID+"' class='ug-videoplayer-wrapper ug-videoplayer-soundcloud'></div>"; + html += "<div id='"+g_temp.wistiaPlayerID+"' class='ug-videoplayer-wrapper ug-videoplayer-wistia'></div>"; + + if(g_temp.standAloneMode == false && g_options.video_enable_closebutton == true) + html += "<div class='ug-videoplayer-button-close'></div>"; + + html += "</div>"; + + objParent.append(html); + + g_objPlayer = objParent.children(".ug-videoplayer"); + g_objYoutube = g_objPlayer.children(".ug-videoplayer-youtube"); + g_objVimeo = g_objPlayer.children(".ug-videoplayer-vimeo"); + g_objHtml5 = g_objPlayer.children(".ug-videoplayer-html5"); + g_objSoundCloud = g_objPlayer.children(".ug-videoplayer-soundcloud"); + g_objWistia = g_objPlayer.children(".ug-videoplayer-wistia"); + + if(g_temp.standAloneMode == false && g_options.video_enable_closebutton == true) + g_objButtonClose = g_objPlayer.children(".ug-videoplayer-button-close") + } + + + function __________EVENTS___________(){}; + + /** + * on close button click event + */ + function onCloseButtonClick(){ + t.hide(); + } + + /** + * on some video play start + */ + function onPlayStart(){ + + g_objThis.trigger(t.events.PLAY_START); + + if(g_objButtonClose) + g_objButtonClose.hide(); + } + + + /** + * on some video play stop + */ + function onPlayStop(){ + + g_objThis.trigger(t.events.PLAY_STOP); + + if(g_objButtonClose) + g_objButtonClose.show(); + } + + /** + * on video ended + */ + function onVideoEnded(){ + + g_objThis.trigger(t.events.VIDEO_ENDED); + + } + + + /** + * init events + */ + function initEvents(){ + + //close button events + if(g_objButtonClose){ + g_functions.setButtonMobileReady(g_objButtonClose); + g_functions.setButtonOnClick(g_objButtonClose, onCloseButtonClick); + } + + //youtube events + jQuery(g_youtubeAPI).on(g_youtubeAPI.events.START_PLAYING, onPlayStart); + jQuery(g_youtubeAPI).on(g_youtubeAPI.events.STOP_PLAYING, onPlayStop); + jQuery(g_youtubeAPI).on(g_youtubeAPI.events.VIDEO_ENDED, onVideoEnded); + + //vimeo events + jQuery(g_vimeoAPI).on(g_vimeoAPI.events.START_PLAYING, onPlayStart); + jQuery(g_vimeoAPI).on(g_vimeoAPI.events.STOP_PLAYING, onPlayStop); + jQuery(g_vimeoAPI).on(g_vimeoAPI.events.VIDEO_ENDED, onVideoEnded); + + //html5 video events + jQuery(g_html5API).on(g_html5API.events.START_PLAYING, onPlayStart); + jQuery(g_html5API).on(g_html5API.events.STOP_PLAYING, onPlayStop); + jQuery(g_html5API).on(g_html5API.events.VIDEO_ENDED, onVideoEnded); + + jQuery(g_soundCloudAPI).on(g_soundCloudAPI.events.START_PLAYING, onPlayStart); + jQuery(g_soundCloudAPI).on(g_soundCloudAPI.events.STOP_PLAYING, onPlayStop); + jQuery(g_soundCloudAPI).on(g_soundCloudAPI.events.VIDEO_ENDED, onVideoEnded); + + jQuery(g_wistiaAPI).on(g_wistiaAPI.events.START_PLAYING, onPlayStart); + jQuery(g_wistiaAPI).on(g_wistiaAPI.events.STOP_PLAYING, onPlayStop); + jQuery(g_wistiaAPI).on(g_wistiaAPI.events.VIDEO_ENDED, onVideoEnded); + + } + + + /** + * destroy the video player events + */ + this.destroy = function(){ + + if(g_objButtonClose){ + g_objButtonClose.off("click"); + g_objButtonClose.off("touchend"); + } + + //youtube events + jQuery(g_youtubeAPI).off(g_youtubeAPI.events.START_PLAYING); + jQuery(g_youtubeAPI).off(g_youtubeAPI.events.STOP_PLAYING); + + //vimeo events + jQuery(g_vimeoAPI).off(g_vimeoAPI.events.START_PLAYING); + jQuery(g_vimeoAPI).off(g_vimeoAPI.events.STOP_PLAYING); + + //html5 video events + jQuery(g_html5API).off(g_html5API.events.START_PLAYING); + jQuery(g_html5API).off(g_html5API.events.STOP_PLAYING); + + jQuery(g_soundCloudAPI).off(g_soundCloudAPI.events.START_PLAYING, onPlayStart); + jQuery(g_soundCloudAPI).off(g_soundCloudAPI.events.STOP_PLAYING, onPlayStop); + + jQuery(g_wistiaAPI).off(g_wistiaAPI.events.START_PLAYING, onPlayStart); + jQuery(g_wistiaAPI).off(g_wistiaAPI.events.STOP_PLAYING, onPlayStop); + + g_activePlayerType = null; + } + + + /** + * init events + */ + this.initEvents = function(){ + + initEvents(); + } + + + /** + * set element size and position the button + */ + this.setSize = function(width, height){ + + g_functions.setElementSize(g_objPlayer, width, height); + + if(g_objButtonClose) + g_functions.placeElement(g_objButtonClose, "right", "top"); + + } + + + /** + * set video player position + */ + this.setPosition = function(left, top){ + g_functions.placeElement(g_objPlayer, left, top); + } + + /** + * get video player object for placing + */ + this.getObject = function(){ + return(g_objPlayer); + } + + + /** + * show the player + */ + this.show = function(){ + + if(t.isVisible() == true) + return(true); + + g_objPlayer.show(); + + g_objPlayer.fadeTo(0,1); + + if(g_objButtonClose) + g_objButtonClose.show(); + + g_objThis.trigger(t.events.SHOW); + } + + + /** + * hide the player + */ + this.hide = function(){ + + if(t.isVisible() == false) + return(true); + + //pause all players + stopAndHidePlayers(); + + g_activePlayerType = null; + + g_objPlayer.hide(); + + g_objThis.trigger(t.events.HIDE); + } + + + /** + * get active player + */ + this.getActiveAPI = function(){ + + switch(g_activePlayerType){ + case "youtube": + return g_youtubeAPI; + break; + case "vimeo": + return g_vimeoAPI; + break; + case "wistia": + return g_wistiaAPI; + break; + case "soundcloud": + return g_soundCloudAPI; + break; + case "html5": + return g_html5API; + break; + default: + return null; + break; + } + } + + + /** + * pause active player if playing + */ + this.pause = function(){ + + var activeAPI = t.getActiveAPI(); + if(activeAPI == null) + return(false); + + if(typeof activeAPI.pause == "function") + activeAPI.pause(); + + } + + + /** + * return if the player is visible + */ + this.isVisible = function(){ + + return g_objPlayer.is(":visible"); + } + + + /** + * stop and hide other elements except some + */ + function stopAndHidePlayers(except){ + + var arrPlayers = ["youtube", "vimeo", "html5", "soundcloud", "wistia"]; + for(var index in arrPlayers){ + var player = arrPlayers[index]; + if(player == except) + continue; + switch(player){ + case "youtube": + g_youtubeAPI.pause(); + g_youtubeAPI.destroy(); + g_objYoutube.hide(); + break; + case "vimeo": + g_vimeoAPI.pause(); + g_vimeoAPI.destroy(); + g_objVimeo.hide(); + break; + case "html5": + g_html5API.pause(); + g_objHtml5.hide(); + break; + case "soundcloud": + g_soundCloudAPI.pause(); + g_soundCloudAPI.destroy(); + g_objSoundCloud.hide(); + break; + case "wistia": + g_wistiaAPI.pause(); + g_objWistia.hide(); + break; + } + } + + } + + + /** + * play youtube inside the video, isAutoplay - true by default + */ + this.playYoutube = function(videoID, isAutoplay){ + + if(typeof isAutoplay == "undefined") + var isAutoplay = true; + + stopAndHidePlayers("youtube"); + + g_objYoutube.show(); + + var objYoutubeInner = g_objYoutube.children("#"+g_temp.youtubeInnerID); + if(objYoutubeInner.length == 0) + g_objYoutube.append("<div id='"+g_temp.youtubeInnerID+"'></div>"); + + + if(g_youtubeAPI.isPlayerReady() == true && g_temp.standAloneMode == true) + g_youtubeAPI.changeVideo(videoID, isAutoplay); + else{ + g_youtubeAPI.putVideo(g_temp.youtubeInnerID, videoID, "100%", "100%", isAutoplay); + } + + g_activePlayerType = "youtube"; + } + + + /** + * play vimeo + */ + this.playVimeo = function(videoID, isAutoplay){ + + if(typeof isAutoplay == "undefined") + var isAutoplay = true; + + stopAndHidePlayers("vimeo"); + + g_objVimeo.show(); + + g_vimeoAPI.putVideo(g_temp.vimeoPlayerID, videoID, "100%", "100%", isAutoplay); + + /* + if(g_vimeoAPI.isPlayerReady() && g_temp.standAloneMode == true){ + g_vimeoAPI.changeVideo(videoID, isAutoplay); + } + else + g_vimeoAPI.putVideo(g_temp.vimeoPlayerID, videoID, "100%", "100%", isAutoplay); + */ + + g_activePlayerType = "vimeo"; + + } + + + /** + * play html5 video + */ + this.playHtml5Video = function(ogv, webm, mp4, posterImage, isAutoplay){ + + if(typeof isAutoplay == "undefined") + var isAutoplay = true; + + stopAndHidePlayers("html5"); + + g_objHtml5.show(); + + //trace(posterImage); + + var data = { + ogv: ogv, + webm: webm, + mp4: mp4, + posterImage: posterImage + }; + + g_html5API.putVideo(g_temp.html5PlayerID, data, "100%", "100%", isAutoplay); + + g_activePlayerType = "html5"; + + } + + /** + * play sound cloud + */ + this.playSoundCloud = function(trackID, isAutoplay){ + + if(typeof isAutoplay == "undefined") + var isAutoplay = true; + + stopAndHidePlayers("soundcloud"); + + g_objSoundCloud.show(); + + g_soundCloudAPI.putSound(g_temp.soundCloudPlayerID, trackID, "100%", "100%", isAutoplay); + + g_activePlayerType = "soundcloud"; + + } + + + /** + * play sound cloud + */ + this.playWistia = function(videoID, isAutoplay){ + + if(typeof isAutoplay == "undefined") + var isAutoplay = true; + + stopAndHidePlayers("wistia"); + + g_objWistia.show(); + + g_wistiaAPI.putVideo(g_temp.wistiaPlayerID, videoID, "100%", "100%", isAutoplay); + + g_activePlayerType = "wistia"; + + } + +} + + +var g_ugYoutubeAPI = new UGYoutubeAPI(); +var g_ugVimeoAPI = new UGVimeoAPI(); +var g_ugHtml5MediaAPI = new UGHtml5MediaAPI(); +var g_ugSoundCloudAPI = new UGSoundCloudAPI(); +var g_ugWistiaAPI = new UGWistiaAPI(); + + + /** + * prototype gallery funciton + */ + jQuery.fn.unitegallery = function(options){ + var element = jQuery(this); + var galleryID = "#" + element.attr("id"); + + if(!options) + var options = {}; + + var objGallery = new UniteGalleryMain(); + objGallery.run(galleryID, options); + + var api = new UG_API(objGallery); + + return(api); + } + + + /** + * check for min jquery version + */ + function ugCheckForMinJQueryVersion(){ + + var isMinJQuery = g_ugFunctions.checkMinJqueryVersion("1.8.0"); + + if(isMinJQuery == false) + throw new Error("The gallery can run from jquery 1.8 You have jQuery "+jQuery.fn.jquery+" Please update your jQuery library."); + } + + + /** + * check for errors function + */ + function ugCheckForErrors(galleryID, type){ + + /** + * check for jquery presents + */ + function checkForJqueryPresents(){ + if(typeof jQuery == "undefined") + throw new Error("jQuery library not included"); + } + + /** + * check for double jquery error + */ + function checkForDoubleJQuery(){ + + if(typeof jQuery.fn.unitegallery == "function") + return(true); + + var errorMessage = "You have some jquery.js library include that comes after the gallery files js include."; + errorMessage += "<br> This include eliminates the gallery libraries, and make it not work."; + + if(type == "cms"){ + errorMessage += "<br><br> To fix it you can:<br> 1. In the Gallery Settings -> Troubleshooting set option: <strong><b>Put JS Includes To Body</b></strong> option to true."; + errorMessage += "<br> 2. Find the double jquery.js include and remove it."; + }else{ + errorMessage += "<br><br> Please find and remove this jquery.js include and the gallery will work. <br> * There should be only one jquery.js include before all other js includes in the page."; + } + + + throw new Error(errorMessage); + } + + try{ + if(type == "jquery"){ + checkForJqueryPresents(); + ugCheckForMinJQueryVersion(); + }else{ + ugCheckForMinJQueryVersion(); + checkForDoubleJQuery(); + } + + }catch(objError){ + + var message = objError.message; + message = "Unite Gallery Error: "+ message; + message = "<div style='font-size:16px;color:#BC0C06;max-width:900px;border:1px solid red;padding:10px;'>" + message + "</div>" + + if(type == "jquery"){ + var objGallery = document.getElementById(galleryID); + objGallery.innerHTML = message; + objGallery.style.display = "block"; + } + else + jQuery(galleryID).show().html(message); + + return(false); + } + + return(true); + } + + +function UniteGalleryMain(){ + + var t = this; + var g_galleryID; + var g_objGallery = jQuery(t), g_objWrapper, g_objParent; + var g_objThumbs, g_objSlider, g_functions = new UGFunctions(), g_objTabs; + var g_arrItems = [], g_numItems, g_selectedItem = null, g_selectedItemIndex = -1; + var g_objTheme, g_objCache = {}; + + this.events = { + ITEM_CHANGE: "item_change", + SIZE_CHANGE: "size_change", + ENTER_FULLSCREEN: "enter_fullscreen", + EXIT_FULLSCREEN: "exit_fullscreen", + START_PLAY: "start_play", + STOP_PLAY: "stop_play", + PAUSE_PLAYING: "pause_playing", + CONTINUE_PLAYING: "continue_playing", + SLIDER_ACTION_START: "slider_action_start", + SLIDER_ACTION_END: "slider_action_end", + ITEM_IMAGE_UPDATED: "item_image_updated", + GALLERY_KEYPRESS: "gallery_keypress", + GALLERY_BEFORE_REQUEST_ITEMS: "gallery_before_request_items", //before ajax load items + OPEN_LIGHTBOX:"open_lightbox", + CLOSE_LIGHTBOX:"close_lightbox" + }; + + + //set the default gallery options + var g_options = { + gallery_width:900, //gallery width + gallery_height:500, //gallery height + + gallery_min_width: 150, //gallery minimal width when resizing + gallery_min_height: 100, //gallery minimal height when resizing + + gallery_theme:"default", //default,compact,grid,slider - select your desired theme from the list of themes. + gallery_skin:"default", //default, alexis etc... - the global skin of the gallery. Will change all gallery items by default. + + gallery_images_preload_type:"minimal", //all , minimal , visible - preload type of the images. + //minimal - only image nabours will be loaded each time. + //visible - visible thumbs images will be loaded each time. + //all - load all the images first time. + + gallery_autoplay:false, //true / false - begin slideshow autoplay on start + gallery_play_interval: 3000, //play interval of the slideshow + gallery_pause_on_mouseover: true, //true,false - pause on mouseover when playing slideshow true/false + + gallery_mousewheel_role:"zoom", //none, zoom, advance + gallery_control_keyboard: true, //true,false - enable / disble keyboard controls + gallery_carousel:true, //true,false - next button on last image goes to first image. + + gallery_preserve_ratio: true, //true, false - preserver ratio when on window resize + gallery_background_color: "", //set custom background color. If not set it will be taken from css. + gallery_debug_errors:false, //show error message when there is some error on the gallery area. + gallery_shuffle:false, //randomise position of items at start. + gallery_urlajax:null, //ajax url for requesting new items etc. + gallery_enable_tabs: false, //enable/disable category tabs + gallery_enable_cache: true, //enable caching items + gallery_initial_catid: "" //initial category id (for caching) + }; + + //gallery_control_thumbs_mousewheel + + var g_temp = { //temp variables + objCustomOptions:{}, + isAllItemsPreloaded:false, //flag that tells that all items started preloading + isFreestyleMode:false, //no special html additions + lastWidth:0, + lastHeigh:0, + handleResize: null, + isInited: false, + isPlayMode: false, + isPlayModePaused: false, + playTimePassed: 0, + playTimeLastStep: 0, + playHandle: "", + playStepInterval: 33, + objProgress: null, + isFakeFullscreen: false, + thumbsType:null, + isYoutubePresent:false, //flag if present youtube items + isVimeoPresent:false, //flag if present vimeo items + isHtml5VideoPresent:false, //flag if present html5 video items + isSoundCloudPresent:false, //flag if present soundcloud items + isWistiaPresent: false, //flag if some wistia movie present + resizeDelay: 100, + isRunFirstTime: true, + originalOptions: {}, + funcCustomHeight: null //custom height function, set by the theme if needed + }; + + + + function __________INIT_GALLERY_______(){}; + + /** + * get theme function from theme name + */ + function getThemeFunction(themeName){ + var themeFunction = themeName; + if(themeFunction.indexOf("UGTheme_") == -1) + themeFunction = "UGTheme_" + themeFunction; + + return(themeFunction); + } + + /** + * init the theme + */ + function initTheme(objCustomOptions){ + + //set theme function: + if(objCustomOptions.hasOwnProperty("gallery_theme")) + g_options.gallery_theme = objCustomOptions.gallery_theme; + else{ + var defaultTheme = g_options.gallery_theme; + if(g_ugFunctions.isThemeRegistered(defaultTheme) == false) + g_options.gallery_theme = g_ugFunctions.getFirstRegisteredTheme(); + } + + var themeFunction = getThemeFunction(g_options.gallery_theme); + + try{ + g_options.gallery_theme = eval(themeFunction); + }catch(e){ + //check registered themes + }; + + g_options.gallery_theme = eval(themeFunction); + + //init the theme + g_objTheme = new g_options.gallery_theme(); + g_objTheme.init(t, objCustomOptions); + } + + + /** + * reset all the options for the second time run + */ + function resetOptions(){ + + g_options = jQuery.extend({}, g_temp.originalOptions); + + g_selectedItemIndex = -1; + g_selectedItem = null; + g_objSlider = undefined; + g_objThumbs = undefined; + g_objSlider = undefined; + } + + + /** + * check for some errors and fire error if needed + */ + function checkForStartupErrors(){ + + //protection agains old jquery version + try{ + ugCheckForMinJQueryVersion(); + }catch(e){ + throwErrorShowMessage(e.message); + } + + //protection against some jquery ui function change + if(typeof g_objWrapper.outerWidth() == "object") + throwErrorShowMessage("You have some buggy script. most chances jquery-ui.js that destroy jquery outerWidth, outerHeight functions. The gallery can't run. Please update jquery-ui.js to latest version."); + + //check for late jquery include + setTimeout(function(){ugCheckForErrors(g_galleryID, "cms")} , 5000); + + } + + + + /** + * the gallery + */ + function runGallery(galleryID, objCustomOptions, htmlItems, cacheID){ + + var isCustomOptions = (typeof objCustomOptions == "object"); + + if(isCustomOptions) + g_temp.objCustomOptions = objCustomOptions; + + if(g_temp.isRunFirstTime == true){ + + g_galleryID = galleryID; + g_objWrapper = jQuery(g_galleryID); + if(g_objWrapper.length == 0){ + trace("div with id: "+g_galleryID+" not found"); + return(false); + } + + g_objParent = g_objWrapper.parent(); + + checkForStartupErrors(); + + g_temp.originalOptions = jQuery.extend({}, g_options); + + //merge options + if(isCustomOptions) + g_options = jQuery.extend(g_options, objCustomOptions); + + //cache items + if(g_options.gallery_enable_cache == true && g_options.gallery_initial_catid) + cacheItems(g_options.gallery_initial_catid); + + //set size class + t.setSizeClass(); + + //fill arrItems + var objItems = g_objWrapper.children(); + + fillItemsArray(objItems); + loadAPIs(); + + //hide images: + g_objWrapper.find("img").fadeTo(0,0).hide(); + g_objWrapper.show(); + + clearInitData(); + + }else{ //reset options - not first time run + + t.destroy(); + + resetOptions(); + + g_options = jQuery.extend(g_options, g_temp.objCustomOptions); + + if(htmlItems){ + + //cache items + if(cacheID && g_options.gallery_enable_cache == true) + cacheItems(cacheID, htmlItems); + + if(htmlItems == "noitems"){ + showErrorMessage("No items in this category",""); + return(false); + } + + g_objWrapper.html(htmlItems); + + var objItems = g_objWrapper.children(); + fillItemsArray(objItems); + + loadAPIs(); + + g_objWrapper.children().fadeTo(0,0).hide(); + + g_objWrapper.show(); + clearInitData(); + } + + } + + //init tabs + if(g_temp.isRunFirstTime == true && g_options.gallery_enable_tabs == true){ + g_objTabs = new UGTabs(); + g_objTabs.init(t, g_options); + } + + //modify and verify the params + if(isCustomOptions) + modifyInitParams(g_temp.objCustomOptions); + + validateParams(); + + //shuffle items + if(g_options.gallery_shuffle == true) + t.shuffleItems(); + + //init the theme + initTheme(g_temp.objCustomOptions); + + //set gallery html elements + setGalleryHtml(); + + //set html properties to all elements + setHtmlObjectsProperties(); + + var galleryWidth = g_objWrapper.width(); + + if(galleryWidth == 0){ + g_functions.waitForWidth(g_objWrapper, runGalleryActually); + }else + runGalleryActually(); + + } + + + /** + * actually run the gallery + */ + function runGalleryActually(){ + + t.setSizeClass(); + + if(g_temp.isFreestyleMode == false){ + + if(g_options.gallery_preserve_ratio == true) + setHeightByOriginalRatio(); + } + + g_objTheme.run(); + + if(g_objTabs && g_temp.isRunFirstTime) + g_objTabs.run(); + + preloadBigImages(); + + initEvents(); + + //select first item + if(g_numItems > 0) + t.selectItem(0); + + + //set autoplay + if(g_options.gallery_autoplay == true) + t.startPlayMode(); + + g_temp.isRunFirstTime = false; + + } + + + /** + * + * show error message + */ + function showErrorMessage(message, prefix){ + + if(typeof prefix == "undefined") + var prefix = "<b>Unite Gallery Error: </b>"; + + message = prefix + message; + + var html = "<div class='ug-error-message-wrapper'><div class='ug-error-message'>" + message + "</div></div>"; + + g_objWrapper.children().remove(); + + g_objWrapper.html(html); + g_objWrapper.show(); + } + + /** + * show error message and throw error + */ + function throwErrorShowMessage(message){ + showErrorMessage(message); + throw new Error(message); + } + + + /** + * + * @param objParams + */ + function modifyInitParams(){ + + //set default for preloading + if(!g_options.gallery_images_preload_type) + g_options.gallery_images_preload_type = "minimal"; + + //normalize gallery min height and width + if(g_options.gallery_min_height == undefined || g_options.gallery_height < g_options.gallery_min_height){ + g_options.gallery_min_height = 0; + } + + if(g_options.gallery_min_width == undefined || g_options.gallery_width < g_options.gallery_min_width){ + g_options.gallery_min_width = 0; + } + + } + + + /** + * validate the init parameters + */ + function validateParams(){ + + //validate theme: + if(!g_options.gallery_theme) + throw new Error("The gallery can't run without theme"); + + //if(typeof g_options.theme != "function") + //throw new Error("Wrong theme function: " + g_options.theme.toString()); + + //validate height and width + if(jQuery.isNumeric(g_options.gallery_height) && g_options.gallery_height < g_options.gallery_min_height) + throw new Error("The <b>gallery_height</b> option must be bigger then <b>gallery_min_height option</b>"); + + if(g_options.gallery_width < g_options.gallery_min_width) + throw new Error("The <b>gallery_width</b> option must be bigger then <b>gallery_min_width option</b>"); + + + } + + + /** + * set gallery html + */ + function setGalleryHtml(){ + + //add classes and divs + g_objWrapper.addClass("ug-gallery-wrapper"); + + g_objWrapper.append("<div class='ug-overlay-disabled' style='display:none'></div>"); + + t.setSizeClass(); + } + + + /** + * if the thumbs panel don't exists, delete initial images from dom + */ + function clearInitData(){ + + var objItems = g_objWrapper.children().remove(); + } + + + /** + * store last gallery size + */ + function storeLastSize(){ + var objSize = t.getSize(); + + g_temp.lastWidth = objSize.width; + g_temp.lastHeight = objSize.height; + } + + + /** + * set gallery height by original ratio + */ + function setHeightByOriginalRatio(){ + + var objSize = t.getSize(); + + var ratio = objSize.width / objSize.height; + + if(ratio != objSize.orig_ratio){ + + var newHeight = objSize.width / objSize.orig_ratio; + newHeight = Math.round(newHeight); + + if(newHeight < g_options.gallery_min_height) + newHeight = g_options.gallery_min_height; + + g_objWrapper.height(newHeight); + } + + } + + + /** + * set properties of the html objects + */ + function setHtmlObjectsProperties(){ + + var optionWidth = g_functions.getCssSizeParam(g_options.gallery_width); + + //set size + var objCss = { + //"width":optionWidth, //make it work within tabs + "max-width":optionWidth, + "min-width":g_functions.getCssSizeParam(g_options.gallery_min_width) + }; + + if(g_temp.isFreestyleMode == false){ + + var galleryHeight = g_functions.getCssSizeParam(g_options.gallery_height); + objCss["height"] = galleryHeight; + + }else{ + objCss["overflow"] = "visible"; + } + + //set background color + if(g_options.gallery_background_color) + objCss["background-color"] = g_options.gallery_background_color; + + + g_objWrapper.css(objCss); + + } + + + /** + * fill items array from images object + */ + function fillItemsArray(arrChildren){ + + g_arrItems = []; + + var isMobile = t.isMobileMode(); + + var numIndex = 0; + + for(var i=0;i<arrChildren.length;i++){ + var objChild = jQuery(arrChildren[i]); + + var tagname = objChild.prop("tagName").toLowerCase(); + + //handle link wrapper + var itemLink = ""; + if(tagname == "a"){ + itemLink = objChild.attr("href"); + objChild = objChild.children(); + var tagname = objChild.prop("tagName").toLowerCase(); + } + + var itemType = objChild.data("type"); + if(itemType == undefined) + itemType = "image"; + + var objItem = {}; + objItem.type = itemType; + + if(tagname == "img"){ + + //protection agains lasy load + var lasyLoadSrc = objChild.data("lazyload-src"); + if(lasyLoadSrc && lasyLoadSrc != ""){ + objChild.attr("src", lasyLoadSrc); + jQuery.removeData(objChild, "lazyload-src"); + } + + //src is thumb + var urlImage = objChild.data("image"); + var urlThumb = objChild.data("thumb"); + + if(typeof(urlImage) == "undefined") + urlImage = null; + + if(typeof(urlThumb) == "undefined") + urlThumb = null; + + var imageSrc = objChild.attr("src"); + + if(!urlImage) + urlImage = imageSrc; + + if(!urlThumb) + urlThumb = imageSrc; + + if(!urlThumb) + urlThumb = urlImage; + + if(!urlImage) + urlImage = urlThumb; + + + objItem.urlThumb = urlThumb; + objItem.urlImage = urlImage; + + objItem.title = objChild.attr("alt"); + + //always set thumb image to object + objItem.objThumbImage = objChild; + + objItem.objThumbImage.attr("src", objItem.urlThumb); + + }else{ + + if(itemType == "image"){ + trace("Problematic gallery item found:"); + trace(objChild); + trace("Please look for some third party js script that could add this item to the gallery"); + throw new Error("The item should not be image type"); + } + + objItem.urlThumb = objChild.data("thumb"); + objItem.title = objChild.data("title"); + objItem.objThumbImage = null; + objItem.urlImage = objChild.data("image"); + } + + + //check mobile version images + if(isMobile == true){ + + var urlThumbMobile = objChild.data("thumb-mobile"); + if(typeof urlThumbMobile != "undefined" && urlThumbMobile != ""){ + objItem.urlThumb = urlThumbMobile; + + if(tagname == "img") + objChild.attr("src",objItem.urlThumb); + } + + var urlImageMobile = objChild.data("image-mobile"); + if(typeof urlImageMobile != "undefined" && urlImageMobile != "") + objItem.urlImage = urlImageMobile; + } + + objItem.link = itemLink; + + //get description: + objItem.description = objChild.attr("title"); + if(!objItem.description) + objItem.description = objChild.data("description"); + + if(!objItem.description) + objItem.description = ""; + + objItem.isLoaded = false; + objItem.isThumbImageLoaded = false; //if the image loaded or error load + objItem.objPreloadImage = null; + objItem.isBigImageLoadStarted = false; + objItem.isBigImageLoaded = false; + objItem.isBigImageLoadError = false; + objItem.imageWidth = 0; + objItem.imageHeight = 0; + + //set thumb size + objItem.thumbWidth = 0; + objItem.thumbHeight = 0; + objItem.thumbRatioByWidth = 0; + objItem.thumbRatioByHeight = 0; + + var dataWidth = objChild.data("width"); + var dataHeight = objChild.data("height"); + if(dataWidth && typeof dataWidth == "number" && dataHeight && typeof dataHeight == "number"){ + objItem.thumbWidth = dataWidth; + objItem.thumbHeight = dataHeight; + objItem.thumbRatioByWidth = dataWidth / dataHeight; + objItem.thumbRatioByHeight = dataHeight / dataWidth; + } + + objItem.addHtml = null; + + var isImageMissing = (objItem.urlImage == undefined || objItem.urlImage == ""); + var isThumbMissing = (objItem.urlThumb == undefined || objItem.urlThumb == ""); + + switch(objItem.type){ + case "youtube": + objItem.videoid = objChild.data("videoid"); + + if(isImageMissing || isThumbMissing){ + + var objImages = g_ugYoutubeAPI.getVideoImages(objItem.videoid); + + //set preview image + if(isImageMissing) + objItem.urlImage = objImages.preview; + + //set thumb image + if(isThumbMissing){ + objItem.urlThumb = objImages.thumb; + + if(tagname == "img") + objChild.attr("src",objItem.urlThumb); + } + + } + + g_temp.isYoutubePresent = true; + break; + case "vimeo": + + objItem.videoid = objChild.data("videoid"); + + g_temp.isVimeoPresent = true; + break; + case "html5video": + objItem.videoogv = objChild.data("videoogv"); + objItem.videowebm = objChild.data("videowebm"); + objItem.videomp4 = objChild.data("videomp4"); + + g_temp.isHtml5VideoPresent = true; + break; + case "soundcloud": + objItem.trackid = objChild.data("trackid"); + g_temp.isSoundCloudPresent = true; + break; + case "wistia": + objItem.videoid = objChild.data("videoid"); + g_temp.isWistiaPresent = true; + break; + case "custom": + var objChildImage = objChild.children("img"); + + if(objChildImage.length){ + objChildImage = jQuery(objChildImage[0]); + + objItem.urlThumb = objChildImage.attr("src"); + objItem.title = objChildImage.attr("alt"); + objItem.objThumbImage = objChildImage; + } + + //add additional html + var objChildren = objChild.children().not("img:first-child"); + + if(objChildren.length) + objItem.addHtml = objChildren.clone(); + + break; + } + + //clear not needed attributes + if(objItem.objThumbImage){ + objItem.objThumbImage.removeAttr("data-description", ""); + objItem.objThumbImage.removeAttr("data-image", ""); + objItem.objThumbImage.removeAttr("data-thumb", ""); + objItem.objThumbImage.removeAttr("title", ""); + } + + objItem.index = numIndex; + g_arrItems.push(objItem); + numIndex++; + + } + + + g_numItems = g_arrItems.length; + + } + + + /** + * load api's according presented item types + */ + function loadAPIs(){ + + //load youtube api + if(g_temp.isYoutubePresent) + g_ugYoutubeAPI.loadAPI(); + + if(g_temp.isVimeoPresent) + g_ugVimeoAPI.loadAPI(); + + if(g_temp.isHtml5VideoPresent) + g_ugHtml5MediaAPI.loadAPI(); + + if(g_temp.isSoundCloudPresent) + g_ugSoundCloudAPI.loadAPI(); + + if(g_temp.isWistiaPresent) + g_ugWistiaAPI.loadAPI(); + + } + + + /** + * preload big images + */ + function preloadBigImages(){ + + //check and fix preload type + if(g_options.gallery_images_preload_type == "visible" && !g_objThumbs) + g_options.gallery_images_preload_type = "minimal"; + + if(g_temp.isAllItemsPreloaded == true) + return(true); + + switch(g_options.gallery_images_preload_type){ + default: + case "minimal": + break; + case "all": + + jQuery(g_arrItems).each(function(){ + preloadItemImage(this); + }); + + break; + case "visible": + jQuery(g_arrItems).each(function(){ + var objItem = this; + var isVisible = g_objThumbs.isItemThumbVisible(objItem); + + if(isVisible == true) + preloadItemImage(objItem); + }); + + break; + } + + } + + /** + * check if item needed to preload and preload it + */ + function checkPreloadItemImage(objItem){ + + if(objItem.isBigImageLoadStarted == true || + objItem.isBigImageLoaded == true || + objItem.isBigImageLoadError == true){ + return(false); + } + + switch(g_options.gallery_images_preload_type){ + default: + case "minimal": + break; + case "all": + preloadItemImage(objItem); + break; + case "visible": + var isVisible = g_objThumbs.isItemThumbVisible(objItem); + if(isVisible == true) + preloadItemImage(objItem); + break; + } + + } + + /** + * preload item image + */ + function preloadItemImage(objItem){ + + if(objItem.isBigImageLoadStarted == true || + objItem.isBigImageLoaded == true || + objItem.isBigImageLoadError == true){ + return(true); + } + + var imageUrl = objItem.urlImage; + if(imageUrl == "" || imageUrl == undefined){ + objItem.isBigImageLoadError = true; + return(false); + } + + objItem.isBigImageLoadStarted = true; + + objItem.objPreloadImage = jQuery('<img/>').attr("src", imageUrl); + objItem.objPreloadImage.data("itemIndex", objItem.index); + + //set image load event (not that reliable) + objItem.objPreloadImage.on("load", t.onItemBigImageLoaded); + + //set load error event + objItem.objPreloadImage.on( "error", function(){ + var objImage = jQuery(this); + var itemIndex = objImage.data("itemIndex"); + var objItem = g_arrItems[itemIndex]; + + //update error: + objItem.isBigImageLoadError = true; + objItem.isBigImageLoaded = false; + + //print error + var imageUrl = jQuery(this).attr("src"); + console.log("Can't load image: "+ imageUrl); + + //try to load the image again + g_objGallery.trigger(t.events.ITEM_IMAGE_UPDATED, [itemIndex, objItem.urlImage]); + objItem.objThumbImage.attr("src", objItem.urlThumb); + + }); + + //check the all items started preloading flag + checkAllItemsStartedPreloading(); + + } + + + /** + * on item big image loaded event function. + * Update image size and that the image has been preloaded + * can be called from another objects like the slider + */ + this.onItemBigImageLoaded = function(event, objImage){ + + if(!objImage) + var objImage = jQuery(this); + + var itemIndex = objImage.data("itemIndex"); + + var objItem = g_arrItems[itemIndex]; + + objItem.isBigImageLoaded = true; + + //get size with fallback function + var objSize = g_functions.getImageOriginalSize(objImage); + + objItem.imageWidth = objSize.width; + objItem.imageHeight = objSize.height; + } + + /** + * check and fill image size in item object + */ + this.checkFillImageSize = function(objImage, objItem){ + + if(!objItem){ + var itemIndex = objImage.data("itemIndex"); + if(itemIndex === undefined) + throw new Error("Wrong image given to gallery.checkFillImageSize"); + + var objItem = g_arrItems[itemIndex]; + } + + var objSize = g_functions.getImageOriginalSize(objImage); + + objItem.imageWidth = objSize.width; + objItem.imageHeight = objSize.height; + } + + + /** + * preload next images near current item + */ + function preloadNearBigImages(objItem){ + + if(g_temp.isAllItemsPreloaded == true) + return(false); + + if(!objItem) + var objItem = g_selectedItem; + + if(!objItem) + return(true); + + var currentIndex = objItem.index; + var lastItemIndex = currentIndex - 1; + var nextItemIndex = currentIndex + 1; + + if(lastItemIndex > 0) + preloadItemImage(g_arrItems[lastItemIndex]); + + if(nextItemIndex < g_numItems) + preloadItemImage(g_arrItems[nextItemIndex]); + + } + + + /** + * check that all items started preloading, if do, set + * flag g_temp.isAllItemsPreloaded to true + */ + function checkAllItemsStartedPreloading(){ + + if(g_temp.isAllItemsPreloaded == true) + return(false); + + //if some of the items not started, exit function: + for(var index in g_arrItems){ + if(g_arrItems[index].isBigImageLoadStarted == false) + return(false); + } + + //if all started, set flag to true + g_temp.isAllItemsPreloaded = true; + } + + + /** + * set freestyle mode + */ + this.setFreestyleMode = function(){ + + g_temp.isFreestyleMode = true; + + } + + + /** + * attach thumbs panel to the gallery + */ + this.attachThumbsPanel = function(type, objThumbs){ + g_temp.thumbsType = type; + g_objThumbs = objThumbs; + } + + + /** + * init the slider + */ + this.initSlider = function(customOptions, optionsPrefix){ + + //mix options with user options + if(!customOptions) + var customOptions = {}; + + customOptions = jQuery.extend(g_temp.objCustomOptions, customOptions); + + g_objSlider = new UGSlider(); + g_objSlider.init(t, customOptions, optionsPrefix); + } + + + function __________END_INIT_GALLERY_______(){}; + + function __________EVENTS_____________(){}; + + + /** + * on gallery mousewheel event handler, advance the thumbs + */ + this.onGalleryMouseWheel = function(event, delta, deltaX, deltaY){ + + event.preventDefault(); + + if(delta > 0) + t.prevItem(); + else + t.nextItem(); + } + + + /** + * on mouse enter event + */ + function onSliderMouseEnter(event){ + + if(g_options.gallery_pause_on_mouseover == true && t.isFullScreen() == false && g_temp.isPlayMode == true && g_objSlider && g_objSlider.isSlideActionActive() == false) + t.pausePlaying(); + } + + + /** + * on mouse move event + */ + function onSliderMouseLeave(event){ + + if(g_options.gallery_pause_on_mouseover == true && g_temp.isPlayMode == true && g_objSlider && g_objSlider.isSlideActionActive() == false){ + + var isStillLoading = g_objSlider.isCurrentSlideLoadingImage(); + + if(isStillLoading == false) + t.continuePlaying(); + } + + } + + + /** + * on keypress - keyboard control + */ + function onKeyPress(event){ + + var obj = jQuery(event.target); + if(obj.is("textarea") || obj.is("select") || obj.is("input")) + return(true); + + var keyCode = (event.charCode) ? event.charCode :((event.keyCode) ? event.keyCode :((event.which) ? event.which : 0)); + + var wasAction = true; + + switch(keyCode){ + case 39: //right key + t.nextItem(); + break; + case 37: //left key + t.prevItem(); + break; + default: + wasAction = false; + break; + } + + //only first page gallery affected + + if(wasAction == true){ + event.preventDefault(); + event.stopPropagation(); + event.stopImmediatePropagation(); + } + + g_objGallery.trigger(t.events.GALLERY_KEYPRESS, [keyCode,event]); + } + + + /** + * check that the gallery resized, if do, trigger onresize event + */ + function onGalleryResized(){ + + var objSize = t.getSize(); + + if(objSize.width == 0) //fix hidden gallery change + return(true); + + t.setSizeClass(); + + var objSize = t.getSize(); + + if(objSize.width != g_temp.lastWidth || objSize.height != g_temp.lastHeight){ + + var heightWasSet = false; + + //set height with custom function (if exists) + if(g_temp.funcCustomHeight){ + var newHeight = g_temp.funcCustomHeight(objSize); + if(newHeight){ + g_objWrapper.height(newHeight); + heightWasSet = true; + } + } + + if(heightWasSet == false && g_options.gallery_preserve_ratio == true && g_temp.isFreestyleMode == false) + setHeightByOriginalRatio(); + + storeLastSize(); + g_objGallery.trigger(t.events.SIZE_CHANGE); + + } + + } + + + /** + * on strip move event + * preload visible images if that option selected + */ + function onThumbsChange(event){ + + //preload visible images + if(g_options.gallery_images_preload_type == "visible" && g_temp.isAllItemsPreloaded == false){ + preloadBigImages(); + } + + } + + + /** + * on full screen change event + */ + function onFullScreenChange(){ + + + var isFullscreen = g_functions.isFullScreen(); + var event = isFullscreen ? t.events.ENTER_FULLSCREEN:t.events.EXIT_FULLSCREEN; + + var fullscreenID = g_functions.getGlobalData("fullscreenID"); + + //check if this gallery was affected + if(g_galleryID !== fullscreenID) + return(true); + + //add classes for the gallery + if(isFullscreen){ + g_objWrapper.addClass("ug-fullscreen"); + }else{ + g_objWrapper.removeClass("ug-fullscreen"); + } + + g_objGallery.trigger(event); + + onGalleryResized(); + } + + /** + * on big image updated, if needed - preload this item image + */ + function onItemImageUpdated(event, index){ + + var objItem = t.getItem(index); + checkPreloadItemImage(objItem); + } + + /** + * on current slide image load end. If playing mode, begin playing again + */ + function onCurrentSlideImageLoadEnd(){ + + if(t.isPlayMode() == true) + t.continuePlaying(); + } + + + /** + * init all events + */ + function initEvents(){ + + //avoid annoyong firefox image dragging + g_objWrapper.on("dragstart",function(event){ + event.preventDefault(); + }); + + //on big image updated, if needed - preload this item image + g_objGallery.on(t.events.ITEM_IMAGE_UPDATED, onItemImageUpdated); + + //init custom event on strip moving + if(g_objThumbs){ + switch(g_temp.thumbsType){ + case "strip": + jQuery(g_objThumbs).on(g_objThumbs.events.STRIP_MOVE, onThumbsChange); + break; + case "grid": + jQuery(g_objThumbs).on(g_objThumbs.events.PANE_CHANGE, onThumbsChange); + break; + } + } + + //init mouse wheel + if(g_options.gallery_mousewheel_role == "advance" && g_temp.isFreestyleMode == false) + g_objWrapper.on("mousewheel", t.onGalleryMouseWheel); + + //on resize event + storeLastSize(); + + jQuery(window).resize(function(){ + g_objWrapper.css("width","auto"); + g_functions.whenContiniousEventOver("gallery_resize", onGalleryResized, g_temp.resizeDelay); + }); + + //check resize once in a time, start from 10 seconds + setTimeout(function(){ + setInterval(onGalleryResized, 2000); + }, 10000); + + + //fullscreen: + g_functions.addFullScreenChangeEvent(onFullScreenChange); + + //on slider item changed event + if(g_objSlider){ + + jQuery(g_objSlider).on(g_objSlider.events.ITEM_CHANGED, function(){ + var sliderIndex = g_objSlider.getCurrentItemIndex(); + + if(sliderIndex != -1) + t.selectItem(sliderIndex); + }); + + //add slider onmousemove event + if(g_options.gallery_pause_on_mouseover == true){ + var sliderElement = g_objSlider.getElement(); + sliderElement.hover(onSliderMouseEnter, onSliderMouseLeave); + + //on full screen, run on mouse leave + g_objGallery.on(t.events.ENTER_FULLSCREEN, function(){ + onSliderMouseLeave(); + }); + + } + + //retrigger slider events + retriggerEvent(g_objSlider, g_objSlider.events.ACTION_START, t.events.SLIDER_ACTION_START); + retriggerEvent(g_objSlider, g_objSlider.events.ACTION_END, t.events.SLIDER_ACTION_END); + + jQuery(g_objSlider).on(g_objSlider.events.CURRENTSLIDE_LOAD_END, onCurrentSlideImageLoadEnd); + + } + + //add keyboard events + if(g_options.gallery_control_keyboard == true) + jQuery(document).keydown(onKeyPress); + + } + + + /** + * destroy all gallery events + */ + this.destroy = function(){ + + g_objWrapper.off("dragstart"); + g_objGallery.off(t.events.ITEM_IMAGE_UPDATED); + + //init custom event on strip moving + if(g_objThumbs){ + switch(g_temp.thumbsType){ + case "strip": + jQuery(g_objThumbs).off(g_objThumbs.events.STRIP_MOVE); + break; + case "grid": + jQuery(g_objThumbs).off(g_objThumbs.events.PANE_CHANGE); + break; + } + } + + g_objWrapper.off("mousewheel"); + + jQuery(window).off("resize"); + + //fullscreen: + g_functions.destroyFullScreenChangeEvent(); + + //on slider item changed event + if(g_objSlider){ + + jQuery(g_objSlider).off(g_objSlider.events.ITEM_CHANGED); + + //add slider onmousemove event + var sliderElement = g_objSlider.getElement(); + sliderElement.off("mouseenter"); + sliderElement.off("mouseleave"); + + g_objGallery.off(t.events.ENTER_FULLSCREEN); + jQuery(g_objSlider).off(g_objSlider.events.ACTION_START); + jQuery(g_objSlider).off(g_objSlider.events.ACTION_END); + jQuery(g_objSlider).off(g_objSlider.events.CURRENTSLIDE_LOAD_END); + } + + //add keyboard events + if(g_options.gallery_control_keyboard == true) + jQuery(document).off("keydown"); + + //destroy theme + if(g_objTheme && typeof g_objTheme.destroy == "function"){ + g_objTheme.destroy(); + } + + g_objWrapper.html(""); + } + + + function __________GENERAL_______(){}; + + /** + * get items array + */ + this.getArrItems = function(){ + return g_arrItems; + } + + /** + * get gallery objects + */ + this.getObjects = function(){ + + var objects = { + g_galleryID:g_galleryID, + g_objWrapper:g_objWrapper, + g_objThumbs:g_objThumbs, + g_objSlider:g_objSlider, + g_options:g_options, + g_arrItems:g_arrItems, + g_numItems:g_numItems + }; + + return(objects); + } + + /** + * get slider object + */ + this.getObjSlider = function(){ + + return(g_objSlider); + } + + + /** + * + * get item by index, if the index don't fit, trace error + */ + this.getItem = function(index){ + if(index < 0){ + throw new Error("item with index: " + index + " not found"); + return(null); + } + if(index >= g_numItems){ + throw new Error("item with index: " + index + " not found"); + return(null); + } + + return(g_arrItems[index]); + } + + + /** + * get gallery width + */ + this.getWidth = function(){ + + var objSize = t.getSize(); + + return(objSize.width); + } + + /** + * get gallery height + */ + this.getHeight = function(){ + + var objSize = t.getSize(); + + return(objSize.height); + } + + + /** + * get gallery size + */ + this.getSize = function(){ + + var objSize = g_functions.getElementSize(g_objWrapper); + + objSize.orig_width = g_options.gallery_width; + objSize.orig_height = g_options.gallery_height; + objSize.orig_ratio = objSize.orig_width / objSize.orig_height; + + return(objSize); + } + + /** + * get gallery ID + */ + this.getGalleryID = function(){ + + var id = g_galleryID.replace("#",""); + + return(id); + } + + /** + * get next item by current index (or current object) + */ + this.getNextItem = function(index, forceCarousel){ + + if(typeof index == "object") + index = index.index; + + var nextIndex = index + 1; + + if(forceCarousel !== true && g_numItems == 1) + return(null); + + if(nextIndex >= g_numItems){ + + if(g_options.gallery_carousel == true || forceCarousel === true) + nextIndex = 0; + else + return(null); + } + + var objItem = g_arrItems[nextIndex]; + + return(objItem); + } + + + /** + * get previous item by index (or item object) + */ + this.getPrevItem = function(index){ + + if(typeof index == "object") + index = index.index; + + var prevIndex = index - 1; + + if(prevIndex < 0){ + if(g_options.gallery_carousel == true || forceCarousel === true) + prevIndex = g_numItems - 1; + else + return(null); + } + + var objItem = g_arrItems[prevIndex]; + + return(objItem); + } + + + + /** + * get selected item + */ + this.getSelectedItem = function(){ + + return(g_selectedItem); + } + + /** + * get selected item index + */ + this.getSelectedItemIndex = function(){ + + return(g_selectedItemIndex); + } + + + /** + * get number of items + */ + this.getNumItems = function(){ + return g_numItems; + } + + /** + * get true if the current item is last + */ + this.isLastItem = function(){ + if(g_selectedItemIndex == g_numItems - 1) + return(true); + + return(false); + } + + + /** + * get true if the current item is first + */ + this.isFirstItem = function(){ + if(g_selectedItemIndex == 0) + return(true); + return(false); + } + + + /** + * get gallery options + */ + this.getOptions = function(){ + return g_options; + } + + + /** + * get the gallery wrapper element + */ + this.getElement = function(){ + return(g_objWrapper); + } + + + this.___________SET_CONTROLS___________ = function(){} + + /** + * set next button element + * set onclick event + */ + this.setNextButton = function(objButton){ + + //register button as a unite gallery belong + objButton.data("ug-button", true); + + g_functions.setButtonOnClick(objButton, t.nextItem); + + } + + + /** + * set prev button element + * set onclick event + */ + this.setPrevButton = function(objButton){ + + //register button as a unite gallery belong + objButton.data("ug-button", true); + + g_functions.setButtonOnClick(objButton, t.prevItem); + + } + + + /** + * set fullscreen button to enter / exit fullscreen. + * on fullscreen mode ug-fullscreenmode class wil be added + */ + this.setFullScreenToggleButton = function(objButton){ + + //register button as a unite gallery belong + objButton.data("ug-button", true); + + g_functions.setButtonOnClick(objButton, t.toggleFullscreen); + + g_objGallery.on(t.events.ENTER_FULLSCREEN,function(){ + objButton.addClass("ug-fullscreenmode"); + }); + + g_objGallery.on(t.events.EXIT_FULLSCREEN,function(){ + objButton.removeClass("ug-fullscreenmode"); + }); + + } + + + /** + * destroy full screen button + */ + this.destroyFullscreenButton = function(objButton){ + + g_functions.destroyButton(objButton); + + g_objGallery.off(t.events.ENTER_FULLSCREEN); + g_objGallery.off(t.events.EXIT_FULLSCREEN); + } + + + /** + * set play button event + */ + this.setPlayButton = function(objButton){ + + //register button as a unite gallery belong + objButton.data("ug-button", true); + + g_functions.setButtonOnClick(objButton, t.togglePlayMode); + + g_objGallery.on(t.events.START_PLAY,function(){ + objButton.addClass("ug-stop-mode"); + }); + + g_objGallery.on(t.events.STOP_PLAY, function(){ + objButton.removeClass("ug-stop-mode"); + }); + + } + + /** + * destroy the play button + */ + this.destroyPlayButton = function(objButton){ + g_functions.destroyButton(objButton); + g_objGallery.off(t.events.START_PLAY); + g_objGallery.off(t.events.STOP_PLAY); + } + + /** + * set playing progress indicator + */ + this.setProgressIndicator = function(objProgress){ + + g_temp.objProgress = objProgress; + } + + + /** + * set title and descreiption containers + */ + this.setTextContainers = function(objTitle, objDescription){ + + g_objGallery.on(t.events.ITEM_CHANGE, function(){ + + var objItem = t.getSelectedItem(); + objTitle.html(objItem.title); + objDescription.html(objItem.description); + + }); + + } + + /** + * show overlay disabled + */ + this.showDisabledOverlay = function(){ + g_objWrapper.children(".ug-overlay-disabled").show(); + } + + /** + * show overlay disabled + */ + this.hideDisabledOverlay = function(){ + g_objWrapper.children(".ug-overlay-disabled").hide(); + } + + this.___________END_SET_CONTROLS___________ = function(){} + + + /** + * cache items, put to cache array by id + * the items must be unprocessed yet + */ + function cacheItems(cacheID, htmlItemsArg){ + + if(htmlItemsArg){ + var htmlItems = htmlItemsArg; + if(htmlItems != "noitems") + htmlItems = jQuery(htmlItemsArg).clone(); + }else{ + var htmlItems = g_objWrapper.children().clone(); + } + + g_objCache[cacheID] = htmlItems; + } + + + /** + * remove all size classes + */ + function removeAllSizeClasses(objWrapper){ + + if(!objWrapper) + objWrapper = g_objWrapper; + + objWrapper.removeClass("ug-under-480"); + objWrapper.removeClass("ug-under-780"); + objWrapper.removeClass("ug-under-960"); + } + + + + + /** + * retrigger event from another objects + * the second parameter will be the second object + */ + function retriggerEvent(object, originalEvent, newEvent){ + + jQuery(object).on(originalEvent, function(event){ + g_objGallery.trigger(newEvent, [this]); + }); + + } + + + /** + * advance next play step + */ + function advanceNextStep(){ + + var timeNow = jQuery.now(); + var timeDiff = timeNow - g_temp.playTimeLastStep; + g_temp.playTimePassed += timeDiff; + g_temp.playTimeLastStep = timeNow; + + //set the progress + if(g_temp.objProgress){ + var percent = g_temp.playTimePassed / g_options.gallery_play_interval; + g_temp.objProgress.setProgress(percent); + } + + //if interval passed - proceed to next item + if(g_temp.playTimePassed >= g_options.gallery_play_interval){ + + t.nextItem(); + g_temp.playTimePassed = 0; + } + + + } + + this.___________PLAY_MODE___________ = function(){} + + + /** + * start play mode + */ + this.startPlayMode = function(){ + + g_temp.isPlayMode = true; + g_temp.isPlayModePaused = false; + + g_temp.playTimePassed = 0; + g_temp.playTimeLastStep = jQuery.now(); + + g_temp.playHandle = setInterval(advanceNextStep, g_temp.playStepInterval); + + //show and reset progress indicator + if(g_temp.objProgress){ + var objElement = g_temp.objProgress.getElement(); + g_temp.objProgress.setProgress(0); + objElement.show(); + } + + g_objGallery.trigger(t.events.START_PLAY); + + //check if there is a need to pause + if(g_objSlider && g_objSlider.isCurrentSlideLoadingImage() == true){ + t.pausePlaying(); + } + + } + + + /** + * reset playing - set the timer to 0 + */ + this.resetPlaying = function(){ + + if(g_temp.isPlayMode == false) + return(true); + + g_temp.playTimePassed = 0; + g_temp.playTimeLastStep = jQuery.now(); + } + + + /** + * pause playing slideshow + */ + this.pausePlaying = function(){ + + if(g_temp.isPlayModePaused == true) + return(true); + + g_temp.isPlayModePaused = true; + clearInterval(g_temp.playHandle); + + g_objGallery.trigger(t.events.PAUSE_PLAYING); + } + + + /** + * continue playing slideshow + */ + this.continuePlaying = function(){ + + if(g_temp.isPlayModePaused == false) + return(true); + + g_temp.isPlayModePaused = false; + g_temp.playTimeLastStep = jQuery.now(); + g_temp.playHandle = setInterval(advanceNextStep, g_temp.playStepInterval); + + } + + + /** + * stop play mode + */ + this.stopPlayMode = function(){ + g_temp.isPlayMode = false; + clearInterval(g_temp.playHandle); + + g_temp.playTimePassed = 0; + + //hide progress indicator + if(g_temp.objProgress){ + var objElement = g_temp.objProgress.getElement(); + objElement.hide(); + } + + g_objGallery.trigger(t.events.STOP_PLAY); + } + + + /** + * tells if the play mode are active + */ + this.isPlayMode = function(){ + + return(g_temp.isPlayMode); + } + + + /** + * start / stop play mode + */ + this.togglePlayMode = function(){ + + if(t.isPlayMode() == false) + t.startPlayMode(); + else + t.stopPlayMode(); + } + + + /** + * unselect all items + */ + function unselectSeletedItem(){ + + if(g_selectedItem == null) + return(true); + + if(g_objThumbs) + g_objThumbs.setThumbUnselected(g_selectedItem.objThumbWrapper); + + g_selectedItem = null; + g_selectedItemIndex = -1; + } + + + this.___________GENERAL_EXTERNAL___________ = function(){} + + /** + * shuffle items - usually before theme start + */ + this.shuffleItems = function(){ + + g_arrItems = g_functions.arrayShuffle(g_arrItems); + + for(var index in g_arrItems) //fix index + g_arrItems[index].index = parseInt(index); + + } + + /** + * set main gallery params, extend current params + */ + this.setOptions = function(customOptions){ + + g_options = jQuery.extend(g_options, customOptions); + } + + + /** + * select some item + * the input can be index or object + * role - the role of the object who selected the item + */ + this.selectItem = function(objItem, role){ + + if(typeof objItem == "number") + objItem = t.getItem(objItem); + + var itemIndex = objItem.index; + if(itemIndex == g_selectedItemIndex) + return(true); + + unselectSeletedItem(); + + //set selected item + g_selectedItem = objItem; + g_selectedItemIndex = itemIndex; + + g_objGallery.trigger(t.events.ITEM_CHANGE, [objItem,role]); + + //reset playback, if playing + if(g_temp.isPlayMode == true){ + t.resetPlaying(); + + var stillLoading = g_objSlider.isCurrentSlideLoadingImage(); + if(stillLoading == true) + t.pausePlaying(); + } + + } + + + /** + * go to next item + */ + this.nextItem = function(){ + + var newItemIndex = g_selectedItemIndex + 1; + + if(g_numItems == 0) + return(true); + + if(g_options.gallery_carousel == false && newItemIndex >= g_numItems) + return(true); + + if(newItemIndex >= g_numItems) + newItemIndex = 0; + + //debugLine(newItemIndex,true); + + t.selectItem(newItemIndex, "next"); + } + + + /** + * go to previous item + */ + this.prevItem = function(){ + + var newItemIndex = g_selectedItemIndex - 1; + + if(g_selectedItemIndex == -1) + newItemIndex = 0; + + if(g_numItems == 0) + return(true); + + if(g_options.gallery_carousel == false && newItemIndex < 0) + return(true); + + if(newItemIndex < 0) + newItemIndex = g_numItems - 1; + + t.selectItem(newItemIndex, "prev"); + + } + + + /** + * expand gallery to body size + */ + function toFakeFullScreen(){ + + jQuery("body").addClass("ug-body-fullscreen"); + g_objWrapper.addClass("ug-fake-fullscreen"); + + g_temp.isFakeFullscreen = true; + + g_objGallery.trigger(t.events.ENTER_FULLSCREEN); + g_objGallery.trigger(t.events.SIZE_CHANGE); + } + + + /** + * exit fake fullscreen + */ + function exitFakeFullscreen(){ + + jQuery("body").removeClass("ug-body-fullscreen"); + g_objWrapper.removeClass("ug-fake-fullscreen"); + + g_temp.isFakeFullscreen = false; + + g_objGallery.trigger(t.events.EXIT_FULLSCREEN); + g_objGallery.trigger(t.events.SIZE_CHANGE); + + } + + /** + * return if the fullscreen mode is available + */ + this.isFullScreen = function(){ + + if(g_temp.isFakeFullscreen == true) + return(true); + + if(g_functions.isFullScreen() == true) + return(true); + + return(false); + } + + + /** + * tells if it's fake fullscreen + */ + this.isFakeFullscreen = function(){ + + return(g_temp.isFakeFullscreen); + } + + + /** + * go to fullscreen mode + */ + this.toFullScreen = function(){ + + g_functions.setGlobalData("fullscreenID", g_galleryID); + + var divGallery = g_objWrapper.get(0); + + var isSupported = g_functions.toFullscreen(divGallery); + + if(isSupported == false) + toFakeFullScreen(); + + } + + + /** + * exit full screen + */ + this.exitFullScreen = function(){ + + if(g_temp.isFakeFullscreen == true) + exitFakeFullscreen(); + else + g_functions.exitFullscreen(); + + } + + /** + * toggle fullscreen + */ + this.toggleFullscreen = function(){ + + if(t.isFullScreen() == false){ + t.toFullScreen(); + }else{ + t.exitFullScreen(); + } + + } + + /** + * resize the gallery + * noevent - initally false + */ + this.resize = function(newWidth, newHeight, noevent){ + + g_objWrapper.css("width", "auto"); + g_objWrapper.css("max-width",newWidth+"px"); + + if(newHeight) + g_objWrapper.height(newHeight); + + if(!noevent && noevent !== true) + onGalleryResized(); + + } + + + /** + * set size class to the wrapper + * this can work to any other wrapper too + */ + this.setSizeClass = function(objWrapper, width){ + + if(!objWrapper) + var objWrapper = g_objWrapper; + + if(!width){ + var objSize = t.getSize(); + var width = objSize.width; + } + + if(width == 0) + var width = jQuery(window).width(); + + var addClass = ""; + + if(width <= 480){ + addClass = "ug-under-480"; + }else + if(width <= 780){ + addClass = "ug-under-780"; + }else + if(width < 960){ + addClass = "ug-under-960"; + } + + if(objWrapper.hasClass(addClass) == true) + return(true); + + removeAllSizeClasses(objWrapper); + if(addClass != "") + objWrapper.addClass(addClass); + } + + + /** + * return if the size is suited for mobile + */ + this.isMobileMode = function(){ + + if(g_objWrapper.hasClass("ug-under-480")) + return(true); + + return(false); + } + + + /** + * get if small screen + */ + this.isSmallWindow = function(){ + + var windowWidth = jQuery(window).width(); + + + if(!windowWidth) + return(true); + + if(windowWidth <= 480) + return(true); + + return(false); + } + + + /** + * change gallery items + */ + this.changeItems = function(itemsContent, cacheID){ + + if(!itemsContent) + var itemsContent = "noitems"; + + runGallery(g_galleryID, "nochange", itemsContent, cacheID); + } + + /** + * show error message, replace whole gallery div + */ + this.showErrorMessageReplaceGallery = function(message){ + showErrorMessage(message); + } + + /** + * set custom height function by width + */ + this.setFuncCustomHeight = function(func){ + g_temp.funcCustomHeight = func; + } + + this.__________AJAX_REQUEST_______ = function(){}; + + + /** + * ajax request + */ + this.ajaxRequest = function(action, data, isJSON, successFunction){ + + var dataType = "html"; + if(isJSON == true) + dataType = "json"; + + if(!successFunction || typeof successFunction != "function") + throw new Error("ajaxRequest error: success function should be passed"); + + var urlAjax = g_options.gallery_urlajax; + if(urlAjax == "") + throw new Error("ajaxRequest error: Ajax url don't passed"); + + if(typeof data == "undefined") + var data = {}; + + //add galleryID to data + var objData = { + action:"unitegallery_ajax_action", + client_action:action, + galleryID: g_galleryID, + data:data + }; + + jQuery.ajax({ + type:"post", + url:g_options.gallery_urlajax, + dataType: 'json', + data:objData, + success:function(response){ + + if(!response){ + showErrorMessage("Empty ajax response!", "Ajax Error"); + return(false); + } + + if(response == -1 || response === 0){ + showErrorMessage("ajax error!!!"); + return(false); + } + + if(typeof response.success == "undefined"){ + showErrorMessage("The 'success' param is a must!"); + return(false); + } + + if(response.success == false){ + showErrorMessage(response.message); + return(false); + } + + successFunction(response); + }, + error:function(jqXHR, textStatus, errorThrown){ + console.log("Ajax Error!!! " + textStatus); + } + }); + + } + + + /** + * request new items + * isForce - don't take from cache + */ + this.requestNewItems = function(catID, isForce, cacheID){ + + var checkCache = g_options.gallery_enable_cache; + + if(!cacheID) + cacheID = catID; + + if(isForce == true) + checkCache = false; + + //get items from cache + if(checkCache == true && g_objCache.hasOwnProperty(cacheID)){ + + var htmlItems = g_objCache[cacheID]; + + t.changeItems(htmlItems, cacheID); + + }else{ + + g_objGallery.trigger(t.events.GALLERY_BEFORE_REQUEST_ITEMS); + + t.ajaxRequest("front_get_cat_items",{catid:catID}, true, function(response){ + + var htmlItems = response.html; + + t.changeItems(htmlItems, cacheID); + + }); + + } + + } + + + /** + * run the gallery + */ + this.run = function(galleryID, objParams){ + + + var debug_errors = g_options.gallery_debug_errors; + if(objParams && objParams.hasOwnProperty("gallery_debug_errors")) + g_options.gallery_debug_errors = objParams.gallery_debug_errors; + + + if(g_options.gallery_debug_errors == true){ + + try{ + + runGallery(galleryID, objParams); + + + }catch(objError){ + if(typeof objError == "object"){ + + var message = objError.message; + var lineNumber = objError.lineNumber; + var fileName = objError.fileName; + var stack = objError.stack; + + message += " <br><br> in file: "+fileName; + message += " <b> line " + lineNumber + "</b>"; + + trace(objError); + + }else{ + var message = objError; + } + + //remove double "error:" text + message = message.replace("Error:",""); + + showErrorMessage(message); + } + + }else{ + runGallery(galleryID, objParams); + } + + + + } + +} //unitegallery object end + + +/** + * tiles class + */ +function UGLightbox(){ + + var t = this, g_objThis = jQuery(this); + var g_gallery = new UniteGalleryMain(), g_objGallery, g_objWrapper; + var g_objSlider = new UGSlider(), g_objOverlay, g_objArrowLeft, g_objArrowRight, g_objButtonClose; + var g_functions = new UGFunctions(), g_objTextPanel = new UGTextPanel(), g_objNumbers; + var g_objTopPanel; + + var g_options = { + lightbox_type: "wide", //compact / wide - lightbox type + + lightbox_show_textpanel: true, //show the text panel + lightbox_textpanel_width: 550, //the width of the text panel. + + lightbox_hide_arrows_onvideoplay: true, //hide the arrows when video start playing and show when stop + lightbox_arrows_position: "sides", //sides, inside: position of the arrows, used on compact type + lightbox_arrows_offset: 10, //The horizontal offset of the arrows + lightbox_arrows_inside_offset: 10, //The offset from the image border if the arrows placed inside + lightbox_arrows_inside_alwayson: false, //Show the arrows on mouseover, or always on. + + lightbox_overlay_color:null, //the color of the overlay. if null - will take from css + lightbox_overlay_opacity:1, //the opacity of the overlay. if null - will take from css + lightbox_top_panel_opacity: null, //the opacity of the top panel + + lightbox_show_numbers: true, //show numbers on the right side + lightbox_numbers_size: null, //the size of the numbers string + lightbox_numbers_color: null, //the color of the numbers + lightbox_numbers_padding_top:null, //the top padding of the numbers (used in compact mode) + lightbox_numbers_padding_right:null, //the right padding of the numbers (used in compact mode) + + lightbox_compact_closebutton_offsetx: 1, //the offsetx of the close button. Valid only for compact mode + lightbox_compact_closebutton_offsety: 1, //the offsetx of the close button. Valid only for compact mode + + lightbox_close_on_emptyspace:true //close the lightbox on empty space + }; + + this.events = { + LIGHTBOX_INIT: "lightbox_init" + }; + + var g_temp = { + topPanelHeight: 44, + initTextPanelHeight: 26, //init height for compact mode + isOpened: false, + isRightNowOpened:false, + putSlider: true, + isCompact: false, + fadeDuration: 300, + positionFrom: null, + textPanelTop: null, + textPanelLeft: null, + isArrowsInside: false, + isArrowsOnHoverMode: false, + lastMouseX: null, + lastMouseY: null, + originalOptions: null, + isSliderChangedOnce:false, + isTopPanelEnabled:true + }; + + var g_defaults = { + lightbox_slider_controls_always_on: true, + lightbox_slider_enable_bullets: false, + lightbox_slider_enable_arrows: false, + lightbox_slider_enable_progress_indicator: false, + lightbox_slider_enable_play_button: false, + lightbox_slider_enable_fullscreen_button: false, + lightbox_slider_enable_zoom_panel: false, + lightbox_slider_enable_text_panel: false, + lightbox_slider_scale_mode_media: "down", + lightbox_slider_scale_mode: "down", + lightbox_slider_loader_type: 3, + lightbox_slider_loader_color: "black", + lightbox_slider_transition: "fade", + + lightbox_slider_image_padding_top: g_temp.topPanelHeight, + lightbox_slider_image_padding_bottom: 0, + + lightbox_slider_video_padding_top: 0, + lightbox_slider_video_padding_bottom: 0, + + lightbox_textpanel_align: "middle", + lightbox_textpanel_padding_top: 5, + lightbox_textpanel_padding_bottom: 5, + + slider_video_constantsize: false, + lightbox_slider_image_border: false, + + lightbox_textpanel_enable_title: true, + lightbox_textpanel_enable_description: false, + lightbox_textpanel_desc_style_as_title: true, + + lightbox_textpanel_enable_bg:false, + + video_enable_closebutton: false, + lightbox_slider_video_enable_closebutton: false, + video_youtube_showinfo: false, + lightbox_slider_enable_links:false + }; + + var g_defaultsCompact = { + lightbox_overlay_opacity:0.6, + + lightbox_slider_image_border: true, + lightbox_slider_image_shadow:true, + lightbox_slider_image_padding_top: 30, + lightbox_slider_image_padding_bottom: 30, + + slider_video_constantsize: true, + + lightbox_textpanel_align: "bottom", + lightbox_textpanel_title_text_align: "left", + lightbox_textpanel_desc_text_align: "left", + lightbox_textpanel_padding_left: 10, //the padding left of the textpanel + lightbox_textpanel_padding_right: 10 + }; + + + function __________GENERAL_________(){}; + + + /** + * init the gallery + */ + function initLightbox(gallery, customOptions){ + + g_gallery = gallery; + g_objGallery = jQuery(gallery); + + g_options = jQuery.extend(g_options, g_defaults); + g_options = jQuery.extend(g_options, customOptions); + + g_temp.originalOptions = jQuery.extend({}, g_options); + + if(g_options.lightbox_type == "compact"){ + g_temp.isCompact = true; + g_options = jQuery.extend(g_options, g_defaultsCompact); + g_options = jQuery.extend(g_options, customOptions); + } + + //modify some options + modifyOptions(); + + if(g_temp.putSlider == true){ + + g_gallery.initSlider(g_options, "lightbox"); + g_objects = gallery.getObjects(); + g_objSlider = g_objects.g_objSlider; + + }else{ + g_objSlider = null; + } + + if(g_options.lightbox_show_textpanel == true){ + g_objTextPanel.init(g_gallery, g_options, "lightbox"); + } + else + g_objTextPanel = null; + + + } + + + /** + * modify some options according user options + */ + function modifyOptions(){ + + if(g_temp.isCompact == true && g_options.lightbox_show_textpanel == true){ + g_options.lightbox_slider_image_padding_bottom = g_temp.initTextPanelHeight; + } + + if(g_temp.isCompact == true && g_options.lightbox_arrows_position == "inside"){ + g_temp.isArrowsInside = true; + } + + if(g_temp.isArrowsInside == true && g_options.lightbox_arrows_inside_alwayson == false) + g_temp.isArrowsOnHoverMode = true; + + //disable top panel if no text panel enabled + if(g_options.lightbox_show_textpanel == false){ + g_temp.isTopPanelEnabled = false; + g_temp.topPanelHeight = 0; + g_options.lightbox_slider_image_padding_top = 0; + } + + //modify slider image border width + + + } + + + /** + * put the lightbox html + */ + function putLightboxHtml(){ + + var html = ""; + var classAddition = ""; + if(g_temp.isCompact == true){ + classAddition = " ug-lightbox-compact"; + } + + html += "<div class='ug-gallery-wrapper ug-lightbox"+classAddition+"'>"; + html += "<div class='ug-lightbox-overlay'></div>"; + + //set top panel only on wide mode + if(g_temp.isCompact == false && g_temp.isTopPanelEnabled){ + html += "<div class='ug-lightbox-top-panel'>"; + html += "<div class='ug-lightbox-top-panel-overlay'></div>"; + + if(g_options.lightbox_show_numbers) + html += "<div class='ug-lightbox-numbers'></div>"; + + html += "</div>"; //top panel + }else{ + + //put numbers without top panel + if(g_options.lightbox_show_numbers) + html += "<div class='ug-lightbox-numbers'></div>"; + + } + + + html += "<div class='ug-lightbox-button-close'></div>"; + + html += "<div class='ug-lightbox-arrow-left'></div>"; + html += "<div class='ug-lightbox-arrow-right'></div>"; + + html += "</div>"; + + g_objWrapper = jQuery(html); + + jQuery("body").append(g_objWrapper); + + if(g_objSlider) + g_objSlider.setHtml(g_objWrapper); + + g_objOverlay = g_objWrapper.children(".ug-lightbox-overlay"); + + if(g_temp.isCompact == false && g_temp.isTopPanelEnabled == true){ + g_objTopPanel = g_objWrapper.children(".ug-lightbox-top-panel"); + if(g_objTopPanel.length == 0) + g_objTopPanel = null; + } + + g_objButtonClose = g_objWrapper.find(".ug-lightbox-button-close"); + + if(g_options.lightbox_show_numbers) + g_objNumbers = g_objWrapper.find(".ug-lightbox-numbers"); + + g_objArrowLeft = g_objWrapper.children(".ug-lightbox-arrow-left"); + g_objArrowRight = g_objWrapper.children(".ug-lightbox-arrow-right"); + + if(g_objTextPanel){ + if(g_objTopPanel) + g_objTextPanel.appendHTML(g_objTopPanel); + else + g_objTextPanel.appendHTML(g_objWrapper); + } + + } + + + /** + * set lightbox properties + */ + function setProperties(){ + + if(g_options.lightbox_overlay_color !== null) + g_objOverlay.css("background-color", g_options.lightbox_overlay_color); + + if(g_options.lightbox_overlay_opacity !== null) + g_objOverlay.fadeTo(0, g_options.lightbox_overlay_opacity); + + if(g_objTopPanel && g_options.lightbox_top_panel_opacity !== null){ + g_objTopPanel.children(".ug-lightbox-top-panel-overlay").fadeTo(0, g_options.lightbox_top_panel_opacity); + } + + //set numbers properties + if(g_objNumbers){ + var cssNumbers = {}; + + if(g_options.lightbox_numbers_size !== null) + cssNumbers["font-size"] = g_options.lightbox_numbers_size+"px"; + + if(g_options.lightbox_numbers_color) + cssNumbers["color"] = g_options.lightbox_numbers_color; + + if(g_options.lightbox_numbers_padding_right !== null) + cssNumbers["padding-right"] = g_options.lightbox_numbers_padding_right + "px"; + + if(g_options.lightbox_numbers_padding_top !== null) + cssNumbers["padding-top"] = g_options.lightbox_numbers_padding_top + "px"; + + + g_objNumbers.css(cssNumbers); + } + + } + + + /** + * refresh slider item with new height + */ + function refreshSliderItem(newHeight){ + + if(!g_objSlider) + return(true); + + //set slider new image position + var objOptions = { + slider_image_padding_top: newHeight + }; + + g_objSlider.setOptions(objOptions); + g_objSlider.refreshSlideItems(); + + } + + function __________WIDE_ONLY_________(){}; + + + /** + * handle panel height according text height + */ + function handlePanelHeight(fromWhere){ + + if(!g_objTopPanel) + return(false); + + if(!g_objTextPanel) + return(false); + + //check text panel size, get the panel bigger then + var panelHeight = g_objTopPanel.height(); + if(panelHeight == 0) + return(false); + + if(g_objTopPanel.is(":visible") == false) + return(false); + + var newPanelHeight = panelHeight; + + var objTextPanelSize = g_objTextPanel.getSize(); + + var textPanelHeight = objTextPanelSize.height; + + if(panelHeight != g_temp.topPanelHeight) + newPanelHeight = g_temp.topPanelHeight; + + if(textPanelHeight > newPanelHeight) + newPanelHeight = textPanelHeight; + + if(panelHeight != newPanelHeight){ + g_objTopPanel.height(newPanelHeight); + + if(g_objSlider && g_objSlider.isAnimating() == false) + refreshSliderItem(newPanelHeight); + } + + } + + + /** + * position text panel for wide + * size - wrapper size + */ + function positionTextPanelWide(size){ + + var objOptions = {}; + + var textWidth = g_options.lightbox_textpanel_width; + var minPaddingLeft = 47; + var minPaddingRight = 40; + var maxTextPanelWidth = size.width - minPaddingLeft - minPaddingRight; + + if(textWidth > maxTextPanelWidth){ //mobile mode + + objOptions.textpanel_padding_left = minPaddingLeft; + objOptions.textpanel_padding_right = minPaddingRight; + + objOptions.textpanel_title_text_align = "center"; + objOptions.textpanel_desc_text_align = "center"; + }else{ + objOptions.textpanel_padding_left = Math.floor((size.width - textWidth) / 2); + objOptions.textpanel_padding_right = objOptions.textpanel_padding_left; + objOptions.textpanel_title_text_align = "left"; + objOptions.textpanel_desc_text_align = "left"; + + if(g_options.lightbox_textpanel_title_text_align) + objOptions.textpanel_title_text_align = g_options.lightbox_textpanel_desc_text_align; + + if(g_options.lightbox_textpanel_desc_text_align) + objOptions.textpanel_desc_text_align = g_options.lightbox_textpanel_desc_text_align; + + } + + g_objTextPanel.setOptions(objOptions); + + g_objTextPanel.refresh(true, true); + + handlePanelHeight("positionTextPanelWide"); + g_objTextPanel.positionPanel(); + } + + /** + * hide top panel + */ + function hideTopPanel(){ + + if(!g_objTopPanel) + return(false); + + g_objTopPanel.hide(); + } + + + /** + * show top panel + */ + function showTopPanel(){ + + if(!g_objTopPanel) + return(false); + + g_objTopPanel.show(); + } + + + function __________COMPACT_ONLY_________(){}; + + /** + * handle slider image height according the textpanel height + * refresh the slider if the height is not in place + */ + function handleCompactHeight(objImageSize){ + + if(g_temp.isOpened == false) + return(false); + + if(!g_objTextPanel) + return(false); + + if(!g_objSlider) + return(false); + + var wrapperSize = g_functions.getElementSize(g_objWrapper); + var textPanelSize = g_objTextPanel.getSize(); + + if(textPanelSize.width == 0 || textPanelSize.height > 120) + return(false); + + if(!objImageSize){ + var objImage = g_objSlider.getSlideImage(); + var objImageSize = g_functions.getElementSize(objImage); + } + + if(objImageSize.height == 0 || objImageSize.width == 0) + return(false); + + //check elements end size + var totalBottom = objImageSize.bottom + textPanelSize.height; + + if(totalBottom < wrapperSize.height) + return(false); + + var sliderOptions = g_objSlider.getOptions(); + + var imagePaddingBottom = textPanelSize.height; + + if(imagePaddingBottom != sliderOptions.slider_image_padding_bottom){ + + var objOptions = { + slider_image_padding_bottom: imagePaddingBottom + }; + + if(g_objSlider.isAnimating() == false){ + g_objSlider.setOptions(objOptions); + g_objSlider.refreshSlideItems(); + return(true); + } + + } + + return(false); + } + + /** + * set text panel top of compact mode + */ + function setCompactTextpanelTop(objImageSize, positionPanel){ + + if(!objImageSize){ + var objImage = g_objSlider.getSlideImage(); + var objImageSize = g_functions.getElementSize(objImage); + } + + g_temp.textPanelTop = objImageSize.bottom; + + if(positionPanel === true) + g_objTextPanel.positionPanel(g_temp.textPanelTop, g_temp.textPanelLeft); + } + + + /** + * handle text panel width on compact mode, + * run when the image is ready. + * Set top position of the panel as well + * position numbers as well + */ + function handleCompactTextpanelSizes(showTextpanel){ + + var wrapperSize = g_functions.getElementSize(g_objWrapper); + var objImage = g_objSlider.getSlideImage(); + var objImageSize = g_functions.getElementSize(objImage); + + if(objImageSize.width == 0) + return(false); + + + g_temp.textPanelLeft = objImageSize.left; + g_temp.textPanelTop = objImageSize.bottom; + + var textPanelWidth = objImageSize.width; + + if(g_objNumbers){ + + var objNumbersSize = g_functions.getElementSize(g_objNumbers); + textPanelWidth -= objNumbersSize.width; + + //place numbers object + var numbersLeft = objImageSize.right - objNumbersSize.width; + g_functions.placeElement(g_objNumbers, numbersLeft, g_temp.textPanelTop); + } + + + if(g_objTextPanel){ + g_objTextPanel.show(); + g_objTextPanel.refresh(true, true, textPanelWidth); + setCompactTextpanelTop(objImageSize); + } + + var isChanged = handleCompactHeight(objImageSize); + + if(isChanged == false){ + + g_temp.positionFrom = "handleCompactTextpanelSizes"; + + if(g_objTextPanel){ + g_objTextPanel.positionPanel(g_temp.textPanelTop, g_temp.textPanelLeft); + if(showTextpanel === true){ + showTextpanel(); + showNumbers(); + } + } + + } + + } + + + + /** + * return that current slider image is in place + */ + function isSliderImageInPlace(){ + + if(g_objSlider.isCurrentSlideType("image") == false) + return(true); + + var isImageInPlace = (g_objSlider.isCurrentImageInPlace() == true); + + return(isImageInPlace); + } + + + /** + * position the arrows inside mode + */ + function positionArrowsInside(toShow, isAnimation){ + + if(g_temp.isArrowsInside == false) + return(false); + + if(!g_objArrowLeft) + return(false); + + var isImageInPlace = isSliderImageInPlace(); + + g_objArrowLeft.show(); + g_objArrowRight.show(); + + g_temp.positionFrom = "positionArrowsInside"; + + if(g_temp.isArrowsOnHoverMode == true && isImageInPlace == true && isMouseInsideImage() == false) + hideArrows(true); + + if(isImageInPlace == false){ + var leftArrowLeft = g_functions.getElementRelativePos(g_objArrowLeft, "left", g_options.lightbox_arrows_offset); + var leftArrowTop = g_functions.getElementRelativePos(g_objArrowLeft, "middle"); + + var rightArrowLeft = g_functions.getElementRelativePos(g_objArrowRight, "right", g_options.lightbox_arrows_offset); + var rightArrowTop = leftArrowTop; + + }else{ + + var objImage = g_objSlider.getSlideImage(); + var objImageSize = g_functions.getElementSize(objImage); + var objSliderSize = g_functions.getElementSize(g_objSlider.getElement()); + + var leftArrowLeft = g_functions.getElementRelativePos(g_objArrowLeft, "left", 0, objImage) + objImageSize.left + g_options.lightbox_arrows_inside_offset; + var leftArrowTop = g_functions.getElementRelativePos(g_objArrowLeft, "middle", 0, objImage) + objImageSize.top; + var rightArrowLeft = g_functions.getElementRelativePos(g_objArrowLeft, "right", 0, objImage) + objImageSize.left - g_options.lightbox_arrows_inside_offset; + var rightArrowTop = leftArrowTop; + + } + + + //place the image with animation or not + if(isAnimation === true){ + + var objCssLeft = { + left: leftArrowLeft, + top: leftArrowTop + }; + + var objCssRight = { + left: rightArrowLeft, + top: rightArrowTop + }; + + g_objArrowLeft.stop().animate(objCssLeft,{ + duration: g_temp.fadeDuration + }); + + g_objArrowRight.stop().animate(objCssRight,{ + duration: g_temp.fadeDuration + }); + + + }else{ + g_objArrowLeft.stop(); + g_objArrowRight.stop(); + + g_functions.placeElement(g_objArrowLeft, leftArrowLeft, leftArrowTop); + g_functions.placeElement(g_objArrowRight, rightArrowLeft, rightArrowTop); + } + + + if(toShow == true) + showArrows(isAnimation); + + } + + + + /** + * position close button for compact type + */ + function positionCloseButton(toShow, isAnimation){ + + g_temp.positionFrom = null; + + var isImageInPlace = isSliderImageInPlace(); + + var minButtonTop = 2; + var maxButtonLeft = g_functions.getElementRelativePos(g_objButtonClose, "right", 2, g_objWrapper); + + if(isImageInPlace == false){ //put image to corner + + var closeButtonTop = minButtonTop; + var closeButtonLeft = maxButtonLeft; + + }else{ + var objImage = g_objSlider.getSlideImage(); + var objImageSize = g_functions.getElementSize(objImage); + var objSliderSize = g_functions.getElementSize(g_objSlider.getElement()); + var objButtonSize = g_functions.getElementSize(g_objButtonClose); + + //some strange bug + if(objSliderSize.top == objSliderSize.height) + objSliderSize.top = 0; + + var closeButtonLeft = objSliderSize.left + objImageSize.right - objButtonSize.width / 2 + g_options.lightbox_compact_closebutton_offsetx; + var closeButtonTop = objSliderSize.top + objImageSize.top - objButtonSize.height / 2 - g_options.lightbox_compact_closebutton_offsety; + + if(closeButtonTop < minButtonTop) + closeButtonTop = minButtonTop; + + if(closeButtonLeft > maxButtonLeft) + closeButtonLeft = maxButtonLeft; + + } + + //place the image with animation or not + if(isAnimation === true){ + var objCss = { + left: closeButtonLeft, + top: closeButtonTop + }; + + g_objButtonClose.stop().animate(objCss,{ + duration: g_temp.fadeDuration + }); + + }else{ + g_objButtonClose.stop(); + g_functions.placeElement(g_objButtonClose, closeButtonLeft, closeButtonTop); + } + + if(toShow === true) + showCloseButton(isAnimation); + + } + + + /** + * hide close button + */ + function hideCompactElements(){ + + if(g_objButtonClose) + g_objButtonClose.stop().fadeTo(g_temp.fadeDuration, 0); + + hideTextPanel(); + + hideNumbers(); + + g_temp.positionFrom = "hideCompactElements"; + if(g_temp.isArrowsInside == true) + hideArrows(); + } + + + /** + * actual hide all compact type elements + */ + function actualHideCompactElements(){ + + if(g_objButtonClose) + g_objButtonClose.hide(); + + if(g_objArrowLeft && g_temp.isArrowsInside == true){ + g_objArrowLeft.hide(); + g_objArrowRight.hide(); + } + + if(g_objNumbers) + g_objNumbers.hide(); + + if(g_objTextPanel) + g_objTextPanel.hide(); + + } + + + function __________COMMON_________(){}; + + + /** + * position the elements + */ + function positionElements(){ + + var size = g_functions.getElementSize(g_objWrapper); + + //position top panel: + if(g_objTopPanel) + g_functions.setElementSizeAndPosition(g_objTopPanel, 0, 0, size.width, g_temp.topPanelHeight); + + //position arrows + if(g_objArrowLeft && g_temp.isArrowsInside == false){ + + if(g_options.lightbox_hide_arrows_onvideoplay == true){ + g_objArrowLeft.show(); + g_objArrowRight.show(); + } + + g_functions.placeElement(g_objArrowLeft, "left", "middle", g_options.lightbox_arrows_offset); + g_functions.placeElement(g_objArrowRight, "right", "middle", g_options.lightbox_arrows_offset); + } + + if(g_temp.isCompact == false) + g_functions.placeElement(g_objButtonClose, "right", "top", 2, 2); + + //place text panel + if(g_objTextPanel){ + + g_temp.positionFrom = "positionElements"; + + if(g_temp.isCompact == false) + positionTextPanelWide(size); + else{ + showTextPanel(); + showNumbers(); + } + + } + + var sliderWidth = size.width; + var sliderHeight = size.height; + var sliderTop = 0; + var sliderLeft = 0; + + if(g_objSlider){ + + if(g_objTopPanel){ + var topPanelHeight = g_objTopPanel.height(); + var objOptions = { + slider_image_padding_top: topPanelHeight + }; + g_objSlider.setOptions(objOptions); + } + + g_objSlider.setSize(sliderWidth, sliderHeight); + g_objSlider.setPosition(sliderLeft, sliderTop); + } + + } + + + /** + * hide the text panel + */ + function hideTextPanel(){ + + if(g_objTextPanel) + g_objTextPanel.getElement().stop().fadeTo(g_temp.fadeDuration, 0); + + } + + + /** + * hide the numbers text + */ + function hideNumbers(){ + + if(g_objNumbers) + g_objNumbers.stop().fadeTo(g_temp.fadeDuration, 0); + } + + + /** + * is mouse inside image + */ + function isMouseInsideImage(){ + if(!g_temp.lastMouseX) + return(true); + var obj = { + pageX: g_temp.lastMouseX, + pageY: g_temp.lastMouseY + }; + + var isMouseInside = g_objSlider.isMouseInsideSlideImage(obj); + + return(isMouseInside); + } + + + /** + * hide the arrows + */ + function hideArrows(noAnimation, isForce){ + + if(!g_objArrowLeft) + return(false); + + //don't hide the arrows if mouse inside image + if(g_temp.isArrowsOnHoverMode == true && isForce === false){ + if(isMouseInsideImage() == true); + return(true); + } + + if(noAnimation === true){ + g_objArrowLeft.stop().fadeTo(0, 0); + g_objArrowRight.stop().fadeTo(0, 0); + }else{ + g_objArrowLeft.stop().fadeTo(g_temp.fadeDuration, 0); + g_objArrowRight.stop().fadeTo(g_temp.fadeDuration, 0); + } + + } + + /** + * get if the arrows are hidden + */ + function isArrowsHidden(){ + + if(!g_objArrowLeft) + return(true); + if(g_objArrowLeft.is(":visible") == false) + return(true); + + var opacity = g_objArrowLeft.css("opacity"); + if(opacity != 1) + return(true); + + return(false); + } + + /** + * show the arrows + */ + function showArrows(noStop, fromHover){ + + if(!g_objArrowLeft) + return(false); + + //don't show every time on arrowsonhover mode + if(g_temp.isArrowsOnHoverMode == true && fromHover !== true && isSliderImageInPlace() == true) + return(true); + + //don't show if swiping + if(g_objSlider.isSwiping() == true) + return(true); + + if(noStop !== true){ + g_objArrowLeft.stop(); + g_objArrowRight.stop(); + } + + g_objArrowLeft.fadeTo(g_temp.fadeDuration, 1); + g_objArrowRight.fadeTo(g_temp.fadeDuration, 1); + + } + + + + + + /** + * show close button + */ + function showCloseButton(noStop){ + + if(noStop !== true) + g_objButtonClose.stop(); + + g_objButtonClose.fadeTo(g_temp.fadeDuration, 1); + } + + + /** + * update text panel text of the curren item + */ + function updateTextPanelText(currentItem){ + + if(!g_objTextPanel) + return(false); + + if(!currentItem) + var currentItem = g_objSlider.getCurrentItem(); + + g_objTextPanel.setTextPlain(currentItem.title, currentItem.description); + } + + + /** + * update numbers text + */ + function updateNumbersText(currentItem){ + + if(!g_objNumbers) + return(false); + + if(!currentItem) + var currentItem = g_objSlider.getCurrentItem(); + + var numItems = g_gallery.getNumItems(); + var numCurrentItem = currentItem.index + 1; + g_objNumbers.html(numCurrentItem + " / " + numItems); + } + + + /** + * show the text panel + */ + function showTextPanel(){ + + if(!g_objTextPanel) + return(false); + + g_objTextPanel.getElement().show().stop().fadeTo(g_temp.fadeDuration, 1); + + } + + + /** + * Show the numbers object + */ + function showNumbers(){ + + if(g_objNumbers) + g_objNumbers.stop().fadeTo(g_temp.fadeDuration, 1); + } + + + function __________EVENTS_________(){}; + + + /** + * on start dragging slider item event. hide the elements + */ + function onSliderDragStart(){ + if(g_temp.isCompact == false) + return(true); + + hideCompactElements(); + } + + + /** + * on zoom change + * move the assets of compact to their places + */ + function onZoomChange(){ + if(g_temp.isCompact == false) + return(true); + + g_temp.positionFrom = "onZoomChange"; + + positionCloseButton(false, true); + positionArrowsInside(false, true); + + //handle compact text panel mode + if(g_temp.isCompact == true){ + var isImageInPlace = (g_objSlider.isCurrentSlideType("image") && g_objSlider.isCurrentImageInPlace() == true); + if(isImageInPlace == false){ + hideTextPanel(); + hideNumbers(); + } + else{ + g_temp.positionFrom = "onZoomChange"; + showTextPanel(); + showNumbers(); + } + } + + } + + + /** + * after return slider to it's place + * show close button + */ + function onSliderAfterReturn(){ + + if(g_temp.isCompact == false) + return(true); + + g_temp.positionFrom = "onSliderAfterReturn"; + + positionCloseButton(true); + positionArrowsInside(true); + + var isChanged = handleCompactHeight(); + if(isChanged == false) + handleCompactTextpanelSizes(); + + showTextPanel(); + showNumbers(); + } + + + /** + * after put image to the slide + * position compact elements + */ + function onSliderAfterPutImage(data, objSlide){ + + objSlide = jQuery(objSlide); + + if(g_temp.isCompact == false) + return(true); + + if(g_objSlider.isSlideCurrent(objSlide) == false) + return(true); + + g_temp.positionFrom = "onSliderAfterPutImage"; + + positionCloseButton(true); + + positionArrowsInside(true); + + handleCompactTextpanelSizes(); + } + + + /** + * on slider transition end, handle panel height + */ + function onSliderTransitionEnd(){ + + var sliderOptions = g_objSlider.getOptions(); + var imagePaddingTop = sliderOptions.slider_image_padding_top; + + //handle wide + if(g_objTopPanel){ + var panelHeight = g_objTopPanel.height(); + + if(panelHeight != imagePaddingTop) + refreshSliderItem(panelHeight); + } + + //handle compact + if(g_temp.isCompact == true){ + + updateTextPanelText(); + updateNumbersText(); + + g_temp.positionFrom = "onSliderTransitionEnd"; + + positionCloseButton(true); + positionArrowsInside(true); + + if(g_objSlider.isSlideActionActive() == false){ + var isChanged = handleCompactHeight(); + if(isChanged == false) + handleCompactTextpanelSizes(); + } + + showTextPanel(); + showNumbers(); + + } + + } + + + /** + * on item change + * update numbers text and text panel text/position + */ + function onItemChange(data, currentItem){ + + if(g_temp.isCompact == false){ //wide mode + + if(g_objNumbers) + updateNumbersText(currentItem); + + if(g_objTextPanel){ + updateTextPanelText(currentItem); + + //update panel height only if the lightbox is already opened, and the items changed within it. + if(g_temp.isRightNowOpened == false){ + g_objTextPanel.positionElements(false); + handlePanelHeight("onchange"); + g_objTextPanel.positionPanel(); + } + + } + + }else{ + + if(g_objSlider.isAnimating() == false){ + + if(g_objTextPanel) + updateTextPanelText(currentItem); + + if(g_objNumbers) + updateNumbersText(currentItem); + } + + } + + + //trigger lightbox init event + if(g_temp.isSliderChangedOnce == false){ + g_temp.isSliderChangedOnce = true; + g_objThis.trigger(t.events.LIGHTBOX_INIT); + } + + } + + + /** + * on slider click + */ + function onSliderClick(data, event){ + + var slideType = g_objSlider.getSlideType(); + if(slideType != "image" && g_temp.isCompact == false && g_objSlider.isSlideActionActive() ) + return(true); + + var isPreloading = g_objSlider.isPreloading(); + if(isPreloading == true){ + t.close("slider"); + return(true); + } + + //close the lightbox on empty space click + if(g_options.lightbox_close_on_emptyspace == true){ + + var isInside = g_objSlider.isMouseInsideSlideImage(event); + + if(isInside == false) + t.close("slider_inside"); + } + + } + + + /** + * on lightbox resize + */ + function onResize(){ + + positionElements(); + } + + + + /** + * on start play - hide the side buttons + */ + function onPlayVideo(){ + + if(g_objTopPanel){ + hideTopPanel(); + }else{ + if(g_objNumbers) + g_objNumbers.hide(); + } + + if(g_objArrowLeft && g_options.lightbox_hide_arrows_onvideoplay == true){ + g_objArrowLeft.hide(); + g_objArrowRight.hide(); + } + + } + + + /** + * on stop video - show the side buttons + */ + function onStopVideo(){ + + if(g_objTopPanel){ + showTopPanel(); + handlePanelHeight("onStopVideo"); + }else{ + + if(g_objNumbers) + g_objNumbers.show(); + } + + if(g_objArrowLeft && g_options.lightbox_hide_arrows_onvideoplay == true){ + g_objArrowLeft.show(); + g_objArrowRight.show(); + } + + } + + /** + * on gallery keypres, do operations + */ + function onKeyPress(data, key, event){ + + var isScrollKey = false; + + switch(key){ + case 27: //escape - close lightbox + if(g_temp.isOpened == true) + t.close("keypress"); + break; + case 38: //up and down arrows + case 40: + case 33: //page up and down + case 34: + isScrollKey = true; + break; + } + + if(g_temp.isOpened == true && isScrollKey == true) + event.preventDefault(); + + + } + + /** + * on image mouse enter event + */ + function onImageMouseEnter(){ + + if(g_temp.isArrowsOnHoverMode == true) + showArrows(false, true); + + } + + /** + * on image mouse leave + */ + function onImageMouseLeave(event){ + + g_temp.positionFrom = "hideCompactElements"; + + if(g_temp.isArrowsOnHoverMode == true && isSliderImageInPlace() == true) + hideArrows(false, true); + + } + + + /** + * on mouse move event + * show arrows if inside image + */ + function onMouseMove(event){ + g_temp.lastMouseX = event.pageX; + g_temp.lastMouseY = event.pageY; + + var isHidden = isArrowsHidden() + + + if(isHidden == true && isMouseInsideImage() && g_objSlider.isAnimating() == false){ + g_temp.positionFrom = "onMouseMove"; + if(g_objArrowLeft && g_objArrowLeft.is(":animated") == false) + showArrows(false, true); + } + + } + + + /** + * on mouse wheel + */ + function onMouseWheel(event, delta, deltaX, deltaY){ + + if(g_temp.isOpened == false) + return(true); + + switch(g_options.gallery_mousewheel_role){ + default: + case "zoom": + var slideType = g_objSlider.getSlideType(); + if(slideType != "image") + event.preventDefault(); + break; + case "none": + event.preventDefault(); + break; + case "advance": + g_gallery.onGalleryMouseWheel(event, delta, deltaX, deltaY); + break; + } + + } + + + /** + * init events + */ + function initEvents(){ + + g_objOverlay.on("touchstart", function(event){ + event.preventDefault(); + }); + + g_objOverlay.on("touchend", function(event){ + t.close("overlay"); + }); + + + g_functions.addClassOnHover(g_objArrowRight, "ug-arrow-hover"); + g_functions.addClassOnHover(g_objArrowLeft, "ug-arrow-hover"); + + g_functions.addClassOnHover(g_objButtonClose); + + g_gallery.setNextButton(g_objArrowRight); + g_gallery.setPrevButton(g_objArrowLeft); + + g_objButtonClose.click(function(){ + t.close("button"); + }); + + g_objGallery.on(g_gallery.events.ITEM_CHANGE, onItemChange); + + if(g_objSlider){ + jQuery(g_objSlider).on(g_objSlider.events.TRANSITION_END, onSliderTransitionEnd); + + //on slider click event + jQuery(g_objSlider).on(g_objSlider.events.CLICK, onSliderClick); + + //on slider video + var objVideo = g_objSlider.getVideoObject(); + + jQuery(objVideo).on(objVideo.events.PLAY_START, onPlayVideo); + jQuery(objVideo).on(objVideo.events.PLAY_STOP, onStopVideo); + + //handle close button hide / appear + jQuery(g_objSlider).on(g_objSlider.events.START_DRAG, onSliderDragStart); + jQuery(g_objSlider).on(g_objSlider.events.TRANSITION_START, onSliderDragStart); + + jQuery(g_objSlider).on(g_objSlider.events.AFTER_DRAG_CHANGE, onSliderAfterReturn); + jQuery(g_objSlider).on(g_objSlider.events.AFTER_RETURN, onSliderAfterReturn); + jQuery(g_objSlider).on(g_objSlider.events.AFTER_PUT_IMAGE, onSliderAfterPutImage); + + jQuery(g_objSlider).on(g_objSlider.events.ZOOM_CHANGE, onZoomChange); + + jQuery(g_objSlider).on(g_objSlider.events.IMAGE_MOUSEENTER, onImageMouseEnter); + jQuery(g_objSlider).on(g_objSlider.events.IMAGE_MOUSELEAVE, onImageMouseLeave); + + } + + //on resize + jQuery(window).resize(function(){ + + if(g_temp.isOpened == false) + return(true); + + g_functions.whenContiniousEventOver("lightbox_resize", onResize, 100); + }); + + g_objGallery.on(g_gallery.events.GALLERY_KEYPRESS, onKeyPress); + + //store last mouse x and y + if(g_temp.isArrowsOnHoverMode == true){ + + jQuery(document).bind('mousemove', onMouseMove); + + } + + //on mouse wheel - disable functionality if video + g_objWrapper.on("mousewheel", onMouseWheel); + + } + + + /** + * destroy the lightbox events and the html it created + */ + this.destroy = function(){ + + jQuery(document).unbind("mousemove"); + + g_objOverlay.off("touchstart"); + g_objOverlay.off("touchend"); + g_objButtonClose.off("click"); + g_objGallery.off(g_gallery.events.ITEM_CHANGE); + + if(g_objSlider){ + jQuery(g_objSlider).off(g_objSlider.events.TRANSITION_END); + jQuery(g_objSlider).off(g_objSlider.events.CLICK); + jQuery(g_objSlider).off(g_objSlider.events.START_DRAG); + jQuery(g_objSlider).off(g_objSlider.events.TRANSITION_START); + jQuery(g_objSlider).off(g_objSlider.events.AFTER_DRAG_CHANGE); + jQuery(g_objSlider).off(g_objSlider.events.AFTER_RETURN); + + var objVideo = g_objSlider.getVideoObject(); + jQuery(objVideo).off(objVideo.events.PLAY_START); + jQuery(objVideo).off(objVideo.events.PLAY_STOP); + + jQuery(g_objSlider).on(g_objSlider.events.IMAGE_MOUSEENTER, onImageMouseEnter); + jQuery(g_objSlider).on(g_objSlider.events.IMAGE_MOUSELEAVE, onImageMouseLeave); + + g_objSlider.destroy(); + } + + jQuery(window).unbind("resize"); + g_objGallery.off(g_gallery.events.GALLERY_KEYPRESS, onKeyPress); + + g_objWrapper.off("mousewheel"); + + //remove the html + g_objWrapper.remove(); + } + + + /** + * open the lightbox with some item index + */ + this.open = function(index){ + + var objItem = g_gallery.getItem(index); + + g_temp.isOpened = true; + + //set if the panel right now opened + g_temp.isRightNowOpened = true; + setTimeout(function(){g_temp.isRightNowOpened = false},100); + + if(g_objSlider){ + g_objSlider.setItem(objItem, "lightbox_open"); + } + + if(g_objTextPanel){ + g_objTextPanel.setTextPlain(objItem.title, objItem.description); + } + + g_objOverlay.stop().fadeTo(0,0); + g_objWrapper.show(); + g_objWrapper.fadeTo(0,1); + + //show the overlay + g_objOverlay.stop().fadeTo(g_temp.fadeDuration, g_options.lightbox_overlay_opacity); + + positionElements(); + + if(g_temp.isCompact == true){ + + var isPreloading = g_objSlider.isPreloading(); + if(isPreloading == true){ + + actualHideCompactElements(); + + }else{ + + //hide only arrows if they are inside + if(g_temp.isArrowsInside == true){ + g_objArrowLeft.hide(); + g_objArrowRight.hide(); + } + + } + + } + + if(g_objSlider) + g_objSlider.startSlideAction(); + + //trigger gallery event + g_objGallery.trigger(g_gallery.events.OPEN_LIGHTBOX, objItem); + + } + + + /** + * close the lightbox + */ + this.close = function(fromWhere){ + + g_temp.isOpened = false; + + if(g_temp.isCompact == true) + hideCompactElements(); + + if(g_objSlider) + g_objSlider.stopSlideAction(); + + var slideType = g_objSlider.getSlideType(); + + if(slideType != "image") + g_objWrapper.hide(); + else{ + g_objWrapper.fadeTo(g_temp.fadeDuration,0,function(){ + g_objWrapper.hide(); + }); + } + + g_objGallery.trigger(g_gallery.events.CLOSE_LIGHTBOX); + + } + + + /** + * external init function + */ + this.init = function(gallery, customOptions){ + + initLightbox(gallery, customOptions); + } + + + /** + * switch to wide mode from compact mode + */ + function switchToWide(){ + g_temp.isCompact = false; + modifyOptions(); + + g_temp.isArrowsInside = false; + g_temp.isArrowsOnHoverMode = false; + + g_options = jQuery.extend({}, g_temp.originalOptions); + + g_options.lightbox_arrows_position = "sides"; + + g_objSlider.setOptions(g_options); + } + + + /** + * external put html function + */ + this.putHtml = function(){ + + //check if switch to wide mode + var isSmallWindow = g_gallery.isSmallWindow(); + + if(isSmallWindow && g_temp.isCompact == true) + switchToWide(); + + putLightboxHtml(); + } + + + /** + * run lightbox elements + */ + this.run = function(){ + + setProperties(); + + if(g_objSlider) + g_objSlider.run(); + + initEvents(); + } + + + +} + + + +/** + * carousel class + */ +function UGCarousel(){ + + var t = this, g_objThis = jQuery(this); + var g_gallery = new UniteGalleryMain(), g_objGallery, g_objWrapper; + var g_functions = new UGFunctions(), g_arrItems, g_objTileDesign = new UGTileDesign(); + var g_thumbs = new UGThumbsGeneral(), g_objCarouselWrapper, g_objInner, arrOrigTiles = []; + + var g_options = { + carousel_padding: 8, //padding at the sides of the carousel + carousel_space_between_tiles: 20, //space between tiles + carousel_navigation_numtiles:3, //number of tiles to scroll when user clicks on next/prev button + carousel_scroll_duration:500, //duration of scrolling to tile + carousel_scroll_easing:"easeOutCubic", //easing of scrolling to tile animation + + carousel_autoplay: true, //true,false - autoplay of the carousel on start + carousel_autoplay_timeout: 3000, //autoplay timeout + carousel_autoplay_direction: "right", //left,right - autoplay direction + carousel_autoplay_pause_onhover: true, //pause the autoplay on mouse over + carousel_vertical_scroll_ondrag: false //vertical screen scroll on carousel drag + }; + + this.events = { + START_PLAY: "carousel_start_play", + PAUSE_PLAY: "carousel_pause_play", + STOP_PLAY: "carousel_stop_play" + }; + + var g_temp = { + eventSizeChange: "thumb_size_change", + isFirstTimeRun:true, //if run once + carouselMaxWidth: null, + tileWidth:0, + initTileWidth:0, + initTileHeight:0, + sideSpace:1500, //the space that must be filled with items + spaceActionSize:500, + numCurrent:0, + touchActive: false, + startInnerPos: 0, + lastTime:0, + startTime:0, + startMousePos:0, + lastMousePos:0, + scrollShortDuration: 200, + scrollShortEasing: "easeOutQuad", + handle:null, + isPlayMode: false, + isPaused: false, + storedEventID: "carousel" + }; + + + function __________GENERAL_________(){}; + + /** + * init the gallery + */ + function init(gallery, customOptions){ + + g_objects = gallery.getObjects(); + g_gallery = gallery; + g_objGallery = jQuery(gallery); + g_objWrapper = g_objects.g_objWrapper; + g_arrItems = g_objects.g_arrItems; + + g_options = jQuery.extend(g_options, customOptions); + + g_objTileDesign.setFixedMode(); + g_objTileDesign.setApproveClickFunction(isApproveTileClick); + g_objTileDesign.init(gallery, g_options); + + g_thumbs = g_objTileDesign.getObjThumbs(); + g_options = g_objTileDesign.getOptions(); + + g_temp.initTileWidth = g_options.tile_width; + g_temp.initTileHeight = g_options.tile_height; + + g_temp.tileWidth = g_options.tile_width; + } + + + /** + * set the grid panel html + */ + function setHtml(objParent){ + + if(!objParent) + var objParent = g_objWrapper; + + var html = "<div class='ug-carousel-wrapper'><div class='ug-carousel-inner'></div></div>"; + g_objWrapper.append(html); + + g_objCarouselWrapper = g_objWrapper.children(".ug-carousel-wrapper"); + g_objInner = g_objCarouselWrapper.children(".ug-carousel-inner"); + + g_objTileDesign.setHtml(g_objInner); + + g_thumbs.getThumbs().fadeTo(0,1); + + } + + + /** + * resize tiles to new width / height + */ + function resizeTiles(newTileWidth, newTileHeight){ + + if(!newTileHeight){ + + var newTileHeight = g_temp.initTileHeight / g_temp.initTileWidth * newTileWidth; + + } + + g_temp.tileWidth = newTileWidth; + + //update all options + var optUpdate = { + tile_width: newTileWidth, + tile_height: newTileHeight + }; + + g_objTileDesign.setOptions(optUpdate); + + g_options.tile_width = newTileWidth; + g_options.tile_height = newTileHeight; + + //resize all tiles + g_objTileDesign.resizeAllTiles(newTileWidth); + + //reposition tiles + positionTiles(true); //must to position tiles right after size change, for inner size change + } + + /** + * run the gallery after init and set html + */ + function run(){ + + //validation + if(g_temp.carouselMaxWidth === null){ + throw new Error("The carousel width not set"); + return(false); + } + + //if the size changed, change it anyway + if(g_temp.tileWidth < g_temp.initTileWidth){ + + var newTileWidth = g_temp.carouselMaxWidth - g_options.carousel_padding * 2; + if(newTileWidth > g_temp.initTileWidth) + newTileWidth = g_temp.initTileWidth; + + resizeTiles(newTileWidth); + + var numTiles = g_functions.getNumItemsInSpace(g_temp.carouselMaxWidth, newTileWidth, g_options.carousel_space_between_tiles); + + }else{ + + //check if need to lower tiles size + var numTiles = g_functions.getNumItemsInSpace(g_temp.carouselMaxWidth, g_temp.tileWidth, g_options.carousel_space_between_tiles); + + //if no tiles fit, resize the tiles + if(numTiles <= 0){ + numTiles = 1; + + var newTileWidth = g_temp.carouselMaxWidth - g_options.carousel_padding * 2; + + resizeTiles(newTileWidth); + } + + } + + //set wrapper width + var realWidth = g_functions.getSpaceByNumItems(numTiles, g_temp.tileWidth, g_options.carousel_space_between_tiles); + realWidth += g_options.carousel_padding * 2; + + g_objCarouselWrapper.width(realWidth); + + if(g_temp.isFirstTimeRun == true){ + + initEvents(); + + g_objTileDesign.run(); + + //set data indexes to tiles + jQuery.each(g_arrItems, function(index, item){ + item.objThumbWrapper.data("index", index); + + g_objWrapper.trigger(g_temp.eventSizeChange, [item.objThumbWrapper,true]); + item.objTileOriginal = item.objThumbWrapper.clone(true, true); + }); + + positionTiles(true); //set heights at first time + + if(g_options.carousel_autoplay == true) + t.startAutoplay(); + }else{ + + if(g_options.carousel_autoplay == true) + t.pauseAutoplay(); + + scrollToTile(0, false); + + if(g_options.carousel_autoplay == true) + t.startAutoplay(); + } + + positionElements(); + + g_temp.isFirstTimeRun = false; + } + + + + function __________GETTERS_______(){}; + + /** + * get inner position + */ + function getInnerPos(){ + return g_functions.getElementSize(g_objInner).left; + } + + /** + * get mouse position + */ + function getMousePos(event){ + return g_functions.getMousePosition(event).pageX; + } + + + /** + * get all tiles + */ + function getTiles(){ + + var objTiles = g_objInner.children(".ug-thumb-wrapper"); + + return(objTiles); + } + + + /** + * get num tiles in some space + */ + function getNumTilesInSpace(space){ + + var numItems = g_functions.getNumItemsInSpace(space, g_temp.tileWidth, g_options.carousel_space_between_tiles) + + return(numItems); + } + + + /** + * get num tiles + */ + function getNumTiles(){ + return getTiles().length; + } + + + /** + * get tile + */ + function getTile(numTile){ + validateTileNum(numTile); + var objTiles = getTiles(); + var objTile = jQuery(objTiles[numTile]); + + return(objTile); + } + + + /** + * get first tile in the inner object + */ + function getFirstTile(){ + + return g_objInner.children(".ug-thumb-wrapper").first(); + } + + /** + * get last tile in the inner object + */ + function getLastTile(){ + + return g_objInner.children(".ug-thumb-wrapper").last(); + } + + + + /** + * get clone of the time next or prev the given + */ + function getTileClones(objTile, numClones, dir){ + + var index = objTile.data("index"); + if(index == undefined){ + throw new Error("every tile should have index!"); + } + + var arrClonedItems = []; + + for(var i=0;i<numClones;i++){ + + if(dir == "prev") + var itemToAdd = g_gallery.getPrevItem(index, true); + else + var itemToAdd = g_gallery.getNextItem(index, true); + + if(!itemToAdd){ + throw new Error("the item to add is empty"); + } + + var clonedTile = itemToAdd.objTileOriginal.clone(true, true); + + + index = itemToAdd.index; + + clonedTile.addClass("cloned"); + arrClonedItems.push(clonedTile); + } + + return(arrClonedItems); + } + + + /** + * get space left from the right + */ + function getRemainSpaceRight(){ + var wrapperSize = g_functions.getElementSize(g_objCarouselWrapper); + var innerSize = g_functions.getElementSize(g_objInner); + + var spaceTaken = innerSize.width - wrapperSize.width + innerSize.left; + var spaceRemain = g_temp.sideSpace - spaceTaken; + + return(spaceRemain); + } + + + /** + * get remain space on the left + */ + function getRemainSpaceLeft(){ + var spaceTaken = -getInnerPos(); + var spaceRemain = g_temp.sideSpace - spaceTaken; + return(spaceRemain); + } + + /** + * get carousel width + */ + function getCarouselWidth(){ + + var objSize = g_functions.getElementSize(g_objCarouselWrapper); + return(objSize.width); + } + + /** + * get num tiles in the carousel + */ + function getNumTilesInCarousel(){ + + var width = getCarouselWidth(); + + var numTiles = getNumTilesInSpace(width); + + return(numTiles); + } + + + function __________OTHER_METHODS_______(){}; + + + /** + * position existing tiles + */ + function positionTiles(setHeight){ + + if(!setHeight) + var setHeight = false; + + var objTiles = getTiles(); + + var posx = 0; + var maxHeight = 0, totalWidth; + + jQuery.each(objTiles, function(index, objTile){ + objTile = jQuery(objTile); + g_functions.placeElement(objTile, posx, 0); + var tileSize = g_functions.getElementSize(objTile); + posx += tileSize.width + g_options.carousel_space_between_tiles; + maxHeight = Math.max(maxHeight, tileSize.height); + if(index == (objTiles.length-1)) + totalWidth = tileSize.right; + }); + + //set heights and widths + g_objInner.width(totalWidth); + + maxHeight += g_options.carousel_padding * 2; + + if(setHeight === true){ + g_objInner.height(maxHeight); + g_objCarouselWrapper.height(maxHeight); + } + + scrollToTile(g_temp.numCurrent, false); + + return(totalWidth); + } + + + /** + * validate that the num not more then num tiles + */ + function validateTileNum(numTile){ + + if(numTile > (getTiles().length-1)) + throw new Error("Wrogn tile number: " + numTile); + } + + + /** + * add tile to left + */ + function addTiles(numTiles, dir){ + + if(dir == "left") + var anchorTile = getFirstTile(); + else + var anchorTile = getLastTile(); + + var clonesType = (dir == "left")?"prev":"next"; + + var arrNewTiles = getTileClones(anchorTile, numTiles, clonesType); + + jQuery.each(arrNewTiles, function(index, objTile){ + + if(dir == "left") + g_objInner.prepend(objTile); + else + g_objInner.append(objTile); + + g_objWrapper.trigger(g_temp.eventSizeChange, objTile); + g_objTileDesign.loadTileImage(objTile); + + }); + + + } + + /** + * remove some tiles + */ + function removeTiles(numTilesToRemove, direction){ + + validateTileNum(numTiles); + + var arrTiles = getTiles(); + var numTiles = arrTiles.length; + + for(var i=0; i<numTilesToRemove; i++){ + + if(direction == "left") + jQuery(arrTiles[i]).remove(); + else{ + jQuery(arrTiles[numTiles-1-i]).remove(); + } + } + } + + + /** + * set inner strip position + */ + function setInnerPos(pos){ + var objCss = { + "left":pos+"px" + }; + + g_objInner.css(objCss); + } + + + /** + * scroll to tile by number + */ + function scrollToTile(numTile, isAnimation, isShort){ + + if(isAnimation === undefined){ + var isAnimation = true; + if(g_objInner.is(":animated")) + return(true); + } + + var objTile = getTile(numTile); + var objSize = g_functions.getElementSize(objTile); + var posScroll = -objSize.left + g_options.carousel_padding; + + var objCss = { + "left":posScroll+"px" + }; + + if(isAnimation === true){ + + var duration = g_options.carousel_scroll_duration; + var easing = g_options.carousel_scroll_easing; + + if(isShort === true){ + duration = g_temp.scrollShortDuration; + easing = g_temp.scrollShortEasing; + } + + g_objInner.stop(true).animate(objCss ,{ + duration: duration, + easing: easing, + queue: false, + //progress:function(){t.triggerStripMoveEvent()}, + complete: function(){ + g_temp.numCurrent = numTile; + + fillSidesWithTiles(true); + } + }); + + }else{ + g_temp.numCurrent = numTile; + + g_objInner.css(objCss); + } + + } + + + /** + * get number of neerest tile + */ + function getNeerestTileNum(){ + var innerPos = -getInnerPos(); + var numTiles = getNumTilesInSpace(innerPos); + var tile1Pos = g_functions.getElementSize(getTile(numTiles)).left; + var tile2Pos = g_functions.getElementSize(getTile(numTiles+1)).left; + + if(Math.abs(tile1Pos - innerPos) < Math.abs(tile2Pos - innerPos)) + return(numTiles); + else + return(numTiles+1); + } + + + /** + * get neerest tile to inner position + */ + function scrollToNeerestTile(){ + + var tileNum = getNeerestTileNum(); + scrollToTile(tileNum, true, true); + } + + + /** + * fill the sides with tiles till it fil the sideSpace + */ + function fillSidesWithTiles(){ + + var spaceLeft = getRemainSpaceLeft(); + var spaceRight = getRemainSpaceRight(); + + var numItemsLeft = 0, numItemsRight = 0, numItemsRemoveLeft = 0, numItemsRemoveRight = 0; + + //trace("left: " + spaceLeft+ " right: " + spaceRight); + + var numTiles = getNumTiles(); + + //add tiles to left + if(spaceLeft > g_temp.spaceActionSize){ + numItemsLeft = getNumTilesInSpace(spaceLeft); + addTiles(numItemsLeft, "left"); + + g_temp.numCurrent += numItemsLeft; + + }else if(spaceLeft < -g_temp.spaceActionSize){ + var numItemsRemoveLeft = getNumTilesInSpace(Math.abs(spaceLeft)); + removeTiles(numItemsRemoveLeft, "left"); + g_temp.numCurrent -= numItemsRemoveLeft; + } + + //add tiles to right + if(spaceRight > g_temp.spaceActionSize){ + numItemsRight = getNumTilesInSpace(spaceRight); + addTiles(numItemsRight, "right"); + }else if(spaceRight < -g_temp.spaceActionSize){ + numItemsRemoveRight = getNumTilesInSpace(Math.abs(spaceRight)); + removeTiles(numItemsRemoveRight, "right"); + } + + + //small validation + if(numItemsRemoveRight > numTiles){ + + throw new Error("Can't remove more then num tiles"); + } + + //trace(numItemsRemoveRight); + //trace("numItems: " + getNumTiles()); + + //scroll to tile and position inner object + var isPositioned = false; + if(numItemsLeft || numItemsRight || numItemsRemoveLeft || numItemsRemoveRight){ + + /* + debugLine({ + numItemsLeft:numItemsLeft, + numItemsRight:numItemsRight, + numItemsRemoveLeft:numItemsRemoveLeft, + numItemsRemoveRight: numItemsRemoveRight + }); + */ + //trace("do something"); + + positionTiles(); + isPositioned = true + } + + return(isPositioned); + } + + + /** + * position tiles + */ + function positionElements(isFirstTime){ + + //position inner strip + g_functions.placeElement(g_objInner, 0, g_options.carousel_padding); + + //position sides + fillSidesWithTiles(); + + } + + + + function __________AUTOPLAY_______(){}; + + /** + * start autoplay + */ + this.startAutoplay = function(){ + + g_temp.isPlayMode = true; + g_temp.isPaused = false; + + g_objThis.trigger(t.events.START_PLAY); + + if(g_temp.handle) + clearInterval(g_temp.handle); + + g_temp.handle = setInterval(autoplayStep, g_options.carousel_autoplay_timeout); + + } + + + /** + * unpause autoplay after pause + */ + this.unpauseAutoplay = function(){ + + if(g_temp.isPlayMode == false) + return(true); + + if(g_temp.isPaused == false) + return(true); + + t.startAutoplay(); + } + + + /** + * pause the autoplay + */ + this.pauseAutoplay = function(){ + + if(g_temp.isPlayMode == false) + return(true); + + g_temp.isPaused = true; + + if(g_temp.handle) + clearInterval(g_temp.handle); + + g_objThis.trigger(t.events.PAUSE_PLAY); + + } + + + /** + * stop autoplay + */ + this.stopAutoplay = function(){ + + if(g_temp.isPlayMode == false) + return(true); + + g_temp.isPaused = false; + g_temp.isPlayMode = false; + + if(g_temp.handle) + clearInterval(g_temp.handle); + + g_objThis.trigger(t.events.STOP_PLAY); + } + + + /** + * autoplay step, advance the carousel by 1 + */ + function autoplayStep(){ + + if(g_options.carousel_autoplay_direction == "left"){ + t.scrollRight(1); + }else{ + t.scrollLeft(1); + } + + } + + function __________EVENTS_______(){}; + + + /** + * on touch start + */ + function onTouchStart(event){ + + if(g_temp.touchActive == true) + return(true); + + g_temp.touchActive = true; + + t.pauseAutoplay(); + + g_temp.startTime = jQuery.now(); + g_temp.startMousePos = getMousePos(event); + g_temp.startInnerPos = getInnerPos(); + g_temp.lastTime = g_temp.startTime; + g_temp.lastMousePos = g_temp.startMousePos; + + g_functions.storeEventData(event, g_temp.storedEventID); + } + + + /** + * on touch move + */ + function onTouchMove(event){ + + if(g_temp.touchActive == false) + return(true); + + g_functions.updateStoredEventData(event, g_temp.storedEventID); + + event.preventDefault(); + + var scrollDir = null; + + if(g_options.carousel_vertical_scroll_ondrag == true) + scrollDir = g_functions.handleScrollTop(g_temp.storedEventID); + + if(scrollDir === "vert") + return(true); + + g_temp.lastMousePos = getMousePos(event); + + var diff = g_temp.lastMousePos - g_temp.startMousePos; + var innerPos = g_temp.startInnerPos + diff; + var direction = (diff > 0) ? "prev":"next"; + var innerSize = g_functions.getElementSize(g_objInner).width; + + //slow down when off limits + if(innerPos > 0 && direction == "prev"){ + innerPos = innerPos / 3; + } + + if(innerPos < -innerSize && direction == "next"){ + innerPos = g_temp.startInnerPos + diff / 3; + } + + setInnerPos(innerPos); + } + + + /** + * on touch end + * change panes or return to current pane + */ + function onTouchEnd(event){ + + if(g_temp.touchActive == false) + return(true); + + //event.preventDefault(); + g_temp.touchActive = false; + + scrollToNeerestTile(); + + t.unpauseAutoplay(); + } + + /** + * pause the playing + */ + function onMouseEnter(event){ + + if(g_options.carousel_autoplay_pause_onhover == false) + return(true); + + if(g_temp.isPlayMode == true && g_temp.isPaused == false) + t.pauseAutoplay(); + } + + /** + * start the playing again + */ + function onMouseLeave(event){ + + if(g_options.carousel_autoplay_pause_onhover == false) + return(true); + + t.unpauseAutoplay(); + } + + + /** + * init panel events + */ + function initEvents(){ + + g_objTileDesign.initEvents(); + + //touch drag events + //slider mouse down - drag start + g_objCarouselWrapper.bind("mousedown touchstart",onTouchStart); + + //on body move + jQuery("body").bind("mousemove touchmove",onTouchMove); + + //on body mouse up - drag end + jQuery(window).add("body").bind("mouseup touchend", onTouchEnd); + + g_objCarouselWrapper.hover(onMouseEnter, onMouseLeave); + + } + + + /** + * destroy the carousel events + */ + this.destroy = function(){ + + if(g_temp.handle) + clearInterval(g_temp.handle); + + g_objThis.off(t.events.START_PLAY); + g_objThis.off(t.events.STOP_PLAY); + + //touch drag events + //slider mouse down - drag start + g_objCarouselWrapper.unbind("mousedown"); + g_objCarouselWrapper.unbind("touchstart"); + + //on body move + jQuery("body").unbind("mousemove"); + jQuery("body").unbind("touchmove"); + + //on body mouse up - drag end + jQuery(window).add("body").unbind("mouseup").unbind("touchend"); + + g_objCarouselWrapper.off("mouseenter").off("mouseleave"); + + g_objTileDesign.destroy(); + } + + + /** + * init function for avia controls + */ + this.init = function(gallery, customOptions, width){ + if(width) + this.setMaxWidth(width); + + init(gallery, customOptions); + } + + + /** + * set the width + */ + this.setMaxWidth = function(width){ + + g_temp.carouselMaxWidth = width; + } + + + /** + * set html + */ + this.setHtml = function(objParent){ + setHtml(objParent); + } + + /** + * get the carousel element + */ + this.getElement = function(){ + return g_objCarouselWrapper; + } + + /** + * get tile design object + */ + this.getObjTileDesign = function(){ + return(g_objTileDesign); + } + + + /** + * get estimated height + */ + this.getEstimatedHeight = function(){ + var height = g_options.tile_height + g_options.carousel_padding * 2; + return(height); + } + + + /** + * set html and properties + */ + this.run = function(){ + run(); + } + + + /** + * scroll to right + */ + this.scrollRight = function(tilesToScroll){ + + if(!tilesToScroll || typeof tilesToScroll == "object") + var tilesToScroll = g_options.carousel_navigation_numtiles; + + var numTilesInCarousel = getNumTilesInCarousel(); + if(tilesToScroll > numTilesInCarousel) + tilesToScroll = numTilesInCarousel; + + var numPrev = g_temp.numCurrent - tilesToScroll; + if(numPrev <=0) + numPrev = 0; + + scrollToTile(numPrev); + } + + + /** + * scroll to left + */ + this.scrollLeft = function(tilesToScroll){ + + if(!tilesToScroll || typeof tilesToScroll == "object") + var tilesToScroll = g_options.carousel_navigation_numtiles; + + var numTilesInCarousel = getNumTilesInCarousel(); + if(tilesToScroll > numTilesInCarousel) + tilesToScroll = numTilesInCarousel; + + var numTiles = getNumTiles(); + + var numNext = g_temp.numCurrent + tilesToScroll; + if(numNext >= numTiles) + numNext = numTiles-1; + + scrollToTile(numNext); + } + + /** + * set scroll left button + */ + this.setScrollLeftButton = function(objButton){ + g_functions.setButtonMobileReady(objButton); + g_functions.setButtonOnClick(objButton, t.scrollLeft); + } + + + /** + * set scroll right button + */ + this.setScrollRightButton = function(objButton){ + g_functions.setButtonMobileReady(objButton); + g_functions.setButtonOnClick(objButton, t.scrollRight); + } + + + /** + * set scroll right button + */ + this.setPlayPauseButton = function(objButton){ + g_functions.setButtonMobileReady(objButton); + + if(g_temp.isPlayMode == true && g_temp.isPaused == false){ + objButton.addClass("ug-pause-icon"); + } + + g_objThis.on(t.events.START_PLAY, function(){ + objButton.addClass("ug-pause-icon"); + }); + + g_objThis.on(t.events.STOP_PLAY, function(){ + objButton.removeClass("ug-pause-icon"); + }); + + g_functions.setButtonOnClick(objButton, function(){ + + if(g_temp.isPlayMode == false || g_temp.isPaused == true) + t.startAutoplay(); + else + t.stopAutoplay(); + + }); + } + + + /** + * return if passed some significant movement + */ + function isApproveTileClick(){ + + var passedTime = g_temp.lastTime - g_temp.startTime; + var passedDistanceAbs = Math.abs(g_temp.lastMousePos - g_temp.startMousePos); + + if(passedTime > 300) + return(false); + + if(passedDistanceAbs > 30) + return(false); + + return(true); + } + + +} + + + +/** + tabs panel class addon to unite gallery + */ +function UGTabs(){ + + var t = this, g_objThis = jQuery(this),g_objGallery; + var g_gallery = new UniteGalleryMain(), g_functions = new UGFunctions(); + var g_objTabs, g_objSelect; + + + var g_options = { + tabs_type:"tabs", //tabs type: tabs, select + tabs_container: "#ug_tabs", //tabs container + tabs_class_selected: "ug-tab-selected" + }; + + this.events = { + + }; + + + /** + * init tabs function + */ + function initTabs(gallery, customOptions){ + g_gallery = gallery; + + g_objGallery = jQuery(g_gallery); + + g_options = jQuery.extend(g_options, customOptions); + + if(g_options.tabs_type == "select") + g_objSelect = jQuery(g_options.tabs_container); + else + g_objTabs = jQuery(g_options.tabs_container + " .ug-tab"); + + } + + + + /** + * run the tabs + */ + function runTabs(){ + + initEvents(); + } + + + /** + * request new gallery items + */ + function requestGalleryItems(catid){ + + g_gallery.requestNewItems(catid); + + } + + + /** + * on tab click + */ + function onTabClick(){ + + var classSelected = g_options.tabs_class_selected; + + var objTab = jQuery(this); + if(objTab.hasClass(classSelected)) + return(true); + + g_objTabs.not(objTab).removeClass(classSelected); + objTab.addClass(classSelected); + + var catID = objTab.data("catid"); + if(!catID) + return(true); + + requestGalleryItems(catID); + + } + + + /** + * on select change + */ + function onSelectChange(){ + var objSelect = jQuery(this); + var catID = objSelect.val(); + + if(!catID) + return(true); + + requestGalleryItems(catID); + } + + + /** + * init tabs events + */ + function initEvents(){ + + if(g_options.tabs_type == "select") + g_objSelect.change(onSelectChange); + else + g_objTabs.click(onTabClick); + } + + /** + * destroy + */ + this.destroy = function(){ + + if(g_objSelect) + g_objSelect.off("change"); + + if(g_objTabs) + g_objTabs.off("click"); + } + + + /** + * outer init function, move to inner init + */ + this.init = function(gallery, customOptions){ + initTabs(gallery, customOptions); + } + + + /** + * run the tabs + */ + this.run = function(){ + + runTabs(); + } + + +} + + +/** + * API Class + * addon to Unite gallery + */ +function UG_API(gallery){ + + var t = this, g_objThis = jQuery(t); + var g_gallery = new UniteGalleryMain(), g_objGallery; + var g_arrEvents = []; + + g_gallery = gallery; + g_objGallery = jQuery(gallery); + + + this.events = { + API_INIT_FUNCTIONS:"api_init", + API_ON_EVENT:"api_on_event" + } + + + /** + * get item data for output + */ + function convertItemDataForOutput(item){ + + var output = { + index: item.index, + title: item.title, + description: item.description, + urlImage: item.urlImage, + urlThumb: item.urlThumb + }; + + //add aditional variables to the output + var addData = item.objThumbImage.data(); + + for(var key in addData){ + switch(key){ + case "image": + case "description": + continue; + break; + } + output[key] = addData[key]; + } + + return(output); + } + + + /** + * event handling function + */ + this.on = function(event, handlerFunction, notCache){ + + //remember cache + if(notCache !== true){ + g_arrEvents.push({event:event,func:handlerFunction}); + } + + switch(event){ + case "item_change": + + g_objGallery.on(g_gallery.events.ITEM_CHANGE, function(){ + var currentItem = g_gallery.getSelectedItem(); + var output = convertItemDataForOutput(currentItem); + handlerFunction(output.index, output); + }); + + break; + case "resize": + g_objGallery.on(g_gallery.events.SIZE_CHANGE, handlerFunction); + break; + case "enter_fullscreen": + g_objGallery.on(g_gallery.events.ENTER_FULLSCREEN, handlerFunction); + break; + case "exit_fullscreen": + g_objGallery.on(g_gallery.events.EXIT_FULLSCREEN, handlerFunction); + break; + case "play": + g_objGallery.on(g_gallery.events.START_PLAY, handlerFunction); + break; + case "stop": + g_objGallery.on(g_gallery.events.STOP_PLAY, handlerFunction); + break; + case "pause": + g_objGallery.on(g_gallery.events.PAUSE_PLAYING, handlerFunction); + break; + case "continue": + g_objGallery.on(g_gallery.events.CONTINUE_PLAYING, handlerFunction); + break; + case "open_lightbox": + g_objGallery.on(g_gallery.events.OPEN_LIGHTBOX, handlerFunction); + break; + case "close_lightbox": + g_objGallery.on(g_gallery.events.CLOSE_LIGHTBOX, handlerFunction); + break; + default: + if(console) + console.log("wrong api event: " + event); + break; + } + + g_objGallery.trigger(t.events.API_ON_EVENT, [event, handlerFunction]); + } + + + /** + * start playing + */ + this.play = function(){ + g_gallery.startPlayMode(); + } + + + /** + * stop playing + */ + this.stop = function(){ + g_gallery.stopPlayMode(); + } + + + /** + * toggle playing + */ + this.togglePlay = function(){ + g_gallery.togglePlayMode(); + } + + + /** + * enter fullscreen + */ + this.enterFullscreen = function(){ + g_gallery.toFullScreen(); + } + + /** + * exit fullscreen + */ + this.exitFullscreen = function(){ + g_gallery.exitFullScreen(); + } + + /** + * toggle fullscreen + */ + this.toggleFullscreen = function(){ + + g_gallery.toggleFullscreen(); + } + + + /** + * reset zoom + */ + this.resetZoom = function(){ + var objSlider = g_gallery.getObjSlider(); + if(!objSlider) + return(false); + + objSlider.zoomBack(); + } + + + /** + * zoom in + */ + this.zoomIn = function(){ + + var objSlider = g_gallery.getObjSlider(); + if(!objSlider) + return(false); + + objSlider.zoomIn(); + } + + /** + * zoom in + */ + this.zoomOut = function(){ + + var objSlider = g_gallery.getObjSlider(); + if(!objSlider) + return(false); + + objSlider.zoomOut(); + } + + /** + * next item + */ + this.nextItem = function(){ + g_gallery.nextItem(); + } + + + /** + * prev item + */ + this.prevItem = function(){ + g_gallery.prevItem(); + } + + /** + * go to some item by index (0-numItems) + */ + this.selectItem = function(numItem){ + + g_gallery.selectItem(numItem); + + } + + + /** + * resize the gallery to some width (height). + */ + this.resize = function(width, height){ + + if(height) + g_gallery.resize(width, height); + else + g_gallery.resize(width); + } + + + /** + * get some item by index + */ + this.getItem = function(numItem){ + + var data = g_gallery.getItem(numItem); + var output = convertItemDataForOutput(data); + + return(output); + } + + + /** + * get number of items in the gallery + */ + this.getNumItems = function(){ + var numItems = g_gallery.getNumItems(); + return(numItems); + } + + /** + * refresh gallery with another options + */ + this.reloadGallery = function(customOptions){ + if(!customOptions) + var customOptions = {}; + + g_gallery.run(null, customOptions); + + //restore events: + g_arrEvents.map(function(obj){ + t.on(obj.event,obj.func,true); + }); + + } + + + /** + * destroy the gallery + */ + this.destroy = function(){ + g_gallery.destroy(); + } + + //trigger api on init event + g_objGallery.trigger(t.events.API_INIT_FUNCTIONS, t); + +} + diff --git a/plugins/unitegallery/vendor/unitegallery/js/unitegallery.min.js b/plugins/unitegallery/vendor/unitegallery/js/unitegallery.min.js new file mode 100644 index 0000000000000000000000000000000000000000..3f7f80eef51192f179805bf0ca888b868ffeec04 --- /dev/null +++ b/plugins/unitegallery/vendor/unitegallery/js/unitegallery.min.js @@ -0,0 +1,10 @@ +// Unite Gallery, Version: 1.7.40, released 29 Nov 2016 + +function debugLine(e,t,i){e===!0&&(e="true"),e===!1&&(e="false");var n=e;if("object"==typeof e){n="";for(name in e){var r=e[name];n+=" "+name+": "+r}}if(1!=t||i||(n+=" "+Math.random()),1==i){var o=jQuery("#debug_line");o.width(200),o.height()>=500&&o.html("");var a=o.html();n=a+"<br> -------------- <br>"+n}jQuery("#debug_line").show().html(n)}function debugSide(e){var t="";for(name in e){var i=e[name];t+=name+" : "+i+"<br>"}jQuery("#debug_side").show().html(t)}function trace(e){"undefined"!=typeof console&&console.log(e)}function UGFunctions(){function e(e,t,i){t.addEventListener?t.addEventListener(e,i,!1):t.attachEvent?t.attachEvent("on"+e,i):t[e]=i}var t=null,i=this,n={starTime:0,arrThemes:[],isTouchDevice:-1,isRgbaSupported:-1,timeCache:{},dataCache:{},lastEventType:"",lastEventTime:0,handle:null};this.debugVar="",this.z__________FULL_SCREEN___________=function(){},this.toFullscreen=function(e,t){if(e.requestFullscreen)e.requestFullscreen();else if(e.mozRequestFullScreen)e.mozRequestFullScreen();else if(e.webkitRequestFullscreen)e.webkitRequestFullscreen();else{if(!e.msRequestFullscreen)return!1;e.msRequestFullscreen()}return!0},this.exitFullscreen=function(){if(0==i.isFullScreen())return!1;if(document.exitFullscreen)document.exitFullscreen();else if(document.cancelFullScreen)document.cancelFullScreen();else if(document.mozCancelFullScreen)document.mozCancelFullScreen();else if(document.webkitExitFullscreen)document.webkitExitFullscreen();else{if(!document.msExitFullscreen)return!1;document.msExitFullscreen()}return!0},this.addFullScreenChangeEvent=function(t){document.webkitCancelFullScreen?e("webkitfullscreenchange",document,t):document.msExitFullscreen?e("MSFullscreenChange",document,t):document.mozCancelFullScreen?e("mozfullscreenchange",document,t):e("fullscreenchange",document,t)},this.destroyFullScreenChangeEvent=function(){jQuery(document).unbind("fullscreenChange"),jQuery(document).unbind("mozfullscreenchange"),jQuery(document).unbind("webkitfullscreenchange"),jQuery(document).unbind("MSFullscreenChange")},this.getFullScreenElement=function(){var e=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;return e},this.isFullScreen=function(){var e=document.fullscreen||document.mozFullScreen||document.webkitIsFullScreen||document.msFullscreenElement;return e=e?!0:!1},this.z__________GET_PROPS___________=function(){},this.getBrowserPrefix=function(){if(null!==t)return t;var e=["webkit","Moz","ms","O"],i=document.createElement("div");for(var n in e){var r=e[n];if(r+"Transform"in i.style)return r=r.toLowerCase(),t=r,r}return t="",""},this.getImageInsideParentDataByImage=function(e,t,n){var r=e.parent(),o=i.getImageOriginalSize(e),a=i.getImageInsideParentData(r,o.width,o.height,t,n);return a},this.getImageInsideParentData=function(e,t,i,n,r,o,a){if(!r)var r={};var s={};if("undefined"==typeof o)var o=e.width();if("undefined"==typeof a)var a=e.height();r.padding_left&&(o-=r.padding_left),r.padding_right&&(o-=r.padding_right),r.padding_top&&(a-=r.padding_top),r.padding_bottom&&(a-=r.padding_bottom);var l=null,u="100%",d=null,_=null,g="display:block;margin:0px auto;";if(t>0&&i>0){if("down"==n&&o>t&&a>i)u=i,l=t,_=(o-l)/2,d=(a-u)/2;else if("fill"==n){var c=t/i;u=a,l=u*c,o>l?(l=o,u=l/c,_=0,d=Math.round((u-a)/2*-1)):(d=0,_=Math.round((l-o)/2*-1))}else{var c=t/i;u=a,l=u*c,d=0,_=(o-l)/2,"fitvert"!=n&&l>o&&(l=o,u=l/c,_=0,d=(a-u)/2)}l=Math.floor(l),u=Math.floor(u),d=Math.floor(d),_=Math.floor(_),g="position:absolute;"}return r.padding_top&&(d+=r.padding_top),r.padding_left&&(_+=r.padding_left),s.imageWidth=l,s.imageHeight=u,s.imageTop=d,s.imageLeft=_,s.imageRight=_+l,0==d||"100%"==u?s.imageBottom=null:s.imageBottom=d+u,s.style=g,s},this.getElementCenterPosition=function(e,t){var n=e.parent(),r=i.getElementSize(e),o=i.getElementSize(n),a=o.width,s=o.height;t&&void 0!==t.padding_top&&(s-=t.padding_top),t&&void 0!==t.padding_bottom&&(s-=t.padding_bottom),t&&void 0!==t.padding_left&&(a-=t.padding_left),t&&void 0!==t.padding_right&&(a-=t.padding_right);var l={};return l.left=Math.round((a-r.width)/2),l.top=Math.round((s-r.height)/2),t&&void 0!==t.padding_top&&(l.top+=t.padding_top),t&&void 0!==t.padding_left&&(l.left+=t.padding_left),l},this.getElementCenterPoint=function(e,t){if(!t)var t=!1;var n=i.getElementSize(e),r={};return r.x=n.width/2,r.y=n.height/2,1==t&&(r.x+=n.left,r.y+=n.top),r.x=Math.round(r.x),r.y=Math.round(r.y),r},this.getMousePosition=function(e,t){var i={pageX:e.pageX,pageY:e.pageY,clientX:e.clientX,clientY:e.clientY};if(e.originalEvent&&e.originalEvent.touches&&e.originalEvent.touches.length>0&&(i.pageX=e.originalEvent.touches[0].pageX,i.pageY=e.originalEvent.touches[0].pageY,i.clientX=e.originalEvent.touches[0].clientX,i.clientY=e.originalEvent.touches[0].clientY),t){var n=t.offset();i.mouseX=i.pageX-n.left,i.mouseY=i.pageY-n.top}return i},this.getMouseElementPoint=function(e,t){var n={x:e.pageX,y:e.pageY},r=i.getElementLocalPoint(n,t);return r},this.getElementLocalPoint=function(e,t){var i={},n=t.offset();return i.x=Math.round(e.x-n.left),i.y=Math.round(e.y-n.top),i},this.getImageOriginalSize=function(e,t,i){if("undefined"!=typeof t&&"undefined"!=typeof i)return{width:t,height:i};var n=e[0];if("undefined"==typeof n)throw new Error("getImageOriginalSize error - Image not found");var r={};if("undefined"==typeof n.naturalWidth){if("number"==typeof e.data("naturalWidth")){var r={};return r.width=e.data("naturalWidth"),r.height=e.data("naturalHeight"),r}var o=new Image;return o.src=n.src,o.complete?(r.width=o.width,r.height=o.height,e.data("naturalWidth",r.width),e.data("naturalHeight",r.height),r):{width:0,height:0}}return r.width=n.naturalWidth,r.height=n.naturalHeight,r},this.getimageRatio=function(e){var t=i.getImageOriginalSize(e),n=i.getElementSize(e),r=n.width/t.width;return r},this.isImageFitParent=function(e){var t=e.parent(),n=i.getElementSize(e),r=i.getElementSize(t);return n.width<=r.width&&n.height<=r.height?!0:!1},this.getElementSize=function(e){if(void 0===e)throw new Error("Can't get size, empty element");var t=e.position();return t.height=e.outerHeight(),t.width=e.outerWidth(),t.left=Math.round(t.left),t.top=Math.round(t.top),t.right=t.left+t.width,t.bottom=t.top+t.height,t},this.isElementBiggerThenParent=function(e){var t=e.parent(),n=i.getElementSize(e),r=i.getElementSize(t);return n.width>r.width||n.height>r.height?!0:!1},this.isPointInsideElement=function(e,t){var i=e.x>=0&&e.x<t.width;if(0==i)return!1;var n=e.y>=0&&e.y<t.height;return 0==n?!1:!0},this.getElementRelativePos=function(e,t,n,r){if(!r)var r=e.parent();if("number"==typeof e)var o={width:e,height:e};else var o=i.getElementSize(e);var a=i.getElementSize(r);switch(t){case"top":case"left":t=0,n&&(t+=n);break;case"center":t=Math.round((a.width-o.width)/2),n&&(t+=n);break;case"right":t=a.width-o.width,n&&(t-=n);break;case"middle":t=Math.round((a.height-o.height)/2),n&&(t+=n);break;case"bottom":t=a.height-o.height,n&&(t-=n)}return t},this.z_________SET_ELEMENT_PROPS_______=function(){},this.zoomImageInsideParent=function(e,t,n,r,o,a,s){if(!n)var n=1.2;if(!o)var o="fit";var l,u,d,_,g=n,c=e.parent(),h=i.getElementSize(e),p=i.getImageOriginalSize(e),f=!1,m=0,v=0,b=0,y=0;if(r){var I=i.getMouseElementPoint(r,e);f=i.isPointInsideElement(I,h),b=I.x,y=I.y}else f=!1;if(0==f){var w=i.getElementCenterPoint(e);b=w.x,y=w.y}if(1==t)l=h.height*g,u=h.width*g,0!=b&&(m=-(b*g-b)),0!=y&&(v=-(y*g-y));else{l=h.height/g,u=h.width/g;var E=i.getImageInsideParentData(c,p.width,p.height,o,s);if(u<E.imageWidth)return i.scaleImageFitParent(e,p.width,p.height,o,s),!0;1==f&&(0!=b&&(m=-(b/g-b)),0!=y&&(v=-(y/g-y)))}if(a){var T=1;if(0!=p.width&&(T=u/p.width),T>a)return!1}if(i.setElementSize(e,u,l),0==t&&0==f){var S=i.getElementCenterPosition(e);d=S.left,_=S.top}else d=h.left+m,_=h.top+v;return i.placeElement(e,d,_),!0},this.placeElement=function(e,t,n,r,o,a){if(0==jQuery.isNumeric(t)||0==jQuery.isNumeric(n)){if(!a)var a=e.parent();var s=i.getElementSize(e),l=i.getElementSize(a)}if(0==jQuery.isNumeric(t))switch(t){case"left":t=0,r&&(t+=r);break;case"center":t=Math.round((l.width-s.width)/2),r&&(t+=r);break;case"right":t=l.width-s.width,r&&(t-=r)}if(0==jQuery.isNumeric(n))switch(n){case"top":n=0,o&&(n+=o);break;case"middle":case"center":n=Math.round((l.height-s.height)/2),o&&(n+=o);break;case"bottom":n=l.height-s.height,o&&(n-=o)}var u={position:"absolute",margin:"0px"};null!==t&&(u.left=t),null!==n&&(u.top=n),e.css(u)},this.placeElementInParentCenter=function(e){i.placeElement(e,"center","middle")},this.setElementSizeAndPosition=function(e,t,i,n,r){var o={width:n+"px",height:r+"px",left:t+"px",top:i+"px",position:"absolute",margin:"0px"};e.css(o)},this.setElementSize=function(e,t,i){var n={width:t+"px"};null!==i&&"undefined"!=typeof i&&(n.height=i+"px"),e.css(n)},this.cloneElementSizeAndPos=function(e,t,n,r,o){var a=e.position();if(void 0==a)throw new Error("Can't get size, empty element");n===!0?(a.height=e.outerHeight(),a.width=e.outerWidth()):(a.height=e.height(),a.width=e.width()),a.left=Math.round(a.left),a.top=Math.round(a.top),r&&(a.left+=r),o&&(a.top+=o),i.setElementSizeAndPosition(t,a.left,a.top,a.width,a.height)},this.placeImageInsideParent=function(e,t,n,r,o,a){var s=i.getImageInsideParentData(t,n,r,o,a),l="<img";null!==s.imageWidth&&(l+=" width = '"+s.imageWidth+"'",s.style+="width:"+s.imageWidth+";"),null!=s.imageHeight&&("100%"==s.imageHeight?(l+=" height = '"+s.imageHeight+"'",s.style+="height:"+s.imageHeight+";"):(l+=" height = '"+s.imageHeight+"'",s.style+="height:"+s.imageHeight+"px;")),null!==s.imageTop&&(s.style+="top:"+s.imageTop+"px;"),null!==s.imageLeft&&(s.style+="left:"+s.imageLeft+"px;"),e=i.escapeDoubleSlash(e),l+=" style='"+s.style+"'",l+=' src="'+e+'"',l+=">",t.html(l);var u=t.children("img");return u},this.scaleImageCoverParent=function(e,t,n){if("number"==typeof t)var r=t,o=n;else var r=t.outerWidth(),o=t.outerHeight();var a=i.getImageOriginalSize(e),s=a.width,l=a.height,u=s/l,d=o,_=d*u,g=0,c=0;r>_?(_=r,d=_/u,c=0,g=Math.round((d-o)/2*-1)):(g=0,c=Math.round((_-r)/2*-1)),_=Math.round(_),d=Math.round(d),e.css({width:_+"px",height:d+"px",left:c+"px",top:g+"px"})},this.scaleImageFitParent=function(e,t,n,r,o){var a=e.parent(),s=i.getImageInsideParentData(a,t,n,r,o),l=!1,u={};return null!==s.imageWidth&&(l=!0,e.removeAttr("width"),u.width=s.imageWidth+"px"),null!=s.imageHeight&&(l=!0,e.removeAttr("height"),u.height=s.imageHeight+"px"),null!==s.imageTop&&(l=!0,u.top=s.imageTop+"px"),null!==s.imageLeft&&(l=!0,u.left=s.imageLeft+"px"),1==l&&(u.position="absolute",u.margin="0px 0px",e.css(u)),s},this.scaleImageByHeight=function(e,t,n,r){var o=i.getImageOriginalSize(e,n,r),a=o.width/o.height,s=Math.round(t*a);t=Math.round(t),i.setElementSize(e,s,t)},this.scaleImageByWidth=function(e,t,n,r){var o=i.getImageOriginalSize(e,n,r),a=o.width/o.height,s=Math.round(t/a);t=Math.round(t),i.setElementSize(e,t,s)},this.scaleImageExactSizeInParent=function(e,t,n,r,o,a){var s=e.parent(),l=i.getElementSize(s);l.width<r&&(r=l.width),l.height<o&&(o=l.height);var u=i.getImageInsideParentData(null,t,n,a,null,r,o),d=r,_=o,g=u.imageLeft,c=u.imageLeft,h=u.imageTop,p=u.imageTop,f=Math.round((l.width-r)/2),m=Math.round((l.height-o)/2),v=u.imageWidth+g+c,b=r-v;0!=b&&(c+=b);var y=u.imageHeight+h+p,b=o-y;0!=b&&(p+=b),e.removeAttr("width"),e.removeAttr("height");var I={position:"absolute",margin:"0px 0px"};I.width=d+"px",I.height=_+"px",I.left=f+"px",I.top=m+"px",I["padding-left"]=g+"px",I["padding-top"]=h+"px",I["padding-right"]=c+"px",I["padding-bottom"]=p+"px",e.css(I);var w={};return w.imageWidth=d,w.imageHeight=_,w},this.showElement=function(e,t,i){e.show().fadeTo(0,1),t&&t.show().fadeTo(0,1),i&&i.show().fadeTo(0,1)},this.z_________GALLERY_RELATED_FUNCTIONS_______=function(){},this.disableButton=function(e,t){if(!t)var t="ug-button-disabled";0==i.isButtonDisabled(e,t)&&e.addClass(t)},this.convertCustomPrefixOptions=function(e,t,i){if(!t)return e;var n={};return jQuery.each(e,function(e,r){if(0===e.indexOf(t+"_"+i+"_")){var o=e.replace(t+"_"+i+"_",i+"_");n[o]=r}else n[e]=r}),n},this.enableButton=function(e,t){if(!t)var t="ug-button-disabled";1==i.isButtonDisabled(e,t)&&e.removeClass(t)},this.isButtonDisabled=function(e,t){if(!t)var t="ug-button-disabled";return e.hasClass(t)?!0:!1},this.z_________MATH_FUNCTIONS_______=function(){},this.normalizeSetting=function(e,t,i,n,r,o){if(!o)var o=!1;var a=(r-i)/(n-i);return r=e+(t-e)*a,1==o&&(e>r&&(r=e),r>t&&(r=t)),r},this.getNormalizedValue=function(e,t,i,n,r){var o=(r-e)/(t-e);return r=e+(n-i)*o},this.getDistance=function(e,t,i,n){var r=Math.round(Math.sqrt(Math.abs((i-e)*(i-e)+(n-t)*(n-t))));return r},this.getMiddlePoint=function(e,t,i,n){var r={};return r.x=e+Math.round((i-e)/2),r.y=t+Math.round((n-t)/2),r},this.getNumItemsInSpace=function(e,t,i){var n=Math.floor((e+i)/(t+i));return n},this.getNumItemsInSpaceRound=function(e,t,i){var n=Math.round((e+i)/(t+i));return n},this.getSpaceByNumItems=function(e,t,i){var n=e*t+(e-1)*i;return n},this.getItemSizeInSpace=function(e,t,i){var n=Math.floor((e-(t-1)*i)/t);return n},this.getColX=function(e,t,i){var n=e*(t+i);return n},this.getColByIndex=function(e,t){var i=t%e;return i},this.getColRowByIndex=function(e,t){var i=Math.floor(e/t),n=Math.floor(e%t);return{col:n,row:i}},this.getIndexByRowCol=function(e,t,i){if(0>e)return-1;if(0>t)return-1;var n=e*i+t;return n},this.getPrevRowSameColIndex=function(e,t){var n=i.getColRowByIndex(e,t),r=i.getIndexByRowCol(n.row-1,n.col,t);return r},this.getNextRowSameColIndex=function(e,t){var n=i.getColRowByIndex(e,t),r=i.getIndexByRowCol(n.row+1,n.col,t);return r},this.z_________DATA_FUNCTIONS_______=function(){},this.setGlobalData=function(e,t){jQuery.data(document.body,e,t)},this.getGlobalData=function(e){var t=jQuery.data(document.body,e);return t},this.z_________EVENT_DATA_FUNCTIONS_______=function(){},this.handleScrollTop=function(e){if(0==i.isTouchDevice())return null;var t=i.getStoredEventData(e),r=15,o=15;if(null===t.scrollDir&&(Math.abs(t.diffMouseX)>r?t.scrollDir="hor":Math.abs(t.diffMouseY)>o&&Math.abs(t.diffMouseY)>Math.abs(t.diffMouseX)&&(t.scrollDir="vert",t.scrollStartY=t.lastMouseClientY,t.scrollOrigin=jQuery(document).scrollTop(),n.dataCache[e].scrollStartY=t.lastMouseClientY,n.dataCache[e].scrollOrigin=t.scrollOrigin),n.dataCache[e].scrollDir=t.scrollDir),"vert"!==t.scrollDir)return t.scrollDir;var a=(jQuery(document).scrollTop(),t.scrollOrigin-(t.lastMouseClientY-t.scrollStartY));return a>=0&&jQuery(document).scrollTop(a),t.scrollDir},this.wasVerticalScroll=function(e){var t=i.getStoredEventData(e);return"vert"===t.scrollDir?!0:!1},this.storeEventData=function(e,t,r){var o=i.getMousePosition(e),a=jQuery.now(),s={startTime:a,lastTime:a,startMouseX:o.pageX,startMouseY:o.pageY,lastMouseX:o.pageX,lastMouseY:o.pageY,startMouseClientY:o.clientY,lastMouseClientY:o.clientY,scrollTop:jQuery(document).scrollTop(),scrollDir:null};r&&(s=jQuery.extend(s,r)),n.dataCache[t]=s},this.updateStoredEventData=function(e,t,r){if(!n.dataCache[t])throw new Error("updateEventData error: must have stored cache object");var o=n.dataCache[t],a=i.getMousePosition(e);o.lastTime=jQuery.now(),void 0!==a.pageX&&(o.lastMouseX=a.pageX,o.lastMouseY=a.pageY,o.lastMouseClientY=a.clientY),r&&(o=jQuery.extend(o,r)),n.dataCache[t]=o},this.getStoredEventData=function(e,t){if(!n.dataCache[e])throw new Error("updateEventData error: must have stored cache object");var i=n.dataCache[e];return i.diffMouseX=i.lastMouseX-i.startMouseX,i.diffMouseY=i.lastMouseY-i.startMouseY,i.diffMouseClientY=i.lastMouseClientY-i.startMouseClientY,i.diffTime=i.lastTime-i.startTime,t===!0?(i.startMousePos=i.lastMouseY,i.lastMousePos=i.lastMouseY,i.diffMousePos=i.diffMouseY):(i.startMousePos=i.lastMouseX,i.lastMousePos=i.lastMouseX,i.diffMousePos=i.diffMouseX),i},this.isApproveStoredEventClick=function(e,t){if(!n.dataCache[e])return!0;var r=i.getStoredEventData(e,t),o=Math.abs(r.diffMousePos);return r.diffTime>400?!1:o>30?!1:!0},this.clearStoredEventData=function(e){n.dataCache[e]=null},this.z_________CHECK_SUPPORT_FUNCTIONS_______=function(){},this.isCanvasExists=function(){var e=jQuery('<canvas width="500" height="500" > </canvas>')[0];return"function"==typeof e.getContext?!0:!1},this.isScrollbarExists=function(){var e=window.innerWidth>document.documentElement.clientWidth;return e},this.isTouchDevice=function(){if(-1!==n.isTouchDevice)return n.isTouchDevice;try{document.createEvent("TouchEvent"),n.isTouchDevice=!0}catch(e){n.isTouchDevice=!1}return n.isTouchDevice},this.isRgbaSupported=function(){if(-1!==n.isRgbaSupported)return n.isRgbaSupported;var e=document.getElementsByTagName("script")[0],t=e.style.color;try{e.style.color="rgba(1,5,13,0.44)"}catch(i){}var r=e.style.color!=t;return e.style.color=t,n.isRgbaSupported=r,r},this.z_________GENERAL_FUNCTIONS_______=function(){},this.checkMinJqueryVersion=function(e){for(var t=jQuery.fn.jquery.split("."),i=e.split("."),n=0,r=t.length;r>n;n++){var o=parseInt(t[n]),a=parseInt(i[n]);if("undefined"==typeof i[n])return!0;if(a>o)return!1;if(o>a)return!0}return!0},this.getCssSizeParam=function(e){return jQuery.isNumeric(e)?e+"px":e},this.convertHexToRGB=function(e,t){var i=e.replace("#","");return i===e?e:(r=parseInt(i.substring(0,2),16),g=parseInt(i.substring(2,4),16),b=parseInt(i.substring(4,6),16),result="rgba("+r+","+g+","+b+","+t+")",result)},this.timestampToString=function(e){var t=new Date(e),i=t.getDate()+"/"+t.getMonth();return i+=" "+t.getHours()+":"+t.getMinutes()+":"+t.getSeconds()+":"+t.getMilliseconds()},this.getArrTouches=function(e){var t=[];return e.originalEvent&&e.originalEvent.touches&&e.originalEvent.touches.length>0&&(t=e.originalEvent.touches),t},this.getArrTouchPositions=function(e){for(var t=[],i=0;i<e.length;i++){var n={pageX:e[i].pageX,pageY:e[i].pageY};t.push(n)}return t},this.startTimeDebug=function(){n.starTime=jQuery.now()},this.showTimeDebug=function(){var e=jQuery.now(),t=e-n.starTime;debugLine({"Time Passed":t},!0)},this.initProgressIndicator=function(e,t,n){switch("bar"!=e&&0==i.isCanvasExists()&&(e="bar"),e){case"bar":var r=new UGProgressBar;r.putHidden(n,t);break;default:case"pie":var r=new UGProgressPie;r.putHidden(n,t);break;case"pie2":t.type_fill=!0;var r=new UGProgressPie;r.putHidden(n,t)}return r},this.setButtonMobileReady=function(e){e.on("touchstart",function(e){jQuery(this).addClass("ug-nohover")}),e.on("mousedown touchend",function(e){return e.stopPropagation(),e.stopImmediatePropagation(),!1})},this.registerTheme=function(e){n.arrThemes.push(e)},this.getArrThemes=function(){return n.arrThemes},this.isThemeRegistered=function(e){return-1!==jQuery.inArray(e,n.arrThemes)?!0:!1},this.getFirstRegisteredTheme=function(){if(0==n.arrThemes.length)return"";var e=n.arrThemes[0];return e},this.isTimePassed=function(e,t){if(!t)var t=100;var i=jQuery.now();0==n.timeCache.hasOwnProperty(e)?lastTime=0:lastTime=n.timeCache[e];var r=i-lastTime;return n.timeCache[e]=i,t>=r?!1:!0},this.whenContiniousEventOver=function(e,t,i){if(!i)var i=300;1==n.timeCache.hasOwnProperty(e)&&null!=n.timeCache[e]&&(clearTimeout(n.timeCache[e]),n.timeCache[e]=null),n.timeCache[e]=setTimeout(t,i)},this.validateClickTouchstartEvent=function(e){var t=!0,i=jQuery.now()-n.lastEventTime;return"click"==e&&"touchstart"==n.lastEventType&&1e3>i&&(t=!1),n.lastEventTime=jQuery.now(),n.lastEventType=e,t},this.addClassOnHover=function(e,t){if(!t)var t="ug-button-hover";e.hover(function(){jQuery(this).addClass(t)},function(){jQuery(this).removeClass(t)})},this.destroyButton=function(e){e.off("mouseenter"),e.off("mouseleave"),e.off("click"),e.off("touchstart"),e.off("touchend"),e.off("mousedown")},this.setButtonOnClick=function(e,t){i.setButtonMobileReady(e),e.on("click touchstart",function(e){return objThis=jQuery(this),e.stopPropagation(),e.stopImmediatePropagation(),0==i.validateClickTouchstartEvent(e.type)?!0:void t(objThis,e)})},this.loadJs=function(e,t){t===!0&&(e=location.protocol+"//"+e);var i=document.createElement("script");i.src=e;var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(i,n)},this.loadCss=function(e,t){t===!0&&(e=location.protocol+"//"+e);var i=document.createElement("link");i.setAttribute("rel","stylesheet"),i.setAttribute("type","text/css"),i.setAttribute("href",e),document.getElementsByTagName("head")[0].appendChild(i)},this.addEvent=function(e,t,i){"undefined"!=typeof e.addEventListener?e.addEventListener(t,i,!1):e.attachEvent&&e.attachEvent("on"+t,i)},this.checkImagesLoaded=function(e,t,i){function n(e,n){r++,"function"==typeof i&&setTimeout(function(){i(e,n)}),r==o&&"function"==typeof t&&setTimeout(function(){t()})}var r=0,o=e.length;return 0==o&&t?(t(),!1):void setTimeout(function(){for(var t=0;o>t;t++){var i=e[t];if(void 0!==i.naturalWidth&&0!==i.naturalWidth)n(e[t],!1);else{var r=jQuery("<img/>");r.data("index",t),r.on("load",function(){var t=jQuery(this).data("index");n(e[t],!1)}),r.on("error",function(){var t=jQuery(this).data("index");n(e[t],!0)}),r.attr("src",i.src)}}})},this.waitForWidth=function(e,t){var i=e.width();return 0!=i?(t(),!1):void(n.handle=setInterval(function(){i=e.width(),0!=i&&(clearInterval(n.handle),t())},300))},this.arrayShuffle=function(e){if("object"!=typeof e)return e;for(var t,i,n=e.length;n;t=parseInt(Math.random()*n),i=e[--n],e[n]=e[t],e[t]=i);return e},this.getObjectLength=function(e){var t=0;for(var i in e)t++;return t},this.normalizePercent=function(e){return 0>e&&(e=0),e>1&&(e=1),e},this.stripTags=function(e){var t=e.replace(/(<([^>]+)>)/gi,"");return t},this.escapeDoubleSlash=function(e){return e.replace('"','"')},this.htmlentitles=function(e){var t=jQuery("<div/>").text(e).html();return t},this.z_________END_GENERAL_FUNCTIONS_______=function(){}}function UGThumbsGeneral(){function e(e,t,i,n){var r={width:e+"px",height:t+"px"},o={width:e-j.thumbInnerReduce+"px",height:t-j.thumbInnerReduce+"px"},a=".ug-thumb-loader, .ug-thumb-error, .ug-thumb-border-overlay, .ug-thumb-overlay";i?(n!==!0&&i.css(r),i.children(a).css(o)):(w.children(".ug-thumb-wrapper").css(r),w.find(a).css(o))}function t(e,t,i,n){if(!n)var n=!1;S.isFakeFullscreen()&&(n=!0);var r=e.children(".ug-thumb-border-overlay"),o={};o["border-width"]=t+"px",0!=t&&(o["border-color"]=i),n&&n===!0?(r.css(o),0==t?r.hide():r.show()):(0==t?r.stop().fadeOut(x.thumb_transition_duration):r.show().stop().fadeIn(x.thumb_transition_duration),s(r,o))}function i(e,t,i){var n=e.children(".ug-thumb-overlay"),r=x.thumb_transition_duration;i&&i===!0&&(r=0),t?n.stop(!0).fadeTo(r,j.colorOverlayOpacity):n.stop(!0).fadeTo(r,0)}function n(e,t,i){var n=e.children("img.ug-thumb-image"),r=e.children("img.ug-thumb-image-overlay"),o=x.thumb_transition_duration;i&&i===!0&&(o=0),t?r.stop(!0).fadeTo(o,1):(n.fadeTo(0,1),r.stop(!0).fadeTo(o,0))}function r(e,r){if(j.isEffectBorder&&t(e,x.thumb_selected_border_width,x.thumb_selected_border_color,r),j.isEffectOverlay){var o=1==x.thumb_overlay_reverse?!0:!1;i(e,o,r)}j.isEffectImage&&n(e,!1,r),T.trigger(E.events.SETSELECTEDSTYLE,e)}function o(e){var t=E.getItemByThumb(e);return t.isLoaded=!0,t.isThumbImageLoaded=!1,1==j.customThumbs?(T.trigger(E.events.IMAGELOADERROR,e),!0):(e.children(".ug-thumb-loader").hide(),void e.children(".ug-thumb-error").show())}function a(){if(x.thumb_round_corners_radius<=0)return!1;var e={"border-radius":x.thumb_round_corners_radius+"px"};w.find(".ug-thumb-wrapper, .ug-thumb-wrapper .ug-thumb-border-overlay").css(e)}function s(e,t){e.stop(!0).animate(t,{duration:x.thumb_transition_duration,easing:x.thumb_transition_easing,queue:!1})}function l(e){1==g(e)?r(e,!0,"redraw"):E.setThumbNormalStyle(e,!0,"redraw")}function u(t,i,n){if(1==x.thumb_fixed_size)P.scaleImageCoverParent(i,t);else{"height"==x.thumb_resize_by?P.scaleImageByHeight(i,x.thumb_height):P.scaleImageByWidth(i,x.thumb_width);var r=P.getElementSize(i);P.placeElement(i,0,0),e(r.width,r.height,t)}t.children(".ug-thumb-loader").hide(),i.show(),0==x.thumb_image_overlay_effect?i.fadeTo(0,1):(1==x.thumb_image_overlay_effect&&d(i),i.fadeTo(0,0),l(t)),T.trigger(E.events.AFTERPLACEIMAGE,t)}function d(e){var t=e.siblings(".ug-thumb-image-overlay");if(0==t.length)return!1;var i=P.getElementSize(e),n={width:i.width+"px",height:i.height+"px",left:i.left+"px",top:i.top+"px"};t.css(n),0==j.customThumbs&&t.fadeTo(0,1)}function _(){var e="",t=x.thumb_image_overlay_type.split(",");for(var i in t){var n=t[i];switch(n){case"bw":e+=" ug-bw-effect";break;case"blur":e+=" ug-blur-effect";break;case"sepia":e+=" ug-sepia-effect"}}return e}function g(e){return e.hasClass("ug-thumb-selected")?!0:!1}function c(t,i){i=jQuery(i);var n=(E.getItemByThumb(i),P.getElementSize(i));e(n.width,n.height,i,!0),l(i)}function h(e){return 1==j.touchEnabled?(objThumbs.off("mouseenter").off("mouseleave"),!0):void(0==g(e)&&E.setThumbOverStyle(e))}function p(e){return 1==j.touchEnabled?!0:void(0==g(e)&&E.setThumbNormalStyle(e,!1))}function f(e,t){if(!t)var t=!1;var i=jQuery(e),n=i.parents(".ug-thumb-wrapper");return 0==n.parent().length?!1:(objItem=E.getItemByThumb(n),1==objItem.isLoaded&&t===!1?!1:(E.triggerImageLoadedEvent(n,i),void(1==j.customThumbs?T.trigger(E.events.PLACEIMAGE,[n,i]):u(n,i,objItem))))}function m(e,t,i){objItem=E.getItemByThumb(t),objItem.isLoaded=!0,objItem.isThumbImageLoaded=!0;var n=P.getImageOriginalSize(i);objItem.thumbWidth=n.width,objItem.thumbHeight=n.height,objItem.thumbRatioByWidth=n.width/n.height,objItem.thumbRatioByHeight=n.height/n.width}var v,b,y,I,w,E=this,T=jQuery(E),S=new UniteGalleryMain,P=new UGFunctions;this.events={SETOVERSTYLE:"thumbmouseover",SETNORMALSTYLE:"thumbmouseout",SETSELECTEDSTYLE:"thumbsetselected",PLACEIMAGE:"thumbplaceimage",AFTERPLACEIMAGE:"thumb_after_place_image",IMAGELOADERROR:"thumbimageloaderror",THUMB_IMAGE_LOADED:"thumb_image_loaded"};var x={thumb_width:88,thumb_height:50,thumb_fixed_size:!0,thumb_resize_by:"height",thumb_border_effect:!0,thumb_border_width:0,thumb_border_color:"#000000",thumb_over_border_width:0,thumb_over_border_color:"#d9d9d9",thumb_selected_border_width:1,thumb_selected_border_color:"#d9d9d9",thumb_round_corners_radius:0,thumb_color_overlay_effect:!0,thumb_overlay_color:"#000000",thumb_overlay_opacity:.4,thumb_overlay_reverse:!1,thumb_image_overlay_effect:!1,thumb_image_overlay_type:"bw",thumb_transition_duration:200,thumb_transition_easing:"easeOutQuad",thumb_show_loader:!0,thumb_loader_type:"dark",thumb_wrapper_as_link:!1,thumb_link_newpage:!1},j={touchEnabled:!1,num_thumbs_checking:0,customThumbs:!1,funcSetCustomThumbHtml:null,isEffectBorder:!1,isEffectOverlay:!1,isEffectImage:!1,colorOverlayOpacity:1,thumbInnerReduce:0,allowOnResize:!0},C={timeout_thumb_check:100,thumb_max_check_times:600,eventSizeChange:"thumb_size_change"};this.init=function(e,t){b=e.getObjects(),S=e,v=jQuery(e),y=b.g_objWrapper,I=b.g_arrItems,x=jQuery.extend(x,t),j.isEffectBorder=x.thumb_border_effect,j.isEffectOverlay=x.thumb_color_overlay_effect,j.isEffectImage=x.thumb_image_overlay_effect},this._____________EXTERNAL_SETTERS__________=function(){},this.setHtmlThumbs=function(e){w=e;var t=S.getNumItems();if(1==j.isEffectImage)var i=_();for(var n=0;t>n;n++){var r=I[n],o="";0==j.customThumbs&&(o=" ug-thumb-generated");var a=r.index+1,s="style='z-index:"+a+";'",l="<div class='ug-thumb-wrapper"+o+"' "+s+"></div>";if(1==x.thumb_wrapper_as_link){var u=r.link;""==r.link&&(u="javascript:void(0)");var d="";1==x.thumb_link_newpage&&r.link&&(d=" target='_blank'");var l="<a href='"+u+"'"+d+" class='ug-thumb-wrapper"+o+"'></a>"}var g=jQuery(l),c=r.objThumbImage;if(0==j.customThumbs){if(1==x.thumb_show_loader&&c){var h="ug-thumb-loader-dark";"bright"==x.thumb_loader_type&&(h="ug-thumb-loader-bright"),g.append("<div class='ug-thumb-loader "+h+"'></div>"),g.append("<div class='ug-thumb-error' style='display:none'></div>")}if(c){if(c.addClass("ug-thumb-image"),1==x.thumb_image_overlay_effect){var p=c.clone().appendTo(g);p.addClass("ug-thumb-image-overlay "+i).removeClass("ug-thumb-image"),p.fadeTo(0,0),r.objImageOverlay=p}g.append(c)}}j.isEffectBorder&&g.append("<div class='ug-thumb-border-overlay'></div>"),j.isEffectOverlay&&g.append("<div class='ug-thumb-overlay'></div>"),w.append(g),j.customThumbs&&j.funcSetCustomThumbHtml(g,r),I[n].objThumbWrapper=g}},this.setThumbNormalStyle=function(e,r,o){if(1==j.customThumbs&&e.removeClass("ug-thumb-over"),j.isEffectBorder&&t(e,x.thumb_border_width,x.thumb_border_color,r),j.isEffectOverlay){var a=1==x.thumb_overlay_reverse?!1:!0;i(e,a,r)}j.isEffectImage&&n(e,!0,r),T.trigger(E.events.SETNORMALSTYLE,e)},this.setThumbOverStyle=function(e){if(1==j.customThumbs&&e.addClass("ug-thumb-over"),j.isEffectBorder&&t(e,x.thumb_over_border_width,x.thumb_over_border_color),j.isEffectOverlay){var r=1==x.thumb_overlay_reverse?!0:!1;i(e,r)}1==j.isEffectImage&&n(e,!1),T.trigger(E.events.SETOVERSTYLE,e)},this.setHtmlProperties=function(){if(0==j.customThumbs){1==x.thumb_fixed_size&&e(x.thumb_width,x.thumb_height),a()}if(w.children(".ug-thumb-wrapper").each(function(){var e=jQuery(this);l(e)}),j.isEffectOverlay&&x.thumb_overlay_color){var t={};if(P.isRgbaSupported()){var i=P.convertHexToRGB(x.thumb_overlay_color,x.thumb_overlay_opacity);t["background-color"]=i}else t["background-color"]=x.thumb_overlay_color,j.colorOverlayOpacity=x.thumb_overlay_opacity;w.find(".ug-thumb-wrapper .ug-thumb-overlay").css(t)}},this.setThumbSelected=function(e){return 1==j.customThumbs&&e.removeClass("ug-thumb-over"),1==g(e)?!0:(e.addClass("ug-thumb-selected"),void r(e))},this.setThumbUnselected=function(e){e.removeClass("ug-thumb-selected"),E.setThumbNormalStyle(e,!1,"set unselected")},this.setOptions=function(e){x=jQuery.extend(x,e)},this.setThumbInnerReduce=function(e){j.thumbInnerReduce=e},this.setCustomThumbs=function(e,t,i){if(j.customThumbs=!0,"function"!=typeof e)throw new Error("The argument should be function");j.funcSetCustomThumbHtml=e,-1==jQuery.inArray("overlay",t)&&(j.isEffectOverlay=!1),-1==jQuery.inArray("border",t)&&(j.isEffectBorder=!1),j.isEffectImage=!1,i&&i.allow_onresize===!1&&(j.allowOnResize=!1)},this._____________EXTERNAL_GETTERS__________=function(){},this.getOptions=function(){return x},this.getNumThumbs=function(){var e=I.length;return e},this.getThumbImage=function(e){var t=e.find(".ug-thumb-image");return t},this.getThumbByIndex=function(e){var t=E.getThumbs();if(e>=t.length||0>e)throw new Error("Wrong thumb index");var i=jQuery(t[e]);return i},this.getThumbs=function(){return w.children(".ug-thumb-wrapper")},this.getItemByThumb=function(e){var t=e.data("index");void 0===t&&(t=e.index());var i=I[t];return i},this.isThumbLoaded=function(e){var t=E.getItemByThumb(e);return t.isLoaded},this.getGlobalThumbSize=function(){var e={width:x.thumb_width,height:x.thumb_height};return e},this._____________EXTERNAL_OTHERS__________=function(){},this.initEvents=function(){var e=w.find(".ug-thumb-wrapper");e.on("touchstart",function(){j.touchEnabled=!0,e.off("mouseenter").off("mouseleave")}),1==j.allowOnResize&&y.on(C.eventSizeChange,c),e.hover(function(e){var t=jQuery(this);h(t)},function(e){var t=jQuery(this);p(t)}),T.on(E.events.THUMB_IMAGE_LOADED,m)},this.destroy=function(){var e=w.find(".ug-thumb-wrapper");e.off("touchstart"),y.off(C.eventSizeChange),e.off("mouseenter"),e.off("mouseleave"),T.off(E.events.THUMB_IMAGE_LOADED)},this.loadThumbsImages=function(){var e=w.find(".ug-thumb-image");P.checkImagesLoaded(e,null,function(e,t){if(0==t)f(e,!0);else{var i=jQuery(e).parent();o(i)}})},this.triggerImageLoadedEvent=function(e,t){T.trigger(E.events.THUMB_IMAGE_LOADED,[e,t])},this.hideThumbs=function(){w.find(".ug-thumb-wrapper").hide()}}function UGThumbsStrip(){function e(e,i){S=e.getObjects(),z=e,z.attachThumbsPanel("strip",O),T=jQuery(e),P=S.g_objWrapper,x=S.g_arrItems,k=jQuery.extend(k,i),H=k.strip_vertical_type,1==H&&(k=jQuery.extend(k,D),k=jQuery.extend(k,i),i.thumb_resize_by="width"),N.init(e,i),t()}function t(){var e=N.getOptions();R.isNotFixedThumbs=e.thumb_fixed_size===!1,H=k.strip_vertical_type}function n(){ +N.setHtmlProperties(),o(),l(),s(),0==R.isRunOnce&&(1==k.strip_control_touch&&(M=new UGTouchThumbsControl,M.init(O)),1==k.strip_control_avia&&(A=new UGAviaControl,A.init(O)),p(),N.loadThumbsImages(),y()),R.isRunOnce=!0}function r(e){G.stripSize=e,0==H?G.stripActiveSize=G.stripSize-k.strip_padding_left-k.strip_padding_right:G.stripActiveSize=G.stripSize-k.strip_padding_top-k.strip_padding_bottom,G.stripActiveSize<0&&(G.stripActiveSize=0)}function o(){var e=C.children(".ug-thumb-wrapper"),t=jQuery(e[0]),i=t.outerWidth(),n=t.outerHeight(),o=N.getOptions();0==H?(G.thumbSize=i,1==o.thumb_fixed_size?G.thumbSecondSize=n:G.thumbSecondSize=o.thumb_height,r(j.width()),G.stripInnerSize=C.width()):(G.thumbSize=n,1==o.thumb_fixed_size?G.thumbSecondSize=i:G.thumbSecondSize=o.thumb_width,r(j.height()),G.stripInnerSize=C.height())}function a(e){0==H?C.width(e):C.height(e),G.stripInnerSize=e,p(),jQuery(O).trigger(O.events.INNER_SIZE_CHANGE)}function s(){var e=C.children(".ug-thumb-wrapper"),t=0,n=0;for(0==H&&(n=k.strip_padding_top),i=0;i<e.length;i++){var r=jQuery(e[i]);if(1==R.isNotFixedThumbs){if(objItem=N.getItemByThumb(r),0==objItem.isLoaded)continue;r.show()}L.placeElement(r,t,n),0==H?t+=r.outerWidth()+k.strip_space_between_thumbs:n+=r.outerHeight()+k.strip_space_between_thumbs}if(0==H)var o=t-k.strip_space_between_thumbs;else var o=n-k.strip_space_between_thumbs;a(o)}function l(){if(0==H){var e=G.thumbSecondSize,t={};t.height=e+"px";var i={};i.height=e+"px"}else{var n=G.thumbSecondSize,t={};t.width=n+"px";var i={};i.width=n+"px"}j.css(t),C.css(i)}function u(e){var t=O.getInnerStripPos(),i=t+e;i=O.fixInnerStripLimits(i),O.positionInnerStrip(i,!0)}function d(e){var t=E(e),i=-1*t.min;i=O.fixInnerStripLimits(i),O.positionInnerStrip(i,!0)}function _(e){var t=E(e),i=-1*t.max+G.stripSize;i=O.fixInnerStripLimits(i),O.positionInnerStrip(i,!0)}function g(e){if(0==I())return!1;var t=w(),i=E(e);if(i.min<t.minPosThumbs){var n=e.prev();d(n.length?n:e)}else if(i.max>t.maxPosThumbs){var r=e.next();_(r.length?r:e)}}function c(){var e=z.getSelectedItem();if(null==e)return!0;var t=e.objThumbWrapper;t&&g(t)}function h(){if(0==I())return!1;var e=O.getInnerStripPos(),t=O.fixInnerStripLimits(e);e!=t&&O.positionInnerStrip(t,!0)}function p(){var e=I();1==e?(A&&A.enable(),M&&M.enable()):(A&&A.disable(),M&&M.disable())}function f(){return I()?!1:void(0==H?L.placeElement(C,k.strip_thumbs_align,0):L.placeElement(C,0,k.strip_thumbs_align))}function m(e){if(O.isTouchMotionActive()){var t=M.isSignificantPassed();if(1==t)return!0}var i=N.getItemByThumb(e);z.selectItem(i)}function v(){clearTimeout(R.handle),R.handle=setTimeout(function(){s()},50)}function b(){var e=z.getSelectedItem();N.setThumbSelected(e.objThumbWrapper),g(e.objThumbWrapper)}function y(){N.initEvents();var e=j.find(".ug-thumb-wrapper");e.on("click touchend",function(e){var t=jQuery(this);m(t)}),T.on(z.events.ITEM_CHANGE,b),R.isNotFixedThumbs&&jQuery(N).on(N.events.AFTERPLACEIMAGE,v)}function I(){return G.stripInnerSize>G.stripActiveSize?!0:!1}function w(){var e={},t=O.getInnerStripPos();return e.minPosThumbs=-1*t+1,e.maxPosThumbs=-1*t+G.stripSize-1,e}function E(e){var t={},i=e.position();return 0==H?(t.min=i.left,t.max=i.left+G.thumbSize):(t.min=i.top,t.max=i.top+G.thumbSize),t}var T,S,P,x,j,C,A,M,O=this,z=new UniteGalleryMain,L=new UGFunctions,H=!1,N=new UGThumbsGeneral,L=new UGFunctions,k={strip_vertical_type:!1,strip_thumbs_align:"left",strip_space_between_thumbs:6,strip_thumb_touch_sensetivity:15,strip_scroll_to_thumb_duration:500,strip_scroll_to_thumb_easing:"easeOutCubic",strip_control_avia:!0,strip_control_touch:!0,strip_padding_top:0,strip_padding_bottom:0,strip_padding_left:0,strip_padding_right:0},R={isRunOnce:!1,is_placed:!1,isNotFixedThumbs:!1,handle:null},G={stripSize:0,stripActiveSize:0,stripInnerSize:0,thumbSize:0,thumbSecondSize:0};this.events={STRIP_MOVE:"stripmove",INNER_SIZE_CHANGE:"size_change"};var D={strip_thumbs_align:"top",thumb_resize_by:"width"};this.setHtml=function(e){if(!e){var e=P;null!=k.parent_container&&(e=k.parent_container)}e.append("<div class='ug-thumbs-strip'><div class='ug-thumbs-strip-inner'></div></div>"),j=e.children(".ug-thumbs-strip"),C=j.children(".ug-thumbs-strip-inner"),N.setHtmlThumbs(C),1==R.isNotFixedThumbs&&N.hideThumbs()},this.destroy=function(){var e=j.find(".ug-thumb-wrapper");e.off("click"),e.off("touchend"),T.off(z.events.ITEM_CHANGE),jQuery(N).off(N.events.AFTERPLACEIMAGE),M&&M.destroy(),A&&A.destroy(),N.destroy()},this.________EXTERNAL_GENERAL___________=function(){},this.init=function(t,i){e(t,i)},this.run=function(){n()},this.positionInnerStrip=function(e,t){if(void 0===t)var t=!1;if(0==H)var i={left:e+"px"};else var i={top:e+"px"};0==t?(C.css(i),O.triggerStripMoveEvent()):(O.triggerStripMoveEvent(),C.stop(!0).animate(i,{duration:k.strip_scroll_to_thumb_duration,easing:k.strip_scroll_to_thumb_easing,queue:!1,progress:function(){O.triggerStripMoveEvent()},always:function(){O.triggerStripMoveEvent()}}))},this.triggerStripMoveEvent=function(){jQuery(O).trigger(O.events.STRIP_MOVE)},this.isTouchMotionActive=function(){if(!M)return!1;var e=M.isTouchActive();return e},this.isItemThumbVisible=function(e){var t=e.objThumbWrapper,i=t.position(),n=-1*O.getInnerStripPos();if(0==H)var r=n+G.stripSize,o=i.left,a=i.left+t.width();else var r=n+G.stripSize,o=i.top,a=i.top+t.height();var s=!1;return a>=n&&r>=o&&(s=!0),s},this.getInnerStripPos=function(){return 0==H?C.position().left:C.position().top},this.getInnerStripLimits=function(){var e={};return 0==H?e.maxPos=k.strip_padding_left:e.maxPos=k.strip_padding_top,e.minPos=-(G.stripInnerSize-G.stripActiveSize),e},this.fixInnerStripLimits=function(e){var t=O.getInnerStripLimits();return e>t.maxPos&&(e=t.maxPos),e<t.minPos&&(e=t.minPos),e},this.scrollForeward=function(){u(-G.stripSize)},this.scrollBack=function(){u(G.stripSize)},this.________EXTERNAL_SETTERS___________=function(){},this.setOptions=function(e){k=jQuery.extend(k,e),N.setOptions(e),t()},this.setSizeVertical=function(e){if(0==H)throw new Error("setSizeVertical error, the strip size is not vertical");var t=G.thumbSecondSize,i={};i.width=t+"px",i.height=e+"px",j.css(i),r(e);var n={};n.width=t+"px",n.left="0px",n.top="0px",C.css(n),R.is_placed=!0,p()},this.setSizeHorizontal=function(e){if(1==H)throw new Error("setSizeHorizontal error, the strip size is not horizontal");var t=G.thumbSecondSize+k.strip_padding_top+k.strip_padding_bottom,i={};i.width=e+"px",i.height=t+"px",j.css(i),r(e);var n=k.strip_padding_left,o={};o.height=t+"px",o.left=n+"px",o.top="0px",C.css(o),R.is_placed=!0,p()},this.setPosition=function(e,t,i,n){L.placeElement(j,e,t,i,n)},this.resize=function(e){0==H?(j.width(e),G.stripActiveSize=e-k.strip_padding_left-k.strip_padding_right):(j.height(e),G.stripActiveSize=e-k.strip_padding_top-k.strip_padding_bottom),r(e),p(),h(),f(),c()},this.setThumbUnselected=function(e){N.setThumbUnselected(e)},this.setCustomThumbs=function(e){N.setCustomThumbs(e)},this.________EXTERNAL_GETTERS___________=function(){},this.getObjects=function(){var e=N.getOptions(),t=jQuery.extend(k,e),i={g_gallery:z,g_objGallery:T,g_objWrapper:P,g_arrItems:x,g_objStrip:j,g_objStripInner:C,g_aviaControl:A,g_touchThumbsControl:M,isVertical:H,g_options:t,g_thumbs:N};return i},this.getObjThumbs=function(){return N},this.getSelectedThumb=function(){var e=z.getSelectedItemIndex();return-1==e?null:N.getThumbByIndex(e)},this.getSizeAndPosition=function(){var e=L.getElementSize(j);return e},this.getHeight=function(){var e=j.outerHeight();return e},this.getWidth=function(){var e=j.outerWidth();return e},this.getSizes=function(){return G},this.isVertical=function(){return H},this.isPlaced=function(){return R.is_placed},this.isMoveEnabled=function(){var e=I();return e}}function UGTouchThumbsControl(){function e(){var e=jQuery.now(),t={};return t.passedTime=T.lastTime-T.startTime,t.lastActiveTime=e-T.buttonReleaseTime,t.passedDistance=T.lastPos-T.startPos,t.passedDistanceAbs=Math.abs(t.passedDistance),t}function t(){E.thumb_touch_slowFactor=w.normalizeSetting(5e-5,.01,1,100,y.strip_thumb_touch_sensetivity,!0)}function i(e){return 0==I?w.getMousePosition(e).pageX:w.getMousePosition(e).pageY}function n(e){var t=T.mousePos-e,i=T.innerPos-t,n=h.getInnerStripLimits();if(i>n.maxPos){var r=i-n.maxPos;i=n.maxPos+r/3}if(i<n.minPos){var r=n.minPos-i;i=n.minPos-r/3}h.positionInnerStrip(i)}function r(e){var t=h.getInnerStripPos();T.mousePos=e,T.innerPos=t,T.lastPortionPos=t,T.lastDeltaTime=0,T.lastDeltaPos=0,T.startTime=jQuery.now(),T.startPos=T.innerPos,T.lastTime=T.startTime,T.lastPos=T.startPos,T.speed=0}function o(){var e=jQuery.now(),t=e-T.lastTime;t>=E.touch_portion_time&&(T.lastDeltaTime=e-T.lastTime,T.lastDeltaTime>E.touch_portion_time&&(T.lastDeltaTime=E.touch_portion_time),T.lastDeltaPos=T.lastPos-T.lastPortionPos,T.lastPortionPos=T.lastPos,T.lastTime=e)}function a(){var e=E.thumb_touch_slowFactor,t=E.minDeltaTime,i=E.minPath,n=h.getInnerStripPos(),r=jQuery.now(),o=r-T.lastTime,a=n-T.lastPortionPos;t>o&&T.lastDeltaTime>0&&(o=T.lastDeltaTime,a=T.lastDeltaPos+a),t>o&&(o=t);var l=a>0?1:-1,u=0;o>0&&(u=a/o);var d=u*u/(2*e)*l;Math.abs(d)<=i&&(d=0);var _=h.getInnerStripPos(),g=_+d,c=h.fixInnerStripLimits(g),p=h.getInnerStripLimits(),f=E.limitsBreakAddition,m=!1,v=c;if(g>p.maxPos&&(m=!0,c=f,f>g&&(c=g)),g<p.minPos){m=!0;var y=p.minPos-f;c=y,g>y&&(c=g)}var w=c-_,S=Math.abs(Math.round(u/e));if(0!=d&&(S=S*w/d),_!=c){var P={left:c+"px"};1==I&&(P={top:c+"px"}),b.animate(P,{duration:S,easing:E.animationEasing,queue:!0,progress:s})}if(1==m){var x=E.returnAnimateSpeed,j={left:v+"px"};1==I&&(j={top:v+"px"}),b.animate(j,{duration:x,easing:E.returnAnimationEasing,queue:!0,progress:s})}}function s(){T.lastPos=h.getInnerStripPos(),h.triggerStripMoveEvent()}function l(){return 1==T.loop_active?!0:(T.loop_active=!0,void(T.handle=setInterval(o,10)))}function u(e){if(0==T.loop_active)return!0;if(e){var t=i(e);a(t)}T.loop_active=!1,T.handle=clearInterval(T.handle)}function d(e){return 0==T.isControlEnabled?!0:(T.buttonReleaseTime=jQuery.now(),0==T.touch_active?(u(e),!0):(e.preventDefault(),T.touch_active=!1,u(e),void v.removeClass("ug-dragging")))}function _(e){if(0==T.isControlEnabled)return!0;e.preventDefault(),T.touch_active=!0;var t=i(e);b.stop(!0),r(t),l(),v.addClass("ug-dragging")}function g(e){if(0==T.isControlEnabled)return!0;if(0==T.touch_active)return!0;if(e.preventDefault(),0==e.buttons)return T.touch_active=!1,u(e),!0;var t=i(e);T.lastPos=h.getInnerStripPos(),n(t),o()}function c(){v.bind("mousedown touchstart",_),jQuery(window).add("body").bind("mouseup touchend",d),jQuery("body").bind("mousemove touchmove",g)}var h,p,f,m,v,b,y,I,w=new UGFunctions,E={touch_portion_time:200,thumb_touch_slowFactor:0,minDeltaTime:70,minPath:10,limitsBreakAddition:30,returnAnimateSpeed:500,animationEasing:"easeOutCubic",returnAnimationEasing:"easeOutCubic"},T={touch_active:!1,loop_active:!1,mousePos:0,innerPos:0,startPos:0,startTime:0,lastTime:0,buttonReleaseTime:0,lastPos:0,lastPortionPos:0,lastDeltaTime:0,lastDeltaPos:0,speed:0,handle:"",touchEnabled:!1,isControlEnabled:!0};this.enable=function(){T.isControlEnabled=!0},this.disable=function(){T.isControlEnabled=!1},this.init=function(e){h=e,m=e.getObjects(),p=m.g_gallery,f=m.g_objGallery,v=m.g_objStrip,b=m.g_objStripInner,y=m.g_options,I=m.isVertical,t(),c()},this.isSignificantPassed=function(){var t=e();return t.passedTime>300?!0:t.passedDistanceAbs>30?!0:!1},this.isTouchActive=function(){if(1==T.touch_active)return!0;if(1==b.is(":animated"))return!0;var t=e();return t.lastActiveTime<50?!0:!1},this.destroy=function(){v.unbind("mousedown"),v.unbind("touchstart"),jQuery(window).add("body").unbind("mouseup").unbind("touchend"),jQuery("body").unbind("mousemove").unbind("touchmove")}}function UGPanelsBase(){function e(e,t){switch(n.orientation){case"right":case"left":var i={left:e+"px"};break;case"top":case"bottom":var i={top:e+"px"}}o.stop(!0).animate(i,{duration:300,easing:"easeInOutQuad",queue:!1,complete:function(){t&&t()}})}function t(e){switch(n.orientation){case"right":case"left":g.placeElement(o,e,null);break;case"top":case"bottom":g.placeElement(o,null,e)}}function i(){s.trigger(r.events.FINISH_MOVE)}var n,r,o,a,s,l,u,d=new UniteGalleryMain,_=this,g=new UGFunctions;this.init=function(e,t,i,o,l){n=t,r=i,d=e,a=o,s=l,u=jQuery(d)},this.setHtml=function(e){if(o=e,"strip"==n.panelType)var t=a.strippanel_enable_handle;else var t=a.gridpanel_enable_handle;if(1==t&&(l=new UGPanelHandle,l.init(r,o,a,n.panelType,d),l.setHtml()),n.isDisabledAtStart===!0){var i="<div class='ug-overlay-disabled'></div>";o.append(i),setTimeout(function(){o.children(".ug-overlay-disabled").hide()},n.disabledAtStartTimeout)}},this.placeElements=function(){l&&l.placeHandle()},this.initEvents=function(){l&&(l.initEvents(),u.on(d.events.SLIDER_ACTION_START,function(){l.hideHandle()}),u.on(d.events.SLIDER_ACTION_END,function(){l.showHandle()}))},this.destroy=function(){l&&(l.destroy(),u.off(d.events.SLIDER_ACTION_START),u.off(d.events.SLIDER_ACTION_END))},this.openPanel=function(a){if(!a)var a=!1;return o.is(":animated")?!1:0==n.isClosed?!1:(n.isClosed=!1,s.trigger(r.events.OPEN_PANEL),void(a===!1?e(n.originalPos,i):(t(n.originalPos),i())))},this.closePanel=function(a){if(!a)var a=!1;if(o.is(":animated"))return!1;if(1==n.isClosed)return!1;var l=_.getClosedPanelDest();n.isClosed=!0,s.trigger(r.events.CLOSE_PANEL),a===!1?e(l,i):(t(l),i())},this.setClosedState=function(e){n.originalPos=e,s.trigger(r.events.CLOSE_PANEL),n.isClosed=!0},this.setOpenedState=function(e){s.trigger(r.events.OPEN_PANEL),n.isClosed=!1},this.getClosedPanelDest=function(){var e,t=g.getElementSize(o);switch(n.orientation){case"left":n.originalPos=t.left,e=-n.panelWidth;break;case"right":n.originalPos=t.left;var i=d.getSize();e=i.width;break;case"top":n.originalPos=t.top,e=-n.panelHeight;break;case"bottom":n.originalPos=t.top;var i=d.getSize();e=i.height}return e},this.isPanelClosed=function(){return n.isClosed},this.setDisabledAtStart=function(e){return 0>=e?!1:(n.isDisabledAtStart=!0,void(n.disabledAtStartTimeout=e))}}function UGPanelHandle(){function e(){s.removeClass("ug-button-hover")}function t(){s.addClass("ug-button-closed")}function i(){s.removeClass("ug-button-closed")}function n(e){return e.stopPropagation(),e.stopImmediatePropagation(),0==l.validateClickTouchstartEvent(e.type)?!0:void(a.isPanelClosed()?a.openPanel():a.closePanel())}function r(){var e=a.getOrientation();switch(e){case"right":case"left":"top"!=u.panel_handle_align&&"bottom"!=u.panel_handle_align&&(u.panel_handle_align="top");break;case"bottom":"left"!=u.panel_handle_align&&"right"!=u.panel_handle_align&&(u.panel_handle_align="left");break;case"top":"left"!=u.panel_handle_align&&"right"!=u.panel_handle_align&&(u.panel_handle_align="right")}}var o,a,s,l=new UGFunctions,u={panel_handle_align:"top",panel_handle_offset:0,panel_handle_skin:0};this.init=function(e,t,i,n,r){switch(a=e,o=t,n){case"grid":u.panel_handle_align=i.gridpanel_handle_align,u.panel_handle_offset=i.gridpanel_handle_offset,u.panel_handle_skin=i.gridpanel_handle_skin;break;case"strip":u.panel_handle_align=i.strippanel_handle_align,u.panel_handle_offset=i.strippanel_handle_offset,u.panel_handle_skin=i.strippanel_handle_skin;break;default:throw new Error("Panel handle error: wrong panel type: "+n)}var s=r.getOptions(),l=s.gallery_skin;""==u.panel_handle_skin&&(u.panel_handle_skin=l)},this.setHtml=function(){var e=a.getOrientation(),t="ug-panel-handle-tip";switch(e){case"right":t+=" ug-handle-tip-left";break;case"left":t+=" ug-handle-tip-right";break;case"bottom":t+=" ug-handle-tip-top";break;case"top":t+=" ug-handle-tip-bottom"}o.append("<div class='"+t+" ug-skin-"+u.panel_handle_skin+"'></div>"),s=o.children(".ug-panel-handle-tip")},this.initEvents=function(){l.addClassOnHover(s),s.bind("click touchstart",n),jQuery(a).on(a.events.OPEN_PANEL,function(){e(),i()}),jQuery(a).on(a.events.CLOSE_PANEL,function(){e(),t()})},this.destroy=function(){l.destroyButton(s),jQuery(a).off(a.events.OPEN_PANEL),jQuery(a).off(a.events.CLOSE_PANEL)},this.placeHandle=function(){var e=l.getElementSize(s);r();var t=a.getOrientation();switch(t){case"left":l.placeElement(s,"right",u.panel_handle_align,-e.width);break;case"right":l.placeElement(s,-e.width,u.panel_handle_align,0,u.panel_handle_offset);break;case"top":l.placeElement(s,u.panel_handle_align,"bottom",u.panel_handle_offset,-e.height);break;case"bottom":l.placeElement(s,u.panel_handle_align,"top",u.panel_handle_offset,-e.height);break;default:throw new Error("Wrong panel orientation: "+t)}},this.hideHandle=function(){1==s.is(":visible")&&s.hide()},this.showHandle=function(){0==s.is(":visible")&&s.show()}}function UGStripPanel(){function e(e,t){T=e,m=jQuery(T),j=jQuery.extend(j,t);var i=!1;1==j.strippanel_vertical_type&&(j=jQuery.extend(j,C),i=!0),0==j.strippanel_enable_buttons&&(j=jQuery.extend(j,A),i=!0),1==i&&(j=jQuery.extend(j,t));var n=T.getOptions(),r=n.gallery_skin;""==j.strippanel_buttons_skin&&(j.strippanel_buttons_skin=r),v=T.getElement(),x.init(T,M,w,j,E),P=new UGThumbsStrip,P.init(T,j)}function t(){if(0==j.strippanel_vertical_type){if(0==M.panelWidth)throw new Error("Strip panel error: The width not set, please set width")}else if(0==M.panelHeight)throw new Error("Strip panel error: The height not set, please set height");if(null==M.orientation)throw new Error("Wrong orientation, please set panel orientation before run");return!0}function i(){return 1==M.isFirstRun&&0==t()?!1:(P.run(),s(),d(),f(),M.isFirstRun=!1,void c())}function n(e){if(!e)var e=v;if(e.append("<div class='ug-strip-panel'></div>"),b=e.children(".ug-strip-panel"),1==j.strippanel_enable_buttons){var t="ug-strip-arrow-left",i="ug-strip-arrow-right";1==j.strippanel_vertical_type&&(t="ug-strip-arrow-up",i="ug-strip-arrow-down"),b.append("<div class='ug-strip-arrow "+t+" ug-skin-"+j.strippanel_buttons_skin+"'><div class='ug-strip-arrow-tip'></div></div>"),b.append("<div class='ug-strip-arrow "+i+" ug-skin-"+j.strippanel_buttons_skin+"'><div class='ug-strip-arrow-tip'></div></div>")}x.setHtml(b),P.setHtml(b),1==j.strippanel_enable_buttons&&(I=b.children("."+t),y=b.children("."+i)),r()}function r(){""!=j.strippanel_background_color&&b.css("background-color",j.strippanel_background_color)}function o(){var e=P.getHeight(),t=M.panelWidth;if(y){I.height(e),y.height(e);var i=I.children(".ug-strip-arrow-tip");S.placeElement(i,"center","middle");var n=y.children(".ug-strip-arrow-tip");S.placeElement(n,"center","middle")}var r=e+j.strippanel_padding_top+j.strippanel_padding_bottom;b.width(t),b.height(r),M.panelHeight=r;var o=t-j.strippanel_padding_left-j.strippanel_padding_right;if(y){var a=y.outerWidth();o=o-2*a-2*j.strippanel_padding_buttons}P.resize(o)}function a(){var e=P.getWidth(),t=M.panelHeight;if(y){I.width(e),y.width(e);var i=I.children(".ug-strip-arrow-tip");S.placeElement(i,"center","middle");var n=y.children(".ug-strip-arrow-tip");S.placeElement(n,"center","middle")}var r=e+j.strippanel_padding_left+j.strippanel_padding_right;b.width(r),b.height(t),M.panelWidth=r;var o=t-j.strippanel_padding_top-j.strippanel_padding_bottom;if(y){var a=y.outerHeight();o=o-2*a-2*j.strippanel_padding_buttons}P.resize(o)}function s(){0==j.strippanel_vertical_type?o():a()}function l(){y&&(S.placeElement(I,"left","top",j.strippanel_padding_left,j.strippanel_padding_top),S.placeElement(y,"right","top",j.strippanel_padding_right,j.strippanel_padding_top));var e=j.strippanel_padding_left;y&&(e+=y.outerWidth()+j.strippanel_padding_buttons),P.setPosition(e,j.strippanel_padding_top)}function u(){y&&(S.placeElement(I,"left","top",j.strippanel_padding_left,j.strippanel_padding_top),S.placeElement(y,"left","bottom",j.strippanel_padding_left,j.strippanel_padding_bottom));var e=j.strippanel_padding_top;y&&(e+=y.outerHeight()+j.strippanel_padding_buttons),P.setPosition(j.strippanel_padding_left,e)}function d(){0==j.strippanel_vertical_type?l():u(),x.placeElements()}function _(e){return S.isButtonDisabled(e)?!0:void("advance_item"==j.strippanel_buttons_role?T.nextItem():P.scrollForeward())}function g(e){return S.isButtonDisabled(e)?!0:void("advance_item"==j.strippanel_buttons_role?T.prevItem():P.scrollBack())}function c(){if(!y)return!0;if(0==P.isMoveEnabled())return S.disableButton(I),S.disableButton(y),!0;var e=P.getInnerStripLimits(),t=P.getInnerStripPos();t>=e.maxPos?S.disableButton(I):S.enableButton(I),t<=e.minPos?S.disableButton(y):S.enableButton(y)}function h(){c()}function p(){T.isLastItem()?S.disableButton(y):S.enableButton(y),T.isFirstItem()?S.disableButton(I):S.enableButton(I)}function f(){if(1==M.isEventsInited)return!1;if(M.isEventsInited=!0,y)if(S.addClassOnHover(y,"ug-button-hover"),S.addClassOnHover(I,"ug-button-hover"),S.setButtonOnClick(I,g),S.setButtonOnClick(y,_),"advance_item"!=j.strippanel_buttons_role)jQuery(P).on(P.events.STRIP_MOVE,h),jQuery(P).on(P.events.INNER_SIZE_CHANGE,c),m.on(T.events.SIZE_CHANGE,c);else{var e=T.getOptions();0==e.gallery_carousel&&jQuery(T).on(T.events.ITEM_CHANGE,p)}x.initEvents()}var m,v,b,y,I,w=this,E=jQuery(this),T=new UniteGalleryMain,S=new UGFunctions,P=new UGThumbsStrip,x=new UGPanelsBase;this.events={FINISH_MOVE:"gridpanel_move_finish",OPEN_PANEL:"open_panel",CLOSE_PANEL:"close_panel"};var j={strippanel_vertical_type:!1,strippanel_padding_top:8,strippanel_padding_bottom:8,strippanel_padding_left:0,strippanel_padding_right:0,strippanel_enable_buttons:!0,strippanel_buttons_skin:"",strippanel_padding_buttons:2,strippanel_buttons_role:"scroll_strip",strippanel_enable_handle:!0,strippanel_handle_align:"top",strippanel_handle_offset:0,strippanel_handle_skin:"",strippanel_background_color:""},C={strip_vertical_type:!0,strippanel_padding_left:8,strippanel_padding_right:8,strippanel_padding_top:0,strippanel_padding_bottom:0},A={strippanel_padding_left:8,strippanel_padding_right:8,strippanel_padding_top:8,strippanel_padding_bottom:8},M={panelType:"strip",panelWidth:0,panelHeight:0,isEventsInited:!1,isClosed:!1,orientation:null,originalPos:null,isFirstRun:!0};this.destroy=function(){y&&(S.destroyButton(y),S.destroyButton(I),jQuery(P).off(P.events.STRIP_MOVE),jQuery(T).off(T.events.ITEM_CHANGE),jQuery(T).off(T.events.SIZE_CHANGE)),x.destroy(),P.destroy()},this.getOrientation=function(){return M.orientation},this.setOrientation=function(e){M.orientation=e},this.init=function(t,i){e(t,i)},this.run=function(){i()},this.setHtml=function(e){n(e)},this.getElement=function(){return b},this.getSize=function(){var e=S.getElementSize(b);return e},this.setWidth=function(e){M.panelWidth=e},this.setHeight=function(e){M.panelHeight=e},this.resize=function(e){w.setWidth(e),s(),d()},this.__________Functions_From_Base_____=function(){},this.isPanelClosed=function(){return x.isPanelClosed()},this.getClosedPanelDest=function(){return x.getClosedPanelDest()},this.openPanel=function(e){x.openPanel(e)},this.closePanel=function(e){x.closePanel(e)},this.setOpenedState=function(e){x.setOpenedState(e)},this.setClosedState=function(e){x.setClosedState(e)},this.setCustomThumbs=function(e){P.setCustomThumbs(e)},this.setDisabledAtStart=function(e){x.setDisabledAtStart(e)}}function UGGridPanel(){function e(e,i){x=e,t(),i&&i.vertical_scroll&&(M.gridpanel_vertical_scroll=i.vertical_scroll),M=jQuery.extend(M,i),1==L.isHorType?(M=jQuery.extend(M,z),M=jQuery.extend(M,i)):1==M.gridpanel_vertical_scroll&&(M=jQuery.extend(M,O),M=jQuery.extend(M,i),M.grid_panes_direction="bottom");var n=x.getOptions(),r=n.gallery_skin;""==M.gridpanel_arrows_skin&&(M.gridpanel_arrows_skin=r);var o=e.getObjects();I=o.g_objWrapper,A.init(x,L,S,M,P),C=new UGThumbsGrid,C.init(x,M)}function t(){if(null==L.orientation)throw new Error("Wrong orientation, please set panel orientation before run")}function i(){t(),o(),C.run(),l(),u(),y(),d()}function n(){I.append("<div class='ug-grid-panel'></div>"),w=I.children(".ug-grid-panel"),L.isHorType?(w.append("<div class='grid-arrow grid-arrow-left-hortype ug-skin-"+M.gridpanel_arrows_skin+"'></div>"),w.append("<div class='grid-arrow grid-arrow-right-hortype ug-skin-"+M.gridpanel_arrows_skin+"'></div>"),T=w.children(".grid-arrow-left-hortype"),E=w.children(".grid-arrow-right-hortype")):0==M.gridpanel_vertical_scroll?(w.append("<div class='grid-arrow grid-arrow-left ug-skin-"+M.gridpanel_arrows_skin+"'></div>"),w.append("<div class='grid-arrow grid-arrow-right ug-skin-"+M.gridpanel_arrows_skin+"'></div>"),T=w.children(".grid-arrow-left"),E=w.children(".grid-arrow-right")):(w.append("<div class='grid-arrow grid-arrow-up ug-skin-"+M.gridpanel_arrows_skin+"'></div>"),w.append("<div class='grid-arrow grid-arrow-down ug-skin-"+M.gridpanel_arrows_skin+"'></div>"),T=w.children(".grid-arrow-up"),E=w.children(".grid-arrow-down")),A.setHtml(w),T.fadeTo(0,0),E.fadeTo(0,0),C.setHtml(w),r()}function r(){""!=M.gridpanel_background_color&&w.css("background-color",M.gridpanel_background_color)}function o(){"center"==M.gridpanel_grid_align&&(M.gridpanel_grid_align="middle")}function a(){var e=M.gridpanel_padding_border_top+M.gridpanel_padding_border_bottom,t=L.panelHeight-e;if(0==M.gridpanel_arrows_always_on){var i=C.getNumPanesEstimationByHeight(t);if(1==i)return t}var n=j.getElementSize(E),r=n.height,e=r+M.gridpanel_arrows_padding_vert;return 1==M.gridpanel_vertical_scroll&&(e*=2),e+=M.gridpanel_padding_border_top+M.gridpanel_padding_border_bottom,t=L.panelHeight-e}function s(){var e=M.gridpanel_padding_border_left+M.gridpanel_padding_border_right,t=L.panelWidth-e;if(0==M.gridpanel_arrows_always_on){var i=C.getNumPanesEstimationByWidth(t);if(1==i)return t}var n=j.getElementSize(E),r=n.width;return e+=2*(r+M.gridpanel_arrows_padding_hor),t=L.panelWidth-e}function l(){var e=!1;if(1==M.gridpanel_arrows_always_on)e=!0;else{var t=C.getNumPanes();t>1&&(e=!0)}1==e?(E.show().fadeTo(0,1),T.show().fadeTo(0,1),L.arrowsVisible=!0):(E.hide(),T.hide(),L.arrowsVisible=!1)}function u(){var e=C.getSize();1==L.isHorType?L.panelHeight=e.height+M.gridpanel_padding_border_top+M.gridpanel_padding_border_bottom:L.panelWidth=e.width+M.gridpanel_padding_border_left+M.gridpanel_padding_border_right,j.setElementSize(w,L.panelWidth,L.panelHeight)}function d(){return 1==L.isEventsInited?!1:(L.isEventsInited=!0,T&&(j.addClassOnHover(T),C.attachPrevPaneButton(T)),E&&(j.addClassOnHover(E),C.attachNextPaneButton(E)),void A.initEvents())}function _(){var e=M.gridpanel_padding_border_left;return e}function g(){var e=M.gridpanel_grid_align,t=0;switch(e){case"top":t=M.gridpanel_padding_border_top;break;case"bottom":t=M.gridpanel_padding_border_bottom}var i=_(),n=C.getElement();j.placeElement(n,i,e,0,t)}function c(){var e,t,i,n,r=j.getElementSize(T),o=C.getSize();switch(M.gridpanel_grid_align){default:case"top":e=M.gridpanel_padding_border_top+r.height+M.gridpanel_arrows_padding_vert;break;case"middle":e="middle";break;case"bottom":e=L.panelHeight-o.height-r.height-M.gridpanel_padding_border_bottom-M.gridpanel_arrows_padding_vert}var a=_(),s=C.getElement();j.placeElement(s,a,e);var o=C.getSize();switch(M.gridpanel_arrows_align_vert){default:case"center":case"middle":t=(o.top-r.height)/2,i=o.bottom+(L.panelHeight-o.bottom-r.height)/2,n=0;break;case"grid":t=o.top-r.height-M.gridpanel_arrows_padding_vert_vert,i=o.bottom+M.gridpanel_arrows_padding_vert,n=0;break;case"border":case"borders":t=M.gridpanel_padding_border_top,i="bottom",n=M.gridpanel_padding_border_bottom}j.placeElement(T,"center",t),j.placeElement(E,"center",i,0,n)}function h(){1==L.arrowsVisible?c():g()}function p(){var e,t,i,n,r=j.getElementSize(T),o=C.getSize(),a=M.gridpanel_padding_border_top;switch(M.gridpanel_grid_align){case"middle":switch(M.gridpanel_arrows_align_vert){default:var s=o.height+M.gridpanel_arrows_padding_vert+r.height;a=(L.panelHeight-s)/2;break;case"border":case"borders":var l=L.panelHeight-r.height-M.gridpanel_padding_border_bottom;a=(l-o.height)/2}break;case"bottom":var s=o.height+r.height+M.gridpanel_arrows_padding_vert;a=L.panelHeight-s-M.gridpanel_padding_border_bottom}var u=C.getElement(),d=_();j.placeElement(u,d,a);var o=C.getSize();switch(M.gridpanel_arrows_align_vert){default:case"center":case"middle":e=o.bottom+(L.panelHeight-o.bottom-r.height)/2,i=0;break;case"grid":e=o.bottom+M.gridpanel_arrows_padding_vert,i=0;break;case"border":case"borders":e="bottom",i=M.gridpanel_padding_border_bottom}t=-r.width/2-M.gridpanel_space_between_arrows/2,j.placeElement(T,"center",e,t,i);var n=Math.abs(t);j.placeElement(E,"center",e,n,i)}function f(){1==L.arrowsVisible?p():g()}function m(){var e,t,i,n,r=j.getElementSize(T),o=C.getSize();switch(M.gridpanel_grid_align){default:case"left":e=M.gridpanel_padding_border_left+M.gridpanel_arrows_padding_hor+r.width;break;case"middle":case"center":e="center";break;case"right":e=L.panelWidth-o.width-r.width-M.gridpanel_padding_border_right-M.gridpanel_arrows_padding_hor}var a=C.getElement();switch(j.placeElement(a,e,M.gridpanel_padding_border_top),o=C.getSize(),M.gridpanel_arrows_align_vert){default:case"center":case"middle":n=(o.height-r.height)/2+o.top;break;case"top":n=M.gridpanel_padding_border_top+M.gridpanel_arrows_padding_vert;break;case"bottom":n=L.panelHeight-M.gridpanel_padding_border_bottom-M.gridpanel_arrows_padding_vert-r.height}switch(M.gridpanel_arrows_align_hor){default:case"borders":t=M.gridpanel_padding_border_left,i=L.panelWidth-M.gridpanel_padding_border_right-r.width;break;case"grid":t=o.left-M.gridpanel_arrows_padding_hor-r.width,i=o.right+M.gridpanel_arrows_padding_hor;break;case"center":t=(o.left-r.width)/2,i=o.right+(L.panelWidth-o.right-r.width)/2}j.placeElement(T,t,n),j.placeElement(E,i,n)}function v(){var e,t=C.getSize();switch(M.gridpanel_grid_align){default:case"left":e=M.gridpanel_padding_border_left;break;case"middle":case"center":e="center";break;case"right":e=L.panelWidth-t.width-M.gridpanel_padding_border_right}var i=C.getElement();j.placeElement(i,e,M.gridpanel_padding_border_top)}function b(){1==L.arrowsVisible?m():v()}function y(){0==L.isHorType?1==M.gridpanel_vertical_scroll?h():f():b(),A.placeElements()}var I,w,E,T,S=this,P=jQuery(this),x=new UniteGalleryMain,j=new UGFunctions,C=new UGThumbsGrid,A=new UGPanelsBase;this.events={FINISH_MOVE:"gridpanel_move_finish",OPEN_PANEL:"open_panel",CLOSE_PANEL:"close_panel"};var M={gridpanel_vertical_scroll:!0,gridpanel_grid_align:"middle",gridpanel_padding_border_top:10,gridpanel_padding_border_bottom:4,gridpanel_padding_border_left:10,gridpanel_padding_border_right:10,gridpanel_arrows_skin:"",gridpanel_arrows_align_vert:"middle",gridpanel_arrows_padding_vert:4,gridpanel_arrows_align_hor:"center",gridpanel_arrows_padding_hor:10,gridpanel_space_between_arrows:20,gridpanel_arrows_always_on:!1,gridpanel_enable_handle:!0,gridpanel_handle_align:"top",gridpanel_handle_offset:0,gridpanel_handle_skin:"",gridpanel_background_color:""},O={gridpanel_grid_align:"middle",gridpanel_padding_border_top:2,gridpanel_padding_border_bottom:2},z={gridpanel_grid_align:"center"},L={panelType:"grid",isHorType:!1,arrowsVisible:!1,panelHeight:0,panelWidth:0,originalPosX:null,isEventsInited:!1,isClosed:!1,orientation:null};this.destroy=function(){T&&j.destroyButton(T),E&&j.destroyButton(E),A.destroy(),C.destroy()},this.getOrientation=function(){return L.orientation},this.setOrientation=function(e){switch(L.orientation=e,e){case"right":case"left":L.isHorType=!1;break;case"top":case"bottom":L.isHorType=!0;break;default:throw new Error("Wrong grid panel orientation: "+e)}},this.setHeight=function(e){if(1==L.isHorType)throw new Error("setHeight is not appliable to this orientatio ("+L.orientation+"). Please use setWidth");L.panelHeight=e;var t=a();C.setMaxHeight(t)},this.setWidth=function(e){if(0==L.isHorType)throw new Error("setWidth is not appliable to this orientatio ("+L.orientation+"). Please use setHeight");L.panelWidth=e;var t=s();C.setMaxWidth(t)},this.init=function(t,i){e(t,i)},this.setHtml=function(){n()},this.run=function(){i()},this.getElement=function(){return w},this.getSize=function(){var e=j.getElementSize(w);return e},this.__________Functions_From_Base_____=function(){}, +this.isPanelClosed=function(){return A.isPanelClosed()},this.getClosedPanelDest=function(){return A.getClosedPanelDest()},this.openPanel=function(e){A.openPanel(e)},this.closePanel=function(e){A.closePanel(e)},this.setOpenedState=function(e){A.setOpenedState(e)},this.setClosedState=function(e){A.setClosedState(e)},this.setDisabledAtStart=function(e){A.setDisabledAtStart(e)}}function UGThumbsGrid(){function e(e,t,i){if(N=e.getObjects(),F=e,F.attachThumbsPanel("grid",Q),H=jQuery(e),k=N.g_objWrapper,R=N.g_arrItems,i===!0&&(X.isTilesMode=!0),X.numThumbs=R.length,_(t),1==X.isTilesMode){U.setFixedMode(),U.setApproveClickFunction(x),U.init(e,V);var n=U.getOptions();X.tileMaxHeight=n.tile_height,X.tileMaxWidth=n.tile_width,Y=U.getObjThumbs()}else t.thumb_fixed_size=!0,Y.init(e,t)}function t(e){var t=k;e&&(t=e),t.append("<div class='ug-thumbs-grid'><div class='ug-thumbs-grid-inner'></div></div>"),G=t.children(".ug-thumbs-grid"),D=G.children(".ug-thumbs-grid-inner"),1==X.isTilesMode?U.setHtml(D):Y.setHtmlThumbs(D)}function n(){if(0==X.isHorizontal){if(0==X.gridHeight)throw new Error("You must set height before run.")}else if(0==X.gridWidth)throw new Error("You must set width before run.")}function r(){var e=F.getSelectedItem();if(n(),1==X.isFirstTimeRun)L(),1==X.isTilesMode?(a(),u(),U.run()):(Y.setHtmlProperties(),u(),Y.loadThumbsImages());else if(1==X.isTilesMode){var t=a();1==t&&(u(),U.run())}if(p(),1==X.isFirstTimeRun&&X.isTilesMode){var i=Y.getThumbs();i.each(function(e,t){k.trigger(X.eventSizeChange,jQuery(t))}),i.fadeTo(0,1)}null!=e&&d(e.index),W.trigger(Q.events.PANE_CHANGE,X.currentPane),X.isFirstTimeRun=!1}function o(){if(1==X.isTilesMode)var e=U.getGlobalTileSize();else var e=Y.getGlobalThumbSize();return e}function a(){if(0==X.isTilesMode)throw new Error("Dynamic size can be set only in tiles mode");var e=!1,t=F.isMobileMode(),i=X.spaceBetweenCols;1==t?(X.spaceBetweenCols=V.grid_space_between_mobile,X.spaceBetweenRows=V.grid_space_between_mobile):(X.spaceBetweenCols=V.grid_space_between_cols,X.spaceBetweenRows=V.grid_space_between_rows),X.spaceBetweenCols!=i&&(e=!0);var n=o(),r=n.width,a=X.tileMaxWidth,s=B.getNumItemsInSpace(X.gridWidth,X.tileMaxWidth,X.spaceBetweenCols);return s<V.grid_min_cols&&(a=B.getItemSizeInSpace(X.gridWidth,V.grid_min_cols,X.spaceBetweenCols)),U.setTileSizeOptions(a),a!=r&&(e=!0),e}function s(){var e=o(),t=e.height,i=X.gridWidth,n=V.grid_num_rows*t+(V.grid_num_rows-1)*X.spaceBetweenRows+2*V.grid_padding;X.gridHeight=n,B.setElementSize(G,i,n),B.setElementSize(D,i,n),X.innerWidth=i,X.innerHeight=n}function l(){var e=o(),t=e.width,i=V.grid_num_cols*t+(V.grid_num_cols-1)*X.spaceBetweenCols+2*V.grid_padding,n=X.gridHeight;X.gridWidth=i,B.setElementSize(G,i,n),B.setElementSize(D,i,n),X.innerWidth=i,X.innerHeight=n}function u(){0==X.isHorizontal?l():s()}function d(e){var t=T(e);return-1==t?!1:void Q.gotoPane(t,"scroll")}function _(e){V=jQuery.extend(V,e),Y.setOptions(e),X.isNavigationVertical="top"==V.grid_panes_direction||"bottom"==V.grid_panes_direction,X.spaceBetweenCols=V.grid_space_between_cols,X.spaceBetweenRows=V.grid_space_between_rows}function g(){var e=D.children(".ug-thumb-wrapper"),t=0,n=0,r=0,o=0,a=0,s=0;X.innerWidth=0,X.numPanes=1,X.arrPanes=[],X.numThumbsInPane=0,X.arrPanes.push(o);var l=e.length;for(i=0;i<l;i++){var u=jQuery(e[i]);B.placeElement(u,t,n);var d=u.outerWidth(),_=u.outerHeight();t>a&&(a=t);var g=n+_;g>s&&(s=g);var c=a+d;c>X.innerWidth&&(X.innerWidth=c),t+=d+X.spaceBetweenCols,r++,r>=V.grid_num_cols&&(n+=_+X.spaceBetweenRows,t=o,r=0),1==X.numPanes&&X.numThumbsInPane++,n+_>X.gridHeight&&(n=0,o=X.innerWidth+X.spaceBetweenCols,t=o,r=0,1==X.isMaxHeight&&1==X.numPanes&&(X.gridHeight=s,G.height(X.gridHeight)),i<l-1&&(X.numPanes++,X.arrPanes.push(o)))}D.width(X.innerWidth),1==X.isMaxHeight&&1==X.numPanes&&(X.gridHeight=s,G.height(s))}function c(){var e=D.children(".ug-thumb-wrapper"),t=0,n=0,r=0,o=0,a=0,s=0;X.innerWidth=0,X.numPanes=1,X.arrPanes=[],X.numThumbsInPane=0,X.arrPanes.push(a);var l=e.length;for(i=0;i<l;i++){var u=jQuery(e[i]);B.placeElement(u,t,n);var d=u.outerWidth(),_=u.outerHeight();t+=d+X.spaceBetweenCols;var g=n+_;g>r&&(r=g),o++,o>=V.grid_num_cols&&(n+=_+X.spaceBetweenRows,t=a,o=0),1==X.numPanes&&X.numThumbsInPane++,g=n+_;var c=s+X.gridHeight;g>c&&(1==X.isMaxHeight&&1==X.numPanes&&(X.gridHeight=r,G.height(X.gridHeight),c=X.gridHeight),n=c+X.spaceBetweenRows,s=n,a=0,t=a,o=0,i<l-1&&(X.numPanes++,X.arrPanes.push(n)))}D.height(r),X.innerHeight=r,1==X.isMaxHeight&&1==X.numPanes&&(X.gridHeight=r,G.height(r))}function h(){var e=D.children(".ug-thumb-wrapper"),t=V.grid_padding,n=V.grid_padding,r=n,o=t,a=0,s=0,l=0,u=0,d=0;X.innerWidth=0,X.numPanes=1,X.arrPanes=[],X.numThumbsInPane=0,X.arrPanes.push(t-V.grid_padding);var _=e.length;for(i=0;i<_;i++){var g=jQuery(e[i]),c=g.outerWidth(),h=g.outerHeight();o-t+c>X.gridWidth&&(d++,r=0,d>=V.grid_num_rows?(d=0,t=o,r=n,l=0,1==X.numPanes&&(X.gridWidth=a+V.grid_padding,G.width(X.gridWidth),X.gridHeight=u+V.grid_padding,G.height(X.gridHeight)),X.numPanes++,X.arrPanes.push(t-V.grid_padding)):(o=t,r=l+X.spaceBetweenRows)),B.placeElement(g,o,r);var p=o+c;p>a&&(a=p);var f=r+h;f>l&&(l=f),f>u&&(u=f),f>s&&(s=f);var p=a+c;p>X.innerWidth&&(X.innerWidth=p),o+=c+X.spaceBetweenCols,1==X.numPanes&&X.numThumbsInPane++}X.innerWidth=a+V.grid_padding,X.innerHeight=u+V.grid_padding,D.width(X.innerWidth),D.height(X.innerHeight),1==X.numPanes&&(X.gridWidth=a+V.grid_padding,X.gridHeight=u+V.grid_padding,G.width(X.gridWidth),G.height(X.gridHeight))}function p(){0==X.isHorizontal?X.isNavigationVertical?c():g():h()}function f(e){if(0>e||e>=X.numThumbs)throw new Error("Thumb not exists: "+e);return!0}function m(e){if(e>=X.numPanes||0>e)throw new Error("Pane "+index+" doesn't exists.");return!0}function v(e){var t=w(e);return 0==t?!1:void D.css(t)}function b(e){var t=w(e);return 0==t?!1:void D.stop(!0).animate(t,{duration:V.grid_transition_duration,easing:V.grid_transition_easing,queue:!1})}function y(){var e=-X.arrPanes[X.currentPane];b(e)}function I(){return 1==X.isNavigationVertical?X.gridHeight:X.gridWidth}function w(e){var t={};return 1==X.isNavigationVertical?t.top=e+"px":t.left=e+"px",t}function E(){var e=B.getElementSize(D);return 1==X.isNavigationVertical?e.top:e.left}function T(e){if(0==f(e))return-1;var t=Math.floor(e/X.numThumbsInPane);return t}function S(){if(1==X.numPanes)return!1;var e=B.getStoredEventData(X.storedEventID),t=e.diffTime,i=E(),n=Math.abs(i-e.startInnerPos);return n>30?!0:n>5&&t>300?!0:!1}function P(){var e=B.getStoredEventData(X.storedEventID),t=E();diffPos=Math.abs(e.startInnerPos-t);var i=I(),n=Math.round(3*i/8);return diffPos>=n?!0:e.diffTime<300&&diffPos>25?!0:!1}function x(){if(1==X.numPanes)return!0;var e=B.isApproveStoredEventClick(X.storedEventID,X.isNavigationVertical);return e}function j(e){if(1==S())return!0;var t=jQuery(this),i=Y.getItemByThumb(t);F.selectItem(i)}function C(e){if(1==X.numPanes)return!0;if(1==X.touchActive)return!0;0==X.isTilesMode&&e.preventDefault(),X.touchActive=!0;var t={startInnerPos:E()};B.storeEventData(e,X.storedEventID,t)}function A(){if(0==V.grid_vertical_scroll_ondrag)return!1;if(1==X.isNavigationVertical)return!1;var e=B.handleScrollTop(X.storedEventID);return"vert"===e?!0:!1}function M(e){if(0==X.touchActive)return!0;e.preventDefault(),B.updateStoredEventData(e,X.storedEventID);var t=B.getStoredEventData(X.storedEventID,X.isNavigationVertical),i=A();if(i)return!0;var n=t.diffMousePos,r=t.startInnerPos+n,o=n>0?"prev":"next",a=X.arrPanes[X.numPanes-1];0==V.grid_carousel&&r>0&&"prev"==o&&(r/=3),0==V.grid_carousel&&-a>r&&"next"==o&&(r=t.startInnerPos+n/3),v(r)}function O(e){if(0==X.touchActive)return!0;B.updateStoredEventData(e,X.storedEventID);var t=B.getStoredEventData(X.storedEventID,X.isNavigationVertical);if(X.touchActive=!1,0==P())return y(),!0;var i=E(),n=i-t.startInnerPos,r=n>0?"prev":"next";"next"==r?0==V.grid_carousel&&Q.isLastPane()?y():Q.nextPane():0==V.grid_carousel&&Q.isFirstPane()?y():Q.prevPane()}function z(){var e=F.getSelectedItem();Y.setThumbSelected(e.objThumbWrapper),d(e.index)}function L(){if(0==X.isTilesMode){Y.initEvents();var e=G.find(".ug-thumb-wrapper");e.on("click touchend",j),H.on(F.events.ITEM_CHANGE,z)}else U.initEvents();G.bind("mousedown touchstart",C),jQuery("body").bind("mousemove touchmove",M),jQuery(window).add("body").bind("mouseup touchend",O)}var H,N,k,R,G,D,Q=this,W=jQuery(this),F=new UniteGalleryMain,B=new UGFunctions,Y=new UGThumbsGeneral,U=new UGTileDesign,V={grid_panes_direction:"left",grid_num_cols:2,grid_min_cols:2,grid_num_rows:2,grid_space_between_cols:10,grid_space_between_rows:10,grid_space_between_mobile:10,grid_transition_duration:300,grid_transition_easing:"easeInOutQuad",grid_carousel:!1,grid_padding:0,grid_vertical_scroll_ondrag:!1};this.events={PANE_CHANGE:"pane_change"};var X={eventSizeChange:"thumb_size_change",isHorizontal:!1,isMaxHeight:!1,isMaxWidth:!1,gridHeight:0,gridWidth:0,innerWidth:0,innerHeight:0,numPanes:0,arrPanes:0,numThumbs:0,currentPane:0,numThumbsInPane:0,isNavigationVertical:!1,touchActive:!1,startScrollPos:0,isFirstTimeRun:!0,isTilesMode:!1,storedEventID:"thumbsgrid",tileMaxWidth:null,tileMaxHeight:null,spaceBetweenCols:null,spaceBetweenRows:null};this.destroy=function(){if(0==X.isTilesMode){var e=G.find(".ug-thumb-wrapper");e.off("click"),e.off("touchend"),H.on(F.events.ITEM_CHANGE),Y.destroy()}else U.destroy();G.unbind("mousedown"),G.unbind("touchstart"),jQuery("body").unbind("mousemove"),jQuery("body").unbind("touchmove"),jQuery(window).add("body").unbind("touchend"),jQuery(window).add("body").unbind("mouseup"),W.off(Q.events.PANE_CHANGE)},this.__________EXTERNAL_GENERAL_________=function(){},this.setThumbUnselected=function(e){Y.setThumbUnselected(e)},this.isItemThumbVisible=function(e){var t=e.index,i=T(t);return i==X.currentPane?!0:!1},this.__________EXTERNAL_API_________=function(){},this.getNumPanesEstimationByHeight=function(e){if(1==X.isTilesMode)var t=V.tile_height;else var i=Y.getOptions(),t=i.thumb_height;var n=Y.getNumThumbs(),r=Math.ceil(n/V.grid_num_cols),o=r*t+(r-1)*X.spaceBetweenRows,a=Math.ceil(o/e);return a},this.getNumPanesEstimationByWidth=function(e){if(X.isTilesMode)var t=V.tile_width;else var i=Y.getOptions(),t=i.thumb_width;var n=Y.getNumThumbs(),r=Math.ceil(n/V.grid_num_rows),o=r*t+(r-1)*X.spaceBetweenCols,a=Math.ceil(o/e);return a},this.getHeightEstimationByWidth=function(e){if(0==X.isTilesMode)throw new Error("This function works only with tiles mode");var t=Y.getNumThumbs(),i=B.getNumItemsInSpace(e,V.tile_width,X.spaceBetweenCols),n=Math.ceil(t/i);n>V.grid_num_rows&&(n=V.grid_num_rows);var r=B.getSpaceByNumItems(n,V.tile_height,X.spaceBetweenRows);return r+=2*V.grid_padding},this.getElement=function(){return G},this.getSize=function(){var e=B.getElementSize(G);return e},this.getNumPanes=function(){return X.numPanes},this.isFirstPane=function(){return 0==X.currentPane?!0:!1},this.isLastPane=function(){return X.currentPane==X.numPanes-1?!0:!1},this.getPaneInfo=function(){var e={pane:X.currentPane,total:X.numPanes};return e},this.getPane=function(){return X.currentPane},this.setWidth=function(e){X.gridWidth=e,X.isHorizontal=!0},this.setMaxWidth=function(e){X.gridWidth=e,X.isMaxWidth=!0,X.isHorizontal=!0},this.setHeight=function(e){X.gridHeight=e,X.isHorizontal=!1},this.setMaxHeight=function(e){X.gridHeight=e,X.isMaxHeight=!0,X.isHorizontal=!1},this.gotoPane=function(e,t){if(0==m(e))return!1;if(e==X.currentPane)return!1;var i=-X.arrPanes[e];X.currentPane=e,b(i),W.trigger(Q.events.PANE_CHANGE,e)},this.nextPane=function(){var e=X.currentPane+1;if(e>=X.numPanes){if(0==V.grid_carousel)return!0;e=0}Q.gotoPane(e,"next")},this.prevPane=function(){var e=X.currentPane-1;return 0>e&&(e=X.numPanes-1,0==V.grid_carousel)?!1:void Q.gotoPane(e,"prev")},this.attachNextPaneButton=function(e){return B.setButtonOnClick(e,Q.nextPane),1==V.grid_carousel?!0:(Q.isLastPane()&&e.addClass("ug-button-disabled"),void W.on(Q.events.PANE_CHANGE,function(){Q.isLastPane()?e.addClass("ug-button-disabled"):e.removeClass("ug-button-disabled")}))},this.attachPrevPaneButton=function(e){return B.setButtonOnClick(e,Q.prevPane),1==V.grid_carousel?!0:(Q.isFirstPane()&&e.addClass("ug-button-disabled"),void W.on(Q.events.PANE_CHANGE,function(){Q.isFirstPane()?e.addClass("ug-button-disabled"):e.removeClass("ug-button-disabled")}))},this.attachBullets=function(e){e.setActive(X.currentPane),jQuery(e).on(e.events.BULLET_CLICK,function(t,i){Q.gotoPane(i,"theme"),e.setActive(i)}),jQuery(Q).on(Q.events.PANE_CHANGE,function(t,i){e.setActive(i)})},this.getObjTileDesign=function(){return U},this.init=function(t,i,n){e(t,i,n)},this.run=function(){r()},this.setHtml=function(e){t(e)}}function UGTiles(){function e(e,i){g_objects=e.getObjects(),re=e,q=jQuery(e),K=g_objects.g_objWrapper,$=g_objects.g_arrItems,ue=jQuery.extend(ue,i),t(),ae.init(e,ue),se=ae.getObjThumbs()}function t(){ue.tiles_min_columns<1&&(ue.tiles_min_columns=1),0!=ue.tiles_max_columns&&ue.tiles_max_columns<ue.tiles_min_columns&&(ue.tiles_max_columns=ue.tiles_min_columns)}function i(e){if(!e)var e=K;J=e;var t=ue.tiles_type;e.addClass("ug-tiletype-"+t),ae.setHtml(e),e.children(".ug-thumb-wrapper").hide()}function n(){if(J.addClass("ug-tiles-rest-mode"),de.isTransInited=!0,1==ue.tiles_enable_transition){J.addClass("ug-tiles-transit");var e=ae.getOptions();1==e.tile_enable_image_effect&&0==e.tile_image_effect_reverse&&J.addClass("ug-tiles-transit-overlays"),de.isTransActive=!0}}function r(){return oe.getElementSize(J).width}function o(){return 0==de.isTransInited?!1:(J.addClass("ug-tiles-transition-active"),J.removeClass("ug-tiles-rest-mode"),0==de.isTransActive?!1:void ae.disableEvents())}function a(){return 0==de.isTransInited?!1:(J.removeClass("ug-tiles-transition-active"),void J.addClass("ug-tiles-rest-mode"))}function s(){1==de.isTransActive?(setTimeout(function(){ae.enableEvents(),ae.triggerSizeChangeEventAllTiles(),a()},800),de.handle&&clearTimeout(de.handle),de.handle=setTimeout(function(){a(),ae.triggerSizeChangeEventAllTiles(),de.handle=null},2e3)):(ae.triggerSizeChangeEventAllTiles(),a())}function l(){le.colWidth=(le.availWidth-le.colGap*(le.numCols-1))/le.numCols,le.colWidth=Math.floor(le.colWidth),le.totalWidth=oe.getSpaceByNumItems(le.numCols,le.colWidth,le.colGap)}function u(){if(le.colWidth=ue.tiles_col_width,le.minCols=ue.tiles_min_columns,le.maxCols=ue.tiles_max_columns,0==re.isMobileMode()?le.colGap=ue.tiles_space_between_cols:le.colGap=ue.tiles_space_between_cols_mobile,le.galleryWidth=r(),le.availWidth=le.galleryWidth,1==ue.tiles_include_padding&&(le.availWidth=le.galleryWidth-2*le.colGap),1==ue.tiles_exact_width)le.numCols=oe.getNumItemsInSpace(le.availWidth,le.colWidth,le.colGap),le.maxCols>0&&le.numCols>le.maxCols&&(le.numCols=le.maxCols),le.numCols<le.minCols?(le.numCols=le.minCols,l()):le.totalWidth=le.numCols*(le.colWidth+le.colGap)-le.colGap;else{var e=oe.getNumItemsInSpaceRound(le.availWidth,le.colWidth,le.colGap);e<le.minCols?e=le.minCols:0!=le.maxCols&&e>le.maxCols&&(e=le.maxCols),le.numCols=e,l()}switch(ue.tiles_align){case"center":default:le.addX=Math.round((le.galleryWidth-le.totalWidth)/2);break;case"left":le.addX=0;break;case"right":le.addX=le.galleryWidth-le.totalWidth}for(le.maxColHeight=0,le.arrPosx=[],col=0;col<le.numCols;col++){var t=oe.getColX(col,le.colWidth,le.colGap);le.arrPosx[col]=t+le.addX}le.colHeights=[0]}function d(){var e=0,t=999999999;for(col=0;col<le.numCols;col++){if(void 0==le.colHeights[col]||0==le.colHeights[col])return col;le.colHeights[col]<t&&(e=col,t=le.colHeights[col])}return e}function _(e,t,i,n){if(null===n||"undefined"==typeof n)var n=d();var r=0;void 0!==le.colHeights[n]&&(r=le.colHeights[n]);var o=ae.getTileHeightByWidth(le.colWidth,e,"placeTile");if(null===o){if(1==ue.tiles_enable_transition)throw new Error("Can't know tile height, please turn off transition");var a=oe.getElementSize(e);o=a.height}var s=le.arrPosx[n];oe.placeElement(e,s,r);var l=r+o;le.colHeights[n]=l+le.colGap,le.maxColHeight<l&&(le.maxColHeight=l),1==t&&e.show().fadeTo(0,1),1==i&&J.height(le.maxColHeight)}function g(e){e||(e=!1),u();var t=se.getThumbs();o(),ae.resizeAllTiles(le.colWidth,ae.resizemode.VISIBLE_ELEMENTS);for(var i=0;i<t.length;i++){var n=jQuery(t[i]),r=void 0;1==ue.tiles_keep_order&&(r=oe.getColByIndex(le.numCols,i)),_(n,e,!1,r)}s();var a=J.height();1==de.isTransActive&&a>le.maxColHeight?setTimeout(function(){J.height(le.maxColHeight)},700):J.height(le.maxColHeight)}function c(e){var t=e.index(),i=re.getItem(t);if(i.ordered_placed===!0)return!1;var n=oe.getPrevRowSameColIndex(t,le.numCols);if(0>n)return!0;var r=re.getItem(n);return r.ordered_placed===!0?!0:!1}function h(e,t){if(t!==!0){var i=c(e);if(0==i)return!1}var n=e.index(),r=oe.getColByIndex(le.numCols,n),o=re.getItem(n);ae.resizeTile(e,le.colWidth),_(e,!0,!0,r),o.ordered_placed=!0;var a=re.getNumItems(),s=oe.getNextRowSameColIndex(n,le.numCols);if(s>=a)return!1;var l=se.getThumbByIndex(s),u=re.getItem(s);se.isThumbLoaded(l);se.isThumbLoaded(l)&&!u.ordered_placed&&h(l,!0)}function p(e,t){if(1==t)return!1;e=jQuery(e);var i=jQuery(e).parent();se.triggerImageLoadedEvent(i,e),1==ue.tiles_keep_order?h(i):(ae.resizeTile(i,le.colWidth),_(i,!0,!0))}function f(){var e=se.getThumbs();de.isAllLoaded=!1,u();var t=Math.abs(le.galleryWidth-le.totalWidth);if(1==ue.tiles_set_initial_height&&0==oe.isScrollbarExists()&&25>t){var i=(e.length,Math.ceil(e.length/le.numCols)),r=i*ue.tiles_col_width*.75;J.height(r),u()}e.fadeTo(0,0);var o=jQuery(J).find("img.ug-thumb-image");if(1==de.isFixedMode)ne.trigger(ie.events.TILES_FIRST_PLACED),g(!0),oe.checkImagesLoaded(o,function(){n(),ne.trigger(ie.events.ALL_TILES_LOADED)});else{var a=le.numCols,s=le.galleryWidth,l=!1;oe.checkImagesLoaded(o,function(){u(),(a!=le.numCols||s!=le.galleryWidth)&&g(!1),n(),ne.trigger(ie.events.ALL_TILES_LOADED)},function(e,t){0==l&&ne.trigger(ie.events.TILES_FIRST_PLACED),l=!0,p(e,t)})}}function m(){var e=r(),t=se.getThumbs(),i=ue.tiles_justified_row_height,n=[],o=0,a=ue.tiles_justified_space_between,s=t.length;jQuery.each(t,function(e,t){t=jQuery(t);var r=se.getItemByThumb(t),a=r.thumbWidth,s=r.thumbHeight;s!==i&&(a=Math.floor(r.thumbRatioByWidth*i)),n[e]=a,o+=a});var l=Math.ceil(o/e);l>s&&(l=s);var u=o/l,d=[],_=0,g=[],c=[],h=0,p=0;jQuery.each(t,function(e,t){var i=n[e];h+i/2>(p+1)*u&&(g[d.length]=_,d.push(c),c=[],_=0,p++),h+=i,_+=i,c.push(t)}),g[d.length]=_,d.push(c);var f=[],m=[],v=0;jQuery.each(d,function(t,r){var o=(r.length,g[t]),s=(r.length-1)*a,l=(e-s)/o,u=Math.round(i*l);v+=u,t>0&&(v+=a),m.push(u);var d=u/i,_=[],c=s;jQuery.each(r,function(e,t){var i=jQuery(t),r=i.index(),o=n[r],a=Math.round(o*d);_[e]=a,c+=a});var h=c-e;jQuery.each(_,function(e,t){return 0==h?!1:(0>h?(_[e]=t+1,h++):(_[e]=t-1,h--),void(e==_.length-1&&0!=h&&(_[e]-=h)))}),f[t]=_});var b={arrRows:d,arrRowWidths:f,arrRowHeights:m,gap:a,totalHeight:v};return b}function v(e){if(!e)var e=!1;var t=r(),i=m();J.height(i.totalHeight);var n=r();n!=t&&(i=m()),o();var a=0,l=0;jQuery.each(i.arrRows,function(t,n){var r=i.arrRowWidths[t],o=i.arrRowHeights[t],s=0;jQuery.each(n,function(t,n){var u=jQuery(n),d=o,_=r[t];ae.resizeTile(u,_,d,ae.resizemode.VISIBLE_ELEMENTS),oe.placeElement(u,s,a),s+=_,s>l&&(l=s),s+=i.gap,1==e&&jQuery(n).show()}),a+=o+i.gap}),s()}function b(){var e=jQuery(K).find("img.ug-thumb-image"),t=se.getThumbs();de.isAllLoaded=!1,t.fadeTo(0,0),oe.checkImagesLoaded(e,function(){setTimeout(function(){v(!0),t.fadeTo(0,1),ne.trigger(ie.events.TILES_FIRST_PLACED),n(),ne.trigger(ie.events.ALL_TILES_LOADED)})},function(e,t){e=jQuery(e);var i=jQuery(e).parent();se.triggerImageLoadedEvent(i,e)})}function y(){var e=jQuery(K).find("img.ug-thumb-image"),t=se.getThumbs();de.isAllLoaded=!1,t.fadeTo(0,0),oe.checkImagesLoaded(e,function(){1==re.isMobileMode()?g(!0):w(!0),ne.trigger(ie.events.TILES_FIRST_PLACED),n(),ne.trigger(ie.events.ALL_TILES_LOADED)},function(e,t){e=jQuery(e);var i=jQuery(e).parent();se.triggerImageLoadedEvent(i,e)})}function I(){var e=r();_e.galleryWidth=e,ee={},_e.colWidth=ue.tiles_nested_col_width,_e.optimalTileWidth=ue.tiles_nested_optimal_tile_width,_e.currentGap=ue.tiles_space_between_cols,1==re.isMobileMode()&&(_e.currentGap=ue.tiles_space_between_cols_mobile),null==_e.colWidth?_e.colWidth=Math.floor(_e.optimalTileWidth/_e.nestedOptimalCols):_e.optimalTileWidth>_e.colWidth?_e.nestedOptimalCols=Math.ceil(_e.optimalTileWidth/_e.colWidth):_e.nestedOptimalCols=1,_e.maxColumns=oe.getNumItemsInSpace(e,_e.colWidth,_e.currentGap),_e.colWidth=oe.getItemSizeInSpace(e,_e.maxColumns,_e.currentGap),_e.gridY=0,te=[];var t=se.getThumbs();switch(t.each(function(){var e=jQuery(this),t=E(e);te.push(t)}),_e.optimalTileWidth>_e.colWidth?_e.nestedOptimalCols=Math.ceil(_e.optimalTileWidth/_e.colWidth):_e.nestedOptimalCols=1,_e.totalWidth=_e.maxColumns*(_e.colWidth+_e.currentGap)-_e.currentGap,ue.tiles_align){case"center":default:_e.addX=Math.round((_e.galleryWidth-_e.totalWidth)/2);break;case"left":_e.addX=0;break;case"right":_e.addX=_e.galleryWidth-_e.totalWidth}_e.maxGridY=0}function w(e){var t=r();I(),P();var i=_e.maxGridY*(_e.colWidth+_e.currentGap)-_e.currentGap;J.height(i);var n=r();n!=t&&(I(),P()),0==ue.tiles_nested_debug&&Y(e)}function E(e){var t,i,n={},r=_e.colWidth,o=_e.currentGap,a=ae.getTileImageSize(e),s=e.index(),l=Math.ceil(T(s)*(1*_e.nestedOptimalCols/3)+2*_e.nestedOptimalCols/3),u=a.width,d=a.height,_=u/d;return u>d?(t=l,i=Math.round(t/_),0==i&&(i=1)):(i=l,t=Math.round(i*_),0==t&&(t=1)),n.dimWidth=t,n.dimHeight=i,n.width=t*r+o*(t-1),n.height=i*r+o*(i-1),n.imgWidth=u,n.imgHeight=d,n.left=0,n.top=0,n}function T(e){return Math.abs(Math.sin(Math.abs(1e3*Math.sin(e))))}function S(e,t){if(0==t){for(var i=_e.currentItem;i<te.length;i++)x(i,!0);_e.currentItem=te.length-1}else x(_e.currentItem,!0);for(var i=0;i<=_e.currentItem;i++)U(i,!0);_e.currentItem++}function P(e){if(1==ue.tiles_nested_debug)return"undefined"==typeof e&&(e=!0),S(!0,e),!1;for(var t=0;t<te.length;t++)x(t,!0)}function x(e,t){if(!t)var t=!1;_e.maxColHeight=0;for(var i=oe.getObjectLength(ee),n=_e.gridY;i+1>=n;n++){for(var r=0;r<_e.maxColumns;r++)if(0==D(_e.gridY)||0==F(_e.gridY,r)){var o=G(r);return void j(e,o,r)}_e.gridY++}}function j(e,t,i){var n=jQuery.extend(!0,{},te[e]),r=n.dimWidth,o=t-n.dimWidth,a=_e.nestedOptimalCols,s=t<=n.dimWidth||.33*a>=o||a>=t;if(s)H(e,t);else if(a>=o)a>=4?1==R(Math.floor(t/2),i)?H(e,Math.floor(t/2)+1):H(e,Math.floor(t/2)):H(objImage,t);else if(1==R(r,i))switch(r>=a){case!0:H(e,r-1);break;case!1:H(e,r+1)}n=jQuery.extend(!0,{},te[e]);var l=z(e,n.dimWidth,i);if(_e.columnsValueToEnableHeightResize<=l[0]&&_e.maxColumns>=2*_e.nestedOptimalCols){var u=L(i,n),d=N(e,u.newHeight,!0);te[e].dimHeight=d.dimHeight;var _=O(l,d.dimWidth,i),g=C(_),c=!1;g>=2&&(c=!0),u.newHeight>=n.dimHeight&&(n=N(e,u.newHeight,!0));var h=A(u.idToResize,u.newHeight,n.dimHeight);n.top=_e.gridY,n.left=i,h.push({tileID:e,sizes:n});var p=k(h),f=k(_);return f>p||1==c?void M(h):void M(_)}n.left=i,n.top=_e.gridY,te[e]=n,Q(e,n,i,_e.gridY),_e.maxGridY=n.top+n.dimHeight}function C(e){for(var t=0,i=0,n=0;n<e.length-1;n++){var r=e[n].sizes,o=-1,a=-1;D(r.top+r.dimHeight)&&_e.maxColumns>r.left+r.dimWidth&&(o=ee[r.top+r.dimHeight-1][r.left+r.dimWidth],a=ee[r.top+r.dimHeight][r.left+r.dimWidth]),o!=a&&t++}for(var n=0;n<e.length-1;n++){var r=e[n].sizes,o=-1,a=-1;D(r.top+r.dimHeight)&&r.left-1>=0&&(o=ee[r.top+r.dimHeight-1][r.left-1],a=ee[r.top+r.dimHeight][r.left-1]),o!=a&&i++}return Math.max(i,t)}function A(e,t,i){var n=te[e],r=n.dimHeight,o=(n.dimWidth,n.left),a=n.top,s=(parseInt(a/(_e.colWidth+_e.currentGap)),parseInt(o/(_e.colWidth+_e.currentGap)),r-t+i),l=N(e,s,!0),u=[];return u.push({tileID:e,sizes:l}),u}function M(e){for(var t=0;t<e.length;t++){var i=e[t].sizes,n=e[t].tileID;te[n]=jQuery.extend(!0,{},i),Q(n,i,i.left,i.top)}}function O(e,t){for(var i=0,n=0,r=[],o=0,a=0,s=0;s<e[1].length;s++){var l=e[1][s],u=te[e[1][s]];if(n+=u.dimHeight,0!=s)i+=u.dimHeight,r.push([l,u.dimHeight]);else{var d=H(l,t,!0);i+=d.dimHeight,r.push([e[1][s],d.dimHeight])}}o=u.left,a=u.top;for(var _=n,g=[],s=r.length-1;s>=0;s--){var c,l=r[s][0];0!=s?(c=Math.max(Math.round(1*n/3),Math.floor(r[s][1]*(n/i))),_-=c,d=N(l,c,!0),d.left=o,d.top=a,g.push({tileID:l,sizes:d}),a+=d.dimHeight):(c=_,d=N(l,c,!0),d.left=o,d.top=a,g.push({tileID:l,sizes:d}))}return g}function z(e,t,i){var n=_e.gridY-1,r=0,o=0,a=1,s=[],l=[];if(s.push(e),n>=0){for(o=0;n>=0;){if(r=ee[n][i],"undefined"!=typeof ee[n][i-1]&&ee[n][i-1]==ee[n][i]||"undefined"!=typeof ee[n][i+t]&&ee[n][i+t-1]==ee[n][i+t]||ee[n][i]!=ee[n][i+t-1])return l.push(a),l.push(s),l;o!=r&&(a++,s.push(r)),n--,o=r}return l.push(a),l.push(s),l}return[0,[]]}function L(e,t){var i=0,n=0,r=t.dimWidth,o=t.dimHeight,a=0,s=0,l=jQuery.map(ee,function(e,t){return[e]});if("undefined"==typeof l[_e.gridY]||"undefined"==typeof l[_e.gridY][e-1])n=0;else for(var u=0;;){if("undefined"==typeof ee[_e.gridY+u]||-1==ee[_e.gridY+u][e-1])break;a=ee[_e.gridY+u][e-2],u++,n++}if("undefined"==typeof l[_e.gridY]||"undefined"==typeof l[_e.gridY][e+r])i=0;else for(u=0;;){if("undefined"==typeof ee[_e.gridY+u]||-1==ee[_e.gridY+u][e+r])break;s=ee[_e.gridY+u][e+r+1],u++,i++}var d=0,_=0;Math.abs(o-n)<Math.abs(o-i)&&0!=n?(d=n,_=a):0!=i?(d=i,_=s):d=o;var g={newHeight:d,idToResize:_};return g}function H(e,t,i){i||(i=!1);var n=_e.colWidth,r=_e.currentGap,o=te[e],a=o.imgWidth,s=o.imgHeight,l=a/s;if(dimWidth=t,dimHeight=Math.round(dimWidth/l),1==i){var u=jQuery.extend(!0,{},o);return u.dimWidth=dimWidth,u.dimHeight=dimHeight,u.width=dimWidth*n+r*(dimWidth-1),u.height=dimHeight*n+r*(dimHeight-1),u}o.dimWidth=dimWidth,o.dimHeight=dimHeight,o.width=dimWidth*n+r*(dimWidth-1),o.height=dimHeight*n+r*(dimHeight-1)}function N(e,t,i){i||(i=!1);var n=te[e],r=n.dimWidth,o=_e.colWidth,a=_e.currentGap;if(1==i){var s=jQuery.extend(!0,{},n);return s.dimHeight=t,s.width=r*o+a*(r-1),s.height=t*o+a*(t-1),s}n.dimHeight=t,n.width=r*o+a*(r-1),n.height=t*o+a*(t-1)}function k(e){for(var t=0,i=0,n=0;n<e.length;n++){var r=te[e[n].tileID];if(0==r.dimHeight||0==r.height)return;resizeVal=r.dimWidth/r.dimHeight/(r.imgWidth/r.imgHeight),resizeVal<1&&(resizeVal=1/resizeVal),t+=resizeVal,i++}return t/i}function R(e,t){var i=_e.gridY-1;return 0>=i||0==D(i)?!1:ee[i][t+e-1]!=ee[i][t+e]?!0:!1}function G(e){var t=e,i=0;if(1==D(_e.gridY))for(;0==F(_e.gridY,t);)i++,t++;else i=_e.maxColumns;return i}function D(e){return"undefined"==typeof ee[e]?!1:!0}function Q(e,t,i,n){for(var r=0;r<t.dimHeight;r++)for(var o=0;o<t.dimWidth;o++)0==D(n+r)&&W(n+r),B(n+r,i+o,e)}function W(e){ee[e]=new Object;for(var t=0;t<_e.maxColumns;t++)ee[e][t]=-1}function F(e,t){return-1!=ee[e][t]}function B(e,t,i){ee[e][t]=i}function Y(e){if(!e)var e=!1;o();for(var t=0;t<te.length;t++)U(t,e);J.height(_e.maxColHeight),s()}function U(e,t){var i=se.getThumbByIndex(e),n=te[e],r=n.top*(_e.colWidth+_e.currentGap),o=_e.addX+n.left*(_e.colWidth+_e.currentGap);ae.resizeTile(i,n.width,n.height,ae.resizemode.VISIBLE_ELEMENTS),oe.placeElement(i,o,r),r+n.height>_e.maxColHeight&&(_e.maxColHeight=r+n.height),1==t&&i.fadeTo(0,1)}function V(){if(1==de.isFirstTimeRun)return!0;if(0==de.isAllLoaded)return!1;switch(ue.tiles_type){case"columns":g(!1);break;case"justified":v(!1);break;case"nested":var e=re.isMobileMode();1==e?g(!1):w(!1)}}function X(){ne.on(ie.events.ALL_TILES_LOADED,function(){return 1==de.isAllLoaded?!0:void(de.isAllLoaded=!0)}),q.on(re.events.SIZE_CHANGE,V),ae.initEvents()}function Z(){switch(K.children(".ug-tile").show(),1==de.isFirstTimeRun&&X(),ae.run(),ue.tiles_type){default:case"columns":f();break;case"justified":b();break;case"nested":y()}de.isFirstTimeRun=!1}var q,K,J,$,ee,te,ie=this,ne=jQuery(this),re=new UniteGalleryMain,oe=new UGFunctions,ae=new UGTileDesign,se=new UGThumbsGeneral,le={},ue={tiles_type:"columns",tiles_col_width:250,tiles_align:"center",tiles_exact_width:!1,tiles_space_between_cols:3,tiles_space_between_cols_mobile:3,tiles_include_padding:!0,tiles_min_columns:2,tiles_max_columns:0,tiles_keep_order:!1,tiles_set_initial_height:!0,tiles_justified_row_height:150,tiles_justified_space_between:3,tiles_nested_optimal_tile_width:250,tiles_nested_col_width:null,tiles_nested_debug:!1,tiles_enable_transition:!0};this.events={THUMB_SIZE_CHANGE:"thumb_size_change",TILES_FIRST_PLACED:"tiles_first_placed",ALL_TILES_LOADED:"all_tiles_loaded"};var de={isFixedMode:!1,isFirstTimeRun:!0,handle:null,isTransActive:!1,isTransInited:!1,isAllLoaded:!1},_e={colWidth:null,nestedOptimalCols:5,gridY:0,maxColumns:0,columnsValueToEnableHeightResize:3,resizeLeftRightToColumn:!0,currentItem:0,currentGap:null,optimalTileWidth:null,maxGridY:0};this.destroy=function(){q.off(re.events.SIZE_CHANGE),ae.destroy()},this.setFixedSizeMode=function(){de.isFixedMode=!0,ae.setFixedMode()},this.init=function(t,i){e(t,i)},this.setHtml=function(e){i(e)},this.getObjTileDesign=function(){return ae},this.run=function(){Z()}}function UGTileDesign(){function e(e,i){D=e,L=jQuery(e);var r=D.getObjects();N=r.g_objWrapper,k=D.getArrItems(),F=jQuery.extend(F,B),F=jQuery.extend(F,i),t(),W.init(e,F);var o={allow_onresize:!1},a=["overlay"];Y.funcCustomTileHtml&&(a=[]),W.setCustomThumbs(n,a,o);var s=W.getOptions();F=jQuery.extend(F,s),Y.ratioByWidth=F.tile_width/F.tile_height,Y.ratioByHeight=F.tile_height/F.tile_width,F.tile_size_by==R.sizeby.GLOBAL_RATIO&&Y.isTextpanelOutside&&(Y.hasImageContainer=!0)}function t(){if(1==F.tile_enable_overlay?(F.thumb_overlay_opacity=F.tile_overlay_opacity,F.thumb_overlay_color=F.tile_overlay_color):0==F.tile_enable_icons?F.thumb_color_overlay_effect=!1:F.thumb_overlay_opacity=0,F.tile_as_link&&(F.thumb_wrapper_as_link=!0,F.thumb_link_newpage=F.tile_link_newpage),1==F.tile_enable_outline&&0==F.tile_enable_border&&(F.tile_enable_outline=!1),Y.tileInnerReduce=0,F.tile_enable_border&&(Y.tileInnerReduce=2*F.tile_border_width,W.setThumbInnerReduce(Y.tileInnerReduce)),Y.isSaparateIcons=!Q.isRgbaSupported(),1==F.tile_enable_textpanel){switch(F.tile_textpanel_position){case"top":F.tile_textpanel_align="top";case"bottom":Y.isTextpanelOutside=!0,F.tile_textpanel_always_on=!0,F.tile_textpanel_offset=0;break;case"inside_top":F.tile_textpanel_align="top";break;case"middle":F.tile_textpanel_align="middle",F.tile_textpanel_appear_type="fade"}0==F.tile_textpanel_always_on&&(Y.isSaparateIcons=!0)}0!=F.tile_textpanel_offset&&(F.tile_textpanel_appear_type="fade",F.tile_textpanel_margin=F.tile_textpanel_offset),"title_and_desc"==F.tile_textpanel_source&&(F.tile_textpanel_enable_description=!0,F.tile_textpanel_desc_style_as_title=!0)}function i(){var e=D.isMobileMode();switch(Y.isTextPanelHidden=!1,1==e&&0==F.tile_textpanel_always_on&&(Y.isTextPanelHidden=!0),Y.isVideoplayIconAlwaysOn=F.tile_videoplay_icon_always_on,F.tile_videoplay_icon_always_on){case"always":Y.isVideoplayIconAlwaysOn=!0;break;case"never":Y.isVideoplayIconAlwaysOn=!1;break;case"mobile_only":Y.isVideoplayIconAlwaysOn=1==e?!0:!1;break;case"desktop_only":Y.isVideoplayIconAlwaysOn=0==e?!0:!1}}function n(e,t){if(e.addClass("ug-tile"),Y.funcCustomTileHtml)return Y.funcCustomTileHtml(e,t),!1;var i="";1==Y.hasImageContainer&&(i+="<div class='ug-image-container ug-trans-enabled'>");var n="ug-thumb-image";(0==F.tile_enable_image_effect||1==F.tile_image_effect_reverse)&&(n+=" ug-trans-enabled");var r=Q.stripTags(t.title);r=Q.htmlentitles(r),i+='<img src="'+Q.escapeDoubleSlash(t.urlThumb)+"\" alt='"+r+"' class='"+n+"'>",1==Y.hasImageContainer&&(i+="</div>"),e.append(i),F.tile_size_by==R.sizeby.GLOBAL_RATIO&&e.fadeTo(0,0);var o={};if(1==F.tile_enable_background&&(o["background-color"]=F.tile_background_color),1==F.tile_enable_border&&(o["border-width"]=F.tile_border_width+"px",o["border-style"]="solid",o["border-color"]=F.tile_border_color,F.tile_border_radius&&(o["border-radius"]=F.tile_border_radius+"px")),1==F.tile_enable_outline&&(o.outline="1px solid "+F.tile_outline_color),1==F.tile_enable_shadow){var a=F.tile_shadow_h+"px ";a+=F.tile_shadow_v+"px ",a+=F.tile_shadow_blur+"px ",a+=F.tile_shadow_spread+"px ",a+=F.tile_shadow_color,o["box-shadow"]=a; +}e.css(o);var s="";if(F.tile_enable_icons){if(0==F.tile_as_link&&1==F.tile_enable_action){var l="ug-button-play ug-icon-zoom";"image"!=t.type&&(l="ug-button-play ug-icon-play"),s+="<div class='ug-tile-icon "+l+"' style='display:none'></div>"}if(t.link&&1==F.tile_show_link_icon||1==F.tile_as_link)if(0==F.tile_as_link){var u="";1==F.tile_link_newpage&&(u=" target='_blank'"),s+="<a href='"+t.link+"'"+u+" class='ug-tile-icon ug-icon-link'></a>"}else s+="<div class='ug-tile-icon ug-icon-link' style='display:none'></div>";var _=Y.isSaparateIcons;if(0==_&&"image"!=t.type&&1==Y.isVideoplayIconAlwaysOn&&(_=!0),_)var g=e;else var g=e.children(".ug-thumb-overlay");g.append(s);var c=g.children("."+l);0==c.length?c=null:c.hide();var h=g.children(".ug-icon-link");0==h.length?h=null:h.hide(),h||1!=F.tile_enable_action||e.addClass("ug-tile-clickable")}else 1==F.tile_enable_action&&e.addClass("ug-tile-clickable");if(1==F.tile_enable_image_effect){var p="";0==F.tile_image_effect_reverse&&(p=" ug-trans-enabled");var f="<div class='ug-tile-image-overlay"+p+"' >",m=" ug-"+F.tile_image_effect_type+"-effect";f+='<img src="'+Q.escapeDoubleSlash(t.urlThumb)+"\" alt='"+t.title+"' class='"+m+p+"'>",f+="</div>",e.append(f),1==F.tile_image_effect_reverse&&e.children(".ug-tile-image-overlay").fadeTo(0,0)}if(1==F.tile_enable_textpanel){var v=new UGTextPanel;v.init(D,F,"tile");var b="";(1==F.tile_textpanel_always_on||1==Y.isTextpanelOutside)&&(b="ug-trans-enabled"),v.appendHTML(e,b);var y=t.title,I="";switch(F.tile_textpanel_source){case"desc":case"description":y=t.description;break;case"desc_title":""!=t.description&&(y=t.description);break;case"title_and_desc":y=t.title,I=t.description}if(v.setTextPlain(y,I),0==F.tile_textpanel_always_on&&v.getElement().fadeTo(0,0),e.data("objTextPanel",v),1==F.tile_textpanel_always_on){var w=d(e);w.css("z-index",2)}if(1==Y.isTextpanelOutside){var E="<div class='ug-tile-cloneswrapper'></div>";e.append(E);var T=e.children(".ug-tile-cloneswrapper"),S=new UGTextPanel;S.init(D,F,"tile"),S.appendHTML(T),S.setTextPlain(y,I),e.data("objTextPanelClone",S)}}null!==t.addHtml&&e.append(t.addHtml)}function r(e){var t=e.children(".ug-tile-image-overlay");return t}function o(e){var t=e.children(".ug-thumb-overlay");return t}function a(e){if(0==Y.hasImageContainer)return null;var t=e.children(".ug-image-container");return t}function s(e){var t=e.find(".ug-tile-image-overlay img");return t}function l(e){var t=e.data("objTextPanel");return t}function u(e){var t=e.data("objTextPanelClone");return t}function d(e){var t=e.children(".ug-textpanel");return t}function _(e){var t=e.find(".ug-tile-cloneswrapper .ug-textpanel");if(0==t.length)throw new Error("text panel cloned element not found");return t}function g(e){if(1==Y.isTextpanelOutside)var t=_(e);else var t=d(e);if(!t)return 0;var i=Q.getElementSize(t);return i.height}function c(e){var t=e.find(".ug-icon-link");return 0==t.length?null:t}function h(e,t){var i=Y.ratioByHeight;switch(F.tile_size_by){default:i=Y.ratioByHeight;break;case R.sizeby.IMAGE_RATIO:if(!e)throw new Error("tile should be given for tile ratio");var n=R.getItemByTile(e);if("undefined"!=typeof n.thumbRatioByHeight){if(0==n.thumbRatioByHeight)throw trace(n),new Error("the item ratio not inited yet");i=n.thumbRatioByHeight}break;case R.sizeby.CUSTOM:return null}return i}function p(e){var t=e.find(".ug-button-play");return 0==t.length?null:t}function f(e){return e.hasClass("ug-thumb-over")?!0:!1}function m(e){return e.hasClass("ug-tile-clickable")}function v(e){return 1==F.tile_enable_icons&&1==Y.isVideoplayIconAlwaysOn&&"image"!=e.type?!0:!1}function b(e,t,i,n){var o=r(e),l=R.getTileImage(e),u=s(e);t-=Y.tileInnerReduce,i-=Y.tileInnerReduce;var d=null;if(1==Y.isTextpanelOutside){var _=g(e);if(i-=_,"top"==F.tile_textpanel_position&&(d=_),1==Y.hasImageContainer){var c=a(e);Q.setElementSize(c,t,i),null!==d&&Q.placeElement(c,0,d)}}if(0==F.tile_enable_image_effect)Q.scaleImageCoverParent(l,t,i),0==Y.hasImageContainer&&null!==d&&Q.placeElement(l,0,d);else{var h="nothing";n===!0&&0==Y.isTextpanelOutside&&(h=1==F.tile_image_effect_reverse?"effect":"image"),"effect"!=h&&(Q.setElementSize(o,t,i),null!==d&&Q.placeElement(o,0,d),Q.scaleImageCoverParent(u,t,i)),"image"!=h&&(1==Y.hasImageContainer?Q.scaleImageCoverParent(l,t,i):"effect"==h?(Q.scaleImageCoverParent(l,t,i),null!==d&&Q.placeElement(l,0,d)):Q.cloneElementSizeAndPos(u,l,!1,null,d))}}function y(e,t,i,n){var r=null;if(i&&(r=i-Y.tileInnerReduce),n&&(n-=Y.tileInnerReduce),"clone"==t){var o=u(e);o.refresh(!0,!0,r);var a=R.getItemByTile(e);return a.textPanelCloneSizeSet=!0,!1}var s=l(e);if(!s)return!1;var d=null;1==Y.isTextpanelOutside&&(d=g(e)),s.refresh(!1,!0,r,d);var _=1==F.tile_textpanel_always_on||"fade"==F.tile_textpanel_appear_type;if(_)if(1==Y.isTextpanelOutside&&n&&"bottom"==F.tile_textpanel_position){var c=n-d;s.positionPanel(c)}else s.positionPanel()}function I(e){var t=(R.getItemByTile(e),p(e)),i=c(e),n=Q.getElementSize(e);b(e,n.width,n.height),1==F.tile_enable_textpanel&&y(e,"regular",n.width,n.height);var r=n.width-Y.tileInnerReduce,a=n.height-Y.tileInnerReduce,s=0;if(1==Y.isTextpanelOutside){var l=g(e);a-=l,"top"==F.tile_textpanel_position&&(s=l)}var u=o(e);if(Q.setElementSizeAndPosition(u,0,s,r,a),t||i){var _=0;if(1==F.tile_enable_textpanel&&0==Y.isTextPanelHidden&&0==Y.isTextpanelOutside){var h=d(e),f=Q.getElementSize(h);f.height>0&&(_=Math.floor(f.height/2*-1))}}if(t&&i){var m=Q.getElementSize(t),v=Q.getElementSize(i),I=F.tile_space_between_icons,w=m.width+I+v.width,E=Math.floor((n.width-w)/2);I>E&&(I=Math.floor((n.width-m.width-v.width)/3),w=m.width+I+v.width,E=Math.floor((n.width-w)/2)),Q.placeElement(t,E,"middle",0,_),Q.placeElement(i,E+m.width+I,"middle",0,_)}else t&&Q.placeElement(t,"center","middle",0,_),i&&Q.placeElement(i,"center","middle",0,_);t&&t.show(),i&&i.show()}function w(e,t){var i=(R.getItemByTile(e),r(e)),n=F.thumb_transition_duration;if(0==F.tile_image_effect_reverse){var o=R.getTileImage(e);t?(o.fadeTo(0,1),i.stop(!0).fadeTo(n,0)):i.stop(!0).fadeTo(n,1)}else t?i.stop(!0).fadeTo(n,1):i.stop(!0).fadeTo(n,0)}function E(e,t){var i=F.thumb_transition_duration,n=d(e);if(!n)return!0;if("slide"==F.tile_textpanel_appear_type){var r=Q.getElementSize(n);if(0==r.width)return!1;var o=-r.height,a=0,s={},l={},u="bottom";"inside_top"==F.tile_textpanel_position&&(u="top"),s[u]=o+"px",l[u]=a+"px",1==t?(n.fadeTo(0,1),0==n.is(":animated")&&n.css(s),l.opacity=1,n.stop(!0).animate(l,i)):n.stop(!0).animate(s,i)}else 1==t?n.stop(!0).fadeTo(i,1):n.stop(!0).fadeTo(i,0)}function T(e,t,i){var n=F.thumb_transition_duration;i&&i===!0&&(n=0);var r=p(e),o=c(e),a=t?1:0;r&&r.stop(!0).fadeTo(n,a),o&&o.stop(!0).fadeTo(n,a)}function S(e,t){if(t=jQuery(t),F.tile_enable_image_effect&&w(t,!0),1==F.tile_enable_textpanel&&0==F.tile_textpanel_always_on&&0==Y.isTextPanelHidden&&E(t,!0),Y.isSaparateIcons&&1==F.tile_enable_icons){var i=1==F.thumb_overlay_reverse,n=R.getItemByTile(t);0==v(n)&&T(t,i,!1)}}function P(e,t){if(t=jQuery(t),F.tile_enable_image_effect&&w(t,!1),1==F.tile_enable_textpanel&&0==F.tile_textpanel_always_on&&E(t,!1),1==Y.isSaparateIcons&&1==F.tile_enable_icons){var i=1==F.thumb_overlay_reverse?!1:!0,n=R.getItemByTile(t);0==v(n)?T(t,i,!1):T(t,!0,!0)}}function x(e){var t=W.getThumbs().not(e);t.each(function(e,t){W.setThumbNormalStyle(jQuery(t))})}function j(e,t,i){return t=jQuery(t),1==F.tile_visible_before_image&&t.data("image_placed")!==!0&&i!==!0?!0:(I(t),void W.setThumbNormalStyle(t))}function C(e,t,i){I(t),i.fadeTo(0,1),t.data("image_placed",!0)}function A(e){return 1==m(e)?(G.trigger(R.events.TILE_CLICK,e),!0):void(0==f(e)&&(x(e),W.setThumbOverStyle(e)))}function M(e){var t=jQuery(this),i=t.prop("tagName").toLowerCase(),n=!0;if(Y.funcParentApproveClick&&0==Y.funcParentApproveClick()&&(n=!1),"a"==i)0==n&&e.preventDefault();else if(0==f(t))1==n&&A(t);else{if(0==m(t))return!0;1==n&&G.trigger(R.events.TILE_CLICK,t)}}function O(e){e.stopPropagation();var t=jQuery(this).parents(".ug-tile"),i=!0;return Y.funcParentApproveClick&&0==Y.funcParentApproveClick()&&(i=!1),0==f(t)?(A(t),!0):1==i?(G.trigger(R.events.TILE_CLICK,t),!1):void 0}function z(e){var t=jQuery(this).parents(".ug-tile");Y.funcParentApproveClick&&0==Y.funcParentApproveClick()&&e.preventDefault(),0==f(t)&&0==F.tile_as_link&&(e.preventDefault(),A(t))}var L,H,N,k,R=this,G=jQuery(this),D=new UniteGalleryMain,Q=new UGFunctions,W=new UGThumbsGeneral;this.resizemode={FULL:"full",WRAPPER_ONLY:"wrapper_only",VISIBLE_ELEMENTS:"visible_elements"},this.sizeby={GLOBAL_RATIO:"global_ratio",TILE_RATIO:"tile_ratio",IMAGE_RATIO:"image_ratio",CUSTOM:"custom"},this.events={TILE_CLICK:"tile_click"};var F={tile_width:250,tile_height:200,tile_size_by:R.sizeby.IMAGE_RATIO,tile_visible_before_image:!1,tile_enable_background:!0,tile_background_color:"#F0F0F0",tile_enable_border:!1,tile_border_width:3,tile_border_color:"#F0F0F0",tile_border_radius:0,tile_enable_outline:!1,tile_outline_color:"#8B8B8B",tile_enable_shadow:!1,tile_shadow_h:1,tile_shadow_v:1,tile_shadow_blur:3,tile_shadow_spread:2,tile_shadow_color:"#8B8B8B",tile_enable_action:!0,tile_as_link:!1,tile_link_newpage:!0,tile_enable_overlay:!0,tile_overlay_opacity:.4,tile_overlay_color:"#000000",tile_enable_icons:!0,tile_show_link_icon:!1,tile_videoplay_icon_always_on:"never",tile_space_between_icons:26,tile_enable_image_effect:!1,tile_image_effect_type:"bw",tile_image_effect_reverse:!1,tile_enable_textpanel:!1,tile_textpanel_source:"title",tile_textpanel_always_on:!1,tile_textpanel_appear_type:"slide",tile_textpanel_position:"inside_bottom",tile_textpanel_offset:0},B={thumb_color_overlay_effect:!0,thumb_overlay_reverse:!0,thumb_image_overlay_effect:!1,tile_textpanel_enable_description:!1,tile_textpanel_bg_opacity:.6,tile_textpanel_padding_top:8,tile_textpanel_padding_bottom:8},Y={ratioByHeight:0,ratioByWidth:0,eventSizeChange:"thumb_size_change",funcCustomTileHtml:null,funcCustomPositionElements:null,funcParentApproveClick:null,isSaparateIcons:!1,tileInnerReduce:0,isTextpanelOutside:!1,hasImageContainer:!1,isVideoplayIconAlwaysOn:!1,isTextPanelHidden:!1};this.loadTileImage=function(e){var t=R.getTileImage(e);Q.checkImagesLoaded(t,null,function(t,i){C(null,e,jQuery(t))})},this.setHtml=function(e){H=e,i(),W.setHtmlThumbs(e)},this.initEvents=function(){W.initEvents(),jQuery(W).on(W.events.SETOVERSTYLE,S),jQuery(W).on(W.events.SETNORMALSTYLE,P),jQuery(W).on(W.events.PLACEIMAGE,C),N.on(Y.eventSizeChange,j),H.delegate(".ug-tile .ug-button-play","click",O),H.delegate(".ug-tile","click",M),H.delegate(".ug-tile .ug-icon-link","click",z)},this.destroy=function(){if(jQuery(W).off(W.events.SETOVERSTYLE),jQuery(W).off(W.events.SETNORMALSTYLE),jQuery(W).off(W.events.PLACEIMAGE),N.off(Y.eventSizeChange),1==F.tile_enable_textpanel){var e=W.getThumbs();jQuery.each(e,function(e,t){var i=l(jQuery(t));i&&i.destroy()})}W.destroy()},this.init=function(t,i,n){e(t,i,n)},this.setFixedMode=function(){F.tile_size_by=R.sizeby.GLOBAL_RATIO,F.tile_visible_before_image=!0},this.setApproveClickFunction=function(e){Y.funcParentApproveClick=e},this.resizeTile=function(e,t,i,n){if(1==Y.isTextpanelOutside&&y(e,"clone",t),t){if(!i)var i=R.getTileHeightByWidth(t,e,"resizeTile")}else var t=F.tile_width,i=F.tile_height;switch(Q.setElementSize(e,t,i),n){default:case R.resizemode.FULL:R.triggerSizeChangeEvent(e,!0);break;case R.resizemode.WRAPPER_ONLY:return!0;case R.resizemode.VISIBLE_ELEMENTS:if(Y.funcCustomTileHtml)return R.triggerSizeChangeEvent(e,!0),!0;b(e,t,i,!0),1==F.tile_enable_textpanel&&1==F.tile_textpanel_always_on&&t&&y(e,"regular",t,i)}},this.resizeAllTiles=function(e,t){i();var n=null;F.tile_size_by==R.sizeby.GLOBAL_RATIO&&(n=R.getTileHeightByWidth(e,null,"resizeAllTiles"));var r=W.getThumbs();r.each(function(i,r){R.resizeTile(jQuery(r),e,n,t)})},this.triggerSizeChangeEvent=function(e,t){if(!e)return!1;if(!t)var t=!1;N.trigger(Y.eventSizeChange,[e,t])},this.triggerSizeChangeEventAllTiles=function(e){var t=W.getThumbs();t.each(function(){var t=jQuery(this);R.triggerSizeChangeEvent(t,e)})},this.disableEvents=function(){var e=W.getThumbs();e.css("pointer-events","none")},this.enableEvents=function(){var e=W.getThumbs();e.css("pointer-events","auto")},this.setOptions=function(e){F=jQuery.extend(F,e),W.setOptions(e)},this.setTileSizeOptions=function(e){if(F.tile_size_by!==R.sizeby.GLOBAL_RATIO)throw new Error("setNewTileOptions works with global ration only");F.tile_width=e,F.tile_height=Math.floor(e*Y.ratioByHeight)},this.setCustomFunctions=function(e,t){Y.funcCustomTileHtml=e,Y.funcCustomPositionElements=t},this.run=function(){var e=W.getThumbs();F.tile_size_by==R.sizeby.GLOBAL_RATIO&&R.resizeAllTiles(F.tile_width,R.resizemode.WRAPPER_ONLY),1==F.tile_enable_image_effect&&0==F.tile_image_effect_reverse&&e.children(".ug-thumb-image").fadeTo(0,0),W.setHtmlProperties(),1==F.tile_visible_before_image&&(e.children(".ug-thumb-image").fadeTo(0,0),W.loadThumbsImages())},this._____________EXTERNAL_GETTERS____________=function(){},this.getObjThumbs=function(){return W},this.getOptions=function(){return F},this.getTileImage=function(e){var t=e.find("img.ug-thumb-image");return t},this.getItemByTile=function(e){return W.getItemByThumb(e)},this.getTileHeightByWidth=function(e,t,i){var n=h(t,i);if(null===n)return null;var r=Math.floor((e-Y.tileInnerReduce)*n)+Y.tileInnerReduce;return t&&1==Y.isTextpanelOutside&&F.tile_size_by==R.sizeby.IMAGE_RATIO&&(r+=g(t)),r},this.getTileImageSize=function(e){var t=R.getItemByTile(e);if(!t.thumbWidth||!t.thumbHeight)throw new Error("Can't get image size - image not inited.");var i={width:t.thumbWidth,height:t.thumbHeight};return i},this.getGlobalTileSize=function(){if(F.tile_size_by!=R.sizeby.GLOBAL_RATIO)throw new Error("The size has to be global ratio");var e={width:F.tile_width,height:F.tile_height};return e}}function UGAviaControl(){function e(e){return 0==p?e.pageX:e.pageY}function t(t){jQuery("body").on("touchstart",function(e){return 0==f.isControlEnabled?!0:void(f.touchEnabled=!0)}),jQuery("body").mousemove(function(t){if(0==f.isControlEnabled)return!0;if(1==f.touchEnabled)return jQuery("body").off("mousemove"),!0;f.isMouseInsideStrip=g.ismouseover();var i=u.isTouchMotionActive();if(1==f.isMouseInsideStrip&&0==i){var n=e(t);l(n)}else a()})}function i(e){var t=h.strip_padding_top,i=(h.strip_padding_bottom,g.height()),n=c.height();if(i>n)return null;var r=g.offset(),o=r.top,a=e-o-t;if(0>a)return null;var s=h.thumb_height,l=i-h.thumb_height,u=l-s;s>a&&(a=s),a>l&&(a=l);var d=(a-s)/u,_=(n-i)*d;return _=-1*Math.round(_)+t}function n(e){var t=h.strip_padding_left,i=h.strip_padding_right,n=g.width()-t-i,r=c.width();if(n>r)return null;var o=g.offset(),a=o.left,s=e-a-t,l=h.thumb_width,u=n-h.thumb_width,d=u-l;l>s&&(s=l),s>u&&(s=u);var _=(s-l)/d,p=(r-n)*_;return p=-1*Math.round(p)+t}function r(){if(0==f.is_strip_moving)return!1;var e=u.getInnerStripPos();Math.floor(e)==Math.floor(f.strip_finalPos)&&a();var t,i=Math.abs(f.strip_finalPos-e);1>i?t=i:(t=i/4,t>0&&1>t&&(t=1)),f.strip_finalPos<e&&(t=-1*t);var n=e+t;u.positionInnerStrip(n)}function o(){return 1==f.isStripMoving?!1:(f.isStripMoving=!0,void(f.handle_timeout=setInterval(r,10)))}function a(){return 0==f.isStripMoving?!1:(f.isStripMoving=!1,void(f.handle_timeout=clearInterval(f.handle_timeout)))}function s(e){return 0==p?n(e):i(e)}function l(e){var t=s(e);return null===t?!1:(f.is_strip_moving=!0,f.strip_finalPos=t,void o())}var u,d,_,g,c,h,p,f={touchEnabled:!1,isMouseInsideStrip:!1,strip_finalPos:0,handle_timeout:"",isStripMoving:!1,isControlEnabled:!0};this.enable=function(){f.isControlEnabled=!0},this.disable=function(){f.isControlEnabled=!1},this.init=function(e){u=e,_=e.getObjects(),d=_.g_gallery,g=_.g_objStrip,c=_.g_objStripInner,h=_.g_options,p=_.isVertical,t()},this.destroy=function(){jQuery("body").off("touchstart"),jQuery("body").off("mousemove")}}function UGSlider(){function e(e,t,n){me=e,n&&(he=n,t=we.convertCustomPrefixOptions(t,he,"slider")),te=jQuery(e);var r=me.getObjects();if(ie=r.g_objWrapper,ne=r.g_objThumbs,t.hasOwnProperty("slider_progress_indicator_type")&&(Se.slider_progress_indicator_type=t.slider_progress_indicator_type),"bar"==Se.slider_progress_indicator_type&&(Se=jQuery.extend(Se,Pe)),t&&pe.setOptions(t),i(),1==Se.slider_enable_bullets){ye=new UGBullets;var o={bullets_skin:Se.slider_bullets_skin,bullets_space_between:Se.slider_bullets_space_between};ye.init(me,o)}Se.slider_enable_text_panel&&(Te=new UGTextPanel,Te.init(me,Se,"slider")),Se.slider_enable_zoom_panel&&(ce=new UGZoomButtonsPanel,ce.init(pe,Se));var a=me.getGalleryID();Ie.init(Se,!1,a)}function t(){if(1==xe.isRunOnce)return!1;if(xe.isRunOnce=!0,Se.slider_background_color){var e=Se.slider_background_color;1!=Se.slider_background_opacity&&(e=we.convertHexToRGB(e,Se.slider_background_opacity)),re.css("background-color",e)}else 1!=Se.slider_background_opacity&&(e=we.convertHexToRGB("#000000",Se.slider_background_opacity),re.css("background-color",e));1==Se.slider_control_swipe&&(_e=new UGTouchSliderControl,_e.init(pe,Se)),1==Se.slider_control_zoom&&(ge=new UGZoomSliderControl,ge.init(pe,Se)),Te&&Te.run(),X()}function i(){var e=me.getOptions(),t=e.gallery_skin;""==Se.slider_bullets_skin&&(Se.slider_bullets_skin=t),""==Se.slider_arrows_skin&&(Se.slider_arrows_skin=t),""==Se.slider_zoompanel_skin&&(Se.slider_zoompanel_skin=t),""==Se.slider_play_button_skin&&(Se.slider_play_button_skin=t),""==Se.slider_fullscreen_button_skin&&(Se.slider_fullscreen_button_skin=t),Se.video_enable_closebutton=Se.slider_video_enable_closebutton,"zoom"!=e.gallery_mousewheel_role&&(Se.slider_zoom_mousewheel=!1)}function n(e,t){var i="ug-type-square";"round"==Se.slider_videoplay_button_type&&(i="ug-type-round");var n="";return n+="<div class='ug-slide-wrapper ug-slide"+t+"'>",n+="<div class='ug-item-wrapper'></div>",n+="<div class='ug-slider-preloader "+e+"'></div>",n+="<div class='ug-button-videoplay "+i+"' style='display:none'></div>",n+="</div>"}function r(e){e&&(ie=e);var t=Z(),i=(me.getOptions(),"<div class='ug-slider-wrapper'>");if(i+="<div class='ug-slider-inner'>",i+=n(t,1),i+=n(t,2),i+=n(t,3),i+="</div>",1==Se.slider_enable_arrows&&(i+="<div class='ug-slider-control ug-arrow-left ug-skin-"+Se.slider_arrows_skin+"'></div>",i+="<div class='ug-slider-control ug-arrow-right ug-skin-"+Se.slider_arrows_skin+"'></div>"),1==Se.slider_enable_play_button&&(i+="<div class='ug-slider-control ug-button-play ug-skin-"+Se.slider_play_button_skin+"'></div>"),1==Se.slider_enable_fullscreen_button&&(i+="<div class='ug-slider-control ug-button-fullscreen ug-skin-"+Se.slider_fullscreen_button_skin+"'></div>"),i+="</div>",ie.append(i),re=ie.children(".ug-slider-wrapper"),oe=re.children(".ug-slider-inner"),ae=oe.children(".ug-slide1"),se=oe.children(".ug-slide2"),le=oe.children(".ug-slide3"),ae.data("slidenum",1),se.data("slidenum",2),le.data("slidenum",3),ye&&ye.appendHTML(re),1==Se.slider_enable_arrows&&(ue=re.children(".ug-arrow-left"),de=re.children(".ug-arrow-right")),1==Se.slider_enable_play_button&&(ve=re.children(".ug-button-play")),1==Se.slider_enable_fullscreen_button&&(be=re.children(".ug-button-fullscreen")),1==Se.slider_enable_progress_indicator){Ee=we.initProgressIndicator(Se.slider_progress_indicator_type,Se,re);var r=Ee.getType();"bar"==r&&"pie"==Se.slider_progress_indicator_type&&(Se.slider_progress_indicator_type="bar",Se=jQuery.extend(Se,Pe)),me.setProgressIndicator(Ee)}if(1==Se.slider_enable_text_panel&&(Te.appendHTML(re),0==Se.slider_textpanel_always_on)){var o=Te.getElement();o.hide().data("isHidden",!0),xe.isTextPanelSaparateHover=!0}1==Se.slider_enable_zoom_panel&&ce.appendHTML(re),Ie.setHtml(oe)}function o(e){var t=J(e);we.placeElementInParentCenter(t);var i=$(e);we.placeElementInParentCenter(i)}function a(){if(ye&&(objBullets=ye.getElement(),we.placeElement(objBullets,Se.slider_bullets_align_hor,Se.slider_bullets_align_vert,Se.slider_bullets_offset_hor,Se.slider_bullets_offset_vert),we.placeElement(objBullets,Se.slider_bullets_align_hor,Se.slider_bullets_align_vert,Se.slider_bullets_offset_hor,Se.slider_bullets_offset_vert)),1==Se.slider_enable_arrows&&(we.placeElement(ue,Se.slider_arrow_left_align_hor,Se.slider_arrow_left_align_vert,Se.slider_arrow_left_offset_hor,Se.slider_arrow_left_offset_vert),we.placeElement(de,Se.slider_arrow_right_align_hor,Se.slider_arrow_left_align_vert,Se.slider_arrow_right_offset_hor,Se.slider_arrow_right_offset_vert)),0==Se.slider_controls_always_on&&M(!0),Ee){var e=Ee.getElement();if("bar"==Se.slider_progress_indicator_type){var t=re.width();Ee.setSize(t),we.placeElement(e,"left",Se.slider_progress_indicator_align_vert,0,Se.slider_progress_indicator_offset_vert)}else we.placeElement(e,Se.slider_progress_indicator_align_hor,Se.slider_progress_indicator_align_vert,Se.slider_progress_indicator_offset_hor,Se.slider_progress_indicator_offset_vert)}Te&&Te.positionPanel(),s(),o(ae),o(se),o(le),C()}function s(){if(ve&&we.placeElement(ve,Se.slider_play_button_align_hor,Se.slider_play_button_align_vert,Se.slider_play_button_offset_hor,Se.slider_play_button_offset_vert),be&&we.placeElement(be,Se.slider_fullscreen_button_align_hor,Se.slider_fullscreen_button_align_vert,Se.slider_fullscreen_button_offset_hor,Se.slider_fullscreen_button_offset_vert),ce){var e=ce.getElement();we.placeElement(e,Se.slider_zoompanel_align_hor,Se.slider_zoompanel_align_vert,Se.slider_zoompanel_offset_hor,Se.slider_zoompanel_offset_vert)}}function l(){var e,t,i,n,r=pe.getSlidesReference(),o=0,a=0,s=0;i=pe.isSlideHasItem(r.objNextSlide),n=pe.isSlideHasItem(r.objPrevSlide),n?(s=r.objPrevSlide.outerWidth(),r.objPrevSlide.css("z-index",1)):r.objPrevSlide.hide(),t=s+r.objCurrentSlide.outerWidth(),e=t,i?(e=t+r.objNextSlide.outerWidth(),r.objPrevSlide.css("z-index",2)):r.objNextSlide.hide(),r.objCurrentSlide.css("z-index",3),we.placeElement(r.objCurrentSlide,s,o),oe.css({left:-s+"px",width:e+"px"}),n&&(we.placeElement(r.objPrevSlide,a,o),we.showElement(r.objPrevSlide)),i&&(we.showElement(r.objNextSlide),we.placeElement(r.objNextSlide,t,o))}function u(e){var t=e.data("index");if(void 0===t||null==t)return!1;var i=me.getItem(t);return i?void f(e,i):!1}function d(e){e.stop(!0).show(100)}function _(e){e.stop(!0).hide(100)}function g(e,t){var i=Se.slider_image_border_width;if(10>=i)return i;var n=we.getElementSize(e),r=n.width,o=n.height;if(t&&(t.hasOwnProperty("imageWidth")&&(r=t.imageWidth),t.hasOwnProperty("imageHeight")&&(o=t.imageHeight)),0>=r)return i;var a=o>r?r:o,s=2*i,l=s/a;if(l<Se.slider_image_border_maxratio)return i;var i=a*Se.slider_image_border_maxratio/2;return i=Math.round(i)}function c(e,t,i){var n={};if(1==Se.slider_image_border){n["border-style"]="solid";var r=g(e,i);n["border-width"]=r+"px",n["border-color"]=Se.slider_image_border_color,n["border-radius"]=Se.slider_image_border_radius}"image"!=t&&1==Se.slider_video_constantsize&&(n["background-color"]="#000000"),1==Se.slider_image_shadow&&(n["box-shadow"]="3px 3px 10px 0px #353535"),e.css(n)}function h(e,t){var i=Se.slider_video_constantsize_width,n=Se.slider_video_constantsize_height,r=Se.slider_video_constantsize_scalemode,o=we.scaleImageExactSizeInParent(e,t.imageWidth,t.imageHeight,i,n,r);return o}function p(e,t,i){var n=e.children(".ug-item-wrapper"),r=J(e);if("undefined"==typeof t.urlImage||""==t.urlImage)throw new Error("The slide don't have big image defined ( data-image='imageurl' ). Please check gallery items.","showbig");var o=t.urlImage,a=e.data("urlImage");e.data("urlImage",o);var s=pe.getScaleMode(e),l=pe.getSlideType(e);if(objPadding=pe.getObjImagePadding(),a==o&&i!==!0){var u=n.children("img");(0==t.imageWidth||0==t.imageHeight)&&me.checkFillImageSize(u,t);var g={};g="image"!=l&&1==Se.slider_video_constantsize?h(u,t):we.scaleImageFitParent(u,t.imageWidth,t.imageHeight,s,objPadding),c(u,l,g),fe.trigger(pe.events.AFTER_PUT_IMAGE,e)}else if(u=we.placeImageInsideParent(o,n,t.imageWidth,t.imageHeight,s,objPadding),1==t.isBigImageLoaded){if(u.fadeTo(0,1),_(r),"image"!=l&&1==Se.slider_video_constantsize)var g=h(u,t);else var g=we.getImageInsideParentData(n,t.imageWidth,t.imageHeight,s,objPadding);u.css("width",g.imageWidth+"px"),c(u,l,g),fe.trigger(pe.events.AFTER_PUT_IMAGE,e)}else u.fadeTo(0,0),d(r),e.data("isLoading",!0),pe.isSlideCurrent(e)&&fe.trigger(pe.events.CURRENTSLIDE_LOAD_START),u.data("itemIndex",t.index),u.on("load",function(){var e=jQuery(this),t=e.data("itemIndex");e.fadeTo(0,1);var i=e.parent().parent(),n=pe.getSlideType(i),r=J(i),o=pe.getObjImagePadding(),a=pe.getScaleMode(i);_(r),i.data("isLoading",!1),pe.isSlideCurrent(i)&&fe.trigger(pe.events.CURRENTSLIDE_LOAD_END),me.onItemBigImageLoaded(null,e);var s=me.getItem(t),l={};"image"!=n&&1==Se.slider_video_constantsize?h(e,s):l=we.scaleImageFitParent(e,s.imageWidth,s.imageHeight,a,o),e.fadeTo(0,1),c(e,n,l),fe.trigger(pe.events.AFTER_PUT_IMAGE,i)})}function f(e,t){try{var i=e.children(".ug-item-wrapper");if(null==t)return i.html(""),e.removeData("index"),e.removeData("type"),e.removeData("urlImage"),!1;e.data("index");e.data("index",t.index),e.data("type",t.type),1==Se.slider_enable_links&&"image"==t.type&&(t.link?e.addClass("ug-slide-clickable"):e.removeClass("ug-slide-clickable")),p(e,t);var n=$(e);switch(t.type){case"image":n.hide();break;default:n.show()}}catch(r){throw"undefined"!=typeof r.fileName&&"showbig"==r.fileName&&me.showErrorMessageReplaceGallery(r.message),i.html(""),new Error(r)}}function m(){if(!Te)return!1;if(1==b())return!1;var e=Te.getElement(),t=0;(1==xe.isTextPanelSaparateHover||1==Se.slider_textpanel_always_on)&&(t=Se.slider_controls_appear_duration),e.stop().fadeTo(t,0),e.data("isHidden",!0)}function v(){if(!Te)return!1;if(0==b())return!1;var e=Te.getElement(),t=0;(1==xe.isTextPanelSaparateHover||1==Se.slider_textpanel_always_on)&&(e.show(),Te.positionElements(),t=Se.slider_controls_appear_duration),e.stop().show().fadeTo(t,1),e.data("isHidden",!1)}function b(){var e=Te.getElement(),t=e.data("isHidden");return t===!1?!1:!0}function y(e,t){if(void 0==t)var t=pe.getCurrentSlide();var i=pe.getSlideType(t);if(i!=e)throw new Error("Wrong slide type: "+i+", should be: "+e);return!0}function I(){var e=pe.getCurrentSlide(),t=pe.getSlideImage(e),i=we.getElementSize(e),n=i.left,r=i.top;if(1==Se.slider_video_constantsize){var o=we.getElementSize(t);n+=o.left,r+=o.top}else n+=Se.slider_video_padding_left,r+=Se.slider_video_padding_top;Ie.setPosition(n,r)}function w(){var e=Se.slider_video_constantsize_width,t=Se.slider_video_constantsize_height;Ie.setSize(e,t);var i=Ie.getObject();c(i,"video")}function E(e,t,i){fe.trigger(pe.events.TRANSITION_START);var n=Se.slider_transition;switch(i&&(n=i),pe.stopSlideAction(null,!0),n){default:case"fade":P(t);break;case"slide":T(e,t);break;case"lightbox_open":P(t,!1,!0)}}function T(e,t){var i=pe.isAnimating();if(1==i)return xe.itemWaiting=t,!0;null!=xe.itemWaiting&&(xe.itemWaiting=null);var n=pe.getSlidesReference();switch(e){case"right":f(n.objPrevSlide,t),l();var r=we.getElementSize(n.objPrevSlide),o=-r.left;pe.switchSlideNums("right");break;case"left":f(n.objNextSlide,t),l();var a=we.getElementSize(n.objNextSlide),o=-a.left;pe.switchSlideNums("left");break;default:throw new Error("wrong direction: "+e)}var s=Se.slider_transition_speed,u=Se.slider_transition_easing,d={duration:s,easing:u,queue:!1,always:function(){if(pe.stopSlideAction(),Ie.hide(),null!=xe.itemWaiting){var e=K(xe.itemWaiting);T(e,xe.itemWaiting)}else pe.placeNabourItems(),fe.trigger(pe.events.TRANSITION_END)}};oe.animate({left:o+"px"},d)}function S(e,t,i){i?e.fadeTo(Se.slider_transition_speed,t,i):e.fadeTo(Se.slider_transition_speed,t)}function P(e,t,i){if(!t)var t=!1;var n=pe.getSlidesReference();f(n.objNextSlide,e);var r=we.getElementSize(n.objCurrentSlide);we.placeElement(n.objNextSlide,r.left,r.top);var o=xe.numCurrent;if(xe.numCurrent=xe.numNext,xe.numNext=o,fe.trigger(pe.events.ITEM_CHANGED),n.objNextSlide.stop(!0),n.objCurrentSlide.stop(!0),1==t)n.objCurrentSlide.fadeTo(0,0),n.objNextSlide.fadeTo(0,1),pe.placeNabourItems(),fe.trigger(pe.events.TRANSITION_END),i!==!0&&Ie.hide();else{if(n.objNextSlide.fadeTo(0,0),S(n.objCurrentSlide,0,function(){pe.placeNabourItems(),fe.trigger(pe.events.TRANSITION_END),i!==!0&&Ie.hide()}),1==Ie.isVisible()){var a=Ie.getObject();S(a,0)}S(n.objNextSlide,1)}}function x(){1==Se.slider_fullscreen_button_mobilehide&&be&&be.hide(),1==Se.slider_play_button_mobilehide&&ve&&ve.hide(),1==Se.slider_zoompanel_mobilehide&&ce&&ce.getElement().hide()}function j(){1==Se.slider_fullscreen_button_mobilehide&&be&&be.show(),1==Se.slider_play_button_mobilehide&&ve&&ve.show(),1==Se.slider_zoompanel_mobilehide&&ce&&ce.getElement().show()}function C(){var e=me.isMobileMode();e?x():j()}function A(){var e=re.children(".ug-slider-control");return e}function M(e){if(0==we.isTimePassed("sliderControlsToggle"))return!1;if(0==xe.isControlsVisible)return!1;if(!e)var e=!1;var t=A();e===!0?t.stop().fadeTo(0,0).hide():t.stop().fadeTo(Se.slider_controls_appear_duration,0,function(){t.hide()}),xe.isControlsVisible=!1}function O(e){if(0==we.isTimePassed("sliderControlsToggle"))return!1;if(1==xe.isControlsVisible)return!0;if(!e)var e=!1;var t=A();e===!0?t.stop().show():(t.stop().show().fadeTo(0,0),t.fadeTo(Se.slider_controls_appear_duration,1)),xe.isControlsVisible=!0}function z(){0==xe.isControlsVisible?O():M()}function L(e){if(e==xe.currentControlsMode)return!1;switch(e){case"image":ce&&ce.getElement().show();break;case"video":ce&&ce.getElement().hide();break;default:throw new Error("wrong controld mode: "+e)}xe.currentControlsMode=e}function H(e,t,i){var n=me.getSelectedItem();pe.setItem(n,!1,i);var r=n.index;ye&&ye.setActive(r),Te&&0==xe.isTextPanelSaparateHover&&v(),L("image"==n.type?"image":"video")}function N(e,t){me.selectItem(t)}function k(e){return _e&&0==_e.isTapEventOccured(e)?!0:void fe.trigger(pe.events.CLICK,e)}function R(){var e=pe.getCurrentSlide(),t=e.hasClass("ug-slide-clickable"),i=pe.getCurrentItem();return t?(0==Se.slider_links_newpage?location.href=i.link:window.open(i.link,"_blank"),!0):void(0==Se.slider_controls_always_on&&1==Se.slider_controls_appear_ontap&&1==pe.isCurrentSlideType("image")&&(z(),Te&&1==Se.slider_textpanel_always_on&&pe.isCurrentSlideType("image")&&pe.isCurrentSlideImageFit()&&v()))}function G(e){Te&&pe.isCurrentSlideType("image")&&0==pe.isCurrentSlideImageFit()&&m()}function D(){O()}function Q(){M()}function W(e){var t=e.parent();pe.startSlideAction(t)}function F(){me.isPlayMode()&&me.pausePlaying(),fe.trigger(pe.events.ACTION_START)}function B(){me.isPlayMode()&&me.continuePlaying(),fe.trigger(pe.events.ACTION_END)}function Y(e,t,i){ae.data("index")==t&&(objItem=me.getItem(t),p(ae,objItem,!0)),se.data("index")==t&&(objItem=me.getItem(t),p(se,objItem,!0)),le.data("index")==t&&(objItem=me.getItem(t),p(le,objItem,!0))}function U(e,t){t=jQuery(t);var i=pe.getSlideImage(t),n=$(t),r=we.getElementSize(i);we.placeElement(n,"center","middle",r.left,r.top,i)}function V(e){var t=$(e);we.addClassOnHover(t),we.setButtonOnClick(t,W)}function X(){te.on(me.events.ITEM_IMAGE_UPDATED,Y),te.on(me.events.ITEM_CHANGE,H),ye&&jQuery(ye).on(ye.events.BULLET_CLICK,N),1==Se.slider_enable_arrows&&(we.addClassOnHover(de,"ug-arrow-hover"),we.addClassOnHover(ue,"ug-arrow-hover"),me.setNextButton(de),me.setPrevButton(ue)),0==Se.slider_controls_always_on&&re.hover(D,Q),re.on("touchend click",k),fe.on(pe.events.CLICK,R),Te&&1==xe.isTextPanelSaparateHover&&re.hover(v,m),ve&&(we.addClassOnHover(ve,"ug-button-hover"),me.setPlayButton(ve)),be&&(we.addClassOnHover(be,"ug-button-hover"),me.setFullScreenToggleButton(be)),ge&&fe.on(pe.events.ZOOM_CHANGE,G),ce&&ce.initEvents(),Ie.initEvents(),jQuery(Ie).on(Ie.events.SHOW,F),jQuery(Ie).on(Ie.events.HIDE,B),V(ae),V(se),V(le),fe.on(pe.events.AFTER_PUT_IMAGE,U),re.delegate(".ug-item-wrapper img","mouseenter",function(e){fe.trigger(pe.events.IMAGE_MOUSEENTER)}),re.delegate(".ug-item-wrapper img","mouseleave",function(e){var t=pe.isMouseInsideSlideImage(e);0==t&&fe.trigger(pe.events.IMAGE_MOUSELEAVE)})}function Z(){var e;switch(Se.slider_loader_type){ +default:case 1:e="ug-loader1";break;case 2:e="ug-loader2";break;case 3:e="ug-loader3";break;case 4:e="ug-loader4";break;case 5:e="ug-loader5";break;case 6:e="ug-loader6";break;case 7:e="ug-loader7";break;case 8:e="ug-loader8";break;case 9:e="ug-loader9"}return"black"==Se.slider_loader_color&&(e+=" ug-loader-black"),e}function q(e){switch(e){case 1:return ae;case 2:return se;case 3:return le;default:throw new Error("wrong num: "+e)}}function K(e){var t=pe.getSlidesReference(),i=t.objCurrentSlide.data("index"),n=e.index,r="left";return i>n&&(r="right"),r}function J(e){if(!e)var e=pe.getCurrentSlide();var t=e.children(".ug-slider-preloader");return t}function $(e){var t=e.children(".ug-button-videoplay");return t}function ee(e){if(!e)var e=pe.getCurrentSlide();var t=e.data("index");if(void 0==t)return null;var i=me.getItem(t);return i}var te,ie,ne,re,oe,ae,se,le,ue,de,_e,ge,ce,he,pe=this,fe=jQuery(pe),me=new UniteGalleryMain,ve=null,be=null,ye=null,Ie=new UGVideoPlayer,we=new UGFunctions,Ee=null,Te=null;this.events={ITEM_CHANGED:"item_changed",BEFORE_SWITCH_SLIDES:"before_switch",BEFORE_RETURN:"before_return",AFTER_RETURN:"after_return",ZOOM_START:"slider_zoom_start",ZOOM_END:"slider_zoom_end",ZOOMING:"slider_zooming",ZOOM_CHANGE:"slider_zoom_change",START_DRAG:"start_drag",AFTER_DRAG_CHANGE:"after_drag_change",ACTION_START:"action_start",ACTION_END:"action_end",CLICK:"slider_click",TRANSITION_START:"slider_transition_start",TRANSITION_END:"slider_transition_end",AFTER_PUT_IMAGE:"after_put_image",IMAGE_MOUSEENTER:"slider_image_mouseenter",IMAGE_MOUSELEAVE:"slider_image_mouseleave",CURRENTSLIDE_LOAD_START:"slider_current_loadstart",CURRENTSLIDE_LOAD_END:"slider_current_loadend"};var Se={slider_scale_mode:"fill",slider_scale_mode_media:"fill",slider_scale_mode_fullscreen:"down",slider_item_padding_top:0,slider_item_padding_bottom:0,slider_item_padding_left:0,slider_item_padding_right:0,slider_background_color:"",slider_background_opacity:1,slider_image_padding_top:0,slider_image_padding_bottom:0,slider_image_padding_left:0,slider_image_padding_right:0,slider_image_border:!1,slider_image_border_width:10,slider_image_border_color:"#ffffff",slider_image_border_radius:0,slider_image_border_maxratio:.35,slider_image_shadow:!1,slider_video_constantsize:!1,slider_video_constantsize_scalemode:"fit",slider_video_constantsize_width:854,slider_video_constantsize_height:480,slider_video_padding_top:0,slider_video_padding_bottom:0,slider_video_padding_left:0,slider_video_padding_right:0,slider_video_enable_closebutton:!0,slider_transition:"slide",slider_transition_speed:300,slider_transition_easing:"easeInOutQuad",slider_control_swipe:!0,slider_control_zoom:!0,slider_zoom_mousewheel:!0,slider_vertical_scroll_ondrag:!1,slider_loader_type:1,slider_loader_color:"white",slider_enable_links:!0,slider_links_newpage:!1,slider_enable_bullets:!1,slider_bullets_skin:"",slider_bullets_space_between:-1,slider_bullets_align_hor:"center",slider_bullets_align_vert:"bottom",slider_bullets_offset_hor:0,slider_bullets_offset_vert:10,slider_enable_arrows:!0,slider_arrows_skin:"",slider_arrow_left_align_hor:"left",slider_arrow_left_align_vert:"middle",slider_arrow_left_offset_hor:20,slider_arrow_left_offset_vert:0,slider_arrow_right_align_hor:"right",slider_arrow_right_align_vert:"middle",slider_arrow_right_offset_hor:20,slider_arrow_right_offset_vert:0,slider_enable_progress_indicator:!0,slider_progress_indicator_type:"pie",slider_progress_indicator_align_hor:"right",slider_progress_indicator_align_vert:"top",slider_progress_indicator_offset_hor:10,slider_progress_indicator_offset_vert:10,slider_enable_play_button:!0,slider_play_button_skin:"",slider_play_button_align_hor:"left",slider_play_button_align_vert:"top",slider_play_button_offset_hor:40,slider_play_button_offset_vert:8,slider_play_button_mobilehide:!1,slider_enable_fullscreen_button:!0,slider_fullscreen_button_skin:"",slider_fullscreen_button_align_hor:"left",slider_fullscreen_button_align_vert:"top",slider_fullscreen_button_offset_hor:11,slider_fullscreen_button_offset_vert:9,slider_fullscreen_button_mobilehide:!1,slider_enable_zoom_panel:!0,slider_zoompanel_skin:"",slider_zoompanel_align_hor:"left",slider_zoompanel_align_vert:"top",slider_zoompanel_offset_hor:12,slider_zoompanel_offset_vert:92,slider_zoompanel_mobilehide:!1,slider_controls_always_on:!1,slider_controls_appear_ontap:!0,slider_controls_appear_duration:300,slider_enable_text_panel:!0,slider_textpanel_always_on:!0,slider_videoplay_button_type:"square"},Pe={slider_progress_indicator_align_hor:"left",slider_progress_indicator_align_vert:"bottom",slider_progress_indicator_offset_hor:0,slider_progress_indicator_offset_vert:0},xe={isRunOnce:!1,isTextPanelSaparateHover:!1,numPrev:1,numCurrent:2,numNext:3,isControlsVisible:!0,currentControlsMode:"image"};this.switchSlideNums=function(e){switch(fe.trigger(pe.events.BEFORE_SWITCH_SLIDES),e){case"left":var t=xe.numCurrent;xe.numCurrent=xe.numNext,xe.numNext=xe.numPrev,xe.numPrev=t;break;case"right":var t=xe.numCurrent;xe.numCurrent=xe.numPrev,xe.numPrev=xe.numNext,xe.numNext=t;break;default:throw new Error("wrong direction: "+e)}fe.trigger(pe.events.ITEM_CHANGED)},this.destroy=function(){fe.off(pe.events.AFTER_PUT_IMAGE),te.off(me.events.ITEM_IMAGE_UPDATED),te.off(me.events.ITEM_CHANGE),ye&&jQuery(ye).on(ye.events.BULLET_CLICK),re.off("mouseenter"),re.off("mouseleave"),re.off("touchend"),re.off("click"),fe.off(pe.events.CLICK),ge&&fe.off(pe.events.ZOOM_CHANGE),fe.off(pe.events.BEFORE_SWITCH_SLIDES),jQuery(Ie).off(Ie.events.SHOW),jQuery(Ie).off(Ie.events.HIDE),Ie.destroy(),re.undelegate(".ug-item-wrapper img","mouseenter"),re.undelegate(".ug-item-wrapper img","mouseleave")},this.________EXTERNAL_GENERAL___________=function(){},this.init=function(t,i,n){e(t,i,n)},this.getSlideImage=function(e){if(!e)var e=pe.getCurrentSlide();var t=e.find(".ug-item-wrapper img");return t},this.setHtml=function(e){r(e)},this.run=function(){t()},this.isInnerInPlace=function(){var e=pe.getSlidesReference(),t=we.getElementSize(e.objCurrentSlide),i=-t.left,n=we.getElementSize(oe);return i==n.left?!0:!1},this.isAnimating=function(){var e=oe.is(":animated");return e},this.isSlideCurrent=function(e){var t=e.data("slidenum");return xe.numCurrent==t?!0:!1},this.isSlideHasItem=function(e){var t=e.data("index");return void 0===t||null===t?!1:!0},this.getObjImagePadding=function(){var e={padding_top:Se.slider_image_padding_top,padding_bottom:Se.slider_image_padding_bottom,padding_left:Se.slider_image_padding_left,padding_right:Se.slider_image_padding_right};return e},this.getSlidesReference=function(){var e={objPrevSlide:q(xe.numPrev),objNextSlide:q(xe.numNext),objCurrentSlide:q(xe.numCurrent)};return e},this.getCurrentSlide=function(){var e=pe.getSlidesReference();return e.objCurrentSlide},this.getCurrentItemIndex=function(){var e=pe.getSlidesReference(),t=e.objCurrentSlide.data("index");return(null===t||void 0===t)&&(t=-1),t},this.getCurrentItem=function(){var e=pe.getCurrentItemIndex();if(-1==e)return null;var t=me.getItem(e);return t},this.getSlideType=function(e){void 0==e&&(e=pe.getCurrentSlide());var t=e.data("type");return t},this.isMouseInsideSlideImage=function(e){var t=pe.getSlideImage(),i=we.getMousePosition(e);void 0===i.pageX&&(i=_e.getLastMousePos());var n=we.getMouseElementPoint(i,t),r=we.getElementSize(t);return isMouseInside=we.isPointInsideElement(n,r),isMouseInside},this.isCurrentSlideType=function(e){var t=pe.getSlideType();return t==e?!0:!1},this.isCurrentSlideLoadingImage=function(){var e=pe.getCurrentSlide(),t=e.data("isLoading");return t===!0?!0:!1},this.setItem=function(e,t,i){var n=pe.getSlidesReference(),r=n.objCurrentSlide.data("index"),o=e.index;if(o==r)return!0;var a=void 0==r;if(a)f(n.objCurrentSlide,e),pe.placeNabourItems();else{var s="left";me.getNumItems();"next"==i?s="left":"prev"==i||r>o?s="right":r>o&&(s="right"),E(s,e,t)}},this.placeNabourItems=function(){var e=pe.getSlidesReference(),t=e.objCurrentSlide.data("index"),i=me.getPrevItem(t),n=me.getNextItem(t);f(e.objNextSlide,n),f(e.objPrevSlide,i),l()},this.________EXTERNAL_API___________=function(){},this.stopSlideAction=function(e,t){e||(e=pe.getCurrentSlide()),t===!0?Ie.pause():Ie.hide()},this.startSlideAction=function(e){e||(e=pe.getCurrentSlide());var t=ee(e);if("image"==t.type)return!0;switch(1==Se.slider_video_constantsize&&w(),I(),Ie.show(),t.type){case"youtube":Ie.playYoutube(t.videoid);break;case"vimeo":Ie.playVimeo(t.videoid);break;case"html5video":Ie.playHtml5Video(t.videoogv,t.videowebm,t.videomp4,t.urlImage);break;case"soundcloud":Ie.playSoundCloud(t.trackid);break;case"wistia":Ie.playWistia(t.videoid)}},this.getScaleMode=function(e){if(!e)var e=pe.getCurrentSlide();var t=pe.getSlideType(e);return"image"!=t?Se.slider_scale_mode_media:Se.slider_scale_mode==Se.slider_scale_mode_fullscreen?Se.slider_scale_mode:1==me.isFullScreen()?Se.slider_scale_mode_fullscreen:Se.slider_scale_mode},this.getObjects=function(){var e={g_objSlider:re,g_objInner:oe,g_options:Se,g_objZoomSlider:ge};return e},this.getObjZoom=function(){return ge},this.getOptions=function(){return Se},this.getElement=function(){return re},this.getVideoObject=function(){return Ie},this.isCurrentSlideImageFit=function(){var e=pe.getCurrentSlide();pe.getSlideType(e);y("image",e);var t=pe.getSlideImage(e);if(0==t.length)return!1;var i=we.isImageFitParent(t);return i},this.isCurrentImageInPlace=function(){var e=pe.getSlideImage();if(0==e.length)return!1;var t=pe.getScaleMode(),i=pe.getObjImagePadding(),n=ee(),r=e.parent(),o=we.getImageInsideParentData(r,n.imageWidth,n.imageHeight,t,i),a=we.getElementSize(e),s=!1;return o.imageWidth==a.width&&(s=!0),s},this.isSlideActionActive=function(){return Ie.isVisible()},this.isSwiping=function(){if(!_e)return!1;var e=_e.isTouchActive();return e},this.isPreloading=function(){var e=J();return e.is(":visible")?!0:!1},this.setOptions=function(e){he&&(e=we.convertCustomPrefixOptions(e,he,"slider")),Se=jQuery.extend(Se,e)},this.setSize=function(e,t){if(0>e||0>t)return!0;var i={};i.width=e+"px",i.height=t+"px",re.css(i);var n={};n.height=t+"px",n.top="0px",n.left="0px",oe.css(n);var r={};r.height=t+"px",r.width=e+"px",ae.css(r),se.css(r),le.css(r);var o=e-Se.slider_item_padding_left-Se.slider_item_padding_right,s=t-Se.slider_item_padding_top-Se.slider_item_padding_bottom,d={};d.width=o+"px",d.height=s+"px",d.top=Se.slider_item_padding_top+"px",d.left=Se.slider_item_padding_left+"px",re.find(".ug-item-wrapper").css(d),Te&&Te.setSizeByParent(),a(),u(ae),u(se),u(le),l();var _=pe.getSlideType();if("image"!=_&&1==Se.slider_video_constantsize)w();else{var g=e-Se.slider_video_padding_left-Se.slider_video_padding_right,c=t-Se.slider_video_padding_top-Se.slider_video_padding_bottom;Ie.setSize(g,c)}I()},this.refreshSlideItems=function(){return 1==pe.isAnimating()?!0:(u(ae),u(se),u(le),void l())},this.isMouseOver=function(){return re.ismouseover()},this.setPosition=function(e,t){we.placeElement(re,e,t)},this.zoomIn=function(){return ge?void ge.zoomIn():!0},this.zoomOut=function(){return ge?void ge.zoomOut():!0},this.zoomBack=function(){return ge?void ge.zoomBack():!0}}function UGTextPanel(){function e(e,t){if(!t)var t=v.textpanel_padding_top;var i=t;if(d){var n=i;f.placeElement(d,0,n);var o=f.getElementSize(d),i=o.bottom}var a="";if(_&&(a=jQuery.trim(_.text())),""!=a){var s=i;d&&(s+=v.textpanel_padding_title_description),f.placeElement(_,0,s);var l=f.getElementSize(_);i=l.bottom}if(!v.textpanel_height&&1==b.setInternalHeight){var u=i+v.textpanel_padding_bottom;r(u,e)}}function t(){var e=0;if(d&&(e+=d.outerHeight()),_){var t="";_&&(t=jQuery.trim(_.text())),""!=t&&(d&&(e+=v.textpanel_padding_title_description),e+=_.outerHeight())}return e}function i(){var i=t(),n=(c.height()-i)/2;e(!1,n)}function n(){var i=t(),n=c.height()-i-v.textpanel_padding_bottom;e(!1,n)}function r(e,t){if(!t)var t=!1;if(1==t){if(g){var i=g.height();e>i&&g.height(e)}var n={height:e+"px"};l.add(c).animate(n,v.textpanel_fade_duration)}else g&&g.height(e),l.add(c).height(e)}function o(){if(1==v.textpanel_enable_bg){g=l.children(".ug-textpanel-bg"),g.fadeTo(0,v.textpanel_bg_opacity);var e={"background-color":v.textpanel_bg_color};e=jQuery.extend(e,v.textpanel_bg_css),g.css(e)}if(1==v.textpanel_enable_title){d=c.children(".ug-textpanel-title");var t={};null!==v.textpanel_title_color&&(t.color=v.textpanel_title_color),null!==v.textpanel_title_font_family&&(t["font-family"]=v.textpanel_title_font_family),null!==v.textpanel_title_text_align&&(t["text-align"]=v.textpanel_title_text_align),null!==v.textpanel_title_font_size&&(t["font-size"]=v.textpanel_title_font_size+"px"),null!==v.textpanel_title_bold&&(v.textpanel_title_bold===!0?t["font-weight"]="bold":t["font-weight"]="normal"),v.textpanel_css_title&&(t=jQuery.extend(t,v.textpanel_css_title)),d.css(t)}if(1==v.textpanel_enable_description){_=c.children(".ug-textpanel-description");var i={};null!==v.textpanel_desc_color&&(i.color=v.textpanel_desc_color),null!==v.textpanel_desc_font_family&&(i["font-family"]=v.textpanel_desc_font_family),null!==v.textpanel_desc_text_align&&(i["text-align"]=v.textpanel_desc_text_align),null!==v.textpanel_desc_font_size&&(i["font-size"]=v.textpanel_desc_font_size+"px"),null!==v.textpanel_desc_bold&&(v.textpanel_desc_bold===!0?i["font-weight"]="bold":i["font-weight"]="normal"),v.textpanel_css_title&&(i=jQuery.extend(i,v.textpanel_css_description)),_.css(i)}}function a(){var e=h.getSelectedItem();p.setText(e.title,e.description)}function s(){jQuery(h).on(h.events.ITEM_CHANGE,a)}var l,u,d,_,g,c,h,p=this,f=new UGFunctions,m="",v={textpanel_align:"bottom",textpanel_margin:0,textpanel_text_valign:"middle",textpanel_padding_top:10,textpanel_padding_bottom:10,textpanel_height:null,textpanel_padding_title_description:5,textpanel_padding_right:11,textpanel_padding_left:11,textpanel_fade_duration:200,textpanel_enable_title:!0,textpanel_enable_description:!0,textpanel_enable_bg:!0,textpanel_bg_color:"#000000",textpanel_bg_opacity:.4,textpanel_title_color:null,textpanel_title_font_family:null,textpanel_title_text_align:null,textpanel_title_font_size:null,textpanel_title_bold:null,textpanel_css_title:{},textpanel_desc_color:null,textpanel_desc_font_family:null,textpanel_desc_text_align:null,textpanel_desc_font_size:null,textpanel_desc_bold:null,textpanel_css_description:{},textpanel_desc_style_as_title:!1,textpanel_bg_css:{}},b={isFirstTime:!0,setInternalHeight:!0};this.positionElements=function(t){if(!v.textpanel_height||"top"==v.textpanel_text_valign)return e(t),!1;switch(v.textpanel_text_valign){default:case"top":e(!1);break;case"bottom":n();break;case"center":case"middle":i()}},this.init=function(e,t,i){if(h=e,i&&(m=i,t=f.convertCustomPrefixOptions(t,m,"textpanel")),t&&(v=jQuery.extend(v,t)),0==v.textpanel_enable_title&&0==v.textpanel_enable_description)throw new Error("Textpanel Error: The title or description must be enabled");v.textpanel_height&&v.textpanel_height<0&&(v.textpanel_height=null),1==v.textpanel_desc_style_as_title&&(v.textpanel_desc_color||(v.textpanel_desc_color=v.textpanel_title_color),v.textpanel_desc_bold||(v.textpanel_desc_bold=v.textpanel_title_bold),v.textpanel_desc_font_family||(v.textpanel_desc_font_family=v.textpanel_title_font_family),v.textpanel_desc_font_size||(v.textpanel_desc_font_size=v.textpanel_title_font_size),v.textpanel_desc_text_align||(v.textpanel_desc_text_align=v.textpanel_title_text_align))},this.appendHTML=function(e,t){u=e,t=t?" "+t:"";var i="<div class='ug-textpanel"+t+"'>";1==v.textpanel_enable_bg&&(i+="<div class='ug-textpanel-bg"+t+"'></div>"),i+="<div class='ug-textpanel-textwrapper"+t+"'>",1==v.textpanel_enable_title&&(i+="<div class='ug-textpanel-title"+t+"'></div>"),1==v.textpanel_enable_description&&(i+="<div class='ug-textpanel-description"+t+"'></div>"),i+="</div></div>",e.append(i),l=e.children(".ug-textpanel"),c=l.children(".ug-textpanel-textwrapper"),o()},this.destroy=function(){jQuery(h).off(h.events.ITEM_CHANGE)},this.run=function(){p.setSizeByParent(),s()},this.setPanelSize=function(e,t){if(b.setInternalHeight=!0,t)b.setInternalHeight=!1;else var t=80;v.textpanel_height&&(t=v.textpanel_height),l.width(e),l.height(t),g&&(g.width(e),g.height(t));var i=e-v.textpanel_padding_left-v.textpanel_padding_right,n=v.textpanel_padding_left;f.setElementSizeAndPosition(c,n,0,i,t),d&&d.width(i),_&&_.width(i),0==b.isFirstTime&&p.positionElements(!1)},this.setSizeByParent=function(){var e=f.getElementSize(u);p.setPanelSize(e.width)},this.setTextPlain=function(e,t){d&&d.html(e),_&&_.html(t)},this.setText=function(e,t){1==b.isFirstTime?(p.setTextPlain(e,t),b.isFirstTime=!1,p.positionElements(!1)):c.stop().fadeTo(v.textpanel_fade_duration,0,function(){p.setTextPlain(e,t),p.positionElements(!0),jQuery(this).fadeTo(v.textpanel_fade_duration,1)})},this.positionPanel=function(e,t){var i={};if(void 0!==e&&null!==e)i.top=e,i.bottom="auto";else switch(v.textpanel_align){case"top":i.top=v.textpanel_margin+"px";break;case"bottom":i.top="auto",i.bottom=v.textpanel_margin+"px";break;case"middle":i.top=f.getElementRelativePos(l,"middle",v.textpanel_margin)}void 0!==t&&null!==t&&(i.left=t),l.css(i)},this.setOptions=function(e){m&&(e=f.convertCustomPrefixOptions(e,m,"textpanel")),v=jQuery.extend(v,e)},this.getElement=function(){return l},this.getSize=function(){var e=f.getElementSize(l);return e},this.refresh=function(e,t,i,n){o(),i?p.setPanelSize(i,n):p.setSizeByParent(),p.positionElements(!1),t!==!0&&p.positionPanel(),e===!0&&p.show()},this.hide=function(){l.hide()},this.show=function(){l.show()},this.getOptions=function(){return v},this.getOption=function(e){return 0==v.hasOwnProperty(e)?null:v[e]}}function UGZoomButtonsPanel(){function e(e){return e?e.hasClass("ug-zoompanel-button-disabled")?!0:!1:!0}function t(e){e&&e.addClass("ug-zoompanel-button-disabled")}function i(e){e&&e.removeClass("ug-zoompanel-button-disabled")}function n(){if(0==d.isCurrentSlideType("image"))return!0;var n=d.isCurrentSlideImageFit();1==n?0==e(s)&&(t(s),t(l)):1==e(s)&&(i(s),i(l))}var r,o,a,s,l,u=this,d=new UGSlider,_=new UGFunctions,g={slider_zoompanel_skin:""};this.init=function(e,t){d=e,t&&(g=jQuery.extend(g,t))},this.appendHTML=function(e){o=e;var t="<div class='ug-slider-control ug-zoompanel ug-skin-"+g.slider_zoompanel_skin+"'>";t+="<div class='ug-zoompanel-button ug-zoompanel-plus'></div>",t+="<div class='ug-zoompanel-button ug-zoompanel-minus ug-zoompanel-button-disabled'></div>",t+="<div class='ug-zoompanel-button ug-zoompanel-return ug-zoompanel-button-disabled'></div>",t+="</div>",e.append(t),r=e.children(".ug-zoompanel"),a=r.children(".ug-zoompanel-plus"),s=r.children(".ug-zoompanel-minus"),l=r.children(".ug-zoompanel-return")},this.setObjects=function(e,t,i){a=e,s=t,l=i,s&&s.addClass("ug-zoompanel-button-disabled"),l&&l.addClass("ug-zoompanel-button-disabled")},this.getElement=function(){return r},u.initEvents=function(){_.addClassOnHover(a,"ug-button-hover"),_.addClassOnHover(s,"ug-button-hover"),_.addClassOnHover(l,"ug-button-hover"),_.setButtonOnClick(a,function(){return 1==e(a)?!0:void d.zoomIn()}),_.setButtonOnClick(s,function(){return 1==e(s)?!0:void d.zoomOut()}),_.setButtonOnClick(l,function(){return 1==e(l)?!0:void d.zoomBack()}),jQuery(d).on(d.events.ZOOM_CHANGE,n),jQuery(d).on(d.events.ITEM_CHANGED,n)}}function UGBullets(){function e(){var e="",t="";-1!=h.bullets_space_between&&(t=" style='margin-left:"+h.bullets_space_between+"px'");for(var i=0;u>i;i++)e+=0==i?"<div class='ug-bullet'></div>":"<div class='ug-bullet'"+t+"></div>";if(o.html(e),!s){var n=o.find(".ug-bullet:first-child");n.length&&(s=n.width())}}function t(e){if(1==l.isActive(e))return!0;var t=e.index();jQuery(l).trigger(l.events.BULLET_CLICK,t)}function i(){var e=o.children(".ug-bullet");g.setButtonOnClick(e,t),e.on("mousedown mouseup",function(e){return!1})}function n(e){if(0>e||e>=u)throw new Error("wrong bullet index: "+e)}function r(){if(1==c.isInited)return!0;throw new Error("The bullets are not inited!")}var o,a,s,l=this,u=0,d=new UniteGalleryMain,_=-1,g=new UGFunctions,c={isInited:!1},h={bullets_skin:"",bullets_addclass:"",bullets_space_between:-1};this.events={BULLET_CLICK:"bullet_click"},this.init=function(e,t,i){d=e,u=i?i:d.getNumItems(),c.isInited=!0,h=jQuery.extend(h,t),""==h.bullets_skin&&(h.bullets_skin=h.gallery_skin)},this.getBulletsWidth=function(){if(0==u)return 0;if(!s)return 0;var e=u*s+(u-1)*h.bullets_space_between;return e},this.appendHTML=function(t){a=t,r();var n="";""!=h.bullets_addclass&&(n=" "+h.bullets_addclass);var s="<div class='ug-slider-control ug-bullets ug-skin-"+h.bullets_skin+n+"'>";s+="</div>",o=jQuery(s),t.append(o),e(),i()},this.updateNumBullets=function(t){u=t,e(),i()},this.getElement=function(){return o},this.setActive=function(e){r(),n(e);var t=o.children(".ug-bullet");t.removeClass("ug-bullet-active");var i=jQuery(t[e]);i.addClass("ug-bullet-active"),_=e},this.isActive=function(e){if(n(e),"number"!=typeof e)var t=e;else var t=o.children(".ug-bullet")[e];return t.hasClass("ug-bullet-active")?!0:!1},this.getNumBullets=function(){return u}}function UGProgressBar(){var e,t,i=this,n=0,r=new UGFunctions,o={slider_progressbar_color:"#ffffff",slider_progressbar_opacity:.6,slider_progressbar_line_width:5};this.put=function(i,n){n&&(o=jQuery.extend(o,n)),i.append("<div class='ug-progress-bar'><div class='ug-progress-bar-inner'></div></div>"),e=i.children(".ug-progress-bar"),t=e.children(".ug-progress-bar-inner"),t.css("background-color",o.slider_progressbar_color),e.height(o.slider_progressbar_line_width),t.height(o.slider_progressbar_line_width),t.width("0%");var r=o.slider_progressbar_opacity,a=t[0];a.style.opacity=r,a.style.filter="alpha(opacity="+100*r+")"},this.putHidden=function(t,n){i.put(t,n),e.hide()},this.getElement=function(){return e},this.setSize=function(n){e.width(n),t.width(n),i.draw()},this.setPosition=function(t,i,n,o){r.placeElement(e,t,i,n,o)},this.draw=function(){var e=100*n;t.width(e+"%")},this.setProgress=function(e){n=r.normalizePercent(e),i.draw()},this.getType=function(){return"bar"}}function UGProgressPie(){function e(e){if(!e)var e=0;var t=Math.min(a.slider_progresspie_width,a.slider_progresspie_height)/2,n=i[0].getContext("2d");0==r&&(r=!0,n.rotate(1.5*Math.PI),n.translate(-2*t,0)),n.clearRect(0,0,a.slider_progresspie_width,a.slider_progresspie_height);var o=a.slider_progresspie_width/2,s=a.slider_progresspie_height/2,l=0,u=e*Math.PI*2;if(1==a.slider_progresspie_type_fill)n.beginPath(),n.moveTo(o,s),n.arc(o,s,t,l,u),n.lineTo(o,s),n.fillStyle=a.slider_progresspie_color1,n.fill(),n.closePath();else{n.globalCompositeOperation="source-over",n.beginPath(),n.moveTo(o,s),n.arc(o,s,t,l,u),n.lineTo(o,s),n.fillStyle=a.slider_progresspie_color1,n.fill(),n.closePath(),n.globalCompositeOperation="destination-out";var d=t-a.slider_progresspie_stroke_width;n.beginPath(),n.moveTo(o,s),n.arc(o,s,d,l,u),n.lineTo(o,s),n.fillStyle=a.slider_progresspie_color1,n.fill(),n.closePath()}1==a.slider_progresspie_type_fill&&(l=u,u=2*Math.PI,n.beginPath(),n.arc(o,s,t,l,u),n.lineTo(o,s),n.fillStyle=a.slider_progresspie_color2,n.fill(),n.closePath())}var t,i,n=this,r=!1,o=new UGFunctions,a={slider_progresspie_type_fill:!1,slider_progresspie_color1:"#B5B5B5",slider_progresspie_color2:"#E5E5E5",slider_progresspie_stroke_width:6,slider_progresspie_width:30,slider_progresspie_height:30};this.put=function(e,t){t&&(a=jQuery.extend(a,t)),e.append("<canvas class='ug-canvas-pie' width='"+a.slider_progresspie_width+"' height='"+a.slider_progresspie_height+"'></canvas>"),i=e.children(".ug-canvas-pie")},this.putHidden=function(t,r){n.put(t,r),e(.1),i.hide()},this.getElement=function(){return i},this.setPosition=function(e,t){o.placeElement(i,e,t)},this.getSize=function(){var e={width:a.slider_progresspie_width,height:a.slider_progresspie_height};return e},this.setProgress=function(i){i=o.normalizePercent(i),t=i,e(i)},this.getType=function(){return"pie"}}function UGTouchSliderControl(){function e(e){if(!e)var e=m.getSlidesReference();var t=v.getElementSize(e.objCurrentSlide),i=-t.left,n=v.getElementSize(h),r=i-n.left;return r}function t(){var t=m.getSlidesReference(),i=e(t),n=Math.round(3*t.objCurrentSlide.width()/8);if(Math.abs(i)>=n)return!0;var r=Math.abs(b.lastMouseX-b.startMouseX);Math.abs(b.lastMouseY-b.startMouseY);if(20>r)return!1;var o=jQuery.now(),a=o-b.startTime;return 500>a?!0:!1}function i(e){if(1==m.isInnerInPlace())return!1;if(p.trigger(m.events.BEFORE_RETURN),!e)var e=m.getSlidesReference();var t=v.getElementSize(e.objCurrentSlide),i=-t.left;h.animate({left:i+"px"},{duration:f.slider_transition_return_speed,easing:f.slider_transition_continuedrag_easing,queue:!1,progress:function(e,t,n){if(1==b.isDragVideo){var r=v.getElementSize(h),o=r.left,a=o-i,s=b.videoStartX+a;b.videoObject.css("left",s)}},complete:function(){p.trigger(m.events.AFTER_RETURN)}})}function n(e){m.getVideoObject().hide(),m.switchSlideNums(e),m.placeNabourItems()}function r(){var t=m.getSlidesReference(),r=e(t);if(0==r)return!1;var o=r>0?"left":"right",a=!1;switch(o){case"right":if(m.isSlideHasItem(t.objPrevSlide))var s=v.getElementSize(t.objPrevSlide),l=-s.left;else a=!0;break;case"left":if(m.isSlideHasItem(t.objNextSlide))var u=v.getElementSize(t.objNextSlide),l=-u.left;else a=!0}1==a?i(t):h.stop().animate({left:l+"px"},{duration:f.slider_transition_continuedrag_speed,easing:f.slider_transition_continuedrag_easing,queue:!1,progress:function(){if(1==b.isDragVideo){var e=v.getElementSize(h),t=e.left,i=t-b.startPosx,n=b.videoStartX+i;b.videoObject.css("left",n)}},always:function(){n(o),p.trigger(m.events.AFTER_DRAG_CHANGE)}})}function o(e){var t=b.lastMouseX-b.startMouseX;if(0==t)return!0;var i=0>t?"left":"right",n=m.getObjZoom();if(n){var r=n.isPanEnabled(e,i);if(1==r)return b.isInitDataValid=!1,!0;if(0==b.isInitDataValid)return a(e),!0}var o=b.startPosx+t;if(t>0&&o>0)o/=3;else if(0>t){var s=o+h.width(),l=c.width();l>s&&(o=b.startPosx+t/3)}if(0==b.isDragging&&(b.isDragging=!0,p.trigger(m.events.START_DRAG)),h.css("left",o+"px"),1==b.isDragVideo){var u=o-b.startPosx,d=b.videoStartX+u;b.videoObject.css("left",d)}}function a(e){var t=v.getMousePosition(e);b.startMouseX=t.pageX,b.startMouseY=t.pageY,b.lastMouseX=b.startMouseX,b.lastMouseY=b.startMouseY,b.startTime=jQuery.now();var i=v.getArrTouches(e);b.startArrTouches=v.getArrTouchPositions(i);var n=v.getElementSize(h);b.startPosx=n.left,b.isInitDataValid=!0,b.isDragVideo=!1,v.storeEventData(e,b.storedEventID)}function s(e){b.touch_active=!1}function l(e,t){b.touch_active=!0,a(t)}function u(e){e.preventDefault(),b.isDragging=!1,1==m.isAnimating()&&h.stop(!0,!0);var t=v.getArrTouches(e);return t.length>1?(1==b.touch_active&&s("1"),!0):1==b.touch_active?!0:void l("1",e)}function d(e){if(0==b.touch_active)return!0;if(0==e.buttons)return s("2"),r(),!0;v.updateStoredEventData(e,b.storedEventID),e.preventDefault();var t=v.getMousePosition(e);b.lastMouseX=t.pageX,b.lastMouseY=t.pageY;var i=null;1==f.slider_vertical_scroll_ondrag&&(i=v.handleScrollTop(b.storedEventID)),"vert"!==i&&o(e)}function _(e){var n=v.getArrTouches(e),o=n.length,a=m.isInnerInPlace();if(1==a&&0==b.touch_active&&0==o)return!0;if(0==o&&1==b.touch_active){s("3");var u=!1,d=v.wasVerticalScroll(b.storedEventID);0==d&&(u=t()),1==u?r():i()}else 1==o&&0==b.touch_active&&l("2",e)}function g(){c.bind("mousedown touchstart",u),jQuery("body").bind("mousemove touchmove",d),jQuery(window).add("body").bind("mouseup touchend",_)}var c,h,p,f,m=new UGSlider,v=new UGFunctions,f={slider_transition_continuedrag_speed:250,slider_transition_continuedrag_easing:"linear",slider_transition_return_speed:300,slider_transition_return_easing:"easeInOutQuad"},b={touch_active:!1,startMouseX:0,startMouseY:0,lastMouseX:0,lastMouseY:0,startPosx:0,startTime:0,isInitDataValid:!1,slides:null,lastNumTouches:0,isDragging:!1,storedEventID:"touchSlider",videoStartX:0,isDragVideo:!1,videoObject:null};this.isTapEventOccured=function(t){var i=v.getArrTouches(t),n=i.length;if(0!=n||0!=b.lastNumTouches)return b.lastNumTouches=n,!1;b.lastNumTouches=n;var r=m.getSlidesReference(),o=(e(r),Math.abs(b.lastMouseX-b.startMouseX)),a=Math.abs(b.lastMouseY-b.startMouseY),s=jQuery.now(),l=s-b.startTime;return 20>o&&50>a&&500>l?!0:!1},this.init=function(e,t){m=e,p=jQuery(m),g_objects=e.getObjects(),c=g_objects.g_objSlider,h=g_objects.g_objInner,f=jQuery.extend(f,t),g()},this.getLastMousePos=function(){var e={pageX:b.lastMouseX,pageY:b.lastMouseY};return e},this.isTouchActive=function(){return b.touch_active}}function UGZoomSliderControl(){function e(e,t){E=e,w=jQuery(E),g_objects=e.getObjects(),y=g_objects.g_objSlider,I=g_objects.g_objInner,S=jQuery.extend(S,t),b()}function t(){var e=E.getScaleMode();return"down"!=e&&(e="fit"),e}function i(){var e=jQuery.now(),i=e-P.storeImageLastTime;if(20>i)return!1;var n=E.getSlidesReference();if(P.objSlide=n.objCurrentSlide,P.objImage=n.objCurrentSlide.find("img"),0==P.objImage.length)return!1;P.objImageSize=T.getElementSize(P.objImage),P.objParent=P.objImage.parent(),P.objParentSize=T.getElementSize(P.objParent);var r=t();objPadding=E.getObjImagePadding(),P.objFitImageSize=T.getImageInsideParentDataByImage(P.objImage,r,objPadding);var e=jQuery.now();return P.storeImageLastTime=e,!0}function n(e,i){var n=E.getSlidesReference(),r=n.objCurrentSlide.find("img"),o=t();w.trigger(E.events.ZOOM_START);var a=!0,s=E.getObjImagePadding();if("back"==e){var l=T.getImageOriginalSize(r);T.scaleImageFitParent(r,l.width,l.height,o,s)}else{var u="in"==e?!0:!1;a=T.zoomImageInsideParent(r,u,S.slider_zoom_step,i,o,S.slider_zoom_max_ratio,s)}1==a&&(w.trigger(E.events.ZOOMING),w.trigger(E.events.ZOOM_CHANGE),w.trigger(E.events.ZOOM_END))}function r(e,t,i){var n=T.getArrTouches(t);if(i===!0){if(1!=n.length)return!1}else if(n.length>1)return!1;return T.isElementBiggerThenParent(e)?!0:!1}function o(e){var t=T.getMousePosition(e);P.startMouseX=t.pageX,P.startMouseY=t.pageY,P.lastMouseX=P.startMouseX,P.lastMouseY=P.startMouseY,P.startImageX=P.objImageSize.left,P.startImageY=P.objImageSize.top,P.panXActive=P.objImageSize.width>P.objParentSize.width,P.panYActive=P.objImageSize.height>P.objParentSize.height}function a(e){P.isPanActive=!0,o(e)}function s(e){if(void 0==P.objImage||0==P.objImage.length)return!0;var t=T.getMousePosition(e),i=(t.pageX-P.startMouseX,t.pageY-P.startMouseY,t.pageX-P.lastMouseX),n=t.pageY-P.lastMouseY,r=0>i?"left":"right",o=0>n?"up":"down";P.lastMouseX=t.pageX,P.lastMouseY=t.pageY;var a=T.getElementSize(P.objImage);0==P.panYActive?n=0:"down"==o&&a.top>0?n/=3:"up"==o&&a.bottom<P.objParentSize.height&&(n/=3),0==P.panXActive||0==E.isInnerInPlace()?i=0:"right"==r&&a.left>0?i/=3:"left"==r&&a.right<P.objParentSize.width&&(i/=3);var s=a.left+i,l=a.top+n;T.placeElement(P.objImage,s,l)}function l(){var e=!1,t=!1,i=0,n=0,r=T.getElementSize(P.objImage),o=E.getObjImagePadding(),a=T.getElementCenterPosition(P.objImage,o);P.panXActive=P.objImageSize.width>P.objParentSize.width,P.panYActive=P.objImageSize.height>P.objParentSize.height,1==P.panYActive?r.top>0?(n=0,t=!0):r.bottom<P.objParentSize.height&&(n=P.objParentSize.height-r.height,t=!0):r.top!=a.top&&(t=!0,n=a.top),1==P.panXActive?r.left>0?(i=0,e=!0):r.right<P.objParentSize.width&&(i=P.objParentSize.width-r.width,e=!0):r.left!=a.left&&(e=!0,i=a.left);var s={};1==t&&(s.top=n+"px"),1==e&&(s.left=i+"px"),(1==t||1==e)&&P.objImage.animate(s,{duration:S.slider_zoom_return_pan_duration,easing:S.slider_zoom_return_pan_easing,queue:!1})}function u(){return P.objImage&&P.objImage.is(":animated")?!0:!1}function d(e){P.isZoomActive=!0,P.startDistance=T.getDistance(e[0].pageX,e[0].pageY,e[1].pageX,e[1].pageY),0==P.startDistance&&(P.startDistance=1),P.startMiddlePoint=T.getMiddlePoint(e[0].pageX,e[0].pageY,e[1].pageX,e[1].pageY),P.objImageSize=T.getElementSize(P.objImage),P.startImageX=P.objImageSize.left,P.startImageY=P.objImageSize.top,P.imageOrientPoint=T.getElementLocalPoint(P.startMiddlePoint,P.objImage);var t=T.isPointInsideElement(P.imageOrientPoint,P.objImageSize); +0==t&&(P.imageOrientPoint=T.getElementCenterPoint(P.objImage)),w.trigger(E.events.ZOOM_START)}function _(e){if(0==P.isZoomActive)return!1;var t=T.getArrTouches(e);2!=t.length&&(P.isZoomActive=!1,w.trigger(E.events.ZOOM_END))}function g(e){if(1==P.isZoomActive)return!0;var t=T.getArrTouches(e);return 2!=t.length?!0:void d(t)}function c(e){var t=T.getArrTouches(e),i=T.getDistance(t[0].pageX,t[0].pageY,t[1].pageX,t[1].pageY),n=i/P.startDistance,r=T.getMiddlePoint(t[0].pageX,t[0].pageY,t[1].pageX,t[1].pageY),o=P.objImageSize.width*n,a=P.objImageSize.height*n,s=T.getImageOriginalSize(P.objImage),l=1;if(s.width>0&&(l=o/s.width),l>S.slider_zoom_max_ratio)return!0;panX=-(P.imageOrientPoint.x*n-P.imageOrientPoint.x),panY=-(P.imageOrientPoint.y*n-P.imageOrientPoint.y);var u=r.x-P.startMiddlePoint.x,d=r.y-P.startMiddlePoint.y,_=P.startImageX+panX+u,g=P.startImageY+panY+d;T.setElementSizeAndPosition(P.objImage,_,g,o,a),w.trigger(E.events.ZOOMING),w.trigger(E.events.ZOOM_CHANGE)}function h(){if(void 0==P.objImage||0==P.objImage.length)return!0;var e=T.getElementSize(P.objImage);if(e.width<P.objFitImageSize.imageWidth){P.objImage.css({position:"absolute",margin:"none"});var t={top:P.objFitImageSize.imageTop+"px",left:P.objFitImageSize.imageLeft+"px",width:P.objFitImageSize.imageWidth+"px",height:P.objFitImageSize.imageHeight+"px"};P.objImage.animate(t,{duration:S.slider_zoom_return_pan_duration,easing:S.slider_zoom_return_pan_easing,queue:!1})}else l()}function p(e){if(0==E.isCurrentSlideType("image"))return!0;i();return void 0==P.objImage||0==P.objImage.length?!0:(e.preventDefault(),1==u()&&P.objImage.stop(!0),1==P.isZoomActive?_(e):g(e),void(1==P.isZoomActive?P.isPanActive=!1:1==r(P.objImage,e)&&1==P.isZoomedOnce&&a(e)))}function f(e){if(0==E.isCurrentSlideType("image"))return!0;var t=jQuery(e.target);if(1==t.data("ug-button"))return!1;i();if(void 0==P.objImage||0==P.objImage.length)return!0;var n=P.isPanActive,o=P.isZoomActive;if(0==E.isInnerInPlace())return P.isZoomActive=!1,P.isPanActive=!1,!0;if(1==P.isZoomActive?_(e):g(e),1==P.isZoomActive)P.isPanActive=!1;else{var s=r(P.objImage,e,!0);1==P.isPanActive?P.isPanActive=!1:1==s&&a(e)}(n||o)&&0==P.isZoomActive&&0==P.isPanActive&&h()}function m(e){return 0==E.isCurrentSlideType("image")?!0:void(1==P.isZoomActive?c(e):1==P.isPanActive&&s(e))}function v(e,t,i,r){if(0==S.slider_zoom_mousewheel)return!0;if(0==E.isCurrentSlideType("image"))return!0;e.preventDefault();var o=t>0,a=T.getMousePosition(e),s=1==o?"in":"out";n(s,a)}function b(){y.on("mousewheel",v),y.bind("mousedown touchstart",p),jQuery("body").bind("mousemove touchmove",m),jQuery(window).add("body").bind("mouseup touchend",f),w.bind(E.events.BEFORE_RETURN,function(){h()}),w.bind(E.events.ITEM_CHANGED,function(){P.isZoomedOnce=!1}),w.bind(E.events.ZOOM_CHANGE,function(){P.isZoomedOnce=!0})}var y,I,w,E=new UGSlider,T=new UGFunctions,S={slider_zoom_step:1.2,slider_zoom_max_ratio:6,slider_zoom_return_pan_duration:400,slider_zoom_return_pan_easing:"easeOutCubic"},P={isPanActive:!1,startMouseX:0,startMouseY:0,lastMouseX:0,lastMouseY:0,startImageX:0,startImageY:0,panXActive:!1,panYActive:!1,objImage:null,objImageSize:null,objParent:null,objParentSize:null,objSlide:null,storeImageLastTime:0,isZoomActive:!1,startDistance:0,startMiddlePoint:null,imageOrientPoint:null,objFitImageSize:null,isZoomedOnce:!1};this.________EXTERNAL_____________=function(){},this.isPanEnabled=function(e,t){if(i(),void 0==P.objImage||0==P.objImage.length)return!1;if(0==P.isZoomedOnce)return!1;if(0==r(P.objImage,e))return!1;if(0==E.isInnerInPlace())return!1;if("left"==t){if(P.objImageSize.right<=P.objParentSize.width)return!1}else if(P.objImageSize.left>=0)return!1;return!0},this.init=function(t,i){e(t,i)},this.zoomIn=function(){n("in")},this.zoomOut=function(){n("out")},this.zoomBack=function(){n("back")}}function UGWistiaAPI(){function e(){return"undefined"!=typeof Wistia}function t(e,t,n,o,a){r=null,s=!1;var l=e+"_video",u="<div id='"+l+"' class='wistia_embed' style='width:"+n+";height:"+o+";' data-video-width='"+n+"' data-video-height='"+o+"'> </div>";jQuery("#"+e).html(u),r=Wistia.embed(t,{version:"v1",videoWidth:n,videoHeight:o,container:l,autoPlay:a}),s=!0,i()}function i(){r.bind("play",function(){a.trigger(o.events.START_PLAYING)}),r.bind("pause",function(){a.trigger(o.events.STOP_PLAYING)}),r.bind("end",function(){a.trigger(o.events.STOP_PLAYING),a.trigger(o.events.VIDEO_ENDED)})}this.isAPILoaded=!1;var n,r,o=this,a=jQuery(this),s=!1;this.events={START_PLAYING:"start_playing",STOP_PLAYING:"stop_playing",VIDEO_ENDED:"video_ended"},this.loadAPI=function(){return 1==g_ugWistiaAPI.isAPILoaded?!0:e()?(g_ugWistiaAPI.isAPILoaded=!0,!0):(g_ugFunctions.loadJs("fast.wistia.com/assets/external/E-v1.js",!0),void(g_ugWistiaAPI.isAPILoaded=!0))},this.doCommand=function(e){if(null==r)return!1;if(0==s)return!1;switch(e){case"play":r.play();break;case"pause":r.pause()}},this.pause=function(){o.doCommand("pause")},this.play=function(){o.doCommand("play")},this.putVideo=function(i,r,o,a,s){return e()?(t(i,r,o,a,s),!0):(this.loadAPI(),void(n=setInterval(function(){e()&&(t(i,r,o,a,s),clearInterval(n))},500)))},this.isPlayerReady=function(){return s&&r?!0:!1}}function UGSoundCloudAPI(){function e(){return"undefined"!=typeof SC}function t(e,t,n,a,s){r=null,g_isPlayerReady=!1;var l=e+"_iframe",u=location.protocol+"//w.soundcloud.com/player/?url=http://api.soundcloud.com/tracks/"+t;u+="&buying=false&liking=false&download=false&sharing=false&show_artwork=true&show_comments=false&show_playcount=true&show_user=false&hide_related=true&visual=true&start_track=0&callback=true",u+=s===!0?"&auto_play=true":"&auto_play=false";var d="<iframe id='"+l+"' src="+u+" width='"+n+"' height='"+a+"' frameborder='0' scrolling='no' webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>";jQuery("#"+e).html(d),r=SC.Widget(l),r.bind(SC.Widget.Events.READY,function(){r&&(g_isPlayerReady=!0,i())}),o=e}function i(){r.bind(SC.Widget.Events.PLAY,function(){s.trigger(a.events.START_PLAYING)}),r.bind(SC.Widget.Events.PAUSE,function(){s.trigger(a.events.STOP_PLAYING)}),r.bind(SC.Widget.Events.FINISH,function(){s.trigger(a.events.STOP_PLAYING),s.trigger(a.events.VIDEO_ENDED)})}this.isAPILoaded=!1;var n,r,o,a=this,s=jQuery(this);this.events={START_PLAYING:"start_playing",STOP_PLAYING:"stop_playing",VIDEO_ENDED:"video_ended"},this.loadAPI=function(){return 1==g_ugSoundCloudAPI.isAPILoaded?!0:e()?(g_ugSoundCloudAPI.isAPILoaded=!0,!0):(g_ugFunctions.loadJs("w.soundcloud.com/player/api.js",!0),void(g_ugSoundCloudAPI.isAPILoaded=!0))},this.putSound=function(i,r,o,a,s){return e()?(t(i,r,o,a,s),!0):(this.loadAPI(),void(n=setInterval(function(){e()&&(t(i,r,o,a,s),clearInterval(n))},500)))},this.doCommand=function(e){if(null==r)return!1;if(0==g_isPlayerReady)return!1;switch(e){case"play":r.play();break;case"pause":r.pause()}},this.pause=function(){a.doCommand("pause")},this.play=function(){a.doCommand("play")},this.destroy=function(){g_isPlayerReady=!1,r=null,o&&(jQuery("#"+o).html(""),o=null)}}function UGHtml5MediaAPI(){function e(){return"undefined"!=typeof mejs}function t(e,t,n,o,a){r=null,g_isPlayerReady=!1;var s=location.protocol+"//cdnjs.cloudflare.com/ajax/libs/mediaelement/2.18.1/flashmediaelement-cdn.swf",l=location.protocol+"//cdnjs.cloudflare.com/ajax/libs/mediaelement/2.18.1/silverlightmediaelement.xap",u=e+"_video",d="";a&&a===!0&&(d="autoplay='autoplay'");var _="";t.posterImage&&(_="poster='"+t.posterImage+"'");var g="<video id='"+u+"' width='"+n+"' height='"+o+"' controls='controls' preload='none' "+d+" "+_+">";""!=t.mp4&&(g+="<source type='video/mp4' src='"+t.mp4+"' />"),""!=t.webm&&(g+="<source type='video/webm' src='"+t.webm+"' />"),""!=t.ogv&&(g+="<source type='video/ogg' src='"+t.ogv+"' />"),g+="<object width='"+n+"' height='"+o+"' type='application/x-shockwave-flash' data='"+s+"'>",g+="<param name='movie' value='"+s+"' />",g+="<param name='flashvars' value='controls=true&file="+t.mp4+"' />",g+="</object>",g+="</video>",jQuery("#"+e).html(g),new MediaElement(u,{enablePluginDebug:!1,flashName:s,silverlightName:l,success:function(e,t){g_isPlayerReady=!0,r=e,0==a&&r.pause(),i()},error:function(e){trace(e)}})}function i(){g_ugFunctions.addEvent(r,"play",function(){a.trigger(o.events.START_PLAYING)}),g_ugFunctions.addEvent(r,"pause",function(){a.trigger(o.events.STOP_PLAYING)}),g_ugFunctions.addEvent(r,"ended",function(){a.trigger(o.events.STOP_PLAYING),a.trigger(o.events.VIDEO_ENDED)})}this.isAPILoaded=!1;var n,r,o=this,a=jQuery(this);this.events={START_PLAYING:"start_playing",STOP_PLAYING:"stop_playing",VIDEO_ENDED:"video_ended"},this.loadAPI=function(){return 1==g_ugHtml5MediaAPI.isAPILoaded?!0:e()?(g_ugHtml5MediaAPI.isAPILoaded=!0,!0):(g_ugFunctions.loadJs("cdnjs.cloudflare.com/ajax/libs/mediaelement/2.18.1/mediaelement.min.js",!0),g_ugFunctions.loadCss("cdnjs.cloudflare.com/ajax/libs/mediaelement/2.18.1/mediaelementplayer.min.css",!0),void(g_ugHtml5MediaAPI.isAPILoaded=!0))},this.putVideo=function(i,r,o,a,s){return e()?(t(i,r,o,a,s),!0):(this.loadAPI(),void(n=setInterval(function(){e()&&(t(i,r,o,a,s),clearInterval(n))},500)))},this.doCommand=function(e){if(null==r)return!1;if(0==g_isPlayerReady)return!1;switch(e){case"play":r.play();break;case"pause":r.pause()}},this.pause=function(){o.doCommand("pause")},this.play=function(){o.doCommand("play")}}function UGVimeoAPI(){function e(){return"undefined"!=typeof Froogaloop}function t(e,t,n,o,a){s=null,l=!1;var u=location.protocol+"//player.vimeo.com/video/"+t+"?api=1";a===!0&&(u+="&byline=0&autoplay=1&title=0&portrait=0");var d="<iframe src="+u+" width='"+n+"' height='"+o+"' frameborder='0' webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>";jQuery("#"+e).html(d);var _=jQuery("#"+e+" iframe")[0];s=Froogaloop(_),s.addEvent("ready",function(){s&&(l=!0,i())}),r=e}function i(){return s?(s.addEvent("cuechange",function(){1==u&&o.play()}),s.addEvent("play",function(){a.trigger(o.events.START_PLAYING)}),s.addEvent("pause",function(){a.trigger(o.events.STOP_PLAYING)}),void s.addEvent("finish",function(){a.trigger(o.events.STOP_PLAYING),a.trigger(o.events.VIDEO_ENDED)})):!1}this.isAPILoaded=!1;var n,r,o=this,a=jQuery(this),s=null,l=!1,u=!1;this.events={START_PLAYING:"start_playing",STOP_PLAYING:"stop_playing",VIDEO_ENDED:"video_ended"},this.loadAPI=function(){return 1==g_ugVimeoAPI.isAPILoaded?!0:e()?(g_ugVimeoAPI.isAPILoaded=!0,!0):(g_ugFunctions.loadJs("f.vimeocdn.com/js/froogaloop2.min.js",!0),void(g_ugVimeoAPI.isAPILoaded=!0))},this.doCommand=function(e){if(null==s)return!1;if(0==l)return!1;switch(e){default:s.api(e)}},this.pause=function(){o.doCommand("pause")},this.play=function(){o.doCommand("play")},this.destroy=function(){s&&(s.api("unload"),s=null,l=!1),r&&jQuery("#"+r).html("")},this.putVideo=function(i,r,o,a,s){return e()?(t(i,r,o,a,s),!0):(this.loadAPI(),void(n=setInterval(function(){e()&&(t(i,r,o,a,s),clearInterval(n))},500)))},this.isPlayerReady=function(){return l&&s?!0:!1},this.changeVideo=function(e,t){return 0==o.isPlayerReady()?!1:(u=t,void s.api("loadVideo",e))},this.getVideoImages=function(e,t,i){var n=location.protocol+"//vimeo.com/api/v2/video/"+e+".json";jQuery.get(n,{},function(e){var n={};n.preview=e[0].thumbnail_large,n.thumb=e[0].thumbnail_medium,i(t,n)})}}function UGYoutubeAPI(){function e(e,t,r,a,u){s&&l&&s.destroy();var d={controls:2,showinfo:_.video_youtube_showinfo,rel:0};u===!0&&(d.autoplay=1),l=!1,s=new YT.Player(e,{height:a,width:r,videoId:t,playerVars:d,events:{onReady:i,onStateChange:n}}),o=e}function t(){return"undefined"!=typeof YT&&"undefined"!=typeof YT.Player?!0:!1}function i(){l=!0}function n(){if("function"!=typeof s.getPlayerState)return trace("Youtube API error: can't get player state"),!1;var e=s.getPlayerState();switch(e){case YT.PlayerState.PLAYING:u.trigger(a.events.START_PLAYING);break;case YT.PlayerState.ENDED:u.trigger(a.events.STOP_PLAYING),u.trigger(a.events.VIDEO_ENDED);break;default:d==YT.PlayerState.PLAYING&&u.trigger(a.events.STOP_PLAYING)}d=e}this.isAPILoaded=!1;var r,o,a=this,s=null,l=!1,u=jQuery(this),d=-1,_={video_youtube_showinfo:!0};this.events={START_PLAYING:"start_playing",STOP_PLAYING:"stop_playing",VIDEO_ENDED:"video_ended"},this.setOptions=function(e){_=jQuery.extend(_,e)},this.putVideo=function(i,n,o,a,s){return t()?(e(i,n,o,a,s),!0):(this.loadAPI(),void(r=setInterval(function(){t()&&(e(i,n,o,a,s),clearInterval(r))},500)))},this.loadAPI=function(){return 1==g_ugYoutubeAPI.isAPILoaded?!0:"undefined"!=typeof YT?(g_ugYoutubeAPI.isAPILoaded=!0,!0):(g_ugFunctions.loadJs("https://www.youtube.com/player_api",!1),void(g_ugYoutubeAPI.isAPILoaded=!0))},this.doCommand=function(e,t){if(!s)return!0;if(0==l)return!1;switch(e){case"play":if("function"!=typeof s.playVideo)return!1;s.playVideo();break;case"pause":if("function"!=typeof s.pauseVideo)return!1;s.pauseVideo();break;case"seek":if("function"!=typeof s.seekTo)return!1;s.seekTo(t);break;case"stopToBeginning":var i=s.getPlayerState();switch(s.pauseVideo(),i){case YT.PlayerState.PLAYING:case YT.PlayerState.ENDED:case YT.PlayerState.PAUSED:s.seekTo(0)}}},this.play=function(){a.doCommand("play")},this.pause=function(){a.doCommand("pause")},this.destroy=function(){try{s&&(l=!1,s.clearVideo(),s.destroy())}catch(e){jQuery("#"+o).html("")}},this.stopToBeginning=function(){a.doCommand("stopToBeginning")},this.changeVideo=function(e,t){return 0==a.isPlayerReady()?!1:void(t&&1==t?s.loadVideoById(e,0,"large"):s.cueVideoById(e,0,"large"))},this.isPlayerReady=function(){return l&&s?!0:!1},this.getVideoImages=function(e){var t={};return t.preview="https://i.ytimg.com/vi/"+e+"/sddefault.jpg",t.thumb="https://i.ytimg.com/vi/"+e+"/default.jpg",t}}function UGVideoPlayer(){function e(){h.hide()}function t(){p.trigger(h.events.PLAY_START),_&&_.hide()}function i(){p.trigger(h.events.PLAY_STOP),_&&_.show()}function n(){p.trigger(h.events.VIDEO_ENDED)}function r(){_&&(f.setButtonMobileReady(_),f.setButtonOnClick(_,e)),jQuery(m).on(m.events.START_PLAYING,t),jQuery(m).on(m.events.STOP_PLAYING,i),jQuery(m).on(m.events.VIDEO_ENDED,n),jQuery(v).on(v.events.START_PLAYING,t),jQuery(v).on(v.events.STOP_PLAYING,i),jQuery(v).on(v.events.VIDEO_ENDED,n),jQuery(b).on(b.events.START_PLAYING,t),jQuery(b).on(b.events.STOP_PLAYING,i),jQuery(b).on(b.events.VIDEO_ENDED,n),jQuery(y).on(y.events.START_PLAYING,t),jQuery(y).on(y.events.STOP_PLAYING,i),jQuery(y).on(y.events.VIDEO_ENDED,n),jQuery(I).on(I.events.START_PLAYING,t),jQuery(I).on(I.events.STOP_PLAYING,i),jQuery(I).on(I.events.VIDEO_ENDED,n)}function o(e){var t=["youtube","vimeo","html5","soundcloud","wistia"];for(var i in t){var n=t[i];if(n!=e)switch(n){case"youtube":m.pause(),m.destroy(),l.hide();break;case"vimeo":v.pause(),v.destroy(),u.hide();break;case"html5":b.pause(),d.hide();break;case"soundcloud":y.pause(),y.destroy(),g.hide();break;case"wistia":I.pause(),c.hide()}}}var a,s,l,u,d,_,g,c,h=this,p=jQuery(this),f=new UGFunctions,m=new UGYoutubeAPI,v=new UGVimeoAPI,b=new UGHtml5MediaAPI,y=new UGSoundCloudAPI,I=new UGWistiaAPI,w=null,E={video_enable_closebutton:!0};this.events={SHOW:"video_show",HIDE:"video_hide",PLAY_START:"video_play_start",PLAY_STOP:"video_play_stop",VIDEO_ENDED:"video_ended"};var T={standAloneMode:!1,youtubeInnerID:"",vimeoPlayerID:"",html5PlayerID:"",wistiaPlayerID:"",soundCloudPlayerID:""};this.init=function(e,t,i){if(a=i,!a)throw new Error("missing gallery ID for video player, it's a must!");E=jQuery.extend(E,e),m.setOptions(E),t&&1==t&&(T.standAloneMode=!0)},this.setHtml=function(e){T.youtubeInnerID=a+"_youtube_inner",T.vimeoPlayerID=a+"_videoplayer_vimeo",T.html5PlayerID=a+"_videoplayer_html5",T.wistiaPlayerID=a+"_videoplayer_wistia",T.soundCloudPlayerID=a+"_videoplayer_soundcloud";var t="<div class='ug-videoplayer' style='display:none'>";t+="<div class='ug-videoplayer-wrapper ug-videoplayer-youtube' style='display:none'><div id='"+T.youtubeInnerID+"'></div></div>",t+="<div id='"+T.vimeoPlayerID+"' class='ug-videoplayer-wrapper ug-videoplayer-vimeo' style='display:none'></div>",t+="<div id='"+T.html5PlayerID+"' class='ug-videoplayer-wrapper ug-videoplayer-html5'></div>",t+="<div id='"+T.soundCloudPlayerID+"' class='ug-videoplayer-wrapper ug-videoplayer-soundcloud'></div>",t+="<div id='"+T.wistiaPlayerID+"' class='ug-videoplayer-wrapper ug-videoplayer-wistia'></div>",0==T.standAloneMode&&1==E.video_enable_closebutton&&(t+="<div class='ug-videoplayer-button-close'></div>"),t+="</div>",e.append(t),s=e.children(".ug-videoplayer"),l=s.children(".ug-videoplayer-youtube"),u=s.children(".ug-videoplayer-vimeo"),d=s.children(".ug-videoplayer-html5"),g=s.children(".ug-videoplayer-soundcloud"),c=s.children(".ug-videoplayer-wistia"),0==T.standAloneMode&&1==E.video_enable_closebutton&&(_=s.children(".ug-videoplayer-button-close"))},this.destroy=function(){_&&(_.off("click"),_.off("touchend")),jQuery(m).off(m.events.START_PLAYING),jQuery(m).off(m.events.STOP_PLAYING),jQuery(v).off(v.events.START_PLAYING),jQuery(v).off(v.events.STOP_PLAYING),jQuery(b).off(b.events.START_PLAYING),jQuery(b).off(b.events.STOP_PLAYING),jQuery(y).off(y.events.START_PLAYING,t),jQuery(y).off(y.events.STOP_PLAYING,i),jQuery(I).off(I.events.START_PLAYING,t),jQuery(I).off(I.events.STOP_PLAYING,i),w=null},this.initEvents=function(){r()},this.setSize=function(e,t){f.setElementSize(s,e,t),_&&f.placeElement(_,"right","top")},this.setPosition=function(e,t){f.placeElement(s,e,t)},this.getObject=function(){return s},this.show=function(){return 1==h.isVisible()?!0:(s.show(),s.fadeTo(0,1),_&&_.show(),void p.trigger(h.events.SHOW))},this.hide=function(){return 0==h.isVisible()?!0:(o(),w=null,s.hide(),void p.trigger(h.events.HIDE))},this.getActiveAPI=function(){switch(w){case"youtube":return m;case"vimeo":return v;case"wistia":return I;case"soundcloud":return y;case"html5":return b;default:return null}},this.pause=function(){var e=h.getActiveAPI();return null==e?!1:void("function"==typeof e.pause&&e.pause())},this.isVisible=function(){return s.is(":visible")},this.playYoutube=function(e,t){if("undefined"==typeof t)var t=!0;o("youtube"),l.show();var i=l.children("#"+T.youtubeInnerID);0==i.length&&l.append("<div id='"+T.youtubeInnerID+"'></div>"),1==m.isPlayerReady()&&1==T.standAloneMode?m.changeVideo(e,t):m.putVideo(T.youtubeInnerID,e,"100%","100%",t),w="youtube"},this.playVimeo=function(e,t){if("undefined"==typeof t)var t=!0;o("vimeo"),u.show(),v.putVideo(T.vimeoPlayerID,e,"100%","100%",t),w="vimeo"},this.playHtml5Video=function(e,t,i,n,r){if("undefined"==typeof r)var r=!0;o("html5"),d.show();var a={ogv:e,webm:t,mp4:i,posterImage:n};b.putVideo(T.html5PlayerID,a,"100%","100%",r),w="html5"},this.playSoundCloud=function(e,t){if("undefined"==typeof t)var t=!0;o("soundcloud"),g.show(),y.putSound(T.soundCloudPlayerID,e,"100%","100%",t),w="soundcloud"},this.playWistia=function(e,t){if("undefined"==typeof t)var t=!0;o("wistia"),c.show(),I.putVideo(T.wistiaPlayerID,e,"100%","100%",t),w="wistia"}}function ugCheckForMinJQueryVersion(){var e=g_ugFunctions.checkMinJqueryVersion("1.8.0");if(0==e)throw new Error("The gallery can run from jquery 1.8 You have jQuery "+jQuery.fn.jquery+" Please update your jQuery library.")}function ugCheckForErrors(e,t){function i(){if("undefined"==typeof jQuery)throw new Error("jQuery library not included")}function n(){if("function"==typeof jQuery.fn.unitegallery)return!0;var e="You have some jquery.js library include that comes after the gallery files js include.";throw e+="<br> This include eliminates the gallery libraries, and make it not work.","cms"==t?(e+="<br><br> To fix it you can:<br> 1. In the Gallery Settings -> Troubleshooting set option: <strong><b>Put JS Includes To Body</b></strong> option to true.",e+="<br> 2. Find the double jquery.js include and remove it."):e+="<br><br> Please find and remove this jquery.js include and the gallery will work. <br> * There should be only one jquery.js include before all other js includes in the page.",new Error(e)}try{"jquery"==t?(i(),ugCheckForMinJQueryVersion()):(ugCheckForMinJQueryVersion(),n())}catch(r){var o=r.message;if(o="Unite Gallery Error: "+o,o="<div style='font-size:16px;color:#BC0C06;max-width:900px;border:1px solid red;padding:10px;'>"+o+"</div>","jquery"==t){var a=document.getElementById(e);a.innerHTML=o,a.style.display="block"}else jQuery(e).show().html(o);return!1}return!0}function UniteGalleryMain(){function __________INIT_GALLERY_______(){}function getThemeFunction(e){var t=e;return-1==t.indexOf("UGTheme_")&&(t="UGTheme_"+t),t}function initTheme(objCustomOptions){if(objCustomOptions.hasOwnProperty("gallery_theme"))g_options.gallery_theme=objCustomOptions.gallery_theme;else{var defaultTheme=g_options.gallery_theme;0==g_ugFunctions.isThemeRegistered(defaultTheme)&&(g_options.gallery_theme=g_ugFunctions.getFirstRegisteredTheme())}var themeFunction=getThemeFunction(g_options.gallery_theme);try{g_options.gallery_theme=eval(themeFunction)}catch(e){}g_options.gallery_theme=eval(themeFunction),g_objTheme=new g_options.gallery_theme,g_objTheme.init(t,objCustomOptions)}function resetOptions(){g_options=jQuery.extend({},g_temp.originalOptions),g_selectedItemIndex=-1,g_selectedItem=null,g_objSlider=void 0,g_objThumbs=void 0,g_objSlider=void 0}function checkForStartupErrors(){try{ugCheckForMinJQueryVersion()}catch(e){throwErrorShowMessage(e.message)}"object"==typeof g_objWrapper.outerWidth()&&throwErrorShowMessage("You have some buggy script. most chances jquery-ui.js that destroy jquery outerWidth, outerHeight functions. The gallery can't run. Please update jquery-ui.js to latest version."),setTimeout(function(){ugCheckForErrors(g_galleryID,"cms")},5e3)}function runGallery(e,i,n,r){var o="object"==typeof i;if(o&&(g_temp.objCustomOptions=i),1==g_temp.isRunFirstTime){if(g_galleryID=e,g_objWrapper=jQuery(g_galleryID),0==g_objWrapper.length)return trace("div with id: "+g_galleryID+" not found"),!1;g_objParent=g_objWrapper.parent(),checkForStartupErrors(),g_temp.originalOptions=jQuery.extend({},g_options),o&&(g_options=jQuery.extend(g_options,i)),1==g_options.gallery_enable_cache&&g_options.gallery_initial_catid&&cacheItems(g_options.gallery_initial_catid),t.setSizeClass();var a=g_objWrapper.children();fillItemsArray(a),loadAPIs(),g_objWrapper.find("img").fadeTo(0,0).hide(),g_objWrapper.show(),clearInitData()}else if(t.destroy(),resetOptions(),g_options=jQuery.extend(g_options,g_temp.objCustomOptions),n){if(r&&1==g_options.gallery_enable_cache&&cacheItems(r,n),"noitems"==n)return showErrorMessage("No items in this category",""),!1;g_objWrapper.html(n);var a=g_objWrapper.children();fillItemsArray(a),loadAPIs(),g_objWrapper.children().fadeTo(0,0).hide(),g_objWrapper.show(),clearInitData()}1==g_temp.isRunFirstTime&&1==g_options.gallery_enable_tabs&&(g_objTabs=new UGTabs,g_objTabs.init(t,g_options)),o&&modifyInitParams(g_temp.objCustomOptions),validateParams(),1==g_options.gallery_shuffle&&t.shuffleItems(),initTheme(g_temp.objCustomOptions),setGalleryHtml(),setHtmlObjectsProperties();var s=g_objWrapper.width();0==s?g_functions.waitForWidth(g_objWrapper,runGalleryActually):runGalleryActually()}function runGalleryActually(){t.setSizeClass(),0==g_temp.isFreestyleMode&&1==g_options.gallery_preserve_ratio&&setHeightByOriginalRatio(),g_objTheme.run(),g_objTabs&&g_temp.isRunFirstTime&&g_objTabs.run(),preloadBigImages(),initEvents(),g_numItems>0&&t.selectItem(0),1==g_options.gallery_autoplay&&t.startPlayMode(),g_temp.isRunFirstTime=!1}function showErrorMessage(e,t){if("undefined"==typeof t)var t="<b>Unite Gallery Error: </b>";e=t+e;var i="<div class='ug-error-message-wrapper'><div class='ug-error-message'>"+e+"</div></div>";g_objWrapper.children().remove(),g_objWrapper.html(i),g_objWrapper.show()}function throwErrorShowMessage(e){throw showErrorMessage(e),new Error(e)}function modifyInitParams(){g_options.gallery_images_preload_type||(g_options.gallery_images_preload_type="minimal"),(void 0==g_options.gallery_min_height||g_options.gallery_height<g_options.gallery_min_height)&&(g_options.gallery_min_height=0),(void 0==g_options.gallery_min_width||g_options.gallery_width<g_options.gallery_min_width)&&(g_options.gallery_min_width=0)}function validateParams(){if(!g_options.gallery_theme)throw new Error("The gallery can't run without theme");if(jQuery.isNumeric(g_options.gallery_height)&&g_options.gallery_height<g_options.gallery_min_height)throw new Error("The <b>gallery_height</b> option must be bigger then <b>gallery_min_height option</b>");if(g_options.gallery_width<g_options.gallery_min_width)throw new Error("The <b>gallery_width</b> option must be bigger then <b>gallery_min_width option</b>")}function setGalleryHtml(){g_objWrapper.addClass("ug-gallery-wrapper"),g_objWrapper.append("<div class='ug-overlay-disabled' style='display:none'></div>"),t.setSizeClass()}function clearInitData(){g_objWrapper.children().remove()}function storeLastSize(){var e=t.getSize();g_temp.lastWidth=e.width,g_temp.lastHeight=e.height}function setHeightByOriginalRatio(){var e=t.getSize(),i=e.width/e.height;if(i!=e.orig_ratio){var n=e.width/e.orig_ratio;n=Math.round(n),n<g_options.gallery_min_height&&(n=g_options.gallery_min_height),g_objWrapper.height(n)}}function setHtmlObjectsProperties(){var e=g_functions.getCssSizeParam(g_options.gallery_width),t={"max-width":e,"min-width":g_functions.getCssSizeParam(g_options.gallery_min_width)};if(0==g_temp.isFreestyleMode){var i=g_functions.getCssSizeParam(g_options.gallery_height);t.height=i}else t.overflow="visible";g_options.gallery_background_color&&(t["background-color"]=g_options.gallery_background_color),g_objWrapper.css(t)}function fillItemsArray(e){g_arrItems=[];for(var i=t.isMobileMode(),n=0,r=0;r<e.length;r++){var o=jQuery(e[r]),a=o.prop("tagName").toLowerCase(),s="";if("a"==a){s=o.attr("href"),o=o.children();var a=o.prop("tagName").toLowerCase()}var l=o.data("type");void 0==l&&(l="image");var u={};if(u.type=l,"img"==a){var d=o.data("lazyload-src");d&&""!=d&&(o.attr("src",d),jQuery.removeData(o,"lazyload-src"));var _=o.data("image"),g=o.data("thumb");"undefined"==typeof _&&(_=null),"undefined"==typeof g&&(g=null);var c=o.attr("src");_||(_=c),g||(g=c),g||(g=_),_||(_=g),u.urlThumb=g,u.urlImage=_,u.title=o.attr("alt"),u.objThumbImage=o,u.objThumbImage.attr("src",u.urlThumb)}else{if("image"==l)throw trace("Problematic gallery item found:"),trace(o),trace("Please look for some third party js script that could add this item to the gallery"),new Error("The item should not be image type");u.urlThumb=o.data("thumb"),u.title=o.data("title"),u.objThumbImage=null,u.urlImage=o.data("image")}if(1==i){var h=o.data("thumb-mobile");"undefined"!=typeof h&&""!=h&&(u.urlThumb=h,"img"==a&&o.attr("src",u.urlThumb));var p=o.data("image-mobile");"undefined"!=typeof p&&""!=p&&(u.urlImage=p)}u.link=s,u.description=o.attr("title"),u.description||(u.description=o.data("description")),u.description||(u.description=""),u.isLoaded=!1,u.isThumbImageLoaded=!1,u.objPreloadImage=null,u.isBigImageLoadStarted=!1,u.isBigImageLoaded=!1,u.isBigImageLoadError=!1,u.imageWidth=0,u.imageHeight=0,u.thumbWidth=0,u.thumbHeight=0,u.thumbRatioByWidth=0,u.thumbRatioByHeight=0;var f=o.data("width"),m=o.data("height");f&&"number"==typeof f&&m&&"number"==typeof m&&(u.thumbWidth=f,u.thumbHeight=m,u.thumbRatioByWidth=f/m,u.thumbRatioByHeight=m/f),u.addHtml=null;var v=void 0==u.urlImage||""==u.urlImage,b=void 0==u.urlThumb||""==u.urlThumb;switch(u.type){case"youtube":if(u.videoid=o.data("videoid"),v||b){var y=g_ugYoutubeAPI.getVideoImages(u.videoid);v&&(u.urlImage=y.preview),b&&(u.urlThumb=y.thumb,"img"==a&&o.attr("src",u.urlThumb))}g_temp.isYoutubePresent=!0;break;case"vimeo":u.videoid=o.data("videoid"),g_temp.isVimeoPresent=!0;break;case"html5video":u.videoogv=o.data("videoogv"),u.videowebm=o.data("videowebm"),u.videomp4=o.data("videomp4"),g_temp.isHtml5VideoPresent=!0;break;case"soundcloud":u.trackid=o.data("trackid"),g_temp.isSoundCloudPresent=!0;break;case"wistia":u.videoid=o.data("videoid"),g_temp.isWistiaPresent=!0;break;case"custom":var I=o.children("img");I.length&&(I=jQuery(I[0]),u.urlThumb=I.attr("src"),u.title=I.attr("alt"),u.objThumbImage=I);var w=o.children().not("img:first-child");w.length&&(u.addHtml=w.clone())}u.objThumbImage&&(u.objThumbImage.removeAttr("data-description",""),u.objThumbImage.removeAttr("data-image",""),u.objThumbImage.removeAttr("data-thumb",""),u.objThumbImage.removeAttr("title","")),u.index=n,g_arrItems.push(u),n++}g_numItems=g_arrItems.length}function loadAPIs(){g_temp.isYoutubePresent&&g_ugYoutubeAPI.loadAPI(),g_temp.isVimeoPresent&&g_ugVimeoAPI.loadAPI(),g_temp.isHtml5VideoPresent&&g_ugHtml5MediaAPI.loadAPI(),g_temp.isSoundCloudPresent&&g_ugSoundCloudAPI.loadAPI(),g_temp.isWistiaPresent&&g_ugWistiaAPI.loadAPI()}function preloadBigImages(){if("visible"!=g_options.gallery_images_preload_type||g_objThumbs||(g_options.gallery_images_preload_type="minimal"),1==g_temp.isAllItemsPreloaded)return!0;switch(g_options.gallery_images_preload_type){default:case"minimal":break;case"all":jQuery(g_arrItems).each(function(){preloadItemImage(this)});break;case"visible":jQuery(g_arrItems).each(function(){var e=this,t=g_objThumbs.isItemThumbVisible(e);1==t&&preloadItemImage(e)})}}function checkPreloadItemImage(e){if(1==e.isBigImageLoadStarted||1==e.isBigImageLoaded||1==e.isBigImageLoadError)return!1;switch(g_options.gallery_images_preload_type){default:case"minimal":break;case"all":preloadItemImage(e);break;case"visible":var t=g_objThumbs.isItemThumbVisible(e);1==t&&preloadItemImage(e)}}function preloadItemImage(e){if(1==e.isBigImageLoadStarted||1==e.isBigImageLoaded||1==e.isBigImageLoadError)return!0;var i=e.urlImage;return""==i||void 0==i?(e.isBigImageLoadError=!0,!1):(e.isBigImageLoadStarted=!0,e.objPreloadImage=jQuery("<img/>").attr("src",i),e.objPreloadImage.data("itemIndex",e.index),e.objPreloadImage.on("load",t.onItemBigImageLoaded),e.objPreloadImage.on("error",function(){var e=jQuery(this),i=e.data("itemIndex"),n=g_arrItems[i];n.isBigImageLoadError=!0,n.isBigImageLoaded=!1;var r=jQuery(this).attr("src");console.log("Can't load image: "+r),g_objGallery.trigger(t.events.ITEM_IMAGE_UPDATED,[i,n.urlImage]),n.objThumbImage.attr("src",n.urlThumb)}),void checkAllItemsStartedPreloading())}function preloadNearBigImages(e){if(1==g_temp.isAllItemsPreloaded)return!1;if(!e)var e=g_selectedItem;if(!e)return!0;var t=e.index,i=t-1,n=t+1;i>0&&preloadItemImage(g_arrItems[i]),g_numItems>n&&preloadItemImage(g_arrItems[n])}function checkAllItemsStartedPreloading(){if(1==g_temp.isAllItemsPreloaded)return!1;for(var e in g_arrItems)if(0==g_arrItems[e].isBigImageLoadStarted)return!1;g_temp.isAllItemsPreloaded=!0}function __________END_INIT_GALLERY_______(){}function __________EVENTS_____________(){}function onSliderMouseEnter(e){1==g_options.gallery_pause_on_mouseover&&0==t.isFullScreen()&&1==g_temp.isPlayMode&&g_objSlider&&0==g_objSlider.isSlideActionActive()&&t.pausePlaying()}function onSliderMouseLeave(e){if(1==g_options.gallery_pause_on_mouseover&&1==g_temp.isPlayMode&&g_objSlider&&0==g_objSlider.isSlideActionActive()){var i=g_objSlider.isCurrentSlideLoadingImage();0==i&&t.continuePlaying()}}function onKeyPress(e){var i=jQuery(e.target);if(i.is("textarea")||i.is("select")||i.is("input"))return!0;var n=e.charCode?e.charCode:e.keyCode?e.keyCode:e.which?e.which:0,r=!0;switch(n){case 39:t.nextItem();break;case 37:t.prevItem();break;default:r=!1}1==r&&(e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation()),g_objGallery.trigger(t.events.GALLERY_KEYPRESS,[n,e])}function onGalleryResized(){var e=t.getSize();if(0==e.width)return!0;t.setSizeClass();var e=t.getSize();if(e.width!=g_temp.lastWidth||e.height!=g_temp.lastHeight){var i=!1;if(g_temp.funcCustomHeight){var n=g_temp.funcCustomHeight(e);n&&(g_objWrapper.height(n),i=!0)}0==i&&1==g_options.gallery_preserve_ratio&&0==g_temp.isFreestyleMode&&setHeightByOriginalRatio(),storeLastSize(),g_objGallery.trigger(t.events.SIZE_CHANGE); +}}function onThumbsChange(e){"visible"==g_options.gallery_images_preload_type&&0==g_temp.isAllItemsPreloaded&&preloadBigImages()}function onFullScreenChange(){var e=g_functions.isFullScreen(),i=e?t.events.ENTER_FULLSCREEN:t.events.EXIT_FULLSCREEN,n=g_functions.getGlobalData("fullscreenID");return g_galleryID!==n?!0:(e?g_objWrapper.addClass("ug-fullscreen"):g_objWrapper.removeClass("ug-fullscreen"),g_objGallery.trigger(i),void onGalleryResized())}function onItemImageUpdated(e,i){var n=t.getItem(i);checkPreloadItemImage(n)}function onCurrentSlideImageLoadEnd(){1==t.isPlayMode()&&t.continuePlaying()}function initEvents(){if(g_objWrapper.on("dragstart",function(e){e.preventDefault()}),g_objGallery.on(t.events.ITEM_IMAGE_UPDATED,onItemImageUpdated),g_objThumbs)switch(g_temp.thumbsType){case"strip":jQuery(g_objThumbs).on(g_objThumbs.events.STRIP_MOVE,onThumbsChange);break;case"grid":jQuery(g_objThumbs).on(g_objThumbs.events.PANE_CHANGE,onThumbsChange)}if("advance"==g_options.gallery_mousewheel_role&&0==g_temp.isFreestyleMode&&g_objWrapper.on("mousewheel",t.onGalleryMouseWheel),storeLastSize(),jQuery(window).resize(function(){g_objWrapper.css("width","auto"),g_functions.whenContiniousEventOver("gallery_resize",onGalleryResized,g_temp.resizeDelay)}),setTimeout(function(){setInterval(onGalleryResized,2e3)},1e4),g_functions.addFullScreenChangeEvent(onFullScreenChange),g_objSlider){if(jQuery(g_objSlider).on(g_objSlider.events.ITEM_CHANGED,function(){var e=g_objSlider.getCurrentItemIndex();-1!=e&&t.selectItem(e)}),1==g_options.gallery_pause_on_mouseover){var e=g_objSlider.getElement();e.hover(onSliderMouseEnter,onSliderMouseLeave),g_objGallery.on(t.events.ENTER_FULLSCREEN,function(){onSliderMouseLeave()})}retriggerEvent(g_objSlider,g_objSlider.events.ACTION_START,t.events.SLIDER_ACTION_START),retriggerEvent(g_objSlider,g_objSlider.events.ACTION_END,t.events.SLIDER_ACTION_END),jQuery(g_objSlider).on(g_objSlider.events.CURRENTSLIDE_LOAD_END,onCurrentSlideImageLoadEnd)}1==g_options.gallery_control_keyboard&&jQuery(document).keydown(onKeyPress)}function __________GENERAL_______(){}function cacheItems(e,t){if(t){var i=t;"noitems"!=i&&(i=jQuery(t).clone())}else var i=g_objWrapper.children().clone();g_objCache[e]=i}function removeAllSizeClasses(e){e||(e=g_objWrapper),e.removeClass("ug-under-480"),e.removeClass("ug-under-780"),e.removeClass("ug-under-960")}function retriggerEvent(e,t,i){jQuery(e).on(t,function(e){g_objGallery.trigger(i,[this])})}function advanceNextStep(){var e=jQuery.now(),i=e-g_temp.playTimeLastStep;if(g_temp.playTimePassed+=i,g_temp.playTimeLastStep=e,g_temp.objProgress){var n=g_temp.playTimePassed/g_options.gallery_play_interval;g_temp.objProgress.setProgress(n)}g_temp.playTimePassed>=g_options.gallery_play_interval&&(t.nextItem(),g_temp.playTimePassed=0)}function unselectSeletedItem(){return null==g_selectedItem?!0:(g_objThumbs&&g_objThumbs.setThumbUnselected(g_selectedItem.objThumbWrapper),g_selectedItem=null,void(g_selectedItemIndex=-1))}function toFakeFullScreen(){jQuery("body").addClass("ug-body-fullscreen"),g_objWrapper.addClass("ug-fake-fullscreen"),g_temp.isFakeFullscreen=!0,g_objGallery.trigger(t.events.ENTER_FULLSCREEN),g_objGallery.trigger(t.events.SIZE_CHANGE)}function exitFakeFullscreen(){jQuery("body").removeClass("ug-body-fullscreen"),g_objWrapper.removeClass("ug-fake-fullscreen"),g_temp.isFakeFullscreen=!1,g_objGallery.trigger(t.events.EXIT_FULLSCREEN),g_objGallery.trigger(t.events.SIZE_CHANGE)}var t=this,g_galleryID,g_objGallery=jQuery(t),g_objWrapper,g_objParent,g_objThumbs,g_objSlider,g_functions=new UGFunctions,g_objTabs,g_arrItems=[],g_numItems,g_selectedItem=null,g_selectedItemIndex=-1,g_objTheme,g_objCache={};this.events={ITEM_CHANGE:"item_change",SIZE_CHANGE:"size_change",ENTER_FULLSCREEN:"enter_fullscreen",EXIT_FULLSCREEN:"exit_fullscreen",START_PLAY:"start_play",STOP_PLAY:"stop_play",PAUSE_PLAYING:"pause_playing",CONTINUE_PLAYING:"continue_playing",SLIDER_ACTION_START:"slider_action_start",SLIDER_ACTION_END:"slider_action_end",ITEM_IMAGE_UPDATED:"item_image_updated",GALLERY_KEYPRESS:"gallery_keypress",GALLERY_BEFORE_REQUEST_ITEMS:"gallery_before_request_items",OPEN_LIGHTBOX:"open_lightbox",CLOSE_LIGHTBOX:"close_lightbox"};var g_options={gallery_width:900,gallery_height:500,gallery_min_width:150,gallery_min_height:100,gallery_theme:"default",gallery_skin:"default",gallery_images_preload_type:"minimal",gallery_autoplay:!1,gallery_play_interval:3e3,gallery_pause_on_mouseover:!0,gallery_mousewheel_role:"zoom",gallery_control_keyboard:!0,gallery_carousel:!0,gallery_preserve_ratio:!0,gallery_background_color:"",gallery_debug_errors:!1,gallery_shuffle:!1,gallery_urlajax:null,gallery_enable_tabs:!1,gallery_enable_cache:!0,gallery_initial_catid:""},g_temp={objCustomOptions:{},isAllItemsPreloaded:!1,isFreestyleMode:!1,lastWidth:0,lastHeigh:0,handleResize:null,isInited:!1,isPlayMode:!1,isPlayModePaused:!1,playTimePassed:0,playTimeLastStep:0,playHandle:"",playStepInterval:33,objProgress:null,isFakeFullscreen:!1,thumbsType:null,isYoutubePresent:!1,isVimeoPresent:!1,isHtml5VideoPresent:!1,isSoundCloudPresent:!1,isWistiaPresent:!1,resizeDelay:100,isRunFirstTime:!0,originalOptions:{},funcCustomHeight:null};this.onItemBigImageLoaded=function(e,t){if(!t)var t=jQuery(this);var i=t.data("itemIndex"),n=g_arrItems[i];n.isBigImageLoaded=!0;var r=g_functions.getImageOriginalSize(t);n.imageWidth=r.width,n.imageHeight=r.height},this.checkFillImageSize=function(e,t){if(!t){var i=e.data("itemIndex");if(void 0===i)throw new Error("Wrong image given to gallery.checkFillImageSize");var t=g_arrItems[i]}var n=g_functions.getImageOriginalSize(e);t.imageWidth=n.width,t.imageHeight=n.height},this.setFreestyleMode=function(){g_temp.isFreestyleMode=!0},this.attachThumbsPanel=function(e,t){g_temp.thumbsType=e,g_objThumbs=t},this.initSlider=function(e,i){if(!e)var e={};e=jQuery.extend(g_temp.objCustomOptions,e),g_objSlider=new UGSlider,g_objSlider.init(t,e,i)},this.onGalleryMouseWheel=function(e,i,n,r){e.preventDefault(),i>0?t.prevItem():t.nextItem()},this.destroy=function(){if(g_objWrapper.off("dragstart"),g_objGallery.off(t.events.ITEM_IMAGE_UPDATED),g_objThumbs)switch(g_temp.thumbsType){case"strip":jQuery(g_objThumbs).off(g_objThumbs.events.STRIP_MOVE);break;case"grid":jQuery(g_objThumbs).off(g_objThumbs.events.PANE_CHANGE)}if(g_objWrapper.off("mousewheel"),jQuery(window).off("resize"),g_functions.destroyFullScreenChangeEvent(),g_objSlider){jQuery(g_objSlider).off(g_objSlider.events.ITEM_CHANGED);var e=g_objSlider.getElement();e.off("mouseenter"),e.off("mouseleave"),g_objGallery.off(t.events.ENTER_FULLSCREEN),jQuery(g_objSlider).off(g_objSlider.events.ACTION_START),jQuery(g_objSlider).off(g_objSlider.events.ACTION_END),jQuery(g_objSlider).off(g_objSlider.events.CURRENTSLIDE_LOAD_END)}1==g_options.gallery_control_keyboard&&jQuery(document).off("keydown"),g_objTheme&&"function"==typeof g_objTheme.destroy&&g_objTheme.destroy(),g_objWrapper.html("")},this.getArrItems=function(){return g_arrItems},this.getObjects=function(){var e={g_galleryID:g_galleryID,g_objWrapper:g_objWrapper,g_objThumbs:g_objThumbs,g_objSlider:g_objSlider,g_options:g_options,g_arrItems:g_arrItems,g_numItems:g_numItems};return e},this.getObjSlider=function(){return g_objSlider},this.getItem=function(e){if(0>e)throw new Error("item with index: "+e+" not found");if(e>=g_numItems)throw new Error("item with index: "+e+" not found");return g_arrItems[e]},this.getWidth=function(){var e=t.getSize();return e.width},this.getHeight=function(){var e=t.getSize();return e.height},this.getSize=function(){var e=g_functions.getElementSize(g_objWrapper);return e.orig_width=g_options.gallery_width,e.orig_height=g_options.gallery_height,e.orig_ratio=e.orig_width/e.orig_height,e},this.getGalleryID=function(){var e=g_galleryID.replace("#","");return e},this.getNextItem=function(e,t){"object"==typeof e&&(e=e.index);var i=e+1;if(t!==!0&&1==g_numItems)return null;if(i>=g_numItems){if(1!=g_options.gallery_carousel&&t!==!0)return null;i=0}var n=g_arrItems[i];return n},this.getPrevItem=function(e){"object"==typeof e&&(e=e.index);var t=e-1;if(0>t){if(1!=g_options.gallery_carousel&&forceCarousel!==!0)return null;t=g_numItems-1}var i=g_arrItems[t];return i},this.getSelectedItem=function(){return g_selectedItem},this.getSelectedItemIndex=function(){return g_selectedItemIndex},this.getNumItems=function(){return g_numItems},this.isLastItem=function(){return g_selectedItemIndex==g_numItems-1?!0:!1},this.isFirstItem=function(){return 0==g_selectedItemIndex?!0:!1},this.getOptions=function(){return g_options},this.getElement=function(){return g_objWrapper},this.___________SET_CONTROLS___________=function(){},this.setNextButton=function(e){e.data("ug-button",!0),g_functions.setButtonOnClick(e,t.nextItem)},this.setPrevButton=function(e){e.data("ug-button",!0),g_functions.setButtonOnClick(e,t.prevItem)},this.setFullScreenToggleButton=function(e){e.data("ug-button",!0),g_functions.setButtonOnClick(e,t.toggleFullscreen),g_objGallery.on(t.events.ENTER_FULLSCREEN,function(){e.addClass("ug-fullscreenmode")}),g_objGallery.on(t.events.EXIT_FULLSCREEN,function(){e.removeClass("ug-fullscreenmode")})},this.destroyFullscreenButton=function(e){g_functions.destroyButton(e),g_objGallery.off(t.events.ENTER_FULLSCREEN),g_objGallery.off(t.events.EXIT_FULLSCREEN)},this.setPlayButton=function(e){e.data("ug-button",!0),g_functions.setButtonOnClick(e,t.togglePlayMode),g_objGallery.on(t.events.START_PLAY,function(){e.addClass("ug-stop-mode")}),g_objGallery.on(t.events.STOP_PLAY,function(){e.removeClass("ug-stop-mode")})},this.destroyPlayButton=function(e){g_functions.destroyButton(e),g_objGallery.off(t.events.START_PLAY),g_objGallery.off(t.events.STOP_PLAY)},this.setProgressIndicator=function(e){g_temp.objProgress=e},this.setTextContainers=function(e,i){g_objGallery.on(t.events.ITEM_CHANGE,function(){var n=t.getSelectedItem();e.html(n.title),i.html(n.description)})},this.showDisabledOverlay=function(){g_objWrapper.children(".ug-overlay-disabled").show()},this.hideDisabledOverlay=function(){g_objWrapper.children(".ug-overlay-disabled").hide()},this.___________END_SET_CONTROLS___________=function(){},this.___________PLAY_MODE___________=function(){},this.startPlayMode=function(){if(g_temp.isPlayMode=!0,g_temp.isPlayModePaused=!1,g_temp.playTimePassed=0,g_temp.playTimeLastStep=jQuery.now(),g_temp.playHandle=setInterval(advanceNextStep,g_temp.playStepInterval),g_temp.objProgress){var e=g_temp.objProgress.getElement();g_temp.objProgress.setProgress(0),e.show()}g_objGallery.trigger(t.events.START_PLAY),g_objSlider&&1==g_objSlider.isCurrentSlideLoadingImage()&&t.pausePlaying()},this.resetPlaying=function(){return 0==g_temp.isPlayMode?!0:(g_temp.playTimePassed=0,void(g_temp.playTimeLastStep=jQuery.now()))},this.pausePlaying=function(){return 1==g_temp.isPlayModePaused?!0:(g_temp.isPlayModePaused=!0,clearInterval(g_temp.playHandle),void g_objGallery.trigger(t.events.PAUSE_PLAYING))},this.continuePlaying=function(){return 0==g_temp.isPlayModePaused?!0:(g_temp.isPlayModePaused=!1,g_temp.playTimeLastStep=jQuery.now(),void(g_temp.playHandle=setInterval(advanceNextStep,g_temp.playStepInterval)))},this.stopPlayMode=function(){if(g_temp.isPlayMode=!1,clearInterval(g_temp.playHandle),g_temp.playTimePassed=0,g_temp.objProgress){var e=g_temp.objProgress.getElement();e.hide()}g_objGallery.trigger(t.events.STOP_PLAY)},this.isPlayMode=function(){return g_temp.isPlayMode},this.togglePlayMode=function(){0==t.isPlayMode()?t.startPlayMode():t.stopPlayMode()},this.___________GENERAL_EXTERNAL___________=function(){},this.shuffleItems=function(){g_arrItems=g_functions.arrayShuffle(g_arrItems);for(var e in g_arrItems)g_arrItems[e].index=parseInt(e)},this.setOptions=function(e){g_options=jQuery.extend(g_options,e)},this.selectItem=function(e,i){"number"==typeof e&&(e=t.getItem(e));var n=e.index;if(n==g_selectedItemIndex)return!0;if(unselectSeletedItem(),g_selectedItem=e,g_selectedItemIndex=n,g_objGallery.trigger(t.events.ITEM_CHANGE,[e,i]),1==g_temp.isPlayMode){t.resetPlaying();var r=g_objSlider.isCurrentSlideLoadingImage();1==r&&t.pausePlaying()}},this.nextItem=function(){var e=g_selectedItemIndex+1;return 0==g_numItems?!0:0==g_options.gallery_carousel&&e>=g_numItems?!0:(e>=g_numItems&&(e=0),void t.selectItem(e,"next"))},this.prevItem=function(){var e=g_selectedItemIndex-1;return-1==g_selectedItemIndex&&(e=0),0==g_numItems?!0:0==g_options.gallery_carousel&&0>e?!0:(0>e&&(e=g_numItems-1),void t.selectItem(e,"prev"))},this.isFullScreen=function(){return 1==g_temp.isFakeFullscreen?!0:1==g_functions.isFullScreen()?!0:!1},this.isFakeFullscreen=function(){return g_temp.isFakeFullscreen},this.toFullScreen=function(){g_functions.setGlobalData("fullscreenID",g_galleryID);var e=g_objWrapper.get(0),t=g_functions.toFullscreen(e);0==t&&toFakeFullScreen()},this.exitFullScreen=function(){1==g_temp.isFakeFullscreen?exitFakeFullscreen():g_functions.exitFullscreen()},this.toggleFullscreen=function(){0==t.isFullScreen()?t.toFullScreen():t.exitFullScreen()},this.resize=function(e,t,i){g_objWrapper.css("width","auto"),g_objWrapper.css("max-width",e+"px"),t&&g_objWrapper.height(t),i||i===!0||onGalleryResized()},this.setSizeClass=function(e,i){if(!e)var e=g_objWrapper;if(!i)var n=t.getSize(),i=n.width;if(0==i)var i=jQuery(window).width();var r="";return 480>=i?r="ug-under-480":780>=i?r="ug-under-780":960>i&&(r="ug-under-960"),1==e.hasClass(r)?!0:(removeAllSizeClasses(e),void(""!=r&&e.addClass(r)))},this.isMobileMode=function(){return g_objWrapper.hasClass("ug-under-480")?!0:!1},this.isSmallWindow=function(){var e=jQuery(window).width();return e?480>=e?!0:!1:!0},this.changeItems=function(e,t){if(!e)var e="noitems";runGallery(g_galleryID,"nochange",e,t)},this.showErrorMessageReplaceGallery=function(e){showErrorMessage(e)},this.setFuncCustomHeight=function(e){g_temp.funcCustomHeight=e},this.__________AJAX_REQUEST_______=function(){},this.ajaxRequest=function(e,t,i,n){var r="html";if(1==i&&(r="json"),!n||"function"!=typeof n)throw new Error("ajaxRequest error: success function should be passed");var o=g_options.gallery_urlajax;if(""==o)throw new Error("ajaxRequest error: Ajax url don't passed");if("undefined"==typeof t)var t={};var a={action:"unitegallery_ajax_action",client_action:e,galleryID:g_galleryID,data:t};jQuery.ajax({type:"post",url:g_options.gallery_urlajax,dataType:"json",data:a,success:function(e){return e?-1==e||0===e?(showErrorMessage("ajax error!!!"),!1):"undefined"==typeof e.success?(showErrorMessage("The 'success' param is a must!"),!1):0==e.success?(showErrorMessage(e.message),!1):void n(e):(showErrorMessage("Empty ajax response!","Ajax Error"),!1)},error:function(e,t,i){console.log("Ajax Error!!! "+t)}})},this.requestNewItems=function(e,i,n){var r=g_options.gallery_enable_cache;if(n||(n=e),1==i&&(r=!1),1==r&&g_objCache.hasOwnProperty(n)){var o=g_objCache[n];t.changeItems(o,n)}else g_objGallery.trigger(t.events.GALLERY_BEFORE_REQUEST_ITEMS),t.ajaxRequest("front_get_cat_items",{catid:e},!0,function(e){var i=e.html;t.changeItems(i,n)})},this.run=function(e,t){g_options.gallery_debug_errors;if(t&&t.hasOwnProperty("gallery_debug_errors")&&(g_options.gallery_debug_errors=t.gallery_debug_errors),1==g_options.gallery_debug_errors)try{runGallery(e,t)}catch(i){if("object"==typeof i){var n=i.message,r=i.lineNumber,o=i.fileName;i.stack;n+=" <br><br> in file: "+o,n+=" <b> line "+r+"</b>",trace(i)}else var n=i;n=n.replace("Error:",""),showErrorMessage(n)}else runGallery(e,t)}}function UGLightbox(){function e(e,i){ie=e,U=jQuery(e),ae=jQuery.extend(ae,le),ae=jQuery.extend(ae,i),se.originalOptions=jQuery.extend({},ae),"compact"==ae.lightbox_type&&(se.isCompact=!0,ae=jQuery.extend(ae,ue),ae=jQuery.extend(ae,i)),t(),1==se.putSlider?(ie.initSlider(ae,"lightbox"),g_objects=e.getObjects(),ne=g_objects.g_objSlider):ne=null,1==ae.lightbox_show_textpanel?oe.init(ie,ae,"lightbox"):oe=null}function t(){1==se.isCompact&&1==ae.lightbox_show_textpanel&&(ae.lightbox_slider_image_padding_bottom=se.initTextPanelHeight),1==se.isCompact&&"inside"==ae.lightbox_arrows_position&&(se.isArrowsInside=!0),1==se.isArrowsInside&&0==ae.lightbox_arrows_inside_alwayson&&(se.isArrowsOnHoverMode=!0),0==ae.lightbox_show_textpanel&&(se.isTopPanelEnabled=!1,se.topPanelHeight=0,ae.lightbox_slider_image_padding_top=0)}function i(){var e="",t="";1==se.isCompact&&(t=" ug-lightbox-compact"),e+="<div class='ug-gallery-wrapper ug-lightbox"+t+"'>",e+="<div class='ug-lightbox-overlay'></div>",0==se.isCompact&&se.isTopPanelEnabled?(e+="<div class='ug-lightbox-top-panel'>",e+="<div class='ug-lightbox-top-panel-overlay'></div>",ae.lightbox_show_numbers&&(e+="<div class='ug-lightbox-numbers'></div>"),e+="</div>"):ae.lightbox_show_numbers&&(e+="<div class='ug-lightbox-numbers'></div>"),e+="<div class='ug-lightbox-button-close'></div>",e+="<div class='ug-lightbox-arrow-left'></div>",e+="<div class='ug-lightbox-arrow-right'></div>",e+="</div>",V=jQuery(e),jQuery("body").append(V),ne&&ne.setHtml(V),X=V.children(".ug-lightbox-overlay"),0==se.isCompact&&1==se.isTopPanelEnabled&&($=V.children(".ug-lightbox-top-panel"),0==$.length&&($=null)),K=V.find(".ug-lightbox-button-close"),ae.lightbox_show_numbers&&(J=V.find(".ug-lightbox-numbers")),Z=V.children(".ug-lightbox-arrow-left"),q=V.children(".ug-lightbox-arrow-right"),oe&&($?oe.appendHTML($):oe.appendHTML(V))}function n(){if(null!==ae.lightbox_overlay_color&&X.css("background-color",ae.lightbox_overlay_color),null!==ae.lightbox_overlay_opacity&&X.fadeTo(0,ae.lightbox_overlay_opacity),$&&null!==ae.lightbox_top_panel_opacity&&$.children(".ug-lightbox-top-panel-overlay").fadeTo(0,ae.lightbox_top_panel_opacity),J){var e={};null!==ae.lightbox_numbers_size&&(e["font-size"]=ae.lightbox_numbers_size+"px"),ae.lightbox_numbers_color&&(e.color=ae.lightbox_numbers_color),null!==ae.lightbox_numbers_padding_right&&(e["padding-right"]=ae.lightbox_numbers_padding_right+"px"),null!==ae.lightbox_numbers_padding_top&&(e["padding-top"]=ae.lightbox_numbers_padding_top+"px"),J.css(e)}}function r(e){if(!ne)return!0;var t={slider_image_padding_top:e};ne.setOptions(t),ne.refreshSlideItems()}function o(e){if(!$)return!1;if(!oe)return!1;var t=$.height();if(0==t)return!1;if(0==$.is(":visible"))return!1;var i=t,n=oe.getSize(),o=n.height;t!=se.topPanelHeight&&(i=se.topPanelHeight),o>i&&(i=o),t!=i&&($.height(i),ne&&0==ne.isAnimating()&&r(i))}function a(e){var t={},i=ae.lightbox_textpanel_width,n=47,r=40,a=e.width-n-r;i>a?(t.textpanel_padding_left=n,t.textpanel_padding_right=r,t.textpanel_title_text_align="center",t.textpanel_desc_text_align="center"):(t.textpanel_padding_left=Math.floor((e.width-i)/2),t.textpanel_padding_right=t.textpanel_padding_left,t.textpanel_title_text_align="left",t.textpanel_desc_text_align="left",ae.lightbox_textpanel_title_text_align&&(t.textpanel_title_text_align=ae.lightbox_textpanel_desc_text_align),ae.lightbox_textpanel_desc_text_align&&(t.textpanel_desc_text_align=ae.lightbox_textpanel_desc_text_align)),oe.setOptions(t),oe.refresh(!0,!0),o("positionTextPanelWide"),oe.positionPanel()}function s(){return $?void $.hide():!1}function l(){return $?void $.show():!1}function u(e){if(0==se.isOpened)return!1;if(!oe)return!1;if(!ne)return!1;var t=re.getElementSize(V),i=oe.getSize();if(0==i.width||i.height>120)return!1;if(!e)var n=ne.getSlideImage(),e=re.getElementSize(n);if(0==e.height||0==e.width)return!1;var r=e.bottom+i.height;if(r<t.height)return!1;var o=ne.getOptions(),a=i.height;if(a!=o.slider_image_padding_bottom){var s={slider_image_padding_bottom:a};if(0==ne.isAnimating())return ne.setOptions(s),ne.refreshSlideItems(),!0}return!1}function d(e,t){if(!e)var i=ne.getSlideImage(),e=re.getElementSize(i);se.textPanelTop=e.bottom,t===!0&&oe.positionPanel(se.textPanelTop,se.textPanelLeft)}function _(e){var t=(re.getElementSize(V),ne.getSlideImage()),i=re.getElementSize(t);if(0==i.width)return!1;se.textPanelLeft=i.left,se.textPanelTop=i.bottom;var n=i.width;if(J){var r=re.getElementSize(J);n-=r.width;var o=i.right-r.width;re.placeElement(J,o,se.textPanelTop)}oe&&(oe.show(),oe.refresh(!0,!0,n),d(i));var a=u(i);0==a&&(se.positionFrom="handleCompactTextpanelSizes",oe&&(oe.positionPanel(se.textPanelTop,se.textPanelLeft),e===!0&&(e(),j())))}function g(){if(0==ne.isCurrentSlideType("image"))return!0;var e=1==ne.isCurrentImageInPlace();return e}function c(e,t){if(0==se.isArrowsInside)return!1;if(!Z)return!1;var i=g();if(Z.show(),q.show(),se.positionFrom="positionArrowsInside",1==se.isArrowsOnHoverMode&&1==i&&0==y()&&I(!0),0==i)var n=re.getElementRelativePos(Z,"left",ae.lightbox_arrows_offset),r=re.getElementRelativePos(Z,"middle"),o=re.getElementRelativePos(q,"right",ae.lightbox_arrows_offset),a=r;else var s=ne.getSlideImage(),l=re.getElementSize(s),n=(re.getElementSize(ne.getElement()),re.getElementRelativePos(Z,"left",0,s)+l.left+ae.lightbox_arrows_inside_offset),r=re.getElementRelativePos(Z,"middle",0,s)+l.top,o=re.getElementRelativePos(Z,"right",0,s)+l.left-ae.lightbox_arrows_inside_offset,a=r;if(t===!0){var u={left:n,top:r},d={left:o,top:a};Z.stop().animate(u,{duration:se.fadeDuration}),q.stop().animate(d,{duration:se.fadeDuration})}else Z.stop(),q.stop(),re.placeElement(Z,n,r),re.placeElement(q,o,a);1==e&&E(t)}function h(e,t){se.positionFrom=null;var i=g(),n=2,r=re.getElementRelativePos(K,"right",2,V);if(0==i)var o=n,a=r;else{var s=ne.getSlideImage(),l=re.getElementSize(s),u=re.getElementSize(ne.getElement()),d=re.getElementSize(K);u.top==u.height&&(u.top=0);var a=u.left+l.right-d.width/2+ae.lightbox_compact_closebutton_offsetx,o=u.top+l.top-d.height/2-ae.lightbox_compact_closebutton_offsety;n>o&&(o=n),a>r&&(a=r)}if(t===!0){var _={left:a,top:o};K.stop().animate(_,{duration:se.fadeDuration})}else K.stop(),re.placeElement(K,a,o);e===!0&&T(t)}function p(){K&&K.stop().fadeTo(se.fadeDuration,0),v(),b(),se.positionFrom="hideCompactElements",1==se.isArrowsInside&&I()}function f(){K&&K.hide(),Z&&1==se.isArrowsInside&&(Z.hide(),q.hide()),J&&J.hide(),oe&&oe.hide()}function m(){var e=re.getElementSize(V);$&&re.setElementSizeAndPosition($,0,0,e.width,se.topPanelHeight),Z&&0==se.isArrowsInside&&(1==ae.lightbox_hide_arrows_onvideoplay&&(Z.show(),q.show()),re.placeElement(Z,"left","middle",ae.lightbox_arrows_offset),re.placeElement(q,"right","middle",ae.lightbox_arrows_offset)),0==se.isCompact&&re.placeElement(K,"right","top",2,2),oe&&(se.positionFrom="positionElements",0==se.isCompact?a(e):(x(),j()));var t=e.width,i=e.height,n=0,r=0;if(ne){if($){var o=$.height(),s={slider_image_padding_top:o};ne.setOptions(s)}ne.setSize(t,i),ne.setPosition(r,n)}}function v(){oe&&oe.getElement().stop().fadeTo(se.fadeDuration,0)}function b(){J&&J.stop().fadeTo(se.fadeDuration,0)}function y(){if(!se.lastMouseX)return!0;var e={pageX:se.lastMouseX,pageY:se.lastMouseY},t=ne.isMouseInsideSlideImage(e);return t}function I(e,t){return Z?1==se.isArrowsOnHoverMode&&t===!1?(1==y(),!0):void(e===!0?(Z.stop().fadeTo(0,0),q.stop().fadeTo(0,0)):(Z.stop().fadeTo(se.fadeDuration,0),q.stop().fadeTo(se.fadeDuration,0))):!1}function w(){if(!Z)return!0;if(0==Z.is(":visible"))return!0;var e=Z.css("opacity");return 1!=e?!0:!1}function E(e,t){return Z?1==se.isArrowsOnHoverMode&&t!==!0&&1==g()?!0:1==ne.isSwiping()?!0:(e!==!0&&(Z.stop(),q.stop()),Z.fadeTo(se.fadeDuration,1),void q.fadeTo(se.fadeDuration,1)):!1}function T(e){e!==!0&&K.stop(),K.fadeTo(se.fadeDuration,1)}function S(e){if(!oe)return!1;if(!e)var e=ne.getCurrentItem();oe.setTextPlain(e.title,e.description)}function P(e){if(!J)return!1;if(!e)var e=ne.getCurrentItem();var t=ie.getNumItems(),i=e.index+1;J.html(i+" / "+t)}function x(){return oe?void oe.getElement().show().stop().fadeTo(se.fadeDuration,1):!1}function j(){J&&J.stop().fadeTo(se.fadeDuration,1)}function C(){return 0==se.isCompact?!0:void p()}function A(){if(0==se.isCompact)return!0;if(se.positionFrom="onZoomChange",h(!1,!0),c(!1,!0),1==se.isCompact){var e=ne.isCurrentSlideType("image")&&1==ne.isCurrentImageInPlace();0==e?(v(),b()):(se.positionFrom="onZoomChange",x(),j())}}function M(){if(0==se.isCompact)return!0;se.positionFrom="onSliderAfterReturn",h(!0),c(!0);var e=u();0==e&&_(),x(),j()}function O(e,t){return t=jQuery(t),0==se.isCompact?!0:0==ne.isSlideCurrent(t)?!0:(se.positionFrom="onSliderAfterPutImage",h(!0),c(!0),void _())}function z(){var e=ne.getOptions(),t=e.slider_image_padding_top;if($){var i=$.height();i!=t&&r(i)}if(1==se.isCompact){if(S(),P(),se.positionFrom="onSliderTransitionEnd",h(!0),c(!0),0==ne.isSlideActionActive()){var n=u();0==n&&_()}x(),j()}}function L(e,t){0==se.isCompact?(J&&P(t),oe&&(S(t),0==se.isRightNowOpened&&(oe.positionElements(!1),o("onchange"),oe.positionPanel()))):0==ne.isAnimating()&&(oe&&S(t),J&&P(t)),0==se.isSliderChangedOnce&&(se.isSliderChangedOnce=!0,te.trigger(ee.events.LIGHTBOX_INIT))}function H(e,t){var i=ne.getSlideType();if("image"!=i&&0==se.isCompact&&ne.isSlideActionActive())return!0;var n=ne.isPreloading();if(1==n)return ee.close("slider"),!0;if(1==ae.lightbox_close_on_emptyspace){var r=ne.isMouseInsideSlideImage(t);0==r&&ee.close("slider_inside")}}function N(){m()}function k(){$?s():J&&J.hide(),Z&&1==ae.lightbox_hide_arrows_onvideoplay&&(Z.hide(),q.hide())}function R(){$?(l(),o("onStopVideo")):J&&J.show(),Z&&1==ae.lightbox_hide_arrows_onvideoplay&&(Z.show(),q.show())}function G(e,t,i){var n=!1;switch(t){case 27:1==se.isOpened&&ee.close("keypress");break;case 38:case 40:case 33:case 34:n=!0}1==se.isOpened&&1==n&&i.preventDefault()}function D(){1==se.isArrowsOnHoverMode&&E(!1,!0)}function Q(e){se.positionFrom="hideCompactElements",1==se.isArrowsOnHoverMode&&1==g()&&I(!1,!0)}function W(e){se.lastMouseX=e.pageX,se.lastMouseY=e.pageY;var t=w();1==t&&y()&&0==ne.isAnimating()&&(se.positionFrom="onMouseMove",Z&&0==Z.is(":animated")&&E(!1,!0))}function F(e,t,i,n){if(0==se.isOpened)return!0;switch(ae.gallery_mousewheel_role){default:case"zoom":var r=ne.getSlideType();"image"!=r&&e.preventDefault();break;case"none":e.preventDefault();break;case"advance":ie.onGalleryMouseWheel(e,t,i,n)}}function B(){if(X.on("touchstart",function(e){e.preventDefault()}),X.on("touchend",function(e){ee.close("overlay")}),re.addClassOnHover(q,"ug-arrow-hover"),re.addClassOnHover(Z,"ug-arrow-hover"),re.addClassOnHover(K),ie.setNextButton(q),ie.setPrevButton(Z),K.click(function(){ee.close("button")}),U.on(ie.events.ITEM_CHANGE,L),ne){jQuery(ne).on(ne.events.TRANSITION_END,z),jQuery(ne).on(ne.events.CLICK,H);var e=ne.getVideoObject();jQuery(e).on(e.events.PLAY_START,k),jQuery(e).on(e.events.PLAY_STOP,R),jQuery(ne).on(ne.events.START_DRAG,C),jQuery(ne).on(ne.events.TRANSITION_START,C),jQuery(ne).on(ne.events.AFTER_DRAG_CHANGE,M),jQuery(ne).on(ne.events.AFTER_RETURN,M),jQuery(ne).on(ne.events.AFTER_PUT_IMAGE,O),jQuery(ne).on(ne.events.ZOOM_CHANGE,A),jQuery(ne).on(ne.events.IMAGE_MOUSEENTER,D),jQuery(ne).on(ne.events.IMAGE_MOUSELEAVE,Q)}jQuery(window).resize(function(){return 0==se.isOpened?!0:void re.whenContiniousEventOver("lightbox_resize",N,100)}),U.on(ie.events.GALLERY_KEYPRESS,G),1==se.isArrowsOnHoverMode&&jQuery(document).bind("mousemove",W),V.on("mousewheel",F)}function Y(){se.isCompact=!1,t(),se.isArrowsInside=!1,se.isArrowsOnHoverMode=!1,ae=jQuery.extend({},se.originalOptions),ae.lightbox_arrows_position="sides",ne.setOptions(ae)}var U,V,X,Z,q,K,J,$,ee=this,te=jQuery(this),ie=new UniteGalleryMain,ne=new UGSlider,re=new UGFunctions,oe=new UGTextPanel,ae={lightbox_type:"wide",lightbox_show_textpanel:!0,lightbox_textpanel_width:550,lightbox_hide_arrows_onvideoplay:!0,lightbox_arrows_position:"sides",lightbox_arrows_offset:10,lightbox_arrows_inside_offset:10,lightbox_arrows_inside_alwayson:!1,lightbox_overlay_color:null,lightbox_overlay_opacity:1,lightbox_top_panel_opacity:null,lightbox_show_numbers:!0,lightbox_numbers_size:null,lightbox_numbers_color:null,lightbox_numbers_padding_top:null,lightbox_numbers_padding_right:null,lightbox_compact_closebutton_offsetx:1,lightbox_compact_closebutton_offsety:1,lightbox_close_on_emptyspace:!0};this.events={LIGHTBOX_INIT:"lightbox_init"};var se={topPanelHeight:44,initTextPanelHeight:26,isOpened:!1,isRightNowOpened:!1,putSlider:!0,isCompact:!1,fadeDuration:300,positionFrom:null,textPanelTop:null,textPanelLeft:null,isArrowsInside:!1,isArrowsOnHoverMode:!1,lastMouseX:null,lastMouseY:null,originalOptions:null,isSliderChangedOnce:!1,isTopPanelEnabled:!0},le={lightbox_slider_controls_always_on:!0,lightbox_slider_enable_bullets:!1,lightbox_slider_enable_arrows:!1,lightbox_slider_enable_progress_indicator:!1,lightbox_slider_enable_play_button:!1,lightbox_slider_enable_fullscreen_button:!1,lightbox_slider_enable_zoom_panel:!1,lightbox_slider_enable_text_panel:!1,lightbox_slider_scale_mode_media:"down",lightbox_slider_scale_mode:"down",lightbox_slider_loader_type:3,lightbox_slider_loader_color:"black",lightbox_slider_transition:"fade",lightbox_slider_image_padding_top:se.topPanelHeight,lightbox_slider_image_padding_bottom:0,lightbox_slider_video_padding_top:0,lightbox_slider_video_padding_bottom:0,lightbox_textpanel_align:"middle",lightbox_textpanel_padding_top:5,lightbox_textpanel_padding_bottom:5,slider_video_constantsize:!1,lightbox_slider_image_border:!1,lightbox_textpanel_enable_title:!0,lightbox_textpanel_enable_description:!1,lightbox_textpanel_desc_style_as_title:!0,lightbox_textpanel_enable_bg:!1,video_enable_closebutton:!1,lightbox_slider_video_enable_closebutton:!1,video_youtube_showinfo:!1,lightbox_slider_enable_links:!1},ue={lightbox_overlay_opacity:.6,lightbox_slider_image_border:!0,lightbox_slider_image_shadow:!0,lightbox_slider_image_padding_top:30,lightbox_slider_image_padding_bottom:30,slider_video_constantsize:!0,lightbox_textpanel_align:"bottom",lightbox_textpanel_title_text_align:"left",lightbox_textpanel_desc_text_align:"left",lightbox_textpanel_padding_left:10,lightbox_textpanel_padding_right:10};this.destroy=function(){if(jQuery(document).unbind("mousemove"),X.off("touchstart"),X.off("touchend"),K.off("click"),U.off(ie.events.ITEM_CHANGE),ne){jQuery(ne).off(ne.events.TRANSITION_END),jQuery(ne).off(ne.events.CLICK),jQuery(ne).off(ne.events.START_DRAG),jQuery(ne).off(ne.events.TRANSITION_START),jQuery(ne).off(ne.events.AFTER_DRAG_CHANGE),jQuery(ne).off(ne.events.AFTER_RETURN);var e=ne.getVideoObject();jQuery(e).off(e.events.PLAY_START),jQuery(e).off(e.events.PLAY_STOP),jQuery(ne).on(ne.events.IMAGE_MOUSEENTER,D),jQuery(ne).on(ne.events.IMAGE_MOUSELEAVE,Q),ne.destroy()}jQuery(window).unbind("resize"),U.off(ie.events.GALLERY_KEYPRESS,G),V.off("mousewheel"),V.remove()},this.open=function(e){var t=ie.getItem(e);if(se.isOpened=!0,se.isRightNowOpened=!0,setTimeout(function(){se.isRightNowOpened=!1},100),ne&&ne.setItem(t,"lightbox_open"),oe&&oe.setTextPlain(t.title,t.description),X.stop().fadeTo(0,0),V.show(),V.fadeTo(0,1),X.stop().fadeTo(se.fadeDuration,ae.lightbox_overlay_opacity),m(),1==se.isCompact){var i=ne.isPreloading();1==i?f():1==se.isArrowsInside&&(Z.hide(),q.hide())}ne&&ne.startSlideAction(),U.trigger(ie.events.OPEN_LIGHTBOX,t)},this.close=function(e){se.isOpened=!1,1==se.isCompact&&p(),ne&&ne.stopSlideAction();var t=ne.getSlideType();"image"!=t?V.hide():V.fadeTo(se.fadeDuration,0,function(){V.hide()}),U.trigger(ie.events.CLOSE_LIGHTBOX)},this.init=function(t,i){e(t,i)},this.putHtml=function(){var e=ie.isSmallWindow();e&&1==se.isCompact&&Y(),i()},this.run=function(){n(),ne&&ne.run(),B()}}function UGCarousel(){function e(e,t){g_objects=e.getObjects(),W=e,H=jQuery(e),N=g_objects.g_objWrapper,k=g_objects.g_arrItems,U=jQuery.extend(U,t),B.setFixedMode(),B.setApproveClickFunction(L),B.init(e,U),Y=B.getObjThumbs(),U=B.getOptions(),V.initTileWidth=U.tile_width,V.initTileHeight=U.tile_height,V.tileWidth=U.tile_width}function t(e){if(!e)var e=N;var t="<div class='ug-carousel-wrapper'><div class='ug-carousel-inner'></div></div>";N.append(t),R=N.children(".ug-carousel-wrapper"),G=R.children(".ug-carousel-inner"),B.setHtml(G),Y.getThumbs().fadeTo(0,1)}function i(e,t){if(!t)var t=V.initTileHeight/V.initTileWidth*e;V.tileWidth=e;var i={ +tile_width:e,tile_height:t};B.setOptions(i),U.tile_width=e,U.tile_height=t,B.resizeAllTiles(e),m(!0)}function n(){if(null===V.carouselMaxWidth)throw new Error("The carousel width not set");if(V.tileWidth<V.initTileWidth){var e=V.carouselMaxWidth-2*U.carousel_padding;e>V.initTileWidth&&(e=V.initTileWidth),i(e);var t=F.getNumItemsInSpace(V.carouselMaxWidth,e,U.carousel_space_between_tiles)}else{var t=F.getNumItemsInSpace(V.carouselMaxWidth,V.tileWidth,U.carousel_space_between_tiles);if(0>=t){t=1;var e=V.carouselMaxWidth-2*U.carousel_padding;i(e)}}var n=F.getSpaceByNumItems(t,V.tileWidth,U.carousel_space_between_tiles);n+=2*U.carousel_padding,R.width(n),1==V.isFirstTimeRun?(z(),B.run(),jQuery.each(k,function(e,t){t.objThumbWrapper.data("index",e),N.trigger(V.eventSizeChange,[t.objThumbWrapper,!0]),t.objTileOriginal=t.objThumbWrapper.clone(!0,!0)}),m(!0),1==U.carousel_autoplay&&D.startAutoplay()):(1==U.carousel_autoplay&&D.pauseAutoplay(),w(0,!1),1==U.carousel_autoplay&&D.startAutoplay()),P(),V.isFirstTimeRun=!1}function r(){return F.getElementSize(G).left}function o(e){return F.getMousePosition(e).pageX}function a(){var e=G.children(".ug-thumb-wrapper");return e}function s(e){var t=F.getNumItemsInSpace(e,V.tileWidth,U.carousel_space_between_tiles);return t}function l(){return a().length}function u(e){v(e);var t=a(),i=jQuery(t[e]);return i}function d(){return G.children(".ug-thumb-wrapper").first()}function _(){return G.children(".ug-thumb-wrapper").last()}function g(e,t,i){var n=e.data("index");if(void 0==n)throw new Error("every tile should have index!");for(var r=[],o=0;t>o;o++){if("prev"==i)var a=W.getPrevItem(n,!0);else var a=W.getNextItem(n,!0);if(!a)throw new Error("the item to add is empty");var s=a.objTileOriginal.clone(!0,!0);n=a.index,s.addClass("cloned"),r.push(s)}return r}function c(){var e=F.getElementSize(R),t=F.getElementSize(G),i=t.width-e.width+t.left,n=V.sideSpace-i;return n}function h(){var e=-r(),t=V.sideSpace-e;return t}function p(){var e=F.getElementSize(R);return e.width}function f(){var e=p(),t=s(e);return t}function m(e){if(!e)var e=!1;var t,i=a(),n=0,r=0;return jQuery.each(i,function(e,o){o=jQuery(o),F.placeElement(o,n,0);var a=F.getElementSize(o);n+=a.width+U.carousel_space_between_tiles,r=Math.max(r,a.height),e==i.length-1&&(t=a.right)}),G.width(t),r+=2*U.carousel_padding,e===!0&&(G.height(r),R.height(r)),w(V.numCurrent,!1),t}function v(e){if(e>a().length-1)throw new Error("Wrogn tile number: "+e)}function b(e,t){if("left"==t)var i=d();else var i=_();var n="left"==t?"prev":"next",r=g(i,e,n);jQuery.each(r,function(e,i){"left"==t?G.prepend(i):G.append(i),N.trigger(V.eventSizeChange,i),B.loadTileImage(i)})}function y(e,t){v(n);for(var i=a(),n=i.length,r=0;e>r;r++)"left"==t?jQuery(i[r]).remove():jQuery(i[n-1-r]).remove()}function I(e){var t={left:e+"px"};G.css(t)}function w(e,t,i){if(void 0===t){var t=!0;if(G.is(":animated"))return!0}var n=u(e),r=F.getElementSize(n),o=-r.left+U.carousel_padding,a={left:o+"px"};if(t===!0){var s=U.carousel_scroll_duration,l=U.carousel_scroll_easing;i===!0&&(s=V.scrollShortDuration,l=V.scrollShortEasing),G.stop(!0).animate(a,{duration:s,easing:l,queue:!1,complete:function(){V.numCurrent=e,S(!0)}})}else V.numCurrent=e,G.css(a)}function E(){var e=-r(),t=s(e),i=F.getElementSize(u(t)).left,n=F.getElementSize(u(t+1)).left;return Math.abs(i-e)<Math.abs(n-e)?t:t+1}function T(){var e=E();w(e,!0,!0)}function S(){var e=h(),t=c(),i=0,n=0,r=0,o=0,a=l();if(e>V.spaceActionSize)i=s(e),b(i,"left"),V.numCurrent+=i;else if(e<-V.spaceActionSize){var r=s(Math.abs(e));y(r,"left"),V.numCurrent-=r}if(t>V.spaceActionSize?(n=s(t),b(n,"right")):t<-V.spaceActionSize&&(o=s(Math.abs(t)),y(o,"right")),o>a)throw new Error("Can't remove more then num tiles");var u=!1;return(i||n||r||o)&&(m(),u=!0),u}function P(e){F.placeElement(G,0,U.carousel_padding),S()}function x(){"left"==U.carousel_autoplay_direction?D.scrollRight(1):D.scrollLeft(1)}function j(e){return 1==V.touchActive?!0:(V.touchActive=!0,D.pauseAutoplay(),V.startTime=jQuery.now(),V.startMousePos=o(e),V.startInnerPos=r(),V.lastTime=V.startTime,V.lastMousePos=V.startMousePos,void F.storeEventData(e,V.storedEventID))}function C(e){if(0==V.touchActive)return!0;F.updateStoredEventData(e,V.storedEventID),e.preventDefault();var t=null;if(1==U.carousel_vertical_scroll_ondrag&&(t=F.handleScrollTop(V.storedEventID)),"vert"===t)return!0;V.lastMousePos=o(e);var i=V.lastMousePos-V.startMousePos,n=V.startInnerPos+i,r=i>0?"prev":"next",a=F.getElementSize(G).width;n>0&&"prev"==r&&(n/=3),-a>n&&"next"==r&&(n=V.startInnerPos+i/3),I(n)}function A(e){return 0==V.touchActive?!0:(V.touchActive=!1,T(),void D.unpauseAutoplay())}function M(e){return 0==U.carousel_autoplay_pause_onhover?!0:void(1==V.isPlayMode&&0==V.isPaused&&D.pauseAutoplay())}function O(e){return 0==U.carousel_autoplay_pause_onhover?!0:void D.unpauseAutoplay()}function z(){B.initEvents(),R.bind("mousedown touchstart",j),jQuery("body").bind("mousemove touchmove",C),jQuery(window).add("body").bind("mouseup touchend",A),R.hover(M,O)}function L(){var e=V.lastTime-V.startTime,t=Math.abs(V.lastMousePos-V.startMousePos);return e>300?!1:t>30?!1:!0}var H,N,k,R,G,D=this,Q=jQuery(this),W=new UniteGalleryMain,F=new UGFunctions,B=new UGTileDesign,Y=new UGThumbsGeneral,U={carousel_padding:8,carousel_space_between_tiles:20,carousel_navigation_numtiles:3,carousel_scroll_duration:500,carousel_scroll_easing:"easeOutCubic",carousel_autoplay:!0,carousel_autoplay_timeout:3e3,carousel_autoplay_direction:"right",carousel_autoplay_pause_onhover:!0,carousel_vertical_scroll_ondrag:!1};this.events={START_PLAY:"carousel_start_play",PAUSE_PLAY:"carousel_pause_play",STOP_PLAY:"carousel_stop_play"};var V={eventSizeChange:"thumb_size_change",isFirstTimeRun:!0,carouselMaxWidth:null,tileWidth:0,initTileWidth:0,initTileHeight:0,sideSpace:1500,spaceActionSize:500,numCurrent:0,touchActive:!1,startInnerPos:0,lastTime:0,startTime:0,startMousePos:0,lastMousePos:0,scrollShortDuration:200,scrollShortEasing:"easeOutQuad",handle:null,isPlayMode:!1,isPaused:!1,storedEventID:"carousel"};this.startAutoplay=function(){V.isPlayMode=!0,V.isPaused=!1,Q.trigger(D.events.START_PLAY),V.handle&&clearInterval(V.handle),V.handle=setInterval(x,U.carousel_autoplay_timeout)},this.unpauseAutoplay=function(){return 0==V.isPlayMode?!0:0==V.isPaused?!0:void D.startAutoplay()},this.pauseAutoplay=function(){return 0==V.isPlayMode?!0:(V.isPaused=!0,V.handle&&clearInterval(V.handle),void Q.trigger(D.events.PAUSE_PLAY))},this.stopAutoplay=function(){return 0==V.isPlayMode?!0:(V.isPaused=!1,V.isPlayMode=!1,V.handle&&clearInterval(V.handle),void Q.trigger(D.events.STOP_PLAY))},this.destroy=function(){V.handle&&clearInterval(V.handle),Q.off(D.events.START_PLAY),Q.off(D.events.STOP_PLAY),R.unbind("mousedown"),R.unbind("touchstart"),jQuery("body").unbind("mousemove"),jQuery("body").unbind("touchmove"),jQuery(window).add("body").unbind("mouseup").unbind("touchend"),R.off("mouseenter").off("mouseleave"),B.destroy()},this.init=function(t,i,n){n&&this.setMaxWidth(n),e(t,i)},this.setMaxWidth=function(e){V.carouselMaxWidth=e},this.setHtml=function(e){t(e)},this.getElement=function(){return R},this.getObjTileDesign=function(){return B},this.getEstimatedHeight=function(){var e=U.tile_height+2*U.carousel_padding;return e},this.run=function(){n()},this.scrollRight=function(e){if(!e||"object"==typeof e)var e=U.carousel_navigation_numtiles;var t=f();e>t&&(e=t);var i=V.numCurrent-e;0>=i&&(i=0),w(i)},this.scrollLeft=function(e){if(!e||"object"==typeof e)var e=U.carousel_navigation_numtiles;var t=f();e>t&&(e=t);var i=l(),n=V.numCurrent+e;n>=i&&(n=i-1),w(n)},this.setScrollLeftButton=function(e){F.setButtonMobileReady(e),F.setButtonOnClick(e,D.scrollLeft)},this.setScrollRightButton=function(e){F.setButtonMobileReady(e),F.setButtonOnClick(e,D.scrollRight)},this.setPlayPauseButton=function(e){F.setButtonMobileReady(e),1==V.isPlayMode&&0==V.isPaused&&e.addClass("ug-pause-icon"),Q.on(D.events.START_PLAY,function(){e.addClass("ug-pause-icon")}),Q.on(D.events.STOP_PLAY,function(){e.removeClass("ug-pause-icon")}),F.setButtonOnClick(e,function(){0==V.isPlayMode||1==V.isPaused?D.startAutoplay():D.stopAutoplay()})}}function UGTabs(){function e(e,t){u=e,a=jQuery(u),d=jQuery.extend(d,t),"select"==d.tabs_type?l=jQuery(d.tabs_container):s=jQuery(d.tabs_container+" .ug-tab")}function t(){o()}function i(e){u.requestNewItems(e)}function n(){var e=d.tabs_class_selected,t=jQuery(this);if(t.hasClass(e))return!0;s.not(t).removeClass(e),t.addClass(e);var n=t.data("catid");return n?void i(n):!0}function r(){var e=jQuery(this),t=e.val();return t?void i(t):!0}function o(){"select"==d.tabs_type?l.change(r):s.click(n)}var a,s,l,u=(jQuery(this),new UniteGalleryMain),d=(new UGFunctions,{tabs_type:"tabs",tabs_container:"#ug_tabs",tabs_class_selected:"ug-tab-selected"});this.events={},this.destroy=function(){l&&l.off("change"),s&&s.off("click")},this.init=function(t,i){e(t,i)},this.run=function(){t()}}function UG_API(e){function t(e){var t={index:e.index,title:e.title,description:e.description,urlImage:e.urlImage,urlThumb:e.urlThumb},i=e.objThumbImage.data();for(var n in i){switch(n){case"image":case"description":continue}t[n]=i[n]}return t}var i,n=this,r=(jQuery(n),new UniteGalleryMain),o=[];r=e,i=jQuery(e),this.events={API_INIT_FUNCTIONS:"api_init",API_ON_EVENT:"api_on_event"},this.on=function(e,a,s){switch(s!==!0&&o.push({event:e,func:a}),e){case"item_change":i.on(r.events.ITEM_CHANGE,function(){var e=r.getSelectedItem(),i=t(e);a(i.index,i)});break;case"resize":i.on(r.events.SIZE_CHANGE,a);break;case"enter_fullscreen":i.on(r.events.ENTER_FULLSCREEN,a);break;case"exit_fullscreen":i.on(r.events.EXIT_FULLSCREEN,a);break;case"play":i.on(r.events.START_PLAY,a);break;case"stop":i.on(r.events.STOP_PLAY,a);break;case"pause":i.on(r.events.PAUSE_PLAYING,a);break;case"continue":i.on(r.events.CONTINUE_PLAYING,a);break;case"open_lightbox":i.on(r.events.OPEN_LIGHTBOX,a);break;case"close_lightbox":i.on(r.events.CLOSE_LIGHTBOX,a);break;default:console&&console.log("wrong api event: "+e)}i.trigger(n.events.API_ON_EVENT,[e,a])},this.play=function(){r.startPlayMode()},this.stop=function(){r.stopPlayMode()},this.togglePlay=function(){r.togglePlayMode()},this.enterFullscreen=function(){r.toFullScreen()},this.exitFullscreen=function(){r.exitFullScreen()},this.toggleFullscreen=function(){r.toggleFullscreen()},this.resetZoom=function(){var e=r.getObjSlider();return e?void e.zoomBack():!1},this.zoomIn=function(){var e=r.getObjSlider();return e?void e.zoomIn():!1},this.zoomOut=function(){var e=r.getObjSlider();return e?void e.zoomOut():!1},this.nextItem=function(){r.nextItem()},this.prevItem=function(){r.prevItem()},this.selectItem=function(e){r.selectItem(e)},this.resize=function(e,t){t?r.resize(e,t):r.resize(e)},this.getItem=function(e){var i=r.getItem(e),n=t(i);return n},this.getNumItems=function(){var e=r.getNumItems();return e},this.reloadGallery=function(e){if(!e)var e={};r.run(null,e),o.map(function(e){n.on(e.event,e.func,!0)})},this.destroy=function(){r.destroy()},i.trigger(n.events.API_INIT_FUNCTIONS,n)}var g_ugFunctions=new UGFunctions;!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e:e(jQuery)}(function(e){function t(t){var a=t||window.event,s=l.call(arguments,1),u=0,d=0,_=0,g=0;if(t=e.event.fix(a),t.type="mousewheel","detail"in a&&(_=-1*a.detail),"wheelDelta"in a&&(_=a.wheelDelta),"wheelDeltaY"in a&&(_=a.wheelDeltaY),"wheelDeltaX"in a&&(d=-1*a.wheelDeltaX),"axis"in a&&a.axis===a.HORIZONTAL_AXIS&&(d=-1*_,_=0),u=0===_?d:_,"deltaY"in a&&(_=-1*a.deltaY,u=_),"deltaX"in a&&(d=a.deltaX,0===_&&(u=-1*d)),0!==_||0!==d){if(1===a.deltaMode){var c=e.data(this,"mousewheel-line-height");u*=c,_*=c,d*=c}else if(2===a.deltaMode){var h=e.data(this,"mousewheel-page-height");u*=h,_*=h,d*=h}return g=Math.max(Math.abs(_),Math.abs(d)),(!o||o>g)&&(o=g,n(a,g)&&(o/=40)),n(a,g)&&(u/=40,d/=40,_/=40),u=Math[u>=1?"floor":"ceil"](u/o),d=Math[d>=1?"floor":"ceil"](d/o),_=Math[_>=1?"floor":"ceil"](_/o),t.deltaX=d,t.deltaY=_,t.deltaFactor=o,t.deltaMode=0,s.unshift(t,u,d,_),r&&clearTimeout(r),r=setTimeout(i,200),(e.event.dispatch||e.event.handle).apply(this,s)}}function i(){o=null}function n(e,t){return d.settings.adjustOldDeltas&&"mousewheel"===e.type&&t%120===0}var r,o,a=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],s="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],l=Array.prototype.slice;if(e.event.fixHooks)for(var u=a.length;u;)e.event.fixHooks[a[--u]]=e.event.mouseHooks;var d=e.event.special.mousewheel={version:"3.1.9",setup:function(){if(this.addEventListener)for(var i=s.length;i;)this.addEventListener(s[--i],t,!1);else this.onmousewheel=t;e.data(this,"mousewheel-line-height",d.getLineHeight(this)),e.data(this,"mousewheel-page-height",d.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var e=s.length;e;)this.removeEventListener(s[--e],t,!1);else this.onmousewheel=null},getLineHeight:function(t){return parseInt(e(t)["offsetParent"in e.fn?"offsetParent":"parent"]().css("fontSize"),10)},getPageHeight:function(t){return e(t).height()},settings:{adjustOldDeltas:!0}};e.fn.extend({mousewheel:function(e){return e?this.bind("mousewheel",e):this.trigger("mousewheel")},unmousewheel:function(e){return this.unbind("mousewheel",e)}})}),function(e){"function"==typeof define&&define.amd?define(["jquery"],function(t){return e(t)}):"object"==typeof module&&"object"==typeof module.exports?exports=e(require("jquery")):e(jQuery)}(function(e){function t(e){var t=7.5625,i=2.75;return 1/i>e?t*e*e:2/i>e?t*(e-=1.5/i)*e+.75:2.5/i>e?t*(e-=2.25/i)*e+.9375:t*(e-=2.625/i)*e+.984375}e.easing.jswing=e.easing.swing;var i=Math.pow,n=Math.sqrt,r=Math.sin,o=Math.cos,a=Math.PI,s=1.70158,l=1.525*s,u=s+1,d=2*a/3,_=2*a/4.5;e.extend(e.easing,{def:"easeOutQuad",swing:function(t){return e.easing[e.easing.def](t)},easeInQuad:function(e){return e*e},easeOutQuad:function(e){return 1-(1-e)*(1-e)},easeInOutQuad:function(e){return.5>e?2*e*e:1-i(-2*e+2,2)/2},easeInCubic:function(e){return e*e*e},easeOutCubic:function(e){return 1-i(1-e,3)},easeInOutCubic:function(e){return.5>e?4*e*e*e:1-i(-2*e+2,3)/2},easeInQuart:function(e){return e*e*e*e},easeOutQuart:function(e){return 1-i(1-e,4)},easeInOutQuart:function(e){return.5>e?8*e*e*e*e:1-i(-2*e+2,4)/2},easeInQuint:function(e){return e*e*e*e*e},easeOutQuint:function(e){return 1-i(1-e,5)},easeInOutQuint:function(e){return.5>e?16*e*e*e*e*e:1-i(-2*e+2,5)/2},easeInSine:function(e){return 1-o(e*a/2)},easeOutSine:function(e){return r(e*a/2)},easeInOutSine:function(e){return-(o(a*e)-1)/2},easeInExpo:function(e){return 0===e?0:i(2,10*e-10)},easeOutExpo:function(e){return 1===e?1:1-i(2,-10*e)},easeInOutExpo:function(e){return 0===e?0:1===e?1:.5>e?i(2,20*e-10)/2:(2-i(2,-20*e+10))/2},easeInCirc:function(e){return 1-n(1-i(e,2))},easeOutCirc:function(e){return n(1-i(e-1,2))},easeInOutCirc:function(e){return.5>e?(1-n(1-i(2*e,2)))/2:(n(1-i(-2*e+2,2))+1)/2},easeInElastic:function(e){return 0===e?0:1===e?1:-i(2,10*e-10)*r((10*e-10.75)*d)},easeOutElastic:function(e){return 0===e?0:1===e?1:i(2,-10*e)*r((10*e-.75)*d)+1},easeInOutElastic:function(e){return 0===e?0:1===e?1:.5>e?-(i(2,20*e-10)*r((20*e-11.125)*_))/2:i(2,-20*e+10)*r((20*e-11.125)*_)/2+1},easeInBack:function(e){return u*e*e*e-s*e*e},easeOutBack:function(e){return 1+u*i(e-1,3)+s*i(e-1,2)},easeInOutBack:function(e){return.5>e?i(2*e,2)*(2*(l+1)*e-l)/2:(i(2*e-2,2)*((l+1)*(2*e-2)+l)+2)/2},easeInBounce:function(e){return 1-t(1-e)},easeOutBounce:t,easeInOutBounce:function(e){return.5>e?(1-t(1-2*e))/2:(1+t(2*e-1))/2}})}),!function(e,t){function i(e,t,i){var n=_[t.type]||{};return null==e?i||!t.def?null:t.def:(e=n.floor?~~e:parseFloat(e),isNaN(e)?t.def:n.mod?(e+n.mod)%n.mod:0>e?0:n.max<e?n.max:e)}function n(t){var i=u(),n=i._rgba=[];return t=t.toLowerCase(),h(l,function(e,r){var o,a=r.re.exec(t),s=a&&r.parse(a),l=r.space||"rgba";return s?(o=i[l](s),i[d[l].cache]=o[d[l].cache],n=i._rgba=o._rgba,!1):void 0}),n.length?("0,0,0,0"===n.join()&&e.extend(n,o.transparent),i):o[t]}function r(e,t,i){return i=(i+1)%1,1>6*i?e+(t-e)*i*6:1>2*i?t:2>3*i?e+(t-e)*(2/3-i)*6:e}if("undefined"==typeof e.cssHooks)return!1;var o,a="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",s=/^([\-+])=\s*(\d+\.?\d*)/,l=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[2.55*e[1],2.55*e[2],2.55*e[3],e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],u=e.Color=function(t,i,n,r){return new e.Color.fn.parse(t,i,n,r)},d={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},_={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},g=u.support={},c=e("<p>")[0],h=e.each;c.style.cssText="background-color:rgba(1,1,1,.5)",g.rgba=c.style.backgroundColor.indexOf("rgba")>-1,h(d,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),u.fn=e.extend(u.prototype,{parse:function(r,a,s,l){if(r===t)return this._rgba=[null,null,null,null],this;(r.jquery||r.nodeType)&&(r=e(r).css(a),a=t);var _=this,g=e.type(r),c=this._rgba=[];return a!==t&&(r=[r,a,s,l],g="array"),"string"===g?this.parse(n(r)||o._default):"array"===g?(h(d.rgba.props,function(e,t){c[t.idx]=i(r[t.idx],t)}),this):"object"===g?(r instanceof u?h(d,function(e,t){r[t.cache]&&(_[t.cache]=r[t.cache].slice())}):h(d,function(t,n){var o=n.cache;h(n.props,function(e,t){if(!_[o]&&n.to){if("alpha"===e||null==r[e])return;_[o]=n.to(_._rgba)}_[o][t.idx]=i(r[e],t,!0)}),_[o]&&e.inArray(null,_[o].slice(0,3))<0&&(_[o][3]=1,n.from&&(_._rgba=n.from(_[o])))}),this):void 0},is:function(e){var t=u(e),i=!0,n=this;return h(d,function(e,r){var o,a=t[r.cache];return a&&(o=n[r.cache]||r.to&&r.to(n._rgba)||[],h(r.props,function(e,t){return null!=a[t.idx]?i=a[t.idx]===o[t.idx]:void 0})),i}),i},_space:function(){var e=[],t=this;return h(d,function(i,n){t[n.cache]&&e.push(i)}),e.pop()},transition:function(e,t){var n=u(e),r=n._space(),o=d[r],a=0===this.alpha()?u("transparent"):this,s=a[o.cache]||o.to(a._rgba),l=s.slice();return n=n[o.cache],h(o.props,function(e,r){var o=r.idx,a=s[o],u=n[o],d=_[r.type]||{};null!==u&&(null===a?l[o]=u:(d.mod&&(u-a>d.mod/2?a+=d.mod:a-u>d.mod/2&&(a-=d.mod)),l[o]=i((u-a)*t+a,r)))}),this[r](l)},blend:function(t){if(1===this._rgba[3])return this;var i=this._rgba.slice(),n=i.pop(),r=u(t)._rgba;return u(e.map(i,function(e,t){return(1-n)*r[t]+n*e}))},toRgbaString:function(){var t="rgba(",i=e.map(this._rgba,function(e,t){return null==e?t>2?1:0:e});return 1===i[3]&&(i.pop(),t="rgb("),t+i.join()+")"},toHslaString:function(){var t="hsla(",i=e.map(this.hsla(),function(e,t){return null==e&&(e=t>2?1:0),t&&3>t&&(e=Math.round(100*e)+"%"),e});return 1===i[3]&&(i.pop(),t="hsl("),t+i.join()+")"},toHexString:function(t){var i=this._rgba.slice(),n=i.pop();return t&&i.push(~~(255*n)),"#"+e.map(i,function(e){return e=(e||0).toString(16),1===e.length?"0"+e:e}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),u.fn.parse.prototype=u.fn,d.hsla.to=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t,i,n=e[0]/255,r=e[1]/255,o=e[2]/255,a=e[3],s=Math.max(n,r,o),l=Math.min(n,r,o),u=s-l,d=s+l,_=.5*d;return t=l===s?0:n===s?60*(r-o)/u+360:r===s?60*(o-n)/u+120:60*(n-r)/u+240,i=0===u?0:.5>=_?u/d:u/(2-d),[Math.round(t)%360,i,_,null==a?1:a]},d.hsla.from=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t=e[0]/360,i=e[1],n=e[2],o=e[3],a=.5>=n?n*(1+i):n+i-n*i,s=2*n-a;return[Math.round(255*r(s,a,t+1/3)),Math.round(255*r(s,a,t)),Math.round(255*r(s,a,t-1/3)),o]},h(d,function(n,r){var o=r.props,a=r.cache,l=r.to,d=r.from;u.fn[n]=function(n){if(l&&!this[a]&&(this[a]=l(this._rgba)),n===t)return this[a].slice();var r,s=e.type(n),_="array"===s||"object"===s?n:arguments,g=this[a].slice();return h(o,function(e,t){var n=_["object"===s?e:t.idx];null==n&&(n=g[t.idx]),g[t.idx]=i(n,t)}),d?(r=u(d(g)),r[a]=g,r):u(g)},h(o,function(t,i){u.fn[t]||(u.fn[t]=function(r){var o,a=e.type(r),l="alpha"===t?this._hsla?"hsla":"rgba":n,u=this[l](),d=u[i.idx];return"undefined"===a?d:("function"===a&&(r=r.call(this,d),a=e.type(r)),null==r&&i.empty?this:("string"===a&&(o=s.exec(r),o&&(r=d+parseFloat(o[2])*("+"===o[1]?1:-1))),u[i.idx]=r,this[l](u)))})})}),u.hook=function(t){var i=t.split(" ");h(i,function(t,i){e.cssHooks[i]={set:function(t,r){var o,a,s="";if("transparent"!==r&&("string"!==e.type(r)||(o=n(r)))){if(r=u(o||r),!g.rgba&&1!==r._rgba[3]){for(a="backgroundColor"===i?t.parentNode:t;(""===s||"transparent"===s)&&a&&a.style;)try{s=e.css(a,"backgroundColor"),a=a.parentNode}catch(l){}r=r.blend(s&&"transparent"!==s?s:"_default")}r=r.toRgbaString()}try{t.style[i]=r}catch(l){}}},e.fx.step[i]=function(t){t.colorInit||(t.start=u(t.elem,i),t.end=u(t.end),t.colorInit=!0),e.cssHooks[i].set(t.elem,t.start.transition(t.end,t.pos))}})},u.hook(a),e.cssHooks.borderColor={expand:function(e){var t={};return h(["Top","Right","Bottom","Left"],function(i,n){t["border"+n+"Color"]=e}),t}},o=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),!function(e){function t(){try{var i=this===document?e(this):e(this).contents()}catch(n){return!1}i.mousemove(function(t){e.mlp={x:t.pageX,y:t.pageY}}),i.find("iframe").on("load",t)}e.mlp={x:0,y:0},e(t),e.fn.ismouseover=function(){var t=!1;return this.eq(0).each(function(){var i=e(this).is("iframe")?e(this).contents().find("body"):e(this),n=i.offset();t=n.left<=e.mlp.x&&n.left+i.outerWidth()>e.mlp.x&&n.top<=e.mlp.y&&n.top+i.outerHeight()>e.mlp.y}),t}}(jQuery);var g_ugYoutubeAPI=new UGYoutubeAPI,g_ugVimeoAPI=new UGVimeoAPI,g_ugHtml5MediaAPI=new UGHtml5MediaAPI,g_ugSoundCloudAPI=new UGSoundCloudAPI,g_ugWistiaAPI=new UGWistiaAPI;jQuery.fn.unitegallery=function(e){var t=jQuery(this),i="#"+t.attr("id");if(!e)var e={};var n=new UniteGalleryMain;n.run(i,e);var r=new UG_API(n);return r}; \ No newline at end of file diff --git a/plugins/unitegallery/vendor/unitegallery/release_log.txt b/plugins/unitegallery/vendor/unitegallery/release_log.txt new file mode 100644 index 0000000000000000000000000000000000000000..469afd97d0eafe232f5273fdfa26e3f1a9a41fbf --- /dev/null +++ b/plugins/unitegallery/vendor/unitegallery/release_log.txt @@ -0,0 +1,503 @@ +version 1.7.40 + +-bug fix: fixed some ratio related js issue + +version 1.7.39 + +-bug fix: fixed easing functions jquery 3.0 compatability + +version 1.7.38 + +-bug fix: fixed some js error in case of iframes in the page + +version 1.7.37 + +-bug fix: fixed the thumb image as big image bug + +version 1.7.36 + +-protection: made some protection against video visibility:hidden +-protection: added some protection against js scripts that add additional items inside the gallery +-change: add a check if the gallery resized once in 2 seconds + +version 1.7.35 + +-bug fix: fixed some errors related to jquery 3.0 + +version 1.7.34 + +-bug fix: the lightbox was switched to wide even on normal screens + +version 1.7.33 + +-bug fix: fixed no thumb image bug + +version 1.7.32 + +-bug fix: fixed left arrow inside arrows not in place bug + +version 1.7.31 + +-bug fix: on keyboard event only first gallery affected + +version 1.7.30 + +-bug fix: made option for removing "src" from the image and replace it by data-image="" + +version 1.7.29 + +-bug fix: fixed slash in paths issues + +version 1.7.28 + +-feature: updated tiles grid with options: grid_min_cols, grid_space_between_mobile for better responsiveness +-protection: added protection for margin and padding in the slider + +version 1.7.27 + +-feature: added "open_lightbox" and "close_lightbox" to the API + +version 1.7.26 + +-feature: added option for: data-thumb-mobile and data-image-mobile in the items for mobile urls + +version 1.7.25 + +-bug fix: fixed lightbox compact bottom text issue +-bug fix: loading youtube API only from https +-protection: added protection to html5 video player for css size change + +version 1.7.24 + +-bug fix: escaped "'" character in image url's + +version 1.7.23 + +-feature: added theme_next_video_onend function in video gallery theme + +-bug fix: fixed the api events issue on tab change +-bug fix: fixed option: theme_text_type in default theme + +version 1.7.22 + +-bug fix: fixed bug related to video sizes in lightbox +-bug fix: fixed bug when right button was disabled on non fixed thumbs + +version 1.7.21 + +-bug fix: fixed one row only bug in tiles grid + +version 1.7.20 + +-bug fix: fixed youtube player destroy function, was a bug there + +version 1.7.19 + +change: changed functionality to: tile_videoplay_icon_always_on + +version 1.7.18 + +-bug fix: fixed various bugs from 17.7.17 + +version 1.7.17 + +-bug fix: fixed jquery 1.8 issue with fading. +-bug fix: fixed icon always on issue + +version 1.7.16 + +-bug fix: fixed image border issue. + +version 1.7.15 + +-bug fix: fixed tiles grid small issue with rtl + +version 1.7.14 + +-bug fix: fixed nested type arrange on first load for mobile mode + +version 1.7.13 + +-bug fix: fixed small js bug, about html variable +-bug fix: added better protection against unwanted css transitions +-bug fix: fixed vimeo didn't changed bug (vimeo removed the quick change video option) + +version 1.7.12 + +-change: added line height to video title +-bug fix: bring back the fixed tiles_max_columns function + +version 1.7.11 + +-bog fix: improved lightbox wide video player + +version 1.7.10 + +-change: added theme_align option to tiles grid + +version 1.7.9 + +-bug fix: fixed some preloader error with tabs +-bug fix: fixed tilegrid resize issues + +version 1.7.8 + +-made some small js changes + +version 1.7.7 + +-added support for image src as full image, and data-thumb as thumb + +version 1.7.7 + +-bug fix: fixed direction arrows slide direction +-bug fix: fixed titles with html tags + +version 1.7.6 + +-feature: added tile text panel description +-protection: added protection against width:100% css + +version 1.7.5 + +-feature: added tile text panel top/bottom/middle positions (text outside image) +-bug fix: fixed ie11 fullscreen mode + +version 1.7.4 + +-bug fix: fixed left / right buttons on input objects + +version 1.7.3 + +-feature: added category tab select type +-bug fix: fixed video player misplaced on gallery resize + +version 1.7.2 + +-protection: added protection agains lasy load + +version 1.7.1 + +-feature: added "open lightbox at start" option for tiles theme + +version 1.7 + +-feature: added "tiles - nested" gallery type +-feature: added API functions to carousel type + +version 1.6.8 + +-addition: added protection against undefined big images url's for the slider. +-change: changed mediaelement to new version +-bug fix: added z-index:0 to the gallery to avoid menu over the gallery + +version 1.6.7 + +-change: changed files order include +-change: improved error message on some cases + +version 1.6.6 + +-bug fix: fixed min jquery version checking. + +version 1.6.5 + +-feature: added minimal version jquery validation +-bug fix: fixed tiles text panel appear + + +version 1.6.4 + +-feature: keep order option in tiles columns +-bug fix: text panel was blined on tiles resize + +version 1.6.3 + +-bug fix: fixed text panel always on on tiles types + +version 1.6.2 + +-bug fix: text panel was not hided on some of the cases +-chagne: improved show/hide controls display + +version 1.6.1 + +bug fix: fixed a small bug with tiles image effect + +version 1.6 + +-feature: changed tiles view - make variable number of columns +-change: improvement transition movement of tiles and justified types + +version 1.5.9 + +-feature: added option thumb_fixed_size that alow to run dynamic size strips. + +version 1.5.8 + +-bug fix: the video player stayed on compact mode on slide change + +version 1.5.7 + +-feature: added option: tiles_align for columns type +-change: changed default lightbox transition to "fade" + +version 1.5.6 + +-bug fix: add "ug-rtl" style +-feature: added option: tile_videoplay_icon_always_on in tile design section + +version 1.5.5 + +-bug fix: fixed size bugs in justified type + +version 1.5.4 + +-bug fix: fixed video gallery with tabs + +version 1.5.3 + +-feature: added "destroy function to API" +-bug fix: fixed destroy function + +version 1.5.2 + +-bug fix: added remove html function to lightbox +-bug fix: fixed some ie8 related issues +-bug fix: disabled scrolling on lightbox with mousewheel: none + +version 1.5.1 + +-bog fix: fixed theme default options (like autoplay=true) that was brocken in the last update + +version 1.5 + +-feature: added "category tabs" support + +version 1.4.6 + +-bug fix: fixed js error on carousel without navigation + +version 1.4.5 + +- change: added support for "title" attribute as item description + +version 1.4.4 + +-feature: enable slider area links +-bug fix: on playing mode slides was advanced even when images was not loaded +-bug fix: fixed mousewheel advance item on lightbox + +version 1.4.3 + +-bug fix: gallery on hidden tab was dissapeared on fullscreen + +version 1.4.2 + +-feature: added option gallery_shuffle +-bug fix: bullets miss position after back from full screen + +version 1.4.1 + +-bug fix: fixed some bug in justified tiles view in mobile width +-bug fix: fixed issue with video size at tabs + +version 1.4 + +-bug fix: add preloader to video player +-change: video in lightbox compact mode opens in frame instead of on full screen + +version 1.3.9 + +-feature: added option: slider_background_opacity +-feature: added option: gallery_mousewheel_role +-feature: added scale mode: fitdown +-feature: added vertical page scroll on drag + +-change: when go to full screen mode, disable the pause on mouseover mode +-bug fix: carousel tile was dissapeared when size change less then tile width + +version 1.3.8 + +-bug fix: fixed carousel related bug that text panel was over the icons + +version 1.3.7 + +-bug fix: fixed carousel text panel didn't appeared on cloned items + +version 1.3.6 + +-bug fix: fixed bug when closing the lightbox + +version 1.3.5 + +-bug fix: the lightbox was closing on video slider touch + +version 1.3.4 + +-feature: added mobile hide options to slider buttons and zoom panel + +version 1.3.3 + +-feature: added top position navigation option in carousel view + +version 1.3.2 + +-bug fix: fixed the flickering when close compact lightbox with view playing. +-bug fix: fixed bug with text panel not always on on themes. + +version 1.3.1 + +-bug fix: text panel was not show on carousel cloned items +-bug fix: fixed issue with one item only on carousel + +version 1.3 + +-feature: added "compact" lightbox type + +version 1.2.16 + +-bug fix: fixed the responsivness of regular themes. + +version 1.2.15 + +-bug fix: fixed hide preloader on tiles theme +-bug fix: fixed empty image was trying to load + +version 1.2.14 + +-feature: added lightbox close on escape key + +version 1.2.13 + +-bug fix: make all the themes work within tabs + +version 1.2.12 + +-bug fix: make the gallery to work within tabs + +version 1.2.11 + +-bug fix: added clickable function for carousel and tiles grid mode for mobile and tablet + +version 1.2.10 + +-bug fix: adopted tiles clickable functions for mobile and tablet + +version 1.2.9 + +-bug fix: fixed text align in lightbox + +version 1.2.8 + +-feature: added tiles text panel text source, title or description + +version 1.2.7 + +-feature: added disable lightbox option (tile_enable_action). + +version 1.2.6 + +-bug fix: fixed some bug with lightbox text cut off + +version 1.2.5 + +-change: added css protection against unwanted css transitions + +version 1.2.4 + +- bug fix: fixed destorted images on some of the themes like avada + +version 1.2.3 + +-feature: added lightbox additional options including lightbox slider options + +version 1.2.2 + +-bug fix: fixed lightbox textpanel positioning on mobile + +version 1.2.1 + +-bug fix: fixed tiles type total height +-bug fix: adopted the tiles galleries for touch +-bug fix: fixed lightbox positioning when back from drag +-bug fix: fixed tiles youtube play issues + +version 1.2 + +-added theme: tiles (columns,justified) +-added theme: tilesgrid +-added theme: carousel + +-option add: added grid option: grid_padding. +-option add: added textpanel options: textpanel_fontfamily, etc. +-option add: added option: slider_background_color +-option add: added option: bullets_space_between to bullets object (for tiles types) +-option add: added option: tiles_height, tiles_width for tiles fixed type +-option add: added youtube video options: video_youtube_showinfo, + +-change: removed background color from the gallery wrapper +-change: changed gallery min height and min width options to fit into mobile devices. + +-bug fix: fixed video gallery autoplay for vimeo video +-bug fix: fixed video gallery description size +-bug fix: fixed keyboard navigation in google chrome +-bug fix: fixed bullets left margin on first item + + +version (1.1.2015) 1.1.6 + +- bug fix: fixed video gallery title and description skin mobile view + +version (13.12.2014) 1.1.5 + +- feature: added bottom buttons for video gallery +- feature: added ugCheckForErrors function for error message output + +version (2.12.2014) 1.1.4 + +- bug fix: fixed multiple video galleries on one page + +version (2.12.2014) 1.1.3 + +- added video gallery theme +- added option to disble panel at start for some seconds +- bug fix: fixed small bug with youtube playback + +version (29.11.2014) 1.1.2 + +- bug fix: when controls not alwqays on, don't show progress bar +- bug fix: fixed fullscreen on ie11 + +version 1.1.1 + +-feature: added option: slider_videoplay_button_type. slider video play button type, square or round + +version 1.1 (20.10.2014) + +-feature: add grid bottom and grid top types +-feature: added media players for youtube, vimeo, html5 video, soundcloud, wistia +-feature: get automatically youtube images and thumbs by id +-feature: added option: slider_zoom_max_ratio for limit the zooming +-feature: added option: slider_scale_mode_media - saparate scale mode option for slider media item + +-bug fix: fixed first image was not loaded sometimes. + +version 1.0.3 + +-feature: add grid bottom and grid top types + +version 1.0.2 + +-bug fix: fixed avia strip navigation. + +version 1.0.1 + +- bug fix: removed max-width:100% from the images +- bug fix: added strip arrows to alexis theme +- change: set option "debug errors" to false +- bug fix: added transition setting to strip scroll, was hard coded. +- bug fix: fixed small bug in compact theme related to galllery resize +- bug fix: fixed compatability with other draggable components + +version 1.0 - first release \ No newline at end of file diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/alexis.css b/plugins/unitegallery/vendor/unitegallery/skins/alexis/alexis.css new file mode 100644 index 0000000000000000000000000000000000000000..abd6b388a3da21cbcd26ef1a753667fc2f19f96d --- /dev/null +++ b/plugins/unitegallery/vendor/unitegallery/skins/alexis/alexis.css @@ -0,0 +1,385 @@ + +/*------ Unite Gallery Alexis Skin -------*/ + + +.---------Slider_Arrows--------{} + +.ug-arrow-left.ug-skin-alexis, +.ug-arrow-right.ug-skin-alexis{ + width:35px; + height:35px; + background-image:url('images/slider_arrow_left.png'); + background-position:0px 0px; +} + +.ug-arrow-right.ug-skin-alexis{ + background-image:url('images/slider_arrow_right.png'); +} + +.ug-arrow-left.ug-skin-alexis.ug-arrow-hover, +.ug-arrow-right.ug-skin-alexis.ug-arrow-hover{ + background-position:0px -35px; +} + +.ug-arrow-left.ug-skin-alexis.ug-arrow-disabled, +.ug-arrow-right.ug-skin-alexis.ug-arrow-disabled{ + background-position:0px -70px; +} + + +.---------Slider_Bullets--------{} + +.ug-bullets.ug-skin-alexis .ug-bullet{ + width:28px; + height:28px; + background-image:url('images/slider_bullets.png'); + background-position:top left; + margin-left:5px; +} + +.ug-bullets.ug-skin-alexis .ug-bullet.ug-bullet-active{ + background-position:bottom left; +} + + +.---------Slider_Buttons--------{} + +/* --- play button -- */ +.ug-button-play.ug-skin-alexis{ + position:absolute; + background-image:url('images/button_playpause.png'); + width:35px; + height:35px; + cursor:pointer; + background-position:0px 0px; +} + +.ug-button-play.ug-skin-alexis.ug-button-hover{ + background-position:0px -35px; +} + +.ug-button-play.ug-skin-alexis.ug-stop-mode{ + background-position:0px -70px; +} + +.ug-button-play.ug-skin-alexis.ug-stop-mode.ug-button-hover{ + background-position:0px -105px; +} + +/* --- fullscreen button -- */ + +.ug-button-fullscreen.ug-skin-alexis{ + position:absolute; + background-image:url('images/button_fullscreen.png'); + width:35px; + height:35px; + cursor:pointer; + background-position:0px 0px; +} + +.ug-button-fullscreen.ug-skin-alexis.ug-button-hover{ + background-position:0px -35px; +} + +.ug-button-fullscreen.ug-skin-alexis.ug-fullscreenmode{ + background-position:0px -70px; +} + +.ug-button-fullscreen.ug-skin-alexis.ug-fullscreenmode.ug-button-hover{ + background-position:0px -105px; +} + + +.---------Zoom_Panel--------{} + +/* --- zoom panel --- */ + +.ug-zoompanel.ug-skin-alexis .ug-zoompanel-button{ + background-repeat: no-repeat; + cursor:pointer; + height: 35px; + width: 35px; + margin-top:5px; + background-position: 0px 0px; +} + +.ug-zoompanel.ug-skin-alexis .ug-zoompanel-plus{ + margin-top:0px; +} + +.ug-zoompanel.ug-skin-alexis .ug-zoompanel-plus{ + background-image:url('images/button_zoom_plus.png'); +} + +.ug-zoompanel.ug-skin-alexis .ug-zoompanel-minus{ + background-image:url('images/button_zoom_minus.png'); +} + +.ug-zoompanel.ug-skin-alexis .ug-zoompanel-return{ + background-image:url('images/button_zoom_back.png'); +} + +.ug-zoompanel.ug-skin-alexis .ug-zoompanel-button.ug-button-hover{ + background-position: 0px -35px; +} + +.ug-zoompanel.ug-skin-alexis .ug-zoompanel-button-disabled, +.ug-zoompanel.ug-skin-alexis .ug-zoompanel-button.ug-button-hover.ug-zoompanel-button-disabled{ + background-position: 0px -70px; + cursor:default; +} + + +.---------Grid_Panel_Arrows--------{} + +/*--- down arrow ---*/ + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-down.ug-skin-alexis{ + width:40px; + height:25px; + background-position:0px -0px; + background-image:url('images/grid_arrow_down.png'); +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-down.ug-skin-alexis.ug-button-hover{ + background-position:0px -25px; +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-down.ug-skin-alexis.ug-button-hover.ug-button-disabled, +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-down.ug-skin-alexis.ug-button-disabled{ + background-position:0px -50px; +} + + +/*--- up arrow ---*/ + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-up.ug-skin-alexis{ + width:40px; + height:25px; + background-position:0px 0px; + background-image:url('images/grid_arrow_up.png'); +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-up.ug-skin-alexis.ug-button-hover{ + background-position:0px -25px; +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-up.ug-skin-alexis.ug-button-hover.ug-button-disabled, +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-up.ug-skin-alexis.ug-button-disabled{ + background-position:0px -50px; +} + +/*--- left arrow ---*/ + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-left.ug-skin-alexis{ + width:40px; + height:40px; + background-position:0px 0px; + background-image:url('images/grid_arrow_left.png'); +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-left.ug-skin-alexis.ug-button-hover{ + background-position:0px -40px; +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-left.ug-skin-alexis.ug-button-hover.ug-button-disabled, +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-left.ug-skin-alexis.ug-button-disabled{ + background-position:0px -80px; +} + +/*--- right arrow ---*/ + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-right.ug-skin-alexis{ + width:40px; + height:40px; + background-position:0px 0px; + background-image:url('images/grid_arrow_right.png'); +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-right.ug-skin-alexis.ug-button-hover{ + background-position:0px -40px; +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-right.ug-skin-alexis.ug-button-hover.ug-button-disabled, +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-right.ug-skin-alexis.ug-button-disabled{ + background-position:0px -80px; +} + +/*--- left arrow - horizontal panel type ---*/ + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-left-hortype.ug-skin-alexis{ + width:15px; + height:30px; + background-image:url('images/grid_arrow_left_hortype.png'); + background-position:0px 0px; +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-left-hortype.ug-skin-alexis.ug-button-hover{ + background-position:0px -30px; +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-left-hortype.ug-skin-alexis.ug-button-hover.ug-button-disabled, +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-left-hortype.ug-skin-alexis.ug-button-disabled{ + background-position:0px -60px; +} + + +/*--- right arrow - horizontal panel type ---*/ + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-right-hortype.ug-skin-alexis{ + width:15px; + height:30px; + background-image:url('images/grid_arrow_right_hortype.png'); + background-position:0px 0px; +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-right-hortype.ug-skin-alexis.ug-button-hover{ + background-position:0px -30px; +} + +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-right-hortype.ug-skin-alexis.ug-button-hover.ug-button-disabled, +.ug-gallery-wrapper .ug-grid-panel .grid-arrow-right-hortype.ug-skin-alexis.ug-button-disabled{ + background-position:0px -60px; +} + + +.---------Strip_Panel_Arrows--------{} + +/* left and right arrows */ + +.ug-strip-panel .ug-strip-arrow-left.ug-skin-alexis, +.ug-strip-panel .ug-strip-arrow-right.ug-skin-alexis{ + width:25px; + height:50px; +} + +.ug-strip-panel .ug-strip-arrow-left.ug-skin-alexis .ug-strip-arrow-tip, +.ug-strip-panel .ug-strip-arrow-right.ug-skin-alexis .ug-strip-arrow-tip{ + background-position:0px 0px; + background-repeat:no-repeat; + width:4px; + height:7px; +} + +.ug-strip-panel .ug-strip-arrow-left.ug-skin-alexis .ug-strip-arrow-tip{ + background-image:url('images/arrows_strip_left.png'); +} + +.ug-strip-panel .ug-strip-arrow-right.ug-skin-alexis .ug-strip-arrow-tip{ + background-image:url('images/arrows_strip_right.png'); +} + +.ug-strip-panel .ug-strip-arrow-left.ug-skin-alexis.ug-button-hover .ug-strip-arrow-tip, +.ug-strip-panel .ug-strip-arrow-right.ug-skin-alexis.ug-button-hover .ug-strip-arrow-tip{ + background-position:0px -7px; +} + + +/* up and down arrows */ + +.ug-strip-panel .ug-strip-arrow-up.ug-skin-alexis, +.ug-strip-panel .ug-strip-arrow-down.ug-skin-alexis{ + height:25px; + width:50px; +} + +.ug-strip-panel .ug-strip-arrow-up.ug-skin-alexis .ug-strip-arrow-tip, +.ug-strip-panel .ug-strip-arrow-down.ug-skin-alexis .ug-strip-arrow-tip{ + background-position:0px 0px; + background-repeat:no-repeat; + width:7px; + height:4px; +} + +.ug-strip-panel .ug-strip-arrow-up.ug-skin-alexis .ug-strip-arrow-tip{ + background-image:url('images/arrows_strip_up.png'); +} + +.ug-strip-panel .ug-strip-arrow-down.ug-skin-alexis .ug-strip-arrow-tip{ + background-image:url('images/arrows_strip_down.png'); +} + +.ug-strip-panel .ug-strip-arrow-up.ug-skin-alexis.ug-button-hover .ug-strip-arrow-tip, +.ug-strip-panel .ug-strip-arrow-down.ug-skin-alexis.ug-button-hover .ug-strip-arrow-tip{ + background-position:-7px 0px; +} + +.ug-strip-panel .ug-strip-arrow.ug-skin-alexis.ug-button-disabled .ug-strip-arrow-tip{ + background-position:0px 0px; + opacity:0.5; + filter: alpha(opacity = 50); +} + +.---------Panel_Handle_Tip--------{} + +/* left and right handle */ +.ug-gallery-wrapper .ug-handle-tip-left.ug-skin-alexis, +.ug-gallery-wrapper .ug-handle-tip-right.ug-skin-alexis{ + width:37px; + height:40px; + background-image:url('images/grid_handle_right.png'); + background-repeat:no-repeat; + background-position:0px 0px; +} + +.ug-gallery-wrapper .ug-handle-tip-right.ug-skin-alexis{ + background-image:url('images/grid_handle_left.png'); + background-position:0px 0px; +} + +.ug-gallery-wrapper .ug-handle-tip-left.ug-button-hover.ug-skin-alexis, +.ug-gallery-wrapper .ug-handle-tip-right.ug-button-hover.ug-skin-alexis{ + background-position:0px 0px; +} + +.ug-gallery-wrapper .ug-handle-tip-left.ug-skin-alexis.ug-button-closed{ + background-image:url('images/grid_handle_left.png'); + background-position:0px 0px; +} + +.ug-gallery-wrapper .ug-handle-tip-right.ug-skin-alexis.ug-button-closed{ + background-image:url('images/grid_handle_right.png'); + background-position:0px 0px; +} + +.ug-gallery-wrapper .ug-handle-tip-left.ug-skin-alexis.ug-button-closed.ug-button-hover{ + background-position:0px 0px; + +} + +.ug-gallery-wrapper .ug-handle-tip-right.ug-skin-alexis.ug-button-closed.ug-button-hover{ + background-position:0px 0px; +} + + +/* top and bottom handle */ + +.ug-gallery-wrapper .ug-handle-tip-top.ug-skin-alexis, +.ug-gallery-wrapper .ug-handle-tip-bottom.ug-skin-alexis{ + width:36px; + height:19px; + background-image:url('images/grid_handle_up.png'); + background-repeat:no-repeat; + background-position:-36px 0px; +} + +.ug-gallery-wrapper .ug-handle-tip-bottom.ug-skin-alexis{ + background-image:url('images/grid_handle_bottom.png'); + background-position:-36px 0px; +} + +.ug-gallery-wrapper .ug-handle-tip-top.ug-skin-alexis.ug-button-hover, +.ug-gallery-wrapper .ug-handle-tip-bottom.ug-skin-alexis.ug-button-hover{ + background-position:0px 0px; +} + +.ug-gallery-wrapper .ug-handle-tip-top.ug-skin-alexis.ug-button-closed, +.ug-gallery-wrapper .ug-handle-tip-bottom.ug-skin-alexis.ug-button-closed{ + background-position:-108px 0px; +} + +.ug-gallery-wrapper .ug-handle-tip-top.ug-skin-alexis.ug-button-closed.ug-button-hover, +.ug-gallery-wrapper .ug-handle-tip-bottom.ug-skin-alexis.ug-button-closed.ug-button-hover{ + background-position:-72px 0px; +} + diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/arrows_strip_left.png b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/arrows_strip_left.png new file mode 100644 index 0000000000000000000000000000000000000000..790f057856cf560748ba459f6317d76ab0a9bc50 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/arrows_strip_left.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/arrows_strip_right.png b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/arrows_strip_right.png new file mode 100644 index 0000000000000000000000000000000000000000..67904993b6918f2bfffe406872d73cc600182460 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/arrows_strip_right.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/button_fullscreen.png b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/button_fullscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..c72341ecc1a5a6084be420c641a4ed9a4666a954 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/button_fullscreen.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/button_playpause.png b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/button_playpause.png new file mode 100644 index 0000000000000000000000000000000000000000..ed0689ca2cf25f44b232a337c755f0190848b3aa Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/button_playpause.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/button_zoom_back.png b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/button_zoom_back.png new file mode 100644 index 0000000000000000000000000000000000000000..7cd51cec62f2f3e2285bb078872eb3f2f55df7f9 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/button_zoom_back.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/button_zoom_minus.png b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/button_zoom_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..25a56fd40260483ebef2e9ee96bb24abf1ef837f Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/button_zoom_minus.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/button_zoom_plus.png b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/button_zoom_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..bd1319ae35900b6ae92407978d57fc7bfb57aec3 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/button_zoom_plus.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_arrow_down.png b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_arrow_down.png new file mode 100644 index 0000000000000000000000000000000000000000..6aa51f058cccbf05b643945c42df6e6cad2d26f5 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_arrow_down.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_arrow_left.png b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_arrow_left.png new file mode 100644 index 0000000000000000000000000000000000000000..fcf7226e5b0f47ce6b1b1da84072f5d4ce800522 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_arrow_left.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_arrow_left_hortype.png b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_arrow_left_hortype.png new file mode 100644 index 0000000000000000000000000000000000000000..d192fb45c18460a7cc9a367882cca697d5034efc Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_arrow_left_hortype.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_arrow_right.png b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..8f0d11eeb6b2519fb080f161d3ab5f5784d8fe2e Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_arrow_right.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_arrow_right_hortype.png b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_arrow_right_hortype.png new file mode 100644 index 0000000000000000000000000000000000000000..361d4058a4d48d646ede81029092d4c358dc4b3f Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_arrow_right_hortype.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_arrow_up.png b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_arrow_up.png new file mode 100644 index 0000000000000000000000000000000000000000..a4be1581af81fd10cdd13653a2bb4e79cf5071ce Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_arrow_up.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_handle_down.png b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_handle_down.png new file mode 100644 index 0000000000000000000000000000000000000000..6470fdbf86946879cc054c456cd8b96707590130 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_handle_down.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_handle_left.png b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_handle_left.png new file mode 100644 index 0000000000000000000000000000000000000000..683603a2065d569fc00fc2202f4cde5147190dff Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_handle_left.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_handle_right.png b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_handle_right.png new file mode 100644 index 0000000000000000000000000000000000000000..a5b394edaa61afc1454657624040b859d244f288 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_handle_right.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_handle_up.png b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_handle_up.png new file mode 100644 index 0000000000000000000000000000000000000000..c85c56e04aeb9a2ea25d516c8d1ca6716b560125 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/grid_handle_up.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/slider_arrow_left.png b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/slider_arrow_left.png new file mode 100644 index 0000000000000000000000000000000000000000..8782cb3f4d3915821f66324a199adaf2916973b3 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/slider_arrow_left.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/slider_arrow_right.png b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/slider_arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc55a63fd34900d0b0d66c2ffecd29c75a5a91c Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/slider_arrow_right.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/slider_bullets.png b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/slider_bullets.png new file mode 100644 index 0000000000000000000000000000000000000000..134079e021660274502b8b1bd8c59b43af084cfd Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/alexis/images/slider_bullets.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/arrow_grid_down.png b/plugins/unitegallery/vendor/unitegallery/skins/default/arrow_grid_down.png new file mode 100644 index 0000000000000000000000000000000000000000..6cb9e53cb5d6d78873e106d8fbfef551cd15bbbd Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/arrow_grid_down.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/arrow_grid_up.png b/plugins/unitegallery/vendor/unitegallery/skins/default/arrow_grid_up.png new file mode 100644 index 0000000000000000000000000000000000000000..631f56a7de8121f8eaa4be52e12bbbdd207e130e Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/arrow_grid_up.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/arrows_strip_down.png b/plugins/unitegallery/vendor/unitegallery/skins/default/arrows_strip_down.png new file mode 100644 index 0000000000000000000000000000000000000000..0faf9b91c4668ba96609d7473557b3d0e44c8d74 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/arrows_strip_down.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/arrows_strip_left.png b/plugins/unitegallery/vendor/unitegallery/skins/default/arrows_strip_left.png new file mode 100644 index 0000000000000000000000000000000000000000..790f057856cf560748ba459f6317d76ab0a9bc50 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/arrows_strip_left.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/arrows_strip_right.png b/plugins/unitegallery/vendor/unitegallery/skins/default/arrows_strip_right.png new file mode 100644 index 0000000000000000000000000000000000000000..67904993b6918f2bfffe406872d73cc600182460 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/arrows_strip_right.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/arrows_strip_up.png b/plugins/unitegallery/vendor/unitegallery/skins/default/arrows_strip_up.png new file mode 100644 index 0000000000000000000000000000000000000000..609b682680bf0694a878286948d78147b2fb87f6 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/arrows_strip_up.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/button_fullscreen.png b/plugins/unitegallery/vendor/unitegallery/skins/default/button_fullscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..b19398f90d5a7b16e9d5c127fe0ced326d3791ca Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/button_fullscreen.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/button_playpause.png b/plugins/unitegallery/vendor/unitegallery/skins/default/button_playpause.png new file mode 100644 index 0000000000000000000000000000000000000000..5a23686859dd280b9d9834bb29f7ca8bf8224b82 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/button_playpause.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/grid_arrow_left.png b/plugins/unitegallery/vendor/unitegallery/skins/default/grid_arrow_left.png new file mode 100644 index 0000000000000000000000000000000000000000..db101d6bcd5e227c218950065f62e3957c0d1a9e Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/grid_arrow_left.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/grid_arrow_right.png b/plugins/unitegallery/vendor/unitegallery/skins/default/grid_arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..036b9a2529b5f7eb743787cb19fb87538b4b7922 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/grid_arrow_right.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/grid_handle_black_bottom.png b/plugins/unitegallery/vendor/unitegallery/skins/default/grid_handle_black_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..f0b07eea0cfe1d005e04082a43e351a7e7d52617 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/grid_handle_black_bottom.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/grid_handle_black_left.png b/plugins/unitegallery/vendor/unitegallery/skins/default/grid_handle_black_left.png new file mode 100644 index 0000000000000000000000000000000000000000..95f6c2b79f8a5be9b76c23c82d6e1e5c68a0691e Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/grid_handle_black_left.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/grid_handle_black_right.png b/plugins/unitegallery/vendor/unitegallery/skins/default/grid_handle_black_right.png new file mode 100644 index 0000000000000000000000000000000000000000..75a6253e9bdc97d5b80f8a323d14ab92789c1281 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/grid_handle_black_right.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/grid_handle_black_top.png b/plugins/unitegallery/vendor/unitegallery/skins/default/grid_handle_black_top.png new file mode 100644 index 0000000000000000000000000000000000000000..a687369e893420ce664e2f26ea996980d67418f0 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/grid_handle_black_top.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/icon_zoom_back.png b/plugins/unitegallery/vendor/unitegallery/skins/default/icon_zoom_back.png new file mode 100644 index 0000000000000000000000000000000000000000..e0d4c896bab01b327353dc894c82bec86b3bea6e Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/icon_zoom_back.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/icon_zoom_minus.png b/plugins/unitegallery/vendor/unitegallery/skins/default/icon_zoom_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..93f5f0563b0da1074b4f76166a7b659345e490f7 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/icon_zoom_minus.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/icon_zoom_plus.png b/plugins/unitegallery/vendor/unitegallery/skins/default/icon_zoom_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..ab233e0319a4e65e50192da0b7a3ded9a7240291 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/icon_zoom_plus.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/slider_arrow_left.png b/plugins/unitegallery/vendor/unitegallery/skins/default/slider_arrow_left.png new file mode 100644 index 0000000000000000000000000000000000000000..d192fb45c18460a7cc9a367882cca697d5034efc Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/slider_arrow_left.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/slider_arrow_right.png b/plugins/unitegallery/vendor/unitegallery/skins/default/slider_arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..361d4058a4d48d646ede81029092d4c358dc4b3f Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/slider_arrow_right.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/slider_bullets.png b/plugins/unitegallery/vendor/unitegallery/skins/default/slider_bullets.png new file mode 100644 index 0000000000000000000000000000000000000000..33a27db97b4146cfd89b4e514a6e917a289082d4 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/slider_bullets.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/tile_bullets_blue.png b/plugins/unitegallery/vendor/unitegallery/skins/default/tile_bullets_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..2a2385b484654484cbcd2aff454eb1ab062103df Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/tile_bullets_blue.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/tile_bullets_brown.png b/plugins/unitegallery/vendor/unitegallery/skins/default/tile_bullets_brown.png new file mode 100644 index 0000000000000000000000000000000000000000..193cf2d2db1b48cdd7f974ce83dd80a95f3a3564 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/tile_bullets_brown.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/tile_bullets_gray.png b/plugins/unitegallery/vendor/unitegallery/skins/default/tile_bullets_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..29c21d9c97c24671c824924958b85e200e741ba2 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/tile_bullets_gray.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/tile_bullets_green.png b/plugins/unitegallery/vendor/unitegallery/skins/default/tile_bullets_green.png new file mode 100644 index 0000000000000000000000000000000000000000..855ddbec80ebdd69d89bb631f2d13bf83c4c0f6d Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/tile_bullets_green.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/tile_bullets_red.png b/plugins/unitegallery/vendor/unitegallery/skins/default/tile_bullets_red.png new file mode 100644 index 0000000000000000000000000000000000000000..fe39fb8cb4af30a9a2d5ef4e92700bc16e659a26 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/tile_bullets_red.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/tile_button_left.png b/plugins/unitegallery/vendor/unitegallery/skins/default/tile_button_left.png new file mode 100644 index 0000000000000000000000000000000000000000..71c3d6514e645e9d41d7a751d83089c9bc0dea2f Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/tile_button_left.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/tile_button_play_pause.png b/plugins/unitegallery/vendor/unitegallery/skins/default/tile_button_play_pause.png new file mode 100644 index 0000000000000000000000000000000000000000..cb9092fb5ea211403d79262efed2a09dedf9c1f7 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/tile_button_play_pause.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/skins/default/tile_button_right.png b/plugins/unitegallery/vendor/unitegallery/skins/default/tile_button_right.png new file mode 100644 index 0000000000000000000000000000000000000000..806aa672afa018030c01f7d84d82920fdf6b8f71 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/skins/default/tile_button_right.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/themes/carousel/ug-theme-carousel.js b/plugins/unitegallery/vendor/unitegallery/themes/carousel/ug-theme-carousel.js new file mode 100644 index 0000000000000000000000000000000000000000..7cbf4b014e64b9abdf4642c92d4093dd7642ce14 --- /dev/null +++ b/plugins/unitegallery/vendor/unitegallery/themes/carousel/ug-theme-carousel.js @@ -0,0 +1,388 @@ + +if(typeof g_ugFunctions != "undefined") + g_ugFunctions.registerTheme("carousel"); +else + jQuery(document).ready(function(){g_ugFunctions.registerTheme("carousel")}); + + +/** + * Grid gallery theme + */ +function UGTheme_carousel(){ + + var t = this; + var g_gallery = new UniteGalleryMain(), g_objGallery, g_objects, g_objWrapper; + var g_lightbox = new UGLightbox(), g_carousel = new UGCarousel(); + var g_functions = new UGFunctions(), g_objTileDesign = new UGTileDesign();; + var g_objNavWrapper, g_objButtonLeft, g_objButtonRight, g_objButtonPlay, g_objPreloader; + var g_apiDefine = new UG_API(); + + var g_options = { + theme_gallery_padding: 0, //the padding of the gallery wrapper + + theme_carousel_align: "center", //the align of the carousel + theme_carousel_offset: 0, //the offset of the carousel from the align sides + + theme_enable_navigation: true, + theme_navigation_position: "bottom", //top,bottom: the vertical position of the navigation reative to the carousel + theme_navigation_enable_play: true, //enable / disable the play button of the navigation + theme_navigation_align: "center", //the align of the navigation + theme_navigation_offset_hor: 0, //horizontal offset of the navigation + theme_navigation_margin: 20, //the space between the carousel and the navigation + theme_space_between_arrows: 5 //the space between arrows in the navigation + }; + + var g_defaults = { + gallery_width: "100%", + tile_width: 160, + tile_height: 160, + tile_enable_border: true, + tile_enable_outline: true, + carousel_vertical_scroll_ondrag: true + }; + + + //temp variables + var g_temp = { + }; + + + /** + * Init the theme + */ + function initTheme(gallery, customOptions){ + + g_gallery = gallery; + + //set default options + g_options = jQuery.extend(g_options, g_defaults); + + //set custom options + g_options = jQuery.extend(g_options, customOptions); + + //modifyOptions(); + + //set gallery options + g_gallery.setOptions(g_options); + + g_gallery.setFreestyleMode(); + + g_objects = gallery.getObjects(); + + //get some objects for local use + g_objGallery = jQuery(gallery); + g_objWrapper = g_objects.g_objWrapper; + + //init objects + g_lightbox.init(gallery, g_options); + + g_carousel.init(gallery, g_options); + + g_objTileDesign = g_carousel.getObjTileDesign(); + } + + + /** + * set gallery html elements + */ + function setHtml(){ + + //add html elements + g_objWrapper.addClass("ug-theme-carousel"); + + g_carousel.setHtml(g_objWrapper); + + if(g_options.theme_enable_navigation == true){ + var htmlAdd = "<div class='ug-tile-navigation-wrapper' style='position:absolute'>"; + htmlAdd += "<div class='ug-button-tile-navigation ug-button-tile-left'></div>"; + + //put play/pause button + if(g_options.theme_navigation_enable_play == true) + htmlAdd += "<div class='ug-button-tile-navigation ug-button-tile-play'></div>"; + + htmlAdd += "<div class='ug-button-tile-navigation ug-button-tile-right'></div>"; + htmlAdd += "</div>"; + g_objWrapper.append(htmlAdd); + + g_objNavWrapper = g_objWrapper.children(".ug-tile-navigation-wrapper"); + + g_objButtonLeft = g_objNavWrapper.children(".ug-button-tile-left"); + g_objButtonRight = g_objNavWrapper.children(".ug-button-tile-right"); + + g_objButtonLeft.css("margin-right",g_options.theme_space_between_arrows+"px"); + + if(g_options.theme_navigation_enable_play == true){ + g_objButtonPlay = g_objNavWrapper.children(".ug-button-tile-play"); + g_objButtonPlay.css("margin-right",g_options.theme_space_between_arrows+"px"); + } + + } + + g_lightbox.putHtml(); + + //add preloader + g_objWrapper.append("<div class='ug-tiles-preloader ug-preloader-trans'></div>"); + g_objPreloader = g_objWrapper.children(".ug-tiles-preloader"); + g_objPreloader.fadeTo(0,0); + + } + + /** + * get gallery width available for the grid + */ + function getGalleryWidth(){ + var galleryWidth = g_gallery.getSize().width; + galleryWidth -= g_options.theme_gallery_padding * 2; + + return(galleryWidth); + } + + /** + * get estimated height of the carousel and the navigation + */ + function getEstimatedHeight(){ + var height = g_carousel.getEstimatedHeight(); + + if(g_objNavWrapper){ + var navHeight = g_objNavWrapper.height(); + height += navHeight + g_options.theme_navigation_margin; + } + + return(height); + } + + /** + * actually run the theme + */ + function actualRun(){ + + //first set the height, maybe scrollbars will appear + var galleryHeight = getEstimatedHeight(); + g_objWrapper.height(galleryHeight); + + var galleryWidth = getGalleryWidth(); + + initEvents(); + + g_carousel.setMaxWidth(galleryWidth); + g_carousel.run(); + + g_lightbox.run(); + + positionElements(); + + } + + + /** + * run the theme + */ + function runTheme(){ + + setHtml(); + + actualRun(); + + } + + + /** + * position elements + */ + function positionElements(){ + + var carouselElement = g_carousel.getElement(); + var sizeCar = g_functions.getElementSize(carouselElement); + + var navHeight = 0; + + if(g_objNavWrapper){ + var sizeNav = g_functions.getElementSize(g_objNavWrapper); + navHeight = sizeNav.height; + } + + var galleryHeight = sizeCar.height; + + if(navHeight > 0) + galleryHeight += g_options.theme_navigation_margin + navHeight; + + //vars for bottom nav position + var carouselTop = 0; + + if(g_objNavWrapper){ + + var navTop = sizeCar.height + g_options.theme_navigation_margin; + + //change vars for top nav position + if(g_options.theme_navigation_position == "top"){ + + carouselTop = sizeNav.height + g_options.theme_navigation_margin; + navTop = 0; + } + } + + //align the carousel + g_functions.placeElement(carouselElement, g_options.theme_carousel_align, carouselTop, g_options.theme_carousel_offset, 0); + var sizeCar = g_functions.getElementSize(carouselElement); + + //position buttons + if(g_objNavWrapper){ + var navX = sizeCar.left + g_functions.getElementRelativePos(g_objNavWrapper, g_options.theme_navigation_align, g_options.theme_navigation_offset_hor, carouselElement); + g_functions.placeElement(g_objNavWrapper, navX, navTop); + + } + + g_objWrapper.height(galleryHeight); //temp height + + //place preloader + g_functions.placeElement(g_objPreloader, "center", 50); + + } + + + /** + * on tile click - open lightbox + */ + function onTileClick(data, objTile){ + + objTile = jQuery(objTile); + + var objItem = g_objTileDesign.getItemByTile(objTile); + var index = objItem.index; + + g_lightbox.open(index); + } + + + /** + * on gallery size change - resize the theme. + */ + function onSizeChange(){ + + var galleryWidth = getGalleryWidth(); + g_carousel.setMaxWidth(galleryWidth); + g_carousel.run(); + + positionElements(); + } + + /** + * before items request: hide items, show preloader + */ + function onBeforeReqestItems(){ + + g_carousel.stopAutoplay(); + + g_carousel.getElement().hide(); + + if(g_objNavWrapper) + g_objNavWrapper.hide(); + + //show preloader: + g_objPreloader.fadeTo(0,1); + } + + + /** + * init api functions + */ + function initAPIFunctions(event, api){ + + api.carouselStartAutoplay = function(){ + g_carousel.startAutoplay(); + } + + api.carouselStopAutoplay = function(){ + g_carousel.stopAutoplay(); + } + + api.carouselPause = function(){ + g_carousel.pauseAutoplay(); + } + + api.carouselUnpause = function(){ + g_carousel.unpauseAutoplay(); + } + + api.scrollLeft = function(numTiles){ + g_carousel.scrollLeft(numTiles); + } + + api.scrollRight = function(numTiles){ + g_carousel.scrollRight(numTiles); + } + + + } + + + /** + * init buttons functionality and events + */ + function initEvents(){ + + //set navigation buttons events + if(g_objNavWrapper){ + + g_carousel.setScrollLeftButton(g_objButtonRight); + g_carousel.setScrollRightButton(g_objButtonLeft); + + if(g_objButtonPlay) + g_carousel.setPlayPauseButton(g_objButtonPlay); + + } + + g_objGallery.on(g_gallery.events.SIZE_CHANGE, onSizeChange); + g_objGallery.on(g_gallery.events.GALLERY_BEFORE_REQUEST_ITEMS, onBeforeReqestItems); + + //on click events + jQuery(g_objTileDesign).on(g_objTileDesign.events.TILE_CLICK, onTileClick); + + //init api + g_objGallery.on(g_apiDefine.events.API_INIT_FUNCTIONS, initAPIFunctions); + } + + + /** + * destroy the carousel events + */ + this.destroy = function(){ + + if(g_objNavWrapper){ + g_functions.destroyButton(g_objButtonRight); + g_functions.destroyButton(g_objButtonLeft); + + if(g_objButtonPlay) + g_functions.destroyButton(g_objButtonPlay); + } + + g_objGallery.off(g_gallery.events.SIZE_CHANGE); + jQuery(g_objTileDesign).off(g_objTileDesign.events.TILE_CLICK); + g_objGallery.off(g_gallery.events.GALLERY_BEFORE_REQUEST_ITEMS); + + g_carousel.destroy(); + g_lightbox.destroy(); + + } + + + /** + * run the theme setting + */ + this.run = function(){ + + runTheme(); + } + + + /** + * init + */ + this.init = function(gallery, customOptions){ + + initTheme(gallery, customOptions); + + } + + +} diff --git a/plugins/unitegallery/vendor/unitegallery/themes/compact/ug-theme-compact.js b/plugins/unitegallery/vendor/unitegallery/themes/compact/ug-theme-compact.js new file mode 100644 index 0000000000000000000000000000000000000000..2feb282b93039ae35a61bbe6bd106880a3353b7c --- /dev/null +++ b/plugins/unitegallery/vendor/unitegallery/themes/compact/ug-theme-compact.js @@ -0,0 +1,461 @@ + +if(typeof g_ugFunctions != "undefined") + g_ugFunctions.registerTheme("compact"); +else + jQuery(document).ready(function(){g_ugFunctions.registerTheme("compact")}); + + +/** + * Grid gallery theme + */ +function UGTheme_compact(){ + + var t = this; + var g_gallery = new UniteGalleryMain(), g_objGallery, g_objects, g_objWrapper; + var g_objSlider; + var g_functions = new UGFunctions(); + var g_objPanel = new UGStripPanel(); + + //theme options + var g_options = { + theme_load_slider:true, //true, false - load the slider + theme_load_panel:true, //true, false - load the thumbs grid panel + theme_panel_position: "bottom", //top, bottom, left, right - thumbs panel position + theme_hide_panel_under_width: 480 //hide panel under certain browser width, if null, don't hide + }; + + //global defaults + var g_defaults = { + slider_controls_always_on:true, + slider_enable_text_panel:false, + slider_vertical_scroll_ondrag: true, + strippanel_enable_buttons:false + }; + + + //special defaults for left side panel position + var g_defaults_left = { + slider_enable_text_panel:true, + slider_zoompanel_align_hor: "right", + slider_fullscreen_button_align_hor: "right", + slider_play_button_align_hor: "right", + slider_zoompanel_offset_vert: 9, + slider_zoompanel_offset_hor: 11, + slider_play_button_offset_hor: 88, + slider_play_button_offset_vert: 8, + slider_fullscreen_button_offset_hor: 52, + slider_fullscreen_button_offset_vert: 9, + slider_progress_indicator_align_hor: "right", + slider_progress_indicator_offset_vert: 36, + slider_progress_indicator_offset_hor: 63 + } + + //special defaults for right side panel position + var g_defaults_right = { + slider_enable_text_panel:true, + slider_zoompanel_offset_vert: 9, + slider_zoompanel_offset_hor: 11, + slider_play_button_offset_hor: 88, + slider_play_button_offset_vert: 8, + slider_fullscreen_button_offset_hor: 52, + slider_fullscreen_button_offset_vert: 9, + + slider_progress_indicator_align_hor: "left", + slider_progress_indicator_offset_vert: 36, + slider_progress_indicator_offset_hor: 63 + + } + + //special defaults for bottom panel position + var g_defaults_bottom = { + + slider_zoompanel_align_hor: "right", + slider_zoompanel_offset_vert: 10, + + slider_progress_indicator_align_hor: "left", + slider_progress_indicator_offset_vert: 36, + slider_progress_indicator_offset_hor: 16 + } + + //special defaults for top panel position + var g_defaults_top = { + slider_zoompanel_align_vert: "bottom", + slider_zoompanel_offset_vert: 10, + + slider_play_button_align_hor: "right", + slider_play_button_align_vert: "bottom", + + slider_fullscreen_button_align_vert: "bottom", + slider_fullscreen_button_align_hor: "right", + + slider_progress_indicator_align_vert: "bottom", + slider_progress_indicator_offset_vert: 40 + } + + + //temp variables + var g_temp = { + isVertical: false, + isMobileModeWasEnabled: false + }; + + + /** + * Init the theme + */ + function initTheme(gallery, customOptions){ + + g_gallery = gallery; + + g_options = jQuery.extend(g_options, customOptions); + + modifyOptions(customOptions); + + //set gallery options + g_gallery.setOptions(g_options); + + //include gallery elements + if(g_options.theme_load_panel == true){ + g_objPanel.init(gallery, g_options); + g_objPanel.setOrientation(g_options.theme_panel_position); + + }else + g_objPanel = null; + + if(g_options.theme_load_slider == true) + g_gallery.initSlider(g_options); + + g_objects = gallery.getObjects(); + + //get some objects for local use + g_objGallery = jQuery(gallery); + g_objWrapper = g_objects.g_objWrapper; + + if(g_options.theme_load_slider == true) + g_objSlider = g_objects.g_objSlider; + + } + + + /** + * modify options + */ + function modifyOptions(customOptions){ + + g_options = jQuery.extend(g_options, g_defaults); + + if(g_options.theme_load_panel == true){ + + switch(g_options.theme_panel_position){ + case "left": + case "right": + g_temp.isVertical = true; + g_options.strippanel_vertical_type = true; + break; + } + } + + + switch(g_options.theme_panel_position){ + case "left": + g_options = jQuery.extend(g_options, g_defaults_left); + break; + case "right": + g_options = jQuery.extend(g_options, g_defaults_right); + break; + case "top": + g_options = jQuery.extend(g_options, g_defaults_top); + break; + case "bottom": + g_options = jQuery.extend(g_options, g_defaults_bottom); + break; + } + + g_options = jQuery.extend(g_options, customOptions); + + } + + + /** + * init all the theme's elements and set them to their places + * according gallery's dimentions. + * this function should work on resize too. + */ + function initAndPlaceElements(){ + + //place objects: + if(g_objPanel){ + initThumbsPanel(); + placeThumbsPanel(); + } + + if(g_objSlider){ + g_objSlider.run(); + placeSlider(); + } + + } + + + /** + * run the theme + */ + function runTheme(){ + + setHtml(); + + initAndPlaceElements(); + + initEvents(); + } + + + /** + * set gallery html elements + */ + function setHtml(){ + + //add html elements + g_objWrapper.addClass("ug-theme-grid"); + + //set panel html + if(g_objPanel) + g_objPanel.setHtml(); + + //set slider html + if(g_objSlider) + g_objSlider.setHtml(); + + } + + + /** + * init size of the thumbs panel + */ + function initThumbsPanel(){ + + //set size: + var objGallerySize = g_gallery.getSize(); + + if(g_temp.isVertical == false) + g_objPanel.setWidth(objGallerySize.width); + else + g_objPanel.setHeight(objGallerySize.height); + + g_objPanel.run(); + } + + + + /** + * place thumbs panel according the settings + */ + function placeThumbsPanel(){ + + var isNeedToHide = isPanelNeedToHide(); + var isHidden = g_objPanel.isPanelClosed(); + + var objPanelElement = g_objPanel.getElement(); + var posVert = "bottom"; + var posHor = "left"; + + var showClosed = (isNeedToHide || isHidden); + + if(showClosed){ + var hiddenDest = g_objPanel.getClosedPanelDest(); + var originalPos = g_functions.getElementRelativePos(objPanelElement, g_options.theme_panel_position); + g_objPanel.setClosedState(originalPos); + }else{ + g_objPanel.setOpenedState(); + } + + switch(g_options.theme_panel_position){ + case "right": + case "left": + posHor = g_options.theme_panel_position; + if(showClosed) + posHor = hiddenDest; + + break; + case "top": + case "bottom": + posVert = g_options.theme_panel_position; + if(showClosed) + posVert = hiddenDest; + break; + default: + throw new Error("Wrong panel position: " + g_options.theme_panel_position); + break; + } + + g_functions.placeElement(objPanelElement, posHor, posVert, 0, 0); + } + + + + /** + * place the slider according the thumbs panel size and position + */ + function placeSlider(){ + + //g_objPanel + var gallerySize = g_functions.getElementSize(g_objWrapper); + + var sliderWidth = gallerySize.width; + var sliderHeight = gallerySize.height; + var sliderTop = 0; + var sliderLeft = 0; + + if(g_objPanel){ + + var panelSize = g_objPanel.getSize(); + + switch(g_options.theme_panel_position){ + case "left": + sliderLeft = panelSize.right; + sliderWidth = gallerySize.width - panelSize.right; + break; + case "right": + sliderWidth = panelSize.left; + break; + case "top": + sliderHeight = gallerySize.height - panelSize.bottom; + sliderTop = panelSize.bottom; + break; + case "bottom": + sliderHeight = panelSize.top; + break; + } + + } + + g_objSlider.setSize(sliderWidth, sliderHeight); + g_objSlider.setPosition(sliderLeft, sliderTop); + } + + /** + * check if need to hide the panel according the options. + */ + function isPanelNeedToHide(){ + + if(!g_options.theme_hide_panel_under_width) + return(false); + + var windowWidth = jQuery(window).width(); + var hidePanelValue = g_options.theme_hide_panel_under_width; + + if(windowWidth <= hidePanelValue) + return(true); + + return(false); + } + + + /** + * check if need to hide or show panel according the theme_hide_panel_under_width option + */ + function checkHidePanel(){ + + //check hide panel: + if(!g_options.theme_hide_panel_under_width) + return(false); + + var needToHide = isPanelNeedToHide(); + + if(needToHide == true){ + g_objPanel.closePanel(true); + g_temp.isMobileModeWasEnabled = true; + } + else{ + if(g_temp.isMobileModeWasEnabled == true){ + g_objPanel.openPanel(true); + g_temp.isMobileModeWasEnabled = false; + } + } + } + + + /** + * on gallery size change - resize the theme. + */ + function onSizeChange(){ + + initAndPlaceElements(); + + if(g_objPanel) + checkHidePanel(); + + } + + + /** + * on panel move event + */ + function onPanelMove(){ + + placeSlider(); + } + + + /** + * before items request: hide items, show preloader + */ + function onBeforeReqestItems(){ + + g_gallery.showDisabledOverlay(); + + } + + + /** + * init buttons functionality and events + */ + function initEvents(){ + + g_objGallery.on(g_gallery.events.SIZE_CHANGE,onSizeChange); + g_objGallery.on(g_gallery.events.GALLERY_BEFORE_REQUEST_ITEMS, onBeforeReqestItems); + + if(g_objPanel){ + jQuery(g_objPanel).on(g_objPanel.events.FINISH_MOVE, onPanelMove); + } + + } + + + /** + * destroy the theme + */ + this.destroy = function(){ + + g_objGallery.off(g_gallery.events.SIZE_CHANGE); + g_objGallery.off(g_gallery.events.GALLERY_BEFORE_REQUEST_ITEMS); + + if(g_objPanel) + jQuery(g_objPanel).off(g_objPanel.events.FINISH_MOVE); + + g_objPanel.destroy(); + g_objSlider.destroy(); + + } + + + /** + * run the theme setting + */ + this.run = function(){ + + runTheme(); + } + + + /** + * init + */ + this.init = function(gallery, customOptions){ + + initTheme(gallery, customOptions); + } + + +} + diff --git a/plugins/unitegallery/vendor/unitegallery/themes/default/images/arrow_down_up.png b/plugins/unitegallery/vendor/unitegallery/themes/default/images/arrow_down_up.png new file mode 100644 index 0000000000000000000000000000000000000000..8bf0476466b4109e872b0097321387bf1469a1f8 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/themes/default/images/arrow_down_up.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/themes/default/images/arrows_strip_left.png b/plugins/unitegallery/vendor/unitegallery/themes/default/images/arrows_strip_left.png new file mode 100644 index 0000000000000000000000000000000000000000..790f057856cf560748ba459f6317d76ab0a9bc50 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/themes/default/images/arrows_strip_left.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/themes/default/images/arrows_strip_right.png b/plugins/unitegallery/vendor/unitegallery/themes/default/images/arrows_strip_right.png new file mode 100644 index 0000000000000000000000000000000000000000..67904993b6918f2bfffe406872d73cc600182460 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/themes/default/images/arrows_strip_right.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/themes/default/images/button_fullscreen.png b/plugins/unitegallery/vendor/unitegallery/themes/default/images/button_fullscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..3a3bc6c885bb4137dc51f73c808eb7124458a570 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/themes/default/images/button_fullscreen.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/themes/default/images/button_fullscreen_single.png b/plugins/unitegallery/vendor/unitegallery/themes/default/images/button_fullscreen_single.png new file mode 100644 index 0000000000000000000000000000000000000000..e5c7587a714d94a6941592fcf99b199eb11fec0a Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/themes/default/images/button_fullscreen_single.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/themes/default/images/button_playpause.png b/plugins/unitegallery/vendor/unitegallery/themes/default/images/button_playpause.png new file mode 100644 index 0000000000000000000000000000000000000000..39320b1fa62b5fd35038b810b7ce8d33f21d1370 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/themes/default/images/button_playpause.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/themes/default/images/button_playpause_single.png b/plugins/unitegallery/vendor/unitegallery/themes/default/images/button_playpause_single.png new file mode 100644 index 0000000000000000000000000000000000000000..23c0a0a7e0289b7aa554a00f73da2fd38023f609 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/themes/default/images/button_playpause_single.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/themes/default/ug-theme-default.css b/plugins/unitegallery/vendor/unitegallery/themes/default/ug-theme-default.css new file mode 100644 index 0000000000000000000000000000000000000000..fe3e48b8ed25ce218509bbd80977cff675b310e7 --- /dev/null +++ b/plugins/unitegallery/vendor/unitegallery/themes/default/ug-theme-default.css @@ -0,0 +1,155 @@ + + +.ug-gallery-wrapper .ug-theme-panel{ + position:absolute; + xbackground-color:red; + z-index:11; +} + +.ug-theme-panel .ug-strip-panel{ + z-index:6; +} + +/* --- fullscreen button -- */ + +.ug-theme-default .ug-default-button-fullscreen{ + position:absolute; + background-image:url('images/button_fullscreen.png'); + width:53px; + height:50px; + cursor:pointer; + background-position:0px 0px; + z-index:3; +} + +.ug-theme-default .ug-default-button-fullscreen.ug-button-hover{ + background-position:0px -50px; +} + +.ug-theme-default .ug-default-button-fullscreen.ug-fullscreenmode{ + background-position:0px -100px; +} + +.ug-theme-default .ug-default-button-fullscreen.ug-fullscreenmode.ug-button-hover{ + background-position:0px -150px; +} + + +/* --- fullscreen button single mode-- */ + +.ug-theme-default .ug-default-button-fullscreen-single{ + position:absolute; + background-image:url('images/button_fullscreen_single.png'); + width:52px; + height:50px; + cursor:pointer; + background-position:0px 0px; + z-index:3; +} + +.ug-theme-default .ug-default-button-fullscreen-single.ug-button-hover{ + background-position:0px -50px; +} + +.ug-theme-default .ug-default-button-fullscreen-single.ug-fullscreenmode{ + background-position:0px -100px; +} + +.ug-theme-default .ug-default-button-fullscreen-single.ug-fullscreenmode.ug-button-hover{ + background-position:0px -150px; +} + + +/* --- play button -- */ + +.ug-theme-default .ug-default-button-play{ + position:absolute; + background-image:url('images/button_playpause.png'); + width:51px; + height:50px; + cursor:pointer; + background-position:0px 0px; + z-index:4; +} + +.ug-theme-default .ug-default-button-play.ug-button-hover{ + background-position:0px -50px; +} + +.ug-theme-default .ug-default-button-play.ug-stop-mode{ + background-position:0px -100px; +} + +.ug-theme-default .ug-default-button-play.ug-stop-mode.ug-button-hover{ + background-position:0px -150px; +} + +/* --- play button single mode-- */ + +.ug-theme-default .ug-default-button-play-single{ + position:absolute; + background-image:url('images/button_playpause_single.png'); + width:50px; + height:50px; + cursor:pointer; + background-position:0px 0px; + z-index:4; +} + +.ug-theme-default .ug-default-button-play-single.ug-button-hover{ + background-position:0px -50px; +} + +.ug-theme-default .ug-default-button-play-single.ug-stop-mode{ + background-position:0px -100px; +} + +.ug-theme-default .ug-default-button-play-single.ug-stop-mode.ug-button-hover{ + background-position:0px -150px; +} + + +/* --- hide panel button -- */ + +.ug-default-button-hidepanel{ + position:absolute; + width:23px; + height:23px; + z-index:5; + cursor:pointer; +} + +.ug-default-button-hidepanel .ug-default-button-hidepanel-bg{ + background-color:#000000; + width:23px; + height:23px; + position:absolute; + top:0px; + left:0px; + opacity:0.4; + filter: alpha(opacity = 40); + z-index:1; +} + +.ug-default-button-hidepanel .ug-default-button-hidepanel-tip{ + position:absolute; + width:7px; + height:7px; + background-repeat:no-repeat; + background-image:url('images/arrow_down_up.png'); + background-position: 0px 0px; + z-index:2; +} + +.ug-default-button-hidepanel.ug-button-hover .ug-default-button-hidepanel-tip{ + background-position: 0px -7px; +} + +.ug-default-button-hidepanel.ug-button-hidden-mode .ug-default-button-hidepanel-tip{ + background-position: 0px -14px; +} + +.ug-default-button-hidepanel.ug-button-hidden-mode.ug-button-hover .ug-default-button-hidepanel-tip{ + background-position: 0px -21px; +} + diff --git a/plugins/unitegallery/vendor/unitegallery/themes/default/ug-theme-default.js b/plugins/unitegallery/vendor/unitegallery/themes/default/ug-theme-default.js new file mode 100644 index 0000000000000000000000000000000000000000..820184fe3e1834bcf82bcf69ebba9ffb4b094a0f --- /dev/null +++ b/plugins/unitegallery/vendor/unitegallery/themes/default/ug-theme-default.js @@ -0,0 +1,682 @@ + +if(typeof g_ugFunctions != "undefined") + g_ugFunctions.registerTheme("default"); +else + jQuery(document).ready(function(){g_ugFunctions.registerTheme("default")}); + + +/** + * Default gallery theme + */ +function UGTheme_default(){ + + var t = this; + var g_gallery = new UniteGalleryMain(), g_objGallery, g_objects, g_objWrapper; + var g_objButtonFullscreen, g_objButtonPlay, g_objButtonHidePanel; + var g_objSlider, g_objPanel, g_objStripPanel, g_objTextPanel; + var g_functions = new UGFunctions(); + + //theme options + var g_options = { + theme_load_slider:true, //this option for debugging only + theme_load_panel:true, //this option for debugging only + + theme_enable_fullscreen_button: true, //show, hide the theme fullscreen button. The position in the theme is constant + theme_enable_play_button: true, //show, hide the theme play button. The position in the theme is constant + theme_enable_hidepanel_button: true, //show, hide the hidepanel button + theme_enable_text_panel: true, //enable the panel text panel. + + theme_text_padding_left: 20, //left padding of the text in the textpanel + theme_text_padding_right: 5, //right paddin of the text in the textpanel + theme_text_align: "left", //left, center, right - the align of the text in the textpanel + theme_text_type: "description", //title, description, both - text that will be shown on the text panel, title or description or both + + theme_hide_panel_under_width: 480 //hide panel under certain browser width, if null, don't hide + }; + + + //default item options: + var g_defaults = { + + //slider options: + slider_controls_always_on: true, + slider_zoompanel_align_vert: "top", + slider_zoompanel_offset_vert: 12, + + //textpanel options: + slider_textpanel_padding_top: 0, + slider_textpanel_enable_title: false, + slider_textpanel_enable_description: true, + slider_vertical_scroll_ondrag: true, + + //strippanel options + strippanel_background_color:"#232323", + strippanel_padding_top:10 + }; + + + //options that could not be changed by user + var g_mustOptions = { + + slider_enable_text_panel: false, + slider_enable_play_button:false, + slider_enable_fullscreen_button: false, + + //text panel options + slider_enable_text_panel: false, + slider_textpanel_height: 50, + slider_textpanel_align:"top", + }; + + + var g_temp = { + isPanelHidden: false + }; + + + /** + * init the theme + */ + function initTheme(gallery, customOptions){ + + g_gallery = gallery; + + g_options = jQuery.extend(g_options, g_defaults); + g_options = jQuery.extend(g_options, customOptions); + g_options = jQuery.extend(g_options, g_mustOptions); + + modifyOptions(); + + //set gallery options + g_gallery.setOptions(g_options); + + //include gallery elements + if(g_options.theme_load_panel == true){ + g_objStripPanel = new UGStripPanel(); + g_objStripPanel.init(gallery, g_options); + } + + if(g_options.theme_load_slider == true) + g_gallery.initSlider(g_options); + + g_objects = gallery.getObjects(); + + //get some objects for local use + g_objGallery = jQuery(gallery); + g_objWrapper = g_objects.g_objWrapper; + + if(g_options.theme_load_slider == true) + g_objSlider = g_objects.g_objSlider; + + //init text panel + if(g_options.theme_enable_text_panel == true){ + g_objTextPanel = new UGTextPanel(); + g_objTextPanel.init(g_gallery, g_options, "slider"); + } + + } + + + /** + * run the theme + */ + function runTheme(){ + + setHtml(); + + initAndPlaceElements(); + + initEvents(); + } + + + /** + * modify some options before implimenting + */ + function modifyOptions(){ + + var moreOptions = { + slider_textpanel_css_title:{}, //additional css of the title + slider_textpanel_css_description:{} //additional css of the description + }; + + g_options = jQuery.extend(moreOptions, g_options); + + g_options.slider_textpanel_css_title["text-align"] = g_options.theme_text_align; + g_options.slider_textpanel_css_description["text-align"] = g_options.theme_text_align; + + switch(g_options.theme_text_type){ + case "title": + g_options.slider_textpanel_enable_title = true; + g_options.slider_textpanel_enable_description = false; + break; + case "both": + g_options.slider_textpanel_enable_title = true; + g_options.slider_textpanel_enable_description = true; + break; + default: + case "description": //the description is the default + } + + } + + + + /** + * set gallery html elements + */ + function setHtml(){ + + //add html elements + g_objWrapper.addClass("ug-theme-default"); + + var htmlAdd = ""; + + //add panel + htmlAdd += "<div class='ug-theme-panel'>"; + + var classButtonFullscreen = 'ug-default-button-fullscreen'; + var classButtonPlay = 'ug-default-button-play'; + var classCaptureButtonFullscreen = '.ug-default-button-fullscreen'; + var classCaptureButtonPlay = '.ug-default-button-play'; + + + if(!g_objTextPanel){ //take the buttons from default theme + classButtonFullscreen = 'ug-default-button-fullscreen-single'; + classButtonPlay = 'ug-default-button-play-single'; + classCaptureButtonFullscreen = '.ug-default-button-fullscreen-single'; + classCaptureButtonPlay = '.ug-default-button-play-single'; + } + + //add fullscreen button to the panel + if(g_options.theme_enable_fullscreen_button == true) + htmlAdd += "<div class='"+classButtonFullscreen+"'></div>"; + + //add play button to the panel + if(g_options.theme_enable_play_button == true) + htmlAdd += "<div class='"+classButtonPlay+"'></div>"; + + //add hide panel button + if(g_options.theme_enable_hidepanel_button) + htmlAdd += "<div class='ug-default-button-hidepanel'><div class='ug-default-button-hidepanel-bg'></div> <div class='ug-default-button-hidepanel-tip'></div></div>"; + + htmlAdd += "</div>"; + + g_objWrapper.append(htmlAdd); + + //set elements + g_objPanel = g_objWrapper.children(".ug-theme-panel"); + + if(g_options.theme_enable_fullscreen_button == true) + g_objButtonFullscreen = g_objPanel.children(classCaptureButtonFullscreen); + + if(g_options.theme_enable_play_button == true) + g_objButtonPlay = g_objPanel.children(classCaptureButtonPlay); + + if(g_options.theme_enable_hidepanel_button == true) + g_objButtonHidePanel = g_objPanel.children(".ug-default-button-hidepanel"); + + //set html strip panel to the panel + g_objStripPanel.setHtml(g_objPanel); + + //set text panel html to the panel + if(g_objTextPanel) + g_objTextPanel.appendHTML(g_objPanel); + + //set slider html + if(g_objSlider) + g_objSlider.setHtml(); + + } + + + /** + * init all the theme's elements and set them to their places + * according gallery's dimentions. + * this function should work on resize too. + */ + function initAndPlaceElements(){ + + //create and place thumbs panel: + if(g_options.theme_load_panel){ + initPanel(); + placePanel(); + } + + //place the slider + if(g_objSlider){ + placeSlider(); + g_objSlider.run(); + } + + } + + + /** + * init size of the thumbs panel + */ + function initPanel(){ + + var objGallerySize = g_gallery.getSize(); + var galleryWidth = objGallerySize.width; + + //init srip panel width + g_objStripPanel.setOrientation("bottom"); + g_objStripPanel.setWidth(galleryWidth); + g_objStripPanel.run(); + + //set panel size + var objStripPanelSize = g_objStripPanel.getSize(); + var panelHeight = objStripPanelSize.height; + + if(g_objTextPanel){ + panelHeight += g_mustOptions.slider_textpanel_height; + + if(g_objButtonHidePanel){ + var hideButtonHeight = g_objButtonHidePanel.outerHeight(); + panelHeight += hideButtonHeight; + } + } + else{ + var maxButtonsHeight = 0; + + if(g_objButtonHidePanel) + maxButtonsHeight = Math.max(g_objButtonHidePanel.outerHeight(), maxButtonsHeight); + + if(g_objButtonFullscreen) + maxButtonsHeight = Math.max(g_objButtonFullscreen.outerHeight(), maxButtonsHeight); + + if(g_objButtonPlay) + maxButtonsHeight = Math.max(g_objButtonPlay.outerHeight(), maxButtonsHeight); + + panelHeight += maxButtonsHeight; + + } + + g_functions.setElementSize(g_objPanel, galleryWidth, panelHeight); + + //position strip panel + var stripPanelElement = g_objStripPanel.getElement(); + g_functions.placeElement(stripPanelElement, "left", "bottom"); + + //init hide panel button + if(g_objButtonHidePanel){ + var buttonTip = g_objButtonHidePanel.children(".ug-default-button-hidepanel-tip"); + g_functions.placeElement(buttonTip, "center", "middle"); + + //set opacity and bg color from the text panel + if(g_objTextPanel){ + var objHideButtonBG = g_objButtonHidePanel.children(".ug-default-button-hidepanel-bg"); + + var hidePanelOpacity = g_objTextPanel.getOption("textpanel_bg_opacity"); + objHideButtonBG.fadeTo(0, hidePanelOpacity); + + var bgColor = g_objTextPanel.getOption("textpanel_bg_color"); + objHideButtonBG.css({"background-color":bgColor}); + } + + } + + //position buttons on the text panel: + var paddingPlayButton = 0; + var panelButtonsOffsetY = 0; + if(g_objButtonHidePanel){ + panelButtonsOffsetY = hideButtonHeight; + } + + if(g_objButtonFullscreen){ + g_functions.placeElement(g_objButtonFullscreen, "right", "top",0 , panelButtonsOffsetY); + paddingPlayButton = g_objButtonFullscreen.outerWidth(); + } + + if(g_objButtonPlay){ + var buttonPlayOffsetY = panelButtonsOffsetY; + if(!g_objTextPanel) + buttonPlayOffsetY++; + + g_functions.placeElement(g_objButtonPlay, "right", "top", paddingPlayButton, buttonPlayOffsetY); + paddingPlayButton += g_objButtonPlay.outerWidth(); + } + + //run the text panel + if(g_objTextPanel){ + + var textPanelOptions = {}; + textPanelOptions.slider_textpanel_padding_right = g_options.theme_text_padding_right + paddingPlayButton; + textPanelOptions.slider_textpanel_padding_left = g_options.theme_text_padding_left; + + if(g_objButtonHidePanel){ + textPanelOptions.slider_textpanel_margin = hideButtonHeight; + } + + g_objTextPanel.setOptions(textPanelOptions); + + g_objTextPanel.positionPanel(); + g_objTextPanel.run(); + } + + //place hide panel button + if(g_objButtonHidePanel){ + + if(g_objTextPanel) //place at the beginning of hte panel + g_functions.placeElement(g_objButtonHidePanel,"left", "top"); + + else{ //place above the strip panel + var stripPanelHeight = stripPanelElement.outerHeight(); + g_functions.placeElement(g_objButtonHidePanel,"left", "bottom", 0, stripPanelHeight); + } + } + + } + + + /** + * place thumbs panel according the settings + */ + function placePanel(){ + + if(g_temp.isPanelHidden || isPanelNeedToHide() == true){ + + //place panel hidden + var newPanelPosY = getHiddenPanelPosition(); + g_functions.placeElement(g_objPanel, 0, newPanelPosY); + g_temp.isPanelHidden = true; + + }else //place panel normal + g_functions.placeElement(g_objPanel, 0, "bottom"); + + + } + + + /** + * place the slider according the thumbs panel size and position + */ + function placeSlider(){ + + var sliderTop = 0; + var sliderLeft = 0; + var galleryHeight = g_gallery.getHeight(); + var sliderHeight = galleryHeight; + + if(g_objStripPanel && isPanelHidden() == false){ + var panelSize = g_objStripPanel.getSize(); + sliderHeight = galleryHeight - panelSize.height; + } + + var sliderWidth = g_gallery.getWidth(); + + //set parent container the panel + g_objSlider.setSize(sliderWidth, sliderHeight); + g_objSlider.setPosition(sliderLeft, sliderTop); + } + + + /** + * check if need to hide the panel according the options. + */ + function isPanelNeedToHide(){ + + if(!g_options.theme_hide_panel_under_width) + return(false); + + var windowWidth = jQuery(window).width(); + var hidePanelValue = g_options.theme_hide_panel_under_width; + + if(windowWidth <= hidePanelValue) + return(true); + + return(false); + } + + /** + * check if need to hide or show panel according the theme_hide_panel_under_width option + */ + function checkHidePanel(){ + + //check hide panel: + if(!g_options.theme_hide_panel_under_width) + return(false); + + var needToHide = isPanelNeedToHide(); + + if(needToHide == true) + hidePanel(true); + else + showPanel(true); + } + + + /** + * on gallery size change - resize the theme. + */ + function onSizeChange(){ + + initAndPlaceElements(); + + checkHidePanel(); + } + + + /** + * get if the panel is hidden + */ + function isPanelHidden(){ + + return(g_temp.isPanelHidden); + } + + + /** + * place panel with some animation + */ + function placePanelAnimation(panelY, functionOnComplete){ + + var objCss = {top: panelY + "px"}; + + g_objPanel.stop(true).animate(objCss ,{ + duration: 300, + easing: "easeInOutQuad", + queue: false, + complete: function(){ + if(functionOnComplete) + functionOnComplete(); + } + }); + + } + + + /** + * get position of the hidden panel + */ + function getHiddenPanelPosition(){ + + var galleryHeight = g_objWrapper.height(); + var newPanelPosY = galleryHeight; + if(g_objButtonHidePanel){ + var objButtonSize = g_functions.getElementSize(g_objButtonHidePanel); + newPanelPosY -= objButtonSize.bottom; + } + + return(newPanelPosY); + } + + + /** + * hide the panel + */ + function hidePanel(noAnimation){ + + if(!noAnimation) + var noAnimation = false; + + if(isPanelHidden() == true) + return(false); + + var newPanelPosY = getHiddenPanelPosition(); + + if(noAnimation == true) + g_functions.placeElement(g_objPanel, 0, newPanelPosY); + else + placePanelAnimation(newPanelPosY, placeSlider); + + if(g_objButtonHidePanel) + g_objButtonHidePanel.addClass("ug-button-hidden-mode"); + + g_temp.isPanelHidden = true; + + } + + + /** + * show the panel + */ + function showPanel(noAnimation){ + + if(!noAnimation) + var noAnimation = false; + + if(isPanelHidden() == false) + return(false); + + var galleryHeight = g_objWrapper.height(); + var panelHeight = g_objPanel.outerHeight(); + + var newPanelPosY = galleryHeight - panelHeight; + + if(noAnimation == true) + g_functions.placeElement(g_objPanel, 0, newPanelPosY); + else + placePanelAnimation(newPanelPosY, placeSlider); + + if(g_objButtonHidePanel) + g_objButtonHidePanel.removeClass("ug-button-hidden-mode"); + + g_temp.isPanelHidden = false; + } + + + /** + * on hide panel click + */ + function onHidePanelClick(event){ + + event.stopPropagation(); + event.stopImmediatePropagation(); + + if(g_functions.validateClickTouchstartEvent(event.type) == false) + return(true); + + if(isPanelHidden() == true) + showPanel(); + else + hidePanel(); + } + + /** + * before items request: hide items, show preloader + */ + function onBeforeReqestItems(){ + + g_gallery.showDisabledOverlay(); + + } + + + /** + * init buttons functionality and events + */ + function initEvents(){ + + g_objGallery.on(g_gallery.events.SIZE_CHANGE,onSizeChange); + g_objGallery.on(g_gallery.events.GALLERY_BEFORE_REQUEST_ITEMS, onBeforeReqestItems); + + //set the panel buttons + if(g_objButtonPlay){ + g_functions.addClassOnHover(g_objButtonPlay, "ug-button-hover"); + g_gallery.setPlayButton(g_objButtonPlay); + } + + //init fullscreen button + if(g_objButtonFullscreen){ + g_functions.addClassOnHover(g_objButtonFullscreen, "ug-button-hover"); + g_gallery.setFullScreenToggleButton(g_objButtonFullscreen); + } + + //init hide panel button + if(g_objButtonHidePanel){ + g_functions.setButtonMobileReady(g_objButtonHidePanel); + g_functions.addClassOnHover(g_objButtonHidePanel, "ug-button-hover"); + g_objButtonHidePanel.on("click touchstart", onHidePanelClick); + } + + //on gallery media player events, bring the element to front + g_objGallery.on(g_gallery.events.SLIDER_ACTION_START, function(){ + + //set slider to front + g_objPanel.css("z-index","1"); + g_objSlider.getElement().css("z-index","11"); + }); + + g_objGallery.on(g_gallery.events.SLIDER_ACTION_END, function(){ + + //set the panel to front + g_objPanel.css("z-index","11"); + g_objSlider.getElement().css("z-index","1"); + }); + + } + + /** + * destroy the gallery events and objects + */ + this.destroy = function(){ + + g_objGallery.off(g_gallery.events.SIZE_CHANGE); + g_objGallery.off(g_gallery.events.GALLERY_BEFORE_REQUEST_ITEMS); + + //set the panel buttons + if(g_objButtonPlay) + g_gallery.destroyPlayButton(g_objButtonPlay); + + //init fullscreen button + if(g_objButtonFullscreen) + g_gallery.destroyFullscreenButton(g_objButtonFullscreen); + + //init hide panel button + if(g_objButtonHidePanel) + g_functions.destroyButton(g_objButtonHidePanel); + + g_objGallery.off(g_gallery.events.SLIDER_ACTION_START); + g_objGallery.off(g_gallery.events.SLIDER_ACTION_END); + + if(g_objSlider) + g_objSlider.destroy(); + + if(g_objStripPanel) + g_objStripPanel.destroy(); + + if(g_objTextPanel) + g_objTextPanel.destroy(); + + } + + + /** + * run the theme setting + */ + this.run = function(){ + + runTheme(); + } + + + /** + * init + */ + this.init = function(gallery, customOptions){ + initTheme(gallery, customOptions); + } + +} diff --git a/plugins/unitegallery/vendor/unitegallery/themes/grid/ug-theme-grid.js b/plugins/unitegallery/vendor/unitegallery/themes/grid/ug-theme-grid.js new file mode 100644 index 0000000000000000000000000000000000000000..784ce5f412c9b2aa500c468065a6ac7fdf76f8f7 --- /dev/null +++ b/plugins/unitegallery/vendor/unitegallery/themes/grid/ug-theme-grid.js @@ -0,0 +1,423 @@ + +if(typeof g_ugFunctions != "undefined") + g_ugFunctions.registerTheme("grid"); +else + jQuery(document).ready(function(){g_ugFunctions.registerTheme("grid")}); + + +/** + * Grid gallery theme + */ +function UGTheme_grid(){ + + var t = this; + var g_gallery = new UniteGalleryMain(), g_objGallery, g_objects, g_objWrapper; + var g_objSlider; + var g_functions = new UGFunctions(); + var g_objPanel = new UGGridPanel(); + + + //theme options + var g_options = { + theme_load_slider:true, //true, false - load the slider + theme_load_panel:true, //true, false - load the thumbs grid panel + theme_panel_position: "right", //left, right, top, bottom - thumbs panel position + theme_hide_panel_under_width: 480 //hide panel under certain browser width, if null, don't hide + }; + + //global defaults (for right side) + var g_defaults = { + slider_controls_always_on:true, + slider_vertical_scroll_ondrag: true + }; + + //special defaults for left side panel position + var g_defaults_left = { + slider_zoompanel_align_hor: "right", + slider_fullscreen_button_align_hor: "right", + slider_play_button_align_hor: "right", + + slider_zoompanel_offset_vert: 9, + slider_zoompanel_offset_hor: 11, + slider_play_button_offset_hor: 88, + slider_play_button_offset_vert: 8, + slider_fullscreen_button_offset_hor: 52, + slider_fullscreen_button_offset_vert: 9 + }; + + var g_defaults_right = { + slider_zoompanel_offset_vert: 9, + slider_zoompanel_offset_hor: 11, + slider_play_button_offset_hor: 88, + slider_play_button_offset_vert: 8, + slider_fullscreen_button_offset_hor: 52, + slider_fullscreen_button_offset_vert: 9 + } + + var g_defaults_bottom = { + slider_enable_text_panel: false, + slider_zoompanel_align_hor: "right", + slider_zoompanel_offset_vert: 10, + + slider_progress_indicator_align_hor: "left", + slider_progress_indicator_offset_vert: 36, + slider_progress_indicator_offset_hor: 16 + } + + var g_defaults_top = { + slider_enable_text_panel: false, + slider_zoompanel_align_vert: "bottom", + slider_zoompanel_offset_vert: 10, + + slider_play_button_align_hor: "right", + slider_play_button_align_vert: "bottom", + + slider_fullscreen_button_align_vert: "bottom", + slider_fullscreen_button_align_hor: "right", + + slider_progress_indicator_align_vert: "bottom", + slider_progress_indicator_offset_vert: 40, + gridpanel_padding_border_top: 4, //padding between the top border of the panel + gridpanel_padding_border_bottom: 10 //padding between the bottom border of the panel + } + + //temp variables + var g_temp = { + isMobileModeWasEnabled: false, + isHorPos: false + }; + + + /** + * Init the theme + */ + function initTheme(gallery, customOptions){ + + g_gallery = gallery; + + g_options = jQuery.extend(g_options, g_defaults); + g_options = jQuery.extend(g_options, customOptions); + + switch(g_options.theme_panel_position){ + case "left": + g_options = jQuery.extend(g_options, g_defaults_left); + break; + case "right": + g_options = jQuery.extend(g_options, g_defaults_right); + break; + case "top": + g_options = jQuery.extend(g_options, g_defaults_top); + break; + case "bottom": + g_options = jQuery.extend(g_options, g_defaults_bottom); + break; + } + + g_options = jQuery.extend(g_options, customOptions); + + modifyOptions(); + + //set gallery options + g_gallery.setOptions(g_options); + + //include gallery elements + if(g_options.theme_load_panel == true){ + if(g_options.theme_panel_position == "top" || g_options.theme_panel_position == "bottom") + g_temp.isHorPos = true; + + g_objPanel.setOrientation(g_options.theme_panel_position); + g_objPanel.init(gallery, g_options); + }else + g_objPanel = null; + + if(g_options.theme_load_slider == true) + g_gallery.initSlider(g_options); + + g_objects = gallery.getObjects(); + + //get some objects for local use + g_objGallery = jQuery(gallery); + g_objWrapper = g_objects.g_objWrapper; + + if(g_options.theme_load_slider == true) + g_objSlider = g_objects.g_objSlider; + + } + + + /** + * modify options + */ + function modifyOptions(){ + + if(g_options.theme_load_panel == true && g_options.theme_panel_position == "left"){ + g_options.gridpanel_handle_position = "right"; + } + } + + /** + * init all the theme's elements and set them to their places + * according gallery's dimentions. + * this function should work on resize too. + */ + function initAndPlaceElements(){ + + //place objects: + if(g_objPanel){ + initThumbsPanel(); + placeThumbsPanel(); + } + + if(g_objSlider){ + g_objSlider.run(); + placeSlider(); + } + + } + + + /** + * run the theme + */ + function runTheme(){ + + setHtml(); + + initAndPlaceElements(); + + initEvents(); + } + + + /** + * set gallery html elements + */ + function setHtml(){ + + //add html elements + g_objWrapper.addClass("ug-theme-grid"); + + //set panel html + if(g_objPanel) + g_objPanel.setHtml(); + + //set slider html + if(g_objSlider) + g_objSlider.setHtml(); + + } + + + /** + * init size of the thumbs panel + */ + function initThumbsPanel(){ + + //set size: + var objGallerySize = g_gallery.getSize(); + if(g_temp.isHorPos == true) + g_objPanel.setWidth(objGallerySize.width); + else + g_objPanel.setHeight(objGallerySize.height); + + g_objPanel.run(); + } + + + /** + * place thumbs panel according the settings + */ + function placeThumbsPanel(){ + + var objPanelElement = g_objPanel.getElement(); + + var isNeedToHide = isPanelNeedToHide(); + var isHidden = g_objPanel.isPanelClosed(); + + var showClosed = (isNeedToHide || isHidden); + + var pos = g_options.theme_panel_position; + + //place the panel closed or opened state. + if(showClosed){ + var hiddenDest = g_objPanel.getClosedPanelDest(); + var originalPos = g_functions.getElementRelativePos(objPanelElement, g_options.theme_panel_position); + g_objPanel.setClosedState(originalPos); + pos = hiddenDest; + }else{ + g_objPanel.setOpenedState(); + } + + if(g_temp.isHorPos == true) + g_functions.placeElement(objPanelElement, "left", pos); + else + g_functions.placeElement(objPanelElement, pos, "top"); + + } + + + /** + * place the slider according the thumbs panel size and position + */ + function placeSlider(){ + + //g_objPanel + var gallerySize = g_functions.getElementSize(g_objWrapper); + + var sliderWidth = gallerySize.width; + var sliderHeight = gallerySize.height; + var sliderTop = 0; + var sliderLeft = 0; + + if(g_objPanel){ + + var panelSize = g_objPanel.getSize(); + + switch(g_options.theme_panel_position){ + case "left": + sliderLeft = panelSize.right; + sliderWidth = gallerySize.width - panelSize.right; + break; + case "right": + sliderWidth = panelSize.left; + break; + case "top": + sliderHeight = gallerySize.height - panelSize.bottom; + sliderTop = panelSize.bottom; + break; + case "bottom": + sliderHeight = panelSize.top; + break; + } + + } + + g_objSlider.setSize(sliderWidth, sliderHeight); + g_objSlider.setPosition(sliderLeft, sliderTop); + } + + + /** + * check if need to hide the panel according the options. + */ + function isPanelNeedToHide(){ + + if(!g_options.theme_hide_panel_under_width) + return(false); + + var windowWidth = jQuery(window).width(); + var hidePanelValue = g_options.theme_hide_panel_under_width; + + if(windowWidth <= hidePanelValue) + return(true); + + return(false); + } + + /** + * check if need to hide or show panel according the theme_hide_panel_under_width option + */ + function checkHidePanel(){ + + //check hide panel: + if(!g_options.theme_hide_panel_under_width) + return(false); + + var needToHide = isPanelNeedToHide(); + + if(needToHide == true){ + g_objPanel.closePanel(true); + g_temp.isMobileModeWasEnabled = true; + } + else{ + if(g_temp.isMobileModeWasEnabled == true){ + g_objPanel.openPanel(true); + g_temp.isMobileModeWasEnabled = false; + } + } + } + + + /** + * on gallery size change - resize the theme. + */ + function onSizeChange(){ + + initAndPlaceElements(); + + if(g_objPanel) + checkHidePanel(); + + } + + + /** + * on panel move event + */ + function onPanelMove(){ + placeSlider(); + } + + + /** + * before items request: hide items, show preloader + */ + function onBeforeReqestItems(){ + + g_gallery.showDisabledOverlay(); + + } + + + /** + * init buttons functionality and events + */ + function initEvents(){ + + g_objGallery.on(g_gallery.events.SIZE_CHANGE,onSizeChange); + g_objGallery.on(g_gallery.events.GALLERY_BEFORE_REQUEST_ITEMS, onBeforeReqestItems); + + if(g_objPanel){ + jQuery(g_objPanel).on(g_objPanel.events.FINISH_MOVE, onPanelMove); + } + + } + + + /** + * destroy the theme events + */ + this.destroy = function(){ + + g_objGallery.off(g_gallery.events.SIZE_CHANGE,onSizeChange); + g_objGallery.off(g_gallery.events.GALLERY_BEFORE_REQUEST_ITEMS); + + if(g_objPanel) + jQuery(g_objPanel).off(g_objPanel.events.FINISH_MOVE); + + g_objPanel.destroy(); + g_objSlider.destroy(); + + } + + + /** + * run the theme setting + */ + this.run = function(){ + + runTheme(); + } + + + /** + * init + */ + this.init = function(gallery, customOptions){ + + initTheme(gallery, customOptions); + } + + +} + diff --git a/plugins/unitegallery/vendor/unitegallery/themes/slider/ug-theme-slider.js b/plugins/unitegallery/vendor/unitegallery/themes/slider/ug-theme-slider.js new file mode 100644 index 0000000000000000000000000000000000000000..1a8f4d0114f82ede43182d397f567be8bcf5eb3e --- /dev/null +++ b/plugins/unitegallery/vendor/unitegallery/themes/slider/ug-theme-slider.js @@ -0,0 +1,136 @@ + +if(typeof g_ugFunctions != "undefined") + g_ugFunctions.registerTheme("slider"); +else + jQuery(document).ready(function(){g_ugFunctions.registerTheme("slider")}); + + +/** + * Slider gallery theme + */ +function UGTheme_slider(){ + + var t = this; + var g_gallery = new UniteGalleryMain(), g_objGallery, g_objects, g_objWrapper; + var g_objThumbs, g_objSlider; + var g_functions = new UGFunctions(); + + + //theme options + var g_options = { + + }; + + + var g_defaults = { + gallery_autoplay: true, + + slider_scale_mode:"fill", + slider_controls_always_on:true, + slider_enable_text_panel:false, + slider_controls_appear_ontap: true, //appear controls on tap event on touch devices + slider_enable_bullets: true, + slider_enable_arrows: true, + slider_enable_play_button: false, + slider_enable_fullscreen_button:false, + slider_enable_zoom_panel: false, + slider_vertical_scroll_ondrag: true + }; + + + /** + * init + */ + this.init = function(gallery, customOptions){ + + g_gallery = gallery; + + g_options = jQuery.extend(g_options, g_defaults); + g_options = jQuery.extend(g_options, customOptions); + + //set gallery options + g_gallery.setOptions(g_options); + + g_gallery.initSlider(g_options); + + g_objects = gallery.getObjects(); + + //get some objects for local use + g_objGallery = jQuery(gallery); + g_objWrapper = g_objects.g_objWrapper; + g_objSlider = g_objects.g_objSlider; + } + + + /** + * set gallery html elements + */ + function setHtml(){ + + //add html elements + g_objWrapper.addClass("ug-theme-slider"); + + //set slider html + if(g_objSlider) + g_objSlider.setHtml(); + } + + + /** + * place the slider according the thumbs panel size and position + */ + function placeSlider(){ + + var sliderHeight = g_gallery.getHeight(); + var sliderWidth = g_gallery.getWidth(); + + g_objSlider.setSize(sliderWidth, sliderHeight); + g_objSlider.setPosition(0, 0); + } + + + + /** + * on gallery size change - resize the theme. + */ + function onSizeChange(){ + + placeSlider(); + + } + + + /** + * init buttons functionality and events + */ + function initEvents(){ + + g_objGallery.on(g_gallery.events.SIZE_CHANGE,onSizeChange); + //g_objGallery.on(g_gallery.events.ITEM_CHANGE,onItemChange); + } + + /** + * init all the theme's elements and set them to their places + * according gallery's dimentions. + * this function should work on resize too. + */ + function initAndPlaceElements(){ + placeSlider(); + g_objSlider.run(); + + } + + /** + * run the theme setting + */ + this.run = function(){ + + setHtml(); + + initAndPlaceElements(); + + initEvents(); + } + + +} diff --git a/plugins/unitegallery/vendor/unitegallery/themes/tiles/ug-theme-tiles.js b/plugins/unitegallery/vendor/unitegallery/themes/tiles/ug-theme-tiles.js new file mode 100644 index 0000000000000000000000000000000000000000..0f49bc6e385bc9594d507932c9092074ae946fe1 --- /dev/null +++ b/plugins/unitegallery/vendor/unitegallery/themes/tiles/ug-theme-tiles.js @@ -0,0 +1,279 @@ + +if(typeof g_ugFunctions != "undefined") + g_ugFunctions.registerTheme("tiles"); +else + jQuery(document).ready(function(){g_ugFunctions.registerTheme("tiles")}); + + +/** + * Grid gallery theme + */ +function UGTheme_tiles(){ + + var t = this; + var g_gallery = new UniteGalleryMain(), g_objGallery, g_objects, g_objWrapper; + var g_tiles = new UGTiles(), g_lightbox = new UGLightbox(), g_objPreloader, g_objTilesWrapper; + var g_functions = new UGFunctions(), g_objTileDesign = new UGTileDesign(); + + var g_options = { + theme_enable_preloader: true, //enable preloader circle + theme_preloading_height: 200, //the height of the preloading div, it show before the gallery + theme_preloader_vertpos: 100, //the vertical position of the preloader + theme_gallery_padding: 0, //the horizontal padding of the gallery from the sides + theme_appearance_order: "normal", //normal, shuffle, keep - the appearance order of the tiles. applying only to columns type + theme_auto_open:null //auto open lightbox at start + }; + + var g_defaults = { + gallery_width: "100%" + }; + + //temp variables + var g_temp = { + showPreloader: false + }; + + + /** + * Init the theme + */ + function initTheme(gallery, customOptions){ + + g_gallery = gallery; + + //set default options + g_options = jQuery.extend(g_options, g_defaults); + + //set custom options + g_options = jQuery.extend(g_options, customOptions); + + modifyOptions(); + + //set gallery options + g_gallery.setOptions(g_options); + + g_gallery.setFreestyleMode(); + + g_objects = gallery.getObjects(); + + //get some objects for local use + g_objGallery = jQuery(gallery); + g_objWrapper = g_objects.g_objWrapper; + + //init objects + g_tiles.init(gallery, g_options); + g_lightbox.init(gallery, g_options); + + g_objTileDesign = g_tiles.getObjTileDesign(); + + + } + + + /** + * modift options + */ + function modifyOptions(){ + + if(g_options.theme_enable_preloader == true) + g_temp.showPreloader = true; + + switch(g_options.theme_appearance_order){ + default: + case "normal": + break; + case "shuffle": + g_gallery.shuffleItems(); + break; + case "keep": + g_options.tiles_keep_order = true; + break; + } + + } + + + /** + * set gallery html elements + */ + function setHtml(){ + + //add html elements + g_objWrapper.addClass("ug-theme-tiles"); + + g_objWrapper.append("<div class='ug-tiles-wrapper' style='position:relative'></div>"); + + //add preloader + if(g_temp.showPreloader == true){ + g_objWrapper.append("<div class='ug-tiles-preloader ug-preloader-trans'></div>"); + g_objPreloader = g_objWrapper.children(".ug-tiles-preloader"); + g_objPreloader.fadeTo(0,0); + } + + g_objTilesWrapper = g_objWrapper.children(".ug-tiles-wrapper"); + + //set padding + if(g_options.theme_gallery_padding) + g_objWrapper.css({ + "padding-left":g_options.theme_gallery_padding+"px", + "padding-right":g_options.theme_gallery_padding+"px" + }); + + g_tiles.setHtml(g_objTilesWrapper); + g_lightbox.putHtml(); + } + + /** + * actually run the theme + */ + function actualRun(){ + + //set preloader mode + if(g_objPreloader){ + g_objPreloader.fadeTo(0,1); + g_objWrapper.height(g_options.theme_preloading_height); + g_functions.placeElement(g_objPreloader, "center", g_options.theme_preloader_vertpos); + } + + initEvents(); + + g_tiles.run(); + g_lightbox.run(); + + } + + + /** + * run the theme + */ + function runTheme(){ + + setHtml(); + + actualRun(); + + } + + + + /** + * init size of the thumbs panel + */ + function initThumbsPanel(){ + + //set size: + var objGallerySize = g_gallery.getSize(); + + if(g_temp.isVertical == false) + g_objPanel.setWidth(objGallerySize.width); + else + g_objPanel.setHeight(objGallerySize.height); + + g_objPanel.run(); + } + + + /** + * on tile click - open lightbox + */ + function onTileClick(data, objTile){ + + objTile = jQuery(objTile); + + var objItem = g_objTileDesign.getItemByTile(objTile); + var index = objItem.index; + + g_lightbox.open(index); + } + + + /** + * before items request: hide items, show preloader + */ + function onBeforeReqestItems(){ + + g_objTilesWrapper.hide(); + + if(g_objPreloader){ + g_objPreloader.show(); + + var preloaderSize = g_functions.getElementSize(g_objPreloader); + var galleryHeight = preloaderSize.bottom + 30; + + g_objWrapper.height(galleryHeight); + } + + } + + /** + * open lightbox at start if needed + */ + function onLightboxInit(){ + + if(g_options.theme_auto_open !== null){ + g_lightbox.open(g_options.theme_auto_open); + g_options.theme_auto_open = null; + } + + } + + + /** + * init buttons functionality and events + */ + function initEvents(){ + + //remove preloader on tiles first placed + if(g_objPreloader){ + jQuery(g_tiles).on(g_tiles.events.TILES_FIRST_PLACED, function(){ + g_objWrapper.height("auto"); + g_objPreloader.hide(); + }); + } + + jQuery(g_objTileDesign).on(g_objTileDesign.events.TILE_CLICK, onTileClick); + + g_objGallery.on(g_gallery.events.GALLERY_BEFORE_REQUEST_ITEMS, onBeforeReqestItems); + + jQuery(g_lightbox).on(g_lightbox.events.LIGHTBOX_INIT, onLightboxInit); + + } + + + /** + * destroy the theme + */ + this.destroy = function(){ + + jQuery(g_objTileDesign).off(g_objTileDesign.events.TILE_CLICK); + jQuery(g_tiles).off(g_tiles.events.TILES_FIRST_PLACED); + + g_objGallery.off(g_gallery.events.GALLERY_BEFORE_REQUEST_ITEMS); + + jQuery(g_lightbox).off(g_lightbox.events.LIGHTBOX_INIT); + + g_tiles.destroy(); + g_lightbox.destroy(); + } + + + /** + * run the theme setting + */ + this.run = function(){ + + runTheme(); + } + + + /** + * init + */ + this.init = function(gallery, customOptions){ + + initTheme(gallery, customOptions); + + } + + +} diff --git a/plugins/unitegallery/vendor/unitegallery/themes/tilesgrid/ug-theme-tilesgrid.js b/plugins/unitegallery/vendor/unitegallery/themes/tilesgrid/ug-theme-tilesgrid.js new file mode 100644 index 0000000000000000000000000000000000000000..b1d87f0c89bd5a51e1cc285cdb8353ba584bf9e5 --- /dev/null +++ b/plugins/unitegallery/vendor/unitegallery/themes/tilesgrid/ug-theme-tilesgrid.js @@ -0,0 +1,452 @@ + +if(typeof g_ugFunctions != "undefined") + g_ugFunctions.registerTheme("tilesgrid"); +else + jQuery(document).ready(function(){g_ugFunctions.registerTheme("tilesgrid")}); + + +/** + * Fixed tiles theme + */ +function UGTheme_tilesgrid(){ + + var t = this; + var g_gallery = new UniteGalleryMain(), g_objGallery, g_objects, g_objWrapper; + var g_objThumbsGrid = new UGThumbsGrid(), g_lightbox = new UGLightbox(); + var g_functions = new UGFunctions(), g_objTileDesign = new UGTileDesign(); + var g_objBullets, g_objNavWrapper, g_objButtonLeft, g_objButtonRight, g_objPreloader; + + + var g_options = { + theme_gallery_padding: 0, //padding from sides of the gallery + theme_grid_align: "center", //grid align + theme_navigation_type: "bullets", //bullets, arrows + theme_arrows_margin_top: 20, //the space between arrows and grid + theme_space_between_arrows: 5, //horizontal space between arrows + theme_bullets_margin_top: 40, //the space + theme_navigation_align: "center", //center, left, right - horizontal align of the navigation + theme_navigation_offset_hor: 0, //horizontal offset of the navigation, according the align + theme_bullets_color: "gray", //gray, blue, brown, green, red - color of the bullets + theme_auto_open:null //auto open lightbox at start + }; + + var g_defaults = { + gallery_width: "100%", + + tile_width: 180, + tile_height: 150, + + grid_num_rows: 3, + grid_padding: 10, + + tile_enable_border: true, + tile_enable_shadow: true, + + tile_border_radius: 2, + + grid_space_between_cols: 20, + grid_space_between_rows: 20, + grid_space_between_mobile: 15, + + bullets_space_between: 12, + grid_vertical_scroll_ondrag: true + }; + + + //temp variables + var g_temp = { + handle: null //interval handle + }; + + + /** + * Init the theme + */ + function initTheme(gallery, customOptions){ + + g_gallery = gallery; + + //set default options + g_options = jQuery.extend(g_options, g_defaults); + + //set custom options + g_options = jQuery.extend(g_options, customOptions); + + modifyOptions(); + + //set gallery options + g_gallery.setOptions(g_options); + + g_gallery.setFreestyleMode(); + + g_objects = gallery.getObjects(); + + //get some objects for local use + g_objGallery = jQuery(gallery); + g_objWrapper = g_objects.g_objWrapper; + + //init objects + g_lightbox.init(gallery, g_options); + + g_objThumbsGrid.init(gallery, g_options, true); + + g_objTileDesign = g_objThumbsGrid.getObjTileDesign(); + } + + + /** + * modify options + */ + function modifyOptions(){ + + if(!g_options.grid_num_rows) + g_options.grid_num_rows = 9999; + + g_options.bullets_addclass = "ug-bullets-"+g_options.theme_bullets_color; + + } + + + /** + * get gallery width available for the grid + */ + function getGalleryWidth(){ + var galleryWidth = g_gallery.getSize().width; + galleryWidth -= g_options.theme_gallery_padding * 2; + + return(galleryWidth); + } + + + /** + * set gallery html elements + */ + function setHtml(){ + + //init bullets (only after panes size estimation) + if(g_options.theme_navigation_type == "bullets"){ + + g_objBullets = new UGBullets(); + + var galleryWidth = getGalleryWidth(); + + var numPanes = g_objThumbsGrid.getNumPanesEstimationByWidth(galleryWidth); + + var objOptions = g_gallery.getOptions(); + g_objBullets.init(g_gallery, objOptions, numPanes); + + } + + //add html elements + g_objWrapper.addClass("ug-theme-tilesfixed"); + + g_objThumbsGrid.setHtml(); + + if(g_objBullets) + g_objBullets.appendHTML(g_objWrapper); + + if(g_options.theme_navigation_type == "arrows"){ + var htmlAdd = "<div class='ug-tile-navigation-wrapper' style='position:absolute'>"; + htmlAdd += "<div class='ug-button-tile-navigation ug-button-tile-left'></div>"; + htmlAdd += "<div class='ug-button-tile-navigation ug-button-tile-right'></div>"; + htmlAdd += "</div>"; + g_objWrapper.append(htmlAdd); + + g_objNavWrapper = g_objWrapper.children(".ug-tile-navigation-wrapper"); + + g_objButtonLeft = g_objNavWrapper.children(".ug-button-tile-left"); + g_objButtonRight = g_objNavWrapper.children(".ug-button-tile-right"); + + g_objButtonLeft.css("margin-right",g_options.theme_space_between_arrows+"px"); + } + + g_lightbox.putHtml(); + + //add preloader + g_objWrapper.append("<div class='ug-tiles-preloader ug-preloader-trans'></div>"); + g_objPreloader = g_objWrapper.children(".ug-tiles-preloader"); + g_objPreloader.fadeTo(0,0); + + } + + + /** + * get height estimation by width + */ + function getHeightEstimation(galleryWidth){ + + //put the placeholder before run. check the width + var gridHeight = g_objThumbsGrid.getHeightEstimationByWidth(galleryWidth); + var numPanes = g_objThumbsGrid.getNumPanesEstimationByWidth(galleryWidth); + + //add navigation height + if(numPanes > 1){ + if(g_options.theme_navigation_type == "arrows"){ + gridHeight += g_options.theme_arrows_margin_top; + gridHeight += 30; //arrows size + } + else{ + gridHeight += g_options.theme_bullets_margin_top; + gridHeight += 15; //bullets size + } + + } + + return(gridHeight); + } + + + /** + * actually run the theme + */ + function actualRun(){ + + //get gallery width, set estimation height and get width again. + var galleryWidth = getGalleryWidth(); + var totalHeight = getHeightEstimation(galleryWidth); + g_objWrapper.height(totalHeight); + var galleryWidth = getGalleryWidth(); + + initEvents(); + + //place preloader + g_functions.placeElement(g_objPreloader, g_options.theme_grid_align, 50); + + g_objThumbsGrid.setWidth(galleryWidth); + + g_objThumbsGrid.run(); + + g_lightbox.run(); + + updateBullets(); + + positionElements(); + + + } + + + /** + * run the theme + */ + function runTheme(){ + + setHtml(); + actualRun(); + + } + + + /** + * position elements + */ + function positionElements(){ + + var objGallerySize = g_gallery.getSize(); + var g_objGridSize = g_objThumbsGrid.getSize(); + + var gridElement = g_objThumbsGrid.getElement(); + g_functions.placeElement(gridElement, g_options.theme_grid_align, 0); + + g_objGridSize = g_objThumbsGrid.getSize(); + + var galleryHeight = g_objGridSize.height; + + var numPanes = g_objThumbsGrid.getNumPanes(); + + if(numPanes > 1){ + + //position bullets + if(g_objBullets){ + + g_objBullets.getElement().show(); + + var bulletsElement = g_objBullets.getElement(); + var bulletsWidth = g_objBullets.getBulletsWidth(); + + //get bullets offset x (relative to the grid) + var bulletsX = g_objGridSize.left + g_functions.getElementRelativePos(bulletsWidth, g_options.theme_navigation_align, g_options.theme_navigation_offset_hor, gridElement); + + g_functions.placeElement(bulletsElement, bulletsX, galleryHeight + g_options.theme_bullets_margin_top); + + var sizeBullets = g_functions.getElementSize(bulletsElement); + galleryHeight = sizeBullets.bottom; + + } + + //position buttons + if(g_objNavWrapper){ + + g_objNavWrapper.show(); + + var navX = g_objGridSize.left + g_functions.getElementRelativePos(g_objNavWrapper, g_options.theme_navigation_align, g_options.theme_navigation_offset_hor, gridElement); + + g_functions.placeElement(g_objNavWrapper, navX, galleryHeight + g_options.theme_arrows_margin_top); + + var sizeNav = g_functions.getElementSize(g_objNavWrapper); + + galleryHeight = sizeNav.bottom; + } + + }else{ //if only one pame, hide the navigation + + if(g_objNavWrapper) + g_objNavWrapper.hide(); + + if(g_objBullets) + g_objBullets.getElement().hide(); + } + + g_objWrapper.height(galleryHeight); + } + + + /** + * on tile click - open lightbox + */ + function onTileClick(data, objTile){ + + objTile = jQuery(objTile); + var index = objTile.index(); + + g_lightbox.open(index); + } + + + /** + * update the bullets + */ + function updateBullets(){ + + //update bullets + if(!g_objBullets) + return(false); + + numPanes = g_objThumbsGrid.getNumPanes(); + g_objBullets.updateNumBullets(numPanes); + g_objBullets.setActive(0); + } + + + /** + * on gallery size change - resize the theme. + */ + function onSizeChange(){ + + var galleryWidth = getGalleryWidth(); + + g_objThumbsGrid.setWidth(galleryWidth); + g_objThumbsGrid.run(); + + updateBullets(); + + setTimeout(positionElements, 500); + + } + + + /** + * on tile click - open lightbox + */ + function onTileClick(data, objTile){ + + objTile = jQuery(objTile); + + var objItem = g_objTileDesign.getItemByTile(objTile); + var index = objItem.index; + + g_lightbox.open(index); + } + + /** + * before items request: hide items, show preloader + */ + function onBeforeReqestItems(){ + + if(g_objNavWrapper) + g_objNavWrapper.hide(); + + if(g_objThumbsGrid) + g_objThumbsGrid.getElement().hide(); + + //show preloader: + g_objPreloader.fadeTo(0,1); + } + + + /** + * open lightbox at start if needed + */ + function onLightboxInit(){ + + if(g_options.theme_auto_open !== null){ + g_lightbox.open(g_options.theme_auto_open); + g_options.theme_auto_open = null; + } + + } + + + /** + * init buttons functionality and events + */ + function initEvents(){ + + g_objGallery.on(g_gallery.events.SIZE_CHANGE, onSizeChange); + g_objGallery.on(g_gallery.events.GALLERY_BEFORE_REQUEST_ITEMS, onBeforeReqestItems); + + if(g_objBullets) + g_objThumbsGrid.attachBullets(g_objBullets); + + if(g_objNavWrapper){ + g_objThumbsGrid.attachNextPaneButton(g_objButtonRight); + g_objThumbsGrid.attachPrevPaneButton(g_objButtonLeft); + } + + jQuery(g_objTileDesign).on(g_objTileDesign.events.TILE_CLICK, onTileClick); + + jQuery(g_lightbox).on(g_lightbox.events.LIGHTBOX_INIT, onLightboxInit); + } + + + /** + * destroy the theme + */ + this.destroy = function(){ + + g_objGallery.off(g_gallery.events.SIZE_CHANGE); + g_objGallery.off(g_gallery.events.GALLERY_BEFORE_REQUEST_ITEMS); + + jQuery(g_objTileDesign).off(g_objTileDesign.events.TILE_CLICK); + + if(g_objBullets) + jQuery(g_objBullets).off(g_objBullets.events.BULLET_CLICK); + + jQuery(g_lightbox).off(g_lightbox.events.LIGHTBOX_INIT); + + g_objThumbsGrid.destroy(); + g_lightbox.destroy(); + + } + + + /** + * run the theme setting + */ + this.run = function(){ + + runTheme(); + } + + + /** + * init + */ + this.init = function(gallery, customOptions){ + + initTheme(gallery, customOptions); + + } + + +} diff --git a/plugins/unitegallery/vendor/unitegallery/themes/video/images/arrow_left.png b/plugins/unitegallery/vendor/unitegallery/themes/video/images/arrow_left.png new file mode 100644 index 0000000000000000000000000000000000000000..a960c77091e335868a12a52e628b94c11a54e7af Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/themes/video/images/arrow_left.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/themes/video/images/arrow_right.png b/plugins/unitegallery/vendor/unitegallery/themes/video/images/arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..3a5aa16d3bce4f8ab87fc7a585579820b93d8184 Binary files /dev/null and b/plugins/unitegallery/vendor/unitegallery/themes/video/images/arrow_right.png differ diff --git a/plugins/unitegallery/vendor/unitegallery/themes/video/skin-bottom-text.css b/plugins/unitegallery/vendor/unitegallery/themes/video/skin-bottom-text.css new file mode 100644 index 0000000000000000000000000000000000000000..f5452bcd5cdcfe49a5eb1deda318e8387ac87b15 --- /dev/null +++ b/plugins/unitegallery/vendor/unitegallery/themes/video/skin-bottom-text.css @@ -0,0 +1,60 @@ +@CHARSET "ISO-8859-1"; + + +/* ----- Strip Panel ------- */ + +.ug-videoskin-bottom-text .ug-strip-panel{ + background-color:#232323; +} + +/* ----- Thumb Wrapper ------- */ + +.ug-videoskin-bottom-text .ug-thumb-wrapper{ + background-color:#232323; + border-bottom:1px solid #393939; + width:200px; + height:80px; + cursor:pointer; + text-align:left; +} + + +.ug-videoskin-bottom-text .ug-thumb-wrapper:last-child{ + border-bottom:none; +} + +/* - thumb selected and over - */ + +.ug-videoskin-bottom-text .ug-thumb-wrapper.ug-thumb-over{ + cursor:pointer; + background-color:#1A1A1A; +} + +.ug-videoskin-bottom-text .ug-thumb-wrapper.ug-thumb-selected{ + cursor:default; + background-color:#176DB3; +} + +/* ----- Thumb Inner data ------- */ + +.ug-videoskin-bottom-text .ug-thumb-inner{ + padding-top:15px; + padding-left:15px; + padding-right:5px; +} + +.ug-videoskin-bottom-text .ug-thumb-title{ + color:white; + font-size:14px; + height:18px; + overflow:hidden; + line-height:normal; +} + +.ug-videoskin-bottom-text .ug-thumb-desc{ + color:#dddddd; + font-size:11px; + line-height:normal; + padding-top:5px; +} + diff --git a/plugins/unitegallery/vendor/unitegallery/themes/video/skin-right-no-thumb.css b/plugins/unitegallery/vendor/unitegallery/themes/video/skin-right-no-thumb.css new file mode 100644 index 0000000000000000000000000000000000000000..79cf25504794e7b8a7a262b8c9c1e70acb7e2dd7 --- /dev/null +++ b/plugins/unitegallery/vendor/unitegallery/themes/video/skin-right-no-thumb.css @@ -0,0 +1,169 @@ +@CHARSET "ISO-8859-1"; + + + +/* ----- Strip Panel ------- */ + +.ug-videoskin-right-no-thumb .ug-strip-panel{ + background-color:#232323; +} + +/* ----- Thumb Wrapper ------- */ + +.ug-videoskin-right-no-thumb .ug-thumb-wrapper{ + background-color:#232323; + border-bottom:1px solid #393939; + width:380px; + height:70px; + cursor:pointer; + text-align:left; +} + + +.ug-videoskin-right-no-thumb .ug-thumb-wrapper:last-child{ + border-bottom:none; +} + +/* - thumb selected and over - */ + +.ug-videoskin-right-no-thumb .ug-thumb-wrapper.ug-thumb-over{ + cursor:pointer; + background-color:#1A1A1A; +} + +.ug-videoskin-right-no-thumb .ug-thumb-wrapper.ug-thumb-selected{ + cursor:default; + background-color:#176DB3; +} + +/* ----- Thumb Inner data ------- */ + +.ug-videoskin-right-no-thumb .ug-thumb-inner{ + padding-top:15px; + padding-left:15px; + padding-right:5px; +} + +.ug-videoskin-right-no-thumb .ug-thumb-title{ + color:white; + font-size:14px; + height:18px; + overflow:hidden; + line-height:normal; +} + +.ug-videoskin-right-no-thumb .ug-thumb-desc{ + color:#dddddd; + font-size:11px; + line-height:normal; +} + +/* ----- Buttons Panel ------- */ + +.ug-videoskin-right-no-thumb .ug-video-buttons-panel{ + height:42px; + background-color:#000; + position:absolute; + display:none; +} + +.ug-videoskin-right-no-thumb .ug-button-prev-video{ + width:50%; + height:42px; + float:left; + background-image:url('images/arrow_left.png'); + cursor:pointer; + background-repeat:no-repeat; + background-position:center; + box-sizing:border-box; + border-right:1px solid #444; +} + +.ug-videoskin-right-no-thumb .ug-button-prev-video:hover, .ug-videoskin-right-no-thumb .ug-button-next-video:hover +{ + background-color:#444; +} + +.ug-videoskin-right-no-thumb .ug-button-next-video{ + width:50%; + height:42px; + float:right; + background-image:url('images/arrow_right.png'); + cursor:pointer; + background-repeat:no-repeat; + background-position:center; +} + + +/* ----- Under 960 ------- */ +.ug-under-960.ug-videoskin-right-no-thumb .ug-thumb-wrapper +{ + width:320px; +} + +.ug-under-960.ug-videoskin-right-no-thumb .ug-thumb-title { + width: 289px; + height:18px; + font-size:14px; +} +.ug-under-960.ug-videoskin-right-no-thumb .ug-thumb-desc +{ + width:289px; + padding-top:0px; +} + +.ug-under-960.ug-videoskin-right-no-thumb .ug-video-buttons-panel{ + display:none; +} + +/* ----- Under 780 ------- */ + +.ug-under-780.ug-videoskin-right-no-thumb .ug-thumb-wrapper +{ + width:240px; +} + +.ug-under-780.ug-videoskin-right-no-thumb .ug-thumb-title { + width: 167px; + height:18px; + font-size:14px; +} + +.ug-under-780.ug-videoskin-right-no-thumb .ug-thumb-desc +{ + width:167px; + padding-top:0px; +} + +.ug-under-780.ug-videoskin-right-no-thumb .ug-video-buttons-panel{ + display:none; +} + + +/* ----- Under 480 ------- */ + +.ug-under-480.ug-videoskin-right-no-thumb .ug-thumb-wrapper +{ + width:0px; +} + +.ug-under-480.ug-videoskin-right-no-thumb .ug-thumb-title { + display:none; +} + +.ug-under-480.ug-videoskin-right-no-thumb .ug-thumb-desc +{ + display:none; +} + +.ug-under-480.ug-videoskin-right-no-thumb .ug-thumb-inner { + padding-left: 8px; + padding-right: 5px; + padding-top: 12px; +} + + +.ug-under-480.ug-videoskin-right-no-thumb .ug-video-buttons-panel{ + display:block; +} + diff --git a/plugins/unitegallery/vendor/unitegallery/themes/video/skin-right-thumb.css b/plugins/unitegallery/vendor/unitegallery/themes/video/skin-right-thumb.css new file mode 100644 index 0000000000000000000000000000000000000000..ded22b17c4c65eda73ce5a8a78f0f25388adaaff --- /dev/null +++ b/plugins/unitegallery/vendor/unitegallery/themes/video/skin-right-thumb.css @@ -0,0 +1,150 @@ +@CHARSET "ISO-8859-1"; + +/* ----- Strip Panel ------- */ + +.ug-videoskin-right-thumb .ug-strip-panel{ + background-color:#232323; +} + +/* ----- Thumb Wrapper ------- */ + +.ug-videoskin-right-thumb .ug-thumb-wrapper{ + background-color:#232323; + border-bottom:1px solid #393939; + width:420px; + height:61px; + cursor:pointer; + text-align:left; +} + +.ug-videoskin-right-thumb .ug-thumb-wrapper:last-child{ + border-bottom:none; +} + +/* - thumb selected and over - */ + +.ug-videoskin-right-thumb .ug-thumb-wrapper.ug-thumb-over{ + cursor:pointer; + background-color:#1A1A1A; +} + +.ug-videoskin-right-thumb .ug-thumb-wrapper.ug-thumb-selected{ + cursor:default; + background-color:#525252; +} + +/* ----- Thumb Inner data ------- */ + + +.ug-videoskin-right-thumb .ug-thumb-icon{ + width:72px; + height:40px; + float:left; + background-position:center center; + background-size:cover; +} + +.ug-videoskin-right-thumb .ug-thumb-selected .ug-thumb-icon{ + border:2px solid red; + box-sizing: border-box; +} + +.ug-videoskin-right-thumb .ug-thumb-right{ + float:left; + padding-left:15px; +} + + +.ug-videoskin-right-thumb .ug-thumb-inner{ + padding-top:12px; + padding-left:13px; + padding-right:5px; +} + +.ug-videoskin-right-thumb .ug-thumb-title{ + color:white; + font-size:16px; + overflow:hidden; + width:300px; + height:20px; + line-height:normal; +} + +.ug-videoskin-right-thumb .ug-thumb-desc{ + color:#999999; + font-size:11px; + width:300px; + line-height:normal; +} + +/* ----- Under 960 ------- */ +.ug-under-960.ug-videoskin-right-thumb .ug-thumb-wrapper +{ + width:320px; +} + +.ug-under-960.ug-videoskin-right-thumb .ug-thumb-title { + width: 206px; + height:18px; + font-size:14px; +} +.ug-under-960.ug-videoskin-right-thumb .ug-thumb-desc +{ + width:167px; + padding-top:0px; + line-height:normal; +} + + +/* ----- Under 780 ------- */ + +.ug-under-780.ug-videoskin-right-thumb .ug-thumb-wrapper +{ + width:240px; +} + +.ug-under-780.ug-videoskin-right-thumb .ug-thumb-icon +{ + width:40px; +} + +.ug-under-780.ug-videoskin-right-thumb .ug-thumb-title { + width: 167px; + height:18px; + font-size:14px; +} + +.ug-under-780.ug-videoskin-right-thumb .ug-thumb-desc +{ + width:167px; + padding-top:0px; + line-height:normal; +} + + +/* ----- Under 480 ------- */ + +.ug-under-480.ug-videoskin-right-thumb .ug-thumb-wrapper +{ + width:56px; +} + +.ug-under-480.ug-videoskin-right-thumb .ug-thumb-title { + display:none; +} + +.ug-under-480.ug-videoskin-right-thumb .ug-thumb-desc +{ + display:none; +} + +.ug-under-480.ug-videoskin-right-thumb .ug-thumb-inner { + padding-left: 8px; + padding-right: 5px; + padding-top: 12px; +} + +.ug-under-480.ug-videoskin-right-thumb .ug-thumb-icon +{ + width:40px; +} \ No newline at end of file diff --git a/plugins/unitegallery/vendor/unitegallery/themes/video/skin-right-title-only.css b/plugins/unitegallery/vendor/unitegallery/themes/video/skin-right-title-only.css new file mode 100644 index 0000000000000000000000000000000000000000..f2d13b35de3918c2a5ff04cc378fd263a18c8a58 --- /dev/null +++ b/plugins/unitegallery/vendor/unitegallery/themes/video/skin-right-title-only.css @@ -0,0 +1,157 @@ +@CHARSET "ISO-8859-1"; + +/* ----- Strip Panel ------- */ + +.ug-videoskin-right-title-only .ug-strip-panel{ + background-color:#232323; +} + +/* ----- Thumb Wrapper ------- */ + +.ug-videoskin-right-title-only .ug-thumb-wrapper{ + background-color:#232323; + border-bottom:1px solid #393939; + width:360px; + height:60px; + cursor:pointer; + text-align:left; +} + + +.ug-videoskin-right-title-only .ug-thumb-wrapper:last-child{ + border-bottom:none; +} + +/* - thumb selected and over - */ + +.ug-videoskin-right-title-only .ug-thumb-wrapper.ug-thumb-over{ + cursor:pointer; + background-color:#1A1A1A; +} + +.ug-videoskin-right-title-only .ug-thumb-wrapper.ug-thumb-selected{ + cursor:default; + background-color:#176DB3; +} + +/* ----- Thumb Inner data ------- */ + +.ug-videoskin-right-title-only .ug-thumb-inner{ + padding-top:18px; + padding-left:20px; + padding-right:10px; +} + +.ug-videoskin-right-title-only .ug-thumb-title{ + color:white; + font-size:14px; + line-height:normal; +} + + +/* ----- Buttons Panel ------- */ + +.ug-videoskin-right-title-only .ug-video-buttons-panel{ + height:42px; + background-color:#000; + position:absolute; + display:none; +} + +.ug-videoskin-right-title-only .ug-button-prev-video{ + width:50%; + height:42px; + float:left; + background-image:url('images/arrow_left.png'); + cursor:pointer; + background-repeat:no-repeat; + background-position:center; + box-sizing:border-box; + border-right:1px solid #444; +} + +.ug-videoskin-right-title-only .ug-button-prev-video:hover, .ug-videoskin-right-title-only .ug-button-next-video:hover +{ + background-color:#444; +} + +.ug-videoskin-right-title-only .ug-button-next-video{ + width:50%; + height:42px; + float:right; + background-image:url('images/arrow_right.png'); + cursor:pointer; + background-repeat:no-repeat; + background-position:center; +} + + + +/* ----- Under 960 ------- */ +.ug-under-960.ug-videoskin-right-title-only .ug-thumb-wrapper +{ + width:300px; +} + +.ug-under-960.ug-videoskin-right-title-only .ug-thumb-title { + width: 289px; + height:18px; + font-size:14px; + line-height:normal; +} + + +.ug-under-960.ug-videoskin-right-title-only .ug-video-buttons-panel{ + display:none; +} + +/* ----- Under 780 ------- */ + +.ug-under-780.ug-videoskin-right-title-only .ug-thumb-wrapper +{ + width:240px; +} + +.ug-under-780.ug-videoskin-right-title-only .ug-thumb-icon +{ + width:40px; +} + +.ug-under-780.ug-videoskin-right-title-only .ug-thumb-title { + width: 167px; + height:18px; + font-size:14px; +} + + +.ug-under-780.ug-videoskin-right-title-only .ug-video-buttons-panel{ + display:none; +} + + +/* ----- Under 480 ------- */ + +.ug-under-480.ug-videoskin-right-title-only .ug-thumb-wrapper +{ + width:0px; +} + +.ug-under-480.ug-videoskin-right-title-only .ug-thumb-title { + display:none; +} + + +.ug-under-480.ug-videoskin-right-title-only .ug-thumb-inner { + padding-left: 8px; + padding-right: 5px; + padding-top: 12px; +} + +.ug-under-480.ug-videoskin-right-title-only .ug-thumb-icon +{ + width:40px; +} + +.ug-under-480.ug-videoskin-right-title-only .ug-video-buttons-panel{ + display:block; +} diff --git a/plugins/unitegallery/vendor/unitegallery/themes/video/ug-theme-video.js b/plugins/unitegallery/vendor/unitegallery/themes/video/ug-theme-video.js new file mode 100644 index 0000000000000000000000000000000000000000..9ad5e1e635ae0963962117deab9b4617a9ef3df9 --- /dev/null +++ b/plugins/unitegallery/vendor/unitegallery/themes/video/ug-theme-video.js @@ -0,0 +1,478 @@ + +if(typeof g_ugFunctions != "undefined") + g_ugFunctions.registerTheme("video"); +else + jQuery(document).ready(function(){g_ugFunctions.registerTheme("video")}); + + +/** + * Video gallery theme + * themes: right-thumb | right-title-only | right-no-thumb | bottom-text + */ +function UGTheme_video(){ + + var t = this; + var g_gallery = new UniteGalleryMain(), g_objGallery, g_objects, g_objWrapper; + var g_objPlayer = new UGVideoPlayer(), g_objButtonsPanel, g_buttonPrev, g_buttonNext; + var g_functions = new UGFunctions(); + var g_objPanel = new UGStripPanel(); + + + //theme options + var g_options = { + theme_skin: "right-thumb", //right-thumb | right-title-only | right-no-thumb | bottom-thumb + theme_autoplay: false, //autoplay videos at start. true / false. Don't working on mobiles. + theme_next_video_onend:false, //go to next video automatically when the video ends + theme_disable_panel_timeout: 2500 //How much time the right panel will be disabled. in ms + }; + + //global defaults + var g_defaults = { + gallery_width:1100, + slider_controls_always_on:true, + strippanel_enable_handle:false, + strippanel_enable_buttons: false, + strip_space_between_thumbs: 0, + strippanel_padding_top: 0, + strippanel_padding_bottom: 0, + strippanel_padding_left: 0, + strippanel_padding_right: 0, + strippanel_vertical_type:true + }; + + + //temp variables + var g_temp = { + panel_position:"right", + isVertical: true, + putButtonsPanel: false, + isFirstChange: true, + playerRatio:null, + }; + + + /** + * Init the theme + */ + function initTheme(gallery, customOptions){ + + g_gallery = gallery; + + g_options = jQuery.extend(g_options, g_defaults); + + g_options = jQuery.extend(g_options, customOptions); + g_options.strippanel_vertical_type = true; + + modifyOptions(); + + //set gallery options + g_gallery.setOptions(g_options); + if(g_temp.isVertical == false) + g_gallery.setFuncCustomHeight(getHeightByWidthOnResize); + + //set panel options + g_objPanel.init(gallery, g_options); + g_objPanel.setOrientation(g_temp.panel_position); + + g_objPanel.setCustomThumbs(setHtmlThumb); + + g_objPanel.setDisabledAtStart(g_options.theme_disable_panel_timeout); + + var galleryID = g_gallery.getGalleryID(); + + //set player options + g_objPlayer.init(g_options, true, galleryID); + + g_objects = gallery.getObjects(); + g_objGallery = jQuery(gallery); + g_objWrapper = g_objects.g_objWrapper; + + } + + + /** + * modify options + */ + function modifyOptions(){ + + switch(g_options.theme_skin){ + case "right-no-thumb": + case "right-title-only": + g_temp.putButtonsPanel = true; + break; + case "bottom-text": + g_temp.panel_position = "bottom"; + break; + } + + //set isVertical + switch(g_temp.panel_position){ + case "top": + case "bottom": + g_temp.isVertical = false; + g_options.strippanel_vertical_type = false; + break; + } + + } + + + /** + * init all the theme's elements and set them to their places + * according gallery's dimentions. + * this function should work on resize too. + */ + function initAndPlaceElements(){ + + //place objects: + initThumbsPanel(); + placeThumbsPanel(); + placePlayer(); + + if(g_objButtonsPanel) + resizeAndPlaceButtonsPanel(); + + } + + + /** + * run the theme + */ + function runTheme(){ + + setHtml(); + + initAndPlaceElements(); + + initEvents(); + + g_objPlayer.show(); + + } + + + + + /** + * set gallery html elements + */ + function setHtml(){ + + //add html elements + g_objWrapper.addClass("ug-theme-video ug-videoskin-"+g_options.theme_skin); + + g_objPanel.setHtml(); + g_objPlayer.setHtml(g_objWrapper); + + //add buttons panel + if(g_temp.putButtonsPanel == true){ + + var html = "<div class='ug-video-buttons-panel'>"; + html += "<div href='javascript:void(0)' class='ug-button-prev-video'></div>" + html += "<div href='javascript:void(0)' class='ug-button-next-video'></div>" + html += "</div>" + + g_objWrapper.append(html); + + g_objButtonsPanel = g_objWrapper.children(".ug-video-buttons-panel"); + g_buttonPrev = g_objButtonsPanel.children(".ug-button-prev-video"); + g_buttonNext = g_objButtonsPanel.children(".ug-button-next-video"); + + } + + } + + + + /** + * custom function foe drawing thumb + */ + function setHtmlThumb(objThumbWrapper, objItem){ + + var showDesc = true; + var showIcon = false; + + switch(g_options.theme_skin){ + case "right-title-only": + showDesc = false; + break; + case "right-thumb": + showIcon = true; + break; + } + + var html = "<div class='ug-thumb-inner'>"; + + if(showIcon == true){ + html += "<div class='ug-thumb-icon' style='background-image:url(\""+objItem.urlThumb+"\")'></div>"; + html += "<div class='ug-thumb-right'>"; + } + + html += "<div class='ug-thumb-title'>" + objItem.title + "</div>"; + + if(showDesc == true) + html += "<div class='ug-thumb-desc'>" + objItem.description + "</div>"; + + if(showIcon == true) + html += "</div>"; //thumb right end + + html += "</div>"; + + objThumbWrapper.html(html); + + } + + + /** + * init size of the thumbs panel + */ + function initThumbsPanel(){ + + //set size: + var objGallerySize = g_gallery.getSize(); + + if(g_temp.isVertical == false) + g_objPanel.setWidth(objGallerySize.width); + else + g_objPanel.setHeight(objGallerySize.height); + + g_objPanel.run(); + + } + + + /** + * place thumbs panel according the settings + */ + function placeThumbsPanel(){ + + var objPanelElement = g_objPanel.getElement(); + + switch(g_temp.panel_position){ + default: + case "right": + g_functions.placeElement(objPanelElement, "right", 0); + break; + case "bottom": + g_functions.placeElement(objPanelElement, 0, "bottom"); + break; + } + + } + + + + /** + * place the player according the thumbs panel size and position + */ + function placePlayer(){ + + var gallerySize = g_functions.getElementSize(g_objWrapper); + var panelSize = g_objPanel.getSize(); + + var playerWidth = gallerySize.width; + var playerHeight = gallerySize.height; + var playerTop = 0; + var playerLeft = 0; + + if(g_objPanel){ + + var panelSize = g_objPanel.getSize(); + + switch(g_temp.panel_position){ + case "left": + playerLeft = panelSize.right; + playerWidth = gallerySize.width - panelSize.right; + break; + case "right": + playerWidth = panelSize.left; + break; + case "top": + playerHeight = gallerySize.height - panelSize.bottom; + playerTop = panelSize.bottom; + break; + case "bottom": + playerHeight = panelSize.top; + break; + } + + } + + + if(g_objButtonsPanel && g_objButtonsPanel.is(":visible")){ + var buttonsPanelSize = g_functions.getElementSize(g_objButtonsPanel); + var buttonsHeight = buttonsPanelSize.height; + playerHeight -= buttonsHeight; + } + + //set size + g_objPlayer.setSize(playerWidth, playerHeight); + + //place + var objPlayer = g_objPlayer.getObject(); + g_functions.placeElement(objPlayer, playerLeft, playerTop); + + //remember player ratio + if(g_temp.playerRatio == null) + g_temp.playerRatio = playerHeight / playerWidth; + + } + + + /** + * resize and place buttons panel + */ + function resizeAndPlaceButtonsPanel(){ + + if(!g_objButtonsPanel) + return(false); + + if(g_objButtonsPanel.is(":visible") == false) + return(false); + + var playerObj = g_objPlayer.getObject(); + var playerSize = g_functions.getElementSize(playerObj); + + g_objButtonsPanel.width(playerSize.width); + + //position to the bottom of the gallery + g_functions.placeElement(g_objButtonsPanel, 0, "bottom"); + } + + + /** + * get height by width and raetio on resize + */ + function getHeightByWidthOnResize(objSize){ + + initThumbsPanel(); + var objPanelSize = g_objPanel.getSize(); + var thumbsHeight = objPanelSize.height; + var newWidth = objSize.width; + + var playerHeight = g_temp.playerRatio * newWidth; + var newHeight = playerHeight + thumbsHeight; + + return(newHeight); + } + + + /** + * on gallery size change - resize the theme. + */ + function onSizeChange(){ + + initAndPlaceElements(); + } + + + /** + * on item change function + */ + function onItemChange(){ + + var isAutoplay = g_options.theme_autoplay; + + var selectedItem = g_gallery.getSelectedItem(); + + switch(selectedItem.type){ + case "youtube": + g_objPlayer.playYoutube(selectedItem.videoid, isAutoplay); + break; + case "vimeo": + g_objPlayer.playVimeo(selectedItem.videoid, isAutoplay); + break; + case "html5video": + g_objPlayer.playHtml5Video(selectedItem.videoogv, selectedItem.videowebm, selectedItem.videomp4, selectedItem.urlImage, isAutoplay); + break; + case "wistia": + g_objPlayer.playWistia(selectedItem.videoid, isAutoplay); + break; + case "soundcloud": + g_objPlayer.playSoundCloud(selectedItem.trackid, isAutoplay); + break; + } + + g_temp.isFirstChange = false; + + } + + + /** + * on video ended playing + */ + function onVideoEnded(){ + + if(g_options.theme_next_video_onend == true) + g_gallery.nextItem(); + + } + + + /** + * init buttons functionality and events + */ + function initEvents(){ + + g_objGallery.on(g_gallery.events.SIZE_CHANGE, onSizeChange); + g_objGallery.on(g_gallery.events.ITEM_CHANGE, onItemChange); + + g_objPlayer.initEvents(); + + if(g_options.theme_next_video_onend == true) + jQuery(g_objPlayer).on(g_objPlayer.events.VIDEO_ENDED, onVideoEnded); + + //init buttons panel events: + if(g_objButtonsPanel){ + + g_functions.setButtonMobileReady(g_buttonPrev); + g_gallery.setPrevButton(g_buttonPrev); + + g_functions.setButtonMobileReady(g_buttonNext); + g_gallery.setNextButton(g_buttonNext); + + } + + } + + /** + * destroy the theme + */ + this.destroy = function(){ + + g_objGallery.off(g_gallery.events.SIZE_CHANGE); + g_objGallery.off(g_gallery.events.ITEM_CHANGE); + g_objPlayer.destroy(); + if(g_objButtonsPanel){ + g_functions.destroyButton(g_buttonPrev); + g_functions.destroyButton(g_buttonNext); + } + + if(g_options.theme_next_video_onend == true) + jQuery(g_objPlayer).off(g_objPlayer.events.VIDEO_ENDED); + + if(g_objPanel) + g_objPanel.destroy(); + } + + + /** + * run the theme setting + */ + this.run = function(){ + + runTheme(); + } + + + /** + * init + */ + this.init = function(gallery, customOptions){ + + initTheme(gallery, customOptions); + } + + +} + diff --git a/scripts/update_lab_data.sh b/scripts/update_lab_data.sh index 03b86afa1c4ec3c30fb996c64105330c273d74ff..f07c8fe35900c7543d625ed7a31a4aaa6bce1244 100755 --- a/scripts/update_lab_data.sh +++ b/scripts/update_lab_data.sh @@ -27,9 +27,9 @@ else rm './file.json' # Create csv file CSV_FILE_PATH='../data/labs.csv' - CSV_KEYS=$(jq -r '[.[0] | keys[]] | join(",")' <<< "$LAB_DATA") + CSV_KEYS=$(jq -r '[.[] | keys[]] | unique | join(",")' <<< "$LAB_DATA") echo $CSV_KEYS > $CSV_FILE_PATH - jq -r '.[] | .categories |= join("|") | .tags |= join("|") | .ratings |= join("|") | [keys[] as $k | .[$k]] | map(. // "null") | @csv' $JSON_FILE_PATH >> $CSV_FILE_PATH + jq -r '.[] | .categories |= join("|") | .tags |= join("|") | .ratings |= join("|") | .custom |= tostring | [keys[] as $k | .[$k]] | map(. // "null") | @csv' $JSON_FILE_PATH >> $CSV_FILE_PATH # Extract data for each lab for creating MD files LAB_LIST=($(jq '[.[] | "placeholder:\(.title|split(" ")|join("@"));hidemenu:true;id:\(.id);name:\(.title|ascii_downcase|split(" ")|join("-")|split("---")|join("-"))"]' <<< "$LAB_DATA" | tr -d '[],"')) for lab in "${LAB_LIST[@]}" diff --git a/themes/landio/css/landio.css b/themes/landio/css/landio.css index eabd0c3d740c69147a2b7eeb197167ae0737c968..3ad8a696d7b784ed02f63d8d8cb0c9c1031e61ca 100644 --- a/themes/landio/css/landio.css +++ b/themes/landio/css/landio.css @@ -13299,11 +13299,6 @@ h3 { margin-bottom: 3rem; border: 0 none; } -@media (min-width: 768px) { - .section-about .card { - margin-bottom: 0; - } -} .section-about .card-body { padding: 0; } @@ -13360,6 +13355,34 @@ h3 { font-weight: 300; } +.ug-gallery-wrapper { + margin: auto; +} +.ug-gallery-wrapper .ug-slider-wrapper { + background-color: transparent; +} + +.ug-zoompanel { + display: none; +} + +.ug-arrow-right::before, .ug-arrow-left::before { + content: ""; + position: relative; + display: block; + background-color: rgba(223, 175, 42, 0.3); + border-radius: 15px; + top: -10px; + left: -10px; + width: calc(100% + 20px); + height: calc(100% + 20px); + z-index: -1; +} + +.ug-item-wrapper img { + border-radius: 5px; +} + figure { position: relative; } diff --git a/themes/landio/css/landio.css.map b/themes/landio/css/landio.css.map index e5317c5c56f3db8e32acb1d1683ecb350bd21c58..311d90560a2bc67e78d3982f3b501f65eb19a4b7 100644 --- a/themes/landio/css/landio.css.map +++ b/themes/landio/css/landio.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../scss/landio.scss","../scss/_fonts.scss","../scss/_icomoon.scss","../scss/bootstrap/_print.scss","../scss/bootstrap/_variables.scss","../scss/_landio-variables.scss","../scss/bootstrap/_reboot.scss","../scss/bootstrap/mixins/_hover.scss","../scss/bootstrap/_type.scss","../scss/bootstrap/mixins/_lists.scss","../scss/bootstrap/_images.scss","../scss/bootstrap/mixins/_image.scss","../scss/bootstrap/mixins/_border-radius.scss","../scss/bootstrap/_grid.scss","../scss/bootstrap/mixins/_grid.scss","../scss/bootstrap/mixins/_breakpoints.scss","../scss/bootstrap/mixins/_grid-framework.scss","../scss/bootstrap/_forms.scss","../scss/bootstrap/mixins/_transition.scss","../scss/bootstrap/mixins/_forms.scss","../scss/bootstrap/mixins/_gradients.scss","../scss/bootstrap/_buttons.scss","../scss/bootstrap/mixins/_buttons.scss","../scss/bootstrap/_transitions.scss","../scss/bootstrap/_dropdown.scss","../scss/bootstrap/mixins/_caret.scss","../scss/bootstrap/mixins/_nav-divider.scss","../scss/bootstrap/_custom-forms.scss","../scss/bootstrap/_nav.scss","../scss/bootstrap/_navbar.scss","../scss/bootstrap/_card.scss","../scss/bootstrap/_badge.scss","../scss/bootstrap/mixins/_badge.scss","../scss/bootstrap/_jumbotron.scss","../scss/bootstrap/_alert.scss","../scss/bootstrap/mixins/_alert.scss","../scss/bootstrap/_media.scss","../scss/bootstrap/_list-group.scss","../scss/bootstrap/mixins/_list-group.scss","../scss/bootstrap/_modal.scss","../scss/bootstrap/_carousel.scss","../scss/bootstrap/utilities/_align.scss","../scss/bootstrap/mixins/_background-variant.scss","../scss/bootstrap/utilities/_background.scss","../scss/bootstrap/utilities/_borders.scss","../scss/bootstrap/mixins/_clearfix.scss","../scss/bootstrap/utilities/_display.scss","../scss/bootstrap/utilities/_embed.scss","../scss/bootstrap/utilities/_flex.scss","../scss/bootstrap/utilities/_float.scss","../scss/bootstrap/mixins/_float.scss","../scss/bootstrap/utilities/_position.scss","../scss/bootstrap/utilities/_screenreaders.scss","../scss/bootstrap/mixins/_screen-reader.scss","../scss/bootstrap/utilities/_shadows.scss","../scss/bootstrap/utilities/_sizing.scss","../scss/bootstrap/utilities/_spacing.scss","../scss/bootstrap/utilities/_text.scss","../scss/bootstrap/mixins/_text-truncate.scss","../scss/bootstrap/mixins/_text-emphasis.scss","../scss/bootstrap/mixins/_text-hide.scss","../scss/bootstrap/utilities/_visibility.scss","../scss/bootstrap/mixins/_visibility.scss","../scss/plugins/_videojs-landio-skin.scss","../scss/plugins/_animate.scss"],"names":[],"mappings":";AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;ACAA;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAEF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;ACxPF;EACE;EACA;EACA;EAIA;EACA;EACA;;AAGF;AACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;;;AAGF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAIF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;ACn9CE;EACE;AAAA;AAAA;IAKE;IAEA;;EAIA;IACE;;EASJ;IACE;;EAcF;IACE;;EAEF;AAAA;IAEE;IACA;;EAQF;IACE;;EAGF;AAAA;IAEE;;EAGF;AAAA;AAAA;IAGE;IACA;;EAGF;AAAA;IAEE;;EAQF;IACE,MC61B8B;;ED31BhC;IACE;;EAEF;IACE;;EAIF;IACE;;EAEF;IACE;;EAGF;IACE;;EAEA;AAAA;IAEE;;EAKF;AAAA;IAEE;;EAIJ;IACE;;EAEA;AAAA;AAAA;AAAA;IAIE,cElHG;;EFsHP;IACE;IACA,cExHK;;;ACKX;AAAA;AAAA;EAGE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAKA;EACE;;AAMJ;EACE;;;AAWF;EACE;EACA,aDb4B;ECc5B,WDpD4B;ECqD5B,aDtD4B;ECuD5B,aDd4B;ECe5B,OD7CS;EC8CT;EACA,kBDnDS;;;AC2DX;EACE;;;AASF;EACE;EACA;EACA;;;AAaF;EACE;EACA,eF6K4B;;;AErK9B;EACE;EACA,eFkE0B;;;AExD5B;AAAA;EAEE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;AAAA;AAAA;EAGE;EACA;;;AAGF;AAAA;AAAA;AAAA;EAIE;;;AAGF;EACE,aDvG4B;;;AC0G9B;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAIF;AAAA;EAEE;;;AAIF;EACE;;;AAQF;AAAA;EAEE;EACA;EACA;EACA;;;AAGF;EAAM;;;AACN;EAAM;;;AAON;EACE,OF/B0B;EEgC1B,iBF/B0B;EEgC1B;EACA;;AC7LA;EDgME,OFnCwB;EEoCxB,iBDrKwB;;;AC+K5B;EACE;EACA;;ACzMA;ED4ME;EACA;;AAGF;EACE;;;AASJ;AAAA;AAAA;AAAA;EAIE,aFa4B;EEZ5B;;;AAGF;EAEE;EAEA;EAEA;EAGA;;;AAQF;EAEE;;;AAQF;EACE;EACA;;;AAGF;EAGE;EACA;;;AAQF;EACE;;;AAGF;EACE,aF8B4B;EE7B5B,gBF6B4B;EE5B5B,ODrRS;ECsRT;EACA;;;AAGF;EAGE;;;AAQF;EAEE;EACA,eF+FsC;;;AEzFxC;EACE;;;AAOF;EACE;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAMF;AAAA;AAAA;AAAA;EAIE;;;AAIF;AAAA;AAAA;AAAA;EAIE;EACA;;;AAGF;AAAA;EAEE;EACA;;;AAIF;AAAA;AAAA;AAAA;EASE;;;AAGF;EACE;EAEA;;;AAGF;EAME;EAEA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAIF;AAAA;EAEE;;;AAGF;EAKE;EACA;;;AAOF;AAAA;EAEE;;;AAQF;EACE;EACA;;;AAOF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAKF;EACE;;;AE3dF;AAAA;EAEE,eJyQ4B;EIxQ5B,aJyQ4B;EIxQ5B,aJyQ4B;EIxQ5B,aHuC4B;EGtC5B,OJyQ4B;;;AItQ9B;EAAU,WJ2PoB;;;AI1P9B;EAAU,WHgCoB;;;AG/B9B;EAAU,WJ2PoB;;;AI1P9B;EAAU,WJ2PoB;;;AI1P9B;EAAU,WJ2PoB;;;AI1P9B;EAAU,WH6BoB;;;AG3B9B;EACE,WH6B4B;EG5B5B,aJ2Q4B;;;AIvQ9B;EACE,WJ0P4B;EIzP5B,aJ8P4B;EI7P5B,aHmB4B;;;AGjB9B;EACE,WJsP4B;EIrP5B,aJ0P4B;EIzP5B,aHc4B;;;AGZ9B;EACE,WHY4B;EGX5B,aJsP4B;EIrP5B,aHS4B;;;AGP9B;EACE,WJ8O4B;EI7O5B,aJkP4B;EIjP5B,aHI4B;;;AGI9B;EACE,YJwEO;EIvEP,eJuEO;EItEP;EACA;;;AAQF;AAAA;EAEE,WJiO4B;EIhO5B,aH/D4B;;;AGkE9B;AAAA;EAEE,SJqO4B;EIpO5B,kBJ6O4B;;;AIrO9B;EC/EE;EACA;;;ADmFF;ECpFE;EACA;;;ADsFF;EACE;;AAEA;EACE,cJuN0B;;;AI7M9B;EACE;EACA;;;AAIF;EACE,eJeO;EIdP,WJyL4B;;;AItL9B;EACE;EACA;EACA,OHvGS;;AGyGT;EACE;;;AEnHJ;ECIE;EAGA;;;ADDF;EACE,SN61BkC;EM51BlC,kBLFS;EKGT;EEZE,eR+N0B;EOxN5B;EAGA;;;ADcF;EAEE;;;AAGF;EACE;EACA;;;AAGF;EACE,WN80BkC;EM70BlC,OLxBS;;;AQXT;ECAA;EACA;EACA;EACA;EACA;;ACmDE;EFvDF;ICYI,WVuLiB;;;AW5InB;EFvDF;ICYI,WVuLiB;;;AW5InB;EFvDF;ICYI,WVuLiB;;;AW5InB;EFvDF;ICYI,WVuLiB;;;;ASvLrB;ECZA;EACA;EACA;EACA;EACA;;;ADkBA;ECJA;EACA;EACA;EACA;;;ADOA;EACE;EACA;;AAEA;AAAA;EAEE;EACA;;;AGjCJ;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;EACA;;;AAmBE;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAIA;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEGI;EAAwB;;;AAExB;EAAuB;;;AAGrB;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AAOT;EFTR;;;AESQ;EFTR;;;AESQ;EFTR;;;AESQ;EFTR;;;AESQ;EFTR;;;AESQ;EFTR;;;AESQ;EFTR;;;AESQ;EFTR;;;AESQ;EFTR;;;AESQ;EFTR;;;AESQ;EFTR;;;ACUE;EC7BE;IACE;IACA;IACA;;EAEF;IACE;IACA;IACA;;EAIA;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEGI;IAAwB;;EAExB;IAAuB;;EAGrB;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EAOT;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;;ACUE;EC7BE;IACE;IACA;IACA;;EAEF;IACE;IACA;IACA;;EAIA;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEGI;IAAwB;;EAExB;IAAuB;;EAGrB;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EAOT;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;;ACUE;EC7BE;IACE;IACA;IACA;;EAEF;IACE;IACA;IACA;;EAIA;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEGI;IAAwB;;EAExB;IAAuB;;EAGrB;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EAOT;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;;ACUE;EC7BE;IACE;IACA;IACA;;EAEF;IACE;IACA;IACA;;EAIA;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEGI;IAAwB;;EAExB;IAAuB;;EAGrB;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EAOT;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;;AG5CF;EACE;EACA;EACA,QbobsC;EanbtC;EACA,WZJ4B;EYK5B,aZoD4B;EYnD5B,OZIS;EYHT,kBZDS;EYET;EACA;EAKE,eb8M0B;Ec9NxB,YDuBJ;;ACnBA;EDHF;ICII;;;ADqBF;EACE;EACA;;AEpBF;EACE,OdGO;EcFP,kBdFO;EcGP,cfkaoC;EejapC;EAKE,Yf6UwB;;Aa3T5B;EACE,OZvBO;EYyBP;;AAQF;EAEE,kBZtCO;EYwCP;;;AAKF;EAME,OZjDO;EYkDP,kBZtDO;;;AY2DX;AAAA;EAEE;EACA;;;AAUF;EACE;EACA;EACA;EACA;EACA,aZ1B4B;;;AY6B9B;EACE;EACA;EACA,WbgK4B;Ea/J5B,ab4H4B;;;AazH9B;EACE;EACA;EACA,Wb0J4B;EazJ5B,absH4B;;;Aa7G9B;EACE;EACA;EACA,aZtD4B;EYuD5B,gBZvD4B;EYwD5B;EACA,aZvD4B;EYwD5B,OZvGS;EYwGT;EACA;EACA;;AAEA;EAEE;EACA;;;AAYJ;EACE,QbmTsC;EalTtC;EACA,WbkH4B;EajH5B,ab8E4B;EQ1N1B,eRiO0B;;;AajF9B;EACE,Qb8SsC;Ea7StC;EACA,WbyG4B;EaxG5B,abqE4B;EQzN1B,eRgO0B;;;AatE5B;EAEE;;;AAIJ;EACE;;;AASF;EACE,ebiSsC;;;Aa9RxC;EACE;EACA,YbmRsC;;;Aa3QxC;EACE;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;;;AASJ;EACE;EACA;EACA,cbwPsC;;;AarPxC;EACE;EACA,YZvIsC;EYwItC;;AAEA;EACE,OZ1MO;;;AY8MX;EACE;;;AAGF;EACE;EACA;EACA;EACA,cbuOsC;;AapOtC;EACE;EACA;EACA,cbkOoC;EajOpC;;;AEhNF;EACE;EACA;EACA,YfuaoC;EetapC,WfoQ0B;EenQ1B,Of4hBgC;;;AezhBlC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WfoN0B;EenN1B,adC0B;EcA1B;EACA;EP5CA,eR+N0B;;;Ae7K1B;AAAA;AAAA;EAEE,cfsgB8B;;AepgB9B;AAAA;AAAA;EACE,cfmgB4B;EelgB5B;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;;AAQF;AAAA;AAAA;EAEE;;;AAQF;EACE,Of0e4B;;Aeve9B;AAAA;AAAA;EAEE;;;AAQF;EACE,Of4d4B;;Ae1d5B;EACE;;AAIJ;AAAA;AAAA;EAEE;;AAIA;ECzGJ,kBD0G2B;;AAKvB;EACE;;;AAUJ;EACE,cf6b4B;;Ae3b5B;EAAW;;AAGb;AAAA;AAAA;EAEE;;AAIA;EACE;;;AAhHR;EACE;EACA;EACA,YfuaoC;EetapC,WfoQ0B;EenQ1B,Of6hBgC;;;Ae1hBlC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WfoN0B;EenN1B,adC0B;EcA1B;EACA;EP5CA,eR+N0B;;;Ae7K1B;AAAA;AAAA;EAEE,cfugB8B;;AergB9B;AAAA;AAAA;EACE,cfogB4B;EengB5B;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;;AAQF;AAAA;AAAA;EAEE;;;AAQF;EACE,Of2e4B;;Aexe9B;AAAA;AAAA;EAEE;;;AAQF;EACE,Of6d4B;;Ae3d5B;EACE;;AAIJ;AAAA;AAAA;EAEE;;AAIA;ECzGJ,kBD0G2B;;AAKvB;EACE;;;AAUJ;EACE,cf8b4B;;Ae5b5B;EAAW;;AAGb;AAAA;AAAA;EAEE;;AAIA;EACE;;;AFwHV;EACE;EACA;EACA;;AAKA;EACE;;AFlNA;EEuNA;IACE;IACA;IACA;IACA;;EAIF;IACE;IACA;IACA;IACA;IACA;;EAIF;IACE;IACA;IACA;;EAIF;IACE;;EAGF;AAAA;IAEE;;EAKF;IACE;IACA;IACA;IACA;IACA;;EAEF;IACE;IACA;IACA,cb2IkC;Ia1IlC;;EAGF;IACE;IACA;;EAEF;IACE;;;;AInUN;EACE;EACA,ahBsC4B;EgBrC5B;EACA;EACA;EACA;EACA;ECsFA;EACA,WjB7F4B;EiB8F5B,ajBrC4B;EiBwC1B,elB2H0B;Ec9NxB,YGUJ;;AHNA;EGHF;IHII;;;AXMF;EcGE;;AAGF;EAEE;EACA,YjB0U0B;;AiBtU5B;EAEE,SjBuW0B;;AiBlW5B;EACE;;AAcJ;AAAA;EAEE;;;AASA;ECxDA;EFAE,kBhB6EW;EkB3Eb,clB2Ea;;AGvEb;EeAE;EFNA,kBED2D;EAS3D,cATqG;;AAYvG;EAMI;;AAKJ;EAEE;EACA,kBlBoDW;EkBnDX,clBmDW;;AkBhDb;EAGE;EACA,kBAlC+I;EAsC/I,cAtCyL;;AAwCzL;EAKI;;;ADYN;ECxDA;EFAE,kBhB6EW;EkB3Eb,clB2Ea;;AGvEb;EeAE;EFNA,kBED2D;EAS3D,cATqG;;AAYvG;EAMI;;AAKJ;EAEE;EACA,kBlBoDW;EkBnDX,clBmDW;;AkBhDb;EAGE;EACA,kBAlC+I;EAsC/I,cAtCyL;;AAwCzL;EAKI;;;ADYN;ECxDA;EFAE,kBhB6EW;EkB3Eb,clB2Ea;;AGvEb;EeAE;EFNA,kBED2D;EAS3D,cATqG;;AAYvG;EAMI;;AAKJ;EAEE;EACA,kBlBoDW;EkBnDX,clBmDW;;AkBhDb;EAGE;EACA,kBAlC+I;EAsC/I,cAtCyL;;AAwCzL;EAKI;;;ADYN;ECxDA;EFAE,kBhB6EW;EkB3Eb,clB2Ea;;AGvEb;EeAE;EFNA,kBED2D;EAS3D,cATqG;;AAYvG;EAMI;;AAKJ;EAEE;EACA,kBlBoDW;EkBnDX,clBmDW;;AkBhDb;EAGE;EACA,kBAlC+I;EAsC/I,cAtCyL;;AAwCzL;EAKI;;;ADYN;ECxDA;EFAE,kBhB6EW;EkB3Eb,clB2Ea;;AGvEb;EeAE;EFNA,kBED2D;EAS3D,cATqG;;AAYvG;EAMI;;AAKJ;EAEE;EACA,kBlBoDW;EkBnDX,clBmDW;;AkBhDb;EAGE;EACA,kBAlC+I;EAsC/I,cAtCyL;;AAwCzL;EAKI;;;ADYN;ECxDA;EFAE,kBhB6EW;EkB3Eb,clB2Ea;;AGvEb;EeAE;EFNA,kBED2D;EAS3D,cATqG;;AAYvG;EAMI;;AAKJ;EAEE;EACA,kBlBoDW;EkBnDX,clBmDW;;AkBhDb;EAGE;EACA,kBAlC+I;EAsC/I,cAtCyL;;AAwCzL;EAKI;;;ADYN;ECxDA;EFAE,kBhB6EW;EkB3Eb,clB2Ea;;AGvEb;EeAE;EFNA,kBED2D;EAS3D,cATqG;;AAYvG;EAMI;;AAKJ;EAEE;EACA,kBlBoDW;EkBnDX,clBmDW;;AkBhDb;EAGE;EACA,kBAlC+I;EAsC/I,cAtCyL;;AAwCzL;EAKI;;;ADYN;ECxDA;EFAE,kBhB6EW;EkB3Eb,clB2Ea;;AGvEb;EeAE;EFNA,kBED2D;EAS3D,cATqG;;AAYvG;EAMI;;AAKJ;EAEE;EACA,kBlBoDW;EkBnDX,clBmDW;;AkBhDb;EAGE;EACA,kBAlC+I;EAsC/I,cAtCyL;;AAwCzL;EAKI;;;ADkBN;ECXA,OlB0Ba;EkBzBb;EACA;EACA,clBuBa;;AkBrBb;EACE,OAPgD;EAQhD,kBlBmBW;EkBlBX,clBkBW;;AkBfb;EAEE;;AAGF;EAEE,OlBQW;EkBPX;;AAGF;EAGE;EACA;EACA,clBDW;;AkBGX;EAKI;;;ADvBN;ECXA,OlB0Ba;EkBzBb;EACA;EACA,clBuBa;;AkBrBb;EACE,OAPgD;EAQhD,kBlBmBW;EkBlBX,clBkBW;;AkBfb;EAEE;;AAGF;EAEE,OlBQW;EkBPX;;AAGF;EAGE;EACA;EACA,clBDW;;AkBGX;EAKI;;;ADvBN;ECXA,OlB0Ba;EkBzBb;EACA;EACA,clBuBa;;AkBrBb;EACE,OAPgD;EAQhD,kBlBmBW;EkBlBX,clBkBW;;AkBfb;EAEE;;AAGF;EAEE,OlBQW;EkBPX;;AAGF;EAGE;EACA;EACA,clBDW;;AkBGX;EAKI;;;ADvBN;ECXA,OlB0Ba;EkBzBb;EACA;EACA,clBuBa;;AkBrBb;EACE,OAPgD;EAQhD,kBlBmBW;EkBlBX,clBkBW;;AkBfb;EAEE;;AAGF;EAEE,OlBQW;EkBPX;;AAGF;EAGE;EACA;EACA,clBDW;;AkBGX;EAKI;;;ADvBN;ECXA,OlB0Ba;EkBzBb;EACA;EACA,clBuBa;;AkBrBb;EACE,OAPgD;EAQhD,kBlBmBW;EkBlBX,clBkBW;;AkBfb;EAEE;;AAGF;EAEE,OlBQW;EkBPX;;AAGF;EAGE;EACA;EACA,clBDW;;AkBGX;EAKI;;;ADvBN;ECXA,OlB0Ba;EkBzBb;EACA;EACA,clBuBa;;AkBrBb;EACE,OAPgD;EAQhD,kBlBmBW;EkBlBX,clBkBW;;AkBfb;EAEE;;AAGF;EAEE,OlBQW;EkBPX;;AAGF;EAGE;EACA;EACA,clBDW;;AkBGX;EAKI;;;ADvBN;ECXA,OlB0Ba;EkBzBb;EACA;EACA,clBuBa;;AkBrBb;EACE,OAPgD;EAQhD,kBlBmBW;EkBlBX,clBkBW;;AkBfb;EAEE;;AAGF;EAEE,OlBQW;EkBPX;;AAGF;EAGE;EACA;EACA,clBDW;;AkBGX;EAKI;;;ADvBN;ECXA,OlB0Ba;EkBzBb;EACA;EACA,clBuBa;;AkBrBb;EACE,OAPgD;EAQhD,kBlBmBW;EkBlBX,clBkBW;;AkBfb;EAEE;;AAGF;EAEE,OlBQW;EkBPX;;AAGF;EAGE;EACA;EACA,clBDW;;AkBGX;EAKI;;;ADZR;EACE,ahB1E4B;EgB2E5B,OjBsF0B;EiBrF1B;;AdtEA;EcyEE,OjBoFwB;EiBnFxB,iBhB9CwB;EgB+CxB;EACA;;AAGF;EAEE,iBhBrDwB;EgBsDxB;EACA;;AAGF;EAEE,OhBpFO;EgBqFP;;;AAWJ;ECbE;EACA,WlB4J4B;EkB3J5B,alBwH4B;EkBrH1B,elB4H0B;;;AiBhH9B;ECjBE;EACA,WlB6J4B;EkB5J5B,alByH4B;EkBtH1B,elB6H0B;;;AiBxG9B;EACE;EACA;;AAGA;EACE,YjBwQ0B;;;AiBhQ5B;AAAA;AAAA;EACE;;;AE1IJ;ELGM,YKFJ;;ALMA;EKPF;ILQI;;;AKLF;EACE;;;AAKF;EACE;;;AAIJ;EACE;EACA;EACA;ELdI,YKeJ;;ALXA;EKOF;ILNI;;;;AMTJ;AAAA;AAAA;AAAA;EAIE;;;ACwBE;EACE;EACA;EACA;EACA;EACA;EACA;EAlCJ;EACA;EACA;EACA;;AAyDE;EACE;;;ADhDN;EACE;EACA;EACA;EACA,SpBklBkC;EoBjlBlC;EACA;EACA,WpBijBkC;EoBhjBlC;EACA;EACA,WnBjB4B;EmBkB5B,OnBRS;EmBST;EACA;EACA,kBnBfS;EmBgBT;EACA;EZ1BE,eR+N0B;;;AoBhM9B;EACE;EACA;;;AAMA;EACE;EACA;EACA;EACA,epByhBgC;;AqB3iBhC;EACE;EACA;EACA;EACA;EACA;EACA;EA3BJ;EACA;EACA;EACA;;AAkDE;EACE;;;ADNJ;EACE;EACA;EACA;EACA;EACA,apB2gBgC;;AqB3iBhC;EACE;EACA;EACA;EACA;EACA;EACA;EApBJ;EACA;EACA;EACA;;AA2CE;EACE;;ADIF;EACE;;;AAMJ;EACE;EACA;EACA;EACA;EACA,cpB0fgC;;AqB3iBhC;EACE;EACA;EACA;EACA;EACA;EACA;;AAWA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EAlCN;EACA;EACA;;AAqCE;EACE;;ADqBF;EACE;;;AAQJ;EAIE;EACA;;;AAMJ;EElGE;EACA;EACA;EACA;;;AFsGF;EACE;EACA;EACA;EACA;EACA,anB7G4B;EmB8G5B,OnBjGS;EmBkGT;EACA;EACA;EACA;;AjBxGA;EiB2GE,OpBsdgC;EoBrdhC;EJtHA,kBfgFgC;;AmB0ClC;EAEE,OnBrHO;EmBsHP;EJ7HA,kBfkFgC;;AmB+ClC;EAEE,OnBzHO;EmB0HP;;;AAQJ;EACE;;;AAIF;EACE;EACA;EACA;EACA,WpBsG4B;EoBrG5B,OnB5IS;EmB6IT;;;AAIF;EACE;EACA;EACA,OnBjJS;;;AsBVX;EACE;EACA;EACA;EACA,cvB2csC;;;AuBxcxC;EACE;EACA,cvBucsC;;;AuBpcxC;EACE;EACA;EACA;;AAEA;EACE,OtBdO;EePP,kBhBsO0B;;AuB5M5B;EAEE,YvBsc4C;;AuBnc9C;EACE,OtBzBO;EsB0BP,kBvBoc4C;;AuB/b5C;EACE,OtB7BK;;AsB+BL;EACE,kBtBjCG;;;AsB2CX;EACE;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA,OvBuZoC;EuBtZpC,QvBsZoC;EuBrZpC;EACA;EACA;EACA,kBvB5DO;;AuBiET;EACE;EACA;EACA;EACA;EACA,OvBwYoC;EuBvYpC,QvBuYoC;EuBtYpC;EACA;EACA;EACA,iBvBqYoC;;;AuB3XtC;Ef9FE,eR+N0B;;AuB5H1B;EPjGA,kBhBsO0B;;AuBlI1B;EACE,kBvBoY0C;;AuB/X5C;EP1GA,kBhBsO0B;;AuBxH1B;EACE,kBvB8XgD;;AuBzXlD;EACE,kBvB0W0C;;AuBxW5C;EACE,kBvBuW0C;;;AuB7V9C;EACE,evB6W4C;;AuBzW5C;EPvIA,kBhBsO0B;;AuB5F1B;EACE,kBvBsW0C;;AuBjW5C;EACE,kBvB8U0C;;;AuBlUhD;EACE;EACA;EACA,QvBuRsC;EuBtRtC;EACA,atBxG4B;EsByG5B,OtBxJS;EsByJT;EACA;EACA,iBvBsVkC;EuBrVlC;EAEE,evBoD0B;EuB/C5B;;AAEA;EACE,cvB2PoC;EuB1PpC;EAIE,YvBgV8B;;AuB7UhC;EAME,OtBpLK;EsBqLL,kBtBzLK;;AsB6LT;EAEE;EACA,evB6SgC;EuB5ShC;;AAGF;EACE,OtBlMO;EsBmMP,kBtBpMO;;AsBwMT;EACE;;;AAIJ;EACE,QvBmOsC;EuBlOtC,avB2RkC;EuB1RlC,gBvB0RkC;EuBzRlC,WvB8SkC;;;AuB3SpC;EACE,QvB+NsC;EuB9NtC,avBoRkC;EuBnRlC,gBvBmRkC;EuBlRlC,WvB0SkC;;;AuBlSpC;EACE;EACA;EACA;EACA,QvB0MsC;EuBzMtC;;;AAGF;EACE;EACA;EACA;EACA,QvBkMsC;EuBjMtC;EACA;;AAEA;EACE,cvBkLoC;EuBjLpC,YvBkG0B;;AuBhG1B;EACE,cvB8KkC;;AuB1KtC;EACE,kBtB1PO;;AsB8PP;EACE,SvBwSa;;;AuBnSnB;EACE;EACA;EACA;EACA;EACA;EACA,QvBoKsC;EuBnKtC;EACA,atB3N4B;EsB4N5B,OtB3QS;EsB4QT,kBtBhRS;EsBiRT;Ef1RE,eR+N0B;;AuB+D5B;EACE;EACA;EACA;EACA;EACA;EACA;EACA,QvBmJoC;EuBlJpC;EACA,atB3O0B;EsB4O1B,OtB3RO;EsB4RP;EPvSA,kBfSO;EsBgSP;Ef3SA,ee4SuB;;;AAU3B;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAIA;EAA0B,YvB4Ne;;AuB3NzC;EAA0B,YvB2Ne;;AuB1NzC;EAA0B,YvB0Ne;;AuBvN3C;EACE;;AAGF;EACE,OvB4MyC;EuB3MzC,QvB2MyC;EuB1MzC;EP3UA,kBhBsO0B;EuBuG1B,QvB2MyC;EQ1hBzC,eR2hByC;Ec1hBvC,YSiVF;EACA;;AT9UF;ESqUA;ITpUE;;;AS+UA;EPnVA,kBhB6hByC;;AuBrM3C;EACE,OvBqLgC;EuBpLhC,QvBqLgC;EuBpLhC;EACA,QvBoLgC;EuBnLhC,kBvBtVO;EuBuVP;EfhWA,eRohBgC;;AuB/KlC;EACE,OvBiLyC;EuBhLzC,QvBgLyC;EgBrhBzC,kBhBsO0B;EuBiI1B,QvBiLyC;EQ1hBzC,eR2hByC;Ec1hBvC,YS2WF;EACA;;ATxWF;ESgWA;IT/VE;;;ASyWA;EP7WA,kBhB6hByC;;AuB3K3C;EACE,OvB2JgC;EuB1JhC,QvB2JgC;EuB1JhC;EACA,QvB0JgC;EuBzJhC,kBvBhXO;EuBiXP;Ef1XA,eRohBgC;;AuBrJlC;EACE,OvBuJyC;EuBtJzC,QvBsJyC;EuBrJzC;EACA,cvBtC0B;EuBuC1B,avBvC0B;EgB3V1B,kBhBsO0B;EuB8J1B,QvBoJyC;EQ1hBzC,eR2hByC;Ec1hBvC,YSwYF;EACA;;ATrYF;ES0XA;ITzXE;;;ASsYA;EP1YA,kBhB6hByC;;AuB9I3C;EACE,OvB8HgC;EuB7HhC,QvB8HgC;EuB7HhC;EACA,QvB6HgC;EuB5HhC;EACA;EACA;;AAIF;EACE,kBvBpZO;EQTP,eRohBgC;;AuBnHlC;EACE;EACA,kBvB1ZO;EQTP,eRohBgC;;;AuB5GpC;AAAA;AAAA;ETvaM,YS0aJ;;ATtaA;ESmaF;AAAA;AAAA;ITlaI;;;;AULJ;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;ArBCA;EqBEE;;AAIF;EACE,OvBPO;;;AuBeX;EACE;;AAEA;EACE;;AAGF;EACE;EhB7BA,wBRyN0B;EQxN1B,yBRwN0B;;AGnN5B;EqB2BI,cvB5BK;;AuB+BP;EACE,OvB/BK;EuBgCL;EACA;;AAIJ;AAAA;EAEE,OvBtCO;EuBuCP,kBvB3CO;EuB4CP,cvBsCgC;;AuBnClC;EAEE;EhBpDA,wBgBsD2B;EhBrD3B,yBgBqD2B;;;AAU7B;EhBtEE,eR+N0B;;AwBrJ5B;AAAA;EAEE,OvBnEO;EuBoEP,kBxB2J0B;;;AwBjJ5B;EACE;EACA;;;AAKF;EACE;EACA;EACA;;;AAUF;EACE;;AAEF;EACE;;;AClGJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAIA;AAAA;EAEE;EACA;EACA;EACA;;;AASJ;EACE;EACA,azBimBkC;EyBhmBlC,gBzBgmBkC;EyB/lBlC,czBkFO;EyBjFP,WzBkN4B;EyBjN5B;EACA;;AtBhCA;EsBmCE;;;AASJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;;AASJ;EACE;EACA,azByhBkC;EyBxhBlC,gBzBwhBkC;;;AyB5gBpC;EACE;EACA;EAGA;;;AAIF;EACE;EACA,WzBmJ4B;EyBlJ5B;EACA;EACA;EjB5GE,eR+N0B;;AGnN5B;EsBoGE;;AAIF;EACE;;;AAMJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;Ad7DE;EcyEI;AAAA;IAEE;IACA;;;AdzFN;EcoFA;IAUI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE,ezBiewB;IyBhexB,czBgewB;;EyB3d5B;AAAA;IAEE;;EAGF;IACE;IAGA;;EAGF;IACE;;;Ad/GN;EcyEI;AAAA;IAEE;IACA;;;AdzFN;EcoFA;IAUI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE,ezBiewB;IyBhexB,czBgewB;;EyB3d5B;AAAA;IAEE;;EAGF;IACE;IAGA;;EAGF;IACE;;;Ad/GN;EcyEI;AAAA;IAEE;IACA;;;AdzFN;EcoFA;IAUI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE,ezBiewB;IyBhexB,czBgewB;;EyB3d5B;AAAA;IAEE;;EAGF;IACE;IAGA;;EAGF;IACE;;;Ad/GN;EcyEI;AAAA;IAEE;IACA;;;AdzFN;EcoFA;IAUI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE,ezBiewB;IyBhexB,czBgewB;;EyB3d5B;AAAA;IAEE;;EAGF;IACE;IAGA;;EAGF;IACE;;;AAxCN;EAUI;EACA;;AATA;AAAA;EAEE;EACA;;AAQF;EACE;;AAEA;EACE;;AAGF;EACE,ezBiewB;EyBhexB,czBgewB;;AyB3d5B;AAAA;EAEE;;AAGF;EACE;EAGA;;AAGF;EACE;;;AAcR;EACE,OxBtLO;;AEDT;EsB0LI,OxBzLK;;AwB8LP;EACE,OxB/LK;;AEDT;EsBmMM,OzBwc4B;;AyBrc9B;EACE,OzBsc4B;;AyBlchC;AAAA;AAAA;AAAA;EAIE,OxB9MK;;AwBkNT;EACE,OxBnNO;EwBoNP,czB0bgC;;AyBvblC;EACE,kBzBqbgC;;AyBlblC;EACE,OxB5NO;;AwB6NP;EACE,OxB9NK;;AEDT;EsBkOM,OxBjOG;;;AwByOT;EACE,OxB9OO;;AEGT;EsB8OI,OxBjPK;;AwBsPP;EACE,OxBvPK;;AEGT;EsBuPM,OzB6Y4B;;AyB1Y9B;EACE,OzB2Y4B;;AyBvYhC;AAAA;AAAA;AAAA;EAIE,OxBtQK;;AwB0QT;EACE,OxB3QO;EwB4QP,czB+XgC;;AyB5XlC;EACE,kBzB0XgC;;AyBvXlC;EACE,OxBpRO;;AwBqRP;EACE,OxBtRK;;AEGT;EsBsRM,OxBzRG;;;AyBTX;EACE;EACA;EACA;EACA;EACA;EACA,kBzBGS;EyBFT;EACA;ElBRE,eR+N0B;;A0BpN5B;EACE;EACA;;AAIA;ElBXA,wBRyN0B;EQxN1B,yBRwN0B;;A0BxM1B;ElBHA,4BR2M0B;EQ1M1B,2BR0M0B;;;A0BlM9B;EAGE;EACA,S1BoqBkC;;;A0BjqBpC;EACE,e1B+pBkC;;;A0B5pBpC;EACE;EACA;;;AAGF;EACE;;;AvBtCA;EuB2CE;;AAGF;EACE,a1B8oBgC;;;A0BtoBpC;EACE;EACA;EACA,kB1BwoBkC;E0BvoBlC;;AAEA;ElBrEE,ekBsEuB;;AAIvB;EACE;;;AAKN;EACE;EACA,kB1BwnBkC;E0BvnBlC;;AAEA;ElBrFE,ekBsFuB;;;AAS3B;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA,S1B2lBkC;;;A0BxlBpC;EACE;ElBtHE,eRysBgC;;;A0B9kBpC;EACE;ElBtHE,wBRmsBgC;EQlsBhC,yBRksBgC;;;A0BzkBpC;EACE;ElB7GE,4BRqrBgC;EQprBhC,2BRorBgC;;;A0BjkBpC;EACE;EACA;;AAEA;EACE,e1BkkBgC;;AWvpBhC;EegFJ;IASI;IACA;IACA;;EAEA;IACE;IAEA;IACA;IACA,c1BqjB8B;I0BpjB9B;IACA,a1BmjB8B;;;;A0BziBpC;EACE;EACA;;AAIA;EACE,e1BkiBgC;;AWvpBhC;Ee8GJ;IAWI;;EAGA;IAEE;IACA;;EAEA;IACE;IACA;;EAKA;IlBnLJ,yBkBoLmC;IlBnLnC,4BkBmLmC;;EAE7B;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAIJ;IlBlLJ,wBkBmLkC;IlBlLlC,2BkBkLkC;;EAE5B;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAIJ;IlB1NJ,eR+N0B;;E0BFpB;AAAA;IlBvNN,wBRyN0B;IQxN1B,yBRwN0B;;E0BEpB;AAAA;IlB7MN,4BR2M0B;IQ1M1B,2BR0M0B;;E0BQtB;IlBvOJ,ekBwO6B;;EAEvB;AAAA;AAAA;AAAA;IlB1ON,ekB8O+B;;;;AAcjC;EACE,e1BucgC;;AW5oBhC;EemMJ;IAMI,c1BidgC;I0BhdhC,Y1BidgC;I0BhdhC;IACA;;EAEA;IACE;IACA;;;;AAWJ;EACE;EACA;;AAIA;EACE;;AAIJ;EACE;EACA;EACA;;AAGF;EACE;EACA;;;ACrSJ;EACE;EACA;EACA,W3BgwBkC;E2B/vBlC,a1BqC4B;E0BpC5B;EACA;EACA;EACA;EnBTE,eR+N0B;;A2BlN5B;EACE;;;AAKJ;EACE;EACA;;;AAOF;EACE,e3B6uBkC;E2B5uBlC,c3B4uBkC;EQ1wBhC,eR6wBgC;;;A2BtuBlC;EC1CA;EACA,kB5BiFa;;AGnEb;EyBVI;EACA;EACA;;;ADmCJ;EC1CA;EACA,kB5BiFa;;AGnEb;EyBVI;EACA;EACA;;;ADmCJ;EC1CA;EACA,kB5BiFa;;AGnEb;EyBVI;EACA;EACA;;;ADmCJ;EC1CA;EACA,kB5BiFa;;AGnEb;EyBVI;EACA;EACA;;;ADmCJ;EC1CA;EACA,kB5BiFa;;AGnEb;EyBVI;EACA;EACA;;;ADmCJ;EC1CA;EACA,kB5BiFa;;AGnEb;EyBVI;EACA;EACA;;;ADmCJ;EC1CA;EACA,kB5BiFa;;AGnEb;EyBVI;EACA;EACA;;;ADmCJ;EC1CA;EACA,kB5BiFa;;AGnEb;EyBVI;EACA;EACA;;;ACRN;EACE;EACA,e7BgsBkC;E6B/rBlC,kB5BYS;EOXP,eRgO0B;;AWxK1B;EkB5DJ;IAOI;;;;AAIJ;EACE;EACA;ErBTE,eqBUqB;;;ACVzB;EACE;EACA;EACA,e9BmzBkC;E8BlzBlC;EtBJE,eR+N0B;;;A8BtN9B;EAEE;;;AAIF;EACE,a7B0B4B;;;A6BlB9B;EACE;;AAGA;EACE;EACA;EACA;EACA;EACA;;;AAUF;EC9CA,OD+CqH;Ed1CnH,kBc0CuB;EC7CzB,cD6CqE;;AC3CrE;EACE;;AAGF;EACE;;;ADqCF;EC9CA,OD+CqH;Ed1CnH,kBc0CuB;EC7CzB,cD6CqE;;AC3CrE;EACE;;AAGF;EACE;;;ADqCF;EC9CA,OD+CqH;Ed1CnH,kBc0CuB;EC7CzB,cD6CqE;;AC3CrE;EACE;;AAGF;EACE;;;ADqCF;EC9CA,OD+CqH;Ed1CnH,kBc0CuB;EC7CzB,cD6CqE;;AC3CrE;EACE;;AAGF;EACE;;;ADqCF;EC9CA,OD+CqH;Ed1CnH,kBc0CuB;EC7CzB,cD6CqE;;AC3CrE;EACE;;AAGF;EACE;;;ADqCF;EC9CA,OD+CqH;Ed1CnH,kBc0CuB;EC7CzB,cD6CqE;;AC3CrE;EACE;;AAGF;EACE;;;ADqCF;EC9CA,OD+CqH;Ed1CnH,kBc0CuB;EC7CzB,cD6CqE;;AC3CrE;EACE;;AAGF;EACE;;;ADqCF;EC9CA,OD+CqH;Ed1CnH,kBc0CuB;EC7CzB,cD6CqE;;AC3CrE;EACE;;AAGF;EACE;;;ACVJ;EACE;EACA;;;AAGF;EACE;;;ACFF;EACE;EACA;EAGA;EACA;;;AASF;EACE;EACA,OhCJS;EgCKT;;A9BNA;E8BUE,OhCTO;EgCUP;EACA,kBhCdO;;AgCiBT;EACE,OhCfO;EgCgBP,kBhClBO;;;AgC2BX;EACE;EACA;EACA;EAEA;EACA,kBhCnCS;EgCoCT;;AAEA;EzBzCE,wBRyN0B;EQxN1B,yBRwN0B;;AiC5K5B;EACE;EzBhCA,4BR2M0B;EQ1M1B,2BR0M0B;;AGnN5B;E8B6CE;EACA;;AAGF;EAEE,OhCnDO;EgCoDP,kBhCvDO;;AgC2DT;EACE;EACA,OhC7DO;EgC8DP,kBjCiK0B;EiChK1B,cjCgK0B;;;AiCrJ5B;EACE;EACA;EzBrFA,eyBsFuB;;AAIvB;EACE;;AAKF;EACE;;;AClGJ;EACE,OD6GsE;EC5GtE,kBD4GuC;;A9BjGzC;E+BPM,ODwGkE;ECvGlE;;AAGF;EACE,OjCDG;EiCEH,kBDkGkE;ECjGlE,cDiGkE;;;AC9GxE;EACE,OD6GsE;EC5GtE,kBD4GuC;;A9BjGzC;E+BPM,ODwGkE;ECvGlE;;AAGF;EACE,OjCDG;EiCEH,kBDkGkE;ECjGlE,cDiGkE;;;AC9GxE;EACE,OD6GsE;EC5GtE,kBD4GuC;;A9BjGzC;E+BPM,ODwGkE;ECvGlE;;AAGF;EACE,OjCDG;EiCEH,kBDkGkE;ECjGlE,cDiGkE;;;AC9GxE;EACE,OD6GsE;EC5GtE,kBD4GuC;;A9BjGzC;E+BPM,ODwGkE;ECvGlE;;AAGF;EACE,OjCDG;EiCEH,kBDkGkE;ECjGlE,cDiGkE;;;AC9GxE;EACE,OD6GsE;EC5GtE,kBD4GuC;;A9BjGzC;E+BPM,ODwGkE;ECvGlE;;AAGF;EACE,OjCDG;EiCEH,kBDkGkE;ECjGlE,cDiGkE;;;AC9GxE;EACE,OD6GsE;EC5GtE,kBD4GuC;;A9BjGzC;E+BPM,ODwGkE;ECvGlE;;AAGF;EACE,OjCDG;EiCEH,kBDkGkE;ECjGlE,cDiGkE;;;AC9GxE;EACE,OD6GsE;EC5GtE,kBD4GuC;;A9BjGzC;E+BPM,ODwGkE;ECvGlE;;AAGF;EACE,OjCDG;EiCEH,kBDkGkE;ECjGlE,cDiGkE;;;AC9GxE;EACE,OD6GsE;EC5GtE,kBD4GuC;;A9BjGzC;E+BPM,ODwGkE;ECvGlE;;AAGF;EACE,OjCDG;EiCEH,kBDkGkE;ECjGlE,cDiGkE;;;AE3G1E;EAEE;;AAEA;EACE;EACA;;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA,SnCilBkC;EmChlBlC;EACA;EAGA;;;AAOF;EACE;EACA;EACA,QnCmvBkC;EmCjvBlC;;AAGA;ErBtCI,YqBuCF;EACA;;ArBpCF;EqBkCA;IrBjCE;;;AqBqCF;EACE;;;AAIJ;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;;;AAKJ;EACE;EACA;EACA;EACA;EAEA;EACA,kBlC5DS;EkC6DT;EACA;E3BvEE,eRgO0B;EmCrJ5B;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA,SnC8gBkC;EmC7gBlC,kBnCtES;;AmCyET;EAAS;;AACT;EAAS,SnCwsByB;;;AmCnsBpC;EACE;EACA;EACA;EACA,SnCosBkC;EmCnsBlC;E3B9FE,wBR0N0B;EQzN1B,yBRyN0B;;AmCzH5B;EACE,SnC+rBgC;EmC7rBhC;;;AAKJ;EACE;EACA,alCtE4B;;;AkC2E9B;EACE;EAGA;EACA,SnCwpBkC;;;AmCppBpC;EACE;EACA;EACA;EACA,SnCgpBkC;EmC/oBlC;;AAGA;EAAuB;;AACvB;EAAsB;;;AAIxB;EACE;EACA;EACA;EACA;EACA;;;AxBzFE;EwB+FF;IACE,WnCkpBgC;ImCjpBhC;;EAGF;IACE;;EAEA;IACE;;EASJ;IAAY,WnCkoBsB;;;AWnvBhC;EwBsHF;IAAY,WnC2nBsB;;;AoCnyBpC;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;EAGE;EtB3BI,YsB4BJ;;AtBxBA;EsBoBF;AAAA;AAAA;ItBnBI;;;;AsB0BJ;AAAA;EAEE;EACA;;;AAGF;AAAA;EAEE;;AAEA;EAJF;AAAA;IAKI;;;;AAIJ;AAAA;EAEE;;AAEA;EAJF;AAAA;IAKI;;;;AAIJ;AAAA;EAEE;;AAEA;EAJF;AAAA;IAKI;;;;AAUF;EACE;EACA;EACA;;AAGF;AAAA;AAAA;EAGE;;AAGF;AAAA;EAEE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;AAEA;EAPF;AAAA;AAAA;AAAA;AAAA;IAQI;;;;AAUN;AAAA;EAEE;EACA;EACA;EAEA;EACA;EACA;EACA,OpCqxBkC;EoCpxBlC,OnC3GS;EmC4GT;EACA,SpCmxBkC;;AG73BlC;AAAA;AAAA;EiCgHE,OnCnHO;EmCoHP;EACA;EACA;;;AAGJ;EACE;;;AAKF;EACE;;;AAOF;AAAA;EAEE;EACA,OpCgwBkC;EoC/vBlC,QpC+vBkC;EoC9vBlC;EACA;;;AAEF;EACE,kBpC4vBkC;;;AoC1vBpC;EACE,kBpC0vBkC;;;AoCjvBpC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,cpCytBkC;EoCxtBlC,apCwtBkC;EoCvtBlC;;AAEA;EACE;EACA;EACA,OpCqtBgC;EoCptBhC,QpCqtBgC;EoCptBhC,cpCqtBgC;EoCptBhC,apCotBgC;EoCntBhC;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACE,kBnC3MO;;;AmCoNX;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OnC5NS;EmC6NT;;;ACxOF;EAAqB;;;AACrB;EAAqB;;;AACrB;EAAqB;;;AACrB;EAAqB;;;AACrB;EAAqB;;;AACrB;EAAqB;;;ACFnB;EACE;;;AnCUF;AAAA;AAAA;EmCLI;;;AANJ;EACE;;;AnCUF;AAAA;AAAA;EmCLI;;;AANJ;EACE;;;AnCUF;AAAA;AAAA;EmCLI;;;AANJ;EACE;;;AnCUF;AAAA;AAAA;EmCLI;;;AANJ;EACE;;;AnCUF;AAAA;AAAA;EmCLI;;;AANJ;EACE;;;AnCUF;AAAA;AAAA;EmCLI;;;AANJ;EACE;;;AnCUF;AAAA;AAAA;EmCLI;;;AANJ;EACE;;;AnCUF;AAAA;AAAA;EmCLI;;;ACCN;EACE;;;AAGF;EACE;;;ACXF;EAAkB;;;AAClB;EAAkB;;;AAClB;EAAkB;;;AAClB;EAAkB;;;AAClB;EAAkB;;;AAElB;EAAmB;;;AACnB;EAAmB;;;AACnB;EAAmB;;;AACnB;EAAmB;;;AACnB;EAAmB;;;AAGjB;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AAIJ;EACE;;;AAOF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;ACxDA;EACE;EACA;EACA;;;ACMA;EAA2B;;;AAC3B;EAA2B;;;AAC3B;EAA2B;;;AAC3B;EAA2B;;;AAC3B;EAA2B;;;AAC3B;EAA2B;;;AAC3B;EAA2B;;;AAC3B;EAA2B;;;AAC3B;EAA2B;;;A/B0C3B;E+BlDA;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;;A/B0C3B;E+BlDA;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;;A/B0C3B;E+BlDA;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;;A/B0C3B;E+BlDA;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;;AAS/B;EACE;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;;AClC1B;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;;;AAKF;EACE;;;AAKF;EACE;;;AAKF;EACE;;;ACvCA;EAAgC;;;AAChC;EAAgC;;;AAChC;EAAgC;;;AAChC;EAAgC;;;AAEhC;EAA8B;;;AAC9B;EAA8B;;;AAC9B;EAA8B;;;AAC9B;EAA8B;;;AAC9B;EAA8B;;;AAC9B;EAA8B;;;AAC9B;EAA8B;;;AAC9B;EAA8B;;;AAE9B;EAAoC;;;AACpC;EAAoC;;;AACpC;EAAoC;;;AACpC;EAAoC;;;AACpC;EAAoC;;;AAEpC;EAAiC;;;AACjC;EAAiC;;;AACjC;EAAiC;;;AACjC;EAAiC;;;AACjC;EAAiC;;;AAEjC;EAAkC;;;AAClC;EAAkC;;;AAClC;EAAkC;;;AAClC;EAAkC;;;AAClC;EAAkC;;;AAClC;EAAkC;;;AAElC;EAAgC;;;AAChC;EAAgC;;;AAChC;EAAgC;;;AAChC;EAAgC;;;AAChC;EAAgC;;;AAChC;EAAgC;;;AjCYhC;EiClDA;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAEhC;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAE9B;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EAEpC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EAEjC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAElC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;;AjCYhC;EiClDA;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAEhC;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAE9B;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EAEpC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EAEjC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAElC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;;AjCYhC;EiClDA;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAEhC;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAE9B;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EAEpC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EAEjC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAElC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;;AjCYhC;EiClDA;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAEhC;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAE9B;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EAEpC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EAEjC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAElC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;;AC5ChC;ECDF;;;ADEE;ECCF;;;ADAE;ECGF;;;AnCmDE;EkCxDA;ICDF;;EDEE;ICCF;;EDAE;ICGF;;;AnCmDE;EkCxDA;ICDF;;EDEE;ICCF;;EDAE;ICGF;;;AnCmDE;EkCxDA;ICDF;;EDEE;ICCF;;EDAE;ICGF;;;AnCmDE;EkCxDA;ICDF;;EDEE;ICCF;;EDAE;ICGF;;;ACAA;EAAyB;;;AAAzB;EAAyB;;;AAAzB;EAAyB;;;AAAzB;EAAyB;;;AAAzB;EAAyB;;;AAK3B;EACE;EACA;EACA;EACA;EACA,S/CmlBkC;;;A+ChlBpC;EACE;EACA;EACA;EACA;EACA,S/C2kBkC;;;A+CvkBlC;EADF;IAEI;IACA;IACA,S/CmkBgC;;;;AgDjmBpC;ECEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAUA;EAEE;EACA;EACA;EACA;EACA;EACA;;;AC5BJ;EAAa;;;AACb;EAAU;;;AACV;EAAa;;;AACb;EAAe;;;ACCX;EAAuB;;;AAAvB;EAAuB;;;AAAvB;EAAuB;;;AAAvB;EAAuB;;;AAAvB;EAAuB;;;AAAvB;EAAuB;;;AAAvB;EAAuB;;;AAAvB;EAAuB;;;AAAvB;EAAuB;;;AAAvB;EAAuB;;;AAI3B;EAAU;;;AACV;EAAU;;;ACAF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAMN;EAAmB;;;AACnB;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AzCaF;EyCjDI;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAMN;IAAmB;;EACnB;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;;AzCaF;EyCjDI;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAMN;IAAmB;;EACnB;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;;AzCaF;EyCjDI;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAMN;IAAmB;;EACnB;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;;AzCaF;EyCjDI;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAMN;IAAmB;;EACnB;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;;ACzCN;EAAkB,arDqPY;;;AqDjP9B;EAAiB;;;AACjB;EAAiB;;;AACjB;ECRE;EACA;EACA;;;ADcE;EAAwB;;;AACxB;EAAwB;;;AACxB;EAAwB;;;A1CsCxB;E0CxCA;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;;A1CsCxB;E0CxCA;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;;A1CsCxB;E0CxCA;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;;A1CsCxB;E0CxCA;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;;AAM5B;EAAmB;;;AACnB;EAAmB;;;AACnB;EAAmB;;;AAInB;EAAsB;;;AACtB;EAAsB;;;AACtB;EAAsB;;;AACtB;EAAsB;;;AAItB;EAAc;;;AEpCZ;EACE;;;ApDUF;EoDNI;;;AALJ;EACE;;;ApDUF;EoDNI;;;AALJ;EACE;;;ApDUF;EoDNI;;;AALJ;EACE;;;ApDUF;EoDNI;;;AALJ;EACE;;;ApDUF;EoDNI;;;AALJ;EACE;;;ApDUF;EoDNI;;;AALJ;EACE;;;ApDUF;EoDNI;;;AALJ;EACE;;;ApDUF;EoDNI;;;AFqCN;EAAa;;;AACb;EAAc;;;AAEd;EAAiB;;;AACjB;EAAiB;;;AAIjB;EGpDE;EACA;EACA;EACA;EACA;;;ACHF;ECCE;;;ADGF;ECHE;;;ACaF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAkBE;;;AAGF;EACE;EACA;EACA;EAIA;EACA;;AAGF;EAAoB;;;AAGpB;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;AAAA;EAEE;EACA;EACA;EACA;;;AAIF;AAAA;EAEE;EACA;EACA;EACA;;;AAIF;EACE;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAQF;EACE;EACA;EACA;EACA;EACA;EACA;;AhD/DE;EgDyDJ;IAQI;;;;AAIJ;EAA6C;;;AAC7C;EAAuD;;;AACvD;EAAuD;;;AACvD;EAAuD;;;AAEvD;EACE;EACA;EACA;EACA;EACA;;AhD/EE;EgD0EJ;IAOI;;;;AAIJ;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAQF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EAAyC;;;AAEzC;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EAAuC;;;AAEvC;EAAuC;;;AAOvC;AAAA;EAEE;EACA;EACA;EACA;EACA;;AhDrKE;EgD+JJ;AAAA;IAQI;;;;AAIJ;EAAsC;;;AAEtC;EAAkC;;;AAOlC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EAAU;;AAEV;EAAU;;;AAGZ;EACE;;AACA;EACE;;;AhD/MA;EgDoNF;IACE;;;AASJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;IACE;;EAEF;IACE;;;AASJ;EACE,kB1DrUS;E0DsUT;EACA;EACA;EACA;EACA;EACA;EACA,a1DhT4B;E0DiT5B;EACA;EACA;;;AAMF;EAAkC;;;AAElC;EACE;EACA;EACA;EACA;EACA;;;AAQF;EACE;EACA;EACA;EACA;EACA;EACA,kB1D1WS;E0D2WT;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAIF;EAAyC;;;AAGzC;EAAyB;;;AAEzB;EACE;EACA;EACA;;;A/D7TF;AgElFA;AAIA;AAAA;AAAA;;AAAA;AAAA;EAOA;IACE;IACA;IACA;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;AAAA;IAEE;IACA;;EAGF;AAAA;IAEE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;IACA;IACA;;EAGF;IACE;MACE;;IAGF;MACE;;;EAIJ;IACE;MACE;;IAGF;MACE;;;EAIJ;IACE;IACA;;AAGF;EAEA;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;IACA;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;AAGF;EAEA;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;IACA;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;;;EAIJ;IACE;MACE;;IAGF;MACE;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;;;EAIJ;IACE;MACE;;IAGF;MACE;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;;EAIJ;IACE;IACA;IACA;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;IACA;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;IACA;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;IACA;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;IACA;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;IACA;IACA;;EAGF;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;IACA;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;AAGF;EAEA;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;AAGF;EAEA;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;MACA;MACA;;IAGF;MACE;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;IAGF;MACE;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;;AjD5oGE;EfgCF;IACE;;EAGF;IACE;;EAGF;AAAA;IAEE;;EAGF;AAAA;IAEE;IACA;;EAGF;IACE;;;AAWJ;EACE;;;AAGF;EACE;EACA;EACA;;AACA;EACE;;;AAIJ;EACE;EACA;;AAEA;AAAA;AAAA;EAGE;;;AAIJ;EACE;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;;AenGE;Ef4FJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;IAUI;;;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAQE;;AelHE;Ef0GJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;IAWI;;;;AexGA;Ef6GF;IACE;IACA;;;AAIJ;EAAkB;;;AAGhB;EADF;IAEI;;;;AepIA;EfwIJ;IAEI;;;;AAKJ;EACE;EACA;EACA;;;AAOF;EACE;EACA;EACA;EACA;EACA;EACA;;Ae/JE;EfyJJ;IASI;IACA;IACA;;;AAEF;EACE;EACA;;;AAIJ;EACE;;;AAIA;EADF;IAEI;IACA;IACA;;;;AAIJ;EAEE,YK5Nc;EL6Nd;;;AAGF;EAAuB;;;AAEvB;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EAAsB;;AAEtB;EACE;;;AAKF;EAAgB;;;AAKd;EAGE;IAEE;;;AAMJ;EAFF;AAAA;AAGI;AACA;;;;AAMJ;EACE,OK1RO;;AL8RP;EACE,OK/RK;;ALiSP;EACE,OKlSK;;ALmSL;EACE,OKpSG;;ALsSL;EAEE;;AAGJ;EACE;IACE,OKhSQ;;ELkSV;IACE,OKnSQ;;ELoSR;IACE,OKrSM;;ELuSR;IAEE;;;;AAOV;EACE;EACA;;;AAIA;EADF;IAEI;IACA;;;AAGF;EACE;;Ae1RA;EfyRF;IAII;;;;AAKN;EAAiC;;;AAEjC;AAAA;EAEE;;;AAGF;EACE;;;AAIA;EADF;IAEI;IACA;;;;AehTA;EfoTJ;AAAA;IAGI;IACA;;;;Ae3SA;EfgTF;IACE;;EAEA;IACE;IACA;IACA;IACA;;EAKF;IAAY;;EAEZ;IAAY;;EAIZ;IAAY;;;AAIhB;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EAAa;;;Ae/VT;EfiWJ;IAEI;;EAEA;IACE;IACA;IACA;IACA;IACA;IACA;IACA;;;;AAMJ;EACE,OKlaO;;AU4DP;EfwWF;IAEI;AACA;;;;Ae3WF;EfgXJ;IAEI;AACA;;;AehYA;Ef6XJ;IAOI;;EAEA;IACE;;;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA,OKjdO;ELkdP;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIA;EACE;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;EACA,OKzfO;;AL4fT;EACE;;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EAAQ;;AAER;EAEE;;;AAIJ;EACE,OKhhBS;;ALkhBT;EAEE;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;EoBviBF;EACA;;;ApB4iBF;EoB7iBE;EACA;;;ApBgjBF;EACE;EACA;EACA;;AenhBE;EfghBJ;IAMI;IACA;IACA;IACA;IACA;;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA,OKhlBO;ELilBP;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;;Ae/iBA;Ef+hBF;IAmBI;IACA;IACA;IACA;IACA;IACA;;;AAGF;EACE;;Ae3jBF;Ef0jBA;IAII;;;;AAON;EACE;EACA;;AevkBA;EfqkBF;IAKI;;;;AAKN;EACE;EACA;;AAEA;EAJF;IAKI;;EACA;IAAiB;;;AerlBjB;Ef+kBJ;IAUI;;;;AAIJ;EACE;;AACA;EAAiB;;Ae/lBf;Ef6lBJ;IAKI;;;;AAIJ;EACE;EACA;;;AAKA;EAAU;;AAEV;EACE;;AAGF;EACE;EACA;;AAGF;EAAO;;;AAGT;EACE;;;Ae5nBE;Ef+nBJ;IAEI;;;;AAIJ;EACE;;;AAGF;EAAsB;;;AezoBlB;Ef6oBF;IACE;IACA;IACA;IACA;IACA;;EAEA;IACE;IACA;IACA;IACA;IACA;;EAEA;IACE;;;AAWR;AAAA;EAEE;EACA;;;AAQF;EACE;EAEA,kBACE;EAGF;EACA;EACA;EACA;EACA;EACA;;AejrBE;EfqqBJ;IAeI;IACA;;;AelsBA;EfkrBJ;IAoBI;IACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACA;EACA;;AAGJ;AACE;EACA;EACA;;AAEA;EAEE;EACA;;AAGF;EACE;EACA;;AAGF;EAAS;;AAGX;EACE;EACA;;AAGF;AAAA;EAEE;;;AAKJ;EACE;IACA;;EAED;IACC;;EAED;IACC;;;AAOF;AAAA;AAAA;EAGE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAAY;;AACZ;EAAY;;AAEZ;EAAc;;;AAKd;EAAc;;AezyBZ;Ef2yBF;IAEI;IACA;IACA;IACA;IACA;IACA;;EAGE;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAAW;;AAGb;EAAyB;;AAEzB;EAAyB;EAAW;;AAGtC;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;Aer2BF;Efm2BA;IAKI;IACA;;;AAKN;EAAO;;;AAGT;EACE;AAAA;IAEE;;EAGF;IAAa;;;AAGf;EACE;EACA;;AAEA;EAJF;IAKI;;;AAGF;EARF;IASI;;;AAGF;EAAK;;;AAGP;EACE;EACA,OK17BS;EL27BT;EACA;EACA;EACA;EACA;;Aeh5BE;Efy4BJ;IAUI;;;AAGF;AAAA;EAEE;EACA;EACA;EACA;;AAEA;AAAA;EACE;;AAQJ;EACE;;;AAKF;EAEE;EACA;;;AAIJ;EACE;EACA,aAx3B8B;EAy3B9B;EACA;EACA;EACA;;AAEA;EARF;IASI;IACA;IACA;IACA;IACA;;;AAGF;EACE;;AAEA;EACE;EACA;EACA;;AAGF;EAAiB;;AAIf;EAAO;;AAIX;EAAK;;AAEL;EACE;;;AASJ;EACE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;;AAEA;AAAA;EACE;;;AAIJ;EACE;EACA;;;AAOF;EACE;EACA,kBK9hCc;;AL+hCd;EACE;EACA;EACA;EACA;EACA;;AengCA;Ef8/BF;IAQI;;;AAIJ;EACE;;Ae3gCA;Ef0gCF;IAII;;;;AAMJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AAIJ;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;AejjCE;Ef6iCJ;IAOI;;EAEA;IACE;IACA;IACA;IACA;IACA;IACA;;;;AAKN;EAAa;;;AAOb;EAAS;;;AAET;EAAyB;;;AAEzB;EACE;EACA;EACA;;Ae/kCE;Ef4kCJ;IAMI;;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;;AAIJ;EACE;;AAEA;EACE;EACA;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EAAO;;AAEP;EAEE;EACA;;;AASJ;EACE;EACA;EACA;EACA;;AAEA;EACE;;Ae1pCA;EfypCF;IAII;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;;Ae9rCA;Ef6rCF;IAII;;;AAIJ;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AeptCA;EfmtCF;IAII;;;AevtCF;EfmtCF;IAOI;;;;AAKN;AAAA;EAEE;EACA,aArqC8B;EAsqC9B;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;AepvCE;EfkvCJ;IAKI;IACA;;;AAGF;EACE;EACA;;;AAIJ;EACE;EACA;;;AAQF;EACE;EACA;EACA;EAAuC;;Ae9wCrC;Ef2wCJ;IAOI;;;AAGF;EACE;EACA;;AevxCA;EfqxCF;IAKI;IACA;;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAKN;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAAU;;AAEV;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;;AAYV;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAUF;EACE;EACA;;Ae/4CA;Ef64CF;IAKI;;;AAIJ;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EAAI;;AAEJ;EACE;;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;;;AAUF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EAAgB;;;AAGlB;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;;;AAKN;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;AACA;EACE;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AeziDA;EfgiDJ;IAaI;;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EAEE;;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAQF;EACE;EACA;EACA;EACA,OKxpDS;;AL0pDT;EAAI,OK1pDK;;AU2CP;EfymDJ;IASI;;;AAGF;EACE;EACA;;Ae1mDA;Ef6mDF;IAEI;IACA;;;AAEF;EACE;;AAIJ;EACE;EACA;;AAGF;EACE;;Ae7nDA;Ef4nDF;IAII;IACA;;;AAIJ;EACE;EACA;EACA;EACA;;AetpDA;EfkpDF;IAOI;;;AezpDF;EfkpDF;IAWI;;;AAGF;EACE;EACA;;AerpDF;EfmpDA;IAKI;IACA;;;AetqDJ;Ef0qDI;IACE;;;AAIJ;EACE;;AAGF;EACE;EACA;;AexqDJ;EfsqDE;IAKI;;;AAMR;EACE;EACA;EACA;;AeprDA;EfirDF;IAMI;IACA;;;;AAKN;EACE,OK1vDS;;AL4vDT;EAAI,OK5vDK;;AL+vDP;EACE;;AAEA;EAEE;;AAKF;EAEE;;;AAYR;EACE;;;AAGF;EACE;EACA;EACA;;Ae/uDE;Ef4uDJ;IAMI;;;AAEF;EACE;;AAEF;EACE;;AAGF;EACE;;;AAUJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;IACE;IACA;IACA;IACA;;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAKA;EACE;EACA;EACA;;;AAGF;AACA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;AAAA;AAAA;EAGA;AAAA;EAEA;;;AAGF;AACA;AAAA;EAEE;EACA;;;AAEF;AACA;EACE;EACA;;;AAEF;AAAA;AAAA;AAGA;EACE;EACA;EACA;;;AAEF;AAAA;;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AAAA;EAEE;EACA;EACA;;;AAGF;AACA;EACE;;;AAEF;EACE;;;AAGF;AACA;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAKF;AACA;AAAA;EAEE;EACA;;;AAGF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAKF;AACA;AAAA;EAEE;EACA;;;AAGF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;IACE;;;AAIJ;EACE;EACA;EACA;;;AAGF;AACA;EACE;EACA,aAz8D8B;EA08D9B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAgBF;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA,OKtlEO;;ALwlEP;EACE;;AAGF;EACE;;AAGF;EAEE;EACA;;;AAKN;EACE;EACA;;;AAGF;EACE;;;AAEF;AAAA;AAAA;EAGE,YKvmEc;ELwmEd;;;AAEF;AAAA;EAEE,YK5mEc;EL6mEd;;;AAEF;EACE;;;AAEA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAEF;AAAA;AAAA;AAAA;EAIE;EACA;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;IACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;;AAQF;EACE;EACA;;AAEA;EACE;;AAEA;EACE,kBK1rEQ;EL2rER;;AAKN;EACE;EACA;EACA;;;AAWJ;EACE;EACA;EACA,cK/sEc;;;ALktEhB;EACE;;;AAOF;EACE;;;AAOF;EACE;EACA;EACA;EACA;;AetsEE;EfysEA;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAIJ;EACE;EACA;;AAGF;EAAc;;AAEd;EACE;EACA;;AACA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EAEE;EACA;;AAIJ;EACE,aAvsE4B;;Ae7D5B;EfmwEF;IAII;;;AAIJ;EACE;EACA,aK5xE0B;EL6xE1B;EACA;;AAGF;EAAa;;;AAaf;EAAe,kBALJ;;;AAMX;EAAc,kBALJ;;;AAMV;EAAa,kBALJ;;;AAMT;EAAe,kBALJ;;;AAOX;EACE;EACA;;AACA;EAEE;EACA,kBKr1EO;;ALw1ET;EAAe;;AAEf;EACE;EACA;EACA;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAEA;EACE;;AAOF;EACE;;;AAMJ;EAEE,kBApDO;;;AAyDT;EAEE,kBA1DM;;;AA+DR;EAEE,kBAhEK;;;AAqEP;EAEE,kBAtEO;;;AA+EX;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAAgB;;AAEhB;EACE;EACA;EACA,aAp0E0B;EAq0E1B;EACA;EACA;EACA;;AAGF;EAAa,kBKt7EN;;;AL07EX;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EAAoB;;;AAEpB;EAAkB;;;AAElB;EAAmB;;;AAEnB;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE","file":"landio.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../scss/landio.scss","../scss/_fonts.scss","../scss/_icomoon.scss","../scss/bootstrap/_print.scss","../scss/bootstrap/_variables.scss","../scss/_landio-variables.scss","../scss/bootstrap/_reboot.scss","../scss/bootstrap/mixins/_hover.scss","../scss/bootstrap/_type.scss","../scss/bootstrap/mixins/_lists.scss","../scss/bootstrap/_images.scss","../scss/bootstrap/mixins/_image.scss","../scss/bootstrap/mixins/_border-radius.scss","../scss/bootstrap/_grid.scss","../scss/bootstrap/mixins/_grid.scss","../scss/bootstrap/mixins/_breakpoints.scss","../scss/bootstrap/mixins/_grid-framework.scss","../scss/bootstrap/_forms.scss","../scss/bootstrap/mixins/_transition.scss","../scss/bootstrap/mixins/_forms.scss","../scss/bootstrap/mixins/_gradients.scss","../scss/bootstrap/_buttons.scss","../scss/bootstrap/mixins/_buttons.scss","../scss/bootstrap/_transitions.scss","../scss/bootstrap/_dropdown.scss","../scss/bootstrap/mixins/_caret.scss","../scss/bootstrap/mixins/_nav-divider.scss","../scss/bootstrap/_custom-forms.scss","../scss/bootstrap/_nav.scss","../scss/bootstrap/_navbar.scss","../scss/bootstrap/_card.scss","../scss/bootstrap/_badge.scss","../scss/bootstrap/mixins/_badge.scss","../scss/bootstrap/_jumbotron.scss","../scss/bootstrap/_alert.scss","../scss/bootstrap/mixins/_alert.scss","../scss/bootstrap/_media.scss","../scss/bootstrap/_list-group.scss","../scss/bootstrap/mixins/_list-group.scss","../scss/bootstrap/_modal.scss","../scss/bootstrap/_carousel.scss","../scss/bootstrap/utilities/_align.scss","../scss/bootstrap/mixins/_background-variant.scss","../scss/bootstrap/utilities/_background.scss","../scss/bootstrap/utilities/_borders.scss","../scss/bootstrap/mixins/_clearfix.scss","../scss/bootstrap/utilities/_display.scss","../scss/bootstrap/utilities/_embed.scss","../scss/bootstrap/utilities/_flex.scss","../scss/bootstrap/utilities/_float.scss","../scss/bootstrap/mixins/_float.scss","../scss/bootstrap/utilities/_position.scss","../scss/bootstrap/utilities/_screenreaders.scss","../scss/bootstrap/mixins/_screen-reader.scss","../scss/bootstrap/utilities/_shadows.scss","../scss/bootstrap/utilities/_sizing.scss","../scss/bootstrap/utilities/_spacing.scss","../scss/bootstrap/utilities/_text.scss","../scss/bootstrap/mixins/_text-truncate.scss","../scss/bootstrap/mixins/_text-emphasis.scss","../scss/bootstrap/mixins/_text-hide.scss","../scss/bootstrap/utilities/_visibility.scss","../scss/bootstrap/mixins/_visibility.scss","../scss/plugins/_videojs-landio-skin.scss","../scss/plugins/_animate.scss"],"names":[],"mappings":";AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;ACAA;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAEF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;ACxPF;EACE;EACA;EACA;EAIA;EACA;EACA;;AAGF;AACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;;;AAGF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAIF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;ACn9CE;EACE;AAAA;AAAA;IAKE;IAEA;;EAIA;IACE;;EASJ;IACE;;EAcF;IACE;;EAEF;AAAA;IAEE;IACA;;EAQF;IACE;;EAGF;AAAA;IAEE;;EAGF;AAAA;AAAA;IAGE;IACA;;EAGF;AAAA;IAEE;;EAQF;IACE,MC61B8B;;ED31BhC;IACE;;EAEF;IACE;;EAIF;IACE;;EAEF;IACE;;EAGF;IACE;;EAEA;AAAA;IAEE;;EAKF;AAAA;IAEE;;EAIJ;IACE;;EAEA;AAAA;AAAA;AAAA;IAIE,cElHG;;EFsHP;IACE;IACA,cExHK;;;ACKX;AAAA;AAAA;EAGE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAKA;EACE;;AAMJ;EACE;;;AAWF;EACE;EACA,aDb4B;ECc5B,WDpD4B;ECqD5B,aDtD4B;ECuD5B,aDd4B;ECe5B,OD7CS;EC8CT;EACA,kBDnDS;;;AC2DX;EACE;;;AASF;EACE;EACA;EACA;;;AAaF;EACE;EACA,eF6K4B;;;AErK9B;EACE;EACA,eFkE0B;;;AExD5B;AAAA;EAEE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;AAAA;AAAA;EAGE;EACA;;;AAGF;AAAA;AAAA;AAAA;EAIE;;;AAGF;EACE,aDvG4B;;;AC0G9B;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAIF;AAAA;EAEE;;;AAIF;EACE;;;AAQF;AAAA;EAEE;EACA;EACA;EACA;;;AAGF;EAAM;;;AACN;EAAM;;;AAON;EACE,OF/B0B;EEgC1B,iBF/B0B;EEgC1B;EACA;;AC7LA;EDgME,OFnCwB;EEoCxB,iBDrKwB;;;AC+K5B;EACE;EACA;;ACzMA;ED4ME;EACA;;AAGF;EACE;;;AASJ;AAAA;AAAA;AAAA;EAIE,aFa4B;EEZ5B;;;AAGF;EAEE;EAEA;EAEA;EAGA;;;AAQF;EAEE;;;AAQF;EACE;EACA;;;AAGF;EAGE;EACA;;;AAQF;EACE;;;AAGF;EACE,aF8B4B;EE7B5B,gBF6B4B;EE5B5B,ODrRS;ECsRT;EACA;;;AAGF;EAGE;;;AAQF;EAEE;EACA,eF+FsC;;;AEzFxC;EACE;;;AAOF;EACE;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAMF;AAAA;AAAA;AAAA;EAIE;;;AAIF;AAAA;AAAA;AAAA;EAIE;EACA;;;AAGF;AAAA;EAEE;EACA;;;AAIF;AAAA;AAAA;AAAA;EASE;;;AAGF;EACE;EAEA;;;AAGF;EAME;EAEA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAIF;AAAA;EAEE;;;AAGF;EAKE;EACA;;;AAOF;AAAA;EAEE;;;AAQF;EACE;EACA;;;AAOF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAKF;EACE;;;AE3dF;AAAA;EAEE,eJyQ4B;EIxQ5B,aJyQ4B;EIxQ5B,aJyQ4B;EIxQ5B,aHuC4B;EGtC5B,OJyQ4B;;;AItQ9B;EAAU,WJ2PoB;;;AI1P9B;EAAU,WHgCoB;;;AG/B9B;EAAU,WJ2PoB;;;AI1P9B;EAAU,WJ2PoB;;;AI1P9B;EAAU,WJ2PoB;;;AI1P9B;EAAU,WH6BoB;;;AG3B9B;EACE,WH6B4B;EG5B5B,aJ2Q4B;;;AIvQ9B;EACE,WJ0P4B;EIzP5B,aJ8P4B;EI7P5B,aHmB4B;;;AGjB9B;EACE,WJsP4B;EIrP5B,aJ0P4B;EIzP5B,aHc4B;;;AGZ9B;EACE,WHY4B;EGX5B,aJsP4B;EIrP5B,aHS4B;;;AGP9B;EACE,WJ8O4B;EI7O5B,aJkP4B;EIjP5B,aHI4B;;;AGI9B;EACE,YJwEO;EIvEP,eJuEO;EItEP;EACA;;;AAQF;AAAA;EAEE,WJiO4B;EIhO5B,aH/D4B;;;AGkE9B;AAAA;EAEE,SJqO4B;EIpO5B,kBJ6O4B;;;AIrO9B;EC/EE;EACA;;;ADmFF;ECpFE;EACA;;;ADsFF;EACE;;AAEA;EACE,cJuN0B;;;AI7M9B;EACE;EACA;;;AAIF;EACE,eJeO;EIdP,WJyL4B;;;AItL9B;EACE;EACA;EACA,OHvGS;;AGyGT;EACE;;;AEnHJ;ECIE;EAGA;;;ADDF;EACE,SN61BkC;EM51BlC,kBLFS;EKGT;EEZE,eR+N0B;EOxN5B;EAGA;;;ADcF;EAEE;;;AAGF;EACE;EACA;;;AAGF;EACE,WN80BkC;EM70BlC,OLxBS;;;AQXT;ECAA;EACA;EACA;EACA;EACA;;ACmDE;EFvDF;ICYI,WVuLiB;;;AW5InB;EFvDF;ICYI,WVuLiB;;;AW5InB;EFvDF;ICYI,WVuLiB;;;AW5InB;EFvDF;ICYI,WVuLiB;;;;ASvLrB;ECZA;EACA;EACA;EACA;EACA;;;ADkBA;ECJA;EACA;EACA;EACA;;;ADOA;EACE;EACA;;AAEA;AAAA;EAEE;EACA;;;AGjCJ;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;EACA;;;AAmBE;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAIA;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEFM;EFFN;EAIA;;;AEGI;EAAwB;;;AAExB;EAAuB;;;AAGrB;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AACX;EAAwB,OADb;;;AAOT;EFTR;;;AESQ;EFTR;;;AESQ;EFTR;;;AESQ;EFTR;;;AESQ;EFTR;;;AESQ;EFTR;;;AESQ;EFTR;;;AESQ;EFTR;;;AESQ;EFTR;;;AESQ;EFTR;;;AESQ;EFTR;;;ACUE;EC7BE;IACE;IACA;IACA;;EAEF;IACE;IACA;IACA;;EAIA;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEGI;IAAwB;;EAExB;IAAuB;;EAGrB;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EAOT;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;;ACUE;EC7BE;IACE;IACA;IACA;;EAEF;IACE;IACA;IACA;;EAIA;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEGI;IAAwB;;EAExB;IAAuB;;EAGrB;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EAOT;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;;ACUE;EC7BE;IACE;IACA;IACA;;EAEF;IACE;IACA;IACA;;EAIA;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEGI;IAAwB;;EAExB;IAAuB;;EAGrB;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EAOT;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;;ACUE;EC7BE;IACE;IACA;IACA;;EAEF;IACE;IACA;IACA;;EAIA;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEFM;IFFN;IAIA;;EEGI;IAAwB;;EAExB;IAAuB;;EAGrB;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EACX;IAAwB,OADb;;EAOT;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;EESQ;IFTR;;;AG5CF;EACE;EACA;EACA,QbobsC;EanbtC;EACA,WZJ4B;EYK5B,aZoD4B;EYnD5B,OZIS;EYHT,kBZDS;EYET;EACA;EAKE,eb8M0B;Ec9NxB,YDuBJ;;ACnBA;EDHF;ICII;;;ADqBF;EACE;EACA;;AEpBF;EACE,OdGO;EcFP,kBdFO;EcGP,cfkaoC;EejapC;EAKE,Yf6UwB;;Aa3T5B;EACE,OZvBO;EYyBP;;AAQF;EAEE,kBZtCO;EYwCP;;;AAKF;EAME,OZjDO;EYkDP,kBZtDO;;;AY2DX;AAAA;EAEE;EACA;;;AAUF;EACE;EACA;EACA;EACA;EACA,aZ1B4B;;;AY6B9B;EACE;EACA;EACA,WbgK4B;Ea/J5B,ab4H4B;;;AazH9B;EACE;EACA;EACA,Wb0J4B;EazJ5B,absH4B;;;Aa7G9B;EACE;EACA;EACA,aZtD4B;EYuD5B,gBZvD4B;EYwD5B;EACA,aZvD4B;EYwD5B,OZvGS;EYwGT;EACA;EACA;;AAEA;EAEE;EACA;;;AAYJ;EACE,QbmTsC;EalTtC;EACA,WbkH4B;EajH5B,ab8E4B;EQ1N1B,eRiO0B;;;AajF9B;EACE,Qb8SsC;Ea7StC;EACA,WbyG4B;EaxG5B,abqE4B;EQzN1B,eRgO0B;;;AatE5B;EAEE;;;AAIJ;EACE;;;AASF;EACE,ebiSsC;;;Aa9RxC;EACE;EACA,YbmRsC;;;Aa3QxC;EACE;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;;;AASJ;EACE;EACA;EACA,cbwPsC;;;AarPxC;EACE;EACA,YZvIsC;EYwItC;;AAEA;EACE,OZ1MO;;;AY8MX;EACE;;;AAGF;EACE;EACA;EACA;EACA,cbuOsC;;AapOtC;EACE;EACA;EACA,cbkOoC;EajOpC;;;AEhNF;EACE;EACA;EACA,YfuaoC;EetapC,WfoQ0B;EenQ1B,Of4hBgC;;;AezhBlC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WfoN0B;EenN1B,adC0B;EcA1B;EACA;EP5CA,eR+N0B;;;Ae7K1B;AAAA;AAAA;EAEE,cfsgB8B;;AepgB9B;AAAA;AAAA;EACE,cfmgB4B;EelgB5B;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;;AAQF;AAAA;AAAA;EAEE;;;AAQF;EACE,Of0e4B;;Aeve9B;AAAA;AAAA;EAEE;;;AAQF;EACE,Of4d4B;;Ae1d5B;EACE;;AAIJ;AAAA;AAAA;EAEE;;AAIA;ECzGJ,kBD0G2B;;AAKvB;EACE;;;AAUJ;EACE,cf6b4B;;Ae3b5B;EAAW;;AAGb;AAAA;AAAA;EAEE;;AAIA;EACE;;;AAhHR;EACE;EACA;EACA,YfuaoC;EetapC,WfoQ0B;EenQ1B,Of6hBgC;;;Ae1hBlC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WfoN0B;EenN1B,adC0B;EcA1B;EACA;EP5CA,eR+N0B;;;Ae7K1B;AAAA;AAAA;EAEE,cfugB8B;;AergB9B;AAAA;AAAA;EACE,cfogB4B;EengB5B;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;;AAQF;AAAA;AAAA;EAEE;;;AAQF;EACE,Of2e4B;;Aexe9B;AAAA;AAAA;EAEE;;;AAQF;EACE,Of6d4B;;Ae3d5B;EACE;;AAIJ;AAAA;AAAA;EAEE;;AAIA;ECzGJ,kBD0G2B;;AAKvB;EACE;;;AAUJ;EACE,cf8b4B;;Ae5b5B;EAAW;;AAGb;AAAA;AAAA;EAEE;;AAIA;EACE;;;AFwHV;EACE;EACA;EACA;;AAKA;EACE;;AFlNA;EEuNA;IACE;IACA;IACA;IACA;;EAIF;IACE;IACA;IACA;IACA;IACA;;EAIF;IACE;IACA;IACA;;EAIF;IACE;;EAGF;AAAA;IAEE;;EAKF;IACE;IACA;IACA;IACA;IACA;;EAEF;IACE;IACA;IACA,cb2IkC;Ia1IlC;;EAGF;IACE;IACA;;EAEF;IACE;;;;AInUN;EACE;EACA,ahBsC4B;EgBrC5B;EACA;EACA;EACA;EACA;ECsFA;EACA,WjB7F4B;EiB8F5B,ajBrC4B;EiBwC1B,elB2H0B;Ec9NxB,YGUJ;;AHNA;EGHF;IHII;;;AXMF;EcGE;;AAGF;EAEE;EACA,YjB0U0B;;AiBtU5B;EAEE,SjBuW0B;;AiBlW5B;EACE;;AAcJ;AAAA;EAEE;;;AASA;ECxDA;EFAE,kBhB6EW;EkB3Eb,clB2Ea;;AGvEb;EeAE;EFNA,kBED2D;EAS3D,cATqG;;AAYvG;EAMI;;AAKJ;EAEE;EACA,kBlBoDW;EkBnDX,clBmDW;;AkBhDb;EAGE;EACA,kBAlC+I;EAsC/I,cAtCyL;;AAwCzL;EAKI;;;ADYN;ECxDA;EFAE,kBhB6EW;EkB3Eb,clB2Ea;;AGvEb;EeAE;EFNA,kBED2D;EAS3D,cATqG;;AAYvG;EAMI;;AAKJ;EAEE;EACA,kBlBoDW;EkBnDX,clBmDW;;AkBhDb;EAGE;EACA,kBAlC+I;EAsC/I,cAtCyL;;AAwCzL;EAKI;;;ADYN;ECxDA;EFAE,kBhB6EW;EkB3Eb,clB2Ea;;AGvEb;EeAE;EFNA,kBED2D;EAS3D,cATqG;;AAYvG;EAMI;;AAKJ;EAEE;EACA,kBlBoDW;EkBnDX,clBmDW;;AkBhDb;EAGE;EACA,kBAlC+I;EAsC/I,cAtCyL;;AAwCzL;EAKI;;;ADYN;ECxDA;EFAE,kBhB6EW;EkB3Eb,clB2Ea;;AGvEb;EeAE;EFNA,kBED2D;EAS3D,cATqG;;AAYvG;EAMI;;AAKJ;EAEE;EACA,kBlBoDW;EkBnDX,clBmDW;;AkBhDb;EAGE;EACA,kBAlC+I;EAsC/I,cAtCyL;;AAwCzL;EAKI;;;ADYN;ECxDA;EFAE,kBhB6EW;EkB3Eb,clB2Ea;;AGvEb;EeAE;EFNA,kBED2D;EAS3D,cATqG;;AAYvG;EAMI;;AAKJ;EAEE;EACA,kBlBoDW;EkBnDX,clBmDW;;AkBhDb;EAGE;EACA,kBAlC+I;EAsC/I,cAtCyL;;AAwCzL;EAKI;;;ADYN;ECxDA;EFAE,kBhB6EW;EkB3Eb,clB2Ea;;AGvEb;EeAE;EFNA,kBED2D;EAS3D,cATqG;;AAYvG;EAMI;;AAKJ;EAEE;EACA,kBlBoDW;EkBnDX,clBmDW;;AkBhDb;EAGE;EACA,kBAlC+I;EAsC/I,cAtCyL;;AAwCzL;EAKI;;;ADYN;ECxDA;EFAE,kBhB6EW;EkB3Eb,clB2Ea;;AGvEb;EeAE;EFNA,kBED2D;EAS3D,cATqG;;AAYvG;EAMI;;AAKJ;EAEE;EACA,kBlBoDW;EkBnDX,clBmDW;;AkBhDb;EAGE;EACA,kBAlC+I;EAsC/I,cAtCyL;;AAwCzL;EAKI;;;ADYN;ECxDA;EFAE,kBhB6EW;EkB3Eb,clB2Ea;;AGvEb;EeAE;EFNA,kBED2D;EAS3D,cATqG;;AAYvG;EAMI;;AAKJ;EAEE;EACA,kBlBoDW;EkBnDX,clBmDW;;AkBhDb;EAGE;EACA,kBAlC+I;EAsC/I,cAtCyL;;AAwCzL;EAKI;;;ADkBN;ECXA,OlB0Ba;EkBzBb;EACA;EACA,clBuBa;;AkBrBb;EACE,OAPgD;EAQhD,kBlBmBW;EkBlBX,clBkBW;;AkBfb;EAEE;;AAGF;EAEE,OlBQW;EkBPX;;AAGF;EAGE;EACA;EACA,clBDW;;AkBGX;EAKI;;;ADvBN;ECXA,OlB0Ba;EkBzBb;EACA;EACA,clBuBa;;AkBrBb;EACE,OAPgD;EAQhD,kBlBmBW;EkBlBX,clBkBW;;AkBfb;EAEE;;AAGF;EAEE,OlBQW;EkBPX;;AAGF;EAGE;EACA;EACA,clBDW;;AkBGX;EAKI;;;ADvBN;ECXA,OlB0Ba;EkBzBb;EACA;EACA,clBuBa;;AkBrBb;EACE,OAPgD;EAQhD,kBlBmBW;EkBlBX,clBkBW;;AkBfb;EAEE;;AAGF;EAEE,OlBQW;EkBPX;;AAGF;EAGE;EACA;EACA,clBDW;;AkBGX;EAKI;;;ADvBN;ECXA,OlB0Ba;EkBzBb;EACA;EACA,clBuBa;;AkBrBb;EACE,OAPgD;EAQhD,kBlBmBW;EkBlBX,clBkBW;;AkBfb;EAEE;;AAGF;EAEE,OlBQW;EkBPX;;AAGF;EAGE;EACA;EACA,clBDW;;AkBGX;EAKI;;;ADvBN;ECXA,OlB0Ba;EkBzBb;EACA;EACA,clBuBa;;AkBrBb;EACE,OAPgD;EAQhD,kBlBmBW;EkBlBX,clBkBW;;AkBfb;EAEE;;AAGF;EAEE,OlBQW;EkBPX;;AAGF;EAGE;EACA;EACA,clBDW;;AkBGX;EAKI;;;ADvBN;ECXA,OlB0Ba;EkBzBb;EACA;EACA,clBuBa;;AkBrBb;EACE,OAPgD;EAQhD,kBlBmBW;EkBlBX,clBkBW;;AkBfb;EAEE;;AAGF;EAEE,OlBQW;EkBPX;;AAGF;EAGE;EACA;EACA,clBDW;;AkBGX;EAKI;;;ADvBN;ECXA,OlB0Ba;EkBzBb;EACA;EACA,clBuBa;;AkBrBb;EACE,OAPgD;EAQhD,kBlBmBW;EkBlBX,clBkBW;;AkBfb;EAEE;;AAGF;EAEE,OlBQW;EkBPX;;AAGF;EAGE;EACA;EACA,clBDW;;AkBGX;EAKI;;;ADvBN;ECXA,OlB0Ba;EkBzBb;EACA;EACA,clBuBa;;AkBrBb;EACE,OAPgD;EAQhD,kBlBmBW;EkBlBX,clBkBW;;AkBfb;EAEE;;AAGF;EAEE,OlBQW;EkBPX;;AAGF;EAGE;EACA;EACA,clBDW;;AkBGX;EAKI;;;ADZR;EACE,ahB1E4B;EgB2E5B,OjBsF0B;EiBrF1B;;AdtEA;EcyEE,OjBoFwB;EiBnFxB,iBhB9CwB;EgB+CxB;EACA;;AAGF;EAEE,iBhBrDwB;EgBsDxB;EACA;;AAGF;EAEE,OhBpFO;EgBqFP;;;AAWJ;ECbE;EACA,WlB4J4B;EkB3J5B,alBwH4B;EkBrH1B,elB4H0B;;;AiBhH9B;ECjBE;EACA,WlB6J4B;EkB5J5B,alByH4B;EkBtH1B,elB6H0B;;;AiBxG9B;EACE;EACA;;AAGA;EACE,YjBwQ0B;;;AiBhQ5B;AAAA;AAAA;EACE;;;AE1IJ;ELGM,YKFJ;;ALMA;EKPF;ILQI;;;AKLF;EACE;;;AAKF;EACE;;;AAIJ;EACE;EACA;EACA;ELdI,YKeJ;;ALXA;EKOF;ILNI;;;;AMTJ;AAAA;AAAA;AAAA;EAIE;;;ACwBE;EACE;EACA;EACA;EACA;EACA;EACA;EAlCJ;EACA;EACA;EACA;;AAyDE;EACE;;;ADhDN;EACE;EACA;EACA;EACA,SpBklBkC;EoBjlBlC;EACA;EACA,WpBijBkC;EoBhjBlC;EACA;EACA,WnBjB4B;EmBkB5B,OnBRS;EmBST;EACA;EACA,kBnBfS;EmBgBT;EACA;EZ1BE,eR+N0B;;;AoBhM9B;EACE;EACA;;;AAMA;EACE;EACA;EACA;EACA,epByhBgC;;AqB3iBhC;EACE;EACA;EACA;EACA;EACA;EACA;EA3BJ;EACA;EACA;EACA;;AAkDE;EACE;;;ADNJ;EACE;EACA;EACA;EACA;EACA,apB2gBgC;;AqB3iBhC;EACE;EACA;EACA;EACA;EACA;EACA;EApBJ;EACA;EACA;EACA;;AA2CE;EACE;;ADIF;EACE;;;AAMJ;EACE;EACA;EACA;EACA;EACA,cpB0fgC;;AqB3iBhC;EACE;EACA;EACA;EACA;EACA;EACA;;AAWA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EAlCN;EACA;EACA;;AAqCE;EACE;;ADqBF;EACE;;;AAQJ;EAIE;EACA;;;AAMJ;EElGE;EACA;EACA;EACA;;;AFsGF;EACE;EACA;EACA;EACA;EACA,anB7G4B;EmB8G5B,OnBjGS;EmBkGT;EACA;EACA;EACA;;AjBxGA;EiB2GE,OpBsdgC;EoBrdhC;EJtHA,kBfgFgC;;AmB0ClC;EAEE,OnBrHO;EmBsHP;EJ7HA,kBfkFgC;;AmB+ClC;EAEE,OnBzHO;EmB0HP;;;AAQJ;EACE;;;AAIF;EACE;EACA;EACA;EACA,WpBsG4B;EoBrG5B,OnB5IS;EmB6IT;;;AAIF;EACE;EACA;EACA,OnBjJS;;;AsBVX;EACE;EACA;EACA;EACA,cvB2csC;;;AuBxcxC;EACE;EACA,cvBucsC;;;AuBpcxC;EACE;EACA;EACA;;AAEA;EACE,OtBdO;EePP,kBhBsO0B;;AuB5M5B;EAEE,YvBsc4C;;AuBnc9C;EACE,OtBzBO;EsB0BP,kBvBoc4C;;AuB/b5C;EACE,OtB7BK;;AsB+BL;EACE,kBtBjCG;;;AsB2CX;EACE;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA,OvBuZoC;EuBtZpC,QvBsZoC;EuBrZpC;EACA;EACA;EACA,kBvB5DO;;AuBiET;EACE;EACA;EACA;EACA;EACA,OvBwYoC;EuBvYpC,QvBuYoC;EuBtYpC;EACA;EACA;EACA,iBvBqYoC;;;AuB3XtC;Ef9FE,eR+N0B;;AuB5H1B;EPjGA,kBhBsO0B;;AuBlI1B;EACE,kBvBoY0C;;AuB/X5C;EP1GA,kBhBsO0B;;AuBxH1B;EACE,kBvB8XgD;;AuBzXlD;EACE,kBvB0W0C;;AuBxW5C;EACE,kBvBuW0C;;;AuB7V9C;EACE,evB6W4C;;AuBzW5C;EPvIA,kBhBsO0B;;AuB5F1B;EACE,kBvBsW0C;;AuBjW5C;EACE,kBvB8U0C;;;AuBlUhD;EACE;EACA;EACA,QvBuRsC;EuBtRtC;EACA,atBxG4B;EsByG5B,OtBxJS;EsByJT;EACA;EACA,iBvBsVkC;EuBrVlC;EAEE,evBoD0B;EuB/C5B;;AAEA;EACE,cvB2PoC;EuB1PpC;EAIE,YvBgV8B;;AuB7UhC;EAME,OtBpLK;EsBqLL,kBtBzLK;;AsB6LT;EAEE;EACA,evB6SgC;EuB5ShC;;AAGF;EACE,OtBlMO;EsBmMP,kBtBpMO;;AsBwMT;EACE;;;AAIJ;EACE,QvBmOsC;EuBlOtC,avB2RkC;EuB1RlC,gBvB0RkC;EuBzRlC,WvB8SkC;;;AuB3SpC;EACE,QvB+NsC;EuB9NtC,avBoRkC;EuBnRlC,gBvBmRkC;EuBlRlC,WvB0SkC;;;AuBlSpC;EACE;EACA;EACA;EACA,QvB0MsC;EuBzMtC;;;AAGF;EACE;EACA;EACA;EACA,QvBkMsC;EuBjMtC;EACA;;AAEA;EACE,cvBkLoC;EuBjLpC,YvBkG0B;;AuBhG1B;EACE,cvB8KkC;;AuB1KtC;EACE,kBtB1PO;;AsB8PP;EACE,SvBwSa;;;AuBnSnB;EACE;EACA;EACA;EACA;EACA;EACA,QvBoKsC;EuBnKtC;EACA,atB3N4B;EsB4N5B,OtB3QS;EsB4QT,kBtBhRS;EsBiRT;Ef1RE,eR+N0B;;AuB+D5B;EACE;EACA;EACA;EACA;EACA;EACA;EACA,QvBmJoC;EuBlJpC;EACA,atB3O0B;EsB4O1B,OtB3RO;EsB4RP;EPvSA,kBfSO;EsBgSP;Ef3SA,ee4SuB;;;AAU3B;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAIA;EAA0B,YvB4Ne;;AuB3NzC;EAA0B,YvB2Ne;;AuB1NzC;EAA0B,YvB0Ne;;AuBvN3C;EACE;;AAGF;EACE,OvB4MyC;EuB3MzC,QvB2MyC;EuB1MzC;EP3UA,kBhBsO0B;EuBuG1B,QvB2MyC;EQ1hBzC,eR2hByC;Ec1hBvC,YSiVF;EACA;;AT9UF;ESqUA;ITpUE;;;AS+UA;EPnVA,kBhB6hByC;;AuBrM3C;EACE,OvBqLgC;EuBpLhC,QvBqLgC;EuBpLhC;EACA,QvBoLgC;EuBnLhC,kBvBtVO;EuBuVP;EfhWA,eRohBgC;;AuB/KlC;EACE,OvBiLyC;EuBhLzC,QvBgLyC;EgBrhBzC,kBhBsO0B;EuBiI1B,QvBiLyC;EQ1hBzC,eR2hByC;Ec1hBvC,YS2WF;EACA;;ATxWF;ESgWA;IT/VE;;;ASyWA;EP7WA,kBhB6hByC;;AuB3K3C;EACE,OvB2JgC;EuB1JhC,QvB2JgC;EuB1JhC;EACA,QvB0JgC;EuBzJhC,kBvBhXO;EuBiXP;Ef1XA,eRohBgC;;AuBrJlC;EACE,OvBuJyC;EuBtJzC,QvBsJyC;EuBrJzC;EACA,cvBtC0B;EuBuC1B,avBvC0B;EgB3V1B,kBhBsO0B;EuB8J1B,QvBoJyC;EQ1hBzC,eR2hByC;Ec1hBvC,YSwYF;EACA;;ATrYF;ES0XA;ITzXE;;;ASsYA;EP1YA,kBhB6hByC;;AuB9I3C;EACE,OvB8HgC;EuB7HhC,QvB8HgC;EuB7HhC;EACA,QvB6HgC;EuB5HhC;EACA;EACA;;AAIF;EACE,kBvBpZO;EQTP,eRohBgC;;AuBnHlC;EACE;EACA,kBvB1ZO;EQTP,eRohBgC;;;AuB5GpC;AAAA;AAAA;ETvaM,YS0aJ;;ATtaA;ESmaF;AAAA;AAAA;ITlaI;;;;AULJ;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;ArBCA;EqBEE;;AAIF;EACE,OvBPO;;;AuBeX;EACE;;AAEA;EACE;;AAGF;EACE;EhB7BA,wBRyN0B;EQxN1B,yBRwN0B;;AGnN5B;EqB2BI,cvB5BK;;AuB+BP;EACE,OvB/BK;EuBgCL;EACA;;AAIJ;AAAA;EAEE,OvBtCO;EuBuCP,kBvB3CO;EuB4CP,cvBsCgC;;AuBnClC;EAEE;EhBpDA,wBgBsD2B;EhBrD3B,yBgBqD2B;;;AAU7B;EhBtEE,eR+N0B;;AwBrJ5B;AAAA;EAEE,OvBnEO;EuBoEP,kBxB2J0B;;;AwBjJ5B;EACE;EACA;;;AAKF;EACE;EACA;EACA;;;AAUF;EACE;;AAEF;EACE;;;AClGJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAIA;AAAA;EAEE;EACA;EACA;EACA;;;AASJ;EACE;EACA,azBimBkC;EyBhmBlC,gBzBgmBkC;EyB/lBlC,czBkFO;EyBjFP,WzBkN4B;EyBjN5B;EACA;;AtBhCA;EsBmCE;;;AASJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;;AASJ;EACE;EACA,azByhBkC;EyBxhBlC,gBzBwhBkC;;;AyB5gBpC;EACE;EACA;EAGA;;;AAIF;EACE;EACA,WzBmJ4B;EyBlJ5B;EACA;EACA;EjB5GE,eR+N0B;;AGnN5B;EsBoGE;;AAIF;EACE;;;AAMJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;Ad7DE;EcyEI;AAAA;IAEE;IACA;;;AdzFN;EcoFA;IAUI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE,ezBiewB;IyBhexB,czBgewB;;EyB3d5B;AAAA;IAEE;;EAGF;IACE;IAGA;;EAGF;IACE;;;Ad/GN;EcyEI;AAAA;IAEE;IACA;;;AdzFN;EcoFA;IAUI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE,ezBiewB;IyBhexB,czBgewB;;EyB3d5B;AAAA;IAEE;;EAGF;IACE;IAGA;;EAGF;IACE;;;Ad/GN;EcyEI;AAAA;IAEE;IACA;;;AdzFN;EcoFA;IAUI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE,ezBiewB;IyBhexB,czBgewB;;EyB3d5B;AAAA;IAEE;;EAGF;IACE;IAGA;;EAGF;IACE;;;Ad/GN;EcyEI;AAAA;IAEE;IACA;;;AdzFN;EcoFA;IAUI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE,ezBiewB;IyBhexB,czBgewB;;EyB3d5B;AAAA;IAEE;;EAGF;IACE;IAGA;;EAGF;IACE;;;AAxCN;EAUI;EACA;;AATA;AAAA;EAEE;EACA;;AAQF;EACE;;AAEA;EACE;;AAGF;EACE,ezBiewB;EyBhexB,czBgewB;;AyB3d5B;AAAA;EAEE;;AAGF;EACE;EAGA;;AAGF;EACE;;;AAcR;EACE,OxBtLO;;AEDT;EsB0LI,OxBzLK;;AwB8LP;EACE,OxB/LK;;AEDT;EsBmMM,OzBwc4B;;AyBrc9B;EACE,OzBsc4B;;AyBlchC;AAAA;AAAA;AAAA;EAIE,OxB9MK;;AwBkNT;EACE,OxBnNO;EwBoNP,czB0bgC;;AyBvblC;EACE,kBzBqbgC;;AyBlblC;EACE,OxB5NO;;AwB6NP;EACE,OxB9NK;;AEDT;EsBkOM,OxBjOG;;;AwByOT;EACE,OxB9OO;;AEGT;EsB8OI,OxBjPK;;AwBsPP;EACE,OxBvPK;;AEGT;EsBuPM,OzB6Y4B;;AyB1Y9B;EACE,OzB2Y4B;;AyBvYhC;AAAA;AAAA;AAAA;EAIE,OxBtQK;;AwB0QT;EACE,OxB3QO;EwB4QP,czB+XgC;;AyB5XlC;EACE,kBzB0XgC;;AyBvXlC;EACE,OxBpRO;;AwBqRP;EACE,OxBtRK;;AEGT;EsBsRM,OxBzRG;;;AyBTX;EACE;EACA;EACA;EACA;EACA;EACA,kBzBGS;EyBFT;EACA;ElBRE,eR+N0B;;A0BpN5B;EACE;EACA;;AAIA;ElBXA,wBRyN0B;EQxN1B,yBRwN0B;;A0BxM1B;ElBHA,4BR2M0B;EQ1M1B,2BR0M0B;;;A0BlM9B;EAGE;EACA,S1BoqBkC;;;A0BjqBpC;EACE,e1B+pBkC;;;A0B5pBpC;EACE;EACA;;;AAGF;EACE;;;AvBtCA;EuB2CE;;AAGF;EACE,a1B8oBgC;;;A0BtoBpC;EACE;EACA;EACA,kB1BwoBkC;E0BvoBlC;;AAEA;ElBrEE,ekBsEuB;;AAIvB;EACE;;;AAKN;EACE;EACA,kB1BwnBkC;E0BvnBlC;;AAEA;ElBrFE,ekBsFuB;;;AAS3B;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA,S1B2lBkC;;;A0BxlBpC;EACE;ElBtHE,eRysBgC;;;A0B9kBpC;EACE;ElBtHE,wBRmsBgC;EQlsBhC,yBRksBgC;;;A0BzkBpC;EACE;ElB7GE,4BRqrBgC;EQprBhC,2BRorBgC;;;A0BjkBpC;EACE;EACA;;AAEA;EACE,e1BkkBgC;;AWvpBhC;EegFJ;IASI;IACA;IACA;;EAEA;IACE;IAEA;IACA;IACA,c1BqjB8B;I0BpjB9B;IACA,a1BmjB8B;;;;A0BziBpC;EACE;EACA;;AAIA;EACE,e1BkiBgC;;AWvpBhC;Ee8GJ;IAWI;;EAGA;IAEE;IACA;;EAEA;IACE;IACA;;EAKA;IlBnLJ,yBkBoLmC;IlBnLnC,4BkBmLmC;;EAE7B;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAIJ;IlBlLJ,wBkBmLkC;IlBlLlC,2BkBkLkC;;EAE5B;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAIJ;IlB1NJ,eR+N0B;;E0BFpB;AAAA;IlBvNN,wBRyN0B;IQxN1B,yBRwN0B;;E0BEpB;AAAA;IlB7MN,4BR2M0B;IQ1M1B,2BR0M0B;;E0BQtB;IlBvOJ,ekBwO6B;;EAEvB;AAAA;AAAA;AAAA;IlB1ON,ekB8O+B;;;;AAcjC;EACE,e1BucgC;;AW5oBhC;EemMJ;IAMI,c1BidgC;I0BhdhC,Y1BidgC;I0BhdhC;IACA;;EAEA;IACE;IACA;;;;AAWJ;EACE;EACA;;AAIA;EACE;;AAIJ;EACE;EACA;EACA;;AAGF;EACE;EACA;;;ACrSJ;EACE;EACA;EACA,W3BgwBkC;E2B/vBlC,a1BqC4B;E0BpC5B;EACA;EACA;EACA;EnBTE,eR+N0B;;A2BlN5B;EACE;;;AAKJ;EACE;EACA;;;AAOF;EACE,e3B6uBkC;E2B5uBlC,c3B4uBkC;EQ1wBhC,eR6wBgC;;;A2BtuBlC;EC1CA;EACA,kB5BiFa;;AGnEb;EyBVI;EACA;EACA;;;ADmCJ;EC1CA;EACA,kB5BiFa;;AGnEb;EyBVI;EACA;EACA;;;ADmCJ;EC1CA;EACA,kB5BiFa;;AGnEb;EyBVI;EACA;EACA;;;ADmCJ;EC1CA;EACA,kB5BiFa;;AGnEb;EyBVI;EACA;EACA;;;ADmCJ;EC1CA;EACA,kB5BiFa;;AGnEb;EyBVI;EACA;EACA;;;ADmCJ;EC1CA;EACA,kB5BiFa;;AGnEb;EyBVI;EACA;EACA;;;ADmCJ;EC1CA;EACA,kB5BiFa;;AGnEb;EyBVI;EACA;EACA;;;ADmCJ;EC1CA;EACA,kB5BiFa;;AGnEb;EyBVI;EACA;EACA;;;ACRN;EACE;EACA,e7BgsBkC;E6B/rBlC,kB5BYS;EOXP,eRgO0B;;AWxK1B;EkB5DJ;IAOI;;;;AAIJ;EACE;EACA;ErBTE,eqBUqB;;;ACVzB;EACE;EACA;EACA,e9BmzBkC;E8BlzBlC;EtBJE,eR+N0B;;;A8BtN9B;EAEE;;;AAIF;EACE,a7B0B4B;;;A6BlB9B;EACE;;AAGA;EACE;EACA;EACA;EACA;EACA;;;AAUF;EC9CA,OD+CqH;Ed1CnH,kBc0CuB;EC7CzB,cD6CqE;;AC3CrE;EACE;;AAGF;EACE;;;ADqCF;EC9CA,OD+CqH;Ed1CnH,kBc0CuB;EC7CzB,cD6CqE;;AC3CrE;EACE;;AAGF;EACE;;;ADqCF;EC9CA,OD+CqH;Ed1CnH,kBc0CuB;EC7CzB,cD6CqE;;AC3CrE;EACE;;AAGF;EACE;;;ADqCF;EC9CA,OD+CqH;Ed1CnH,kBc0CuB;EC7CzB,cD6CqE;;AC3CrE;EACE;;AAGF;EACE;;;ADqCF;EC9CA,OD+CqH;Ed1CnH,kBc0CuB;EC7CzB,cD6CqE;;AC3CrE;EACE;;AAGF;EACE;;;ADqCF;EC9CA,OD+CqH;Ed1CnH,kBc0CuB;EC7CzB,cD6CqE;;AC3CrE;EACE;;AAGF;EACE;;;ADqCF;EC9CA,OD+CqH;Ed1CnH,kBc0CuB;EC7CzB,cD6CqE;;AC3CrE;EACE;;AAGF;EACE;;;ADqCF;EC9CA,OD+CqH;Ed1CnH,kBc0CuB;EC7CzB,cD6CqE;;AC3CrE;EACE;;AAGF;EACE;;;ACVJ;EACE;EACA;;;AAGF;EACE;;;ACFF;EACE;EACA;EAGA;EACA;;;AASF;EACE;EACA,OhCJS;EgCKT;;A9BNA;E8BUE,OhCTO;EgCUP;EACA,kBhCdO;;AgCiBT;EACE,OhCfO;EgCgBP,kBhClBO;;;AgC2BX;EACE;EACA;EACA;EAEA;EACA,kBhCnCS;EgCoCT;;AAEA;EzBzCE,wBRyN0B;EQxN1B,yBRwN0B;;AiC5K5B;EACE;EzBhCA,4BR2M0B;EQ1M1B,2BR0M0B;;AGnN5B;E8B6CE;EACA;;AAGF;EAEE,OhCnDO;EgCoDP,kBhCvDO;;AgC2DT;EACE;EACA,OhC7DO;EgC8DP,kBjCiK0B;EiChK1B,cjCgK0B;;;AiCrJ5B;EACE;EACA;EzBrFA,eyBsFuB;;AAIvB;EACE;;AAKF;EACE;;;AClGJ;EACE,OD6GsE;EC5GtE,kBD4GuC;;A9BjGzC;E+BPM,ODwGkE;ECvGlE;;AAGF;EACE,OjCDG;EiCEH,kBDkGkE;ECjGlE,cDiGkE;;;AC9GxE;EACE,OD6GsE;EC5GtE,kBD4GuC;;A9BjGzC;E+BPM,ODwGkE;ECvGlE;;AAGF;EACE,OjCDG;EiCEH,kBDkGkE;ECjGlE,cDiGkE;;;AC9GxE;EACE,OD6GsE;EC5GtE,kBD4GuC;;A9BjGzC;E+BPM,ODwGkE;ECvGlE;;AAGF;EACE,OjCDG;EiCEH,kBDkGkE;ECjGlE,cDiGkE;;;AC9GxE;EACE,OD6GsE;EC5GtE,kBD4GuC;;A9BjGzC;E+BPM,ODwGkE;ECvGlE;;AAGF;EACE,OjCDG;EiCEH,kBDkGkE;ECjGlE,cDiGkE;;;AC9GxE;EACE,OD6GsE;EC5GtE,kBD4GuC;;A9BjGzC;E+BPM,ODwGkE;ECvGlE;;AAGF;EACE,OjCDG;EiCEH,kBDkGkE;ECjGlE,cDiGkE;;;AC9GxE;EACE,OD6GsE;EC5GtE,kBD4GuC;;A9BjGzC;E+BPM,ODwGkE;ECvGlE;;AAGF;EACE,OjCDG;EiCEH,kBDkGkE;ECjGlE,cDiGkE;;;AC9GxE;EACE,OD6GsE;EC5GtE,kBD4GuC;;A9BjGzC;E+BPM,ODwGkE;ECvGlE;;AAGF;EACE,OjCDG;EiCEH,kBDkGkE;ECjGlE,cDiGkE;;;AC9GxE;EACE,OD6GsE;EC5GtE,kBD4GuC;;A9BjGzC;E+BPM,ODwGkE;ECvGlE;;AAGF;EACE,OjCDG;EiCEH,kBDkGkE;ECjGlE,cDiGkE;;;AE3G1E;EAEE;;AAEA;EACE;EACA;;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA,SnCilBkC;EmChlBlC;EACA;EAGA;;;AAOF;EACE;EACA;EACA,QnCmvBkC;EmCjvBlC;;AAGA;ErBtCI,YqBuCF;EACA;;ArBpCF;EqBkCA;IrBjCE;;;AqBqCF;EACE;;;AAIJ;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;;;AAKJ;EACE;EACA;EACA;EACA;EAEA;EACA,kBlC5DS;EkC6DT;EACA;E3BvEE,eRgO0B;EmCrJ5B;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA,SnC8gBkC;EmC7gBlC,kBnCtES;;AmCyET;EAAS;;AACT;EAAS,SnCwsByB;;;AmCnsBpC;EACE;EACA;EACA;EACA,SnCosBkC;EmCnsBlC;E3B9FE,wBR0N0B;EQzN1B,yBRyN0B;;AmCzH5B;EACE,SnC+rBgC;EmC7rBhC;;;AAKJ;EACE;EACA,alCtE4B;;;AkC2E9B;EACE;EAGA;EACA,SnCwpBkC;;;AmCppBpC;EACE;EACA;EACA;EACA,SnCgpBkC;EmC/oBlC;;AAGA;EAAuB;;AACvB;EAAsB;;;AAIxB;EACE;EACA;EACA;EACA;EACA;;;AxBzFE;EwB+FF;IACE,WnCkpBgC;ImCjpBhC;;EAGF;IACE;;EAEA;IACE;;EASJ;IAAY,WnCkoBsB;;;AWnvBhC;EwBsHF;IAAY,WnC2nBsB;;;AoCnyBpC;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;EAGE;EtB3BI,YsB4BJ;;AtBxBA;EsBoBF;AAAA;AAAA;ItBnBI;;;;AsB0BJ;AAAA;EAEE;EACA;;;AAGF;AAAA;EAEE;;AAEA;EAJF;AAAA;IAKI;;;;AAIJ;AAAA;EAEE;;AAEA;EAJF;AAAA;IAKI;;;;AAIJ;AAAA;EAEE;;AAEA;EAJF;AAAA;IAKI;;;;AAUF;EACE;EACA;EACA;;AAGF;AAAA;AAAA;EAGE;;AAGF;AAAA;EAEE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;AAEA;EAPF;AAAA;AAAA;AAAA;AAAA;IAQI;;;;AAUN;AAAA;EAEE;EACA;EACA;EAEA;EACA;EACA;EACA,OpCqxBkC;EoCpxBlC,OnC3GS;EmC4GT;EACA,SpCmxBkC;;AG73BlC;AAAA;AAAA;EiCgHE,OnCnHO;EmCoHP;EACA;EACA;;;AAGJ;EACE;;;AAKF;EACE;;;AAOF;AAAA;EAEE;EACA,OpCgwBkC;EoC/vBlC,QpC+vBkC;EoC9vBlC;EACA;;;AAEF;EACE,kBpC4vBkC;;;AoC1vBpC;EACE,kBpC0vBkC;;;AoCjvBpC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,cpCytBkC;EoCxtBlC,apCwtBkC;EoCvtBlC;;AAEA;EACE;EACA;EACA,OpCqtBgC;EoCptBhC,QpCqtBgC;EoCptBhC,cpCqtBgC;EoCptBhC,apCotBgC;EoCntBhC;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACE,kBnC3MO;;;AmCoNX;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OnC5NS;EmC6NT;;;ACxOF;EAAqB;;;AACrB;EAAqB;;;AACrB;EAAqB;;;AACrB;EAAqB;;;AACrB;EAAqB;;;AACrB;EAAqB;;;ACFnB;EACE;;;AnCUF;AAAA;AAAA;EmCLI;;;AANJ;EACE;;;AnCUF;AAAA;AAAA;EmCLI;;;AANJ;EACE;;;AnCUF;AAAA;AAAA;EmCLI;;;AANJ;EACE;;;AnCUF;AAAA;AAAA;EmCLI;;;AANJ;EACE;;;AnCUF;AAAA;AAAA;EmCLI;;;AANJ;EACE;;;AnCUF;AAAA;AAAA;EmCLI;;;AANJ;EACE;;;AnCUF;AAAA;AAAA;EmCLI;;;AANJ;EACE;;;AnCUF;AAAA;AAAA;EmCLI;;;ACCN;EACE;;;AAGF;EACE;;;ACXF;EAAkB;;;AAClB;EAAkB;;;AAClB;EAAkB;;;AAClB;EAAkB;;;AAClB;EAAkB;;;AAElB;EAAmB;;;AACnB;EAAmB;;;AACnB;EAAmB;;;AACnB;EAAmB;;;AACnB;EAAmB;;;AAGjB;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AAIJ;EACE;;;AAOF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;ACxDA;EACE;EACA;EACA;;;ACMA;EAA2B;;;AAC3B;EAA2B;;;AAC3B;EAA2B;;;AAC3B;EAA2B;;;AAC3B;EAA2B;;;AAC3B;EAA2B;;;AAC3B;EAA2B;;;AAC3B;EAA2B;;;AAC3B;EAA2B;;;A/B0C3B;E+BlDA;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;;A/B0C3B;E+BlDA;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;;A/B0C3B;E+BlDA;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;;A/B0C3B;E+BlDA;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;EAC3B;IAA2B;;;AAS/B;EACE;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;;AClC1B;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;;;AAKF;EACE;;;AAKF;EACE;;;AAKF;EACE;;;ACvCA;EAAgC;;;AAChC;EAAgC;;;AAChC;EAAgC;;;AAChC;EAAgC;;;AAEhC;EAA8B;;;AAC9B;EAA8B;;;AAC9B;EAA8B;;;AAC9B;EAA8B;;;AAC9B;EAA8B;;;AAC9B;EAA8B;;;AAC9B;EAA8B;;;AAC9B;EAA8B;;;AAE9B;EAAoC;;;AACpC;EAAoC;;;AACpC;EAAoC;;;AACpC;EAAoC;;;AACpC;EAAoC;;;AAEpC;EAAiC;;;AACjC;EAAiC;;;AACjC;EAAiC;;;AACjC;EAAiC;;;AACjC;EAAiC;;;AAEjC;EAAkC;;;AAClC;EAAkC;;;AAClC;EAAkC;;;AAClC;EAAkC;;;AAClC;EAAkC;;;AAClC;EAAkC;;;AAElC;EAAgC;;;AAChC;EAAgC;;;AAChC;EAAgC;;;AAChC;EAAgC;;;AAChC;EAAgC;;;AAChC;EAAgC;;;AjCYhC;EiClDA;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAEhC;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAE9B;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EAEpC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EAEjC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAElC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;;AjCYhC;EiClDA;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAEhC;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAE9B;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EAEpC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EAEjC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAElC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;;AjCYhC;EiClDA;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAEhC;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAE9B;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EAEpC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EAEjC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAElC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;;AjCYhC;EiClDA;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAEhC;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAC9B;IAA8B;;EAE9B;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EACpC;IAAoC;;EAEpC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EACjC;IAAiC;;EAEjC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAClC;IAAkC;;EAElC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;EAChC;IAAgC;;;AC5ChC;ECDF;;;ADEE;ECCF;;;ADAE;ECGF;;;AnCmDE;EkCxDA;ICDF;;EDEE;ICCF;;EDAE;ICGF;;;AnCmDE;EkCxDA;ICDF;;EDEE;ICCF;;EDAE;ICGF;;;AnCmDE;EkCxDA;ICDF;;EDEE;ICCF;;EDAE;ICGF;;;AnCmDE;EkCxDA;ICDF;;EDEE;ICCF;;EDAE;ICGF;;;ACAA;EAAyB;;;AAAzB;EAAyB;;;AAAzB;EAAyB;;;AAAzB;EAAyB;;;AAAzB;EAAyB;;;AAK3B;EACE;EACA;EACA;EACA;EACA,S/CmlBkC;;;A+ChlBpC;EACE;EACA;EACA;EACA;EACA,S/C2kBkC;;;A+CvkBlC;EADF;IAEI;IACA;IACA,S/CmkBgC;;;;AgDjmBpC;ECEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAUA;EAEE;EACA;EACA;EACA;EACA;EACA;;;AC5BJ;EAAa;;;AACb;EAAU;;;AACV;EAAa;;;AACb;EAAe;;;ACCX;EAAuB;;;AAAvB;EAAuB;;;AAAvB;EAAuB;;;AAAvB;EAAuB;;;AAAvB;EAAuB;;;AAAvB;EAAuB;;;AAAvB;EAAuB;;;AAAvB;EAAuB;;;AAAvB;EAAuB;;;AAAvB;EAAuB;;;AAI3B;EAAU;;;AACV;EAAU;;;ACAF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAfF;EAAgC;;;AAChC;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAMN;EAAmB;;;AACnB;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AAEF;AAAA;EAEE;;;AzCaF;EyCjDI;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAMN;IAAmB;;EACnB;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;;AzCaF;EyCjDI;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAMN;IAAmB;;EACnB;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;;AzCaF;EyCjDI;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAMN;IAAmB;;EACnB;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;;AzCaF;EyCjDI;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAfF;IAAgC;;EAChC;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAMN;IAAmB;;EACnB;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;EAEF;AAAA;IAEE;;;ACzCN;EAAkB,arDqPY;;;AqDjP9B;EAAiB;;;AACjB;EAAiB;;;AACjB;ECRE;EACA;EACA;;;ADcE;EAAwB;;;AACxB;EAAwB;;;AACxB;EAAwB;;;A1CsCxB;E0CxCA;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;;A1CsCxB;E0CxCA;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;;A1CsCxB;E0CxCA;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;;A1CsCxB;E0CxCA;IAAwB;;EACxB;IAAwB;;EACxB;IAAwB;;;AAM5B;EAAmB;;;AACnB;EAAmB;;;AACnB;EAAmB;;;AAInB;EAAsB;;;AACtB;EAAsB;;;AACtB;EAAsB;;;AACtB;EAAsB;;;AAItB;EAAc;;;AEpCZ;EACE;;;ApDUF;EoDNI;;;AALJ;EACE;;;ApDUF;EoDNI;;;AALJ;EACE;;;ApDUF;EoDNI;;;AALJ;EACE;;;ApDUF;EoDNI;;;AALJ;EACE;;;ApDUF;EoDNI;;;AALJ;EACE;;;ApDUF;EoDNI;;;AALJ;EACE;;;ApDUF;EoDNI;;;AALJ;EACE;;;ApDUF;EoDNI;;;AFqCN;EAAa;;;AACb;EAAc;;;AAEd;EAAiB;;;AACjB;EAAiB;;;AAIjB;EGpDE;EACA;EACA;EACA;EACA;;;ACHF;ECCE;;;ADGF;ECHE;;;ACaF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAkBE;;;AAGF;EACE;EACA;EACA;EAIA;EACA;;AAGF;EAAoB;;;AAGpB;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;AAAA;EAEE;EACA;EACA;EACA;;;AAIF;AAAA;EAEE;EACA;EACA;EACA;;;AAIF;EACE;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAQF;EACE;EACA;EACA;EACA;EACA;EACA;;AhD/DE;EgDyDJ;IAQI;;;;AAIJ;EAA6C;;;AAC7C;EAAuD;;;AACvD;EAAuD;;;AACvD;EAAuD;;;AAEvD;EACE;EACA;EACA;EACA;EACA;;AhD/EE;EgD0EJ;IAOI;;;;AAIJ;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAQF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EAAyC;;;AAEzC;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EAAuC;;;AAEvC;EAAuC;;;AAOvC;AAAA;EAEE;EACA;EACA;EACA;EACA;;AhDrKE;EgD+JJ;AAAA;IAQI;;;;AAIJ;EAAsC;;;AAEtC;EAAkC;;;AAOlC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EAAU;;AAEV;EAAU;;;AAGZ;EACE;;AACA;EACE;;;AhD/MA;EgDoNF;IACE;;;AASJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;IACE;;EAEF;IACE;;;AASJ;EACE,kB1DrUS;E0DsUT;EACA;EACA;EACA;EACA;EACA;EACA,a1DhT4B;E0DiT5B;EACA;EACA;;;AAMF;EAAkC;;;AAElC;EACE;EACA;EACA;EACA;EACA;;;AAQF;EACE;EACA;EACA;EACA;EACA;EACA,kB1D1WS;E0D2WT;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAIF;EAAyC;;;AAGzC;EAAyB;;;AAEzB;EACE;EACA;EACA;;;A/D7TF;AgElFA;AAIA;AAAA;AAAA;;AAAA;AAAA;EAOA;IACE;IACA;IACA;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;AAAA;IAEE;IACA;;EAGF;AAAA;IAEE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;IACA;IACA;;EAGF;IACE;MACE;;IAGF;MACE;;;EAIJ;IACE;MACE;;IAGF;MACE;;;EAIJ;IACE;IACA;;AAGF;EAEA;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;IACA;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;AAGF;EAEA;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;IACA;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;;;EAIJ;IACE;MACE;;IAGF;MACE;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;;;EAIJ;IACE;MACE;;IAGF;MACE;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;;EAIJ;IACE;IACA;IACA;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;IACA;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;IACA;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;IACA;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;IACA;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;IACA;IACA;;EAGF;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;IACA;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;AAGF;EAEA;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;AAGF;EAEA;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;;IAGF;MACE;MACA;MACA;;IAGF;MACE;;;EAIJ;IACE;MACE;;IAGF;MACE;MACA;MACA;;IAGF;MACE;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;MACA;MACA;;;EAIJ;IACE;MACE;MACA;MACA;MACA;MACA;;IAGF;MACE;MACA;MACA;MACA;MACA;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;MACE;MACA;MACA;;IAGF;MACE;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;EAGF;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;MACE;MACA;;IAGF;MACE;MACA;MACA;;;EAIJ;IACE;IACA;;;AjD5oGE;EfgCF;IACE;;EAGF;IACE;;EAGF;AAAA;IAEE;;EAGF;AAAA;IAEE;IACA;;EAGF;IACE;;;AAWJ;EACE;;;AAGF;EACE;EACA;EACA;;AACA;EACE;;;AAIJ;EACE;EACA;;AAEA;AAAA;AAAA;EAGE;;;AAIJ;EACE;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;;AenGE;Ef4FJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;IAUI;;;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAQE;;AelHE;Ef0GJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;IAWI;;;;AexGA;Ef6GF;IACE;IACA;;;AAIJ;EAAkB;;;AAGhB;EADF;IAEI;;;;AepIA;EfwIJ;IAEI;;;;AAKJ;EACE;EACA;EACA;;;AAOF;EACE;EACA;EACA;EACA;EACA;EACA;;Ae/JE;EfyJJ;IASI;IACA;IACA;;;AAEF;EACE;EACA;;;AAIJ;EACE;;;AAIA;EADF;IAEI;IACA;IACA;;;;AAIJ;EAEE,YK5Nc;EL6Nd;;;AAGF;EAAuB;;;AAEvB;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EAAsB;;AAEtB;EACE;;;AAKF;EAAgB;;;AAKd;EAGE;IAEE;;;AAMJ;EAFF;AAAA;AAGI;AACA;;;;AAMJ;EACE,OK1RO;;AL8RP;EACE,OK/RK;;ALiSP;EACE,OKlSK;;ALmSL;EACE,OKpSG;;ALsSL;EAEE;;AAGJ;EACE;IACE,OKhSQ;;ELkSV;IACE,OKnSQ;;ELoSR;IACE,OKrSM;;ELuSR;IAEE;;;;AAOV;EACE;EACA;;;AAIA;EADF;IAEI;IACA;;;AAGF;EACE;;Ae1RA;EfyRF;IAII;;;;AAKN;EAAiC;;;AAEjC;AAAA;EAEE;;;AAGF;EACE;;;AAIA;EADF;IAEI;IACA;;;;AehTA;EfoTJ;AAAA;IAGI;IACA;;;;Ae3SA;EfgTF;IACE;;EAEA;IACE;IACA;IACA;IACA;;EAKF;IAAY;;EAEZ;IAAY;;EAIZ;IAAY;;;AAIhB;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EAAa;;;Ae/VT;EfiWJ;IAEI;;EAEA;IACE;IACA;IACA;IACA;IACA;IACA;IACA;;;;AAMJ;EACE,OKlaO;;AU4DP;EfwWF;IAEI;AACA;;;;Ae3WF;EfgXJ;IAEI;AACA;;;AehYA;Ef6XJ;IAOI;;EAEA;IACE;;;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA,OKjdO;ELkdP;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIA;EACE;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;EACA,OKzfO;;AL4fT;EACE;;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EAAQ;;AAER;EAEE;;;AAIJ;EACE,OKhhBS;;ALkhBT;EAEE;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;EoBviBF;EACA;;;ApB4iBF;EoB7iBE;EACA;;;ApBgjBF;EACE;EACA;EACA;;AenhBE;EfghBJ;IAMI;IACA;IACA;IACA;IACA;;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA,OKhlBO;ELilBP;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;;Ae/iBA;Ef+hBF;IAmBI;IACA;IACA;IACA;IACA;IACA;;;AAGF;EACE;;Ae3jBF;Ef0jBA;IAII;;;;AAON;EACE;EACA;;AevkBA;EfqkBF;IAKI;;;;AAKN;EACE;EACA;;AAEA;EAJF;IAKI;;EACA;IAAiB;;;AerlBjB;Ef+kBJ;IAUI;;;;AAIJ;EACE;;AACA;EAAiB;;Ae/lBf;Ef6lBJ;IAKI;;;;AAIJ;EACE;EACA;;;AAKA;EAAU;;AAEV;EACE;;AAGF;EACE;EACA;;AAGF;EAAO;;;AAGT;EACE;;;Ae5nBE;Ef+nBJ;IAEI;;;;AAIJ;EACE;;;AAGF;EAAsB;;;AezoBlB;Ef6oBF;IACE;IACA;IACA;IACA;IACA;;EAEA;IACE;IACA;IACA;IACA;IACA;;EAEA;IACE;;;AAWR;AAAA;EAEE;EACA;;;AAQF;EACE;EAEA,kBACE;EAGF;EACA;EACA;EACA;EACA;EACA;;AejrBE;EfqqBJ;IAeI;IACA;;;AelsBA;EfkrBJ;IAoBI;IACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACA;EACA;;AAGJ;AACE;EACA;EACA;;AAEA;EAEE;EACA;;AAGF;EACE;EACA;;AAGF;EAAS;;AAGX;EACE;EACA;;AAGF;AAAA;EAEE;;;AAKJ;EACE;IACA;;EAED;IACC;;EAED;IACC;;;AAOF;AAAA;AAAA;EAGE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAAY;;AACZ;EAAY;;AAEZ;EAAc;;;AAKd;EAAc;;AezyBZ;Ef2yBF;IAEI;IACA;IACA;IACA;IACA;IACA;;EAGE;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAAW;;AAGb;EAAyB;;AAEzB;EAAyB;EAAW;;AAGtC;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;Aer2BF;Efm2BA;IAKI;IACA;;;AAKN;EAAO;;;AAGT;EACE;AAAA;IAEE;;EAGF;IAAa;;;AAGf;EACE;EACA;;AAEA;EAJF;IAKI;;;AAGF;EARF;IASI;;;AAGF;EAAK;;;AAGP;EACE;EACA,OK17BS;EL27BT;EACA;EACA;EACA;EACA;;Aeh5BE;Efy4BJ;IAUI;;;AAGF;AAAA;EAEE;EACA;EACA;EACA;;AAEA;AAAA;EACE;;AAQJ;EACE;;;AAKF;EAEE;EACA;;;AAIJ;EACE;EACA,aAx3B8B;EAy3B9B;EACA;EACA;EACA;;AAEA;EARF;IASI;IACA;IACA;IACA;IACA;;;AAGF;EACE;;AAEA;EACE;EACA;EACA;;AAGF;EAAiB;;AAIf;EAAO;;AAIX;EAAK;;AAEL;EACE;;;AASJ;EACE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;;AAEA;AAAA;EACE;;;AAIJ;EACE;EACA;;;AAOF;EACE;EACA,kBK9hCc;;AL+hCd;EACE;EACA;EACA;EACA;EACA;;AAOF;EACE;;Ae3gCA;Ef0gCF;IAII;;;;AAMJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AAIJ;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;AejjCE;Ef6iCJ;IAOI;;EAEA;IACE;IACA;IACA;IACA;IACA;IACA;;;;AAKN;EAAa;;;AAEb;EACE;;AACA;EACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAwBF;EAAS;;;AAET;EAAyB;;;AAEzB;EACE;EACA;EACA;;Ae3nCE;EfwnCJ;IAMI;;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;;AAIJ;EACE;;AAEA;EACE;EACA;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EAAO;;AAEP;EAEE;EACA;;;AASJ;EACE;EACA;EACA;EACA;;AAEA;EACE;;AetsCA;EfqsCF;IAII;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;;Ae1uCA;EfyuCF;IAII;;;AAIJ;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AehwCA;Ef+vCF;IAII;;;AenwCF;Ef+vCF;IAOI;;;;AAKN;AAAA;EAEE;EACA,aAjtC8B;EAktC9B;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;AehyCE;Ef8xCJ;IAKI;IACA;;;AAGF;EACE;EACA;;;AAIJ;EACE;EACA;;;AAQF;EACE;EACA;EACA;EAAuC;;Ae1zCrC;EfuzCJ;IAOI;;;AAGF;EACE;EACA;;Aen0CA;Efi0CF;IAKI;IACA;;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAKN;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAAU;;AAEV;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;;AAYV;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAUF;EACE;EACA;;Ae37CA;Efy7CF;IAKI;;;AAIJ;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EAAI;;AAEJ;EACE;;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;;;AAUF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EAAgB;;;AAGlB;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;;;AAKN;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;AACA;EACE;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AerlDA;Ef4kDJ;IAaI;;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EAEE;;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAQF;EACE;EACA;EACA;EACA,OKpsDS;;ALssDT;EAAI,OKtsDK;;AU2CP;EfqpDJ;IASI;;;AAGF;EACE;EACA;;AetpDA;EfypDF;IAEI;IACA;;;AAEF;EACE;;AAIJ;EACE;EACA;;AAGF;EACE;;AezqDA;EfwqDF;IAII;IACA;;;AAIJ;EACE;EACA;EACA;EACA;;AelsDA;Ef8rDF;IAOI;;;AersDF;Ef8rDF;IAWI;;;AAGF;EACE;EACA;;AejsDF;Ef+rDA;IAKI;IACA;;;AeltDJ;EfstDI;IACE;;;AAIJ;EACE;;AAGF;EACE;EACA;;AeptDJ;EfktDE;IAKI;;;AAMR;EACE;EACA;EACA;;AehuDA;Ef6tDF;IAMI;IACA;;;;AAKN;EACE,OKtyDS;;ALwyDT;EAAI,OKxyDK;;AL2yDP;EACE;;AAEA;EAEE;;AAKF;EAEE;;;AAYR;EACE;;;AAGF;EACE;EACA;EACA;;Ae3xDE;EfwxDJ;IAMI;;;AAEF;EACE;;AAEF;EACE;;AAGF;EACE;;;AAUJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;IACE;IACA;IACA;IACA;;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAKA;EACE;EACA;EACA;;;AAGF;AACA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;AAAA;AAAA;EAGA;AAAA;EAEA;;;AAGF;AACA;AAAA;EAEE;EACA;;;AAEF;AACA;EACE;EACA;;;AAEF;AAAA;AAAA;AAGA;EACE;EACA;EACA;;;AAEF;AAAA;;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AAAA;EAEE;EACA;EACA;;;AAGF;AACA;EACE;;;AAEF;EACE;;;AAGF;AACA;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAKF;AACA;AAAA;EAEE;EACA;;;AAGF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAKF;AACA;AAAA;EAEE;EACA;;;AAGF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;IACE;;;AAIJ;EACE;EACA;EACA;;;AAGF;AACA;EACE;EACA,aAr/D8B;EAs/D9B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAgBF;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA,OKloEO;;ALooEP;EACE;;AAGF;EACE;;AAGF;EAEE;EACA;;;AAKN;EACE;EACA;;;AAGF;EACE;;;AAEF;AAAA;AAAA;EAGE,YKnpEc;ELopEd;;;AAEF;AAAA;EAEE,YKxpEc;ELypEd;;;AAEF;EACE;;;AAEA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAEF;AAAA;AAAA;AAAA;EAIE;EACA;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;IACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;;AAQF;EACE;EACA;;AAEA;EACE;;AAEA;EACE,kBKtuEQ;ELuuER;;AAKN;EACE;EACA;EACA;;;AAWJ;EACE;EACA;EACA,cK3vEc;;;AL8vEhB;EACE;;;AAOF;EACE;;;AAOF;EACE;EACA;EACA;EACA;;AelvEE;EfqvEA;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAIJ;EACE;EACA;;AAGF;EAAc;;AAEd;EACE;EACA;;AACA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EAEE;EACA;;AAIJ;EACE,aAnvE4B;;Ae7D5B;Ef+yEF;IAII;;;AAIJ;EACE;EACA,aKx0E0B;ELy0E1B;EACA;;AAGF;EAAa;;;AAaf;EAAe,kBALJ;;;AAMX;EAAc,kBALJ;;;AAMV;EAAa,kBALJ;;;AAMT;EAAe,kBALJ;;;AAOX;EACE;EACA;;AACA;EAEE;EACA,kBKj4EO;;ALo4ET;EAAe;;AAEf;EACE;EACA;EACA;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAEA;EACE;;AAOF;EACE;;;AAMJ;EAEE,kBApDO;;;AAyDT;EAEE,kBA1DM;;;AA+DR;EAEE,kBAhEK;;;AAqEP;EAEE,kBAtEO;;;AA+EX;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAAgB;;AAEhB;EACE;EACA;EACA,aAh3E0B;EAi3E1B;EACA;EACA;EACA;;AAGF;EAAa,kBKl+EN;;;ALs+EX;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EAAoB;;;AAEpB;EAAkB;;;AAElB;EAAmB;;;AAEnB;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE","file":"landio.css"} \ No newline at end of file diff --git a/themes/landio/scss/landio.scss b/themes/landio/scss/landio.scss index b4a2514aa959307fff85140f458869d5a226a8d8..10a60c6460ba43eaf81306d90cc42f015b79372a 100644 --- a/themes/landio/scss/landio.scss +++ b/themes/landio/scss/landio.scss @@ -1088,7 +1088,7 @@ h3 { border: 0 none; @include media-breakpoint-up(md) { - margin-bottom: 0; + // margin-bottom: 0; } } @@ -1149,6 +1149,50 @@ h3 { .card-text { font-weight: 300; } +.ug-gallery-wrapper { + margin: auto; + .ug-slider-wrapper { + background-color: transparent; + } +} + +.ug-zoompanel { + display: none; +} + +.ug-arrow-right::before, .ug-arrow-left::before { + content: ""; + position: relative; + display: block; + background-color: rgba($fourth, 0.3); + border-radius: 15px; + top: -10px; + left: -10px; + width: calc(100% + 20px); + height: calc(100% + 20px); + z-index: -1; +} + +.ug-item-wrapper img { + border-radius: 5px; +} + +// .ug-button-play::before, .ug-button-fullscreen::before { +// content: ""; +// position: relative; +// display: block; +// background-color: rgba($fourth, 0.4); +// border-radius: 12px; +// top: -8px; +// left: -8px; +// width: calc(100% + 16px); +// height: calc(100% + 16px); +// z-index: -1; +// } + +// .ug-button-play { +// transform: translateX(16px); +// } // // =Video diff --git a/themes/landio/templates/modular/about.html.twig b/themes/landio/templates/modular/about.html.twig index c31ec0c874377f3d7f76c694fc3406c595d4ac99..d072521ab961e79db7f3b716eefc7a609ee3db79 100644 --- a/themes/landio/templates/modular/about.html.twig +++ b/themes/landio/templates/modular/about.html.twig @@ -1,7 +1,6 @@ <section id="about" class="section-about text-center"> <div class="container"> <div class="row"> - {{ page.content|raw }} {% for item in page.header.columns %} <div class="col-md-4 wp wp-1 animated fadeInLeft"> <div class="card"> @@ -26,5 +25,21 @@ </div> {% endfor %} </div> + {{ page.content }} + <div class="modular-row gallery-container mt-5"> + {{ unite_gallery(page.media.images, + '{"gallery_theme":"' ~ page.header.unitegallery.gallery_theme ~ '", + "slider_scale_mode": "fit", + "gallery_autoplay": true, + "slider_control_zoom": false, + "slider_enable_progress_indicator": false, + "gallery_height": 600, + "gallery_min_height": 266, + "thumb_round_corners_radius": 5, + "strippanel_enable_handle": false, + "strippanel_background_color": "transparent" + }', + page.header.unitegallery.gallery_id)|raw }} {# slider-theme ist festgelegt in "about.md", wahrscheinlich "compact", Konfigurations-Optionen hier https://unitegallery.net/index.php?page=compact-options #} + </div> </div> </section>