+
+
{{ travel_program.title }}
+
+
+ Jetzt Buchen
+
+
+
+
+
+
+
+
+
+
+
+ {% for travel_program_image in travel_program.images %}
+ {# @var image \AppBundle\Entity\TravelProgramImage #}
+
+ {% endfor %}
+
+
+
+
+
+ Previous
+
+
+
+ Next
+
+
+
+
+
+
+
+
+
+
+
+ {{ travel_program.htmlDescription|raw }}
+
+
+
+
+
+ {% for travel_program_service in travel_program.included|replace({'*': ' '})|split('\n') %}
+ {{ travel_program_service|raw }}
+ {% endfor %}
+
+ {#
+
Unser Video
+
+
Video Headline
+
+
+
+
+
+
+ VIDEO
+
+
+ #}
+
+
+
+
+
{{ travel_program.subtitle }}
+
+
+
+ {% if travel_program.travelDates is not empty %}
+ {% set has_three_bed_room = (travel_program.travelDates|first).prices[5] is defined %}
+
+
+
+
+ Nr.
+ Beginn
+ Ende
+ {% if has_three_bed_room %}Preis p.P im Dreibettzimmer {% endif %}
+ Preis p.P im Doppelzimmer
+ Preis p.P im Einzelzimmer
+ Abflugorte / Zuschläge
+ Buchung
+
+
+
+ {% for travel_date in travel_program.travelDates %}
+ {# @var travel_date \AppBundle\Entity\TravelDate #}
+
+ {{ travel_date.name }}
+ {{ travel_date.start|date }}
+ {{ travel_date.end|date }}
+ {% if has_three_bed_room %}
+
+ {% if travel_date.prices[5] is defined %}
+ {% if travel_date.prices[5].effectiveDiscountPrice %}
+
+ {% endif %}
+
+
+ ab {{ travel_date.prices[5].effectivePrice|number_format }} €
+
+ {% if travel_date.prices[5].effectiveDiscountPrice %}
+
+ ab {{ travel_date.prices[5].effectiveDiscountPrice|number_format }} €
+
+ {% endif %}
+
+ {% endif %}
+
+ {% endif %}
+
+ {% if travel_date.prices[3].effectiveDiscountPrice %}
+
+ {% endif %}
+
+
+ ab {{ travel_date.prices[3].effectivePrice|number_format }} €
+
+ {% if travel_date.prices[3].effectiveDiscountPrice %}
+
+ ab {{ travel_date.prices[3].effectiveDiscountPrice|number_format }} €
+
+ {% endif %}
+
+
+
+ {% if travel_date.prices[1].effectiveDiscountPrice %}
+
+ {% endif %}
+
+
+ ab {{ travel_date.prices[1].effectivePrice|number_format }} €
+
+ {% if travel_date.prices[1].effectiveDiscountPrice %}
+
+ ab {{ travel_date.prices[1].effectiveDiscountPrice|number_format }} €
+
+ {% endif %}
+
+
+
+
+ Flughäfen
+
+
+ {% include 'default/components/departuresModal.html.twig' with {
+ 'departures': travel_date.departures,
+ 'id': loop.index0
+ } %}
+
+
+
+ buchen
+
+
+
+ {% endfor %}
+
+
+ {% else %}
+ Momentan sind für dieses Programm keine Termine verfügbar.
+ {% endif %}
+
+
+
+
+
+
+
+{% endblock body %}
\ No newline at end of file
diff --git a/trunk/app/Resources/views/default/pages/travelProgramOverview.html.twig b/trunk/app/Resources/views/default/pages/travelProgramOverview.html.twig
new file mode 100644
index 00000000..9cae204f
--- /dev/null
+++ b/trunk/app/Resources/views/default/pages/travelProgramOverview.html.twig
@@ -0,0 +1,34 @@
+{% extends 'base.html.twig' %}
+
+{% block body %}
+
+ {{ page.pagetitle ?? page.title }}
+
+ {#{% for i in 0..page.children|length//3 %}#}
+
+ {% for child_page in child_pages if child_page.status == 1 %}
+ {# @var child_page \AppBundle\Entity\Page #}
+
+ {% endfor %}
+
+
+
+
+ {{ page.content|raw }}
+
+{% endblock %}
\ No newline at end of file
diff --git a/trunk/app/autoload.php b/trunk/app/autoload.php
new file mode 100644
index 00000000..31321faa
--- /dev/null
+++ b/trunk/app/autoload.php
@@ -0,0 +1,11 @@
+getParameterOption(['--env', '-e'], getenv('SYMFONY_ENV') ?: 'dev');
+$debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption(['--no-debug', '']) && $env !== 'prod';
+
+if ($debug) {
+ Debug::enable();
+}
+
+$kernel = new AppKernel($env, $debug);
+$application = new Application($kernel);
+$application->run($input);
diff --git a/trunk/bin/symfony_requirements b/trunk/bin/symfony_requirements
new file mode 100644
index 00000000..a7bf65a1
--- /dev/null
+++ b/trunk/bin/symfony_requirements
@@ -0,0 +1,146 @@
+#!/usr/bin/env php
+getPhpIniConfigPath();
+
+echo_title('Symfony Requirements Checker');
+
+echo '> PHP is using the following php.ini file:'.PHP_EOL;
+if ($iniPath) {
+ echo_style('green', ' '.$iniPath);
+} else {
+ echo_style('yellow', ' WARNING: No configuration file (php.ini) used by PHP!');
+}
+
+echo PHP_EOL.PHP_EOL;
+
+echo '> Checking Symfony requirements:'.PHP_EOL.' ';
+
+$messages = array();
+foreach ($symfonyRequirements->getRequirements() as $req) {
+ if ($helpText = get_error_message($req, $lineSize)) {
+ echo_style('red', 'E');
+ $messages['error'][] = $helpText;
+ } else {
+ echo_style('green', '.');
+ }
+}
+
+$checkPassed = empty($messages['error']);
+
+foreach ($symfonyRequirements->getRecommendations() as $req) {
+ if ($helpText = get_error_message($req, $lineSize)) {
+ echo_style('yellow', 'W');
+ $messages['warning'][] = $helpText;
+ } else {
+ echo_style('green', '.');
+ }
+}
+
+if ($checkPassed) {
+ echo_block('success', 'OK', 'Your system is ready to run Symfony projects');
+} else {
+ echo_block('error', 'ERROR', 'Your system is not ready to run Symfony projects');
+
+ echo_title('Fix the following mandatory requirements', 'red');
+
+ foreach ($messages['error'] as $helpText) {
+ echo ' * '.$helpText.PHP_EOL;
+ }
+}
+
+if (!empty($messages['warning'])) {
+ echo_title('Optional recommendations to improve your setup', 'yellow');
+
+ foreach ($messages['warning'] as $helpText) {
+ echo ' * '.$helpText.PHP_EOL;
+ }
+}
+
+echo PHP_EOL;
+echo_style('title', 'Note');
+echo ' The command console could use a different php.ini file'.PHP_EOL;
+echo_style('title', '~~~~');
+echo ' than the one used with your web server. To be on the'.PHP_EOL;
+echo ' safe side, please check the requirements from your web'.PHP_EOL;
+echo ' server using the ';
+echo_style('yellow', 'web/config.php');
+echo ' script.'.PHP_EOL;
+echo PHP_EOL;
+
+exit($checkPassed ? 0 : 1);
+
+function get_error_message(Requirement $requirement, $lineSize)
+{
+ if ($requirement->isFulfilled()) {
+ return;
+ }
+
+ $errorMessage = wordwrap($requirement->getTestMessage(), $lineSize - 3, PHP_EOL.' ').PHP_EOL;
+ $errorMessage .= ' > '.wordwrap($requirement->getHelpText(), $lineSize - 5, PHP_EOL.' > ').PHP_EOL;
+
+ return $errorMessage;
+}
+
+function echo_title($title, $style = null)
+{
+ $style = $style ?: 'title';
+
+ echo PHP_EOL;
+ echo_style($style, $title.PHP_EOL);
+ echo_style($style, str_repeat('~', strlen($title)).PHP_EOL);
+ echo PHP_EOL;
+}
+
+function echo_style($style, $message)
+{
+ // ANSI color codes
+ $styles = array(
+ 'reset' => "\033[0m",
+ 'red' => "\033[31m",
+ 'green' => "\033[32m",
+ 'yellow' => "\033[33m",
+ 'error' => "\033[37;41m",
+ 'success' => "\033[37;42m",
+ 'title' => "\033[34m",
+ );
+ $supports = has_color_support();
+
+ echo($supports ? $styles[$style] : '').$message.($supports ? $styles['reset'] : '');
+}
+
+function echo_block($style, $title, $message)
+{
+ $message = ' '.trim($message).' ';
+ $width = strlen($message);
+
+ echo PHP_EOL.PHP_EOL;
+
+ echo_style($style, str_repeat(' ', $width));
+ echo PHP_EOL;
+ echo_style($style, str_pad(' ['.$title.']', $width, ' ', STR_PAD_RIGHT));
+ echo PHP_EOL;
+ echo_style($style, $message);
+ echo PHP_EOL;
+ echo_style($style, str_repeat(' ', $width));
+ echo PHP_EOL;
+}
+
+function has_color_support()
+{
+ static $support;
+
+ if (null === $support) {
+ if (DIRECTORY_SEPARATOR == '\\') {
+ $support = false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI');
+ } else {
+ $support = function_exists('posix_isatty') && @posix_isatty(STDOUT);
+ }
+ }
+
+ return $support;
+}
diff --git a/trunk/composer.json b/trunk/composer.json
new file mode 100644
index 00000000..74cef4de
--- /dev/null
+++ b/trunk/composer.json
@@ -0,0 +1,69 @@
+{
+ "name": "symfony/framework-standard-edition",
+ "license": "MIT",
+ "type": "project",
+ "description": "The \"Symfony Standard Edition\" distribution",
+ "autoload": {
+ "psr-4": { "": "src/" },
+ "classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
+ },
+ "autoload-dev": {
+ "psr-4": { "Tests\\": "tests/" }
+ },
+ "require": {
+ "php": ">=5.5.9",
+ "symfony/symfony": "3.1.*",
+ "doctrine/orm": "^2.5",
+ "doctrine/doctrine-bundle": "^1.6",
+ "doctrine/doctrine-cache-bundle": "^1.2",
+ "symfony/swiftmailer-bundle": "^2.3",
+ "symfony/monolog-bundle": "^2.8",
+ "symfony/polyfill-apcu": "^1.0",
+ "sensio/distribution-bundle": "^5.0",
+ "sensio/framework-extra-bundle": "^3.0.2",
+ "incenteev/composer-parameter-handler": "^2.0",
+ "symfony/stopwatch": "^3.1",
+ "symfony/assetic-bundle": "^2.8",
+ "stof/doctrine-extensions-bundle": "^1.2",
+ "doctrine/doctrine-migrations-bundle": "^1.2"
+ },
+ "require-dev": {
+ "sensio/generator-bundle": "^3.0",
+ "symfony/phpunit-bridge": "^3.0"
+ },
+ "scripts": {
+ "symfony-scripts": [
+ "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
+ ],
+ "post-install-cmd": [
+ "@symfony-scripts"
+ ],
+ "post-update-cmd": [
+ "@symfony-scripts"
+ ]
+ },
+ "config": {
+ "platform": {
+ "php": "5.5.9"
+ }
+ },
+ "extra": {
+ "symfony-app-dir": "app",
+ "symfony-bin-dir": "bin",
+ "symfony-var-dir": "var",
+ "symfony-web-dir": "web",
+ "symfony-tests-dir": "tests",
+ "symfony-assets-install": "relative",
+ "incenteev-parameters": {
+ "file": "app/config/parameters.yml"
+ },
+ "branch-alias": {
+ "dev-master": "3.1-dev"
+ }
+ }
+}
diff --git a/trunk/composer.lock b/trunk/composer.lock
new file mode 100644
index 00000000..11467f0e
--- /dev/null
+++ b/trunk/composer.lock
@@ -0,0 +1,2717 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+ "This file is @generated automatically"
+ ],
+ "hash": "86b3a569bb4ff36a5df3a1af56def360",
+ "content-hash": "5481626673ad49f1fc1314a175f336a8",
+ "packages": [
+ {
+ "name": "behat/transliterator",
+ "version": "v1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Behat/Transliterator.git",
+ "reference": "868e05be3a9f25ba6424c2dd4849567f50715003"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Behat/Transliterator/zipball/868e05be3a9f25ba6424c2dd4849567f50715003",
+ "reference": "868e05be3a9f25ba6424c2dd4849567f50715003",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Behat\\Transliterator": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Artistic-1.0"
+ ],
+ "description": "String transliterator",
+ "keywords": [
+ "i18n",
+ "slug",
+ "transliterator"
+ ],
+ "time": "2015-09-28 16:26:35"
+ },
+ {
+ "name": "doctrine/annotations",
+ "version": "v1.2.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/annotations.git",
+ "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/annotations/zipball/f25c8aab83e0c3e976fd7d19875f198ccf2f7535",
+ "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/lexer": "1.*",
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "doctrine/cache": "1.*",
+ "phpunit/phpunit": "4.*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Doctrine\\Common\\Annotations\\": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Docblock Annotations Parser",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "annotations",
+ "docblock",
+ "parser"
+ ],
+ "time": "2015-08-31 12:32:49"
+ },
+ {
+ "name": "doctrine/cache",
+ "version": "v1.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/cache.git",
+ "reference": "f8af318d14bdb0eff0336795b428b547bd39ccb6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/cache/zipball/f8af318d14bdb0eff0336795b428b547bd39ccb6",
+ "reference": "f8af318d14bdb0eff0336795b428b547bd39ccb6",
+ "shasum": ""
+ },
+ "require": {
+ "php": "~5.5|~7.0"
+ },
+ "conflict": {
+ "doctrine/common": ">2.2,<2.4"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.8|~5.0",
+ "predis/predis": "~1.0",
+ "satooshi/php-coveralls": "~0.6"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.6.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Caching library offering an object-oriented API for many cache backends",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "cache",
+ "caching"
+ ],
+ "time": "2015-12-31 16:37:02"
+ },
+ {
+ "name": "doctrine/collections",
+ "version": "v1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/collections.git",
+ "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/collections/zipball/6c1e4eef75f310ea1b3e30945e9f06e652128b8a",
+ "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Doctrine\\Common\\Collections\\": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Collections Abstraction library",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "array",
+ "collections",
+ "iterator"
+ ],
+ "time": "2015-04-14 22:21:58"
+ },
+ {
+ "name": "doctrine/common",
+ "version": "v2.6.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/common.git",
+ "reference": "a579557bc689580c19fee4e27487a67fe60defc0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/common/zipball/a579557bc689580c19fee4e27487a67fe60defc0",
+ "reference": "a579557bc689580c19fee4e27487a67fe60defc0",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/annotations": "1.*",
+ "doctrine/cache": "1.*",
+ "doctrine/collections": "1.*",
+ "doctrine/inflector": "1.*",
+ "doctrine/lexer": "1.*",
+ "php": "~5.5|~7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.8|~5.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\": "lib/Doctrine/Common"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Common Library for Doctrine projects",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "annotations",
+ "collections",
+ "eventmanager",
+ "persistence",
+ "spl"
+ ],
+ "time": "2015-12-25 13:18:31"
+ },
+ {
+ "name": "doctrine/dbal",
+ "version": "v2.5.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/dbal.git",
+ "reference": "9f8c05cd5225a320d56d4bfdb4772f10d045a0c9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/9f8c05cd5225a320d56d4bfdb4772f10d045a0c9",
+ "reference": "9f8c05cd5225a320d56d4bfdb4772f10d045a0c9",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/common": ">=2.4,<2.7-dev",
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*",
+ "symfony/console": "2.*||^3.0"
+ },
+ "suggest": {
+ "symfony/console": "For helpful console commands such as SQL execution and import of files."
+ },
+ "bin": [
+ "bin/doctrine-dbal"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.5.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Doctrine\\DBAL\\": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ }
+ ],
+ "description": "Database Abstraction Layer",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "database",
+ "dbal",
+ "persistence",
+ "queryobject"
+ ],
+ "time": "2016-09-09 19:13:33"
+ },
+ {
+ "name": "doctrine/doctrine-bundle",
+ "version": "1.6.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/DoctrineBundle.git",
+ "reference": "dd40b0a7fb16658cda9def9786992b8df8a49be7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/dd40b0a7fb16658cda9def9786992b8df8a49be7",
+ "reference": "dd40b0a7fb16658cda9def9786992b8df8a49be7",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/dbal": "~2.3",
+ "doctrine/doctrine-cache-bundle": "~1.0",
+ "jdorn/sql-formatter": "~1.1",
+ "php": ">=5.3.2",
+ "symfony/console": "~2.3|~3.0",
+ "symfony/dependency-injection": "~2.3|~3.0",
+ "symfony/doctrine-bridge": "~2.2|~3.0",
+ "symfony/framework-bundle": "~2.3|~3.0"
+ },
+ "require-dev": {
+ "doctrine/orm": "~2.3",
+ "phpunit/phpunit": "~4",
+ "satooshi/php-coveralls": "~0.6.1",
+ "symfony/phpunit-bridge": "~2.7|~3.0",
+ "symfony/property-info": "~2.8|~3.0",
+ "symfony/validator": "~2.2|~3.0",
+ "symfony/yaml": "~2.2|~3.0",
+ "twig/twig": "~1.10"
+ },
+ "suggest": {
+ "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.",
+ "symfony/web-profiler-bundle": "To use the data collector."
+ },
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.6.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Bundle\\DoctrineBundle\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Doctrine Project",
+ "homepage": "http://www.doctrine-project.org/"
+ },
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Symfony DoctrineBundle",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "database",
+ "dbal",
+ "orm",
+ "persistence"
+ ],
+ "time": "2016-08-10 15:35:22"
+ },
+ {
+ "name": "doctrine/doctrine-cache-bundle",
+ "version": "1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/DoctrineCacheBundle.git",
+ "reference": "18c600a9b82f6454d2e81ca4957cdd56a1cf3504"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/18c600a9b82f6454d2e81ca4957cdd56a1cf3504",
+ "reference": "18c600a9b82f6454d2e81ca4957cdd56a1cf3504",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/cache": "^1.4.2",
+ "doctrine/inflector": "~1.0",
+ "php": ">=5.3.2",
+ "symfony/doctrine-bridge": "~2.2|~3.0"
+ },
+ "require-dev": {
+ "instaclick/coding-standard": "~1.1",
+ "instaclick/object-calisthenics-sniffs": "dev-master",
+ "instaclick/symfony2-coding-standard": "dev-remaster",
+ "phpunit/phpunit": "~4",
+ "predis/predis": "~0.8",
+ "satooshi/php-coveralls": "~0.6.1",
+ "squizlabs/php_codesniffer": "~1.5",
+ "symfony/console": "~2.2|~3.0",
+ "symfony/finder": "~2.2|~3.0",
+ "symfony/framework-bundle": "~2.2|~3.0",
+ "symfony/phpunit-bridge": "~2.7|~3.0",
+ "symfony/security-acl": "~2.3|~3.0",
+ "symfony/validator": "~2.2|~3.0",
+ "symfony/yaml": "~2.2|~3.0"
+ },
+ "suggest": {
+ "symfony/security-acl": "For using this bundle to cache ACLs"
+ },
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Bundle\\DoctrineCacheBundle\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Fabio B. Silva",
+ "email": "fabio.bat.silva@gmail.com"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@hotmail.com"
+ },
+ {
+ "name": "Doctrine Project",
+ "homepage": "http://www.doctrine-project.org/"
+ },
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Symfony Bundle for Doctrine Cache",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "cache",
+ "caching"
+ ],
+ "time": "2016-01-26 17:28:51"
+ },
+ {
+ "name": "doctrine/doctrine-migrations-bundle",
+ "version": "v1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git",
+ "reference": "0b89ee55bceb53c60bc4ba32924ac5053e377abb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/0b89ee55bceb53c60bc4ba32924ac5053e377abb",
+ "reference": "0b89ee55bceb53c60bc4ba32924ac5053e377abb",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/doctrine-bundle": "~1.0",
+ "doctrine/migrations": "^1.1",
+ "php": ">=5.4.0",
+ "symfony/framework-bundle": "~2.3|~3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.8"
+ },
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Bundle\\MigrationsBundle\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ },
+ {
+ "name": "Doctrine Project",
+ "homepage": "http://www.doctrine-project.org"
+ },
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Symfony DoctrineMigrationsBundle",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "dbal",
+ "migrations",
+ "schema"
+ ],
+ "time": "2016-06-30 19:26:35"
+ },
+ {
+ "name": "doctrine/inflector",
+ "version": "v1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/inflector.git",
+ "reference": "90b2128806bfde671b6952ab8bea493942c1fdae"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae",
+ "reference": "90b2128806bfde671b6952ab8bea493942c1fdae",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Doctrine\\Common\\Inflector\\": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Common String Manipulations with regard to casing and singular/plural rules.",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "inflection",
+ "pluralize",
+ "singularize",
+ "string"
+ ],
+ "time": "2015-11-06 14:35:42"
+ },
+ {
+ "name": "doctrine/instantiator",
+ "version": "1.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
+ "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3,<8.0-DEV"
+ },
+ "require-dev": {
+ "athletic/athletic": "~0.1.8",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpunit/phpunit": "~4.0",
+ "squizlabs/php_codesniffer": "~2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "http://ocramius.github.com/"
+ }
+ ],
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://github.com/doctrine/instantiator",
+ "keywords": [
+ "constructor",
+ "instantiate"
+ ],
+ "time": "2015-06-14 21:17:01"
+ },
+ {
+ "name": "doctrine/lexer",
+ "version": "v1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/lexer.git",
+ "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
+ "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Doctrine\\Common\\Lexer\\": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "lexer",
+ "parser"
+ ],
+ "time": "2014-09-09 13:34:57"
+ },
+ {
+ "name": "doctrine/migrations",
+ "version": "1.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/migrations.git",
+ "reference": "0d0ff5da10c5d30846da32060bd9e357abf70a05"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/migrations/zipball/0d0ff5da10c5d30846da32060bd9e357abf70a05",
+ "reference": "0d0ff5da10c5d30846da32060bd9e357abf70a05",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/dbal": "~2.2",
+ "ocramius/proxy-manager": "^1.0|^2.0",
+ "php": "^5.5|^7.0",
+ "symfony/console": "~2.3|~3.0",
+ "symfony/yaml": "~2.3|~3.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "dev-master",
+ "doctrine/orm": "2.*",
+ "jdorn/sql-formatter": "~1.1",
+ "johnkary/phpunit-speedtrap": "~1.0@dev",
+ "mockery/mockery": "^0.9.4",
+ "phpunit/phpunit": "~4.7",
+ "satooshi/php-coveralls": "0.6.*"
+ },
+ "suggest": {
+ "jdorn/sql-formatter": "Allows to generate formatted SQL with the diff command."
+ },
+ "bin": [
+ "bin/doctrine-migrations"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "v1.5.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\DBAL\\Migrations\\": "lib/Doctrine/DBAL/Migrations"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1"
+ ],
+ "authors": [
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Michael Simonson",
+ "email": "contact@mikesimonson.com"
+ }
+ ],
+ "description": "Database Schema migrations using Doctrine DBAL",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "database",
+ "migrations"
+ ],
+ "time": "2016-03-14 12:29:11"
+ },
+ {
+ "name": "doctrine/orm",
+ "version": "v2.5.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/doctrine2.git",
+ "reference": "73e4be7c7b3ba26f96b781a40b33feba4dfa6d45"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/73e4be7c7b3ba26f96b781a40b33feba4dfa6d45",
+ "reference": "73e4be7c7b3ba26f96b781a40b33feba4dfa6d45",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/cache": "~1.4",
+ "doctrine/collections": "~1.2",
+ "doctrine/common": ">=2.5-dev,<2.7-dev",
+ "doctrine/dbal": ">=2.5-dev,<2.6-dev",
+ "doctrine/instantiator": "~1.0.1",
+ "ext-pdo": "*",
+ "php": ">=5.4",
+ "symfony/console": "~2.5|~3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0",
+ "symfony/yaml": "~2.3|~3.0"
+ },
+ "suggest": {
+ "symfony/yaml": "If you want to use YAML Metadata Mapping Driver"
+ },
+ "bin": [
+ "bin/doctrine",
+ "bin/doctrine.php"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.6.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Doctrine\\ORM\\": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ }
+ ],
+ "description": "Object-Relational-Mapper for PHP",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "database",
+ "orm"
+ ],
+ "time": "2016-09-10 18:51:13"
+ },
+ {
+ "name": "gedmo/doctrine-extensions",
+ "version": "v2.4.24",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Atlantic18/DoctrineExtensions.git",
+ "reference": "a7f7243a19f79a99ac83a3570444d8795f665eef"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Atlantic18/DoctrineExtensions/zipball/a7f7243a19f79a99ac83a3570444d8795f665eef",
+ "reference": "a7f7243a19f79a99ac83a3570444d8795f665eef",
+ "shasum": ""
+ },
+ "require": {
+ "behat/transliterator": "~1.0",
+ "doctrine/common": "~2.4",
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "doctrine/common": ">=2.5.0",
+ "doctrine/mongodb-odm": ">=1.0.2",
+ "doctrine/orm": ">=2.5.0",
+ "phpunit/phpunit": "~4.4",
+ "phpunit/phpunit-mock-objects": "~2.3",
+ "symfony/yaml": "~2.6"
+ },
+ "suggest": {
+ "doctrine/mongodb-odm": "to use the extensions with the MongoDB ODM",
+ "doctrine/orm": "to use the extensions with the ORM"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.4.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Gedmo\\": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "David Buchmann",
+ "email": "david@liip.ch"
+ },
+ {
+ "name": "Gediminas Morkevicius",
+ "email": "gediminas.morkevicius@gmail.com"
+ },
+ {
+ "name": "Gustavo Falco",
+ "email": "comfortablynumb84@gmail.com"
+ }
+ ],
+ "description": "Doctrine2 behavioral extensions",
+ "homepage": "http://gediminasm.org/",
+ "keywords": [
+ "Blameable",
+ "behaviors",
+ "doctrine2",
+ "extensions",
+ "gedmo",
+ "loggable",
+ "nestedset",
+ "sluggable",
+ "sortable",
+ "timestampable",
+ "translatable",
+ "tree",
+ "uploadable"
+ ],
+ "time": "2016-10-11 18:03:37"
+ },
+ {
+ "name": "incenteev/composer-parameter-handler",
+ "version": "v2.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Incenteev/ParameterHandler.git",
+ "reference": "d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc",
+ "reference": "d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "symfony/yaml": "~2.3|~3.0"
+ },
+ "require-dev": {
+ "composer/composer": "1.0.*@dev",
+ "phpspec/prophecy-phpunit": "~1.0",
+ "symfony/filesystem": "~2.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Incenteev\\ParameterHandler\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christophe Coevoet",
+ "email": "stof@notk.org"
+ }
+ ],
+ "description": "Composer script handling your ignored parameter file",
+ "homepage": "https://github.com/Incenteev/ParameterHandler",
+ "keywords": [
+ "parameters management"
+ ],
+ "time": "2015-11-10 17:04:01"
+ },
+ {
+ "name": "jdorn/sql-formatter",
+ "version": "v1.2.17",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/jdorn/sql-formatter.git",
+ "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc",
+ "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.2.4"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "3.7.*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "lib"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jeremy Dorn",
+ "email": "jeremy@jeremydorn.com",
+ "homepage": "http://jeremydorn.com/"
+ }
+ ],
+ "description": "a PHP SQL highlighting library",
+ "homepage": "https://github.com/jdorn/sql-formatter/",
+ "keywords": [
+ "highlight",
+ "sql"
+ ],
+ "time": "2014-01-12 16:20:24"
+ },
+ {
+ "name": "kriswallsmith/assetic",
+ "version": "v1.3.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/kriswallsmith/assetic.git",
+ "reference": "9928f7c4ad98b234e3559d1049abd13387f86db5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/kriswallsmith/assetic/zipball/9928f7c4ad98b234e3559d1049abd13387f86db5",
+ "reference": "9928f7c4ad98b234e3559d1049abd13387f86db5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.1",
+ "symfony/process": "~2.1|~3.0"
+ },
+ "conflict": {
+ "twig/twig": "<1.23"
+ },
+ "require-dev": {
+ "cssmin/cssmin": "3.0.1",
+ "joliclic/javascript-packer": "1.1",
+ "kamicane/packager": "1.0",
+ "leafo/lessphp": "^0.3.7",
+ "leafo/scssphp": "~0.1",
+ "mrclay/minify": "~2.2",
+ "patchwork/jsqueeze": "~1.0|~2.0",
+ "phpunit/phpunit": "~4.8",
+ "psr/log": "~1.0",
+ "ptachoire/cssembed": "~1.0",
+ "symfony/phpunit-bridge": "~2.7|~3.0",
+ "twig/twig": "~1.8|~2.0"
+ },
+ "suggest": {
+ "leafo/lessphp": "Assetic provides the integration with the lessphp LESS compiler",
+ "leafo/scssphp": "Assetic provides the integration with the scssphp SCSS compiler",
+ "leafo/scssphp-compass": "Assetic provides the integration with the SCSS compass plugin",
+ "patchwork/jsqueeze": "Assetic provides the integration with the JSqueeze JavaScript compressor",
+ "ptachoire/cssembed": "Assetic provides the integration with phpcssembed to embed data uris",
+ "twig/twig": "Assetic provides the integration with the Twig templating engine"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Assetic": "src/"
+ },
+ "files": [
+ "src/functions.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kris Wallsmith",
+ "email": "kris.wallsmith@gmail.com",
+ "homepage": "http://kriswallsmith.net/"
+ }
+ ],
+ "description": "Asset Management for PHP",
+ "homepage": "https://github.com/kriswallsmith/assetic",
+ "keywords": [
+ "assets",
+ "compression",
+ "minification"
+ ],
+ "time": "2015-11-12 13:51:40"
+ },
+ {
+ "name": "monolog/monolog",
+ "version": "1.21.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/monolog.git",
+ "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f42fbdfd53e306bda545845e4dbfd3e72edb4952",
+ "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0",
+ "psr/log": "~1.0"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0.0"
+ },
+ "require-dev": {
+ "aws/aws-sdk-php": "^2.4.9",
+ "doctrine/couchdb": "~1.0@dev",
+ "graylog2/gelf-php": "~1.0",
+ "jakub-onderka/php-parallel-lint": "0.9",
+ "php-amqplib/php-amqplib": "~2.4",
+ "php-console/php-console": "^3.1.3",
+ "phpunit/phpunit": "~4.5",
+ "phpunit/phpunit-mock-objects": "2.3.0",
+ "ruflin/elastica": ">=0.90 <3.0",
+ "sentry/sentry": "^0.13",
+ "swiftmailer/swiftmailer": "~5.3"
+ },
+ "suggest": {
+ "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
+ "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
+ "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+ "ext-mongo": "Allow sending log messages to a MongoDB server",
+ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
+ "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver",
+ "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
+ "php-console/php-console": "Allow sending log messages to Google Chrome",
+ "rollbar/rollbar": "Allow sending log messages to Rollbar",
+ "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
+ "sentry/sentry": "Allow sending log messages to a Sentry server"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Monolog\\": "src/Monolog"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
+ "homepage": "http://github.com/Seldaek/monolog",
+ "keywords": [
+ "log",
+ "logging",
+ "psr-3"
+ ],
+ "time": "2016-07-29 03:23:52"
+ },
+ {
+ "name": "ocramius/proxy-manager",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Ocramius/ProxyManager.git",
+ "reference": "57e9272ec0e8deccf09421596e0e2252df440e11"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/57e9272ec0e8deccf09421596e0e2252df440e11",
+ "reference": "57e9272ec0e8deccf09421596e0e2252df440e11",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "zendframework/zend-code": ">2.2.5,<3.0"
+ },
+ "require-dev": {
+ "ext-phar": "*",
+ "phpunit/phpunit": "~4.0",
+ "squizlabs/php_codesniffer": "1.5.*"
+ },
+ "suggest": {
+ "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects",
+ "zendframework/zend-json": "To have the JsonRpc adapter (Remote Object feature)",
+ "zendframework/zend-soap": "To have the Soap adapter (Remote Object feature)",
+ "zendframework/zend-stdlib": "To use the hydrator proxy",
+ "zendframework/zend-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "ProxyManager\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "http://ocramius.github.com/"
+ }
+ ],
+ "description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies",
+ "homepage": "https://github.com/Ocramius/ProxyManager",
+ "keywords": [
+ "aop",
+ "lazy loading",
+ "proxy",
+ "proxy pattern",
+ "service proxies"
+ ],
+ "time": "2015-08-09 04:28:19"
+ },
+ {
+ "name": "paragonie/random_compat",
+ "version": "v2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/random_compat.git",
+ "reference": "088c04e2f261c33bed6ca5245491cfca69195ccf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/random_compat/zipball/088c04e2f261c33bed6ca5245491cfca69195ccf",
+ "reference": "088c04e2f261c33bed6ca5245491cfca69195ccf",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.2.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*|5.*"
+ },
+ "suggest": {
+ "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "lib/random.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com"
+ }
+ ],
+ "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
+ "keywords": [
+ "csprng",
+ "pseudorandom",
+ "random"
+ ],
+ "time": "2016-04-03 06:00:07"
+ },
+ {
+ "name": "psr/cache",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/cache.git",
+ "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
+ "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Cache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for caching libraries",
+ "keywords": [
+ "cache",
+ "psr",
+ "psr-6"
+ ],
+ "time": "2016-08-06 20:24:11"
+ },
+ {
+ "name": "psr/log",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "5277094ed527a1c4477177d102fe4c53551953e0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/5277094ed527a1c4477177d102fe4c53551953e0",
+ "reference": "5277094ed527a1c4477177d102fe4c53551953e0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "Psr/Log/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "time": "2016-09-19 16:02:08"
+ },
+ {
+ "name": "sensio/distribution-bundle",
+ "version": "v5.0.12",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sensiolabs/SensioDistributionBundle.git",
+ "reference": "b6dcd04595e4db95ead22ddea58c397864e00c32"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/b6dcd04595e4db95ead22ddea58c397864e00c32",
+ "reference": "b6dcd04595e4db95ead22ddea58c397864e00c32",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9",
+ "sensiolabs/security-checker": "~3.0",
+ "symfony/class-loader": "~2.3|~3.0",
+ "symfony/config": "~2.3|~3.0",
+ "symfony/dependency-injection": "~2.3|~3.0",
+ "symfony/filesystem": "~2.3|~3.0",
+ "symfony/http-kernel": "~2.3|~3.0",
+ "symfony/process": "~2.3|~3.0"
+ },
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Sensio\\Bundle\\DistributionBundle\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Base bundle for Symfony Distributions",
+ "keywords": [
+ "configuration",
+ "distribution"
+ ],
+ "time": "2016-09-14 20:25:12"
+ },
+ {
+ "name": "sensio/framework-extra-bundle",
+ "version": "v3.0.16",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git",
+ "reference": "507a15f56fa7699f6cc8c2c7de4080b19ce22546"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/507a15f56fa7699f6cc8c2c7de4080b19ce22546",
+ "reference": "507a15f56fa7699f6cc8c2c7de4080b19ce22546",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/common": "~2.2",
+ "symfony/dependency-injection": "~2.3|~3.0",
+ "symfony/framework-bundle": "~2.3|~3.0"
+ },
+ "require-dev": {
+ "symfony/browser-kit": "~2.3|~3.0",
+ "symfony/dom-crawler": "~2.3|~3.0",
+ "symfony/expression-language": "~2.4|~3.0",
+ "symfony/finder": "~2.3|~3.0",
+ "symfony/phpunit-bridge": "~2.7|~3.0",
+ "symfony/security-bundle": "~2.4|~3.0",
+ "symfony/twig-bundle": "~2.3|~3.0",
+ "twig/twig": "~1.11|~2.0"
+ },
+ "suggest": {
+ "symfony/expression-language": "",
+ "symfony/psr-http-message-bridge": "To use the PSR-7 converters",
+ "symfony/security-bundle": ""
+ },
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Sensio\\Bundle\\FrameworkExtraBundle\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "This bundle provides a way to configure your controllers with annotations",
+ "keywords": [
+ "annotations",
+ "controllers"
+ ],
+ "time": "2016-03-25 17:08:27"
+ },
+ {
+ "name": "sensiolabs/security-checker",
+ "version": "v3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sensiolabs/security-checker.git",
+ "reference": "21696b0daa731064c23cfb694c60a2584a7b6e93"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/21696b0daa731064c23cfb694c60a2584a7b6e93",
+ "reference": "21696b0daa731064c23cfb694c60a2584a7b6e93",
+ "shasum": ""
+ },
+ "require": {
+ "symfony/console": "~2.0|~3.0"
+ },
+ "bin": [
+ "security-checker"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "SensioLabs\\Security": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien.potencier@gmail.com"
+ }
+ ],
+ "description": "A security checker for your composer.lock",
+ "time": "2015-11-07 08:07:40"
+ },
+ {
+ "name": "stof/doctrine-extensions-bundle",
+ "version": "v1.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/stof/StofDoctrineExtensionsBundle.git",
+ "reference": "4e7499d25dc5d0862da09fa8e336164948a29a25"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/stof/StofDoctrineExtensionsBundle/zipball/4e7499d25dc5d0862da09fa8e336164948a29a25",
+ "reference": "4e7499d25dc5d0862da09fa8e336164948a29a25",
+ "shasum": ""
+ },
+ "require": {
+ "gedmo/doctrine-extensions": "^2.3.1",
+ "php": ">=5.3.2",
+ "symfony/framework-bundle": "~2.1|~3.0"
+ },
+ "suggest": {
+ "doctrine/doctrine-bundle": "to use the ORM extensions",
+ "doctrine/mongodb-odm-bundle": "to use the MongoDB ODM extensions"
+ },
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Stof\\DoctrineExtensionsBundle\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christophe Coevoet",
+ "email": "stof@notk.org"
+ }
+ ],
+ "description": "Integration of the gedmo/doctrine-extensions with Symfony2",
+ "homepage": "https://github.com/stof/StofDoctrineExtensionsBundle",
+ "keywords": [
+ "behaviors",
+ "doctrine2",
+ "extensions",
+ "gedmo",
+ "loggable",
+ "nestedset",
+ "sluggable",
+ "sortable",
+ "timestampable",
+ "translatable",
+ "tree"
+ ],
+ "time": "2016-01-26 23:58:32"
+ },
+ {
+ "name": "swiftmailer/swiftmailer",
+ "version": "v5.4.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/swiftmailer/swiftmailer.git",
+ "reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/4cc92842069c2bbc1f28daaaf1d2576ec4dfe153",
+ "reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "mockery/mockery": "~0.9.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.4-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "lib/swift_required.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Chris Corbyn"
+ },
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Swiftmailer, free feature-rich PHP mailer",
+ "homepage": "http://swiftmailer.org",
+ "keywords": [
+ "email",
+ "mail",
+ "mailer"
+ ],
+ "time": "2016-07-08 11:51:25"
+ },
+ {
+ "name": "symfony/assetic-bundle",
+ "version": "v2.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/assetic-bundle.git",
+ "reference": "aa5b4f8b712f38745928fa845ddb73300bb2af6d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/assetic-bundle/zipball/aa5b4f8b712f38745928fa845ddb73300bb2af6d",
+ "reference": "aa5b4f8b712f38745928fa845ddb73300bb2af6d",
+ "shasum": ""
+ },
+ "require": {
+ "kriswallsmith/assetic": "~1.3",
+ "php": ">=5.3.0",
+ "symfony/console": "~2.3|~3.0",
+ "symfony/dependency-injection": "~2.3|~3.0",
+ "symfony/framework-bundle": "~2.3|~3.0",
+ "symfony/yaml": "~2.3|~3.0"
+ },
+ "conflict": {
+ "kriswallsmith/spork": "<=0.2",
+ "twig/twig": "<1.20"
+ },
+ "require-dev": {
+ "kriswallsmith/spork": "~0.3",
+ "patchwork/jsqueeze": "~1.0",
+ "symfony/class-loader": "~2.3|~3.0",
+ "symfony/css-selector": "~2.3|~3.0",
+ "symfony/dom-crawler": "~2.3|~3.0",
+ "symfony/phpunit-bridge": "~2.7|~3.0",
+ "symfony/twig-bundle": "~2.3|~3.0"
+ },
+ "suggest": {
+ "kriswallsmith/spork": "to be able to dump assets in parallel",
+ "symfony/twig-bundle": "to use the Twig integration"
+ },
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Bundle\\AsseticBundle\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kris Wallsmith",
+ "email": "kris.wallsmith@gmail.com",
+ "homepage": "http://kriswallsmith.net/"
+ }
+ ],
+ "description": "Integrates Assetic into Symfony2",
+ "homepage": "https://github.com/symfony/AsseticBundle",
+ "keywords": [
+ "assets",
+ "compression",
+ "minification"
+ ],
+ "time": "2015-12-28 13:12:39"
+ },
+ {
+ "name": "symfony/monolog-bundle",
+ "version": "2.11.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/monolog-bundle.git",
+ "reference": "e7caf4936c7be82bc6d68df87f1d23a0d5bf6e00"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/e7caf4936c7be82bc6d68df87f1d23a0d5bf6e00",
+ "reference": "e7caf4936c7be82bc6d68df87f1d23a0d5bf6e00",
+ "shasum": ""
+ },
+ "require": {
+ "monolog/monolog": "~1.18",
+ "php": ">=5.3.2",
+ "symfony/config": "~2.3|~3.0",
+ "symfony/dependency-injection": "~2.3|~3.0",
+ "symfony/http-kernel": "~2.3|~3.0",
+ "symfony/monolog-bridge": "~2.3|~3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8",
+ "symfony/console": "~2.3|~3.0",
+ "symfony/yaml": "~2.3|~3.0"
+ },
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Bundle\\MonologBundle\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ },
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Symfony MonologBundle",
+ "homepage": "http://symfony.com",
+ "keywords": [
+ "log",
+ "logging"
+ ],
+ "time": "2016-04-13 16:21:01"
+ },
+ {
+ "name": "symfony/polyfill-apcu",
+ "version": "v1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-apcu.git",
+ "reference": "6d58bceaeea2c2d3eb62503839b18646e161cd6b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/6d58bceaeea2c2d3eb62503839b18646e161cd6b",
+ "reference": "6d58bceaeea2c2d3eb62503839b18646e161cd6b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting apcu_* functions to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "apcu",
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "time": "2016-05-18 14:26:46"
+ },
+ {
+ "name": "symfony/polyfill-intl-icu",
+ "version": "v1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-icu.git",
+ "reference": "0f8dc2c45f69f8672379e9210bca4a115cd5146f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/0f8dc2c45f69f8672379e9210bca4a115cd5146f",
+ "reference": "0f8dc2c45f69f8672379e9210bca4a115cd5146f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "symfony/intl": "~2.3|~3.0"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's ICU-related data and classes",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "icu",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "time": "2016-05-18 14:26:46"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "dff51f72b0706335131b00a7f49606168c582594"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/dff51f72b0706335131b00a7f49606168c582594",
+ "reference": "dff51f72b0706335131b00a7f49606168c582594",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "time": "2016-05-18 14:26:46"
+ },
+ {
+ "name": "symfony/polyfill-php56",
+ "version": "v1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php56.git",
+ "reference": "3edf57a8fbf9a927533344cef65ad7e1cf31030a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/3edf57a8fbf9a927533344cef65ad7e1cf31030a",
+ "reference": "3edf57a8fbf9a927533344cef65ad7e1cf31030a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "symfony/polyfill-util": "~1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Php56\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "time": "2016-05-18 14:26:46"
+ },
+ {
+ "name": "symfony/polyfill-php70",
+ "version": "v1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php70.git",
+ "reference": "a42f4b6b05ed458910f8af4c4e1121b0101b2d85"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/a42f4b6b05ed458910f8af4c4e1121b0101b2d85",
+ "reference": "a42f4b6b05ed458910f8af4c4e1121b0101b2d85",
+ "shasum": ""
+ },
+ "require": {
+ "paragonie/random_compat": "~1.0|~2.0",
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Php70\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ],
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "time": "2016-05-18 14:26:46"
+ },
+ {
+ "name": "symfony/polyfill-util",
+ "version": "v1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-util.git",
+ "reference": "ef830ce3d218e622b221d6bfad42c751d974bf99"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/ef830ce3d218e622b221d6bfad42c751d974bf99",
+ "reference": "ef830ce3d218e622b221d6bfad42c751d974bf99",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Util\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony utilities for portability of PHP codes",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compat",
+ "compatibility",
+ "polyfill",
+ "shim"
+ ],
+ "time": "2016-05-18 14:26:46"
+ },
+ {
+ "name": "symfony/swiftmailer-bundle",
+ "version": "v2.3.11",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/swiftmailer-bundle.git",
+ "reference": "5e1a90f28213231ceee19c953bbebc5b5b95c690"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/5e1a90f28213231ceee19c953bbebc5b5b95c690",
+ "reference": "5e1a90f28213231ceee19c953bbebc5b5b95c690",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2",
+ "swiftmailer/swiftmailer": ">=4.2.0,~5.0",
+ "symfony/config": "~2.3|~3.0",
+ "symfony/dependency-injection": "~2.3|~3.0",
+ "symfony/http-kernel": "~2.3|~3.0",
+ "symfony/yaml": "~2.3|~3.0"
+ },
+ "require-dev": {
+ "symfony/phpunit-bridge": "~2.7|~3.0"
+ },
+ "suggest": {
+ "psr/log": "Allows logging"
+ },
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.3-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Bundle\\SwiftmailerBundle\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ },
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Symfony SwiftmailerBundle",
+ "homepage": "http://symfony.com",
+ "time": "2016-01-15 16:41:20"
+ },
+ {
+ "name": "symfony/symfony",
+ "version": "v3.1.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/symfony.git",
+ "reference": "e7e1d01fe103de78bca6fbf7f6f4acf64482d63c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/symfony/zipball/e7e1d01fe103de78bca6fbf7f6f4acf64482d63c",
+ "reference": "e7e1d01fe103de78bca6fbf7f6f4acf64482d63c",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/common": "~2.4",
+ "php": ">=5.5.9",
+ "psr/cache": "~1.0",
+ "psr/log": "~1.0",
+ "symfony/polyfill-intl-icu": "~1.0",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php56": "~1.0",
+ "symfony/polyfill-php70": "~1.0",
+ "symfony/polyfill-util": "~1.0",
+ "twig/twig": "~1.26|~2.0"
+ },
+ "conflict": {
+ "phpdocumentor/reflection-docblock": "<3.0",
+ "phpdocumentor/type-resolver": "<0.2.0"
+ },
+ "provide": {
+ "psr/cache-implementation": "1.0"
+ },
+ "replace": {
+ "symfony/asset": "self.version",
+ "symfony/browser-kit": "self.version",
+ "symfony/cache": "self.version",
+ "symfony/class-loader": "self.version",
+ "symfony/config": "self.version",
+ "symfony/console": "self.version",
+ "symfony/css-selector": "self.version",
+ "symfony/debug": "self.version",
+ "symfony/debug-bundle": "self.version",
+ "symfony/dependency-injection": "self.version",
+ "symfony/doctrine-bridge": "self.version",
+ "symfony/dom-crawler": "self.version",
+ "symfony/event-dispatcher": "self.version",
+ "symfony/expression-language": "self.version",
+ "symfony/filesystem": "self.version",
+ "symfony/finder": "self.version",
+ "symfony/form": "self.version",
+ "symfony/framework-bundle": "self.version",
+ "symfony/http-foundation": "self.version",
+ "symfony/http-kernel": "self.version",
+ "symfony/inflector": "self.version",
+ "symfony/intl": "self.version",
+ "symfony/ldap": "self.version",
+ "symfony/monolog-bridge": "self.version",
+ "symfony/options-resolver": "self.version",
+ "symfony/process": "self.version",
+ "symfony/property-access": "self.version",
+ "symfony/property-info": "self.version",
+ "symfony/proxy-manager-bridge": "self.version",
+ "symfony/routing": "self.version",
+ "symfony/security": "self.version",
+ "symfony/security-bundle": "self.version",
+ "symfony/security-core": "self.version",
+ "symfony/security-csrf": "self.version",
+ "symfony/security-guard": "self.version",
+ "symfony/security-http": "self.version",
+ "symfony/serializer": "self.version",
+ "symfony/stopwatch": "self.version",
+ "symfony/templating": "self.version",
+ "symfony/translation": "self.version",
+ "symfony/twig-bridge": "self.version",
+ "symfony/twig-bundle": "self.version",
+ "symfony/validator": "self.version",
+ "symfony/var-dumper": "self.version",
+ "symfony/web-profiler-bundle": "self.version",
+ "symfony/yaml": "self.version"
+ },
+ "require-dev": {
+ "cache/integration-tests": "dev-master",
+ "doctrine/cache": "~1.6",
+ "doctrine/data-fixtures": "1.0.*",
+ "doctrine/dbal": "~2.4",
+ "doctrine/doctrine-bundle": "~1.4",
+ "doctrine/orm": "~2.4,>=2.4.5",
+ "egulias/email-validator": "~1.2,>=1.2.1",
+ "monolog/monolog": "~1.11",
+ "ocramius/proxy-manager": "~0.4|~1.0|~2.0",
+ "phpdocumentor/reflection-docblock": "^3.0",
+ "predis/predis": "~1.0",
+ "symfony/phpunit-bridge": "~3.2",
+ "symfony/polyfill-apcu": "~1.1",
+ "symfony/security-acl": "~2.8|~3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Bridge\\Doctrine\\": "src/Symfony/Bridge/Doctrine/",
+ "Symfony\\Bridge\\Monolog\\": "src/Symfony/Bridge/Monolog/",
+ "Symfony\\Bridge\\ProxyManager\\": "src/Symfony/Bridge/ProxyManager/",
+ "Symfony\\Bridge\\Swiftmailer\\": "src/Symfony/Bridge/Swiftmailer/",
+ "Symfony\\Bridge\\Twig\\": "src/Symfony/Bridge/Twig/",
+ "Symfony\\Bundle\\": "src/Symfony/Bundle/",
+ "Symfony\\Component\\": "src/Symfony/Component/"
+ },
+ "classmap": [
+ "src/Symfony/Component/Intl/Resources/stubs"
+ ],
+ "exclude-from-classmap": [
+ "**/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "The Symfony PHP framework",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "framework"
+ ],
+ "time": "2016-10-03 19:01:14"
+ },
+ {
+ "name": "twig/twig",
+ "version": "v1.26.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/twigphp/Twig.git",
+ "reference": "81c2b5fd36581370c7731387f05dcdb577050513"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/twigphp/Twig/zipball/81c2b5fd36581370c7731387f05dcdb577050513",
+ "reference": "81c2b5fd36581370c7731387f05dcdb577050513",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.2.7"
+ },
+ "require-dev": {
+ "symfony/debug": "~2.7",
+ "symfony/phpunit-bridge": "~2.7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.26-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Twig_": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com",
+ "homepage": "http://fabien.potencier.org",
+ "role": "Lead Developer"
+ },
+ {
+ "name": "Armin Ronacher",
+ "email": "armin.ronacher@active-4.com",
+ "role": "Project Founder"
+ },
+ {
+ "name": "Twig Team",
+ "homepage": "http://twig.sensiolabs.org/contributors",
+ "role": "Contributors"
+ }
+ ],
+ "description": "Twig, the flexible, fast, and secure template language for PHP",
+ "homepage": "http://twig.sensiolabs.org",
+ "keywords": [
+ "templating"
+ ],
+ "time": "2016-10-02 16:19:13"
+ },
+ {
+ "name": "zendframework/zend-code",
+ "version": "2.6.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/zendframework/zend-code.git",
+ "reference": "95033f061b083e16cdee60530ec260d7d628b887"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/zendframework/zend-code/zipball/95033f061b083e16cdee60530ec260d7d628b887",
+ "reference": "95033f061b083e16cdee60530ec260d7d628b887",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.5 || 7.0.0 - 7.0.4 || ^7.0.6",
+ "zendframework/zend-eventmanager": "^2.6 || ^3.0"
+ },
+ "require-dev": {
+ "doctrine/annotations": "~1.0",
+ "fabpot/php-cs-fixer": "1.7.*",
+ "phpunit/phpunit": "^4.8.21",
+ "zendframework/zend-stdlib": "^2.7 || ^3.0"
+ },
+ "suggest": {
+ "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features",
+ "zendframework/zend-stdlib": "Zend\\Stdlib component"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.6-dev",
+ "dev-develop": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Zend\\Code\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "description": "provides facilities to generate arbitrary code using an object oriented interface",
+ "homepage": "https://github.com/zendframework/zend-code",
+ "keywords": [
+ "code",
+ "zf2"
+ ],
+ "time": "2016-04-20 17:26:42"
+ },
+ {
+ "name": "zendframework/zend-eventmanager",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/zendframework/zend-eventmanager.git",
+ "reference": "5c80bdee0e952be112dcec0968bad770082c3a6e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/5c80bdee0e952be112dcec0968bad770082c3a6e",
+ "reference": "5c80bdee0e952be112dcec0968bad770082c3a6e",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.5 || ^7.0"
+ },
+ "require-dev": {
+ "athletic/athletic": "^0.1",
+ "container-interop/container-interop": "^1.1.0",
+ "phpunit/phpunit": "~4.0",
+ "squizlabs/php_codesniffer": "^2.0",
+ "zendframework/zend-stdlib": "^2.7.3 || ^3.0"
+ },
+ "suggest": {
+ "container-interop/container-interop": "^1.1.0, to use the lazy listeners feature",
+ "zendframework/zend-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev",
+ "dev-develop": "3.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Zend\\EventManager\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "description": "Trigger and listen to events within a PHP application",
+ "homepage": "https://github.com/zendframework/zend-eventmanager",
+ "keywords": [
+ "event",
+ "eventmanager",
+ "events",
+ "zf2"
+ ],
+ "time": "2016-02-18 20:53:00"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "sensio/generator-bundle",
+ "version": "v3.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sensiolabs/SensioGeneratorBundle.git",
+ "reference": "3c20d16512f37d2be159eca0411b99a141b90fa4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/3c20d16512f37d2be159eca0411b99a141b90fa4",
+ "reference": "3c20d16512f37d2be159eca0411b99a141b90fa4",
+ "shasum": ""
+ },
+ "require": {
+ "symfony/console": "~2.7|~3.0",
+ "symfony/framework-bundle": "~2.7|~3.0",
+ "symfony/process": "~2.7|~3.0",
+ "symfony/yaml": "~2.7|~3.0"
+ },
+ "require-dev": {
+ "doctrine/orm": "~2.4",
+ "symfony/doctrine-bridge": "~2.7|~3.0",
+ "twig/twig": "~1.18"
+ },
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Sensio\\Bundle\\GeneratorBundle\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "This bundle generates code for you",
+ "time": "2016-09-06 01:30:19"
+ },
+ {
+ "name": "symfony/phpunit-bridge",
+ "version": "v3.1.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/phpunit-bridge.git",
+ "reference": "1f4e2059cf4ecae1053b9c3027b3fc548fd077b9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/1f4e2059cf4ecae1053b9c3027b3fc548fd077b9",
+ "reference": "1f4e2059cf4ecae1053b9c3027b3fc548fd077b9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "suggest": {
+ "symfony/debug": "For tracking deprecated interfaces usages at runtime with DebugClassLoader"
+ },
+ "type": "symfony-bridge",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Bridge\\PhpUnit\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony PHPUnit Bridge",
+ "homepage": "https://symfony.com",
+ "time": "2016-08-19 06:48:39"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": [],
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">=5.5.9"
+ },
+ "platform-dev": [],
+ "platform-overrides": {
+ "php": "5.5.9"
+ }
+}
diff --git a/trunk/link-assets.bat b/trunk/link-assets.bat
new file mode 100644
index 00000000..fe1f51b1
--- /dev/null
+++ b/trunk/link-assets.bat
@@ -0,0 +1,3 @@
+cd %~dp0\web\bundles
+rmdir /s /q app
+mklink /D app ..\..\src\AppBundle\Resources\public
diff --git a/trunk/src/.htaccess b/trunk/src/.htaccess
new file mode 100644
index 00000000..fb1de45b
--- /dev/null
+++ b/trunk/src/.htaccess
@@ -0,0 +1,7 @@
+
+ Require all denied
+
+
+ Order deny,allow
+ Deny from all
+
diff --git a/trunk/src/AppBundle/AppBundle.php b/trunk/src/AppBundle/AppBundle.php
new file mode 100644
index 00000000..05123b67
--- /dev/null
+++ b/trunk/src/AppBundle/AppBundle.php
@@ -0,0 +1,9 @@
+
+ * @date 12/08/2016
+ */
+
+namespace AppBundle\Controller;
+
+
+use AppBundle\Entity\BookingRequest;
+use AppBundle\Entity\BreadcrumbEntry;
+use AppBundle\Entity\Page;
+use AppBundle\Form\BookingRequestType;
+use AppBundle\Util;
+use Symfony\Bundle\FrameworkBundle\Controller\Controller;
+use Symfony\Component\HttpFoundation\Request;
+
+class BookingController extends Controller
+{
+ public function indexAction(Page $travelProgramPage, Request $request)
+ {
+ $travelProgram = $travelProgramPage->getTravelProgram();
+ if (!$request->query->has('nr'))
+ {
+ return $this->redirect($travelProgramPage->getUrlPath());
+ }
+ $this->getDoctrine()->getRepository('AppBundle:TravelPeriod')->getTrueTravelPeriods($travelProgram);
+
+ // #TODO Consider changing key of travel dates
+ foreach ($travelProgram->getTravelDates() as $curTravelDate)
+ {
+ if ($curTravelDate->getName() == $request->query->get('nr'))
+ {
+ $travelDate = $curTravelDate;
+ break;
+ }
+ }
+ if (!isset($travelDate))
+ {
+ throw $this->createNotFoundException();
+ }
+
+ $form = $this->createForm(BookingRequestType::class, null, [
+ 'travel_date' => $travelDate,
+ 'travel_program' => $travelProgram
+ ]);
+ //$form->submit([]);
+
+ $priceTypeById = $this->getDoctrine()->getRepository('AppBundle:TravelPeriodPriceType')->findAllIndexedById();
+
+ $breadcrumbEntries = Util::createBreadcrumb($travelProgramPage);
+ $breadcrumbEntries[] = new BreadcrumbEntry('Buchen', $travelProgramPage->getUrlPath() .'/buchen');
+
+ return $this->render('default/pages/booking.html.twig', [
+ 'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
+ 'page' => $travelProgramPage,
+ 'travel_program' => $travelProgram,
+ 'travel_date' => $travelDate,
+ 'form' => $form->createView(),
+ 'price_type_by_id' => $priceTypeById,
+ 'breadcrumb_entries' => $breadcrumbEntries,
+ ]);
+ }
+
+ public function calculatePrice()
+ {
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/trunk/src/AppBundle/Controller/DefaultController.php b/trunk/src/AppBundle/Controller/DefaultController.php
new file mode 100644
index 00000000..6c39f4ef
--- /dev/null
+++ b/trunk/src/AppBundle/Controller/DefaultController.php
@@ -0,0 +1,210 @@
+getDoctrine()->getManager();
+ }
+
+ /**
+ * @Route(path="/{req}", requirements={"req": ".+"})
+ */
+ public function defaultAction(Request $request)
+ {
+ die ("caught");
+ }
+
+ /**
+ * @Route("/")
+ */
+ public function homeAction()
+ {
+ return $this->render('default/pages/home.html.twig', [
+ 'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
+ ]);
+ }
+
+ public function cmsDefaultAction(Page $page)
+ {
+ return $this->render('default/pages/default.html.twig', [
+ 'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
+ 'page' => $page
+ ]);
+ }
+
+ public function cmsOverviewAction(Page $page)
+ {
+ return $this->render('default/pages/overview.html.twig', [
+ 'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
+ 'page' => $page
+ ]);
+ }
+
+ public function cmsTravelProgramOverviewAction(Page $page)
+ {
+ $childPages =
+ $this->getEntityManager()->getRepository('AppBundle:Page')->getChildrenWithTravelProgramsAndDates($page);
+
+ return $this->render('default/pages/travelProgramOverview.html.twig', [
+ 'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
+ 'page' => $page,
+ 'child_pages' => $childPages
+ ]);
+ }
+
+ public function cmsTravelProgramAction(Page $page)
+ {
+ $this->getDoctrine()->getRepository('AppBundle:TravelPeriod')->getTrueTravelPeriods($page->getTravelProgram());
+
+ // replace this example code with whatever you need
+ return $this->render('default/pages/travelProgram.html.twig', [
+ 'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
+ 'page' => $page,
+ 'travel_program' => $page->getTravelProgram()
+ ]);
+ }
+
+ /**
+ * @Route("/suche")
+ */
+ public function searchAction()
+ {
+ $stopwatch = $this->get('debug.stopwatch');
+
+ $stopwatch->start('search');
+ $r = $this->getDoctrine()->getRepository('AppBundle:TravelPeriod')->getTravelProgramsWithTravelDatesForTimePeriod(
+ //new \DateTime('2014-01-01'), new \DateTime('2017-01-01'), null, true);
+ new \DateTime(), new \DateTime('2016-12-12'), null, true);
+ $stopwatch->stop('search');
+
+ return $this->render('default/pages/search.html.twig', [
+ 'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
+ 'travel_programs' => $r
+ ]);
+ }
+
+ public function headerAction()
+ {
+ $qb = $this->getEntityManager()->createQueryBuilder();
+ $navPages = $qb
+ ->from('AppBundle:Page', 'page')
+ ->select('page')
+ ->leftJoin('page.children', 'childPage', Expr\Join::WITH, 'childPage.status > 0')
+ ->addSelect('childPage')
+ ->where('page.status > 0')
+ ->andWhere('page.template = \'overview\'')
+ ->andWhere('page.lvl = 0')
+ ->orderBy('page.title,childPage.title')
+ ->getQuery()
+ ->execute()
+ ;
+ return $this->render('default/components/header.html.twig', [
+ 'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
+ 'nav_pages' => $navPages
+ ]);
+ }
+
+ public function breadcrumbAction(Page $page)
+ {
+ return $this->render('default/components/breadcrumb.html.twig', [
+ 'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
+ 'breadcrumb_entries' => Util::createBreadcrumb($page)
+ ]);
+ }
+
+
+ /*
+ Suche Kindknoten
+ Für jeden Kindknoten
+ ++LFT
+ Setze LFT
+ f()
+ ++LFT
+ RGT = LFT
+ Setze RGT
+ */
+
+ /**
+ * @Route("/create-tree")
+ */
+ public function createTreeAction()
+ {
+ set_time_limit(0);
+ ini_set('memory_limit', '2048M');
+
+ $em = $this->getEntityManager();
+
+ foreach ($em->getEventManager()->getListeners() as $event => $listeners) {
+ foreach ($listeners as $hash => $listener) {
+ if ($listener instanceof TreeListener)
+ {
+ $em->getEventManager()->removeEventListener($event, $listener);
+ }
+ }
+ }
+
+ $em->beginTransaction();
+ $lft = 0;
+ $this->createTree(0, $lft, 0);
+ $em->commit();
+ $em->flush();
+ }
+
+ private function createTree($owner, &$lft, $lvl, $root = null)
+ {
+ $em = $this->getEntityManager();
+
+ $qb = $em->createQueryBuilder()->from('AppBundle:Page', 'p')->select('p');
+ $qb->where($qb->expr()->eq('p.owner', $owner));
+ if ($owner == 0)
+ {
+ $qb->orWhere('p.owner IS NULL');
+ }
+ $qb->orderBy('p.title');
+ $pages = $qb->getQuery()->execute();
+ foreach ($pages as $page)
+ {
+ /** @var Page $page */
+
+ if ($owner == 0)
+ {
+ $root = $page->getId();
+ }
+
+ ++$lft;
+ $page->setLft($lft);
+ $page->setLvl($lvl);
+ $page->setRoot($em->getReference('AppBundle:Page', $root));
+ if ($owner != 0)
+ {
+ $page->setParent($em->getReference('AppBundle:Page', $owner));
+ }
+
+ $this->createTree($page->getId(), $lft, $lvl + 1, $root);
+
+ ++$lft;
+ $page->setRgt($lft);
+
+ $em->persist($page);
+ }
+ }
+
+
+}
diff --git a/trunk/src/AppBundle/DoctrineExtensions/Query/MySql/DateAdd.php b/trunk/src/AppBundle/DoctrineExtensions/Query/MySql/DateAdd.php
new file mode 100644
index 00000000..7997cc94
--- /dev/null
+++ b/trunk/src/AppBundle/DoctrineExtensions/Query/MySql/DateAdd.php
@@ -0,0 +1,47 @@
+
+ * @date 10/31/2016
+ */
+
+namespace AppBundle\DoctrineExtensions\Query\MySql;
+
+
+use Doctrine\ORM\Query\AST\Functions\FunctionNode;
+use Doctrine\ORM\Query\Lexer;
+
+class DateAdd extends FunctionNode
+{
+ public $firstDateExpression = null;
+ public $intervalExpression = null;
+ public $unit = null;
+
+ public function parse(\Doctrine\ORM\Query\Parser $parser)
+ {
+ $parser->match(Lexer::T_IDENTIFIER);
+ $parser->match(Lexer::T_OPEN_PARENTHESIS);
+
+ $this->firstDateExpression = $parser->ArithmeticPrimary();
+
+ $parser->match(Lexer::T_COMMA);
+ $parser->match(Lexer::T_IDENTIFIER);
+
+ $this->intervalExpression = $parser->ArithmeticPrimary();
+
+ $parser->match(Lexer::T_IDENTIFIER);
+
+ /* @var $lexer Lexer */
+ $lexer = $parser->getLexer();
+ $this->unit = $lexer->token['value'];
+
+ $parser->match(Lexer::T_CLOSE_PARENTHESIS);
+ }
+
+ public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
+ {
+ return 'DATE_ADD(' .
+ $this->firstDateExpression->dispatch($sqlWalker) . ', INTERVAL ' .
+ $this->intervalExpression->dispatch($sqlWalker) . ' ' . $this->unit .
+ ')';
+ }
+}
\ No newline at end of file
diff --git a/trunk/src/AppBundle/Entity/BookingRequest.php b/trunk/src/AppBundle/Entity/BookingRequest.php
new file mode 100644
index 00000000..a3603a33
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/BookingRequest.php
@@ -0,0 +1,117 @@
+
+ * @date 12/16/2016
+ */
+
+namespace AppBundle\Entity;
+
+use Symfony\Component\Validator\Constraints as Assert;
+use Symfony\Component\Validator\Context\ExecutionContextInterface;
+
+class BookingRequest
+{
+ /**
+ * @var TravelDeparturePoint $departure
+ */
+ private $departure;
+
+ private $travelerCount;
+
+ /**
+ * @var TravelInsurance $insurance
+ */
+ private $insurance;
+
+ private $comfort;
+
+ private $travelOptions;
+
+ /**
+ * @return TravelDeparturePoint
+ */
+ public function getDeparture(): TravelDeparturePoint
+ {
+ return $this->departure;
+ }
+
+ /**
+ * @param TravelDeparturePoint $departure
+ */
+ public function setDeparture(TravelDeparturePoint $departure)
+ {
+ $this->departure = $departure;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getTravelerCount()
+ {
+ return $this->travelerCount;
+ }
+
+ /**
+ * @param mixed $travelerCount
+ */
+ public function setTravelerCount($travelerCount)
+ {
+ $this->travelerCount = $travelerCount;
+ }
+
+ /**
+ * @return TravelInsurance
+ */
+ public function getInsurance(): TravelInsurance
+ {
+ return $this->insurance;
+ }
+
+ /**
+ * @param TravelInsurance $insurance
+ */
+ public function setInsurance(TravelInsurance $insurance)
+ {
+ $this->insurance = $insurance;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getComfort()
+ {
+ return $this->comfort;
+ }
+
+ /**
+ * @param mixed $comfort
+ */
+ public function setComfort($comfort)
+ {
+ $this->comfort = $comfort;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getTravelOptions()
+ {
+ return $this->travelOptions;
+ }
+
+ /**
+ * @param mixed $travelOptions
+ */
+ public function setTravelOptions($travelOptions)
+ {
+ $this->travelOptions = $travelOptions;
+ }
+
+ /**
+ * @Assert\Callback
+ */
+ public function validate(ExecutionContextInterface $context, $payload)
+ {
+ //$context->
+ }
+}
\ No newline at end of file
diff --git a/trunk/src/AppBundle/Entity/BreadcrumbEntry.php b/trunk/src/AppBundle/Entity/BreadcrumbEntry.php
new file mode 100644
index 00000000..f6044c75
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/BreadcrumbEntry.php
@@ -0,0 +1,44 @@
+
+ * @date 12/08/2016
+ */
+
+namespace AppBundle\Entity;
+
+
+class BreadcrumbEntry
+{
+ private $title;
+ private $url;
+
+ /**
+ * BreadcrumbEntry constructor.
+ *
+ * @param $title
+ * @param $url
+ */
+ public function __construct($title, $url)
+ {
+ $this->title = $title;
+ $this->url = $url;
+ }
+
+ /**
+ * @return String
+ */
+ public function getTitle()
+ {
+ return $this->title;
+ }
+
+ /**
+ * @return String
+ */
+ public function getUrl()
+ {
+ return $this->url;
+ }
+
+
+}
\ No newline at end of file
diff --git a/trunk/src/AppBundle/Entity/Catalog.php b/trunk/src/AppBundle/Entity/Catalog.php
new file mode 100644
index 00000000..8ff4cd5f
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/Catalog.php
@@ -0,0 +1,97 @@
+title = $title;
+
+ return $this;
+ }
+
+ /**
+ * Get title
+ *
+ * @return string
+ */
+ public function getTitle()
+ {
+ return $this->title;
+ }
+
+ /**
+ * Set slug
+ *
+ * @param string $slug
+ *
+ * @return Catalog
+ */
+ public function setSlug($slug)
+ {
+ $this->slug = $slug;
+
+ return $this;
+ }
+
+ /**
+ * Get slug
+ *
+ * @return string
+ */
+ public function getSlug()
+ {
+ return $this->slug;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/FlightPeriod.php b/trunk/src/AppBundle/Entity/FlightPeriod.php
new file mode 100644
index 00000000..8d4e8e95
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/FlightPeriod.php
@@ -0,0 +1,206 @@
+startDate = $startDate;
+
+ return $this;
+ }
+
+ /**
+ * Get startDate
+ *
+ * @return \DateTime
+ */
+ public function getStartDate()
+ {
+ return $this->startDate;
+ }
+
+ /**
+ * Set endDate
+ *
+ * @param \DateTime $endDate
+ *
+ * @return FlightPeriod
+ */
+ public function setEndDate($endDate)
+ {
+ $this->endDate = $endDate;
+
+ return $this;
+ }
+
+ /**
+ * Get endDate
+ *
+ * @return \DateTime
+ */
+ public function getEndDate()
+ {
+ return $this->endDate;
+ }
+
+ /**
+ * Set price
+ *
+ * @param float $price
+ *
+ * @return FlightPeriod
+ */
+ public function setPrice($price)
+ {
+ $this->price = $price;
+
+ return $this;
+ }
+
+ /**
+ * Get price
+ *
+ * @return float
+ */
+ public function getPrice()
+ {
+ return $this->price;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Set travelArrivalPoint
+ *
+ * @param \AppBundle\Entity\TravelArrivalPoint $travelArrivalPoint
+ *
+ * @return FlightPeriod
+ */
+ public function setTravelArrivalPoint(\AppBundle\Entity\TravelArrivalPoint $travelArrivalPoint = null)
+ {
+ $this->travelArrivalPoint = $travelArrivalPoint;
+
+ return $this;
+ }
+
+ /**
+ * Get travelArrivalPoint
+ *
+ * @return \AppBundle\Entity\TravelArrivalPoint
+ */
+ public function getTravelArrivalPoint()
+ {
+ return $this->travelArrivalPoint;
+ }
+ /**
+ * Constructor
+ */
+ public function __construct()
+ {
+ $this->departures = new \Doctrine\Common\Collections\ArrayCollection();
+ }
+
+ /**
+ * Add departure
+ *
+ * @param \AppBundle\Entity\TravelDeparturePoint $departure
+ *
+ * @return FlightPeriod
+ */
+ public function addDeparture(\AppBundle\Entity\TravelDeparturePoint $departure)
+ {
+ $this->departures[] = $departure;
+
+ return $this;
+ }
+
+ /**
+ * Remove departure
+ *
+ * @param \AppBundle\Entity\TravelDeparturePoint $departure
+ */
+ public function removeDeparture(\AppBundle\Entity\TravelDeparturePoint $departure)
+ {
+ $this->departures->removeElement($departure);
+ }
+
+ /**
+ * Get departures
+ *
+ * @return \Doctrine\Common\Collections\Collection
+ */
+ public function getDepartures()
+ {
+ return $this->departures;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/FlightPeriodRepository.php b/trunk/src/AppBundle/Entity/FlightPeriodRepository.php
new file mode 100644
index 00000000..64367a2f
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/FlightPeriodRepository.php
@@ -0,0 +1,13 @@
+value = $value;
+
+ return $this;
+ }
+
+ /**
+ * Get value
+ *
+ * @return string
+ */
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+ /**
+ * Set url
+ *
+ * @param string $url
+ *
+ * @return Keyword
+ */
+ public function setUrl($url)
+ {
+ $this->url = $url;
+
+ return $this;
+ }
+
+ /**
+ * Get url
+ *
+ * @return string
+ */
+ public function getUrl()
+ {
+ return $this->url;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/Page.php b/trunk/src/AppBundle/Entity/Page.php
new file mode 100644
index 00000000..a84d0157
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/Page.php
@@ -0,0 +1,1053 @@
+owner = $owner;
+
+ return $this;
+ }
+
+ /**
+ * Get owner
+ *
+ * @return integer
+ */
+ public function getOwner()
+ {
+ return $this->owner;
+ }
+
+ /**
+ * Set ownerSecond
+ *
+ * @param integer $ownerSecond
+ *
+ * @return Page
+ */
+ public function setOwnerSecond($ownerSecond)
+ {
+ $this->ownerSecond = $ownerSecond;
+
+ return $this;
+ }
+
+ /**
+ * Get ownerSecond
+ *
+ * @return integer
+ */
+ public function getOwnerSecond()
+ {
+ return $this->ownerSecond;
+ }
+
+ /**
+ * Set catalogId
+ *
+ * @param integer $catalogId
+ *
+ * @return Page
+ */
+ public function setCatalogId($catalogId)
+ {
+ $this->catalogId = $catalogId;
+
+ return $this;
+ }
+
+ /**
+ * Get catalogId
+ *
+ * @return integer
+ */
+ public function getCatalogId()
+ {
+ return $this->catalogId;
+ }
+
+ /**
+ * Set catalogIndex
+ *
+ * @param integer $catalogIndex
+ *
+ * @return Page
+ */
+ public function setCatalogIndex($catalogIndex)
+ {
+ $this->catalogIndex = $catalogIndex;
+
+ return $this;
+ }
+
+ /**
+ * Get catalogIndex
+ *
+ * @return integer
+ */
+ public function getCatalogIndex()
+ {
+ return $this->catalogIndex;
+ }
+
+ /**
+ * Set slug
+ *
+ * @param string $slug
+ *
+ * @return Page
+ */
+ public function setSlug($slug)
+ {
+ $this->slug = $slug;
+
+ return $this;
+ }
+
+ /**
+ * Get slug
+ *
+ * @return string
+ */
+ public function getSlug()
+ {
+ return $this->slug;
+ }
+
+ /**
+ * Set status
+ *
+ * @param integer $status
+ *
+ * @return Page
+ */
+ public function setStatus($status)
+ {
+ $this->status = $status;
+
+ return $this;
+ }
+
+ /**
+ * Get status
+ *
+ * @return integer
+ */
+ public function getStatus()
+ {
+ return $this->status;
+ }
+
+ /**
+ * Set showInNavi
+ *
+ * @param integer $showInNavi
+ *
+ * @return Page
+ */
+ public function setShowInNavi($showInNavi)
+ {
+ $this->showInNavi = $showInNavi;
+
+ return $this;
+ }
+
+ /**
+ * Get showInNavi
+ *
+ * @return integer
+ */
+ public function getShowInNavi()
+ {
+ return $this->showInNavi;
+ }
+
+ /**
+ * Set order
+ *
+ * @param integer $order
+ *
+ * @return Page
+ */
+ public function setOrder($order)
+ {
+ $this->order = $order;
+
+ return $this;
+ }
+
+ /**
+ * Get order
+ *
+ * @return integer
+ */
+ public function getOrder()
+ {
+ return $this->order;
+ }
+
+ /**
+ * Set title
+ *
+ * @param string $title
+ *
+ * @return Page
+ */
+ public function setTitle($title)
+ {
+ $this->title = $title;
+
+ return $this;
+ }
+
+ /**
+ * Get title
+ *
+ * @return string
+ */
+ public function getTitle()
+ {
+ return $this->title;
+ }
+
+ /**
+ * Set pagetitle
+ *
+ * @param string $pagetitle
+ *
+ * @return Page
+ */
+ public function setPagetitle($pagetitle)
+ {
+ $this->pagetitle = $pagetitle;
+
+ return $this;
+ }
+
+ /**
+ * Get pagetitle
+ *
+ * @return string
+ */
+ public function getPagetitle()
+ {
+ return $this->pagetitle;
+ }
+
+ /**
+ * Set description
+ *
+ * @param string $description
+ *
+ * @return Page
+ */
+ public function setDescription($description)
+ {
+ $this->description = $description;
+
+ return $this;
+ }
+
+ /**
+ * Get description
+ *
+ * @return string
+ */
+ public function getDescription()
+ {
+ return $this->description;
+ }
+
+ /**
+ * Set keywords
+ *
+ * @param string $keywords
+ *
+ * @return Page
+ */
+ public function setKeywords($keywords)
+ {
+ $this->keywords = $keywords;
+
+ return $this;
+ }
+
+ /**
+ * Get keywords
+ *
+ * @return string
+ */
+ public function getKeywords()
+ {
+ return $this->keywords;
+ }
+
+ /**
+ * Set content
+ *
+ * @param string $content
+ *
+ * @return Page
+ */
+ public function setContent($content)
+ {
+ $this->content = $content;
+
+ return $this;
+ }
+
+ /**
+ * Get content
+ *
+ * @return string
+ */
+ public function getContent()
+ {
+ return $this->content;
+ }
+
+ /**
+ * Set bumaDestination
+ *
+ * @param string $bumaDestination
+ *
+ * @return Page
+ */
+ public function setBumaDestination($bumaDestination)
+ {
+ $this->bumaDestination = $bumaDestination;
+
+ return $this;
+ }
+
+ /**
+ * Get bumaDestination
+ *
+ * @return string
+ */
+ public function getBumaDestination()
+ {
+ return $this->bumaDestination;
+ }
+
+ /**
+ * Set oldCatalogid
+ *
+ * @param integer $oldCatalogid
+ *
+ * @return Page
+ */
+ public function setOldCatalogid($oldCatalogid)
+ {
+ $this->oldCatalogid = $oldCatalogid;
+
+ return $this;
+ }
+
+ /**
+ * Get oldCatalogid
+ *
+ * @return integer
+ */
+ public function getOldCatalogid()
+ {
+ return $this->oldCatalogid;
+ }
+
+ /**
+ * Set oldOwnerid
+ *
+ * @param integer $oldOwnerid
+ *
+ * @return Page
+ */
+ public function setOldOwnerid($oldOwnerid)
+ {
+ $this->oldOwnerid = $oldOwnerid;
+
+ return $this;
+ }
+
+ /**
+ * Get oldOwnerid
+ *
+ * @return integer
+ */
+ public function getOldOwnerid()
+ {
+ return $this->oldOwnerid;
+ }
+
+ /**
+ * Set bumaGjr
+ *
+ * @param integer $bumaGjr
+ *
+ * @return Page
+ */
+ public function setBumaGjr($bumaGjr)
+ {
+ $this->bumaGjr = $bumaGjr;
+
+ return $this;
+ }
+
+ /**
+ * Get bumaGjr
+ *
+ * @return integer
+ */
+ public function getBumaGjr()
+ {
+ return $this->bumaGjr;
+ }
+
+ /**
+ * Set date
+ *
+ * @param \DateTime $date
+ *
+ * @return Page
+ */
+ public function setDate($date)
+ {
+ $this->date = $date;
+
+ return $this;
+ }
+
+ /**
+ * Get date
+ *
+ * @return \DateTime
+ */
+ public function getDate()
+ {
+ return $this->date;
+ }
+
+ /**
+ * Set priceTags
+ *
+ * @param boolean $priceTags
+ *
+ * @return Page
+ */
+ public function setPriceTags($priceTags)
+ {
+ $this->priceTags = $priceTags;
+
+ return $this;
+ }
+
+ /**
+ * Get priceTags
+ *
+ * @return boolean
+ */
+ public function getPriceTags()
+ {
+ return $this->priceTags;
+ }
+
+ /**
+ * Set textRight
+ *
+ * @param string $textRight
+ *
+ * @return Page
+ */
+ public function setTextRight($textRight)
+ {
+ $this->textRight = $textRight;
+
+ return $this;
+ }
+
+ /**
+ * Get textRight
+ *
+ * @return string
+ */
+ public function getTextRight()
+ {
+ return $this->textRight;
+ }
+
+ /**
+ * Set keyword
+ *
+ * @param string $keyword
+ *
+ * @return Page
+ */
+ public function setKeyword($keyword)
+ {
+ $this->keyword = $keyword;
+
+ return $this;
+ }
+
+ /**
+ * Get keyword
+ *
+ * @return string
+ */
+ public function getKeyword()
+ {
+ return $this->keyword;
+ }
+
+ /**
+ * Set canonicalUrl
+ *
+ * @param string $canonicalUrl
+ *
+ * @return Page
+ */
+ public function setCanonicalUrl($canonicalUrl)
+ {
+ $this->canonicalUrl = $canonicalUrl;
+
+ return $this;
+ }
+
+ /**
+ * Get canonicalUrl
+ *
+ * @return string
+ */
+ public function getCanonicalUrl()
+ {
+ return $this->canonicalUrl;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Set country
+ *
+ * @param \AppBundle\Entity\TravelCountry $country
+ *
+ * @return Page
+ */
+ public function setCountry(\AppBundle\Entity\TravelCountry $country = null)
+ {
+ $this->country = $country;
+
+ return $this;
+ }
+
+ /**
+ * Get country
+ *
+ * @return \AppBundle\Entity\TravelCountry
+ */
+ public function getCountry()
+ {
+ return $this->country;
+ }
+ /**
+ * Constructor
+ */
+ public function __construct()
+ {
+ $this->children = new \Doctrine\Common\Collections\ArrayCollection();
+ }
+
+ /**
+ * Set lft
+ *
+ * @param integer $lft
+ *
+ * @return Page
+ */
+ public function setLft($lft)
+ {
+ $this->lft = $lft;
+
+ return $this;
+ }
+
+ /**
+ * Get lft
+ *
+ * @return integer
+ */
+ public function getLft()
+ {
+ return $this->lft;
+ }
+
+ /**
+ * Set lvl
+ *
+ * @param integer $lvl
+ *
+ * @return Page
+ */
+ public function setLvl($lvl)
+ {
+ $this->lvl = $lvl;
+
+ return $this;
+ }
+
+ /**
+ * Get lvl
+ *
+ * @return integer
+ */
+ public function getLvl()
+ {
+ return $this->lvl;
+ }
+
+ /**
+ * Set rgt
+ *
+ * @param integer $rgt
+ *
+ * @return Page
+ */
+ public function setRgt($rgt)
+ {
+ $this->rgt = $rgt;
+
+ return $this;
+ }
+
+ /**
+ * Get rgt
+ *
+ * @return integer
+ */
+ public function getRgt()
+ {
+ return $this->rgt;
+ }
+
+ /**
+ * Set root
+ *
+ * @param \AppBundle\Entity\Page $root
+ *
+ * @return Page
+ */
+ public function setRoot(\AppBundle\Entity\Page $root = null)
+ {
+ $this->root = $root;
+
+ return $this;
+ }
+
+ /**
+ * Get root
+ *
+ * @return \AppBundle\Entity\Page
+ */
+ public function getRoot()
+ {
+ return $this->root;
+ }
+
+ /**
+ * Set parent
+ *
+ * @param \AppBundle\Entity\Page $parent
+ *
+ * @return Page
+ */
+ public function setParent(\AppBundle\Entity\Page $parent = null)
+ {
+ $this->parent = $parent;
+
+ return $this;
+ }
+
+ /**
+ * Get parent
+ *
+ * @return \AppBundle\Entity\Page
+ */
+ public function getParent()
+ {
+ return $this->parent;
+ }
+
+ /**
+ * Add child
+ *
+ * @param \AppBundle\Entity\Page $child
+ *
+ * @return Page
+ */
+ public function addChild(\AppBundle\Entity\Page $child)
+ {
+ $this->children[] = $child;
+
+ return $this;
+ }
+
+ /**
+ * Remove child
+ *
+ * @param \AppBundle\Entity\Page $child
+ */
+ public function removeChild(\AppBundle\Entity\Page $child)
+ {
+ $this->children->removeElement($child);
+ }
+
+ /**
+ * Get children
+ *
+ * @return \Doctrine\Common\Collections\Collection
+ */
+ public function getChildren()
+ {
+ return $this->children;
+ }
+
+ /**
+ * Set template
+ *
+ * @param string $template
+ *
+ * @return Page
+ */
+ public function setTemplate($template)
+ {
+ $this->template = $template;
+
+ return $this;
+ }
+
+ /**
+ * Get template
+ *
+ * @return string
+ */
+ public function getTemplate()
+ {
+ return $this->template;
+ }
+
+ /**
+ * Set previewImageUrl
+ *
+ * @param string $previewImageUrl
+ *
+ * @return Page
+ */
+ public function setPreviewImageUrl($previewImageUrl)
+ {
+ $this->previewImageUrl = $previewImageUrl;
+
+ return $this;
+ }
+
+ /**
+ * Get previewImageUrl
+ *
+ * @return string
+ */
+ public function getPreviewImageUrl()
+ {
+ return $this->previewImageUrl;
+ }
+
+ /**
+ * Set travelProgram
+ *
+ * @param \AppBundle\Entity\TravelProgram $travelProgram
+ *
+ * @return Page
+ */
+ public function setTravelProgram(\AppBundle\Entity\TravelProgram $travelProgram = null)
+ {
+ $this->travelProgram = $travelProgram;
+
+ return $this;
+ }
+
+ /**
+ * Get travelProgram
+ *
+ * @return \AppBundle\Entity\TravelProgram
+ */
+ public function getTravelProgram()
+ {
+ return $this->travelProgram;
+ }
+
+ public function getUrlPath()
+ {
+ $urlParts = [];
+ $page = $this;
+ do
+ {
+ $urlParts[] = $page->getSlug();
+ $page = $page->getParent();
+ } while ($page !== null);
+ return '/'. implode('/', array_reverse($urlParts));
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/PageRepository.php b/trunk/src/AppBundle/Entity/PageRepository.php
new file mode 100644
index 00000000..9757adb1
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/PageRepository.php
@@ -0,0 +1,40 @@
+getChildrenQueryBuilder($page)
+ ->leftJoin('node.travelProgram', 'tp')
+ ->addSelect('tp')
+ ->andWhere('tp.status > 0')
+ ->andWhere('node.status > 0')
+ ->getQuery()
+ ->execute();
+ /** @var Page $childPage */
+ foreach ($pages as &$childPage)
+ {
+ if ($childPage->getTravelProgram())
+ {
+ $this->getEntityManager()->getRepository('AppBundle:TravelPeriod')->getTrueTravelPeriods(
+ $childPage->getTravelProgram());
+ }
+ }
+ return $pages;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TestTree.php b/trunk/src/AppBundle/Entity/TestTree.php
new file mode 100644
index 00000000..fd12679c
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TestTree.php
@@ -0,0 +1,218 @@
+
+ * @date 12/03/2016
+ */
+
+namespace AppBundle\Entity;
+
+use Gedmo\Mapping\Annotation as Gedmo;
+use Doctrine\ORM\Mapping as ORM;
+
+/**
+ * @ORM\Table(name="test_tree")
+ * @ORM\Entity(repositoryClass="Gedmo\Tree\Entity\Repository\NestedTreeRepository")
+ * @Gedmo\Tree(type="nested")
+ */
+class TestTree
+{
+ /**
+ * @var integer
+ *
+ * @ORM\Column(name="id", type="integer")
+ * @ORM\Id
+ * @ORM\GeneratedValue(strategy="IDENTITY")
+ */
+ private $id;
+
+ /**
+ * @Gedmo\TreeLeft
+ * @ORM\Column(type="integer", nullable=true)
+ */
+ protected $lft;
+
+ /**
+ * @Gedmo\TreeLevel()
+ * @ORM\Column(type="integer", nullable=true)
+ */
+ protected $lvl;
+
+ /**
+ * @Gedmo\TreeRight
+ * @ORM\Column(type="integer", nullable=true)
+ */
+ protected $rgt;
+
+ /**
+ * @Gedmo\TreeRoot
+ * @ORM\ManyToOne(targetEntity="AppBundle\Entity\TestTree")
+ * @ORM\JoinColumn(name="tree_root", referencedColumnName="id", onDelete="CASCADE")
+ */
+ private $root;
+
+ /**
+ * @Gedmo\TreeParent
+ * @ORM\ManyToOne(targetEntity="AppBundle\Entity\TestTree", inversedBy="children")
+ * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="CASCADE")
+ */
+ private $parent;
+
+ /**
+ * @ORM\Column(type="string", length=255, nullable=true)
+ */
+ protected $value;
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Set lft
+ *
+ * @param integer $lft
+ *
+ * @return TestTree
+ */
+ public function setLft($lft)
+ {
+ $this->lft = $lft;
+
+ return $this;
+ }
+
+ /**
+ * Get lft
+ *
+ * @return integer
+ */
+ public function getLft()
+ {
+ return $this->lft;
+ }
+
+ /**
+ * Set lvl
+ *
+ * @param integer $lvl
+ *
+ * @return TestTree
+ */
+ public function setLvl($lvl)
+ {
+ $this->lvl = $lvl;
+
+ return $this;
+ }
+
+ /**
+ * Get lvl
+ *
+ * @return integer
+ */
+ public function getLvl()
+ {
+ return $this->lvl;
+ }
+
+ /**
+ * Set rgt
+ *
+ * @param integer $rgt
+ *
+ * @return TestTree
+ */
+ public function setRgt($rgt)
+ {
+ $this->rgt = $rgt;
+
+ return $this;
+ }
+
+ /**
+ * Get rgt
+ *
+ * @return integer
+ */
+ public function getRgt()
+ {
+ return $this->rgt;
+ }
+
+ /**
+ * Set root
+ *
+ * @param \AppBundle\Entity\TestTree $root
+ *
+ * @return TestTree
+ */
+ public function setRoot(\AppBundle\Entity\TestTree $root = null)
+ {
+ $this->root = $root;
+
+ return $this;
+ }
+
+ /**
+ * Get root
+ *
+ * @return \AppBundle\Entity\TestTree
+ */
+ public function getRoot()
+ {
+ return $this->root;
+ }
+
+ /**
+ * Set parent
+ *
+ * @param \AppBundle\Entity\TestTree $parent
+ *
+ * @return TestTree
+ */
+ public function setParent(\AppBundle\Entity\TestTree $parent = null)
+ {
+ $this->parent = $parent;
+
+ return $this;
+ }
+
+ /**
+ * Get parent
+ *
+ * @return \AppBundle\Entity\TestTree
+ */
+ public function getParent()
+ {
+ return $this->parent;
+ }
+
+ /**
+ * Set value
+ *
+ * @param string $value
+ *
+ * @return TestTree
+ */
+ public function setValue($value)
+ {
+ $this->value = $value;
+
+ return $this;
+ }
+
+ /**
+ * Get value
+ *
+ * @return string
+ */
+ public function getValue()
+ {
+ return $this->value;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelArrivalPoint.php b/trunk/src/AppBundle/Entity/TravelArrivalPoint.php
new file mode 100644
index 00000000..922b6fcc
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelArrivalPoint.php
@@ -0,0 +1,188 @@
+name = $name;
+
+ return $this;
+ }
+
+ /**
+ * Get name
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Set travelCountry
+ *
+ * @param \AppBundle\Entity\TravelCountry $travelCountry
+ *
+ * @return TravelArrivalPoint
+ */
+ public function setTravelCountry(\AppBundle\Entity\TravelCountry $travelCountry = null)
+ {
+ $this->travelCountry = $travelCountry;
+
+ return $this;
+ }
+
+ /**
+ * Get travelCountry
+ *
+ * @return \AppBundle\Entity\TravelCountry
+ */
+ public function getTravelCountry()
+ {
+ return $this->travelCountry;
+ }
+ /**
+ * Constructor
+ */
+ public function __construct()
+ {
+ $this->departures = new \Doctrine\Common\Collections\ArrayCollection();
+ }
+
+ /**
+ * Add departure
+ *
+ * @param \AppBundle\Entity\TravelDeparturePoint $departure
+ *
+ * @return TravelArrivalPoint
+ */
+ public final function addDeparture(\AppBundle\Entity\TravelDeparturePoint $departure)
+ {
+ if (!$this->__areDeparturesInitialized__ && isset($this->__initializer__))
+ {
+ // Imitate proxy behavior, because this method is final and therefore ignored by the proxy
+ $this->__initializer__->__invoke($this, 'addDeparture', [$departure]);
+ }
+ $this->departures[] = $departure;
+
+ return $this;
+ }
+
+ public $__initializer__;
+
+ public $__areDeparturesInitialized__ = false;
+
+ /**
+ * Set departures, because the travel date search algorithm already retrieves them at another place. Therefore
+ * the proxy must be prevented from loading the entire entity as soon as the manually attached departures are
+ * accessed. To achieve the prevention, the accessor methods are "final". They imitate the proxy's behavior, in
+ * case they are called and departures haven't been set manually before.
+ *
+ * @param ArrayCollection $departures
+ *
+ * @internal
+ */
+ public final function __setDepartures($departures)
+ {
+ $this->__areDeparturesInitialized__ = true;
+ if ($departures === null)
+ {
+ $this->departures = null;
+ }
+ $this->departures = new ArrayCollection();
+ foreach ($departures as $departure)
+ {
+ $this->departures->add($departure);
+ }
+ }
+
+ /**
+ * Remove departure
+ *
+ * @param \AppBundle\Entity\TravelDeparturePoint $departure
+ */
+ public final function removeDeparture(\AppBundle\Entity\TravelDeparturePoint $departure)
+ {
+ if (!$this->__areDeparturesInitialized__ && isset($this->__initializer__))
+ {
+ // Imitate proxy behavior, because this method is final and therefore ignored by the proxy
+ $this->__initializer__->__invoke($this, 'removeDeparture', [$departure]);
+ }
+ $this->departures->removeElement($departure);
+ }
+
+ /**
+ * Get departures
+ *
+ * @return \Doctrine\Common\Collections\Collection|TravelDeparturePoint[]
+ */
+ public final function getDepartures()
+ {
+ if (!$this->__areDeparturesInitialized__ && isset($this->__initializer__))
+ {
+ // Imitate proxy behavior, because this method is final and therefore ignored by the proxy
+ $this->__initializer__->__invoke($this, 'getDeparture', []);
+ }
+ return $this->departures;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelBooking.php b/trunk/src/AppBundle/Entity/TravelBooking.php
new file mode 100644
index 00000000..1a9fa4be
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelBooking.php
@@ -0,0 +1,1089 @@
+ip = $ip;
+
+ return $this;
+ }
+
+ /**
+ * Get ip
+ *
+ * @return string
+ */
+ public function getIp()
+ {
+ return $this->ip;
+ }
+
+ /**
+ * Set created
+ *
+ * @param \DateTime $created
+ *
+ * @return TravelBooking
+ */
+ public function setCreated($created)
+ {
+ $this->created = $created;
+
+ return $this;
+ }
+
+ /**
+ * Get created
+ *
+ * @return \DateTime
+ */
+ public function getCreated()
+ {
+ return $this->created;
+ }
+
+ /**
+ * Set programName
+ *
+ * @param string $programName
+ *
+ * @return TravelBooking
+ */
+ public function setProgramName($programName)
+ {
+ $this->programName = $programName;
+
+ return $this;
+ }
+
+ /**
+ * Get programName
+ *
+ * @return string
+ */
+ public function getProgramName()
+ {
+ return $this->programName;
+ }
+
+ /**
+ * Set programId
+ *
+ * @param integer $programId
+ *
+ * @return TravelBooking
+ */
+ public function setProgramId($programId)
+ {
+ $this->programId = $programId;
+
+ return $this;
+ }
+
+ /**
+ * Get programId
+ *
+ * @return integer
+ */
+ public function getProgramId()
+ {
+ return $this->programId;
+ }
+
+ /**
+ * Set periodId
+ *
+ * @param integer $periodId
+ *
+ * @return TravelBooking
+ */
+ public function setPeriodId($periodId)
+ {
+ $this->periodId = $periodId;
+
+ return $this;
+ }
+
+ /**
+ * Get periodId
+ *
+ * @return integer
+ */
+ public function getPeriodId()
+ {
+ return $this->periodId;
+ }
+
+ /**
+ * Set class
+ *
+ * @param string $class
+ *
+ * @return TravelBooking
+ */
+ public function setClass($class)
+ {
+ $this->class = $class;
+
+ return $this;
+ }
+
+ /**
+ * Get class
+ *
+ * @return string
+ */
+ public function getClass()
+ {
+ return $this->class;
+ }
+
+ /**
+ * Set salutation
+ *
+ * @param integer $salutation
+ *
+ * @return TravelBooking
+ */
+ public function setSalutation($salutation)
+ {
+ $this->salutation = $salutation;
+
+ return $this;
+ }
+
+ /**
+ * Get salutation
+ *
+ * @return integer
+ */
+ public function getSalutation()
+ {
+ return $this->salutation;
+ }
+
+ /**
+ * Set firstName
+ *
+ * @param string $firstName
+ *
+ * @return TravelBooking
+ */
+ public function setFirstName($firstName)
+ {
+ $this->firstName = $firstName;
+
+ return $this;
+ }
+
+ /**
+ * Get firstName
+ *
+ * @return string
+ */
+ public function getFirstName()
+ {
+ return $this->firstName;
+ }
+
+ /**
+ * Set lastName
+ *
+ * @param string $lastName
+ *
+ * @return TravelBooking
+ */
+ public function setLastName($lastName)
+ {
+ $this->lastName = $lastName;
+
+ return $this;
+ }
+
+ /**
+ * Get lastName
+ *
+ * @return string
+ */
+ public function getLastName()
+ {
+ return $this->lastName;
+ }
+
+ /**
+ * Set street
+ *
+ * @param string $street
+ *
+ * @return TravelBooking
+ */
+ public function setStreet($street)
+ {
+ $this->street = $street;
+
+ return $this;
+ }
+
+ /**
+ * Get street
+ *
+ * @return string
+ */
+ public function getStreet()
+ {
+ return $this->street;
+ }
+
+ /**
+ * Set houseNr
+ *
+ * @param string $houseNr
+ *
+ * @return TravelBooking
+ */
+ public function setHouseNr($houseNr)
+ {
+ $this->houseNr = $houseNr;
+
+ return $this;
+ }
+
+ /**
+ * Get houseNr
+ *
+ * @return string
+ */
+ public function getHouseNr()
+ {
+ return $this->houseNr;
+ }
+
+ /**
+ * Set zipcode
+ *
+ * @param string $zipcode
+ *
+ * @return TravelBooking
+ */
+ public function setZipcode($zipcode)
+ {
+ $this->zipcode = $zipcode;
+
+ return $this;
+ }
+
+ /**
+ * Get zipcode
+ *
+ * @return string
+ */
+ public function getZipcode()
+ {
+ return $this->zipcode;
+ }
+
+ /**
+ * Set city
+ *
+ * @param string $city
+ *
+ * @return TravelBooking
+ */
+ public function setCity($city)
+ {
+ $this->city = $city;
+
+ return $this;
+ }
+
+ /**
+ * Get city
+ *
+ * @return string
+ */
+ public function getCity()
+ {
+ return $this->city;
+ }
+
+ /**
+ * Set country
+ *
+ * @param integer $country
+ *
+ * @return TravelBooking
+ */
+ public function setCountry($country)
+ {
+ $this->country = $country;
+
+ return $this;
+ }
+
+ /**
+ * Get country
+ *
+ * @return integer
+ */
+ public function getCountry()
+ {
+ return $this->country;
+ }
+
+ /**
+ * Set mail
+ *
+ * @param string $mail
+ *
+ * @return TravelBooking
+ */
+ public function setMail($mail)
+ {
+ $this->mail = $mail;
+
+ return $this;
+ }
+
+ /**
+ * Get mail
+ *
+ * @return string
+ */
+ public function getMail()
+ {
+ return $this->mail;
+ }
+
+ /**
+ * Set phone
+ *
+ * @param string $phone
+ *
+ * @return TravelBooking
+ */
+ public function setPhone($phone)
+ {
+ $this->phone = $phone;
+
+ return $this;
+ }
+
+ /**
+ * Get phone
+ *
+ * @return string
+ */
+ public function getPhone()
+ {
+ return $this->phone;
+ }
+
+ /**
+ * Set fax
+ *
+ * @param string $fax
+ *
+ * @return TravelBooking
+ */
+ public function setFax($fax)
+ {
+ $this->fax = $fax;
+
+ return $this;
+ }
+
+ /**
+ * Get fax
+ *
+ * @return string
+ */
+ public function getFax()
+ {
+ return $this->fax;
+ }
+
+ /**
+ * Set selectedDeparture
+ *
+ * @param string $selectedDeparture
+ *
+ * @return TravelBooking
+ */
+ public function setSelectedDeparture($selectedDeparture)
+ {
+ $this->selectedDeparture = $selectedDeparture;
+
+ return $this;
+ }
+
+ /**
+ * Get selectedDeparture
+ *
+ * @return string
+ */
+ public function getSelectedDeparture()
+ {
+ return $this->selectedDeparture;
+ }
+
+ /**
+ * Set selectedStartDate
+ *
+ * @param \DateTime $selectedStartDate
+ *
+ * @return TravelBooking
+ */
+ public function setSelectedStartDate($selectedStartDate)
+ {
+ $this->selectedStartDate = $selectedStartDate;
+
+ return $this;
+ }
+
+ /**
+ * Get selectedStartDate
+ *
+ * @return \DateTime
+ */
+ public function getSelectedStartDate()
+ {
+ return $this->selectedStartDate;
+ }
+
+ /**
+ * Set selectedEndDate
+ *
+ * @param \DateTime $selectedEndDate
+ *
+ * @return TravelBooking
+ */
+ public function setSelectedEndDate($selectedEndDate)
+ {
+ $this->selectedEndDate = $selectedEndDate;
+
+ return $this;
+ }
+
+ /**
+ * Get selectedEndDate
+ *
+ * @return \DateTime
+ */
+ public function getSelectedEndDate()
+ {
+ return $this->selectedEndDate;
+ }
+
+ /**
+ * Set selectedAdults
+ *
+ * @param integer $selectedAdults
+ *
+ * @return TravelBooking
+ */
+ public function setSelectedAdults($selectedAdults)
+ {
+ $this->selectedAdults = $selectedAdults;
+
+ return $this;
+ }
+
+ /**
+ * Get selectedAdults
+ *
+ * @return integer
+ */
+ public function getSelectedAdults()
+ {
+ return $this->selectedAdults;
+ }
+
+ /**
+ * Set selectedChild1
+ *
+ * @param integer $selectedChild1
+ *
+ * @return TravelBooking
+ */
+ public function setSelectedChild1($selectedChild1)
+ {
+ $this->selectedChild1 = $selectedChild1;
+
+ return $this;
+ }
+
+ /**
+ * Get selectedChild1
+ *
+ * @return integer
+ */
+ public function getSelectedChild1()
+ {
+ return $this->selectedChild1;
+ }
+
+ /**
+ * Set selectedChild2
+ *
+ * @param integer $selectedChild2
+ *
+ * @return TravelBooking
+ */
+ public function setSelectedChild2($selectedChild2)
+ {
+ $this->selectedChild2 = $selectedChild2;
+
+ return $this;
+ }
+
+ /**
+ * Get selectedChild2
+ *
+ * @return integer
+ */
+ public function getSelectedChild2()
+ {
+ return $this->selectedChild2;
+ }
+
+ /**
+ * Set selectedChild3
+ *
+ * @param integer $selectedChild3
+ *
+ * @return TravelBooking
+ */
+ public function setSelectedChild3($selectedChild3)
+ {
+ $this->selectedChild3 = $selectedChild3;
+
+ return $this;
+ }
+
+ /**
+ * Get selectedChild3
+ *
+ * @return integer
+ */
+ public function getSelectedChild3()
+ {
+ return $this->selectedChild3;
+ }
+
+ /**
+ * Set rooms
+ *
+ * @param string $rooms
+ *
+ * @return TravelBooking
+ */
+ public function setRooms($rooms)
+ {
+ $this->rooms = $rooms;
+
+ return $this;
+ }
+
+ /**
+ * Get rooms
+ *
+ * @return string
+ */
+ public function getRooms()
+ {
+ return $this->rooms;
+ }
+
+ /**
+ * Set participants
+ *
+ * @param string $participants
+ *
+ * @return TravelBooking
+ */
+ public function setParticipants($participants)
+ {
+ $this->participants = $participants;
+
+ return $this;
+ }
+
+ /**
+ * Get participants
+ *
+ * @return string
+ */
+ public function getParticipants()
+ {
+ return $this->participants;
+ }
+
+ /**
+ * Set participantsTotal
+ *
+ * @param integer $participantsTotal
+ *
+ * @return TravelBooking
+ */
+ public function setParticipantsTotal($participantsTotal)
+ {
+ $this->participantsTotal = $participantsTotal;
+
+ return $this;
+ }
+
+ /**
+ * Get participantsTotal
+ *
+ * @return integer
+ */
+ public function getParticipantsTotal()
+ {
+ return $this->participantsTotal;
+ }
+
+ /**
+ * Set priceTotal
+ *
+ * @param float $priceTotal
+ *
+ * @return TravelBooking
+ */
+ public function setPriceTotal($priceTotal)
+ {
+ $this->priceTotal = $priceTotal;
+
+ return $this;
+ }
+
+ /**
+ * Get priceTotal
+ *
+ * @return float
+ */
+ public function getPriceTotal()
+ {
+ return $this->priceTotal;
+ }
+
+ /**
+ * Set comments
+ *
+ * @param string $comments
+ *
+ * @return TravelBooking
+ */
+ public function setComments($comments)
+ {
+ $this->comments = $comments;
+
+ return $this;
+ }
+
+ /**
+ * Get comments
+ *
+ * @return string
+ */
+ public function getComments()
+ {
+ return $this->comments;
+ }
+
+ /**
+ * Set insuranceName
+ *
+ * @param string $insuranceName
+ *
+ * @return TravelBooking
+ */
+ public function setInsuranceName($insuranceName)
+ {
+ $this->insuranceName = $insuranceName;
+
+ return $this;
+ }
+
+ /**
+ * Get insuranceName
+ *
+ * @return string
+ */
+ public function getInsuranceName()
+ {
+ return $this->insuranceName;
+ }
+
+ /**
+ * Set insurances
+ *
+ * @param string $insurances
+ *
+ * @return TravelBooking
+ */
+ public function setInsurances($insurances)
+ {
+ $this->insurances = $insurances;
+
+ return $this;
+ }
+
+ /**
+ * Get insurances
+ *
+ * @return string
+ */
+ public function getInsurances()
+ {
+ return $this->insurances;
+ }
+
+ /**
+ * Set options
+ *
+ * @param string $options
+ *
+ * @return TravelBooking
+ */
+ public function setOptions($options)
+ {
+ $this->options = $options;
+
+ return $this;
+ }
+
+ /**
+ * Get options
+ *
+ * @return string
+ */
+ public function getOptions()
+ {
+ return $this->options;
+ }
+
+ /**
+ * Set classOptions
+ *
+ * @param string $classOptions
+ *
+ * @return TravelBooking
+ */
+ public function setClassOptions($classOptions)
+ {
+ $this->classOptions = $classOptions;
+
+ return $this;
+ }
+
+ /**
+ * Get classOptions
+ *
+ * @return string
+ */
+ public function getClassOptions()
+ {
+ return $this->classOptions;
+ }
+
+ /**
+ * Set extraCategory
+ *
+ * @param string $extraCategory
+ *
+ * @return TravelBooking
+ */
+ public function setExtraCategory($extraCategory)
+ {
+ $this->extraCategory = $extraCategory;
+
+ return $this;
+ }
+
+ /**
+ * Get extraCategory
+ *
+ * @return string
+ */
+ public function getExtraCategory()
+ {
+ return $this->extraCategory;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelCategory.php b/trunk/src/AppBundle/Entity/TravelCategory.php
new file mode 100644
index 00000000..5aacaf82
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelCategory.php
@@ -0,0 +1,97 @@
+name = $name;
+
+ return $this;
+ }
+
+ /**
+ * Get name
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * Set conversionCode
+ *
+ * @param string $conversionCode
+ *
+ * @return TravelCategory
+ */
+ public function setConversionCode($conversionCode)
+ {
+ $this->conversionCode = $conversionCode;
+
+ return $this;
+ }
+
+ /**
+ * Get conversionCode
+ *
+ * @return string
+ */
+ public function getConversionCode()
+ {
+ return $this->conversionCode;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelClass.php b/trunk/src/AppBundle/Entity/TravelClass.php
new file mode 100644
index 00000000..54f2f6e7
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelClass.php
@@ -0,0 +1,162 @@
+name = $name;
+
+ return $this;
+ }
+
+ /**
+ * Get name
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * Set description
+ *
+ * @param string $description
+ *
+ * @return TravelClass
+ */
+ public function setDescription($description)
+ {
+ $this->description = $description;
+
+ return $this;
+ }
+
+ /**
+ * Get description
+ *
+ * @return string
+ */
+ public function getDescription()
+ {
+ return $this->description;
+ }
+
+ /**
+ * Set standard
+ *
+ * @param boolean $standard
+ *
+ * @return TravelClass
+ */
+ public function setStandard($standard)
+ {
+ $this->standard = $standard;
+
+ return $this;
+ }
+
+ /**
+ * Get standard
+ *
+ * @return boolean
+ */
+ public function getStandard()
+ {
+ return $this->standard;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Set program
+ *
+ * @param \AppBundle\Entity\TravelProgram $program
+ *
+ * @return TravelClass
+ */
+ public function setProgram(\AppBundle\Entity\TravelProgram $program = null)
+ {
+ $this->program = $program;
+
+ return $this;
+ }
+
+ /**
+ * Get program
+ *
+ * @return \AppBundle\Entity\TravelProgram
+ */
+ public function getProgram()
+ {
+ return $this->program;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelCountry.php b/trunk/src/AppBundle/Entity/TravelCountry.php
new file mode 100644
index 00000000..e0329224
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelCountry.php
@@ -0,0 +1,131 @@
+name = $name;
+
+ return $this;
+ }
+
+ /**
+ * Get name
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * Set htmlInformation
+ *
+ * @param string $htmlInformation
+ *
+ * @return TravelCountry
+ */
+ public function setHtmlInformation($htmlInformation)
+ {
+ $this->htmlInformation = $htmlInformation;
+
+ return $this;
+ }
+
+ /**
+ * Get htmlInformation
+ *
+ * @return string
+ */
+ public function getHtmlInformation()
+ {
+ return $this->htmlInformation;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Set feedbackPage
+ *
+ * @param \AppBundle\Entity\Page $feedbackPage
+ *
+ * @return TravelCountry
+ */
+ public function setFeedbackPage(\AppBundle\Entity\Page $feedbackPage = null)
+ {
+ $this->feedbackPage = $feedbackPage;
+
+ return $this;
+ }
+
+ /**
+ * Get feedbackPage
+ *
+ * @return \AppBundle\Entity\Page
+ */
+ public function getFeedbackPage()
+ {
+ return $this->feedbackPage;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelDate.php b/trunk/src/AppBundle/Entity/TravelDate.php
new file mode 100644
index 00000000..f316f704
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelDate.php
@@ -0,0 +1,266 @@
+
+ * @date 11/03/2016
+ */
+
+namespace AppBundle\Entity;
+use AppBundle\Util\DepartureUtil;
+
+/**
+ * TravelDate is a wrapper for TravelPeriod + start date and end date. This entity doesn't represent a database
+ * table. It was introduced because of requirement to keep the bad original database design in which a TravelPeriod
+ * serves two purposes:
+ * - Representing a season
+ * - Representing a single travel date (by being linked to a TravelPeriodDate-instance)
+ * Also TravelPeriodDate has two purposes:
+ * - Representing a time period of a season. From this time period, multiple travel dates are derived by taking
+ * the possible weekdays into account
+ * - Holding the start and end date for a TravelPeriod that is not a season (see above)
+ *
+ * To avoid further confusion and to slowly move away from this design, "TravelDate" has been invented, which has single
+ * clearly defined purpose:
+ * Representing a single travel date, i.e.
+ * - time period a traveller starts and ends his/her journey
+ * - prices
+ * - availability
+ * - departure locations and their prices
+ *
+ * "TravelPeriod" would be a more fitting name, but this name is already in use.
+ *
+ * @package AppBundle\Entity
+ */
+final class TravelDate
+{
+ /** @var String $key */
+ private $key;
+
+ /** @var TravelPeriod $travelPeriod */
+ private $travelPeriod;
+
+ /** @var \DateTime $start */
+ private $start;
+
+ /** @var \DateTime $end */
+ private $end;
+
+ private $index;
+
+ /** @var FlightPeriod $flightPeriod */
+ private $flightPeriod;
+
+ private $currencyFactor;
+
+ private $travelProgram;
+
+ /** @var TravelDeparturePoint[]|null $departures Departures cache */
+ private $departures = null;
+
+ /** @var TravelPeriodPrice[]|null $prices Prices cache */
+ private $prices = null;
+
+ private $calculatedEffectivePrices = false;
+
+ /**
+ * TravelDate constructor.
+ *
+ * @param String $key
+ * @param TravelPeriod $travelPeriod
+ * @param FlightPeriod|null $flightPeriod
+ * @param float $currencyFactor
+ * @param \DateTime $start
+ * @param \DateTime $end Optional. Computed from travel duration, if not specified.
+ * @param null $index
+ *
+ * @todo Make this object immutable
+ */
+ public function __construct($key, TravelPeriod $travelPeriod, FlightPeriod $flightPeriod = null, $currencyFactor,
+ \DateTime $start = null, \DateTime $end = null, $index = null)
+ {
+ if ($travelPeriod->getIsSeason())
+ {
+ if ($index === null)
+ {
+ throw new \InvalidArgumentException('Expected numeric value for argument $index due to virtual travel date. Got null.');
+ }
+ if ($start === null)
+ {
+ throw new \InvalidArgumentException('Expected DateTime value for argument $start due to virtual travel date. Got null.');
+ }
+ $this->start = $start;
+ $this->index = $index;
+ $this->flightPeriod = $flightPeriod;
+ }
+ else
+ {
+ $this->start = $travelPeriod->getStartDate();
+ }
+ $this->travelProgram = $travelPeriod->getProgram();
+ $this->key = $key;
+ $this->travelPeriod = $travelPeriod;
+ if ($end === null)
+ {
+ $this->end = clone $this->start;
+ $this->end->modify('+'. $this->travelProgram->getProgramDuration() .' day');
+ }
+ else
+ {
+ $this->end = $end;
+ }
+ $this->currencyFactor = $currencyFactor;
+ }
+
+ public static function createForNonSeasonTravelPeriod($key, TravelPeriod $travelPeriod,
+ FlightPeriod $flightPeriod = null, $currencyFactor)
+ {
+ if ($travelPeriod->getIsSeason())
+ {
+ throw new \Exception('Expected non-season TravelPeriod instance');
+ }
+ return new TravelDate($key, $travelPeriod, $flightPeriod, $currencyFactor);
+ }
+
+ public static function createForSeasonTravelPeriod($key, TravelPeriod $travelPeriod, $index, \DateTime $start,
+ \DateTime $end = null, FlightPeriod $flightPeriod = null, $currencyFactor)
+ {
+ if (!$travelPeriod->getIsSeason())
+ {
+ throw new \Exception('Expected season TravelPeriod instance');
+ }
+ return new TravelDate($key, $travelPeriod, $flightPeriod, $currencyFactor, $start, $end, $index);
+ }
+
+ /**
+ * @return String
+ */
+ public function getKey()
+ {
+ return $this->key;
+ }
+
+ /**
+ * @return \DateTime
+ */
+ public function getStart()
+ {
+ return $this->start;
+ }
+
+ /**
+ * @return \DateTime
+ */
+ public function getEnd()
+ {
+ return $this->end;
+ }
+
+ public function getName()
+ {
+ return $this->travelPeriod->getIsSeason()
+ ? (trim($this->travelProgram->getProgramCode()) . $this->index)
+ : $this->travelPeriod->getName()
+ ;
+ }
+
+ public function getStatus()
+ {
+ return $this->travelPeriod->getStatus();
+ }
+
+ public function getDepartures()
+ {
+ if ($this->departures === null)
+ {
+ if ($this->travelProgram->getIsMediated())
+ {
+ $defaultDepartures = $this->travelProgram->getDepartures();
+ $departures = $this->travelPeriod->getDepartures();
+ }
+ else
+ {
+ $defaultDepartures = $this->travelProgram->getTravelArrivalPoint()->getDepartures();
+ $departures = $this->flightPeriod === null ? [] : $this->flightPeriod->getDepartures();
+ }
+ $defaultDepartures = DepartureUtil::filterDeparturesByPeriod($defaultDepartures, $this->start, $this->end, true);
+ $this->departures = DepartureUtil::mergeDeparturesWithDefaults($defaultDepartures, $departures, true);
+ }
+ return $this->departures;
+ }
+
+ /**
+ * @return TravelPeriodPrice[]|\Doctrine\Common\Collections\Collection
+ */
+ public function getPrices()
+ {
+ if (!$this->calculatedEffectivePrices)
+ {
+ $this->calculatedEffectivePrices = true;
+ if ($this->travelProgram->getIsMediated())
+ {
+ $profitMargin = 1;
+ $flightPrice = 0;
+ }
+ else
+ {
+ $profitMargin = $this->travelProgram->getProfitMargin() / 100 + 1;
+ $flightPrice = null;
+ if ($this->flightPeriod !== null)
+ {
+ $flightPrice = $this->flightPeriod->getPrice();
+ }
+ if ($flightPrice === null)
+ {
+ $flightPrice = $this->travelProgram->getDefaultFlightPrice();
+ }
+ }
+ $currencyFactor = $this->travelProgram->getNettoPricesInEuro() ? 1 : $this->currencyFactor;
+ foreach ($this->travelPeriod->getPrices() as $price)
+ {
+ $price->setEffectivePrice(round(($flightPrice + $price->getPrice() * $currencyFactor) * $profitMargin));
+ $price->setEffectiveDiscountPrice(
+ round(($flightPrice + $price->getDiscountPrice() * $currencyFactor) * $profitMargin));
+ //$price->setEffectiveDiscountPrice($pr)
+ }
+ }
+ return $this->travelPeriod->getPrices();
+ }
+
+ public function getLowestPrice()
+ {
+ $lowest = -1;
+ foreach ($this->getPrices() as $price)
+ {
+ if ($price->getPriceType() == 3)
+ {
+ // Use double room if available (#1076)
+ return /*$price->getEffectiveDiscountPrice() ??*/ $price->getEffectivePrice();
+ }
+ if ($lowest < 0 || $price->getEffectivePrice() < 0)
+ {
+ $lowest = $price->getEffectivePrice();
+ }
+ }
+ return $lowest == -1 ? null : $lowest;
+ }
+
+ public function hasComfortCategory()
+ {
+ foreach ($this->getPrices() as $price)
+ {
+ if ($price->getPriceComfort() > 0)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @return TravelPeriod
+ * @internal
+ */
+ public function __getTravelPeriod()
+ {
+ return $this->travelPeriod;
+ }
+}
\ No newline at end of file
diff --git a/trunk/src/AppBundle/Entity/TravelDeparturePoint.php b/trunk/src/AppBundle/Entity/TravelDeparturePoint.php
new file mode 100644
index 00000000..a89171cc
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelDeparturePoint.php
@@ -0,0 +1,352 @@
+name = $name;
+
+ return $this;
+ }
+
+ /**
+ * Get name
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * Set extraCharge
+ *
+ * @param string $extraCharge
+ *
+ * @return TravelDeparturePoint
+ */
+ public function setExtraCharge($extraCharge)
+ {
+ $this->extraCharge = $extraCharge;
+
+ return $this;
+ }
+
+ /**
+ * Get extraCharge
+ *
+ * @return string
+ */
+ public function getExtraCharge()
+ {
+ return $this->extraCharge;
+ }
+
+ /**
+ * Set days
+ *
+ * @param string $days
+ *
+ * @return TravelDeparturePoint
+ */
+ public function setDays($days)
+ {
+ $this->days = $days;
+
+ return $this;
+ }
+
+ /**
+ * Get days
+ *
+ * @return array|int[]
+ */
+ public function getDays()
+ {
+ return $this->days == null ? null : json_decode($this->days);
+ }
+
+ /**
+ * Set departureType
+ *
+ * @param string $departureType
+ *
+ * @return TravelDeparturePoint
+ */
+ public function setDepartureType($departureType)
+ {
+ $this->departureType = $departureType;
+
+ return $this;
+ }
+
+ /**
+ * Get departureType
+ *
+ * @return string
+ */
+ public function getDepartureType()
+ {
+ return $this->departureType;
+ }
+
+ /**
+ * Set threeLetter
+ *
+ * @param string $threeLetter
+ *
+ * @return TravelDeparturePoint
+ */
+ public function setThreeLetter($threeLetter)
+ {
+ $this->three_letter = $threeLetter;
+
+ return $this;
+ }
+
+ /**
+ * Get threeLetter
+ *
+ * @return string
+ */
+ public function getThreeLetter()
+ {
+ return $this->three_letter;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Set flightPeriod
+ *
+ * @param \AppBundle\Entity\FlightPeriod $flightPeriod
+ *
+ * @return TravelDeparturePoint
+ */
+ public function setFlightPeriod(\AppBundle\Entity\FlightPeriod $flightPeriod = null)
+ {
+ $this->flightPeriod = $flightPeriod;
+
+ return $this;
+ }
+
+ /**
+ * Get flightPeriod
+ *
+ * @return \AppBundle\Entity\FlightPeriod
+ */
+ public function getFlightPeriod()
+ {
+ return $this->flightPeriod;
+ }
+
+ /**
+ * Set travelArrivalPoint
+ *
+ * @param \AppBundle\Entity\TravelArrivalPoint $travelArrivalPoint
+ *
+ * @return TravelDeparturePoint
+ */
+ public function setTravelArrivalPoint(\AppBundle\Entity\TravelArrivalPoint $travelArrivalPoint = null)
+ {
+ $this->travelArrivalPoint = $travelArrivalPoint;
+
+ return $this;
+ }
+
+ /**
+ * Get travelArrivalPoint
+ *
+ * @return \AppBundle\Entity\TravelArrivalPoint
+ */
+ public function getTravelArrivalPoint()
+ {
+ return $this->travelArrivalPoint;
+ }
+
+ /**
+ * Set program
+ *
+ * @param \AppBundle\Entity\TravelProgram $program
+ *
+ * @return TravelDeparturePoint
+ */
+ public function setProgram(\AppBundle\Entity\TravelProgram $program = null)
+ {
+ $this->program = $program;
+
+ return $this;
+ }
+
+ /**
+ * Get program
+ *
+ * @return \AppBundle\Entity\TravelProgram
+ */
+ public function getProgram()
+ {
+ return $this->program;
+ }
+
+ /**
+ * Set travelPeriod
+ *
+ * @param \AppBundle\Entity\TravelPeriod $travelPeriod
+ *
+ * @return TravelDeparturePoint
+ */
+ public function setTravelPeriod(\AppBundle\Entity\TravelPeriod $travelPeriod = null)
+ {
+ $this->travelPeriod = $travelPeriod;
+
+ return $this;
+ }
+
+ /**
+ * Get travelPeriod
+ *
+ * @return \AppBundle\Entity\TravelPeriod
+ */
+ public function getTravelPeriod()
+ {
+ return $this->travelPeriod;
+ }
+
+ public function getIsEmpty()
+ {
+ return !isset($this->extraCharge) || $this->extraCharge == '';
+ }
+
+ /**
+ * @return boolean
+ */
+ public function getIsVirtual()
+ {
+ return $this->isVirtual;
+ }
+
+ /**
+ * @param boolean $isVirtual
+ */
+ public function setIsVirtual($isVirtual)
+ {
+ $this->isVirtual = $isVirtual;
+ }
+
+ public function __toString()
+ {
+ return $this->getName();
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelDeparturePointHoliday.php b/trunk/src/AppBundle/Entity/TravelDeparturePointHoliday.php
new file mode 100644
index 00000000..0a27d306
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelDeparturePointHoliday.php
@@ -0,0 +1,162 @@
+startDate = $startDate;
+
+ return $this;
+ }
+
+ /**
+ * Get startDate
+ *
+ * @return \DateTime
+ */
+ public function getStartDate()
+ {
+ return $this->startDate;
+ }
+
+ /**
+ * Set endDate
+ *
+ * @param \DateTime $endDate
+ *
+ * @return TravelDeparturePointHoliday
+ */
+ public function setEndDate($endDate)
+ {
+ $this->endDate = $endDate;
+
+ return $this;
+ }
+
+ /**
+ * Get endDate
+ *
+ * @return \DateTime
+ */
+ public function getEndDate()
+ {
+ return $this->endDate;
+ }
+
+ /**
+ * Set extraCharge
+ *
+ * @param float $extraCharge
+ *
+ * @return TravelDeparturePointHoliday
+ */
+ public function setExtraCharge($extraCharge)
+ {
+ $this->extraCharge = $extraCharge;
+
+ return $this;
+ }
+
+ /**
+ * Get extraCharge
+ *
+ * @return float
+ */
+ public function getExtraCharge()
+ {
+ return $this->extraCharge;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Set departurePoint
+ *
+ * @param \AppBundle\Entity\TravelDeparturePoint $departurePoint
+ *
+ * @return TravelDeparturePointHoliday
+ */
+ public function setDeparturePoint(\AppBundle\Entity\TravelDeparturePoint $departurePoint = null)
+ {
+ $this->departurePoint = $departurePoint;
+
+ return $this;
+ }
+
+ /**
+ * Get departurePoint
+ *
+ * @return \AppBundle\Entity\TravelDeparturePoint
+ */
+ public function getDeparturePoint()
+ {
+ return $this->departurePoint;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelDeparturePointRepository.php b/trunk/src/AppBundle/Entity/TravelDeparturePointRepository.php
new file mode 100644
index 00000000..4a9da68f
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelDeparturePointRepository.php
@@ -0,0 +1,8 @@
+name = $name;
+
+ return $this;
+ }
+
+ /**
+ * Get name
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Set country
+ *
+ * @param \AppBundle\Entity\TravelCountry $country
+ *
+ * @return TravelDestination
+ */
+ public function setCountry(\AppBundle\Entity\TravelCountry $country = null)
+ {
+ $this->country = $country;
+
+ return $this;
+ }
+
+ /**
+ * Get country
+ *
+ * @return \AppBundle\Entity\TravelCountry
+ */
+ public function getCountry()
+ {
+ return $this->country;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelDiscount.php b/trunk/src/AppBundle/Entity/TravelDiscount.php
new file mode 100644
index 00000000..416a6c38
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelDiscount.php
@@ -0,0 +1,224 @@
+value = $value;
+
+ return $this;
+ }
+
+ /**
+ * Get value
+ *
+ * @return float
+ */
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+ /**
+ * Set percent
+ *
+ * @param boolean $percent
+ *
+ * @return TravelDiscount
+ */
+ public function setPercent($percent)
+ {
+ $this->percent = $percent;
+
+ return $this;
+ }
+
+ /**
+ * Get percent
+ *
+ * @return boolean
+ */
+ public function getPercent()
+ {
+ return $this->percent;
+ }
+
+ /**
+ * Set start
+ *
+ * @param \DateTime $start
+ *
+ * @return TravelDiscount
+ */
+ public function setStart($start)
+ {
+ $this->start = $start;
+
+ return $this;
+ }
+
+ /**
+ * Get start
+ *
+ * @return \DateTime
+ */
+ public function getStart()
+ {
+ return $this->start;
+ }
+
+ /**
+ * Set end
+ *
+ * @param \DateTime $end
+ *
+ * @return TravelDiscount
+ */
+ public function setEnd($end)
+ {
+ $this->end = $end;
+
+ return $this;
+ }
+
+ /**
+ * Get end
+ *
+ * @return \DateTime
+ */
+ public function getEnd()
+ {
+ return $this->end;
+ }
+
+ /**
+ * Set priority
+ *
+ * @param boolean $priority
+ *
+ * @return TravelDiscount
+ */
+ public function setPriority($priority)
+ {
+ $this->priority = $priority;
+
+ return $this;
+ }
+
+ /**
+ * Get priority
+ *
+ * @return boolean
+ */
+ public function getPriority()
+ {
+ return $this->priority;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Set period
+ *
+ * @param \AppBundle\Entity\TravelPeriod $period
+ *
+ * @return TravelDiscount
+ */
+ public function setPeriod(\AppBundle\Entity\TravelPeriod $period = null)
+ {
+ $this->period = $period;
+
+ return $this;
+ }
+
+ /**
+ * Get period
+ *
+ * @return \AppBundle\Entity\TravelPeriod
+ */
+ public function getPeriod()
+ {
+ return $this->period;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelInsurance.php b/trunk/src/AppBundle/Entity/TravelInsurance.php
new file mode 100644
index 00000000..ed32ed13
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelInsurance.php
@@ -0,0 +1,178 @@
+name = $name;
+
+ return $this;
+ }
+
+ /**
+ * Get name
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * Set internalName
+ *
+ * @param string $internalName
+ *
+ * @return TravelInsurance
+ */
+ public function setInternalName($internalName)
+ {
+ $this->internalName = $internalName;
+
+ return $this;
+ }
+
+ /**
+ * Get internalName
+ *
+ * @return string
+ */
+ public function getInternalName()
+ {
+ return $this->internalName;
+ }
+
+ /**
+ * Set included
+ *
+ * @param string $included
+ *
+ * @return TravelInsurance
+ */
+ public function setIncluded($included)
+ {
+ $this->included = $included;
+
+ return $this;
+ }
+
+ /**
+ * Get included
+ *
+ * @return string
+ */
+ public function getIncluded()
+ {
+ return $this->included;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+ /**
+ * Constructor
+ */
+ public function __construct()
+ {
+ $this->prices = new \Doctrine\Common\Collections\ArrayCollection();
+ }
+
+ /**
+ * Add price
+ *
+ * @param \AppBundle\Entity\TravelInsurancePrice $price
+ *
+ * @return TravelInsurance
+ */
+ public function addPrice(\AppBundle\Entity\TravelInsurancePrice $price)
+ {
+ $this->prices[] = $price;
+
+ return $this;
+ }
+
+ /**
+ * Remove price
+ *
+ * @param \AppBundle\Entity\TravelInsurancePrice $price
+ */
+ public function removePrice(\AppBundle\Entity\TravelInsurancePrice $price)
+ {
+ $this->prices->removeElement($price);
+ }
+
+ /**
+ * Get prices
+ *
+ * @return TravelInsurancePrice[]|\Doctrine\Common\Collections\Collection
+ */
+ public function getPrices()
+ {
+ return $this->prices;
+ }
+
+ public function __toString()
+ {
+ return $this->getName();
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelInsurancePrice.php b/trunk/src/AppBundle/Entity/TravelInsurancePrice.php
new file mode 100644
index 00000000..d0a593bb
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelInsurancePrice.php
@@ -0,0 +1,193 @@
+border = $border;
+
+ return $this;
+ }
+
+ /**
+ * Get border
+ *
+ * @return float
+ */
+ public function getBorder()
+ {
+ return $this->border;
+ }
+
+ /**
+ * Set price
+ *
+ * @param float $price
+ *
+ * @return TravelInsurancePrice
+ */
+ public function setPrice($price)
+ {
+ $this->price = $price;
+
+ return $this;
+ }
+
+ /**
+ * Get price
+ *
+ * @return float
+ */
+ public function getPrice()
+ {
+ return $this->price;
+ }
+
+ /**
+ * Set percent
+ *
+ * @param float $percent
+ *
+ * @return TravelInsurancePrice
+ */
+ public function setPercent($percent)
+ {
+ $this->percent = $percent;
+
+ return $this;
+ }
+
+ /**
+ * Get percent
+ *
+ * @return float
+ */
+ public function getPercent()
+ {
+ return $this->percent;
+ }
+
+ /**
+ * Set code
+ *
+ * @param string $code
+ *
+ * @return TravelInsurancePrice
+ */
+ public function setCode($code)
+ {
+ $this->code = $code;
+
+ return $this;
+ }
+
+ /**
+ * Get code
+ *
+ * @return string
+ */
+ public function getCode()
+ {
+ return $this->code;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Set insurance
+ *
+ * @param \AppBundle\Entity\TravelInsurance $insurance
+ *
+ * @return TravelInsurancePrice
+ */
+ public function setInsurance(\AppBundle\Entity\TravelInsurance $insurance = null)
+ {
+ $this->insurance = $insurance;
+
+ return $this;
+ }
+
+ /**
+ * Get insurance
+ *
+ * @return \AppBundle\Entity\TravelInsurance
+ */
+ public function getInsurance()
+ {
+ return $this->insurance;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelOption.php b/trunk/src/AppBundle/Entity/TravelOption.php
new file mode 100644
index 00000000..901ed9e1
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelOption.php
@@ -0,0 +1,195 @@
+name = $name;
+
+ return $this;
+ }
+
+ /**
+ * Get name
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * Set internalName
+ *
+ * @param string $internalName
+ *
+ * @return TravelOption
+ */
+ public function setInternalName($internalName)
+ {
+ $this->internalName = $internalName;
+
+ return $this;
+ }
+
+ /**
+ * Get internalName
+ *
+ * @return string
+ */
+ public function getInternalName()
+ {
+ return $this->internalName;
+ }
+
+ /**
+ * Set price
+ *
+ * @param float $price
+ *
+ * @return TravelOption
+ */
+ public function setPrice($price)
+ {
+ $this->price = $price;
+
+ return $this;
+ }
+
+ /**
+ * Get price
+ *
+ * @return float
+ */
+ public function getPrice()
+ {
+ return $this->price;
+ }
+
+ /**
+ * Set priceChildren
+ *
+ * @param float $priceChildren
+ *
+ * @return TravelOption
+ */
+ public function setPriceChildren($priceChildren)
+ {
+ $this->priceChildren = $priceChildren;
+
+ return $this;
+ }
+
+ /**
+ * Get priceChildren
+ *
+ * @return float
+ */
+ public function getPriceChildren()
+ {
+ return $this->priceChildren;
+ }
+
+ /**
+ * Set description
+ *
+ * @param string $description
+ *
+ * @return TravelOption
+ */
+ public function setDescription($description)
+ {
+ $this->description = $description;
+
+ return $this;
+ }
+
+ /**
+ * Get description
+ *
+ * @return string
+ */
+ public function getDescription()
+ {
+ return $this->description;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function __toString()
+ {
+ return $this->getName();
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelOrganizer.php b/trunk/src/AppBundle/Entity/TravelOrganizer.php
new file mode 100644
index 00000000..84a3ffbf
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelOrganizer.php
@@ -0,0 +1,159 @@
+name = $name;
+
+ return $this;
+ }
+
+ /**
+ * Get name
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * Set rulesUpdated
+ *
+ * @param \DateTime $rulesUpdated
+ *
+ * @return TravelOrganizer
+ */
+ public function setRulesUpdated($rulesUpdated)
+ {
+ $this->rulesUpdated = $rulesUpdated;
+
+ return $this;
+ }
+
+ /**
+ * Get rulesUpdated
+ *
+ * @return \DateTime
+ */
+ public function getRulesUpdated()
+ {
+ return $this->rulesUpdated;
+ }
+
+ /**
+ * Set fileName
+ *
+ * @param string $fileName
+ *
+ * @return TravelOrganizer
+ */
+ public function setFileName($fileName)
+ {
+ $this->fileName = $fileName;
+
+ return $this;
+ }
+
+ /**
+ * Get fileName
+ *
+ * @return string
+ */
+ public function getFileName()
+ {
+ return $this->fileName;
+ }
+
+ /**
+ * Set cmsId
+ *
+ * @param integer $cmsId
+ *
+ * @return TravelOrganizer
+ */
+ public function setCmsId($cmsId)
+ {
+ $this->cmsId = $cmsId;
+
+ return $this;
+ }
+
+ /**
+ * Get cmsId
+ *
+ * @return integer
+ */
+ public function getCmsId()
+ {
+ return $this->cmsId;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelPeriod.php b/trunk/src/AppBundle/Entity/TravelPeriod.php
new file mode 100644
index 00000000..d28b64e8
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelPeriod.php
@@ -0,0 +1,487 @@
+name = $name;
+
+ return $this;
+ }
+
+ /**
+ * Get name
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * Set status
+ *
+ * @param boolean $status
+ *
+ * @return TravelPeriod
+ */
+ public function setStatus($status)
+ {
+ $this->status = $status;
+
+ return $this;
+ }
+
+ /**
+ * Get status
+ *
+ * @return boolean
+ */
+ public function getStatus()
+ {
+ return $this->status;
+ }
+
+ /**
+ * Set order
+ *
+ * @param integer $order
+ *
+ * @return TravelPeriod
+ */
+ public function setOrder($order)
+ {
+ $this->order = $order;
+
+ return $this;
+ }
+
+ /**
+ * Get order
+ *
+ * @return integer
+ */
+ public function getOrder()
+ {
+ return $this->order;
+ }
+
+ /**
+ * Set priceFlightNet
+ *
+ * @param float $priceFlightNet
+ *
+ * @return TravelPeriod
+ */
+ public function setPriceFlightNet($priceFlightNet)
+ {
+ $this->priceFlightNet = $priceFlightNet;
+
+ return $this;
+ }
+
+ /**
+ * Get priceFlightNet
+ *
+ * @return float
+ */
+ public function getPriceFlightNet()
+ {
+ return $this->priceFlightNet;
+ }
+
+ /**
+ * Set isSeason
+ *
+ * @param boolean $isSeason
+ *
+ * @return TravelPeriod
+ */
+ public function setIsSeason($isSeason)
+ {
+ $this->isSeason = $isSeason;
+
+ return $this;
+ }
+
+ /**
+ * Get isSeason
+ *
+ * @return boolean
+ */
+ public function getIsSeason()
+ {
+ return $this->isSeason;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Set travelArrivalPoint
+ *
+ * @param \AppBundle\Entity\TravelArrivalPoint $travelArrivalPoint
+ *
+ * @return TravelPeriod
+ */
+ public function setTravelArrivalPoint(\AppBundle\Entity\TravelArrivalPoint $travelArrivalPoint = null)
+ {
+ $this->travelArrivalPoint = $travelArrivalPoint;
+
+ return $this;
+ }
+
+ /**
+ * Get travelArrivalPoint
+ *
+ * @return \AppBundle\Entity\TravelArrivalPoint
+ */
+ public function getTravelArrivalPoint()
+ {
+ return $this->travelArrivalPoint;
+ }
+
+ /**
+ * Set class
+ *
+ * @param \AppBundle\Entity\TravelClass $class
+ *
+ * @return TravelPeriod
+ */
+ public function setClass(\AppBundle\Entity\TravelClass $class = null)
+ {
+ $this->class = $class;
+
+ return $this;
+ }
+
+ /**
+ * Get class
+ *
+ * @return \AppBundle\Entity\TravelClass
+ */
+ public function getClass()
+ {
+ return $this->class;
+ }
+
+ /**
+ * Set program
+ *
+ * @param \AppBundle\Entity\TravelProgram $program
+ *
+ * @return TravelPeriod
+ */
+ public function setProgram(\AppBundle\Entity\TravelProgram $program = null)
+ {
+ $this->program = $program;
+
+ return $this;
+ }
+
+ /**
+ * Get program
+ *
+ * @return \AppBundle\Entity\TravelProgram
+ */
+ public function getProgram()
+ {
+ return $this->program;
+ }
+ /**
+ * Constructor
+ */
+ public function __construct()
+ {
+ $this->dates = new \Doctrine\Common\Collections\ArrayCollection();
+ }
+
+ /**
+ * Add date
+ *
+ * @param \AppBundle\Entity\TravelPeriodDate $date
+ *
+ * @return TravelPeriod
+ */
+ public function addDate(\AppBundle\Entity\TravelPeriodDate $date)
+ {
+ $this->dates[] = $date;
+
+ return $this;
+ }
+
+ /**
+ * Remove date
+ *
+ * @param \AppBundle\Entity\TravelPeriodDate $date
+ */
+ public function removeDate(\AppBundle\Entity\TravelPeriodDate $date)
+ {
+ $this->dates->removeElement($date);
+ }
+
+ /**
+ * Get dates
+ *
+ * @return \Doctrine\Common\Collections\Collection|TravelPeriodDate[]
+ */
+ public function getDates()
+ {
+ return $this->dates;
+ }
+
+ /**
+ * Add departure
+ *
+ * @param \AppBundle\Entity\TravelDeparturePoint $departure
+ *
+ * @return TravelPeriod
+ */
+ public function addDeparture(\AppBundle\Entity\TravelDeparturePoint $departure)
+ {
+ $this->departures[] = $departure;
+
+ return $this;
+ }
+
+ /**
+ * Remove departure
+ *
+ * @param \AppBundle\Entity\TravelDeparturePoint $departure
+ */
+ public function removeDeparture(\AppBundle\Entity\TravelDeparturePoint $departure)
+ {
+ $this->departures->removeElement($departure);
+ }
+
+ /**
+ * Get departures
+ *
+ * @return \Doctrine\Common\Collections\Collection|TravelDeparturePoint[]
+ */
+ public function getDepartures()
+ {
+ return $this->departures;
+ }
+
+ /**
+ * Add price
+ *
+ * @param \AppBundle\Entity\TravelPeriodPrice $price
+ *
+ * @return TravelPeriod
+ */
+ public function addPrice(\AppBundle\Entity\TravelPeriodPrice $price)
+ {
+ $this->prices[] = $price;
+
+ return $this;
+ }
+
+ /**
+ * Remove price
+ *
+ * @param \AppBundle\Entity\TravelPeriodPrice $price
+ */
+ public function removePrice(\AppBundle\Entity\TravelPeriodPrice $price)
+ {
+ $this->prices->removeElement($price);
+ }
+
+ /**
+ * Get prices
+ *
+ * @return \Doctrine\Common\Collections\Collection|TravelPeriodPrice[]
+ */
+ public function getPrices()
+ {
+ return $this->prices;
+ }
+
+ /**
+ * Add discount
+ *
+ * @param \AppBundle\Entity\TravelDiscount $discount
+ *
+ * @return TravelPeriod
+ */
+ public function addDiscount(\AppBundle\Entity\TravelDiscount $discount)
+ {
+ $this->discounts[] = $discount;
+
+ return $this;
+ }
+
+ /**
+ * Remove discount
+ *
+ * @param \AppBundle\Entity\TravelDiscount $discount
+ */
+ public function removeDiscount(\AppBundle\Entity\TravelDiscount $discount)
+ {
+ $this->discounts->removeElement($discount);
+ }
+
+ /**
+ * Get discounts
+ *
+ * @return \Doctrine\Common\Collections\Collection|TravelDiscount[]
+ */
+ public function getDiscounts()
+ {
+ return $this->discounts;
+ }
+
+ /**
+ * @return \DateTime
+ * @throws \Exception
+ */
+ public function getStartDate()
+ {
+ if ($this->isSeason)
+ {
+ throw new \Exception('Call to getStartDate() is only allowed for non-seasons');
+ }
+ return $this->getDates()->first()->getStartDate();
+ }
+
+ /**
+ * @return \DateTime
+ * @throws \Exception
+ */
+ public function getEndDate()
+ {
+ if ($this->isSeason)
+ {
+ throw new \Exception('Call to getEndDate() is only allowed for non-seasons');
+ }
+ return $this->getDates()->first()->getEndDate();
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelPeriodDate.php b/trunk/src/AppBundle/Entity/TravelPeriodDate.php
new file mode 100644
index 00000000..1fbc5841
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelPeriodDate.php
@@ -0,0 +1,178 @@
+year = $year;
+
+ return $this;
+ }
+
+ /**
+ * Get year
+ *
+ * @return integer
+ */
+ public function getYear()
+ {
+ return $this->year;
+ }
+
+ /**
+ * Set startDate
+ *
+ * @param \DateTime $startDate
+ *
+ * @return TravelPeriodDate
+ */
+ public function setStartDate($startDate)
+ {
+ $this->startDate = $startDate;
+
+ return $this;
+ }
+
+ /**
+ * Get startDate
+ *
+ * @return \DateTime
+ */
+ public function getStartDate()
+ {
+ return $this->startDate;
+ }
+
+ /**
+ * Set endDate
+ *
+ * @param \DateTime $endDate
+ *
+ * @return TravelPeriodDate
+ */
+ public function setEndDate($endDate)
+ {
+ $this->endDate = $endDate;
+
+ return $this;
+ }
+
+ /**
+ * Get endDate
+ *
+ * @return \DateTime
+ */
+ public function getEndDate()
+ {
+ return $this->endDate;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Set period
+ *
+ * @param \AppBundle\Entity\TravelPeriod $period
+ *
+ * @return TravelPeriodDate
+ */
+ public function setPeriod(\AppBundle\Entity\TravelPeriod $period = null)
+ {
+ $this->period = $period;
+
+ return $this;
+ }
+
+ /**
+ * Get period
+ *
+ * @return \AppBundle\Entity\TravelPeriod
+ */
+ public function getPeriod()
+ {
+ return $this->period;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getFlightPeriod()
+ {
+ return $this->flightPeriod;
+ }
+
+ /**
+ * @param mixed $flightPeriod
+ */
+ public function setFlightPeriod($flightPeriod)
+ {
+ $this->flightPeriod = $flightPeriod;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelPeriodPrice.php b/trunk/src/AppBundle/Entity/TravelPeriodPrice.php
new file mode 100644
index 00000000..45ef9377
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelPeriodPrice.php
@@ -0,0 +1,292 @@
+priceType = $priceType;
+
+ return $this;
+ }
+
+ /**
+ * Get priceType
+ *
+ * @return integer
+ */
+ public function getPriceType()
+ {
+ return $this->priceType;
+ }
+
+ /**
+ * Set priceChildren
+ *
+ * @param float $priceChildren
+ *
+ * @return TravelPeriodPrice
+ */
+ public function setPriceChildren($priceChildren)
+ {
+ $this->priceChildren = $priceChildren;
+
+ return $this;
+ }
+
+ /**
+ * Get priceChildren
+ *
+ * @return float
+ */
+ public function getPriceChildren()
+ {
+ return $this->priceChildren;
+ }
+
+ /**
+ * Set price
+ *
+ * @param float $price
+ *
+ * @return TravelPeriodPrice
+ */
+ public function setPrice($price)
+ {
+ $this->price = $price;
+
+ return $this;
+ }
+
+ /**
+ * Get price
+ *
+ * @return float
+ */
+ public function getPrice()
+ {
+ return $this->price;
+ }
+
+ /**
+ * Set priceComfort
+ *
+ * @param float $priceComfort
+ *
+ * @return TravelPeriodPrice
+ */
+ public function setPriceComfort($priceComfort)
+ {
+ $this->priceComfort = $priceComfort;
+
+ return $this;
+ }
+
+ /**
+ * Get priceComfort
+ *
+ * @return float
+ */
+ public function getPriceComfort()
+ {
+ return $this->priceComfort;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Set period
+ *
+ * @param \AppBundle\Entity\TravelPeriod $period
+ *
+ * @return TravelPeriodPrice
+ */
+ public function setPeriod(\AppBundle\Entity\TravelPeriod $period = null)
+ {
+ $this->period = $period;
+
+ return $this;
+ }
+
+ /**
+ * Get period
+ *
+ * @return \AppBundle\Entity\TravelPeriod
+ */
+ public function getPeriod()
+ {
+ return $this->period;
+ }
+
+ public function getDiscountPrice()
+ {
+ if ($this->getPeriod() == null)
+ {
+ return null;
+ }
+ // #TODO FIX! Discount calculation differs for period and program
+ $price = $this->price; // #TODO Is the discount calculated for the effective price or for the original price?
+ $newPrice = $price;
+ foreach ($this->getPeriod()->getDiscounts() as $discount)
+ {
+ $newPrice -= $discount->getPercent()
+ ? round($newPrice * $discount->getValue() / 100, 2) // FIXME
+ : $discount->getValue();
+ }
+ $program = $this->getPeriod()->getProgram();
+ if ($program != null && $program->getDiscount() != null)
+ {
+ $newPrice -= $program->getDiscountIsPercentValue()
+ ? round($price * $program->getDiscount() / 100, 2) // FIXME
+ : $program->getDiscount();
+ }
+ return $price == $newPrice ? null : $newPrice;
+ }
+
+ /**
+ * @return float
+ * @throws \Exception
+ */
+ public function getEffectivePrice()
+ {
+ if ($this->effectivePrice === null)
+ {
+ throw new \Exception('Effective price must be set from outside before reading it.');
+ }
+ return $this->effectivePrice;
+ }
+
+ /**
+ * @param float $effectivePrice
+ */
+ public function setEffectivePrice($effectivePrice)
+ {
+ $this->effectivePrice = $effectivePrice;
+ }
+
+ /**
+ * @return float
+ * @throws \Exception
+ */
+ public function getEffectiveDiscountPrice()
+ {
+ if ($this->effectiveDiscountPrice === null)
+ {
+ throw new \Exception('Effective discount price must be set from outside before reading it.');
+ }
+ return $this->effectiveDiscountPrice;
+ }
+
+ /**
+ * @param float $effectiveDiscountPrice
+ */
+ public function setEffectiveDiscountPrice($effectiveDiscountPrice)
+ {
+ $this->effectiveDiscountPrice = $effectiveDiscountPrice;
+ }
+
+ /**
+ * Set priceTypeId
+ *
+ * @param integer $priceTypeId
+ *
+ * @return TravelPeriodPrice
+ */
+ public function setPriceTypeId($priceTypeId)
+ {
+ $this->priceTypeId = $priceTypeId;
+
+ return $this;
+ }
+
+ /**
+ * Get priceTypeId
+ *
+ * @return integer
+ */
+ public function getPriceTypeId()
+ {
+ return $this->priceTypeId;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelPeriodPriceType.php b/trunk/src/AppBundle/Entity/TravelPeriodPriceType.php
new file mode 100644
index 00000000..1fea8b8d
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelPeriodPriceType.php
@@ -0,0 +1,252 @@
+name = $name;
+
+ return $this;
+ }
+
+ /**
+ * Get name
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * Set internalName
+ *
+ * @param string $internalName
+ *
+ * @return TravelPeriodPriceType
+ */
+ public function setInternalName($internalName)
+ {
+ $this->internalName = $internalName;
+
+ return $this;
+ }
+
+ /**
+ * Get internalName
+ *
+ * @return string
+ */
+ public function getInternalName()
+ {
+ return $this->internalName;
+ }
+
+ /**
+ * Set short
+ *
+ * @param string $short
+ *
+ * @return TravelPeriodPriceType
+ */
+ public function setShort($short)
+ {
+ $this->short = $short;
+
+ return $this;
+ }
+
+ /**
+ * Get short
+ *
+ * @return string
+ */
+ public function getShort()
+ {
+ return $this->short;
+ }
+
+ /**
+ * Set max
+ *
+ * @param integer $max
+ *
+ * @return TravelPeriodPriceType
+ */
+ public function setMax($max)
+ {
+ $this->max = $max;
+
+ return $this;
+ }
+
+ /**
+ * Get max
+ *
+ * @return integer
+ */
+ public function getMax()
+ {
+ return $this->max;
+ }
+
+ /**
+ * Set minAdults
+ *
+ * @param integer $minAdults
+ *
+ * @return TravelPeriodPriceType
+ */
+ public function setMinAdults($minAdults)
+ {
+ $this->minAdults = $minAdults;
+
+ return $this;
+ }
+
+ /**
+ * Get minAdults
+ *
+ * @return integer
+ */
+ public function getMinAdults()
+ {
+ return $this->minAdults;
+ }
+
+ /**
+ * Set maxAdults
+ *
+ * @param integer $maxAdults
+ *
+ * @return TravelPeriodPriceType
+ */
+ public function setMaxAdults($maxAdults)
+ {
+ $this->maxAdults = $maxAdults;
+
+ return $this;
+ }
+
+ /**
+ * Get maxAdults
+ *
+ * @return integer
+ */
+ public function getMaxAdults()
+ {
+ return $this->maxAdults;
+ }
+
+ /**
+ * Set maxChildren
+ *
+ * @param integer $maxChildren
+ *
+ * @return TravelPeriodPriceType
+ */
+ public function setMaxChildren($maxChildren)
+ {
+ $this->maxChildren = $maxChildren;
+
+ return $this;
+ }
+
+ /**
+ * Get maxChildren
+ *
+ * @return integer
+ */
+ public function getMaxChildren()
+ {
+ return $this->maxChildren;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelPeriodPriceTypeRepository.php b/trunk/src/AppBundle/Entity/TravelPeriodPriceTypeRepository.php
new file mode 100644
index 00000000..7b1d1435
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelPeriodPriceTypeRepository.php
@@ -0,0 +1,20 @@
+createQueryBuilder('p', 'p.id')->select('p')->getQuery()->execute();
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelPeriodRepository.php b/trunk/src/AppBundle/Entity/TravelPeriodRepository.php
new file mode 100644
index 00000000..d951d2f2
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelPeriodRepository.php
@@ -0,0 +1,490 @@
+departureRepository = $this->getEntityManager()->getRepository('AppBundle:TravelDeparturePoint');
+ }
+
+ /**
+ * @param \DateTime $startDate
+ * @param \DateTime $endDate
+ * @param null $destinationIds
+ * @param bool $combi
+ *
+ * @return TravelProgram[]|array
+ * @throws \Exception
+ * @internal param null $destination
+ */
+ public function getTravelProgramsWithTravelDatesForTimePeriod($startDate, $endDate, $destinationIds = null,
+ $combi = false)
+ {
+ // Idea for natural sort problem:
+ // Add new column sortable_name
+
+ $now = new \DateTime();
+ if ($startDate < $now)
+ {
+ $startDate = $now;
+ }
+ $startDateStr = $startDate->format('Y-m-d');
+ $endDateStr = $endDate->format('Y-m-d');
+
+ $qb = $this->getEntityManager()->createQueryBuilder()
+ ->from('AppBundle:TravelProgram', 'tp', 'tp.id')
+ ->addSelect('tp')
+ ->where('tp.status > 0');
+
+ // Limit time period for seasons and travel dates
+ $qb->innerJoin('tp.periods', 'p');
+ $qb->addSelect('p');
+ $qb->innerJoin('p.dates', 'd');
+ $qb->addSelect('d');
+ $qb->where("((p.isSeason = 0 AND d.startDate >= '$startDateStr' AND d.endDate <= '$endDateStr') OR".
+ " (p.isSeason = 1 AND d.endDate >= '$startDateStr' AND".
+ " DATE_ADD(d.startDate, tp.programDuration, 'DAY') <= '$endDateStr' AND p.status > 0))");
+
+ // Prices
+ // Instead of a single join to prices we add one join per price type. This reduces the execution time by
+ // 150ms on the development system
+ $priceTypes = $this->getEntityManager()->getRepository('AppBundle:TravelPeriodPriceType')->findAll();
+ foreach ($priceTypes as $priceType)
+ {
+ $priceTypeKey = 'price_'. $priceType->getId();
+ $qb->leftJoin('p.prices', $priceTypeKey, Expr\Join::WITH,
+ $priceTypeKey .'.priceType = '. $priceType->getId(), null, $priceTypeKey .'.priceType');
+ $qb->addSelect($priceTypeKey);
+ }
+ $qb->leftJoin('p.discounts', 'discount');
+ $qb->addSelect('discount');
+
+ $qb->leftJoin('p.departures', 'p_dep', Expr\Join::WITH, 'tp.programType = '.
+ TravelProgram::MEDIATED_PROGRAM_TYPE);
+ $qb->addSelect('p_dep');
+
+ // Destinations
+ if (!empty($destinationIds) && is_array($destinationIds))
+ {
+ $qb->innerJoin('AppBundle:TravelProgramCountry', 'tpc', Expr\Join::WITH,
+ 'tpc.program = tp AND IDENTITY(tpc.country) IN ('. implode(', ', $destinationIds) .')');
+ if ($combi)
+ {
+ $qb->having('COUNT(DISTINCT tpc.country) = '. count($destinationIds));
+ }
+ }
+ $qb->groupBy('p.id, p_dep.id, d.id');
+
+ // Travel class
+ $qb->innerJoin('p.class', 'cls', Expr\Join::WITH, 'cls.standard = 1');
+
+ // Image
+ $qb->leftJoin('tp.images', 'tp_image', Expr\Join::WITH, 'tp_image.type = 2')
+ ->addSelect('tp_image');
+
+ // Sort travel programs
+ $qb->addSelect('COALESCE(tp.position, 0) as HIDDEN position_sort_key');
+ $qb->orderBy('position_sort_key');
+ //$qb->addOrderBy('LENGTH(tp.title)'); // Emulate natural sort
+ $qb->addOrderBy('tp.title');
+ $qb->addOrderBy('tp.id');
+ // Sort: Real travel dates have higher priority than virtual travel dates. Sort travel programs
+ $qb->addOrderBy('p.isSeason, p.id');
+
+ /** @var TravelProgram[]|array $travelPrograms */
+ $travelPrograms = $qb->getQuery()->getResult();
+
+ if (empty($travelPrograms))
+ {
+ return $travelPrograms;
+ }
+
+ // Collect arrival point IDs for non mediated travel programs
+ $isUsedArrivalPointById = [];
+ foreach ($travelPrograms as $travelProgram)
+ {
+ $isUsedTravelProgramById[$travelProgram->getId()] = true;
+ if (!$travelProgram->getIsMediated())
+ {
+ $isUsedArrivalPointById[$travelProgram->getTravelArrivalPoint()->getId()] = true;
+ }
+ }
+ $usedArrivalPointIds = array_keys($isUsedArrivalPointById);
+
+ // Find flight periods and related departures
+ $flightPeriods = [];
+ if (!empty($isUsedArrivalPointById))
+ {
+ $qb = $this->getEntityManager()->createQueryBuilder();
+ $unindexedFlightPeriods = $qb
+ ->from('AppBundle:FlightPeriod', 'fp')
+ ->addSelect('fp')
+ ->leftJoin('fp.departures', 'fp_dep')
+ ->addSelect('fp_dep')
+ ->where('fp.startDate >= :startDate')
+ ->andWhere('fp.endDate <= :endDate')
+ ->andWhere($qb->expr()->in('IDENTITY(fp.travelArrivalPoint)', $usedArrivalPointIds))
+ ->setParameter('startDate', $startDate)
+ ->setParameter('endDate', $endDate)
+ ->getQuery()->getResult();
+
+ // Index by CONCAT(start date, end date, arrival point id):
+ /** @var FlightPeriod $flightPeriod */
+ foreach ($unindexedFlightPeriods as $flightPeriod)
+ {
+ $flightPeriods[$flightPeriod->getStartDate()->format('Y-m-d') .
+ $flightPeriod->getEndDate()->format('Y-m-d') .
+ $flightPeriod->getTravelArrivalPoint()->getId()] = $flightPeriod;
+ }
+
+ }
+
+ // Find default departures and classify by-program or by-arrival-point
+ // We could've simply left joined them to get an equal result. But we're reducing the number of rows returned
+ // in the first travel program query above drastically with this solution. This doesn't hurt performance.
+ // Of course, we have to link departures of travel programs manually later.
+ $defDepsByArrivalPointId = [];
+ $qb = $this->getEntityManager()->createQueryBuilder()
+ ->from('AppBundle:TravelDeparturePoint', 'dep')
+ ->addSelect('dep')
+ ->where($qb->expr()->in('IDENTITY(dep.program)', array_keys($travelPrograms)));
+ if (!empty($isUsedArrivalPointById))
+ {
+ $qb->orWhere($qb->expr()->in('IDENTITY(dep.travelArrivalPoint)', $usedArrivalPointIds));
+ }
+ /** @var TravelDeparturePoint[]|array $defaultDepartures */
+ $defaultDepartures = $qb->getQuery()->execute();
+ foreach ($defaultDepartures as $defaultDeparture)
+ {
+ if ($defaultDeparture->getProgram())
+ {
+ $travelProgram = $travelPrograms[$defaultDeparture->getProgram()->getId()];
+ if ($travelProgram->getDepartures() instanceof PersistentCollection)
+ {
+ Util::reAttachRelatedCollection($travelProgram, 'departures', $travelProgram->getDepartures()->unwrap());
+ }
+ $travelProgram->addDeparture($defaultDeparture);
+ }
+ elseif ($defaultDeparture->getTravelArrivalPoint())
+ {
+ if (!isset($defDepsByArrivalPointId[$defaultDeparture->getTravelArrivalPoint()->getId()]))
+ {
+ $defDepsByArrivalPointId[$defaultDeparture->getTravelArrivalPoint()->getId()] = [];
+ }
+ $defDepsByArrivalPointId[$defaultDeparture->getTravelArrivalPoint()->getId()][] = $defaultDeparture;
+ }
+ }
+
+ foreach ($travelPrograms as $travelProgram)
+ {
+ $flightPeriod = null;
+ if (!$travelProgram->getIsMediated())
+ {
+ $arrivalPointId = $travelProgram->getTravelArrivalPoint()->getId();
+ // Manually link separately fetched default departures
+ $travelProgram->getTravelArrivalPoint()->__setDepartures(
+ isset($defDepsByArrivalPointId[$arrivalPointId])
+ ? $defDepsByArrivalPointId[$arrivalPointId]
+ : []
+ );
+ }
+
+ $this->addTravelDatesToProgram($travelProgram, $travelProgram->getPeriods(), $flightPeriods,
+ $startDate, $endDate);
+ }
+
+ return $travelPrograms;
+ }
+
+ private function createTravelDateKey(\DateTime $startDate, \DateTime $endDate)
+ {
+ return $startDate->format('Y-m-d') . $endDate->format('Y-m-d');
+ }
+
+ const TD_QUERY_NON_VIRTUAL = 0x1;
+ const TD_QUERY_VIRTUAL = 0x2;
+ const TD_QUERY_INACTIVE = 0x4;
+ const TD_QUERY_OUTDATED = 0x8;
+ const TD_QUERY_ACP = self::TD_QUERY_INACTIVE | self::TD_QUERY_OUTDATED;
+ const TD_QUERY_VIRTUAL_AND_NON_VIRTUAL = self::TD_QUERY_VIRTUAL | self::TD_QUERY_NON_VIRTUAL;
+
+ public function getTrueTravelPeriods(TravelProgram $program, $class = false, $flags =
+ self::TD_QUERY_VIRTUAL_AND_NON_VIRTUAL)
+ {
+ if (!($flags & self::TD_QUERY_VIRTUAL_AND_NON_VIRTUAL))
+ {
+ return [];
+ }
+ $doQueryVirtualAndNonVirtual = $flags & self::TD_QUERY_VIRTUAL_AND_NON_VIRTUAL ==
+ self::TD_QUERY_VIRTUAL_AND_NON_VIRTUAL;
+
+ /** @var TravelPeriod[] $periods */
+ $qb = $this->createQueryBuilder('p');
+ $qb
+ //->from('AppBundle:TravelPeriod', 'tpp', 'key')
+ ->leftJoin('p.dates', 'd')->addSelect('d')
+ ->leftJoin('p.prices', 'price', null, null, 'price.priceTypeId')
+ //->innerJoin('price.priceType', 'price_type_')
+ ->addSelect('price')
+ ->leftJoin('p.discounts', 'discount', Expr\Join::WITH,
+ 'discount.start <= CURRENT_TIMESTAMP() AND discount.end >= CURRENT_TIMESTAMP()')->addSelect('discount')
+ ->where('IDENTITY(p.program) = '. $program->getId())
+ ;
+
+ if ($program->getIsMediated())
+ {
+ // Only mediated travel programs define departures in travelPeriods
+ $qb->leftJoin('p.departures', 'p_dep')->addSelect('p_dep');
+ }
+ else
+ {
+ $qb->leftJoin('AppBundle:FlightPeriod', 'fp', Expr\Join::WITH, 'IDENTITY(fp.travelArrivalPoint) = '.
+ ':travelArrivalPointId AND d.startDate = fp.startDate AND d.endDate = fp.endDate');
+ $qb->setParameter('travelArrivalPointId', $program->getTravelArrivalPoint()->getId());
+ $qb->addSelect('fp');
+ $qb->leftJoin('fp.departures', 'fp_dep')->addSelect('fp_dep');
+ }
+
+ $startDate = null;
+ if (!($flags & self::TD_QUERY_OUTDATED))
+ {
+ $startDate = new \DateTime('tomorrow');
+ $qb->andWhere("((p.isSeason = 0 AND d.startDate >= CURRENT_TIMESTAMP()) OR".
+ " (p.isSeason = 1 AND d.endDate >= CURRENT_TIMESTAMP()))");
+ }
+ if ($class)
+ {
+ $qb->andWhere($qb->expr()->eq('IDENTITY(tpp.class)', $class));
+ }
+
+ if ($doQueryVirtualAndNonVirtual)
+ {
+ $qb->addOrderBy('p.isSeason');
+ }
+ else
+ {
+ $qb->andWhere($qb->expr()->eq('p.isSeason', $flags & self::TD_QUERY_VIRTUAL));
+
+ if(!($flags & self::TD_QUERY_INACTIVE))
+ {
+ // If both, non virtual and virtual entries are selected, we cannot exclude inactive entries, because
+ // there may be a non virtual travel date with inactive status and a matching virtual travel date with
+ // active status. In this case, the inactive status would get lost and the virtual travel date would
+ // wrongly be included in the result. Therefore we are removing inactive travel dates later in the
+ // TD_QUERY_VIRTUAL_AND_NON_VIRTUAL case.
+ $qb->andWhere($qb->expr()->gt('tpp.status', 0));
+ }
+ }
+
+ $qb
+ ->addOrderBy('p.order', 'ASC')
+ ->addOrderBy('d.startDate', 'ASC')
+ ->addOrderBy('p.name', 'ASC')
+ ;
+
+ // #TODO Try to optimize this later
+ $entities = $qb->getQuery()->execute();
+ $flightPeriodByKey = [];
+ if (!$program->getIsMediated())
+ {
+ foreach ($entities as $key => $entity)
+ {
+ if ($entity == null)
+ {
+ unset($entities[$key]);
+ }
+ else if ($entity instanceof FlightPeriod)
+ {
+ // We are joining to flight period with multiple keys. Doctrine cannot handle this and returns a
+ // mixed list containing both, travel and flight periods at the same level. We fix that here.
+ $flightPeriodByKey[$entity->getStartDate()->format('Y-m-d') .'_'.
+ $entity->getEndDate()->format('Y-m-d')] = $entity;
+ unset($entities[$key]);
+ }
+ }
+ /** @var TravelPeriod $period */
+ foreach ($entities as &$period)
+ {
+ foreach ($period->getDates() as &$date)
+ {
+ $fpKey = $date->getStartDate()->format('Y-m-d') . $date->getEndDate()->format('Y-m-d') .
+ $program->getTravelArrivalPoint()->getId();
+ if (isset($flightPeriodByKey[$fpKey]))
+ {
+ // #TODO Does this cause performance problems?
+ $date->setFlightPeriod($flightPeriodByKey[$fpKey]);
+ }
+ }
+ }
+ }
+
+ $this->addTravelDatesToProgram($program, $entities, $flightPeriodByKey, $startDate, null);
+ return $program->getTravelDates();
+ }
+
+ private $currencyFactor = null;
+
+ public function getCurrencyFactor()
+ {
+ if ($this->currencyFactor == null)
+ {
+ // #TODO Enable doctrine 2nd level cache instead of implementing own caching mechanism
+ $dollar = $this->getEntityManager()->getRepository('AppBundle:TravelSetting')->findOneBy(['key' => 'dollar']);
+ if (!$dollar)
+ {
+ throw new \Exception('Missing currency factor setting "dollar" in table travel_setting');
+ }
+ $this->currencyFactor = $dollar->getValue() ?? 1;
+ }
+ return $this->currencyFactor;
+ }
+
+ /**
+ * @param TravelProgram $travelProgram
+ * @param array|TravelPeriod[] $travelPeriods Represent seasons and travel dates
+ * @param array|FlightPeriod[] $flightPeriods For performance reasons, $flightPeriods must be pre-fetched
+ * @param \DateTime|null $startDate If not null, only add travel dates later than this value
+ * @param \DateTime|null $endDate If not null, only add travel dates earlier than this value
+ *
+ * @throws \Exception
+ */
+ public function addTravelDatesToProgram(TravelProgram &$travelProgram, $travelPeriods, $flightPeriods,
+ \DateTime $startDate = null, \DateTime $endDate = null)
+ {
+ $currencyFactor = $travelProgram->getNettoPricesInEuro() ? 1 : $this->getCurrencyFactor();
+
+ // #TODO Consider adding travelPeriods to travelProgram in the search algorithm
+ //foreach ($travelProgram->getPeriods() as $travelPeriod)
+ foreach ($travelPeriods as $travelPeriod)
+ {
+ if ($travelPeriod->getIsSeason())
+ {
+ $i = 1;
+ foreach ($travelPeriod->getDates() as $travelPeriodDate)
+ {
+ $seasonEndDate = clone $travelPeriodDate->getEndDate();
+ $seasonEndDate->modify('+'.$travelProgram->getProgramDuration().' day');
+ if ($endDate != null && $seasonEndDate > $endDate)
+ {
+ // Limit end date to requested latest travel end date
+ $seasonEndDate = clone $endDate;
+ }
+ // Subtract temporarily added days which were added above. (Also subtract if date was limited!)
+ $seasonEndDate->modify('-'.$travelProgram->getProgramDuration().' day');
+
+ $dates = new \DatePeriod($travelPeriodDate->getStartDate(),
+ \DateInterval::createFromDateString('1 day'), $seasonEndDate);
+ $doTestStartDate = $startDate != null;
+ /** @var \DateTime $date */
+ foreach ($dates as $date)
+ {
+ $isPossibleDate = $travelProgram->getIsAvailWeekday($date->format('w'));
+
+ // $doTestStartDate helps to improve performance by avoiding unnecessary (more expensive)
+ // "$date < $startDate" checks: As soon as $date >= $startDate the first time, it will stay
+ // this way until the foreach iteration has finished.
+ if (!($doTestStartDate && $date < $startDate))
+ {
+ $doTestStartDate = false;
+ if ($isPossibleDate)
+ {
+ // #TODO Do we need the travel date key?
+ $travelDateEnd = (clone $date)->modify('+'.$travelProgram->getProgramDuration().' day');
+ $travelDateKey = $this->createTravelDateKey($date, $travelDateEnd);
+ if (!$travelProgram->hasTravelDate($travelDateKey))
+ {
+ $flightPeriod = null;
+ if (!$travelProgram->getIsMediated())
+ {
+ $flightPeriodKey = $travelDateKey .
+ $travelProgram->getTravelArrivalPoint()->getId();
+ $flightPeriod = $flightPeriods[$flightPeriodKey] ?? null;
+ }
+ $travelProgram->addTravelDateFromSeasonTravelPeriod(
+ $travelDateKey,
+ $travelPeriod,
+ $travelPeriodDate->getId() . $travelPeriod->getName() . $i,
+ $date,
+ $travelDateEnd,
+ $flightPeriod,
+ $currencyFactor
+ );
+ }
+ }
+ }
+ // Also increment $i if the date is theoretically possible but excluded from the search request
+ if ($isPossibleDate)
+ {
+ ++$i;
+ }
+ }
+ }
+ }
+ elseif ($travelProgram->getIsPossibleStartDate($travelPeriod->getStartDate()))
+ {
+ $travelDateKey = $this->createTravelDateKey($travelPeriod->getStartDate(), $travelPeriod->getEndDate());
+ $flightPeriod = null;
+ if (!$travelProgram->getIsMediated())
+ {
+ $flightPeriod = $flightPeriods[$travelDateKey . $travelProgram->getTravelArrivalPoint()->getId()]
+ ?? null;
+ }
+
+ // #TODO There is an error in the old backend which causes duplicates
+ if ($travelProgram->hasTravelDate($travelDateKey) &&
+ $travelProgram->getTravelDate($travelDateKey)->__getTravelPeriod()->getId() != $travelPeriod->getId())
+ {
+ global $kernel;
+ if($kernel instanceOf \AppCache) $kernel = $kernel->getKernel();
+ $kernel->getContainer()->get('logger')->warn('Duplicate travel period found with name "'.
+ $travelPeriod->getName() .'"');
+ }
+ else
+ {
+ $travelProgram->addTravelDateFromNonSeasonTravelPeriod($travelDateKey, $travelPeriod, $flightPeriod,
+ $currencyFactor);
+ }
+ }
+ }
+ }
+
+ /**
+ * "Default departures" are taken if a travel period date has no departure itself. For mediated travel programs
+ * default departures are defined at travel program level. For self-organized travel programs they are defined
+ * at travel-arrival-point (airport) level.
+ *
+ * @param TravelProgram $program
+ * @param bool $acp
+ *
+ * @return TravelDeparturePoint[]|array|\Doctrine\Common\Collections\Collection|mixed
+ */
+ public function getDefaultDeparturesByProgram(TravelProgram $program, $acp = false)
+ {
+ if ($program->getIsMediated())
+ {
+ return $program->getDepartures();
+ }
+ if ($program->getTravelArrivalPoint() == null)
+ {
+ return [];
+ }
+ $defaultDepartures = $program->getTravelArrivalPoint()->getDepartures();
+ if (!$acp)
+ {
+ $defaultDepartures = $this->departureRepository->limitIndividualArrivalPriceInDepartures(
+ $defaultDepartures, $program->getDefaultFlightPrice());
+ }
+ return $defaultDepartures;
+ }
+}
\ No newline at end of file
diff --git a/trunk/src/AppBundle/Entity/TravelProgram.php b/trunk/src/AppBundle/Entity/TravelProgram.php
new file mode 100644
index 00000000..c2446fe3
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelProgram.php
@@ -0,0 +1,1504 @@
+profitMargin = $profitMargin;
+
+ return $this;
+ }
+
+ /**
+ * Get profitMargin
+ *
+ * @return float
+ */
+ public function getProfitMargin()
+ {
+ return $this->profitMargin;
+ }
+
+ /**
+ * Set programCode
+ *
+ * @param string $programCode
+ *
+ * @return TravelProgram
+ */
+ public function setProgramCode($programCode)
+ {
+ $this->programCode = $programCode;
+
+ return $this;
+ }
+
+ /**
+ * Get programCode
+ *
+ * @return string
+ */
+ public function getProgramCode()
+ {
+ return $this->programCode;
+ }
+
+ /**
+ * Set programDuration
+ *
+ * @param integer $programDuration
+ *
+ * @return TravelProgram
+ */
+ public function setProgramDuration($programDuration)
+ {
+ $this->programDuration = $programDuration;
+
+ return $this;
+ }
+
+ /**
+ * Get programDuration
+ *
+ * @return integer
+ */
+ public function getProgramDuration()
+ {
+ return $this->programDuration;
+ }
+
+ /**
+ * Set isSeasonal
+ *
+ * @param boolean $isSeasonal
+ *
+ * @return TravelProgram
+ */
+ public function setIsSeasonal($isSeasonal)
+ {
+ $this->isSeasonal = $isSeasonal;
+
+ return $this;
+ }
+
+ /**
+ * Get isSeasonal
+ *
+ * @return boolean
+ */
+ public function getIsSeasonal()
+ {
+ return $this->isSeasonal;
+ }
+
+ /**
+ * Set youth
+ *
+ * @param boolean $youth
+ *
+ * @return TravelProgram
+ */
+ public function setYouth($youth)
+ {
+ $this->youth = $youth;
+
+ return $this;
+ }
+
+ /**
+ * Get youth
+ *
+ * @return boolean
+ */
+ public function getYouth()
+ {
+ return $this->youth;
+ }
+
+ /**
+ * Set title
+ *
+ * @param string $title
+ *
+ * @return TravelProgram
+ */
+ public function setTitle($title)
+ {
+ $this->title = $title;
+
+ return $this;
+ }
+
+ /**
+ * Get title
+ *
+ * @return string
+ */
+ public function getTitle()
+ {
+ return $this->title;
+ }
+
+ /**
+ * Set subtitle
+ *
+ * @param string $subtitle
+ *
+ * @return TravelProgram
+ */
+ public function setSubtitle($subtitle)
+ {
+ $this->subtitle = $subtitle;
+
+ return $this;
+ }
+
+ /**
+ * Get subtitle
+ *
+ * @return string
+ */
+ public function getSubtitle()
+ {
+ return $this->subtitle;
+ }
+
+ /**
+ * Set programType
+ *
+ * @param integer $programType
+ *
+ * @return TravelProgram
+ */
+ public function setProgramType($programType)
+ {
+ $this->programType = $programType;
+
+ return $this;
+ }
+
+ /**
+ * Get programType
+ *
+ * @return integer
+ */
+ public function getProgramType()
+ {
+ return $this->programType;
+ }
+
+ /**
+ * Set status
+ *
+ * @param boolean $status
+ *
+ * @return TravelProgram
+ */
+ public function setStatus($status)
+ {
+ $this->status = $status;
+
+ return $this;
+ }
+
+ /**
+ * Get status
+ *
+ * @return boolean
+ */
+ public function getStatus()
+ {
+ return $this->status;
+ }
+
+ /**
+ * Set included
+ *
+ * @param string $included
+ *
+ * @return TravelProgram
+ */
+ public function setIncluded($included)
+ {
+ $this->included = $included;
+
+ return $this;
+ }
+
+ /**
+ * Get included
+ *
+ * @return string
+ */
+ public function getIncluded()
+ {
+ return $this->included;
+ }
+
+ /**
+ * Set classDescription
+ *
+ * @param string $classDescription
+ *
+ * @return TravelProgram
+ */
+ public function setClassDescription($classDescription)
+ {
+ $this->classDescription = $classDescription;
+
+ return $this;
+ }
+
+ /**
+ * Get classDescription
+ *
+ * @return string
+ */
+ public function getClassDescription()
+ {
+ return $this->classDescription;
+ }
+
+ /**
+ * Set excluded
+ *
+ * @param string $excluded
+ *
+ * @return TravelProgram
+ */
+ public function setExcluded($excluded)
+ {
+ $this->excluded = $excluded;
+
+ return $this;
+ }
+
+ /**
+ * Get excluded
+ *
+ * @return string
+ */
+ public function getExcluded()
+ {
+ return $this->excluded;
+ }
+
+ /**
+ * Set advices
+ *
+ * @param string $advices
+ *
+ * @return TravelProgram
+ */
+ public function setAdvices($advices)
+ {
+ $this->advices = $advices;
+
+ return $this;
+ }
+
+ /**
+ * Get advices
+ *
+ * @return string
+ */
+ public function getAdvices()
+ {
+ return $this->advices;
+ }
+
+ /**
+ * Set notes
+ *
+ * @param string $notes
+ *
+ * @return TravelProgram
+ */
+ public function setNotes($notes)
+ {
+ $this->notes = $notes;
+
+ return $this;
+ }
+
+ /**
+ * Get notes
+ *
+ * @return string
+ */
+ public function getNotes()
+ {
+ return $this->notes;
+ }
+
+ /**
+ * Set url
+ *
+ * @param string $url
+ *
+ * @return TravelProgram
+ */
+ public function setUrl($url)
+ {
+ $this->url = $url;
+
+ return $this;
+ }
+
+ /**
+ * Get url
+ *
+ * @return string
+ */
+ public function getUrl()
+ {
+ return $this->url;
+ }
+
+ /**
+ * Set maxAgeForChildren
+ *
+ * @param integer $maxAgeForChildren
+ *
+ * @return TravelProgram
+ */
+ public function setMaxAgeForChildren($maxAgeForChildren)
+ {
+ $this->maxAgeForChildren = $maxAgeForChildren;
+
+ return $this;
+ }
+
+ /**
+ * Get maxAgeForChildren
+ *
+ * @return integer
+ */
+ public function getMaxAgeForChildren()
+ {
+ return $this->maxAgeForChildren;
+ }
+
+ /**
+ * Set htmlDescription
+ *
+ * @param string $htmlDescription
+ *
+ * @return TravelProgram
+ */
+ public function setHtmlDescription($htmlDescription)
+ {
+ $this->htmlDescription = $htmlDescription;
+
+ return $this;
+ }
+
+ /**
+ * Get htmlDescription
+ *
+ * @return string
+ */
+ public function getHtmlDescription()
+ {
+ return $this->htmlDescription;
+ }
+
+ /**
+ * Set inSlider
+ *
+ * @param boolean $inSlider
+ *
+ * @return TravelProgram
+ */
+ public function setInSlider($inSlider)
+ {
+ $this->inSlider = $inSlider;
+
+ return $this;
+ }
+
+ /**
+ * Get inSlider
+ *
+ * @return boolean
+ */
+ public function getInSlider()
+ {
+ return $this->inSlider;
+ }
+
+ /**
+ * Set showMap
+ *
+ * @param boolean $showMap
+ *
+ * @return TravelProgram
+ */
+ public function setShowMap($showMap)
+ {
+ $this->showMap = $showMap;
+
+ return $this;
+ }
+
+ /**
+ * Get showMap
+ *
+ * @return boolean
+ */
+ public function getShowMap()
+ {
+ return $this->showMap;
+ }
+
+ /**
+ * Set mapHtml
+ *
+ * @param string $mapHtml
+ *
+ * @return TravelProgram
+ */
+ public function setMapHtml($mapHtml)
+ {
+ $this->mapHtml = $mapHtml;
+
+ return $this;
+ }
+
+ /**
+ * Get mapHtml
+ *
+ * @return string
+ */
+ public function getMapHtml()
+ {
+ return $this->mapHtml;
+ }
+
+ /**
+ * Set mapImage
+ *
+ * @param string $mapImage
+ *
+ * @return TravelProgram
+ */
+ public function setMapImage($mapImage)
+ {
+ $this->mapImage = $mapImage;
+
+ return $this;
+ }
+
+ /**
+ * Get mapImage
+ *
+ * @return string
+ */
+ public function getMapImage()
+ {
+ return $this->mapImage;
+ }
+
+ /**
+ * Set mapImageExt
+ *
+ * @param string $mapImageExt
+ *
+ * @return TravelProgram
+ */
+ public function setMapImageExt($mapImageExt)
+ {
+ $this->mapImageExt = $mapImageExt;
+
+ return $this;
+ }
+
+ /**
+ * Get mapImageExt
+ *
+ * @return string
+ */
+ public function getMapImageExt()
+ {
+ return $this->mapImageExt;
+ }
+
+ /**
+ * Set travelCountry
+ *
+ * @param integer $travelCountry
+ *
+ * @return TravelProgram
+ */
+ public function setTravelCountry($travelCountry)
+ {
+ $this->travelCountry = $travelCountry;
+
+ return $this;
+ }
+
+ /**
+ * Get travelCountry
+ *
+ * @return integer
+ */
+ public function getTravelCountry()
+ {
+ return $this->travelCountry;
+ }
+
+ /**
+ * Set travelCategory
+ *
+ * @param integer $travelCategory
+ *
+ * @return TravelProgram
+ */
+ public function setTravelCategory($travelCategory)
+ {
+ $this->travelCategory = $travelCategory;
+
+ return $this;
+ }
+
+ /**
+ * Get travelCategory
+ *
+ * @return integer
+ */
+ public function getTravelCategory()
+ {
+ return $this->travelCategory;
+ }
+
+ /**
+ * Set travelAgenda
+ *
+ * @param integer $travelAgenda
+ *
+ * @return TravelProgram
+ */
+ public function setTravelAgenda($travelAgenda)
+ {
+ $this->travelAgenda = $travelAgenda;
+
+ return $this;
+ }
+
+ /**
+ * Get travelAgenda
+ *
+ * @return integer
+ */
+ public function getTravelAgenda()
+ {
+ return $this->travelAgenda;
+ }
+
+ /**
+ * Set nettoPricesInEuro
+ *
+ * @param boolean $nettoPricesInEuro
+ *
+ * @return TravelProgram
+ */
+ public function setNettoPricesInEuro($nettoPricesInEuro)
+ {
+ $this->nettoPricesInEuro = $nettoPricesInEuro;
+
+ return $this;
+ }
+
+ /**
+ * Get nettoPricesInEuro
+ *
+ * @return boolean
+ */
+ public function getNettoPricesInEuro()
+ {
+ return $this->nettoPricesInEuro;
+ }
+
+ /**
+ * Set textRight
+ *
+ * @param string $textRight
+ *
+ * @return TravelProgram
+ */
+ public function setTextRight($textRight)
+ {
+ $this->textRight = $textRight;
+
+ return $this;
+ }
+
+ /**
+ * Get textRight
+ *
+ * @return string
+ */
+ public function getTextRight()
+ {
+ return $this->textRight;
+ }
+
+ /**
+ * Set defaultFlightPrice
+ *
+ * @param float $defaultFlightPrice
+ *
+ * @return TravelProgram
+ */
+ public function setDefaultFlightPrice($defaultFlightPrice)
+ {
+ $this->defaultFlightPrice = $defaultFlightPrice;
+
+ return $this;
+ }
+
+ /**
+ * Get defaultFlightPrice
+ *
+ * @return float
+ */
+ public function getDefaultFlightPrice()
+ {
+ return $this->defaultFlightPrice;
+ }
+
+ /**
+ * Set weekdays
+ *
+ * @param string $weekdays
+ *
+ * @return TravelProgram
+ */
+ public function setWeekdays($weekdays)
+ {
+ $this->weekdays = $weekdays;
+
+ return $this;
+ }
+
+ /**
+ * Get days
+ *
+ * @return array|int[]
+ */
+ public function getWeekdays()
+ {
+ return $this->weekdays == null ? null : explode(',', $this->weekdays);
+ }
+
+ /**
+ * @param int $weekday Weekday as returned by date format 'w'
+ *
+ * @return bool
+ */
+ public function getIsAvailWeekday($weekday)
+ {
+ if ($this->weekdays == null)
+ {
+ return false;
+ }
+ return in_array($weekday, explode(',', $this->weekdays));
+ }
+
+ /**
+ * Set position
+ *
+ * @param integer $position
+ *
+ * @return TravelProgram
+ */
+ public function setPosition($position)
+ {
+ $this->position = $position;
+
+ return $this;
+ }
+
+ /**
+ * Get position
+ *
+ * @return integer
+ */
+ public function getPosition()
+ {
+ return $this->position;
+ }
+
+ /**
+ * Set discount
+ *
+ * @param float $discount
+ *
+ * @return TravelProgram
+ */
+ public function setDiscount($discount)
+ {
+ $this->discount = $discount;
+
+ return $this;
+ }
+
+ /**
+ * Get discount
+ *
+ * @return float
+ */
+ public function getDiscount()
+ {
+ return $this->discount;
+ }
+
+ /**
+ * Set discountIsPercentValue
+ *
+ * @param boolean $discountIsPercentValue
+ *
+ * @return TravelProgram
+ */
+ public function setDiscountIsPercentValue($discountIsPercentValue)
+ {
+ $this->discountIsPercentValue = $discountIsPercentValue;
+
+ return $this;
+ }
+
+ /**
+ * Get discountIsPercentValue
+ *
+ * @return boolean
+ */
+ public function getDiscountIsPercentValue()
+ {
+ return $this->discountIsPercentValue;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Set travelArrivalPoint
+ *
+ * @param \AppBundle\Entity\TravelArrivalPoint $travelArrivalPoint
+ *
+ * @return TravelProgram
+ */
+ public function setTravelArrivalPoint(\AppBundle\Entity\TravelArrivalPoint $travelArrivalPoint = null)
+ {
+ $this->travelArrivalPoint = $travelArrivalPoint;
+
+ return $this;
+ }
+
+ /**
+ * Get travelArrivalPoint
+ *
+ * @return \AppBundle\Entity\TravelArrivalPoint
+ */
+ public function getTravelArrivalPoint()
+ {
+ return $this->travelArrivalPoint;
+ }
+
+ /**
+ * Set organizer
+ *
+ * @param \AppBundle\Entity\TravelOrganizer $organizer
+ *
+ * @return TravelProgram
+ */
+ public function setOrganizer(\AppBundle\Entity\TravelOrganizer $organizer = null)
+ {
+ $this->organizer = $organizer;
+
+ return $this;
+ }
+
+ /**
+ * Get organizer
+ *
+ * @return \AppBundle\Entity\TravelOrganizer
+ */
+ public function getOrganizer()
+ {
+ return $this->organizer;
+ }
+
+ /**
+ * Set insurance1
+ *
+ * @param \AppBundle\Entity\TravelInsurance $insurance1
+ *
+ * @return TravelProgram
+ */
+ public function setInsurance1(\AppBundle\Entity\TravelInsurance $insurance1 = null)
+ {
+ $this->insurance1 = $insurance1;
+
+ return $this;
+ }
+
+ /**
+ * Get insurance1
+ *
+ * @return \AppBundle\Entity\TravelInsurance
+ */
+ public function getInsurance1()
+ {
+ return $this->insurance1;
+ }
+
+ /**
+ * Set insurance2
+ *
+ * @param \AppBundle\Entity\TravelInsurance $insurance2
+ *
+ * @return TravelProgram
+ */
+ public function setInsurance2(\AppBundle\Entity\TravelInsurance $insurance2 = null)
+ {
+ $this->insurance2 = $insurance2;
+
+ return $this;
+ }
+
+ /**
+ * Get insurance2
+ *
+ * @return \AppBundle\Entity\TravelInsurance
+ */
+ public function getInsurance2()
+ {
+ return $this->insurance2;
+ }
+
+ /**
+ * Set category
+ *
+ * @param \AppBundle\Entity\TravelCategory $category
+ *
+ * @return TravelProgram
+ */
+ public function setCategory(\AppBundle\Entity\TravelCategory $category = null)
+ {
+ $this->category = $category;
+
+ return $this;
+ }
+
+ /**
+ * Get category
+ *
+ * @return \AppBundle\Entity\TravelCategory
+ */
+ public function getCategory()
+ {
+ return $this->category;
+ }
+ /**
+ * Constructor
+ */
+ public function __construct()
+ {
+ $this->periods = new \Doctrine\Common\Collections\ArrayCollection();
+ $this->countries = new \Doctrine\Common\Collections\ArrayCollection();
+ $this->departures = new \Doctrine\Common\Collections\ArrayCollection();
+ $this->travelDateByKey = [];
+ }
+
+ /**
+ * Add period
+ *
+ * @param \AppBundle\Entity\TravelPeriod $period
+ *
+ * @return TravelProgram
+ */
+ public function addPeriod(\AppBundle\Entity\TravelPeriod $period)
+ {
+ $this->periods[] = $period;
+
+ return $this;
+ }
+
+ /**
+ * Remove period
+ *
+ * @param \AppBundle\Entity\TravelPeriod $period
+ */
+ public function removePeriod(\AppBundle\Entity\TravelPeriod $period)
+ {
+ $this->periods->removeElement($period);
+ }
+
+ /**
+ * Get periods
+ *
+ * @return \Doctrine\Common\Collections\Collection|TravelPeriod[]
+ */
+ public function getPeriods()
+ {
+ return $this->periods;
+ }
+
+ public function getIsMediated()
+ {
+ return $this->programType == TravelProgram::MEDIATED_PROGRAM_TYPE;
+ }
+
+ /**
+ * Add departure
+ *
+ * @param \AppBundle\Entity\TravelDeparturePoint $departure
+ *
+ * @return TravelProgram
+ */
+ public function addDeparture(\AppBundle\Entity\TravelDeparturePoint $departure)
+ {
+ $this->departures[] = $departure;
+
+ return $this;
+ }
+
+ /**
+ * Remove departure
+ *
+ * @param \AppBundle\Entity\TravelDeparturePoint $departure
+ */
+ public function removeDeparture(\AppBundle\Entity\TravelDeparturePoint $departure)
+ {
+ $this->departures->removeElement($departure);
+ }
+
+ /**
+ * Get departures
+ *
+ * @return \Doctrine\Common\Collections\Collection
+ */
+ public function getDepartures()
+ {
+ return $this->departures;
+ }
+
+ /**
+ * Add country
+ *
+ * @param \AppBundle\Entity\TravelCountry $country
+ *
+ * @return TravelProgram
+ */
+ public function addCountry(\AppBundle\Entity\TravelCountry $country)
+ {
+ $this->countries[] = $country;
+
+ return $this;
+ }
+
+ /**
+ * Remove country
+ *
+ * @param \AppBundle\Entity\TravelCountry $country
+ */
+ public function removeCountry(\AppBundle\Entity\TravelCountry $country)
+ {
+ $this->countries->removeElement($country);
+ }
+
+ /**
+ * Get countries
+ *
+ * @return \Doctrine\Common\Collections\Collection
+ */
+ public function getCountries()
+ {
+ return $this->countries;
+ }
+
+ /**
+ * Add image
+ *
+ * @param \AppBundle\Entity\TravelProgramImage $image
+ *
+ * @return TravelProgram
+ */
+ public function addImage(\AppBundle\Entity\TravelProgramImage $image)
+ {
+ $this->images[] = $image;
+
+ return $this;
+ }
+
+ /**
+ * Remove image
+ *
+ * @param \AppBundle\Entity\TravelProgramImage $image
+ */
+ public function removeImage(\AppBundle\Entity\TravelProgramImage $image)
+ {
+ $this->images->removeElement($image);
+ }
+
+ /**
+ * Get images
+ *
+ * @return \Doctrine\Common\Collections\Collection|TravelProgramImage[]
+ */
+ public function getImages()
+ {
+ return $this->images;
+ }
+
+ private function assertTravelDateNotDefinedYet($key)
+ {
+ if (isset($this->travelDateByKey[$key]))
+ {
+ throw new \Exception('Travel period with key '. $key .' already exists');
+ }
+ }
+
+ public function addTravelDateFromNonSeasonTravelPeriod($key, TravelPeriod $travelPeriod,
+ FlightPeriod $flightPeriod = null, $currencyFactor)
+ {
+ $this->assertTravelDateNotDefinedYet($key);
+ $this->travelDateByKey[$key] = TravelDate::createForNonSeasonTravelPeriod($key, $travelPeriod, $flightPeriod,
+ $currencyFactor);
+ }
+
+ public function addTravelDateFromSeasonTravelPeriod($key, TravelPeriod $travelPeriod, $index, \DateTime $start,
+ \DateTime $end = null, FlightPeriod $flightPeriod = null, $currencyFactor)
+ {
+ $this->assertTravelDateNotDefinedYet($key);
+ $this->travelDateByKey[$key] = TravelDate::createForSeasonTravelPeriod($key, $travelPeriod, $index, $start,
+ $end, $flightPeriod, $currencyFactor);
+ }
+
+ public function addTravelDate($key, TravelPeriod $travelPeriod, FlightPeriod $flightPeriod = null, $currencyFactor,
+ \DateTime $start = null, \DateTime $end = null, $index = null)
+ {
+ $this->assertTravelDateNotDefinedYet($key);
+ $this->travelDateByKey[$key] = new TravelDate($key, $travelPeriod, $flightPeriod, $currencyFactor, $start, $end,
+ $index);
+ }
+
+ public function hasTravelDate($key)
+ {
+ return isset($this->travelDateByKey[$key]);
+ }
+
+ public function getTravelDate($key)
+ {
+ return $this->travelDateByKey[$key] ?? null;
+ }
+
+ /**
+ * @return TravelDate[]|array
+ */
+ public function getTravelDates()
+ {
+ return $this->travelDateByKey;
+ }
+
+ public function getIsPossibleStartDate(\DateTime $startDate)
+ {
+ return $this->getIsAvailWeekday(intval($startDate->format('w')));
+ }
+
+ public function getLowestPrice()
+ {
+ $lowestPrice = -1;
+ foreach ($this->getTravelDates() as $travelDate)
+ {
+ $curLowestPrice = $travelDate->getLowestPrice();
+ if ($lowestPrice < 0 || $curLowestPrice < $lowestPrice)
+ {
+ $lowestPrice = $curLowestPrice;
+ }
+ }
+ return $lowestPrice;
+ }
+
+ /**
+ * Add option
+ *
+ * @param \AppBundle\Entity\TravelOption $option
+ *
+ * @return TravelProgram
+ */
+ public function addOption(\AppBundle\Entity\TravelOption $option)
+ {
+ $this->options[] = $option;
+
+ return $this;
+ }
+
+ /**
+ * Remove option
+ *
+ * @param \AppBundle\Entity\TravelOption $option
+ */
+ public function removeOption(\AppBundle\Entity\TravelOption $option)
+ {
+ $this->options->removeElement($option);
+ }
+
+ /**
+ * Get options
+ *
+ * @return \Doctrine\Common\Collections\Collection
+ */
+ public function getOptions()
+ {
+ return $this->options;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelProgramDestination.php b/trunk/src/AppBundle/Entity/TravelProgramDestination.php
new file mode 100644
index 00000000..debe522d
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelProgramDestination.php
@@ -0,0 +1,103 @@
+id;
+ }
+
+ /**
+ * Set program
+ *
+ * @param \AppBundle\Entity\TravelProgram $program
+ *
+ * @return TravelProgramDestination
+ */
+ public function setProgram(\AppBundle\Entity\TravelProgram $program = null)
+ {
+ $this->program = $program;
+
+ return $this;
+ }
+
+ /**
+ * Get program
+ *
+ * @return \AppBundle\Entity\TravelProgram
+ */
+ public function getProgram()
+ {
+ return $this->program;
+ }
+
+ /**
+ * Set destination
+ *
+ * @param \AppBundle\Entity\TravelDestination $destination
+ *
+ * @return TravelProgramDestination
+ */
+ public function setDestination(\AppBundle\Entity\TravelDestination $destination = null)
+ {
+ $this->destination = $destination;
+
+ return $this;
+ }
+
+ /**
+ * Get destination
+ *
+ * @return \AppBundle\Entity\TravelDestination
+ */
+ public function getDestination()
+ {
+ return $this->destination;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelProgramImage.php b/trunk/src/AppBundle/Entity/TravelProgramImage.php
new file mode 100644
index 00000000..bd1fce6d
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelProgramImage.php
@@ -0,0 +1,198 @@
+fileName = $fileName;
+
+ return $this;
+ }
+
+ /**
+ * Get fileName
+ *
+ * @return string
+ */
+ public function getFileName()
+ {
+ return $this->fileName;
+ }
+
+ /**
+ * Set extension
+ *
+ * @param string $extension
+ *
+ * @return TravelProgramImage
+ */
+ public function setExtension($extension)
+ {
+ $this->extension = $extension;
+
+ return $this;
+ }
+
+ /**
+ * Get extension
+ *
+ * @return string
+ */
+ public function getExtension()
+ {
+ return $this->extension;
+ }
+
+ /**
+ * Set description
+ *
+ * @param string $description
+ *
+ * @return TravelProgramImage
+ */
+ public function setDescription($description)
+ {
+ $this->description = $description;
+
+ return $this;
+ }
+
+ /**
+ * Get description
+ *
+ * @return string
+ */
+ public function getDescription()
+ {
+ return $this->description;
+ }
+
+ /**
+ * Set type
+ *
+ * @param boolean $type
+ *
+ * @return TravelProgramImage
+ */
+ public function setType($type)
+ {
+ $this->type = $type;
+
+ return $this;
+ }
+
+ /**
+ * Get type
+ *
+ * @return boolean
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Set program
+ *
+ * @param \AppBundle\Entity\TravelProgram $program
+ *
+ * @return TravelProgramImage
+ */
+ public function setProgram(\AppBundle\Entity\TravelProgram $program = null)
+ {
+ $this->program = $program;
+
+ return $this;
+ }
+
+ /**
+ * Get program
+ *
+ * @return \AppBundle\Entity\TravelProgram
+ */
+ public function getProgram()
+ {
+ return $this->program;
+ }
+
+ public function getFileNameWithExtension()
+ {
+ return $this->getFileName() . $this->getExtension();
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelProgramRelated.php b/trunk/src/AppBundle/Entity/TravelProgramRelated.php
new file mode 100644
index 00000000..0f404b62
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelProgramRelated.php
@@ -0,0 +1,134 @@
+description = $description;
+
+ return $this;
+ }
+
+ /**
+ * Get description
+ *
+ * @return string
+ */
+ public function getDescription()
+ {
+ return $this->description;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Set program1
+ *
+ * @param \AppBundle\Entity\TravelProgram $program1
+ *
+ * @return TravelProgramRelated
+ */
+ public function setProgram1(\AppBundle\Entity\TravelProgram $program1 = null)
+ {
+ $this->program1 = $program1;
+
+ return $this;
+ }
+
+ /**
+ * Get program1
+ *
+ * @return \AppBundle\Entity\TravelProgram
+ */
+ public function getProgram1()
+ {
+ return $this->program1;
+ }
+
+ /**
+ * Set program2
+ *
+ * @param \AppBundle\Entity\TravelProgram $program2
+ *
+ * @return TravelProgramRelated
+ */
+ public function setProgram2(\AppBundle\Entity\TravelProgram $program2 = null)
+ {
+ $this->program2 = $program2;
+
+ return $this;
+ }
+
+ /**
+ * Get program2
+ *
+ * @return \AppBundle\Entity\TravelProgram
+ */
+ public function getProgram2()
+ {
+ return $this->program2;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelProgramRepository.php b/trunk/src/AppBundle/Entity/TravelProgramRepository.php
new file mode 100644
index 00000000..04e9b2bc
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelProgramRepository.php
@@ -0,0 +1,13 @@
+key = $key;
+
+ return $this;
+ }
+
+ /**
+ * Get key
+ *
+ * @return string
+ */
+ public function getKey()
+ {
+ return $this->key;
+ }
+
+ /**
+ * Set value
+ *
+ * @param string $value
+ *
+ * @return TravelSetting
+ */
+ public function setValue($value)
+ {
+ $this->value = $value;
+
+ return $this;
+ }
+
+ /**
+ * Get value
+ *
+ * @return string
+ */
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+}
diff --git a/trunk/src/AppBundle/Entity/TravelSettingRepository.php b/trunk/src/AppBundle/Entity/TravelSettingRepository.php
new file mode 100644
index 00000000..17d0deb0
--- /dev/null
+++ b/trunk/src/AppBundle/Entity/TravelSettingRepository.php
@@ -0,0 +1,13 @@
+title = $title;
+
+ return $this;
+ }
+
+ /**
+ * Get title
+ *
+ * @return string
+ */
+ public function getTitle()
+ {
+ return $this->title;
+ }
+
+ /**
+ * Set content
+ *
+ * @param string $content
+ *
+ * @return WikiPage
+ */
+ public function setContent($content)
+ {
+ $this->content = $content;
+
+ return $this;
+ }
+
+ /**
+ * Get content
+ *
+ * @return string
+ */
+ public function getContent()
+ {
+ return $this->content;
+ }
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+}
diff --git a/trunk/src/AppBundle/Form/BookingRequestType.php b/trunk/src/AppBundle/Form/BookingRequestType.php
new file mode 100644
index 00000000..e9c5a9e9
--- /dev/null
+++ b/trunk/src/AppBundle/Form/BookingRequestType.php
@@ -0,0 +1,135 @@
+
+ * @date 12/16/2016
+ */
+
+namespace AppBundle\Form;
+
+
+use AppBundle\Entity\TravelDate;
+use AppBundle\Entity\TravelProgram;
+use AppBundle\Util;
+use Doctrine\Common\Collections\Collection;
+use Symfony\Bridge\Doctrine\Form\Type\EntityType;
+use Symfony\Component\Form\AbstractType;
+use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
+use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
+use Symfony\Component\Form\FormBuilderInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
+use Symfony\Component\Validator\Constraints\Choice;
+use Symfony\Component\Validator\Constraints\NotNull;
+
+class BookingRequestType extends AbstractType
+{
+ public static $TRAVELER_COUNT_CHOICES = [
+ '1 Person' => 1,
+ '2 Personen' => 2,
+ '3 Personen' => 3,
+ '4 Personen' => 4
+ ];
+
+ /*
+ //**
+ * {@inheritdoc}
+ * /
+ public function buildView(FormView $view, FormInterface $form, array $options)
+ {
+ $view->vars['travel_date'] = $options['travel_date'];
+ $view->vars['travel_program'] = $options['travel_program'];
+ }
+ */
+
+ /**
+ * {@inheritdoc}
+ */
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ $resolver->setDefaults([
+ 'travel_date' => null,
+ 'travel_program' => null
+ ]);
+
+ $resolver->setAllowedTypes('travel_date', ['AppBundle\Entity\TravelDate']);
+ $resolver->setAllowedTypes('travel_program', ['AppBundle\Entity\TravelProgram']);
+ }
+
+ /**
+ * @param FormBuilderInterface $builder
+ * @param array $options
+ */
+ public function buildForm(FormBuilderInterface $builder, array $options)
+ {
+ /* @var TravelDate $travelDate */
+ $travelDate = $options['travel_date'];
+ /* @var TravelProgram $travelProgram */
+ $travelProgram = $options['travel_program'];
+
+ $builder->add('departure', EntityType::class, [
+ 'class' => 'AppBundle\Entity\TravelDeparturePoint',
+ 'choices' => $travelDate->getDepartures(),
+ 'constraints' => [
+ new NotNull(),
+ new Choice([
+ 'choices' => $travelDate->getDepartures(),
+ 'multiple' => true
+ ]
+ )]
+ ]);
+
+ $builder->add('travelerCount', ChoiceType::class, [
+ 'choices' => self::$TRAVELER_COUNT_CHOICES,
+ 'constraints' => [
+ new Choice(['choices' => self::$TRAVELER_COUNT_CHOICES]
+ )]
+ ]);
+
+
+ $insuranceChoices = [];
+ if ($travelProgram->getInsurance1())
+ {
+ $insuranceChoices[$travelProgram->getInsurance1()->getName()] = $travelProgram->getInsurance1();
+ }
+ if ($travelProgram->getInsurance2())
+ {
+ $insuranceChoices[$travelProgram->getInsurance2()->getName()] = $travelProgram->getInsurance2();
+ }
+ if (!empty($insuranceChoices))
+ {
+ $builder->add('insurance', EntityType::class, [
+ 'class' => 'AppBundle\Entity\TravelInsurance',
+ 'placeholder' => 'keine Reiseversicherung',
+ 'choices' => $insuranceChoices,
+ 'expanded' => true,
+ 'constraints' => [
+ new Choice(['choices' => $insuranceChoices])
+ ]
+ ]);
+ }
+
+ if ($travelDate->hasComfortCategory())
+ {
+ $builder->add('comfort', CheckboxType::class, ['required' => false]);
+ }
+
+ $travelOptions = $travelProgram->getOptions();
+ if ($travelOptions instanceof Collection)
+ {
+ $travelOptions = $travelOptions->toArray();
+ }
+ if (!empty($travelOptions))
+ {
+ $builder->add('travelOptions', ChoiceType::class, [
+ 'choices' => $travelOptions,
+ 'expanded' => true,
+ 'multiple' => true,
+ 'constraints' => [
+ new Choice([
+ 'choices' => $travelOptions,
+ 'multiple' => true
+ ])
+ ]
+ ]);
+ }
+ }
+}
\ No newline at end of file
diff --git a/trunk/src/AppBundle/Listener/KernelControllerListener.php b/trunk/src/AppBundle/Listener/KernelControllerListener.php
new file mode 100644
index 00000000..23b57731
--- /dev/null
+++ b/trunk/src/AppBundle/Listener/KernelControllerListener.php
@@ -0,0 +1,86 @@
+
+ * @date 12/02/2016
+ */
+
+namespace AppBundle\Listener;
+
+
+use AppBundle\AppBundle;
+use AppBundle\Controller\DefaultController;
+use AppBundle\Entity\Page;
+use Doctrine\ORM\EntityManager;
+use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface;
+use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
+
+class KernelControllerListener
+{
+ private $em;
+ private $controllerResolver;
+
+ public function __construct(EntityManager $entityManager, ControllerResolverInterface $controllerResolver)
+ {
+ $this->em = $entityManager;
+ $this->controllerResolver = $controllerResolver;
+ }
+
+ public function onKernelController(FilterControllerEvent $event)
+ {
+ $request = $event->getRequest();
+ if ($request->get('_controller') == 'AppBundle\Controller\DefaultController::defaultAction')
+ {
+ $repo = $this->em->getRepository('AppBundle:Page');
+ $path = preg_replace('/^\/?(.*?)\/?$/', '$1', $request->getPathInfo());
+ $pathArray = explode('/', $path);
+ /** @var Page $node */
+ $node = null;
+ for ($i = 0; $i < count($pathArray); ++$i)
+ {
+ $qb = $repo->createQueryBuilder('p');
+ $qb->where($qb->expr()->eq('p.lvl', $i));
+ $qb->andWhere($qb->expr()->eq('p.slug', ':slug'));
+ $qb->setParameter('slug', $pathArray[$i]);
+ if ($node != null)
+ {
+ $qb->andWhere($qb->expr()->between('p.lft', $node->getLft(), $node->getRgt()));
+ }
+ $qb->setMaxResults(1);
+ $node = $qb->getQuery()->getOneOrNullResult();
+ if (!$node)
+ {
+ break;
+ }
+ if (isset($parentNode))
+ {
+ // Avoid database calls to parent later
+ $node->setParent($parentNode);
+ }
+ $parentNode = $node;
+ }
+ if ($node)
+ {
+ $request->attributes->set('page', $node);
+ if ($node->getTravelProgram() != null)
+ {
+ $request->attributes->set('_controller', 'AppBundle:Default:cmsTravelProgram');
+ }
+ else
+ {
+ $handler = 'cms'. ($node->getTemplate() ? ucfirst($node->getTemplate()) : 'Default');
+ $request->attributes->set('_controller', 'AppBundle:Default:'. $handler);
+ }
+ }
+ elseif (isset($parentNode) && $parentNode->getTravelProgram() != null && $pathArray[$i] == 'buchen')
+ {
+ $request->attributes->set('travelProgramPage', $parentNode);
+ $request->attributes->set('_controller', 'AppBundle:Booking:index');
+ }
+ else
+ {
+ return;
+ }
+ $event->setController($this->controllerResolver->getController($request));
+ }
+ }
+}
\ No newline at end of file
diff --git a/trunk/src/AppBundle/RedisClassLoader.php b/trunk/src/AppBundle/RedisClassLoader.php
new file mode 100644
index 00000000..8261a888
--- /dev/null
+++ b/trunk/src/AppBundle/RedisClassLoader.php
@@ -0,0 +1,118 @@
+
+ * @date 12/01/2016
+ */
+
+namespace AppBundle;
+
+
+class RedisClassLoader
+{
+ private $prefix;
+
+ /**
+ * A class loader object that implements the findFile() method.
+ *
+ * @var object
+ */
+ private $decorated;
+
+ /**
+ * @var null|\Redis
+ */
+ private $redis = null;
+
+ /**
+ * Constructor.
+ *
+ * @param string $prefix The XCache namespace prefix to use
+ * @param object $decorated A class loader object that implements the findFile() method
+ *
+ * @throws \RuntimeException
+ * @throws \InvalidArgumentException
+ */
+ public function __construct($prefix, $decorated)
+ {
+ if (extension_loaded('redis')) {
+ $this->redis = new \Redis();
+ $this->redis->connect('127.0.0.1');
+ }
+
+ if (!method_exists($decorated, 'findFile')) {
+ throw new \InvalidArgumentException('The class finder must implement a "findFile" method.');
+ }
+
+ $this->prefix = $prefix;
+ $this->decorated = $decorated;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ *
+ * @return bool|null True, if loaded
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ require $file;
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds a file by class name while caching lookups to Xcache.
+ *
+ * @param string $class A class name to resolve to file
+ *
+ * @return string|null
+ */
+ public function findFile($class)
+ {
+ if ($this->redis === null)
+ {
+ return $this->decorated->findFile($class) ?: null;
+ }
+
+ if ($this->redis->exists($this->prefix.$class))
+ {
+ $file = $this->redis->get($this->prefix.$class);
+ }
+ else
+ {
+ $file = $this->decorated->findFile($class) ?: null;
+ $this->redis->set($this->prefix.$class, $file);
+ }
+
+ return $file;
+ }
+
+ /**
+ * Passes through all unknown calls onto the decorated object.
+ */
+ public function __call($method, $args)
+ {
+ return call_user_func_array(array($this->decorated, $method), $args);
+ }
+}
\ No newline at end of file
diff --git a/trunk/src/AppBundle/Resources/public/css/booking.css b/trunk/src/AppBundle/Resources/public/css/booking.css
new file mode 100644
index 00000000..4fb15f0c
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/css/booking.css
@@ -0,0 +1,16 @@
+.st-booking-table {
+ width: 100%;
+}
+.st-booking-table td {
+ padding: 5px 10px;
+}
+.st-booking-table .st-position-price-col {
+ text-align: right;
+}
+.st-booking-table .st-total-tr > td {
+ border-top: 1px solid black;
+}
+.st-booking-table .st-total-price {
+ border-bottom: 1px solid;
+ font-weight: bold;
+}
\ No newline at end of file
diff --git a/trunk/src/AppBundle/Resources/public/css/bootstrap-3.3.7.css b/trunk/src/AppBundle/Resources/public/css/bootstrap-3.3.7.css
new file mode 100644
index 00000000..8a4be566
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/css/bootstrap-3.3.7.css
@@ -0,0 +1,6756 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
+html {
+ font-family: sans-serif;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+body {
+ margin: 0;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+audio,
+canvas,
+progress,
+video {
+ display: inline-block;
+ vertical-align: baseline;
+}
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+[hidden],
+template {
+ display: none;
+}
+a {
+ background-color: transparent;
+}
+a:active,
+a:hover {
+ outline: 0;
+}
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+b,
+strong {
+ font-weight: bold;
+}
+dfn {
+ font-style: italic;
+}
+h1 {
+ margin: .67em 0;
+ font-size: 2em;
+}
+mark {
+ color: #000;
+ background: #ff0;
+}
+small {
+ font-size: 80%;
+}
+sub,
+sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+sup {
+ top: -.5em;
+}
+sub {
+ bottom: -.25em;
+}
+img {
+ border: 0;
+}
+svg:not(:root) {
+ overflow: hidden;
+}
+figure {
+ margin: 1em 40px;
+}
+hr {
+ height: 0;
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+pre {
+ overflow: auto;
+}
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+button,
+input,
+optgroup,
+select,
+textarea {
+ margin: 0;
+ font: inherit;
+ color: inherit;
+}
+button {
+ overflow: visible;
+}
+button,
+select {
+ text-transform: none;
+}
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button;
+ cursor: pointer;
+}
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+input {
+ line-height: normal;
+}
+input[type="checkbox"],
+input[type="radio"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0;
+}
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+input[type="search"] {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ -webkit-appearance: textfield;
+}
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+fieldset {
+ padding: .35em .625em .75em;
+ margin: 0 2px;
+ border: 1px solid #c0c0c0;
+}
+legend {
+ padding: 0;
+ border: 0;
+}
+textarea {
+ overflow: auto;
+}
+optgroup {
+ font-weight: bold;
+}
+table {
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+td,
+th {
+ padding: 0;
+}
+/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
+@media print {
+ *,
+ *:before,
+ *:after {
+ color: #000 !important;
+ text-shadow: none !important;
+ background: transparent !important;
+ -webkit-box-shadow: none !important;
+ box-shadow: none !important;
+ }
+ a,
+ a:visited {
+ text-decoration: underline;
+ }
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+ abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+ a[href^="#"]:after,
+ a[href^="javascript:"]:after {
+ content: "";
+ }
+ pre,
+ blockquote {
+ border: 1px solid #999;
+
+ page-break-inside: avoid;
+ }
+ thead {
+ display: table-header-group;
+ }
+ tr,
+ img {
+ page-break-inside: avoid;
+ }
+ img {
+ max-width: 100% !important;
+ }
+ p,
+ h2,
+ h3 {
+ orphans: 3;
+ widows: 3;
+ }
+ h2,
+ h3 {
+ page-break-after: avoid;
+ }
+ .navbar {
+ display: none;
+ }
+ .btn > .caret,
+ .dropup > .btn > .caret {
+ border-top-color: #000 !important;
+ }
+ .label {
+ border: 1px solid #000;
+ }
+ .table {
+ border-collapse: collapse !important;
+ }
+ .table td,
+ .table th {
+ background-color: #fff !important;
+ }
+ .table-bordered th,
+ .table-bordered td {
+ border: 1px solid #ddd !important;
+ }
+}
+@font-face {
+ font-family: 'Glyphicons Halflings';
+
+ src: url('../fonts/glyphicons-halflings-regular.eot');
+ src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
+}
+.glyphicon {
+ position: relative;
+ top: 1px;
+ display: inline-block;
+ font-family: 'Glyphicons Halflings';
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1;
+
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+.glyphicon-asterisk:before {
+ content: "\002a";
+}
+.glyphicon-plus:before {
+ content: "\002b";
+}
+.glyphicon-euro:before,
+.glyphicon-eur:before {
+ content: "\20ac";
+}
+.glyphicon-minus:before {
+ content: "\2212";
+}
+.glyphicon-cloud:before {
+ content: "\2601";
+}
+.glyphicon-envelope:before {
+ content: "\2709";
+}
+.glyphicon-pencil:before {
+ content: "\270f";
+}
+.glyphicon-glass:before {
+ content: "\e001";
+}
+.glyphicon-music:before {
+ content: "\e002";
+}
+.glyphicon-search:before {
+ content: "\e003";
+}
+.glyphicon-heart:before {
+ content: "\e005";
+}
+.glyphicon-star:before {
+ content: "\e006";
+}
+.glyphicon-star-empty:before {
+ content: "\e007";
+}
+.glyphicon-user:before {
+ content: "\e008";
+}
+.glyphicon-film:before {
+ content: "\e009";
+}
+.glyphicon-th-large:before {
+ content: "\e010";
+}
+.glyphicon-th:before {
+ content: "\e011";
+}
+.glyphicon-th-list:before {
+ content: "\e012";
+}
+.glyphicon-ok:before {
+ content: "\e013";
+}
+.glyphicon-remove:before {
+ content: "\e014";
+}
+.glyphicon-zoom-in:before {
+ content: "\e015";
+}
+.glyphicon-zoom-out:before {
+ content: "\e016";
+}
+.glyphicon-off:before {
+ content: "\e017";
+}
+.glyphicon-signal:before {
+ content: "\e018";
+}
+.glyphicon-cog:before {
+ content: "\e019";
+}
+.glyphicon-trash:before {
+ content: "\e020";
+}
+.glyphicon-home:before {
+ content: "\e021";
+}
+.glyphicon-file:before {
+ content: "\e022";
+}
+.glyphicon-time:before {
+ content: "\e023";
+}
+.glyphicon-road:before {
+ content: "\e024";
+}
+.glyphicon-download-alt:before {
+ content: "\e025";
+}
+.glyphicon-download:before {
+ content: "\e026";
+}
+.glyphicon-upload:before {
+ content: "\e027";
+}
+.glyphicon-inbox:before {
+ content: "\e028";
+}
+.glyphicon-play-circle:before {
+ content: "\e029";
+}
+.glyphicon-repeat:before {
+ content: "\e030";
+}
+.glyphicon-refresh:before {
+ content: "\e031";
+}
+.glyphicon-list-alt:before {
+ content: "\e032";
+}
+.glyphicon-lock:before {
+ content: "\e033";
+}
+.glyphicon-flag:before {
+ content: "\e034";
+}
+.glyphicon-headphones:before {
+ content: "\e035";
+}
+.glyphicon-volume-off:before {
+ content: "\e036";
+}
+.glyphicon-volume-down:before {
+ content: "\e037";
+}
+.glyphicon-volume-up:before {
+ content: "\e038";
+}
+.glyphicon-qrcode:before {
+ content: "\e039";
+}
+.glyphicon-barcode:before {
+ content: "\e040";
+}
+.glyphicon-tag:before {
+ content: "\e041";
+}
+.glyphicon-tags:before {
+ content: "\e042";
+}
+.glyphicon-book:before {
+ content: "\e043";
+}
+.glyphicon-bookmark:before {
+ content: "\e044";
+}
+.glyphicon-print:before {
+ content: "\e045";
+}
+.glyphicon-camera:before {
+ content: "\e046";
+}
+.glyphicon-font:before {
+ content: "\e047";
+}
+.glyphicon-bold:before {
+ content: "\e048";
+}
+.glyphicon-italic:before {
+ content: "\e049";
+}
+.glyphicon-text-height:before {
+ content: "\e050";
+}
+.glyphicon-text-width:before {
+ content: "\e051";
+}
+.glyphicon-align-left:before {
+ content: "\e052";
+}
+.glyphicon-align-center:before {
+ content: "\e053";
+}
+.glyphicon-align-right:before {
+ content: "\e054";
+}
+.glyphicon-align-justify:before {
+ content: "\e055";
+}
+.glyphicon-list:before {
+ content: "\e056";
+}
+.glyphicon-indent-left:before {
+ content: "\e057";
+}
+.glyphicon-indent-right:before {
+ content: "\e058";
+}
+.glyphicon-facetime-video:before {
+ content: "\e059";
+}
+.glyphicon-picture:before {
+ content: "\e060";
+}
+.glyphicon-map-marker:before {
+ content: "\e062";
+}
+.glyphicon-adjust:before {
+ content: "\e063";
+}
+.glyphicon-tint:before {
+ content: "\e064";
+}
+.glyphicon-edit:before {
+ content: "\e065";
+}
+.glyphicon-share:before {
+ content: "\e066";
+}
+.glyphicon-check:before {
+ content: "\e067";
+}
+.glyphicon-move:before {
+ content: "\e068";
+}
+.glyphicon-step-backward:before {
+ content: "\e069";
+}
+.glyphicon-fast-backward:before {
+ content: "\e070";
+}
+.glyphicon-backward:before {
+ content: "\e071";
+}
+.glyphicon-play:before {
+ content: "\e072";
+}
+.glyphicon-pause:before {
+ content: "\e073";
+}
+.glyphicon-stop:before {
+ content: "\e074";
+}
+.glyphicon-forward:before {
+ content: "\e075";
+}
+.glyphicon-fast-forward:before {
+ content: "\e076";
+}
+.glyphicon-step-forward:before {
+ content: "\e077";
+}
+.glyphicon-eject:before {
+ content: "\e078";
+}
+.glyphicon-chevron-left:before {
+ content: "\e079";
+}
+.glyphicon-chevron-right:before {
+ content: "\e080";
+}
+.glyphicon-plus-sign:before {
+ content: "\e081";
+}
+.glyphicon-minus-sign:before {
+ content: "\e082";
+}
+.glyphicon-remove-sign:before {
+ content: "\e083";
+}
+.glyphicon-ok-sign:before {
+ content: "\e084";
+}
+.glyphicon-question-sign:before {
+ content: "\e085";
+}
+.glyphicon-info-sign:before {
+ content: "\e086";
+}
+.glyphicon-screenshot:before {
+ content: "\e087";
+}
+.glyphicon-remove-circle:before {
+ content: "\e088";
+}
+.glyphicon-ok-circle:before {
+ content: "\e089";
+}
+.glyphicon-ban-circle:before {
+ content: "\e090";
+}
+.glyphicon-arrow-left:before {
+ content: "\e091";
+}
+.glyphicon-arrow-right:before {
+ content: "\e092";
+}
+.glyphicon-arrow-up:before {
+ content: "\e093";
+}
+.glyphicon-arrow-down:before {
+ content: "\e094";
+}
+.glyphicon-share-alt:before {
+ content: "\e095";
+}
+.glyphicon-resize-full:before {
+ content: "\e096";
+}
+.glyphicon-resize-small:before {
+ content: "\e097";
+}
+.glyphicon-exclamation-sign:before {
+ content: "\e101";
+}
+.glyphicon-gift:before {
+ content: "\e102";
+}
+.glyphicon-leaf:before {
+ content: "\e103";
+}
+.glyphicon-fire:before {
+ content: "\e104";
+}
+.glyphicon-eye-open:before {
+ content: "\e105";
+}
+.glyphicon-eye-close:before {
+ content: "\e106";
+}
+.glyphicon-warning-sign:before {
+ content: "\e107";
+}
+.glyphicon-plane:before {
+ content: "\e108";
+}
+.glyphicon-calendar:before {
+ content: "\e109";
+}
+.glyphicon-random:before {
+ content: "\e110";
+}
+.glyphicon-comment:before {
+ content: "\e111";
+}
+.glyphicon-magnet:before {
+ content: "\e112";
+}
+.glyphicon-chevron-up:before {
+ content: "\e113";
+}
+.glyphicon-chevron-down:before {
+ content: "\e114";
+}
+.glyphicon-retweet:before {
+ content: "\e115";
+}
+.glyphicon-shopping-cart:before {
+ content: "\e116";
+}
+.glyphicon-folder-close:before {
+ content: "\e117";
+}
+.glyphicon-folder-open:before {
+ content: "\e118";
+}
+.glyphicon-resize-vertical:before {
+ content: "\e119";
+}
+.glyphicon-resize-horizontal:before {
+ content: "\e120";
+}
+.glyphicon-hdd:before {
+ content: "\e121";
+}
+.glyphicon-bullhorn:before {
+ content: "\e122";
+}
+.glyphicon-bell:before {
+ content: "\e123";
+}
+.glyphicon-certificate:before {
+ content: "\e124";
+}
+.glyphicon-thumbs-up:before {
+ content: "\e125";
+}
+.glyphicon-thumbs-down:before {
+ content: "\e126";
+}
+.glyphicon-hand-right:before {
+ content: "\e127";
+}
+.glyphicon-hand-left:before {
+ content: "\e128";
+}
+.glyphicon-hand-up:before {
+ content: "\e129";
+}
+.glyphicon-hand-down:before {
+ content: "\e130";
+}
+.glyphicon-circle-arrow-right:before {
+ content: "\e131";
+}
+.glyphicon-circle-arrow-left:before {
+ content: "\e132";
+}
+.glyphicon-circle-arrow-up:before {
+ content: "\e133";
+}
+.glyphicon-circle-arrow-down:before {
+ content: "\e134";
+}
+.glyphicon-globe:before {
+ content: "\e135";
+}
+.glyphicon-wrench:before {
+ content: "\e136";
+}
+.glyphicon-tasks:before {
+ content: "\e137";
+}
+.glyphicon-filter:before {
+ content: "\e138";
+}
+.glyphicon-briefcase:before {
+ content: "\e139";
+}
+.glyphicon-fullscreen:before {
+ content: "\e140";
+}
+.glyphicon-dashboard:before {
+ content: "\e141";
+}
+.glyphicon-paperclip:before {
+ content: "\e142";
+}
+.glyphicon-heart-empty:before {
+ content: "\e143";
+}
+.glyphicon-link:before {
+ content: "\e144";
+}
+.glyphicon-phone:before {
+ content: "\e145";
+}
+.glyphicon-pushpin:before {
+ content: "\e146";
+}
+.glyphicon-usd:before {
+ content: "\e148";
+}
+.glyphicon-gbp:before {
+ content: "\e149";
+}
+.glyphicon-sort:before {
+ content: "\e150";
+}
+.glyphicon-sort-by-alphabet:before {
+ content: "\e151";
+}
+.glyphicon-sort-by-alphabet-alt:before {
+ content: "\e152";
+}
+.glyphicon-sort-by-order:before {
+ content: "\e153";
+}
+.glyphicon-sort-by-order-alt:before {
+ content: "\e154";
+}
+.glyphicon-sort-by-attributes:before {
+ content: "\e155";
+}
+.glyphicon-sort-by-attributes-alt:before {
+ content: "\e156";
+}
+.glyphicon-unchecked:before {
+ content: "\e157";
+}
+.glyphicon-expand:before {
+ content: "\e158";
+}
+.glyphicon-collapse-down:before {
+ content: "\e159";
+}
+.glyphicon-collapse-up:before {
+ content: "\e160";
+}
+.glyphicon-log-in:before {
+ content: "\e161";
+}
+.glyphicon-flash:before {
+ content: "\e162";
+}
+.glyphicon-log-out:before {
+ content: "\e163";
+}
+.glyphicon-new-window:before {
+ content: "\e164";
+}
+.glyphicon-record:before {
+ content: "\e165";
+}
+.glyphicon-save:before {
+ content: "\e166";
+}
+.glyphicon-open:before {
+ content: "\e167";
+}
+.glyphicon-saved:before {
+ content: "\e168";
+}
+.glyphicon-import:before {
+ content: "\e169";
+}
+.glyphicon-export:before {
+ content: "\e170";
+}
+.glyphicon-send:before {
+ content: "\e171";
+}
+.glyphicon-floppy-disk:before {
+ content: "\e172";
+}
+.glyphicon-floppy-saved:before {
+ content: "\e173";
+}
+.glyphicon-floppy-remove:before {
+ content: "\e174";
+}
+.glyphicon-floppy-save:before {
+ content: "\e175";
+}
+.glyphicon-floppy-open:before {
+ content: "\e176";
+}
+.glyphicon-credit-card:before {
+ content: "\e177";
+}
+.glyphicon-transfer:before {
+ content: "\e178";
+}
+.glyphicon-cutlery:before {
+ content: "\e179";
+}
+.glyphicon-header:before {
+ content: "\e180";
+}
+.glyphicon-compressed:before {
+ content: "\e181";
+}
+.glyphicon-earphone:before {
+ content: "\e182";
+}
+.glyphicon-phone-alt:before {
+ content: "\e183";
+}
+.glyphicon-tower:before {
+ content: "\e184";
+}
+.glyphicon-stats:before {
+ content: "\e185";
+}
+.glyphicon-sd-video:before {
+ content: "\e186";
+}
+.glyphicon-hd-video:before {
+ content: "\e187";
+}
+.glyphicon-subtitles:before {
+ content: "\e188";
+}
+.glyphicon-sound-stereo:before {
+ content: "\e189";
+}
+.glyphicon-sound-dolby:before {
+ content: "\e190";
+}
+.glyphicon-sound-5-1:before {
+ content: "\e191";
+}
+.glyphicon-sound-6-1:before {
+ content: "\e192";
+}
+.glyphicon-sound-7-1:before {
+ content: "\e193";
+}
+.glyphicon-copyright-mark:before {
+ content: "\e194";
+}
+.glyphicon-registration-mark:before {
+ content: "\e195";
+}
+.glyphicon-cloud-download:before {
+ content: "\e197";
+}
+.glyphicon-cloud-upload:before {
+ content: "\e198";
+}
+.glyphicon-tree-conifer:before {
+ content: "\e199";
+}
+.glyphicon-tree-deciduous:before {
+ content: "\e200";
+}
+.glyphicon-cd:before {
+ content: "\e201";
+}
+.glyphicon-save-file:before {
+ content: "\e202";
+}
+.glyphicon-open-file:before {
+ content: "\e203";
+}
+.glyphicon-level-up:before {
+ content: "\e204";
+}
+.glyphicon-copy:before {
+ content: "\e205";
+}
+.glyphicon-paste:before {
+ content: "\e206";
+}
+.glyphicon-alert:before {
+ content: "\e209";
+}
+.glyphicon-equalizer:before {
+ content: "\e210";
+}
+.glyphicon-king:before {
+ content: "\e211";
+}
+.glyphicon-queen:before {
+ content: "\e212";
+}
+.glyphicon-pawn:before {
+ content: "\e213";
+}
+.glyphicon-bishop:before {
+ content: "\e214";
+}
+.glyphicon-knight:before {
+ content: "\e215";
+}
+.glyphicon-baby-formula:before {
+ content: "\e216";
+}
+.glyphicon-tent:before {
+ content: "\26fa";
+}
+.glyphicon-blackboard:before {
+ content: "\e218";
+}
+.glyphicon-bed:before {
+ content: "\e219";
+}
+.glyphicon-apple:before {
+ content: "\f8ff";
+}
+.glyphicon-erase:before {
+ content: "\e221";
+}
+.glyphicon-hourglass:before {
+ content: "\231b";
+}
+.glyphicon-lamp:before {
+ content: "\e223";
+}
+.glyphicon-duplicate:before {
+ content: "\e224";
+}
+.glyphicon-piggy-bank:before {
+ content: "\e225";
+}
+.glyphicon-scissors:before {
+ content: "\e226";
+}
+.glyphicon-bitcoin:before {
+ content: "\e227";
+}
+.glyphicon-btc:before {
+ content: "\e227";
+}
+.glyphicon-xbt:before {
+ content: "\e227";
+}
+.glyphicon-yen:before {
+ content: "\00a5";
+}
+.glyphicon-jpy:before {
+ content: "\00a5";
+}
+.glyphicon-ruble:before {
+ content: "\20bd";
+}
+.glyphicon-rub:before {
+ content: "\20bd";
+}
+.glyphicon-scale:before {
+ content: "\e230";
+}
+.glyphicon-ice-lolly:before {
+ content: "\e231";
+}
+.glyphicon-ice-lolly-tasted:before {
+ content: "\e232";
+}
+.glyphicon-education:before {
+ content: "\e233";
+}
+.glyphicon-option-horizontal:before {
+ content: "\e234";
+}
+.glyphicon-option-vertical:before {
+ content: "\e235";
+}
+.glyphicon-menu-hamburger:before {
+ content: "\e236";
+}
+.glyphicon-modal-window:before {
+ content: "\e237";
+}
+.glyphicon-oil:before {
+ content: "\e238";
+}
+.glyphicon-grain:before {
+ content: "\e239";
+}
+.glyphicon-sunglasses:before {
+ content: "\e240";
+}
+.glyphicon-text-size:before {
+ content: "\e241";
+}
+.glyphicon-text-color:before {
+ content: "\e242";
+}
+.glyphicon-text-background:before {
+ content: "\e243";
+}
+.glyphicon-object-align-top:before {
+ content: "\e244";
+}
+.glyphicon-object-align-bottom:before {
+ content: "\e245";
+}
+.glyphicon-object-align-horizontal:before {
+ content: "\e246";
+}
+.glyphicon-object-align-left:before {
+ content: "\e247";
+}
+.glyphicon-object-align-vertical:before {
+ content: "\e248";
+}
+.glyphicon-object-align-right:before {
+ content: "\e249";
+}
+.glyphicon-triangle-right:before {
+ content: "\e250";
+}
+.glyphicon-triangle-left:before {
+ content: "\e251";
+}
+.glyphicon-triangle-bottom:before {
+ content: "\e252";
+}
+.glyphicon-triangle-top:before {
+ content: "\e253";
+}
+.glyphicon-console:before {
+ content: "\e254";
+}
+.glyphicon-superscript:before {
+ content: "\e255";
+}
+.glyphicon-subscript:before {
+ content: "\e256";
+}
+.glyphicon-menu-left:before {
+ content: "\e257";
+}
+.glyphicon-menu-right:before {
+ content: "\e258";
+}
+.glyphicon-menu-down:before {
+ content: "\e259";
+}
+.glyphicon-menu-up:before {
+ content: "\e260";
+}
+* {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+*:before,
+*:after {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+html {
+ font-size: 10px;
+
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+body {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #333;
+ background-color: #fff;
+}
+input,
+button,
+select,
+textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+a {
+ color: #337ab7;
+ text-decoration: none;
+}
+a:hover,
+a:focus {
+ color: #23527c;
+ text-decoration: underline;
+}
+a:focus {
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+figure {
+ margin: 0;
+}
+img {
+ vertical-align: middle;
+}
+.img-responsive,
+.thumbnail > img,
+.thumbnail a > img,
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+ display: block;
+ max-width: 100%;
+ height: auto;
+}
+.img-rounded {
+ border-radius: 6px;
+}
+.img-thumbnail {
+ display: inline-block;
+ max-width: 100%;
+ height: auto;
+ padding: 4px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: all .2s ease-in-out;
+ -o-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out;
+}
+.img-circle {
+ border-radius: 50%;
+}
+hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eee;
+}
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0;
+}
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto;
+}
+[role="button"] {
+ cursor: pointer;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6 {
+ font-family: inherit;
+ font-weight: 500;
+ line-height: 1.1;
+ color: inherit;
+}
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small,
+.h1 small,
+.h2 small,
+.h3 small,
+.h4 small,
+.h5 small,
+.h6 small,
+h1 .small,
+h2 .small,
+h3 .small,
+h4 .small,
+h5 .small,
+h6 .small,
+.h1 .small,
+.h2 .small,
+.h3 .small,
+.h4 .small,
+.h5 .small,
+.h6 .small {
+ font-weight: normal;
+ line-height: 1;
+ color: #777;
+}
+h1,
+.h1,
+h2,
+.h2,
+h3,
+.h3 {
+ margin-top: 20px;
+ margin-bottom: 10px;
+}
+h1 small,
+.h1 small,
+h2 small,
+.h2 small,
+h3 small,
+.h3 small,
+h1 .small,
+.h1 .small,
+h2 .small,
+.h2 .small,
+h3 .small,
+.h3 .small {
+ font-size: 65%;
+}
+h4,
+.h4,
+h5,
+.h5,
+h6,
+.h6 {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+h4 small,
+.h4 small,
+h5 small,
+.h5 small,
+h6 small,
+.h6 small,
+h4 .small,
+.h4 .small,
+h5 .small,
+.h5 .small,
+h6 .small,
+.h6 .small {
+ font-size: 75%;
+}
+h1,
+.h1 {
+ font-size: 36px;
+}
+h2,
+.h2 {
+ font-size: 30px;
+}
+h3,
+.h3 {
+ font-size: 24px;
+}
+h4,
+.h4 {
+ font-size: 18px;
+}
+h5,
+.h5 {
+ font-size: 14px;
+}
+h6,
+.h6 {
+ font-size: 12px;
+}
+p {
+ margin: 0 0 10px;
+}
+.lead {
+ margin-bottom: 20px;
+ font-size: 16px;
+ font-weight: 300;
+ line-height: 1.4;
+}
+@media (min-width: 768px) {
+ .lead {
+ font-size: 21px;
+ }
+}
+small,
+.small {
+ font-size: 85%;
+}
+mark,
+.mark {
+ padding: .2em;
+ background-color: #fcf8e3;
+}
+.text-left {
+ text-align: left;
+}
+.text-right {
+ text-align: right;
+}
+.text-center {
+ text-align: center;
+}
+.text-justify {
+ text-align: justify;
+}
+.text-nowrap {
+ white-space: nowrap;
+}
+.text-lowercase {
+ text-transform: lowercase;
+}
+.text-uppercase {
+ text-transform: uppercase;
+}
+.text-capitalize {
+ text-transform: capitalize;
+}
+.text-muted {
+ color: #777;
+}
+.text-primary {
+ color: #337ab7;
+}
+a.text-primary:hover,
+a.text-primary:focus {
+ color: #286090;
+}
+.text-success {
+ color: #3c763d;
+}
+a.text-success:hover,
+a.text-success:focus {
+ color: #2b542c;
+}
+.text-info {
+ color: #31708f;
+}
+a.text-info:hover,
+a.text-info:focus {
+ color: #245269;
+}
+.text-warning {
+ color: #8a6d3b;
+}
+a.text-warning:hover,
+a.text-warning:focus {
+ color: #66512c;
+}
+.text-danger {
+ color: #a94442;
+}
+a.text-danger:hover,
+a.text-danger:focus {
+ color: #843534;
+}
+.bg-primary {
+ color: #fff;
+ background-color: #337ab7;
+}
+a.bg-primary:hover,
+a.bg-primary:focus {
+ background-color: #286090;
+}
+.bg-success {
+ background-color: #dff0d8;
+}
+a.bg-success:hover,
+a.bg-success:focus {
+ background-color: #c1e2b3;
+}
+.bg-info {
+ background-color: #d9edf7;
+}
+a.bg-info:hover,
+a.bg-info:focus {
+ background-color: #afd9ee;
+}
+.bg-warning {
+ background-color: #fcf8e3;
+}
+a.bg-warning:hover,
+a.bg-warning:focus {
+ background-color: #f7ecb5;
+}
+.bg-danger {
+ background-color: #f2dede;
+}
+a.bg-danger:hover,
+a.bg-danger:focus {
+ background-color: #e4b9b9;
+}
+.page-header {
+ padding-bottom: 9px;
+ margin: 40px 0 20px;
+ border-bottom: 1px solid #eee;
+}
+ul,
+ol {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+ul ul,
+ol ul,
+ul ol,
+ol ol {
+ margin-bottom: 0;
+}
+.list-unstyled {
+ padding-left: 0;
+ list-style: none;
+}
+.list-inline {
+ padding-left: 0;
+ margin-left: -5px;
+ list-style: none;
+}
+.list-inline > li {
+ display: inline-block;
+ padding-right: 5px;
+ padding-left: 5px;
+}
+dl {
+ margin-top: 0;
+ margin-bottom: 20px;
+}
+dt,
+dd {
+ line-height: 1.42857143;
+}
+dt {
+ font-weight: bold;
+}
+dd {
+ margin-left: 0;
+}
+@media (min-width: 768px) {
+ .dl-horizontal dt {
+ float: left;
+ width: 160px;
+ overflow: hidden;
+ clear: left;
+ text-align: right;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ .dl-horizontal dd {
+ margin-left: 180px;
+ }
+}
+abbr[title],
+abbr[data-original-title] {
+ cursor: help;
+ border-bottom: 1px dotted #777;
+}
+.initialism {
+ font-size: 90%;
+ text-transform: uppercase;
+}
+blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ font-size: 17.5px;
+ border-left: 5px solid #eee;
+}
+blockquote p:last-child,
+blockquote ul:last-child,
+blockquote ol:last-child {
+ margin-bottom: 0;
+}
+blockquote footer,
+blockquote small,
+blockquote .small {
+ display: block;
+ font-size: 80%;
+ line-height: 1.42857143;
+ color: #777;
+}
+blockquote footer:before,
+blockquote small:before,
+blockquote .small:before {
+ content: '\2014 \00A0';
+}
+.blockquote-reverse,
+blockquote.pull-right {
+ padding-right: 15px;
+ padding-left: 0;
+ text-align: right;
+ border-right: 5px solid #eee;
+ border-left: 0;
+}
+.blockquote-reverse footer:before,
+blockquote.pull-right footer:before,
+.blockquote-reverse small:before,
+blockquote.pull-right small:before,
+.blockquote-reverse .small:before,
+blockquote.pull-right .small:before {
+ content: '';
+}
+.blockquote-reverse footer:after,
+blockquote.pull-right footer:after,
+.blockquote-reverse small:after,
+blockquote.pull-right small:after,
+.blockquote-reverse .small:after,
+blockquote.pull-right .small:after {
+ content: '\00A0 \2014';
+}
+address {
+ margin-bottom: 20px;
+ font-style: normal;
+ line-height: 1.42857143;
+}
+code,
+kbd,
+pre,
+samp {
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+code {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #c7254e;
+ background-color: #f9f2f4;
+ border-radius: 4px;
+}
+kbd {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #fff;
+ background-color: #333;
+ border-radius: 3px;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+}
+kbd kbd {
+ padding: 0;
+ font-size: 100%;
+ font-weight: bold;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+pre {
+ display: block;
+ padding: 9.5px;
+ margin: 0 0 10px;
+ font-size: 13px;
+ line-height: 1.42857143;
+ color: #333;
+ word-break: break-all;
+ word-wrap: break-word;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+pre code {
+ padding: 0;
+ font-size: inherit;
+ color: inherit;
+ white-space: pre-wrap;
+ background-color: transparent;
+ border-radius: 0;
+}
+.pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll;
+}
+.container {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+}
+@media (min-width: 768px) {
+ .container {
+ width: 750px;
+ }
+}
+@media (min-width: 992px) {
+ .container {
+ width: 970px;
+ }
+}
+@media (min-width: 1200px) {
+ .container {
+ width: 1170px;
+ }
+}
+.container-fluid {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+}
+.row {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
+ position: relative;
+ min-height: 1px;
+ padding-right: 15px;
+ padding-left: 15px;
+}
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
+ float: left;
+}
+.col-xs-12 {
+ width: 100%;
+}
+.col-xs-11 {
+ width: 91.66666667%;
+}
+.col-xs-10 {
+ width: 83.33333333%;
+}
+.col-xs-9 {
+ width: 75%;
+}
+.col-xs-8 {
+ width: 66.66666667%;
+}
+.col-xs-7 {
+ width: 58.33333333%;
+}
+.col-xs-6 {
+ width: 50%;
+}
+.col-xs-5 {
+ width: 41.66666667%;
+}
+.col-xs-4 {
+ width: 33.33333333%;
+}
+.col-xs-3 {
+ width: 25%;
+}
+.col-xs-2 {
+ width: 16.66666667%;
+}
+.col-xs-1 {
+ width: 8.33333333%;
+}
+.col-xs-pull-12 {
+ right: 100%;
+}
+.col-xs-pull-11 {
+ right: 91.66666667%;
+}
+.col-xs-pull-10 {
+ right: 83.33333333%;
+}
+.col-xs-pull-9 {
+ right: 75%;
+}
+.col-xs-pull-8 {
+ right: 66.66666667%;
+}
+.col-xs-pull-7 {
+ right: 58.33333333%;
+}
+.col-xs-pull-6 {
+ right: 50%;
+}
+.col-xs-pull-5 {
+ right: 41.66666667%;
+}
+.col-xs-pull-4 {
+ right: 33.33333333%;
+}
+.col-xs-pull-3 {
+ right: 25%;
+}
+.col-xs-pull-2 {
+ right: 16.66666667%;
+}
+.col-xs-pull-1 {
+ right: 8.33333333%;
+}
+.col-xs-pull-0 {
+ right: auto;
+}
+.col-xs-push-12 {
+ left: 100%;
+}
+.col-xs-push-11 {
+ left: 91.66666667%;
+}
+.col-xs-push-10 {
+ left: 83.33333333%;
+}
+.col-xs-push-9 {
+ left: 75%;
+}
+.col-xs-push-8 {
+ left: 66.66666667%;
+}
+.col-xs-push-7 {
+ left: 58.33333333%;
+}
+.col-xs-push-6 {
+ left: 50%;
+}
+.col-xs-push-5 {
+ left: 41.66666667%;
+}
+.col-xs-push-4 {
+ left: 33.33333333%;
+}
+.col-xs-push-3 {
+ left: 25%;
+}
+.col-xs-push-2 {
+ left: 16.66666667%;
+}
+.col-xs-push-1 {
+ left: 8.33333333%;
+}
+.col-xs-push-0 {
+ left: auto;
+}
+.col-xs-offset-12 {
+ margin-left: 100%;
+}
+.col-xs-offset-11 {
+ margin-left: 91.66666667%;
+}
+.col-xs-offset-10 {
+ margin-left: 83.33333333%;
+}
+.col-xs-offset-9 {
+ margin-left: 75%;
+}
+.col-xs-offset-8 {
+ margin-left: 66.66666667%;
+}
+.col-xs-offset-7 {
+ margin-left: 58.33333333%;
+}
+.col-xs-offset-6 {
+ margin-left: 50%;
+}
+.col-xs-offset-5 {
+ margin-left: 41.66666667%;
+}
+.col-xs-offset-4 {
+ margin-left: 33.33333333%;
+}
+.col-xs-offset-3 {
+ margin-left: 25%;
+}
+.col-xs-offset-2 {
+ margin-left: 16.66666667%;
+}
+.col-xs-offset-1 {
+ margin-left: 8.33333333%;
+}
+.col-xs-offset-0 {
+ margin-left: 0;
+}
+@media (min-width: 768px) {
+ .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
+ float: left;
+ }
+ .col-sm-12 {
+ width: 100%;
+ }
+ .col-sm-11 {
+ width: 91.66666667%;
+ }
+ .col-sm-10 {
+ width: 83.33333333%;
+ }
+ .col-sm-9 {
+ width: 75%;
+ }
+ .col-sm-8 {
+ width: 66.66666667%;
+ }
+ .col-sm-7 {
+ width: 58.33333333%;
+ }
+ .col-sm-6 {
+ width: 50%;
+ }
+ .col-sm-5 {
+ width: 41.66666667%;
+ }
+ .col-sm-4 {
+ width: 33.33333333%;
+ }
+ .col-sm-3 {
+ width: 25%;
+ }
+ .col-sm-2 {
+ width: 16.66666667%;
+ }
+ .col-sm-1 {
+ width: 8.33333333%;
+ }
+ .col-sm-pull-12 {
+ right: 100%;
+ }
+ .col-sm-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-sm-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-sm-pull-9 {
+ right: 75%;
+ }
+ .col-sm-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-sm-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-sm-pull-6 {
+ right: 50%;
+ }
+ .col-sm-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-sm-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-sm-pull-3 {
+ right: 25%;
+ }
+ .col-sm-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-sm-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-sm-pull-0 {
+ right: auto;
+ }
+ .col-sm-push-12 {
+ left: 100%;
+ }
+ .col-sm-push-11 {
+ left: 91.66666667%;
+ }
+ .col-sm-push-10 {
+ left: 83.33333333%;
+ }
+ .col-sm-push-9 {
+ left: 75%;
+ }
+ .col-sm-push-8 {
+ left: 66.66666667%;
+ }
+ .col-sm-push-7 {
+ left: 58.33333333%;
+ }
+ .col-sm-push-6 {
+ left: 50%;
+ }
+ .col-sm-push-5 {
+ left: 41.66666667%;
+ }
+ .col-sm-push-4 {
+ left: 33.33333333%;
+ }
+ .col-sm-push-3 {
+ left: 25%;
+ }
+ .col-sm-push-2 {
+ left: 16.66666667%;
+ }
+ .col-sm-push-1 {
+ left: 8.33333333%;
+ }
+ .col-sm-push-0 {
+ left: auto;
+ }
+ .col-sm-offset-12 {
+ margin-left: 100%;
+ }
+ .col-sm-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-sm-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-sm-offset-9 {
+ margin-left: 75%;
+ }
+ .col-sm-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-sm-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-sm-offset-6 {
+ margin-left: 50%;
+ }
+ .col-sm-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-sm-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-sm-offset-3 {
+ margin-left: 25%;
+ }
+ .col-sm-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-sm-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-sm-offset-0 {
+ margin-left: 0;
+ }
+}
+@media (min-width: 992px) {
+ .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
+ float: left;
+ }
+ .col-md-12 {
+ width: 100%;
+ }
+ .col-md-11 {
+ width: 91.66666667%;
+ }
+ .col-md-10 {
+ width: 83.33333333%;
+ }
+ .col-md-9 {
+ width: 75%;
+ }
+ .col-md-8 {
+ width: 66.66666667%;
+ }
+ .col-md-7 {
+ width: 58.33333333%;
+ }
+ .col-md-6 {
+ width: 50%;
+ }
+ .col-md-5 {
+ width: 41.66666667%;
+ }
+ .col-md-4 {
+ width: 33.33333333%;
+ }
+ .col-md-3 {
+ width: 25%;
+ }
+ .col-md-2 {
+ width: 16.66666667%;
+ }
+ .col-md-1 {
+ width: 8.33333333%;
+ }
+ .col-md-pull-12 {
+ right: 100%;
+ }
+ .col-md-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-md-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-md-pull-9 {
+ right: 75%;
+ }
+ .col-md-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-md-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-md-pull-6 {
+ right: 50%;
+ }
+ .col-md-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-md-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-md-pull-3 {
+ right: 25%;
+ }
+ .col-md-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-md-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-md-pull-0 {
+ right: auto;
+ }
+ .col-md-push-12 {
+ left: 100%;
+ }
+ .col-md-push-11 {
+ left: 91.66666667%;
+ }
+ .col-md-push-10 {
+ left: 83.33333333%;
+ }
+ .col-md-push-9 {
+ left: 75%;
+ }
+ .col-md-push-8 {
+ left: 66.66666667%;
+ }
+ .col-md-push-7 {
+ left: 58.33333333%;
+ }
+ .col-md-push-6 {
+ left: 50%;
+ }
+ .col-md-push-5 {
+ left: 41.66666667%;
+ }
+ .col-md-push-4 {
+ left: 33.33333333%;
+ }
+ .col-md-push-3 {
+ left: 25%;
+ }
+ .col-md-push-2 {
+ left: 16.66666667%;
+ }
+ .col-md-push-1 {
+ left: 8.33333333%;
+ }
+ .col-md-push-0 {
+ left: auto;
+ }
+ .col-md-offset-12 {
+ margin-left: 100%;
+ }
+ .col-md-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-md-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-md-offset-9 {
+ margin-left: 75%;
+ }
+ .col-md-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-md-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-md-offset-6 {
+ margin-left: 50%;
+ }
+ .col-md-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-md-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-md-offset-3 {
+ margin-left: 25%;
+ }
+ .col-md-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-md-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-md-offset-0 {
+ margin-left: 0;
+ }
+}
+@media (min-width: 1200px) {
+ .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+ float: left;
+ }
+ .col-lg-12 {
+ width: 100%;
+ }
+ .col-lg-11 {
+ width: 91.66666667%;
+ }
+ .col-lg-10 {
+ width: 83.33333333%;
+ }
+ .col-lg-9 {
+ width: 75%;
+ }
+ .col-lg-8 {
+ width: 66.66666667%;
+ }
+ .col-lg-7 {
+ width: 58.33333333%;
+ }
+ .col-lg-6 {
+ width: 50%;
+ }
+ .col-lg-5 {
+ width: 41.66666667%;
+ }
+ .col-lg-4 {
+ width: 33.33333333%;
+ }
+ .col-lg-3 {
+ width: 25%;
+ }
+ .col-lg-2 {
+ width: 16.66666667%;
+ }
+ .col-lg-1 {
+ width: 8.33333333%;
+ }
+ .col-lg-pull-12 {
+ right: 100%;
+ }
+ .col-lg-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-lg-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-lg-pull-9 {
+ right: 75%;
+ }
+ .col-lg-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-lg-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-lg-pull-6 {
+ right: 50%;
+ }
+ .col-lg-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-lg-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-lg-pull-3 {
+ right: 25%;
+ }
+ .col-lg-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-lg-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-lg-pull-0 {
+ right: auto;
+ }
+ .col-lg-push-12 {
+ left: 100%;
+ }
+ .col-lg-push-11 {
+ left: 91.66666667%;
+ }
+ .col-lg-push-10 {
+ left: 83.33333333%;
+ }
+ .col-lg-push-9 {
+ left: 75%;
+ }
+ .col-lg-push-8 {
+ left: 66.66666667%;
+ }
+ .col-lg-push-7 {
+ left: 58.33333333%;
+ }
+ .col-lg-push-6 {
+ left: 50%;
+ }
+ .col-lg-push-5 {
+ left: 41.66666667%;
+ }
+ .col-lg-push-4 {
+ left: 33.33333333%;
+ }
+ .col-lg-push-3 {
+ left: 25%;
+ }
+ .col-lg-push-2 {
+ left: 16.66666667%;
+ }
+ .col-lg-push-1 {
+ left: 8.33333333%;
+ }
+ .col-lg-push-0 {
+ left: auto;
+ }
+ .col-lg-offset-12 {
+ margin-left: 100%;
+ }
+ .col-lg-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-lg-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-lg-offset-9 {
+ margin-left: 75%;
+ }
+ .col-lg-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-lg-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-lg-offset-6 {
+ margin-left: 50%;
+ }
+ .col-lg-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-lg-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-lg-offset-3 {
+ margin-left: 25%;
+ }
+ .col-lg-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-lg-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-lg-offset-0 {
+ margin-left: 0;
+ }
+}
+table {
+ background-color: transparent;
+}
+caption {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ color: #777;
+ text-align: left;
+}
+th {
+ text-align: left;
+}
+.table {
+ width: 100%;
+ max-width: 100%;
+ margin-bottom: 20px;
+}
+.table > thead > tr > th,
+.table > tbody > tr > th,
+.table > tfoot > tr > th,
+.table > thead > tr > td,
+.table > tbody > tr > td,
+.table > tfoot > tr > td {
+ padding: 8px;
+ line-height: 1.42857143;
+ vertical-align: top;
+ border-top: 1px solid #ddd;
+}
+.table > thead > tr > th {
+ vertical-align: bottom;
+ border-bottom: 2px solid #ddd;
+}
+.table > caption + thead > tr:first-child > th,
+.table > colgroup + thead > tr:first-child > th,
+.table > thead:first-child > tr:first-child > th,
+.table > caption + thead > tr:first-child > td,
+.table > colgroup + thead > tr:first-child > td,
+.table > thead:first-child > tr:first-child > td {
+ border-top: 0;
+}
+.table > tbody + tbody {
+ border-top: 2px solid #ddd;
+}
+.table .table {
+ background-color: #fff;
+}
+.table-condensed > thead > tr > th,
+.table-condensed > tbody > tr > th,
+.table-condensed > tfoot > tr > th,
+.table-condensed > thead > tr > td,
+.table-condensed > tbody > tr > td,
+.table-condensed > tfoot > tr > td {
+ padding: 5px;
+}
+.table-bordered {
+ border: 1px solid #ddd;
+}
+.table-bordered > thead > tr > th,
+.table-bordered > tbody > tr > th,
+.table-bordered > tfoot > tr > th,
+.table-bordered > thead > tr > td,
+.table-bordered > tbody > tr > td,
+.table-bordered > tfoot > tr > td {
+ border: 1px solid #ddd;
+}
+.table-bordered > thead > tr > th,
+.table-bordered > thead > tr > td {
+ border-bottom-width: 2px;
+}
+.table-striped > tbody > tr:nth-of-type(odd) {
+ background-color: #f9f9f9;
+}
+.table-hover > tbody > tr:hover {
+ background-color: #f5f5f5;
+}
+table col[class*="col-"] {
+ position: static;
+ display: table-column;
+ float: none;
+}
+table td[class*="col-"],
+table th[class*="col-"] {
+ position: static;
+ display: table-cell;
+ float: none;
+}
+.table > thead > tr > td.active,
+.table > tbody > tr > td.active,
+.table > tfoot > tr > td.active,
+.table > thead > tr > th.active,
+.table > tbody > tr > th.active,
+.table > tfoot > tr > th.active,
+.table > thead > tr.active > td,
+.table > tbody > tr.active > td,
+.table > tfoot > tr.active > td,
+.table > thead > tr.active > th,
+.table > tbody > tr.active > th,
+.table > tfoot > tr.active > th {
+ background-color: #f5f5f5;
+}
+.table-hover > tbody > tr > td.active:hover,
+.table-hover > tbody > tr > th.active:hover,
+.table-hover > tbody > tr.active:hover > td,
+.table-hover > tbody > tr:hover > .active,
+.table-hover > tbody > tr.active:hover > th {
+ background-color: #e8e8e8;
+}
+.table > thead > tr > td.success,
+.table > tbody > tr > td.success,
+.table > tfoot > tr > td.success,
+.table > thead > tr > th.success,
+.table > tbody > tr > th.success,
+.table > tfoot > tr > th.success,
+.table > thead > tr.success > td,
+.table > tbody > tr.success > td,
+.table > tfoot > tr.success > td,
+.table > thead > tr.success > th,
+.table > tbody > tr.success > th,
+.table > tfoot > tr.success > th {
+ background-color: #dff0d8;
+}
+.table-hover > tbody > tr > td.success:hover,
+.table-hover > tbody > tr > th.success:hover,
+.table-hover > tbody > tr.success:hover > td,
+.table-hover > tbody > tr:hover > .success,
+.table-hover > tbody > tr.success:hover > th {
+ background-color: #d0e9c6;
+}
+.table > thead > tr > td.info,
+.table > tbody > tr > td.info,
+.table > tfoot > tr > td.info,
+.table > thead > tr > th.info,
+.table > tbody > tr > th.info,
+.table > tfoot > tr > th.info,
+.table > thead > tr.info > td,
+.table > tbody > tr.info > td,
+.table > tfoot > tr.info > td,
+.table > thead > tr.info > th,
+.table > tbody > tr.info > th,
+.table > tfoot > tr.info > th {
+ background-color: #d9edf7;
+}
+.table-hover > tbody > tr > td.info:hover,
+.table-hover > tbody > tr > th.info:hover,
+.table-hover > tbody > tr.info:hover > td,
+.table-hover > tbody > tr:hover > .info,
+.table-hover > tbody > tr.info:hover > th {
+ background-color: #c4e3f3;
+}
+.table > thead > tr > td.warning,
+.table > tbody > tr > td.warning,
+.table > tfoot > tr > td.warning,
+.table > thead > tr > th.warning,
+.table > tbody > tr > th.warning,
+.table > tfoot > tr > th.warning,
+.table > thead > tr.warning > td,
+.table > tbody > tr.warning > td,
+.table > tfoot > tr.warning > td,
+.table > thead > tr.warning > th,
+.table > tbody > tr.warning > th,
+.table > tfoot > tr.warning > th {
+ background-color: #fcf8e3;
+}
+.table-hover > tbody > tr > td.warning:hover,
+.table-hover > tbody > tr > th.warning:hover,
+.table-hover > tbody > tr.warning:hover > td,
+.table-hover > tbody > tr:hover > .warning,
+.table-hover > tbody > tr.warning:hover > th {
+ background-color: #faf2cc;
+}
+.table > thead > tr > td.danger,
+.table > tbody > tr > td.danger,
+.table > tfoot > tr > td.danger,
+.table > thead > tr > th.danger,
+.table > tbody > tr > th.danger,
+.table > tfoot > tr > th.danger,
+.table > thead > tr.danger > td,
+.table > tbody > tr.danger > td,
+.table > tfoot > tr.danger > td,
+.table > thead > tr.danger > th,
+.table > tbody > tr.danger > th,
+.table > tfoot > tr.danger > th {
+ background-color: #f2dede;
+}
+.table-hover > tbody > tr > td.danger:hover,
+.table-hover > tbody > tr > th.danger:hover,
+.table-hover > tbody > tr.danger:hover > td,
+.table-hover > tbody > tr:hover > .danger,
+.table-hover > tbody > tr.danger:hover > th {
+ background-color: #ebcccc;
+}
+.table-responsive {
+ min-height: .01%;
+ overflow-x: auto;
+}
+@media screen and (max-width: 767px) {
+ .table-responsive {
+ width: 100%;
+ margin-bottom: 15px;
+ overflow-y: hidden;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ border: 1px solid #ddd;
+ }
+ .table-responsive > .table {
+ margin-bottom: 0;
+ }
+ .table-responsive > .table > thead > tr > th,
+ .table-responsive > .table > tbody > tr > th,
+ .table-responsive > .table > tfoot > tr > th,
+ .table-responsive > .table > thead > tr > td,
+ .table-responsive > .table > tbody > tr > td,
+ .table-responsive > .table > tfoot > tr > td {
+ white-space: nowrap;
+ }
+ .table-responsive > .table-bordered {
+ border: 0;
+ }
+ .table-responsive > .table-bordered > thead > tr > th:first-child,
+ .table-responsive > .table-bordered > tbody > tr > th:first-child,
+ .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+ .table-responsive > .table-bordered > thead > tr > td:first-child,
+ .table-responsive > .table-bordered > tbody > tr > td:first-child,
+ .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
+ }
+ .table-responsive > .table-bordered > thead > tr > th:last-child,
+ .table-responsive > .table-bordered > tbody > tr > th:last-child,
+ .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+ .table-responsive > .table-bordered > thead > tr > td:last-child,
+ .table-responsive > .table-bordered > tbody > tr > td:last-child,
+ .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+ }
+ .table-responsive > .table-bordered > tbody > tr:last-child > th,
+ .table-responsive > .table-bordered > tfoot > tr:last-child > th,
+ .table-responsive > .table-bordered > tbody > tr:last-child > td,
+ .table-responsive > .table-bordered > tfoot > tr:last-child > td {
+ border-bottom: 0;
+ }
+}
+fieldset {
+ min-width: 0;
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: 20px;
+ font-size: 21px;
+ line-height: inherit;
+ color: #333;
+ border: 0;
+ border-bottom: 1px solid #e5e5e5;
+}
+label {
+ display: inline-block;
+ max-width: 100%;
+ margin-bottom: 5px;
+ font-weight: bold;
+}
+input[type="search"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+input[type="radio"],
+input[type="checkbox"] {
+ margin: 4px 0 0;
+ margin-top: 1px \9;
+ line-height: normal;
+}
+input[type="file"] {
+ display: block;
+}
+input[type="range"] {
+ display: block;
+ width: 100%;
+}
+select[multiple],
+select[size] {
+ height: auto;
+}
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+output {
+ display: block;
+ padding-top: 7px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+}
+.form-control {
+ display: block;
+ width: 100%;
+ height: 34px;
+ padding: 6px 12px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+ background-color: #fff;
+ background-image: none;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
+ -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+.form-control:focus {
+ border-color: #66afe9;
+ outline: 0;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
+}
+.form-control::-moz-placeholder {
+ color: #999;
+ opacity: 1;
+}
+.form-control:-ms-input-placeholder {
+ color: #999;
+}
+.form-control::-webkit-input-placeholder {
+ color: #999;
+}
+.form-control::-ms-expand {
+ background-color: transparent;
+ border: 0;
+}
+.form-control[disabled],
+.form-control[readonly],
+fieldset[disabled] .form-control {
+ background-color: #eee;
+ opacity: 1;
+}
+.form-control[disabled],
+fieldset[disabled] .form-control {
+ cursor: not-allowed;
+}
+textarea.form-control {
+ height: auto;
+}
+input[type="search"] {
+ -webkit-appearance: none;
+}
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+ input[type="date"].form-control,
+ input[type="time"].form-control,
+ input[type="datetime-local"].form-control,
+ input[type="month"].form-control {
+ line-height: 34px;
+ }
+ input[type="date"].input-sm,
+ input[type="time"].input-sm,
+ input[type="datetime-local"].input-sm,
+ input[type="month"].input-sm,
+ .input-group-sm input[type="date"],
+ .input-group-sm input[type="time"],
+ .input-group-sm input[type="datetime-local"],
+ .input-group-sm input[type="month"] {
+ line-height: 30px;
+ }
+ input[type="date"].input-lg,
+ input[type="time"].input-lg,
+ input[type="datetime-local"].input-lg,
+ input[type="month"].input-lg,
+ .input-group-lg input[type="date"],
+ .input-group-lg input[type="time"],
+ .input-group-lg input[type="datetime-local"],
+ .input-group-lg input[type="month"] {
+ line-height: 46px;
+ }
+}
+.form-group {
+ margin-bottom: 15px;
+}
+.radio,
+.checkbox {
+ position: relative;
+ display: block;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+.radio label,
+.checkbox label {
+ min-height: 20px;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: normal;
+ cursor: pointer;
+}
+.radio input[type="radio"],
+.radio-inline input[type="radio"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+ position: absolute;
+ margin-top: 4px \9;
+ margin-left: -20px;
+}
+.radio + .radio,
+.checkbox + .checkbox {
+ margin-top: -5px;
+}
+.radio-inline,
+.checkbox-inline {
+ position: relative;
+ display: inline-block;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: normal;
+ vertical-align: middle;
+ cursor: pointer;
+}
+.radio-inline + .radio-inline,
+.checkbox-inline + .checkbox-inline {
+ margin-top: 0;
+ margin-left: 10px;
+}
+input[type="radio"][disabled],
+input[type="checkbox"][disabled],
+input[type="radio"].disabled,
+input[type="checkbox"].disabled,
+fieldset[disabled] input[type="radio"],
+fieldset[disabled] input[type="checkbox"] {
+ cursor: not-allowed;
+}
+.radio-inline.disabled,
+.checkbox-inline.disabled,
+fieldset[disabled] .radio-inline,
+fieldset[disabled] .checkbox-inline {
+ cursor: not-allowed;
+}
+.radio.disabled label,
+.checkbox.disabled label,
+fieldset[disabled] .radio label,
+fieldset[disabled] .checkbox label {
+ cursor: not-allowed;
+}
+.form-control-static {
+ min-height: 34px;
+ padding-top: 7px;
+ padding-bottom: 7px;
+ margin-bottom: 0;
+}
+.form-control-static.input-lg,
+.form-control-static.input-sm {
+ padding-right: 0;
+ padding-left: 0;
+}
+.input-sm {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+select.input-sm {
+ height: 30px;
+ line-height: 30px;
+}
+textarea.input-sm,
+select[multiple].input-sm {
+ height: auto;
+}
+.form-group-sm .form-control {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+.form-group-sm select.form-control {
+ height: 30px;
+ line-height: 30px;
+}
+.form-group-sm textarea.form-control,
+.form-group-sm select[multiple].form-control {
+ height: auto;
+}
+.form-group-sm .form-control-static {
+ height: 30px;
+ min-height: 32px;
+ padding: 6px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+}
+.input-lg {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+select.input-lg {
+ height: 46px;
+ line-height: 46px;
+}
+textarea.input-lg,
+select[multiple].input-lg {
+ height: auto;
+}
+.form-group-lg .form-control {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+.form-group-lg select.form-control {
+ height: 46px;
+ line-height: 46px;
+}
+.form-group-lg textarea.form-control,
+.form-group-lg select[multiple].form-control {
+ height: auto;
+}
+.form-group-lg .form-control-static {
+ height: 46px;
+ min-height: 38px;
+ padding: 11px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+}
+.has-feedback {
+ position: relative;
+}
+.has-feedback .form-control {
+ padding-right: 42.5px;
+}
+.form-control-feedback {
+ position: absolute;
+ top: 0;
+ right: 0;
+ z-index: 2;
+ display: block;
+ width: 34px;
+ height: 34px;
+ line-height: 34px;
+ text-align: center;
+ pointer-events: none;
+}
+.input-lg + .form-control-feedback,
+.input-group-lg + .form-control-feedback,
+.form-group-lg .form-control + .form-control-feedback {
+ width: 46px;
+ height: 46px;
+ line-height: 46px;
+}
+.input-sm + .form-control-feedback,
+.input-group-sm + .form-control-feedback,
+.form-group-sm .form-control + .form-control-feedback {
+ width: 30px;
+ height: 30px;
+ line-height: 30px;
+}
+.has-success .help-block,
+.has-success .control-label,
+.has-success .radio,
+.has-success .checkbox,
+.has-success .radio-inline,
+.has-success .checkbox-inline,
+.has-success.radio label,
+.has-success.checkbox label,
+.has-success.radio-inline label,
+.has-success.checkbox-inline label {
+ color: #3c763d;
+}
+.has-success .form-control {
+ border-color: #3c763d;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-success .form-control:focus {
+ border-color: #2b542c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+}
+.has-success .input-group-addon {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #3c763d;
+}
+.has-success .form-control-feedback {
+ color: #3c763d;
+}
+.has-warning .help-block,
+.has-warning .control-label,
+.has-warning .radio,
+.has-warning .checkbox,
+.has-warning .radio-inline,
+.has-warning .checkbox-inline,
+.has-warning.radio label,
+.has-warning.checkbox label,
+.has-warning.radio-inline label,
+.has-warning.checkbox-inline label {
+ color: #8a6d3b;
+}
+.has-warning .form-control {
+ border-color: #8a6d3b;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-warning .form-control:focus {
+ border-color: #66512c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+}
+.has-warning .input-group-addon {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #8a6d3b;
+}
+.has-warning .form-control-feedback {
+ color: #8a6d3b;
+}
+.has-error .help-block,
+.has-error .control-label,
+.has-error .radio,
+.has-error .checkbox,
+.has-error .radio-inline,
+.has-error .checkbox-inline,
+.has-error.radio label,
+.has-error.checkbox label,
+.has-error.radio-inline label,
+.has-error.checkbox-inline label {
+ color: #a94442;
+}
+.has-error .form-control {
+ border-color: #a94442;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-error .form-control:focus {
+ border-color: #843534;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+}
+.has-error .input-group-addon {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #a94442;
+}
+.has-error .form-control-feedback {
+ color: #a94442;
+}
+.has-feedback label ~ .form-control-feedback {
+ top: 25px;
+}
+.has-feedback label.sr-only ~ .form-control-feedback {
+ top: 0;
+}
+.help-block {
+ display: block;
+ margin-top: 5px;
+ margin-bottom: 10px;
+ color: #737373;
+}
+@media (min-width: 768px) {
+ .form-inline .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .form-inline .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+ .form-inline .form-control-static {
+ display: inline-block;
+ }
+ .form-inline .input-group {
+ display: inline-table;
+ vertical-align: middle;
+ }
+ .form-inline .input-group .input-group-addon,
+ .form-inline .input-group .input-group-btn,
+ .form-inline .input-group .form-control {
+ width: auto;
+ }
+ .form-inline .input-group > .form-control {
+ width: 100%;
+ }
+ .form-inline .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .form-inline .radio,
+ .form-inline .checkbox {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .form-inline .radio label,
+ .form-inline .checkbox label {
+ padding-left: 0;
+ }
+ .form-inline .radio input[type="radio"],
+ .form-inline .checkbox input[type="checkbox"] {
+ position: relative;
+ margin-left: 0;
+ }
+ .form-inline .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+.form-horizontal .radio,
+.form-horizontal .checkbox,
+.form-horizontal .radio-inline,
+.form-horizontal .checkbox-inline {
+ padding-top: 7px;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+.form-horizontal .radio,
+.form-horizontal .checkbox {
+ min-height: 27px;
+}
+.form-horizontal .form-group {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+@media (min-width: 768px) {
+ .form-horizontal .control-label {
+ padding-top: 7px;
+ margin-bottom: 0;
+ text-align: right;
+ }
+}
+.form-horizontal .has-feedback .form-control-feedback {
+ right: 15px;
+}
+@media (min-width: 768px) {
+ .form-horizontal .form-group-lg .control-label {
+ padding-top: 11px;
+ font-size: 18px;
+ }
+}
+@media (min-width: 768px) {
+ .form-horizontal .form-group-sm .control-label {
+ padding-top: 6px;
+ font-size: 12px;
+ }
+}
+.btn {
+ display: inline-block;
+ padding: 6px 12px;
+ margin-bottom: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1.42857143;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ -ms-touch-action: manipulation;
+ touch-action: manipulation;
+ cursor: pointer;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+.btn:focus,
+.btn:active:focus,
+.btn.active:focus,
+.btn.focus,
+.btn:active.focus,
+.btn.active.focus {
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+.btn:hover,
+.btn:focus,
+.btn.focus {
+ color: #333;
+ text-decoration: none;
+}
+.btn:active,
+.btn.active {
+ background-image: none;
+ outline: 0;
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn.disabled,
+.btn[disabled],
+fieldset[disabled] .btn {
+ cursor: not-allowed;
+ filter: alpha(opacity=65);
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ opacity: .65;
+}
+a.btn.disabled,
+fieldset[disabled] a.btn {
+ pointer-events: none;
+}
+.btn-default {
+ color: #333;
+ background-color: #fff;
+ border-color: #ccc;
+}
+.btn-default:focus,
+.btn-default.focus {
+ color: #333;
+ background-color: #e6e6e6;
+ border-color: #8c8c8c;
+}
+.btn-default:hover {
+ color: #333;
+ background-color: #e6e6e6;
+ border-color: #adadad;
+}
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+ color: #333;
+ background-color: #e6e6e6;
+ border-color: #adadad;
+}
+.btn-default:active:hover,
+.btn-default.active:hover,
+.open > .dropdown-toggle.btn-default:hover,
+.btn-default:active:focus,
+.btn-default.active:focus,
+.open > .dropdown-toggle.btn-default:focus,
+.btn-default:active.focus,
+.btn-default.active.focus,
+.open > .dropdown-toggle.btn-default.focus {
+ color: #333;
+ background-color: #d4d4d4;
+ border-color: #8c8c8c;
+}
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+ background-image: none;
+}
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled.focus,
+.btn-default[disabled].focus,
+fieldset[disabled] .btn-default.focus {
+ background-color: #fff;
+ border-color: #ccc;
+}
+.btn-default .badge {
+ color: #fff;
+ background-color: #333;
+}
+.btn-primary {
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #2e6da4;
+}
+.btn-primary:focus,
+.btn-primary.focus {
+ color: #fff;
+ background-color: #286090;
+ border-color: #122b40;
+}
+.btn-primary:hover {
+ color: #fff;
+ background-color: #286090;
+ border-color: #204d74;
+}
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+ color: #fff;
+ background-color: #286090;
+ border-color: #204d74;
+}
+.btn-primary:active:hover,
+.btn-primary.active:hover,
+.open > .dropdown-toggle.btn-primary:hover,
+.btn-primary:active:focus,
+.btn-primary.active:focus,
+.open > .dropdown-toggle.btn-primary:focus,
+.btn-primary:active.focus,
+.btn-primary.active.focus,
+.open > .dropdown-toggle.btn-primary.focus {
+ color: #fff;
+ background-color: #204d74;
+ border-color: #122b40;
+}
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+ background-image: none;
+}
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled.focus,
+.btn-primary[disabled].focus,
+fieldset[disabled] .btn-primary.focus {
+ background-color: #337ab7;
+ border-color: #2e6da4;
+}
+.btn-primary .badge {
+ color: #337ab7;
+ background-color: #fff;
+}
+.btn-success {
+ color: #fff;
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+.btn-success:focus,
+.btn-success.focus {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #255625;
+}
+.btn-success:hover {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #398439;
+}
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #398439;
+}
+.btn-success:active:hover,
+.btn-success.active:hover,
+.open > .dropdown-toggle.btn-success:hover,
+.btn-success:active:focus,
+.btn-success.active:focus,
+.open > .dropdown-toggle.btn-success:focus,
+.btn-success:active.focus,
+.btn-success.active.focus,
+.open > .dropdown-toggle.btn-success.focus {
+ color: #fff;
+ background-color: #398439;
+ border-color: #255625;
+}
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+ background-image: none;
+}
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled.focus,
+.btn-success[disabled].focus,
+fieldset[disabled] .btn-success.focus {
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+.btn-success .badge {
+ color: #5cb85c;
+ background-color: #fff;
+}
+.btn-info {
+ color: #fff;
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+.btn-info:focus,
+.btn-info.focus {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #1b6d85;
+}
+.btn-info:hover {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #269abc;
+}
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #269abc;
+}
+.btn-info:active:hover,
+.btn-info.active:hover,
+.open > .dropdown-toggle.btn-info:hover,
+.btn-info:active:focus,
+.btn-info.active:focus,
+.open > .dropdown-toggle.btn-info:focus,
+.btn-info:active.focus,
+.btn-info.active.focus,
+.open > .dropdown-toggle.btn-info.focus {
+ color: #fff;
+ background-color: #269abc;
+ border-color: #1b6d85;
+}
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+ background-image: none;
+}
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled.focus,
+.btn-info[disabled].focus,
+fieldset[disabled] .btn-info.focus {
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+.btn-info .badge {
+ color: #5bc0de;
+ background-color: #fff;
+}
+.btn-warning {
+ color: #fff;
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+.btn-warning:focus,
+.btn-warning.focus {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #985f0d;
+}
+.btn-warning:hover {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #d58512;
+}
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #d58512;
+}
+.btn-warning:active:hover,
+.btn-warning.active:hover,
+.open > .dropdown-toggle.btn-warning:hover,
+.btn-warning:active:focus,
+.btn-warning.active:focus,
+.open > .dropdown-toggle.btn-warning:focus,
+.btn-warning:active.focus,
+.btn-warning.active.focus,
+.open > .dropdown-toggle.btn-warning.focus {
+ color: #fff;
+ background-color: #d58512;
+ border-color: #985f0d;
+}
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+ background-image: none;
+}
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled.focus,
+.btn-warning[disabled].focus,
+fieldset[disabled] .btn-warning.focus {
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+.btn-warning .badge {
+ color: #f0ad4e;
+ background-color: #fff;
+}
+.btn-danger {
+ color: #fff;
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+.btn-danger:focus,
+.btn-danger.focus {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #761c19;
+}
+.btn-danger:hover {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #ac2925;
+}
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #ac2925;
+}
+.btn-danger:active:hover,
+.btn-danger.active:hover,
+.open > .dropdown-toggle.btn-danger:hover,
+.btn-danger:active:focus,
+.btn-danger.active:focus,
+.open > .dropdown-toggle.btn-danger:focus,
+.btn-danger:active.focus,
+.btn-danger.active.focus,
+.open > .dropdown-toggle.btn-danger.focus {
+ color: #fff;
+ background-color: #ac2925;
+ border-color: #761c19;
+}
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+ background-image: none;
+}
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled.focus,
+.btn-danger[disabled].focus,
+fieldset[disabled] .btn-danger.focus {
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+.btn-danger .badge {
+ color: #d9534f;
+ background-color: #fff;
+}
+.btn-link {
+ font-weight: normal;
+ color: #337ab7;
+ border-radius: 0;
+}
+.btn-link,
+.btn-link:active,
+.btn-link.active,
+.btn-link[disabled],
+fieldset[disabled] .btn-link {
+ background-color: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+.btn-link,
+.btn-link:hover,
+.btn-link:focus,
+.btn-link:active {
+ border-color: transparent;
+}
+.btn-link:hover,
+.btn-link:focus {
+ color: #23527c;
+ text-decoration: underline;
+ background-color: transparent;
+}
+.btn-link[disabled]:hover,
+fieldset[disabled] .btn-link:hover,
+.btn-link[disabled]:focus,
+fieldset[disabled] .btn-link:focus {
+ color: #777;
+ text-decoration: none;
+}
+.btn-lg,
+.btn-group-lg > .btn {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+.btn-sm,
+.btn-group-sm > .btn {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+.btn-xs,
+.btn-group-xs > .btn {
+ padding: 1px 5px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+.btn-block {
+ display: block;
+ width: 100%;
+}
+.btn-block + .btn-block {
+ margin-top: 5px;
+}
+input[type="submit"].btn-block,
+input[type="reset"].btn-block,
+input[type="button"].btn-block {
+ width: 100%;
+}
+.fade {
+ opacity: 0;
+ -webkit-transition: opacity .15s linear;
+ -o-transition: opacity .15s linear;
+ transition: opacity .15s linear;
+}
+.fade.in {
+ opacity: 1;
+}
+.collapse {
+ display: none;
+}
+.collapse.in {
+ display: block;
+}
+tr.collapse.in {
+ display: table-row;
+}
+tbody.collapse.in {
+ display: table-row-group;
+}
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ -webkit-transition-timing-function: ease;
+ -o-transition-timing-function: ease;
+ transition-timing-function: ease;
+ -webkit-transition-duration: .35s;
+ -o-transition-duration: .35s;
+ transition-duration: .35s;
+ -webkit-transition-property: height, visibility;
+ -o-transition-property: height, visibility;
+ transition-property: height, visibility;
+}
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: 2px;
+ vertical-align: middle;
+ border-top: 4px dashed;
+ border-top: 4px solid \9;
+ border-right: 4px solid transparent;
+ border-left: 4px solid transparent;
+}
+.dropup,
+.dropdown {
+ position: relative;
+}
+.dropdown-toggle:focus {
+ outline: 0;
+}
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ font-size: 14px;
+ text-align: left;
+ list-style: none;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .15);
+ border-radius: 4px;
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+}
+.dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+.dropdown-menu .divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+.dropdown-menu > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: 1.42857143;
+ color: #333;
+ white-space: nowrap;
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+ color: #262626;
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+ color: #fff;
+ text-decoration: none;
+ background-color: #337ab7;
+ outline: 0;
+}
+.dropdown-menu > .disabled > a,
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ color: #777;
+}
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+.open > .dropdown-menu {
+ display: block;
+}
+.open > a {
+ outline: 0;
+}
+.dropdown-menu-right {
+ right: 0;
+ left: auto;
+}
+.dropdown-menu-left {
+ right: auto;
+ left: 0;
+}
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: 12px;
+ line-height: 1.42857143;
+ color: #777;
+ white-space: nowrap;
+}
+.dropdown-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 990;
+}
+.pull-right > .dropdown-menu {
+ right: 0;
+ left: auto;
+}
+.dropup .caret,
+.navbar-fixed-bottom .dropdown .caret {
+ content: "";
+ border-top: 0;
+ border-bottom: 4px dashed;
+ border-bottom: 4px solid \9;
+}
+.dropup .dropdown-menu,
+.navbar-fixed-bottom .dropdown .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 2px;
+}
+@media (min-width: 768px) {
+ .navbar-right .dropdown-menu {
+ right: 0;
+ left: auto;
+ }
+ .navbar-right .dropdown-menu-left {
+ right: auto;
+ left: 0;
+ }
+}
+.btn-group,
+.btn-group-vertical {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+}
+.btn-group > .btn,
+.btn-group-vertical > .btn {
+ position: relative;
+ float: left;
+}
+.btn-group > .btn:hover,
+.btn-group-vertical > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn:focus,
+.btn-group > .btn:active,
+.btn-group-vertical > .btn:active,
+.btn-group > .btn.active,
+.btn-group-vertical > .btn.active {
+ z-index: 2;
+}
+.btn-group .btn + .btn,
+.btn-group .btn + .btn-group,
+.btn-group .btn-group + .btn,
+.btn-group .btn-group + .btn-group {
+ margin-left: -1px;
+}
+.btn-toolbar {
+ margin-left: -5px;
+}
+.btn-toolbar .btn,
+.btn-toolbar .btn-group,
+.btn-toolbar .input-group {
+ float: left;
+}
+.btn-toolbar > .btn,
+.btn-toolbar > .btn-group,
+.btn-toolbar > .input-group {
+ margin-left: 5px;
+}
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+ border-radius: 0;
+}
+.btn-group > .btn:first-child {
+ margin-left: 0;
+}
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+.btn-group > .btn:last-child:not(:first-child),
+.btn-group > .dropdown-toggle:not(:first-child) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group > .btn-group {
+ float: left;
+}
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
+.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+ outline: 0;
+}
+.btn-group > .btn + .dropdown-toggle {
+ padding-right: 8px;
+ padding-left: 8px;
+}
+.btn-group > .btn-lg + .dropdown-toggle {
+ padding-right: 12px;
+ padding-left: 12px;
+}
+.btn-group.open .dropdown-toggle {
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn-group.open .dropdown-toggle.btn-link {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+.btn .caret {
+ margin-left: 0;
+}
+.btn-lg .caret {
+ border-width: 5px 5px 0;
+ border-bottom-width: 0;
+}
+.dropup .btn-lg .caret {
+ border-width: 0 5px 5px;
+}
+.btn-group-vertical > .btn,
+.btn-group-vertical > .btn-group,
+.btn-group-vertical > .btn-group > .btn {
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%;
+}
+.btn-group-vertical > .btn-group > .btn {
+ float: none;
+}
+.btn-group-vertical > .btn + .btn,
+.btn-group-vertical > .btn + .btn-group,
+.btn-group-vertical > .btn-group + .btn,
+.btn-group-vertical > .btn-group + .btn-group {
+ margin-top: -1px;
+ margin-left: 0;
+}
+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+.btn-group-vertical > .btn:first-child:not(:last-child) {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn:last-child:not(:first-child) {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.btn-group-justified {
+ display: table;
+ width: 100%;
+ table-layout: fixed;
+ border-collapse: separate;
+}
+.btn-group-justified > .btn,
+.btn-group-justified > .btn-group {
+ display: table-cell;
+ float: none;
+ width: 1%;
+}
+.btn-group-justified > .btn-group .btn {
+ width: 100%;
+}
+.btn-group-justified > .btn-group .dropdown-menu {
+ left: auto;
+}
+[data-toggle="buttons"] > .btn input[type="radio"],
+[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
+[data-toggle="buttons"] > .btn input[type="checkbox"],
+[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
+ position: absolute;
+ clip: rect(0, 0, 0, 0);
+ pointer-events: none;
+}
+.input-group {
+ position: relative;
+ display: table;
+ border-collapse: separate;
+}
+.input-group[class*="col-"] {
+ float: none;
+ padding-right: 0;
+ padding-left: 0;
+}
+.input-group .form-control {
+ position: relative;
+ z-index: 2;
+ float: left;
+ width: 100%;
+ margin-bottom: 0;
+}
+.input-group .form-control:focus {
+ z-index: 3;
+}
+.input-group-lg > .form-control,
+.input-group-lg > .input-group-addon,
+.input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+select.input-group-lg > .form-control,
+select.input-group-lg > .input-group-addon,
+select.input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ line-height: 46px;
+}
+textarea.input-group-lg > .form-control,
+textarea.input-group-lg > .input-group-addon,
+textarea.input-group-lg > .input-group-btn > .btn,
+select[multiple].input-group-lg > .form-control,
+select[multiple].input-group-lg > .input-group-addon,
+select[multiple].input-group-lg > .input-group-btn > .btn {
+ height: auto;
+}
+.input-group-sm > .form-control,
+.input-group-sm > .input-group-addon,
+.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+select.input-group-sm > .form-control,
+select.input-group-sm > .input-group-addon,
+select.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ line-height: 30px;
+}
+textarea.input-group-sm > .form-control,
+textarea.input-group-sm > .input-group-addon,
+textarea.input-group-sm > .input-group-btn > .btn,
+select[multiple].input-group-sm > .form-control,
+select[multiple].input-group-sm > .input-group-addon,
+select[multiple].input-group-sm > .input-group-btn > .btn {
+ height: auto;
+}
+.input-group-addon,
+.input-group-btn,
+.input-group .form-control {
+ display: table-cell;
+}
+.input-group-addon:not(:first-child):not(:last-child),
+.input-group-btn:not(:first-child):not(:last-child),
+.input-group .form-control:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+.input-group-addon,
+.input-group-btn {
+ width: 1%;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+.input-group-addon {
+ padding: 6px 12px;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1;
+ color: #555;
+ text-align: center;
+ background-color: #eee;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+.input-group-addon.input-sm {
+ padding: 5px 10px;
+ font-size: 12px;
+ border-radius: 3px;
+}
+.input-group-addon.input-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ border-radius: 6px;
+}
+.input-group-addon input[type="radio"],
+.input-group-addon input[type="checkbox"] {
+ margin-top: 0;
+}
+.input-group .form-control:first-child,
+.input-group-addon:first-child,
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group > .btn,
+.input-group-btn:first-child > .dropdown-toggle,
+.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
+.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+.input-group-addon:first-child {
+ border-right: 0;
+}
+.input-group .form-control:last-child,
+.input-group-addon:last-child,
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group > .btn,
+.input-group-btn:last-child > .dropdown-toggle,
+.input-group-btn:first-child > .btn:not(:first-child),
+.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.input-group-addon:last-child {
+ border-left: 0;
+}
+.input-group-btn {
+ position: relative;
+ font-size: 0;
+ white-space: nowrap;
+}
+.input-group-btn > .btn {
+ position: relative;
+}
+.input-group-btn > .btn + .btn {
+ margin-left: -1px;
+}
+.input-group-btn > .btn:hover,
+.input-group-btn > .btn:focus,
+.input-group-btn > .btn:active {
+ z-index: 2;
+}
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group {
+ margin-right: -1px;
+}
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group {
+ z-index: 2;
+ margin-left: -1px;
+}
+.nav {
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none;
+}
+.nav > li {
+ position: relative;
+ display: block;
+}
+.nav > li > a {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+}
+.nav > li > a:hover,
+.nav > li > a:focus {
+ text-decoration: none;
+ background-color: #eee;
+}
+.nav > li.disabled > a {
+ color: #777;
+}
+.nav > li.disabled > a:hover,
+.nav > li.disabled > a:focus {
+ color: #777;
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+}
+.nav .open > a,
+.nav .open > a:hover,
+.nav .open > a:focus {
+ background-color: #eee;
+ border-color: #337ab7;
+}
+.nav .nav-divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+.nav > li > a > img {
+ max-width: none;
+}
+.nav-tabs {
+ border-bottom: 1px solid #ddd;
+}
+.nav-tabs > li {
+ float: left;
+ margin-bottom: -1px;
+}
+.nav-tabs > li > a {
+ margin-right: 2px;
+ line-height: 1.42857143;
+ border: 1px solid transparent;
+ border-radius: 4px 4px 0 0;
+}
+.nav-tabs > li > a:hover {
+ border-color: #eee #eee #ddd;
+}
+.nav-tabs > li.active > a,
+.nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a:focus {
+ color: #555;
+ cursor: default;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+}
+.nav-tabs.nav-justified {
+ width: 100%;
+ border-bottom: 0;
+}
+.nav-tabs.nav-justified > li {
+ float: none;
+}
+.nav-tabs.nav-justified > li > a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+.nav-tabs.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+ .nav-tabs.nav-justified > li > a {
+ margin-bottom: 0;
+ }
+}
+.nav-tabs.nav-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+.nav-tabs.nav-justified > .active > a,
+.nav-tabs.nav-justified > .active > a:hover,
+.nav-tabs.nav-justified > .active > a:focus {
+ border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+ }
+ .nav-tabs.nav-justified > .active > a,
+ .nav-tabs.nav-justified > .active > a:hover,
+ .nav-tabs.nav-justified > .active > a:focus {
+ border-bottom-color: #fff;
+ }
+}
+.nav-pills > li {
+ float: left;
+}
+.nav-pills > li > a {
+ border-radius: 4px;
+}
+.nav-pills > li + li {
+ margin-left: 2px;
+}
+.nav-pills > li.active > a,
+.nav-pills > li.active > a:hover,
+.nav-pills > li.active > a:focus {
+ color: #fff;
+ background-color: #337ab7;
+}
+.nav-stacked > li {
+ float: none;
+}
+.nav-stacked > li + li {
+ margin-top: 2px;
+ margin-left: 0;
+}
+.nav-justified {
+ width: 100%;
+}
+.nav-justified > li {
+ float: none;
+}
+.nav-justified > li > a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+@media (min-width: 768px) {
+ .nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+ .nav-justified > li > a {
+ margin-bottom: 0;
+ }
+}
+.nav-tabs-justified {
+ border-bottom: 0;
+}
+.nav-tabs-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+.nav-tabs-justified > .active > a,
+.nav-tabs-justified > .active > a:hover,
+.nav-tabs-justified > .active > a:focus {
+ border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+ .nav-tabs-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+ }
+ .nav-tabs-justified > .active > a,
+ .nav-tabs-justified > .active > a:hover,
+ .nav-tabs-justified > .active > a:focus {
+ border-bottom-color: #fff;
+ }
+}
+.tab-content > .tab-pane {
+ display: none;
+}
+.tab-content > .active {
+ display: block;
+}
+.nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.navbar {
+ position: relative;
+ min-height: 50px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+}
+@media (min-width: 768px) {
+ .navbar {
+ border-radius: 4px;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-header {
+ float: left;
+ }
+}
+.navbar-collapse {
+ padding-right: 15px;
+ padding-left: 15px;
+ overflow-x: visible;
+ -webkit-overflow-scrolling: touch;
+ border-top: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+}
+.navbar-collapse.in {
+ overflow-y: auto;
+}
+@media (min-width: 768px) {
+ .navbar-collapse {
+ width: auto;
+ border-top: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+ .navbar-collapse.collapse {
+ display: block !important;
+ height: auto !important;
+ padding-bottom: 0;
+ overflow: visible !important;
+ }
+ .navbar-collapse.in {
+ overflow-y: visible;
+ }
+ .navbar-fixed-top .navbar-collapse,
+ .navbar-static-top .navbar-collapse,
+ .navbar-fixed-bottom .navbar-collapse {
+ padding-right: 0;
+ padding-left: 0;
+ }
+}
+.navbar-fixed-top .navbar-collapse,
+.navbar-fixed-bottom .navbar-collapse {
+ max-height: 340px;
+}
+@media (max-device-width: 480px) and (orientation: landscape) {
+ .navbar-fixed-top .navbar-collapse,
+ .navbar-fixed-bottom .navbar-collapse {
+ max-height: 200px;
+ }
+}
+.container > .navbar-header,
+.container-fluid > .navbar-header,
+.container > .navbar-collapse,
+.container-fluid > .navbar-collapse {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+@media (min-width: 768px) {
+ .container > .navbar-header,
+ .container-fluid > .navbar-header,
+ .container > .navbar-collapse,
+ .container-fluid > .navbar-collapse {
+ margin-right: 0;
+ margin-left: 0;
+ }
+}
+.navbar-static-top {
+ z-index: 1000;
+ border-width: 0 0 1px;
+}
+@media (min-width: 768px) {
+ .navbar-static-top {
+ border-radius: 0;
+ }
+}
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: 1030;
+}
+@media (min-width: 768px) {
+ .navbar-fixed-top,
+ .navbar-fixed-bottom {
+ border-radius: 0;
+ }
+}
+.navbar-fixed-top {
+ top: 0;
+ border-width: 0 0 1px;
+}
+.navbar-fixed-bottom {
+ bottom: 0;
+ margin-bottom: 0;
+ border-width: 1px 0 0;
+}
+.navbar-brand {
+ float: left;
+ height: 50px;
+ padding: 15px 15px;
+ font-size: 18px;
+ line-height: 20px;
+}
+.navbar-brand:hover,
+.navbar-brand:focus {
+ text-decoration: none;
+}
+.navbar-brand > img {
+ display: block;
+}
+@media (min-width: 768px) {
+ .navbar > .container .navbar-brand,
+ .navbar > .container-fluid .navbar-brand {
+ margin-left: -15px;
+ }
+}
+.navbar-toggle {
+ position: relative;
+ float: right;
+ padding: 9px 10px;
+ margin-top: 8px;
+ margin-right: 15px;
+ margin-bottom: 8px;
+ background-color: transparent;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+.navbar-toggle:focus {
+ outline: 0;
+}
+.navbar-toggle .icon-bar {
+ display: block;
+ width: 22px;
+ height: 2px;
+ border-radius: 1px;
+}
+.navbar-toggle .icon-bar + .icon-bar {
+ margin-top: 4px;
+}
+@media (min-width: 768px) {
+ .navbar-toggle {
+ display: none;
+ }
+}
+.navbar-nav {
+ margin: 7.5px -15px;
+}
+.navbar-nav > li > a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ line-height: 20px;
+}
+@media (max-width: 767px) {
+ .navbar-nav .open .dropdown-menu {
+ position: static;
+ float: none;
+ width: auto;
+ margin-top: 0;
+ background-color: transparent;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+ .navbar-nav .open .dropdown-menu > li > a,
+ .navbar-nav .open .dropdown-menu .dropdown-header {
+ padding: 5px 15px 5px 25px;
+ }
+ .navbar-nav .open .dropdown-menu > li > a {
+ line-height: 20px;
+ }
+ .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-nav .open .dropdown-menu > li > a:focus {
+ background-image: none;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-nav {
+ float: left;
+ margin: 0;
+ }
+ .navbar-nav > li {
+ float: left;
+ }
+ .navbar-nav > li > a {
+ padding-top: 15px;
+ padding-bottom: 15px;
+ }
+}
+.navbar-form {
+ padding: 10px 15px;
+ margin-top: 8px;
+ margin-right: -15px;
+ margin-bottom: 8px;
+ margin-left: -15px;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+}
+@media (min-width: 768px) {
+ .navbar-form .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+ .navbar-form .form-control-static {
+ display: inline-block;
+ }
+ .navbar-form .input-group {
+ display: inline-table;
+ vertical-align: middle;
+ }
+ .navbar-form .input-group .input-group-addon,
+ .navbar-form .input-group .input-group-btn,
+ .navbar-form .input-group .form-control {
+ width: auto;
+ }
+ .navbar-form .input-group > .form-control {
+ width: 100%;
+ }
+ .navbar-form .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .radio,
+ .navbar-form .checkbox {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .radio label,
+ .navbar-form .checkbox label {
+ padding-left: 0;
+ }
+ .navbar-form .radio input[type="radio"],
+ .navbar-form .checkbox input[type="checkbox"] {
+ position: relative;
+ margin-left: 0;
+ }
+ .navbar-form .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+@media (max-width: 767px) {
+ .navbar-form .form-group {
+ margin-bottom: 5px;
+ }
+ .navbar-form .form-group:last-child {
+ margin-bottom: 0;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-form {
+ width: auto;
+ padding-top: 0;
+ padding-bottom: 0;
+ margin-right: 0;
+ margin-left: 0;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+}
+.navbar-nav > li > .dropdown-menu {
+ margin-top: 0;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+ margin-bottom: 0;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.navbar-btn {
+ margin-top: 8px;
+ margin-bottom: 8px;
+}
+.navbar-btn.btn-sm {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+.navbar-btn.btn-xs {
+ margin-top: 14px;
+ margin-bottom: 14px;
+}
+.navbar-text {
+ margin-top: 15px;
+ margin-bottom: 15px;
+}
+@media (min-width: 768px) {
+ .navbar-text {
+ float: left;
+ margin-right: 15px;
+ margin-left: 15px;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-left {
+ float: left !important;
+ }
+ .navbar-right {
+ float: right !important;
+ margin-right: -15px;
+ }
+ .navbar-right ~ .navbar-right {
+ margin-right: 0;
+ }
+}
+.navbar-default {
+ background-color: #f8f8f8;
+ border-color: #e7e7e7;
+}
+.navbar-default .navbar-brand {
+ color: #777;
+}
+.navbar-default .navbar-brand:hover,
+.navbar-default .navbar-brand:focus {
+ color: #5e5e5e;
+ background-color: transparent;
+}
+.navbar-default .navbar-text {
+ color: #777;
+}
+.navbar-default .navbar-nav > li > a {
+ color: #777;
+}
+.navbar-default .navbar-nav > li > a:hover,
+.navbar-default .navbar-nav > li > a:focus {
+ color: #333;
+ background-color: transparent;
+}
+.navbar-default .navbar-nav > .active > a,
+.navbar-default .navbar-nav > .active > a:hover,
+.navbar-default .navbar-nav > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .disabled > a,
+.navbar-default .navbar-nav > .disabled > a:hover,
+.navbar-default .navbar-nav > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent;
+}
+.navbar-default .navbar-toggle {
+ border-color: #ddd;
+}
+.navbar-default .navbar-toggle:hover,
+.navbar-default .navbar-toggle:focus {
+ background-color: #ddd;
+}
+.navbar-default .navbar-toggle .icon-bar {
+ background-color: #888;
+}
+.navbar-default .navbar-collapse,
+.navbar-default .navbar-form {
+ border-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .open > a:hover,
+.navbar-default .navbar-nav > .open > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+}
+@media (max-width: 767px) {
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a {
+ color: #777;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #333;
+ background-color: transparent;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent;
+ }
+}
+.navbar-default .navbar-link {
+ color: #777;
+}
+.navbar-default .navbar-link:hover {
+ color: #333;
+}
+.navbar-default .btn-link {
+ color: #777;
+}
+.navbar-default .btn-link:hover,
+.navbar-default .btn-link:focus {
+ color: #333;
+}
+.navbar-default .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-default .btn-link:hover,
+.navbar-default .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-default .btn-link:focus {
+ color: #ccc;
+}
+.navbar-inverse {
+ background-color: #222;
+ border-color: #080808;
+}
+.navbar-inverse .navbar-brand {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-brand:hover,
+.navbar-inverse .navbar-brand:focus {
+ color: #fff;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-text {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-nav > li > a {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-nav > li > a:hover,
+.navbar-inverse .navbar-nav > li > a:focus {
+ color: #fff;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-nav > .active > a,
+.navbar-inverse .navbar-nav > .active > a:hover,
+.navbar-inverse .navbar-nav > .active > a:focus {
+ color: #fff;
+ background-color: #080808;
+}
+.navbar-inverse .navbar-nav > .disabled > a,
+.navbar-inverse .navbar-nav > .disabled > a:hover,
+.navbar-inverse .navbar-nav > .disabled > a:focus {
+ color: #444;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-toggle {
+ border-color: #333;
+}
+.navbar-inverse .navbar-toggle:hover,
+.navbar-inverse .navbar-toggle:focus {
+ background-color: #333;
+}
+.navbar-inverse .navbar-toggle .icon-bar {
+ background-color: #fff;
+}
+.navbar-inverse .navbar-collapse,
+.navbar-inverse .navbar-form {
+ border-color: #101010;
+}
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .open > a:hover,
+.navbar-inverse .navbar-nav > .open > a:focus {
+ color: #fff;
+ background-color: #080808;
+}
+@media (max-width: 767px) {
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
+ border-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
+ background-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
+ color: #9d9d9d;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #fff;
+ background-color: transparent;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #fff;
+ background-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #444;
+ background-color: transparent;
+ }
+}
+.navbar-inverse .navbar-link {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-link:hover {
+ color: #fff;
+}
+.navbar-inverse .btn-link {
+ color: #9d9d9d;
+}
+.navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link:focus {
+ color: #fff;
+}
+.navbar-inverse .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-inverse .btn-link:focus {
+ color: #444;
+}
+.breadcrumb {
+ padding: 8px 15px;
+ margin-bottom: 20px;
+ list-style: none;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+}
+.breadcrumb > li {
+ display: inline-block;
+}
+.breadcrumb > li + li:before {
+ padding: 0 5px;
+ color: #ccc;
+ content: "/\00a0";
+}
+.breadcrumb > .active {
+ color: #777;
+}
+.pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: 20px 0;
+ border-radius: 4px;
+}
+.pagination > li {
+ display: inline;
+}
+.pagination > li > a,
+.pagination > li > span {
+ position: relative;
+ float: left;
+ padding: 6px 12px;
+ margin-left: -1px;
+ line-height: 1.42857143;
+ color: #337ab7;
+ text-decoration: none;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+.pagination > li:first-child > a,
+.pagination > li:first-child > span {
+ margin-left: 0;
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+.pagination > li:last-child > a,
+.pagination > li:last-child > span {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+.pagination > li > a:hover,
+.pagination > li > span:hover,
+.pagination > li > a:focus,
+.pagination > li > span:focus {
+ z-index: 2;
+ color: #23527c;
+ background-color: #eee;
+ border-color: #ddd;
+}
+.pagination > .active > a,
+.pagination > .active > span,
+.pagination > .active > a:hover,
+.pagination > .active > span:hover,
+.pagination > .active > a:focus,
+.pagination > .active > span:focus {
+ z-index: 3;
+ color: #fff;
+ cursor: default;
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+.pagination > .disabled > span,
+.pagination > .disabled > span:hover,
+.pagination > .disabled > span:focus,
+.pagination > .disabled > a,
+.pagination > .disabled > a:hover,
+.pagination > .disabled > a:focus {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #fff;
+ border-color: #ddd;
+}
+.pagination-lg > li > a,
+.pagination-lg > li > span {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+}
+.pagination-lg > li:first-child > a,
+.pagination-lg > li:first-child > span {
+ border-top-left-radius: 6px;
+ border-bottom-left-radius: 6px;
+}
+.pagination-lg > li:last-child > a,
+.pagination-lg > li:last-child > span {
+ border-top-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+}
+.pagination-sm > li > a,
+.pagination-sm > li > span {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+}
+.pagination-sm > li:first-child > a,
+.pagination-sm > li:first-child > span {
+ border-top-left-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.pagination-sm > li:last-child > a,
+.pagination-sm > li:last-child > span {
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+.pager {
+ padding-left: 0;
+ margin: 20px 0;
+ text-align: center;
+ list-style: none;
+}
+.pager li {
+ display: inline;
+}
+.pager li > a,
+.pager li > span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 15px;
+}
+.pager li > a:hover,
+.pager li > a:focus {
+ text-decoration: none;
+ background-color: #eee;
+}
+.pager .next > a,
+.pager .next > span {
+ float: right;
+}
+.pager .previous > a,
+.pager .previous > span {
+ float: left;
+}
+.pager .disabled > a,
+.pager .disabled > a:hover,
+.pager .disabled > a:focus,
+.pager .disabled > span {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #fff;
+}
+.label {
+ display: inline;
+ padding: .2em .6em .3em;
+ font-size: 75%;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .25em;
+}
+a.label:hover,
+a.label:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+}
+.label:empty {
+ display: none;
+}
+.btn .label {
+ position: relative;
+ top: -1px;
+}
+.label-default {
+ background-color: #777;
+}
+.label-default[href]:hover,
+.label-default[href]:focus {
+ background-color: #5e5e5e;
+}
+.label-primary {
+ background-color: #337ab7;
+}
+.label-primary[href]:hover,
+.label-primary[href]:focus {
+ background-color: #286090;
+}
+.label-success {
+ background-color: #5cb85c;
+}
+.label-success[href]:hover,
+.label-success[href]:focus {
+ background-color: #449d44;
+}
+.label-info {
+ background-color: #5bc0de;
+}
+.label-info[href]:hover,
+.label-info[href]:focus {
+ background-color: #31b0d5;
+}
+.label-warning {
+ background-color: #f0ad4e;
+}
+.label-warning[href]:hover,
+.label-warning[href]:focus {
+ background-color: #ec971f;
+}
+.label-danger {
+ background-color: #d9534f;
+}
+.label-danger[href]:hover,
+.label-danger[href]:focus {
+ background-color: #c9302c;
+}
+.badge {
+ display: inline-block;
+ min-width: 10px;
+ padding: 3px 7px;
+ font-size: 12px;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ background-color: #777;
+ border-radius: 10px;
+}
+.badge:empty {
+ display: none;
+}
+.btn .badge {
+ position: relative;
+ top: -1px;
+}
+.btn-xs .badge,
+.btn-group-xs > .btn .badge {
+ top: 0;
+ padding: 1px 5px;
+}
+a.badge:hover,
+a.badge:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+}
+.list-group-item.active > .badge,
+.nav-pills > .active > a > .badge {
+ color: #337ab7;
+ background-color: #fff;
+}
+.list-group-item > .badge {
+ float: right;
+}
+.list-group-item > .badge + .badge {
+ margin-right: 5px;
+}
+.nav-pills > li > a > .badge {
+ margin-left: 3px;
+}
+.jumbotron {
+ padding-top: 30px;
+ padding-bottom: 30px;
+ margin-bottom: 30px;
+ color: inherit;
+ background-color: #eee;
+}
+.jumbotron h1,
+.jumbotron .h1 {
+ color: inherit;
+}
+.jumbotron p {
+ margin-bottom: 15px;
+ font-size: 21px;
+ font-weight: 200;
+}
+.jumbotron > hr {
+ border-top-color: #d5d5d5;
+}
+.container .jumbotron,
+.container-fluid .jumbotron {
+ padding-right: 15px;
+ padding-left: 15px;
+ border-radius: 6px;
+}
+.jumbotron .container {
+ max-width: 100%;
+}
+@media screen and (min-width: 768px) {
+ .jumbotron {
+ padding-top: 48px;
+ padding-bottom: 48px;
+ }
+ .container .jumbotron,
+ .container-fluid .jumbotron {
+ padding-right: 60px;
+ padding-left: 60px;
+ }
+ .jumbotron h1,
+ .jumbotron .h1 {
+ font-size: 63px;
+ }
+}
+.thumbnail {
+ display: block;
+ padding: 4px;
+ margin-bottom: 20px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: border .2s ease-in-out;
+ -o-transition: border .2s ease-in-out;
+ transition: border .2s ease-in-out;
+}
+.thumbnail > img,
+.thumbnail a > img {
+ margin-right: auto;
+ margin-left: auto;
+}
+a.thumbnail:hover,
+a.thumbnail:focus,
+a.thumbnail.active {
+ border-color: #337ab7;
+}
+.thumbnail .caption {
+ padding: 9px;
+ color: #333;
+}
+.alert {
+ padding: 15px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+.alert h4 {
+ margin-top: 0;
+ color: inherit;
+}
+.alert .alert-link {
+ font-weight: bold;
+}
+.alert > p,
+.alert > ul {
+ margin-bottom: 0;
+}
+.alert > p + p {
+ margin-top: 5px;
+}
+.alert-dismissable,
+.alert-dismissible {
+ padding-right: 35px;
+}
+.alert-dismissable .close,
+.alert-dismissible .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ color: inherit;
+}
+.alert-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+.alert-success hr {
+ border-top-color: #c9e2b3;
+}
+.alert-success .alert-link {
+ color: #2b542c;
+}
+.alert-info {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+.alert-info hr {
+ border-top-color: #a6e1ec;
+}
+.alert-info .alert-link {
+ color: #245269;
+}
+.alert-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+.alert-warning hr {
+ border-top-color: #f7e1b5;
+}
+.alert-warning .alert-link {
+ color: #66512c;
+}
+.alert-danger {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+.alert-danger hr {
+ border-top-color: #e4b9c0;
+}
+.alert-danger .alert-link {
+ color: #843534;
+}
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+@-o-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+.progress {
+ height: 20px;
+ margin-bottom: 20px;
+ overflow: hidden;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+}
+.progress-bar {
+ float: left;
+ width: 0;
+ height: 100%;
+ font-size: 12px;
+ line-height: 20px;
+ color: #fff;
+ text-align: center;
+ background-color: #337ab7;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ -webkit-transition: width .6s ease;
+ -o-transition: width .6s ease;
+ transition: width .6s ease;
+}
+.progress-striped .progress-bar,
+.progress-bar-striped {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ -webkit-background-size: 40px 40px;
+ background-size: 40px 40px;
+}
+.progress.active .progress-bar,
+.progress-bar.active {
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
+ -o-animation: progress-bar-stripes 2s linear infinite;
+ animation: progress-bar-stripes 2s linear infinite;
+}
+.progress-bar-success {
+ background-color: #5cb85c;
+}
+.progress-striped .progress-bar-success {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-info {
+ background-color: #5bc0de;
+}
+.progress-striped .progress-bar-info {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-warning {
+ background-color: #f0ad4e;
+}
+.progress-striped .progress-bar-warning {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-danger {
+ background-color: #d9534f;
+}
+.progress-striped .progress-bar-danger {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.media {
+ margin-top: 15px;
+}
+.media:first-child {
+ margin-top: 0;
+}
+.media,
+.media-body {
+ overflow: hidden;
+ zoom: 1;
+}
+.media-body {
+ width: 10000px;
+}
+.media-object {
+ display: block;
+}
+.media-object.img-thumbnail {
+ max-width: none;
+}
+.media-right,
+.media > .pull-right {
+ padding-left: 10px;
+}
+.media-left,
+.media > .pull-left {
+ padding-right: 10px;
+}
+.media-left,
+.media-right,
+.media-body {
+ display: table-cell;
+ vertical-align: top;
+}
+.media-middle {
+ vertical-align: middle;
+}
+.media-bottom {
+ vertical-align: bottom;
+}
+.media-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+.media-list {
+ padding-left: 0;
+ list-style: none;
+}
+.list-group {
+ padding-left: 0;
+ margin-bottom: 20px;
+}
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+ margin-bottom: -1px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+.list-group-item:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+.list-group-item:last-child {
+ margin-bottom: 0;
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+a.list-group-item,
+button.list-group-item {
+ color: #555;
+}
+a.list-group-item .list-group-item-heading,
+button.list-group-item .list-group-item-heading {
+ color: #333;
+}
+a.list-group-item:hover,
+button.list-group-item:hover,
+a.list-group-item:focus,
+button.list-group-item:focus {
+ color: #555;
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+button.list-group-item {
+ width: 100%;
+ text-align: left;
+}
+.list-group-item.disabled,
+.list-group-item.disabled:hover,
+.list-group-item.disabled:focus {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #eee;
+}
+.list-group-item.disabled .list-group-item-heading,
+.list-group-item.disabled:hover .list-group-item-heading,
+.list-group-item.disabled:focus .list-group-item-heading {
+ color: inherit;
+}
+.list-group-item.disabled .list-group-item-text,
+.list-group-item.disabled:hover .list-group-item-text,
+.list-group-item.disabled:focus .list-group-item-text {
+ color: #777;
+}
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+ z-index: 2;
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+.list-group-item.active .list-group-item-heading,
+.list-group-item.active:hover .list-group-item-heading,
+.list-group-item.active:focus .list-group-item-heading,
+.list-group-item.active .list-group-item-heading > small,
+.list-group-item.active:hover .list-group-item-heading > small,
+.list-group-item.active:focus .list-group-item-heading > small,
+.list-group-item.active .list-group-item-heading > .small,
+.list-group-item.active:hover .list-group-item-heading > .small,
+.list-group-item.active:focus .list-group-item-heading > .small {
+ color: inherit;
+}
+.list-group-item.active .list-group-item-text,
+.list-group-item.active:hover .list-group-item-text,
+.list-group-item.active:focus .list-group-item-text {
+ color: #c7ddef;
+}
+.list-group-item-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+}
+a.list-group-item-success,
+button.list-group-item-success {
+ color: #3c763d;
+}
+a.list-group-item-success .list-group-item-heading,
+button.list-group-item-success .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item-success:hover,
+button.list-group-item-success:hover,
+a.list-group-item-success:focus,
+button.list-group-item-success:focus {
+ color: #3c763d;
+ background-color: #d0e9c6;
+}
+a.list-group-item-success.active,
+button.list-group-item-success.active,
+a.list-group-item-success.active:hover,
+button.list-group-item-success.active:hover,
+a.list-group-item-success.active:focus,
+button.list-group-item-success.active:focus {
+ color: #fff;
+ background-color: #3c763d;
+ border-color: #3c763d;
+}
+.list-group-item-info {
+ color: #31708f;
+ background-color: #d9edf7;
+}
+a.list-group-item-info,
+button.list-group-item-info {
+ color: #31708f;
+}
+a.list-group-item-info .list-group-item-heading,
+button.list-group-item-info .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item-info:hover,
+button.list-group-item-info:hover,
+a.list-group-item-info:focus,
+button.list-group-item-info:focus {
+ color: #31708f;
+ background-color: #c4e3f3;
+}
+a.list-group-item-info.active,
+button.list-group-item-info.active,
+a.list-group-item-info.active:hover,
+button.list-group-item-info.active:hover,
+a.list-group-item-info.active:focus,
+button.list-group-item-info.active:focus {
+ color: #fff;
+ background-color: #31708f;
+ border-color: #31708f;
+}
+.list-group-item-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+}
+a.list-group-item-warning,
+button.list-group-item-warning {
+ color: #8a6d3b;
+}
+a.list-group-item-warning .list-group-item-heading,
+button.list-group-item-warning .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item-warning:hover,
+button.list-group-item-warning:hover,
+a.list-group-item-warning:focus,
+button.list-group-item-warning:focus {
+ color: #8a6d3b;
+ background-color: #faf2cc;
+}
+a.list-group-item-warning.active,
+button.list-group-item-warning.active,
+a.list-group-item-warning.active:hover,
+button.list-group-item-warning.active:hover,
+a.list-group-item-warning.active:focus,
+button.list-group-item-warning.active:focus {
+ color: #fff;
+ background-color: #8a6d3b;
+ border-color: #8a6d3b;
+}
+.list-group-item-danger {
+ color: #a94442;
+ background-color: #f2dede;
+}
+a.list-group-item-danger,
+button.list-group-item-danger {
+ color: #a94442;
+}
+a.list-group-item-danger .list-group-item-heading,
+button.list-group-item-danger .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item-danger:hover,
+button.list-group-item-danger:hover,
+a.list-group-item-danger:focus,
+button.list-group-item-danger:focus {
+ color: #a94442;
+ background-color: #ebcccc;
+}
+a.list-group-item-danger.active,
+button.list-group-item-danger.active,
+a.list-group-item-danger.active:hover,
+button.list-group-item-danger.active:hover,
+a.list-group-item-danger.active:focus,
+button.list-group-item-danger.active:focus {
+ color: #fff;
+ background-color: #a94442;
+ border-color: #a94442;
+}
+.list-group-item-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+.list-group-item-text {
+ margin-bottom: 0;
+ line-height: 1.3;
+}
+.panel {
+ margin-bottom: 20px;
+ background-color: #fff;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+}
+.panel-body {
+ padding: 15px;
+}
+.panel-heading {
+ padding: 10px 15px;
+ border-bottom: 1px solid transparent;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel-heading > .dropdown .dropdown-toggle {
+ color: inherit;
+}
+.panel-title {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: 16px;
+ color: inherit;
+}
+.panel-title > a,
+.panel-title > small,
+.panel-title > .small,
+.panel-title > small > a,
+.panel-title > .small > a {
+ color: inherit;
+}
+.panel-footer {
+ padding: 10px 15px;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ddd;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .list-group,
+.panel > .panel-collapse > .list-group {
+ margin-bottom: 0;
+}
+.panel > .list-group .list-group-item,
+.panel > .panel-collapse > .list-group .list-group-item {
+ border-width: 1px 0;
+ border-radius: 0;
+}
+.panel > .list-group:first-child .list-group-item:first-child,
+.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
+ border-top: 0;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel > .list-group:last-child .list-group-item:last-child,
+.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
+ border-bottom: 0;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.panel-heading + .list-group .list-group-item:first-child {
+ border-top-width: 0;
+}
+.list-group + .panel-footer {
+ border-top-width: 0;
+}
+.panel > .table,
+.panel > .table-responsive > .table,
+.panel > .panel-collapse > .table {
+ margin-bottom: 0;
+}
+.panel > .table caption,
+.panel > .table-responsive > .table caption,
+.panel > .panel-collapse > .table caption {
+ padding-right: 15px;
+ padding-left: 15px;
+}
+.panel > .table:first-child,
+.panel > .table-responsive:first-child > .table:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
+ border-top-left-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
+ border-top-right-radius: 3px;
+}
+.panel > .table:last-child,
+.panel > .table-responsive:last-child > .table:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
+ border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
+ border-bottom-right-radius: 3px;
+}
+.panel > .panel-body + .table,
+.panel > .panel-body + .table-responsive,
+.panel > .table + .panel-body,
+.panel > .table-responsive + .panel-body {
+ border-top: 1px solid #ddd;
+}
+.panel > .table > tbody:first-child > tr:first-child th,
+.panel > .table > tbody:first-child > tr:first-child td {
+ border-top: 0;
+}
+.panel > .table-bordered,
+.panel > .table-responsive > .table-bordered {
+ border: 0;
+}
+.panel > .table-bordered > thead > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
+.panel > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-bordered > thead > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
+.panel > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-bordered > tfoot > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
+}
+.panel > .table-bordered > thead > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
+.panel > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-bordered > thead > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
+.panel > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-bordered > tfoot > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+}
+.panel > .table-bordered > thead > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
+.panel > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-bordered > thead > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
+.panel > .table-bordered > tbody > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
+ border-bottom: 0;
+}
+.panel > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-bordered > tfoot > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
+ border-bottom: 0;
+}
+.panel > .table-responsive {
+ margin-bottom: 0;
+ border: 0;
+}
+.panel-group {
+ margin-bottom: 20px;
+}
+.panel-group .panel {
+ margin-bottom: 0;
+ border-radius: 4px;
+}
+.panel-group .panel + .panel {
+ margin-top: 5px;
+}
+.panel-group .panel-heading {
+ border-bottom: 0;
+}
+.panel-group .panel-heading + .panel-collapse > .panel-body,
+.panel-group .panel-heading + .panel-collapse > .list-group {
+ border-top: 1px solid #ddd;
+}
+.panel-group .panel-footer {
+ border-top: 0;
+}
+.panel-group .panel-footer + .panel-collapse .panel-body {
+ border-bottom: 1px solid #ddd;
+}
+.panel-default {
+ border-color: #ddd;
+}
+.panel-default > .panel-heading {
+ color: #333;
+ background-color: #f5f5f5;
+ border-color: #ddd;
+}
+.panel-default > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #ddd;
+}
+.panel-default > .panel-heading .badge {
+ color: #f5f5f5;
+ background-color: #333;
+}
+.panel-default > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #ddd;
+}
+.panel-primary {
+ border-color: #337ab7;
+}
+.panel-primary > .panel-heading {
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+.panel-primary > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #337ab7;
+}
+.panel-primary > .panel-heading .badge {
+ color: #337ab7;
+ background-color: #fff;
+}
+.panel-primary > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #337ab7;
+}
+.panel-success {
+ border-color: #d6e9c6;
+}
+.panel-success > .panel-heading {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+.panel-success > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #d6e9c6;
+}
+.panel-success > .panel-heading .badge {
+ color: #dff0d8;
+ background-color: #3c763d;
+}
+.panel-success > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #d6e9c6;
+}
+.panel-info {
+ border-color: #bce8f1;
+}
+.panel-info > .panel-heading {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+.panel-info > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #bce8f1;
+}
+.panel-info > .panel-heading .badge {
+ color: #d9edf7;
+ background-color: #31708f;
+}
+.panel-info > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #bce8f1;
+}
+.panel-warning {
+ border-color: #faebcc;
+}
+.panel-warning > .panel-heading {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+.panel-warning > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #faebcc;
+}
+.panel-warning > .panel-heading .badge {
+ color: #fcf8e3;
+ background-color: #8a6d3b;
+}
+.panel-warning > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #faebcc;
+}
+.panel-danger {
+ border-color: #ebccd1;
+}
+.panel-danger > .panel-heading {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+.panel-danger > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #ebccd1;
+}
+.panel-danger > .panel-heading .badge {
+ color: #f2dede;
+ background-color: #a94442;
+}
+.panel-danger > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #ebccd1;
+}
+.embed-responsive {
+ position: relative;
+ display: block;
+ height: 0;
+ padding: 0;
+ overflow: hidden;
+}
+.embed-responsive .embed-responsive-item,
+.embed-responsive iframe,
+.embed-responsive embed,
+.embed-responsive object,
+.embed-responsive video {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border: 0;
+}
+.embed-responsive-16by9 {
+ padding-bottom: 56.25%;
+}
+.embed-responsive-4by3 {
+ padding-bottom: 75%;
+}
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+}
+.well blockquote {
+ border-color: #ddd;
+ border-color: rgba(0, 0, 0, .15);
+}
+.well-lg {
+ padding: 24px;
+ border-radius: 6px;
+}
+.well-sm {
+ padding: 9px;
+ border-radius: 3px;
+}
+.close {
+ float: right;
+ font-size: 21px;
+ font-weight: bold;
+ line-height: 1;
+ color: #000;
+ text-shadow: 0 1px 0 #fff;
+ filter: alpha(opacity=20);
+ opacity: .2;
+}
+.close:hover,
+.close:focus {
+ color: #000;
+ text-decoration: none;
+ cursor: pointer;
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+button.close {
+ -webkit-appearance: none;
+ padding: 0;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+}
+.modal-open {
+ overflow: hidden;
+}
+.modal {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1050;
+ display: none;
+ overflow: hidden;
+ -webkit-overflow-scrolling: touch;
+ outline: 0;
+}
+.modal.fade .modal-dialog {
+ -webkit-transition: -webkit-transform .3s ease-out;
+ -o-transition: -o-transform .3s ease-out;
+ transition: transform .3s ease-out;
+ -webkit-transform: translate(0, -25%);
+ -ms-transform: translate(0, -25%);
+ -o-transform: translate(0, -25%);
+ transform: translate(0, -25%);
+}
+.modal.in .modal-dialog {
+ -webkit-transform: translate(0, 0);
+ -ms-transform: translate(0, 0);
+ -o-transform: translate(0, 0);
+ transform: translate(0, 0);
+}
+.modal-open .modal {
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: 10px;
+}
+.modal-content {
+ position: relative;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #999;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ outline: 0;
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+ box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+}
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ background-color: #000;
+}
+.modal-backdrop.fade {
+ filter: alpha(opacity=0);
+ opacity: 0;
+}
+.modal-backdrop.in {
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+.modal-header {
+ padding: 15px;
+ border-bottom: 1px solid #e5e5e5;
+}
+.modal-header .close {
+ margin-top: -2px;
+}
+.modal-title {
+ margin: 0;
+ line-height: 1.42857143;
+}
+.modal-body {
+ position: relative;
+ padding: 15px;
+}
+.modal-footer {
+ padding: 15px;
+ text-align: right;
+ border-top: 1px solid #e5e5e5;
+}
+.modal-footer .btn + .btn {
+ margin-bottom: 0;
+ margin-left: 5px;
+}
+.modal-footer .btn-group .btn + .btn {
+ margin-left: -1px;
+}
+.modal-footer .btn-block + .btn-block {
+ margin-left: 0;
+}
+.modal-scrollbar-measure {
+ position: absolute;
+ top: -9999px;
+ width: 50px;
+ height: 50px;
+ overflow: scroll;
+}
+@media (min-width: 768px) {
+ .modal-dialog {
+ width: 600px;
+ margin: 30px auto;
+ }
+ .modal-content {
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+ box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+ }
+ .modal-sm {
+ width: 300px;
+ }
+}
+@media (min-width: 992px) {
+ .modal-lg {
+ width: 900px;
+ }
+}
+.tooltip {
+ position: absolute;
+ z-index: 1070;
+ display: block;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 12px;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1.42857143;
+ text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ word-wrap: normal;
+ white-space: normal;
+ filter: alpha(opacity=0);
+ opacity: 0;
+
+ line-break: auto;
+}
+.tooltip.in {
+ filter: alpha(opacity=90);
+ opacity: .9;
+}
+.tooltip.top {
+ padding: 5px 0;
+ margin-top: -3px;
+}
+.tooltip.right {
+ padding: 0 5px;
+ margin-left: 3px;
+}
+.tooltip.bottom {
+ padding: 5px 0;
+ margin-top: 3px;
+}
+.tooltip.left {
+ padding: 0 5px;
+ margin-left: -3px;
+}
+.tooltip-inner {
+ max-width: 200px;
+ padding: 3px 8px;
+ color: #fff;
+ text-align: center;
+ background-color: #000;
+ border-radius: 4px;
+}
+.tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+.tooltip.top .tooltip-arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+.tooltip.top-left .tooltip-arrow {
+ right: 5px;
+ bottom: 0;
+ margin-bottom: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+.tooltip.top-right .tooltip-arrow {
+ bottom: 0;
+ left: 5px;
+ margin-bottom: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+.tooltip.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-width: 5px 5px 5px 0;
+ border-right-color: #000;
+}
+.tooltip.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-width: 5px 0 5px 5px;
+ border-left-color: #000;
+}
+.tooltip.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+.tooltip.bottom-left .tooltip-arrow {
+ top: 0;
+ right: 5px;
+ margin-top: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+.tooltip.bottom-right .tooltip-arrow {
+ top: 0;
+ left: 5px;
+ margin-top: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1060;
+ display: none;
+ max-width: 276px;
+ padding: 1px;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1.42857143;
+ text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ word-wrap: normal;
+ white-space: normal;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+ box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+
+ line-break: auto;
+}
+.popover.top {
+ margin-top: -10px;
+}
+.popover.right {
+ margin-left: 10px;
+}
+.popover.bottom {
+ margin-top: 10px;
+}
+.popover.left {
+ margin-left: -10px;
+}
+.popover-title {
+ padding: 8px 14px;
+ margin: 0;
+ font-size: 14px;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ border-radius: 5px 5px 0 0;
+}
+.popover-content {
+ padding: 9px 14px;
+}
+.popover > .arrow,
+.popover > .arrow:after {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+.popover > .arrow {
+ border-width: 11px;
+}
+.popover > .arrow:after {
+ content: "";
+ border-width: 10px;
+}
+.popover.top > .arrow {
+ bottom: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-color: #999;
+ border-top-color: rgba(0, 0, 0, .25);
+ border-bottom-width: 0;
+}
+.popover.top > .arrow:after {
+ bottom: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-color: #fff;
+ border-bottom-width: 0;
+}
+.popover.right > .arrow {
+ top: 50%;
+ left: -11px;
+ margin-top: -11px;
+ border-right-color: #999;
+ border-right-color: rgba(0, 0, 0, .25);
+ border-left-width: 0;
+}
+.popover.right > .arrow:after {
+ bottom: -10px;
+ left: 1px;
+ content: " ";
+ border-right-color: #fff;
+ border-left-width: 0;
+}
+.popover.bottom > .arrow {
+ top: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-width: 0;
+ border-bottom-color: #999;
+ border-bottom-color: rgba(0, 0, 0, .25);
+}
+.popover.bottom > .arrow:after {
+ top: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-width: 0;
+ border-bottom-color: #fff;
+}
+.popover.left > .arrow {
+ top: 50%;
+ right: -11px;
+ margin-top: -11px;
+ border-right-width: 0;
+ border-left-color: #999;
+ border-left-color: rgba(0, 0, 0, .25);
+}
+.popover.left > .arrow:after {
+ right: 1px;
+ bottom: -10px;
+ content: " ";
+ border-right-width: 0;
+ border-left-color: #fff;
+}
+.carousel {
+ position: relative;
+}
+.carousel-inner {
+ position: relative;
+ width: 100%;
+ overflow: hidden;
+}
+.carousel-inner > .item {
+ position: relative;
+ display: none;
+ -webkit-transition: .6s ease-in-out left;
+ -o-transition: .6s ease-in-out left;
+ transition: .6s ease-in-out left;
+}
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+ line-height: 1;
+}
+@media all and (transform-3d), (-webkit-transform-3d) {
+ .carousel-inner > .item {
+ -webkit-transition: -webkit-transform .6s ease-in-out;
+ -o-transition: -o-transform .6s ease-in-out;
+ transition: transform .6s ease-in-out;
+
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-perspective: 1000px;
+ perspective: 1000px;
+ }
+ .carousel-inner > .item.next,
+ .carousel-inner > .item.active.right {
+ left: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+ .carousel-inner > .item.prev,
+ .carousel-inner > .item.active.left {
+ left: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+ .carousel-inner > .item.next.left,
+ .carousel-inner > .item.prev.right,
+ .carousel-inner > .item.active {
+ left: 0;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+.carousel-inner > .active,
+.carousel-inner > .next,
+.carousel-inner > .prev {
+ display: block;
+}
+.carousel-inner > .active {
+ left: 0;
+}
+.carousel-inner > .next,
+.carousel-inner > .prev {
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.carousel-inner > .next {
+ left: 100%;
+}
+.carousel-inner > .prev {
+ left: -100%;
+}
+.carousel-inner > .next.left,
+.carousel-inner > .prev.right {
+ left: 0;
+}
+.carousel-inner > .active.left {
+ left: -100%;
+}
+.carousel-inner > .active.right {
+ left: 100%;
+}
+.carousel-control {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 15%;
+ font-size: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+ background-color: rgba(0, 0, 0, 0);
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+.carousel-control.left {
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
+ background-repeat: repeat-x;
+}
+.carousel-control.right {
+ right: 0;
+ left: auto;
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
+ background-repeat: repeat-x;
+}
+.carousel-control:hover,
+.carousel-control:focus {
+ color: #fff;
+ text-decoration: none;
+ filter: alpha(opacity=90);
+ outline: 0;
+ opacity: .9;
+}
+.carousel-control .icon-prev,
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-left,
+.carousel-control .glyphicon-chevron-right {
+ position: absolute;
+ top: 50%;
+ z-index: 5;
+ display: inline-block;
+ margin-top: -10px;
+}
+.carousel-control .icon-prev,
+.carousel-control .glyphicon-chevron-left {
+ left: 50%;
+ margin-left: -10px;
+}
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-right {
+ right: 50%;
+ margin-right: -10px;
+}
+.carousel-control .icon-prev,
+.carousel-control .icon-next {
+ width: 20px;
+ height: 20px;
+ font-family: serif;
+ line-height: 1;
+}
+.carousel-control .icon-prev:before {
+ content: '\2039';
+}
+.carousel-control .icon-next:before {
+ content: '\203a';
+}
+.carousel-indicators {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ z-index: 15;
+ width: 60%;
+ padding-left: 0;
+ margin-left: -30%;
+ text-align: center;
+ list-style: none;
+}
+.carousel-indicators li {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin: 1px;
+ text-indent: -999px;
+ cursor: pointer;
+ background-color: #000 \9;
+ background-color: rgba(0, 0, 0, 0);
+ border: 1px solid #fff;
+ border-radius: 10px;
+}
+.carousel-indicators .active {
+ width: 12px;
+ height: 12px;
+ margin: 0;
+ background-color: #fff;
+}
+.carousel-caption {
+ position: absolute;
+ right: 15%;
+ bottom: 20px;
+ left: 15%;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+}
+.carousel-caption .btn {
+ text-shadow: none;
+}
+@media screen and (min-width: 768px) {
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-prev,
+ .carousel-control .icon-next {
+ width: 30px;
+ height: 30px;
+ margin-top: -10px;
+ font-size: 30px;
+ }
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .icon-prev {
+ margin-left: -10px;
+ }
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-next {
+ margin-right: -10px;
+ }
+ .carousel-caption {
+ right: 20%;
+ left: 20%;
+ padding-bottom: 30px;
+ }
+ .carousel-indicators {
+ bottom: 20px;
+ }
+}
+.clearfix:before,
+.clearfix:after,
+.dl-horizontal dd:before,
+.dl-horizontal dd:after,
+.container:before,
+.container:after,
+.container-fluid:before,
+.container-fluid:after,
+.row:before,
+.row:after,
+.form-horizontal .form-group:before,
+.form-horizontal .form-group:after,
+.btn-toolbar:before,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:before,
+.btn-group-vertical > .btn-group:after,
+.nav:before,
+.nav:after,
+.navbar:before,
+.navbar:after,
+.navbar-header:before,
+.navbar-header:after,
+.navbar-collapse:before,
+.navbar-collapse:after,
+.pager:before,
+.pager:after,
+.panel-body:before,
+.panel-body:after,
+.modal-header:before,
+.modal-header:after,
+.modal-footer:before,
+.modal-footer:after {
+ display: table;
+ content: " ";
+}
+.clearfix:after,
+.dl-horizontal dd:after,
+.container:after,
+.container-fluid:after,
+.row:after,
+.form-horizontal .form-group:after,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:after,
+.nav:after,
+.navbar:after,
+.navbar-header:after,
+.navbar-collapse:after,
+.pager:after,
+.panel-body:after,
+.modal-header:after,
+.modal-footer:after {
+ clear: both;
+}
+.center-block {
+ display: block;
+ margin-right: auto;
+ margin-left: auto;
+}
+.pull-right {
+ float: right !important;
+}
+.pull-left {
+ float: left !important;
+}
+.hide {
+ display: none !important;
+}
+.show {
+ display: block !important;
+}
+.invisible {
+ visibility: hidden;
+}
+.text-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+.hidden {
+ display: none !important;
+}
+.affix {
+ position: fixed;
+}
+@-ms-viewport {
+ width: device-width;
+}
+.visible-xs,
+.visible-sm,
+.visible-md,
+.visible-lg {
+ display: none !important;
+}
+.visible-xs-block,
+.visible-xs-inline,
+.visible-xs-inline-block,
+.visible-sm-block,
+.visible-sm-inline,
+.visible-sm-inline-block,
+.visible-md-block,
+.visible-md-inline,
+.visible-md-inline-block,
+.visible-lg-block,
+.visible-lg-inline,
+.visible-lg-inline-block {
+ display: none !important;
+}
+@media (max-width: 767px) {
+ .visible-xs {
+ display: block !important;
+ }
+ table.visible-xs {
+ display: table !important;
+ }
+ tr.visible-xs {
+ display: table-row !important;
+ }
+ th.visible-xs,
+ td.visible-xs {
+ display: table-cell !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-block {
+ display: block !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-inline {
+ display: inline !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm {
+ display: block !important;
+ }
+ table.visible-sm {
+ display: table !important;
+ }
+ tr.visible-sm {
+ display: table-row !important;
+ }
+ th.visible-sm,
+ td.visible-sm {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-block {
+ display: block !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md {
+ display: block !important;
+ }
+ table.visible-md {
+ display: table !important;
+ }
+ tr.visible-md {
+ display: table-row !important;
+ }
+ th.visible-md,
+ td.visible-md {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-block {
+ display: block !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg {
+ display: block !important;
+ }
+ table.visible-lg {
+ display: table !important;
+ }
+ tr.visible-lg {
+ display: table-row !important;
+ }
+ th.visible-lg,
+ td.visible-lg {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-block {
+ display: block !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (max-width: 767px) {
+ .hidden-xs {
+ display: none !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-sm {
+ display: none !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-md {
+ display: none !important;
+ }
+}
+@media (min-width: 1200px) {
+ .hidden-lg {
+ display: none !important;
+ }
+}
+.visible-print {
+ display: none !important;
+}
+@media print {
+ .visible-print {
+ display: block !important;
+ }
+ table.visible-print {
+ display: table !important;
+ }
+ tr.visible-print {
+ display: table-row !important;
+ }
+ th.visible-print,
+ td.visible-print {
+ display: table-cell !important;
+ }
+}
+.visible-print-block {
+ display: none !important;
+}
+@media print {
+ .visible-print-block {
+ display: block !important;
+ }
+}
+.visible-print-inline {
+ display: none !important;
+}
+@media print {
+ .visible-print-inline {
+ display: inline !important;
+ }
+}
+.visible-print-inline-block {
+ display: none !important;
+}
+@media print {
+ .visible-print-inline-block {
+ display: inline-block !important;
+ }
+}
+@media print {
+ .hidden-print {
+ display: none !important;
+ }
+}
diff --git a/trunk/src/AppBundle/Resources/public/css/bootstrap-select-1.12.0.css b/trunk/src/AppBundle/Resources/public/css/bootstrap-select-1.12.0.css
new file mode 100644
index 00000000..ad255f25
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/css/bootstrap-select-1.12.0.css
@@ -0,0 +1,292 @@
+/*!
+ * Bootstrap-select v1.12.0 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2016 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+select.bs-select-hidden,
+select.selectpicker {
+ display: none !important;
+}
+.bootstrap-select {
+ width: 220px \0;
+ /*IE9 and below*/
+}
+.bootstrap-select > .dropdown-toggle {
+ width: 100%;
+ padding-right: 25px;
+ z-index: 1;
+}
+.bootstrap-select > .dropdown-toggle.bs-placeholder,
+.bootstrap-select > .dropdown-toggle.bs-placeholder:hover,
+.bootstrap-select > .dropdown-toggle.bs-placeholder:focus,
+.bootstrap-select > .dropdown-toggle.bs-placeholder:active {
+ color: #999;
+}
+.bootstrap-select > select {
+ position: absolute !important;
+ bottom: 0;
+ left: 50%;
+ display: block !important;
+ width: 0.5px !important;
+ height: 100% !important;
+ padding: 0 !important;
+ opacity: 0 !important;
+ border: none;
+}
+.bootstrap-select > select.mobile-device {
+ top: 0;
+ left: 0;
+ display: block !important;
+ width: 100% !important;
+ z-index: 2;
+}
+.has-error .bootstrap-select .dropdown-toggle,
+.error .bootstrap-select .dropdown-toggle {
+ border-color: #b94a48;
+}
+.bootstrap-select.fit-width {
+ width: auto !important;
+}
+.bootstrap-select:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) {
+ width: 220px;
+}
+.bootstrap-select .dropdown-toggle:focus {
+ outline: thin dotted #333333 !important;
+ outline: 5px auto -webkit-focus-ring-color !important;
+ outline-offset: -2px;
+}
+.bootstrap-select.form-control {
+ margin-bottom: 0;
+ padding: 0;
+ border: none;
+}
+.bootstrap-select.form-control:not([class*="col-"]) {
+ width: 100%;
+}
+.bootstrap-select.form-control.input-group-btn {
+ z-index: auto;
+}
+.bootstrap-select.form-control.input-group-btn:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+.bootstrap-select.btn-group:not(.input-group-btn),
+.bootstrap-select.btn-group[class*="col-"] {
+ float: none;
+ display: inline-block;
+ margin-left: 0;
+}
+.bootstrap-select.btn-group.dropdown-menu-right,
+.bootstrap-select.btn-group[class*="col-"].dropdown-menu-right,
+.row .bootstrap-select.btn-group[class*="col-"].dropdown-menu-right {
+ float: right;
+}
+.form-inline .bootstrap-select.btn-group,
+.form-horizontal .bootstrap-select.btn-group,
+.form-group .bootstrap-select.btn-group {
+ margin-bottom: 0;
+}
+.form-group-lg .bootstrap-select.btn-group.form-control,
+.form-group-sm .bootstrap-select.btn-group.form-control {
+ padding: 0;
+}
+.form-inline .bootstrap-select.btn-group .form-control {
+ width: 100%;
+}
+.bootstrap-select.btn-group.disabled,
+.bootstrap-select.btn-group > .disabled {
+ cursor: not-allowed;
+}
+.bootstrap-select.btn-group.disabled:focus,
+.bootstrap-select.btn-group > .disabled:focus {
+ outline: none !important;
+}
+.bootstrap-select.btn-group.bs-container {
+ position: absolute;
+ height: 0 !important;
+ padding: 0 !important;
+}
+.bootstrap-select.btn-group.bs-container .dropdown-menu {
+ z-index: 1060;
+}
+.bootstrap-select.btn-group .dropdown-toggle .filter-option {
+ display: inline-block;
+ overflow: hidden;
+ width: 100%;
+ text-align: left;
+}
+.bootstrap-select.btn-group .dropdown-toggle .caret {
+ position: absolute;
+ top: 50%;
+ right: 12px;
+ margin-top: -2px;
+ vertical-align: middle;
+}
+.bootstrap-select.btn-group[class*="col-"] .dropdown-toggle {
+ width: 100%;
+}
+.bootstrap-select.btn-group .dropdown-menu {
+ min-width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.bootstrap-select.btn-group .dropdown-menu.inner {
+ position: static;
+ float: none;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ border-radius: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+.bootstrap-select.btn-group .dropdown-menu li {
+ position: relative;
+}
+.bootstrap-select.btn-group .dropdown-menu li.active small {
+ color: #fff;
+}
+.bootstrap-select.btn-group .dropdown-menu li.disabled a {
+ cursor: not-allowed;
+}
+.bootstrap-select.btn-group .dropdown-menu li a {
+ cursor: pointer;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.bootstrap-select.btn-group .dropdown-menu li a.opt {
+ position: relative;
+ padding-left: 2.25em;
+}
+.bootstrap-select.btn-group .dropdown-menu li a span.check-mark {
+ display: none;
+}
+.bootstrap-select.btn-group .dropdown-menu li a span.text {
+ display: inline-block;
+}
+.bootstrap-select.btn-group .dropdown-menu li small {
+ padding-left: 0.5em;
+}
+.bootstrap-select.btn-group .dropdown-menu .notify {
+ position: absolute;
+ bottom: 5px;
+ width: 96%;
+ margin: 0 2%;
+ min-height: 26px;
+ padding: 3px 5px;
+ background: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+ pointer-events: none;
+ opacity: 0.9;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.bootstrap-select.btn-group .no-results {
+ padding: 3px;
+ background: #f5f5f5;
+ margin: 0 5px;
+ white-space: nowrap;
+}
+.bootstrap-select.btn-group.fit-width .dropdown-toggle .filter-option {
+ position: static;
+}
+.bootstrap-select.btn-group.fit-width .dropdown-toggle .caret {
+ position: static;
+ top: auto;
+ margin-top: -1px;
+}
+.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark {
+ position: absolute;
+ display: inline-block;
+ right: 15px;
+ margin-top: 5px;
+}
+.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text {
+ margin-right: 34px;
+}
+.bootstrap-select.show-menu-arrow.open > .dropdown-toggle {
+ z-index: 1061;
+}
+.bootstrap-select.show-menu-arrow .dropdown-toggle:before {
+ content: '';
+ border-left: 7px solid transparent;
+ border-right: 7px solid transparent;
+ border-bottom: 7px solid rgba(204, 204, 204, 0.2);
+ position: absolute;
+ bottom: -4px;
+ left: 9px;
+ display: none;
+}
+.bootstrap-select.show-menu-arrow .dropdown-toggle:after {
+ content: '';
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ border-bottom: 6px solid white;
+ position: absolute;
+ bottom: -4px;
+ left: 10px;
+ display: none;
+}
+.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before {
+ bottom: auto;
+ top: -3px;
+ border-top: 7px solid rgba(204, 204, 204, 0.2);
+ border-bottom: 0;
+}
+.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after {
+ bottom: auto;
+ top: -3px;
+ border-top: 6px solid white;
+ border-bottom: 0;
+}
+.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before {
+ right: 12px;
+ left: auto;
+}
+.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after {
+ right: 13px;
+ left: auto;
+}
+.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:before,
+.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:after {
+ display: block;
+}
+.bs-searchbox,
+.bs-actionsbox,
+.bs-donebutton {
+ padding: 4px 8px;
+}
+.bs-actionsbox {
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.bs-actionsbox .btn-group button {
+ width: 50%;
+}
+.bs-donebutton {
+ float: left;
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.bs-donebutton .btn-group button {
+ width: 100%;
+}
+.bs-searchbox + .bs-actionsbox {
+ padding: 0 8px 4px;
+}
+.bs-searchbox .form-control {
+ margin-bottom: 0;
+ width: 100%;
+ float: none;
+}
diff --git a/trunk/src/AppBundle/Resources/public/css/custom.css b/trunk/src/AppBundle/Resources/public/css/custom.css
new file mode 100644
index 00000000..55590af5
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/css/custom.css
@@ -0,0 +1,5394 @@
+@charset "UTF-8";
+/*
+
+0. =BOOTSTRAP FRAMEWORK REFERENCE IMPORTS
+
+In "style.less" we reference some of Bootstrap's .less files in order to take advantage of their classes and mixins.
+We also reference the "theme_variables.less" in order to override the original variables and make our custom theme.
+A customized "theme_custom_bootstrap.css" is also loaded by the theme in a precompiled minified css version.
+=================================================================
+*/
+/*
+ 1) FONTS
+===============================================================
+*/
+/* ==================================================================
+ FONTS
+================================================================== */
+@import url(http://fonts.googleapis.com/css?family=Raleway:400,100,200,300,500,600,700,800,900);
+@import url(https://fonts.googleapis.com/css?family=Oswald:400,700);
+@import url(http://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css);
+@import url(font-awesome-4.7.0.css);
+@import url(bootstrap-select-1.12.0.css);
+@import url(owl-carousel.css);
+@import url(prettyPhoto.css);
+/*
+ 2) RESET
+===============================================================
+*/
+/* ==================================================================
+ RESET
+================================================================== */
+html,
+body,
+div,
+span,
+applet,
+object,
+iframe,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+p,
+blockquote,
+pre,
+a,
+abbr,
+acronym,
+address,
+big,
+cite,
+code,
+del,
+dfn,
+em,
+img,
+ins,
+kbd,
+q,
+s,
+samp,
+small,
+strike,
+strong,
+sub,
+sup,
+tt,
+var,
+b,
+u,
+i,
+center,
+dl,
+dt,
+dd,
+ol,
+ul,
+li,
+fieldset,
+form,
+label,
+legend,
+table,
+caption,
+tbody,
+tfoot,
+thead,
+tr,
+th,
+td,
+article,
+aside,
+canvas,
+details,
+embed,
+figure,
+figcaption,
+footer,
+header,
+hgroup,
+menu,
+nav,
+output,
+ruby,
+section,
+summary,
+time,
+mark,
+audio,
+video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+menu,
+nav,
+section {
+ display: block;
+}
+body {
+ line-height: 1;
+}
+blockquote,
+q {
+ quotes: none;
+}
+blockquote:before,
+blockquote:after,
+q:before,
+q:after {
+ content: '';
+ content: none;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+strong {
+ color: #444;
+}
+/*
+ 3) SKELETON
+===============================================================
+*/
+/* ==================================================================
+ SKELETON
+================================================================== */
+@-webkit-viewport {
+ width: device-width;
+}
+@-moz-viewport {
+ width: device-width;
+}
+@-ms-viewport {
+ width: device-width;
+}
+@-o-viewport {
+ width: device-width;
+}
+@viewport {
+ width: device-width;
+}
+body {
+ color: #444444;
+ font-size: 15px;
+ font-family: 'Raleway', sans-serif;
+ font-style: normal;
+ font-weight: 400;
+ line-height: 26px;
+ background: #ffffff;
+ padding: 0;
+ margin: 0;
+ height: 100%;
+ -webkit-font-smoothing: antialiased;
+ -webkit-text-size-adjust: 100%;
+ overflow-x: hidden;
+ white-space: normal;
+ position: relative;
+}
+input,
+select,
+textarea {
+ font-size: 15px;
+ font-style: normal;
+ font-weight: 300;
+}
+.sound {
+ border: 1px solid #fff;
+ width: 100%;
+}
+.alignleft {
+ float: left;
+ margin: 5px 20px 5px 0;
+}
+.alignright {
+ float: right;
+ margin: 20px 0 20px 20px;
+}
+.aligncenter {
+ margin-left: auto;
+ margin-right: auto;
+ display: block;
+ clear: both;
+}
+blockquote {
+ border: 0;
+ color: #444444;
+ display: block;
+ margin: 10px 0;
+ line-height: 2;
+ font-size: 18px;
+ padding: 20px;
+ font-weight: normal;
+ font-style: italic;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-weight: normal;
+ margin-bottom: 20px;
+ color: #777777;
+ line-height: 1.2em;
+}
+h1 {
+ font-size: 25px;
+ position: relative;
+ padding-bottom: 8px;
+ border-bottom: 1px solid #ffc926;
+}
+h2 {
+ font-size: 18px;
+ font-weight: 700;
+ position: relative;
+}
+h3 {
+ font-size: 18px;
+ color: #e5aa30;
+ position: relative;
+ padding-bottom: 8px;
+ padding-top: 8px;
+ font-weight: 500;
+ border-bottom: 1px solid #919191;
+}
+h4 {
+ font-size: 20px;
+}
+h5 {
+ font-size: 18px;
+}
+h6 {
+ font-size: 17px;
+ font-weight: 700;
+}
+p {
+ margin-bottom: 20px;
+}
+a,
+a > * {
+ color: #444444;
+ text-decoration: none;
+}
+a:hover,
+a > *:hover,
+a:focus {
+ text-decoration: none;
+ outline: 0;
+ color: #444444;
+}
+em {
+ font-style: italic;
+}
+strong {
+ font-weight: 700;
+}
+p.lead {
+ font-size: 16px;
+ padding: 0;
+ letter-spacing: 0.6px;
+ line-height: 1.8;
+}
+::-moz-selection {
+ color: #fff;
+ text-shadow: none;
+ background: #444444;
+}
+:selection {
+ color: #fff;
+ text-shadow: none;
+ background: #444444;
+}
+.first {
+ clear: both;
+}
+.last {
+ margin-right: 0;
+}
+.successful {
+ margin-bottom: 20px;
+ display: block;
+ position: relative;
+}
+.btn {
+ text-transform: uppercase;
+ border-radius: 0;
+ font-weight: normal;
+ padding: 12px 12px;
+}
+.btn-primary,
+.btn-lg {
+ font-size: 16px;
+ line-height: 1;
+ font-weight: 600;
+}
+.btn-lg,
+.btn-group-lg > .btn {
+ padding: 10px 27px;
+}
+.btn-white,
+.btn-white:hover,
+.btn-white:focus,
+.btn-white.focus,
+.btn-white:active,
+.btn-white.active,
+.open > .dropdown-toggle.btn-white {
+ color: #777777;
+ background-color: #ffffff;
+ border-color: #ffffff;
+}
+.btn-default,
+.btn-primary:hover,
+.btn-primary:focus,
+.btn-primary.focus,
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+ color: #fff;
+ background-color: #777777;
+ border-color: #777777;
+}
+.btn-default,
+.btn-primary:hover,
+.btn-primary:focus,
+.btn-primary.focus,
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+ color: #fff;
+ background-color: #777777;
+ border-color: #777777;
+}
+.topbar-social li,
+.post-media img,
+.flickrwidget img,
+.social-footer a i,
+a,
+.btn {
+ -webkit-transition: all 0.3s ease-in-out;
+ -moz-transition: all 0.3s ease-in-out;
+ -ms-transition: all 0.3s ease-in-out;
+ -o-transition: all 0.3s ease-in-out;
+ transition: all 0.3s ease-in-out;
+}
+.border-radius {
+ -webkit-border-radius: 120px;
+ -moz-border-radius: 120px;
+ border-radius: 120px;
+}
+.btn-white.btn-normal,
+.btn-default.btn-normal,
+.btn-primary.btn-normal {
+ font-size: 15px !important;
+ height: 45px;
+ line-height: 21px;
+ padding: 13px 30px !important;
+}
+.btn-white.btn-lg,
+.btn-default.btn-lg,
+.btn-primary.btn-lg {
+ font-size: 15px !important;
+ height: 50px !important;
+ line-height: 20px;
+ padding: 16px 45px !important;
+}
+.btn-default.btn-sm,
+.btn-primary.btn-sm,
+.btn-white.btn-sm {
+ font-size: 13px !important;
+ height: 35px;
+ line-height: 17px;
+ padding: 9px 17px !important;
+}
+.btn-primary i,
+.btn-default i {
+ color: #ffffff;
+}
+.btn-image {
+ position: relative;
+}
+.btn-image img {
+ position: relative;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ width: 100%;
+ right: 0;
+}
+.btn-image span {
+ top: 50%;
+ position: absolute;
+ margin: -20px auto;
+ left: 0;
+ right: 0;
+ text-align: center;
+}
+.googlemap {
+ width: 100%;
+ border: 1px solid #ffffff;
+}
+.map {
+ pointer-events: none;
+}
+.dropdown .btn-white {
+ border: 1px solid #dddddd;
+ font-family: "Raleway";
+ font-weight: 500;
+ background: #ffffff !important;
+ color: #444444 !important;
+ box-shadow: none !important;
+ font-size: 15px;
+ font-weight: 300;
+ text-transform: none;
+}
+.dropdown .btn-white .fa {
+ font-size: 24px;
+}
+.dropdown .btn-white {
+ padding-right: 35px;
+}
+.input-group-addon {
+ background: #ffffff !important;
+ border-radius: 0 !important;
+}
+.bootstrap-select.btn-group .dropdown-menu li a span.text {
+ color: #3b3b3b !important;
+}
+#loader {
+ overflow-x: hidden;
+ overflow-y: hidden;
+ vertical-align: middle;
+ background-color: #fbfbfb;
+ position: fixed;
+ display: table;
+ width: 100%;
+ top: 0;
+ height: 100%;
+ min-height: 100%;
+ z-index: 99999;
+}
+.loader-container {
+ position: relative;
+ display: table-cell;
+ vertical-align: middle;
+ z-index: 12;
+ text-align: center;
+}
+.loader-back-logo {
+ margin-top: -10px;
+ font-size: 26px;
+}
+.loader {
+ margin-top: -20px;
+ margin-left: 0px;
+}
+/*
+ 4) BLOG
+===============================================================
+*/
+/*
+ 5) DEALS
+===============================================================
+*/
+/* ==================================================================
+ DEALS
+================================================================== */
+.deals-wrapper {
+ background: #ddd;
+ position: relative;
+ display: block;
+}
+.post-media {
+ width: 100%;
+ display: block;
+ overflow: hidden;
+ position: relative;
+}
+.deals-count {
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ padding: 10px 15px;
+ top: 0;
+ background-color: rgba(0, 0, 0, 0.7);
+ left: auto;
+}
+.deals-count .dash .digit {
+ font-size: 21px;
+ padding: 0;
+ letter-spacing: 0;
+ width: auto;
+ color: #ffffff;
+ background-color: transparent;
+ display: inline-block;
+ margin: 0;
+ text-align: left;
+}
+.deals-count .dash_title {
+ text-align: left;
+ font-size: 11px;
+ color: #ffffff;
+ line-height: 5;
+}
+.deals-count .dash {
+ height: 25%;
+}
+/*
+ 6) HOTELS
+===============================================================
+*/
+/* ==================================================================
+ travelS
+================================================================== */
+.leave-a-feedback,
+.review-total {
+ background: #eeeeee;
+ padding: 26px;
+ width: 100%;
+}
+.leave-a-feedback {
+ margin-bottom: 60px;
+}
+.leave-a-feedback h6 {
+ padding: 0;
+ margin: 0;
+}
+.review-list h5 {
+ display: inline-block;
+ font-size: 13px;
+ min-width: 140px;
+}
+.travel-icon-list {
+ font-size: 15px;
+ font-weight: 400;
+}
+.icon-container {
+ width: 37px;
+ height: 37px;
+ line-height: 37px;
+ margin-right: 10px;
+ display: inline-block;
+ text-align: center;
+ font-size: 18px;
+}
+.border-bottom2 {
+ border-bottom: 1px solid #eeeeee;
+ margin-bottom: 22px;
+ padding: 0;
+}
+.travel-list {
+ margin: 60px 0;
+}
+.travel-list h5 {
+ padding-top: 10px;
+}
+.travel-list h5 span {
+ font-size: 13px;
+}
+.list-style-travel {
+ padding-top: 30px;
+}
+.travel-list p {
+ font-size: 15px;
+ margin: 10px 0 5px;
+ font-weight: bold;
+}
+.travel-list .lead {
+ font-weight: 300;
+ line-height: 1.4;
+ margin: 0;
+ font-size: 13px;
+ font-style: italic;
+}
+.selectmini .bootstrap-select > .btn {
+ width: auto;
+}
+.selectmini .bootstrap-select > .btn .dropdown-menu {
+ max-width: 80px !important;
+}
+.selectmini .bootstrap-select.btn-group .dropdown-menu {
+ left: -2px;
+ min-width: 70px;
+ padding: 0 !important;
+}
+.bootstrap-select.btn-group .dropdown-menu {
+ padding: 0;
+}
+.bookform {
+ overflow: visible;
+}
+.container-form {
+ background-color: rgba(255, 255, 255, 0.9);
+ padding: 0;
+ box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.4);
+}
+.bookform .form-control {
+ width: 100%;
+}
+.input-group .form-control {
+ border-right: 0;
+}
+.bookform .btn {
+ height: 55px;
+ padding-top: 10px;
+ padding-left: 40px;
+ padding-right: 40px;
+ font-weight: 600;
+}
+.bookform .btn i {
+ font-size: 24px;
+}
+.travel-title {
+ padding-bottom: 30px;
+}
+.travel-title hr {
+ width: 35px;
+ border-width: 1px;
+ width: 100%;
+}
+.travel-title .left {
+ margin-left: 0;
+}
+.travel-widget {
+ position: relative;
+ display: block;
+ overflow: hidden;
+ margin: 30px 0 0;
+}
+.travel-widget p {
+ font-weight: 600;
+ margin-bottom: 10px;
+}
+.travel-widget small {
+ display: list-item;
+ font-size: 13px;
+ list-style: inside none disc;
+}
+.travel-wrapper .rating {
+ font-size: 15px;
+ display: block;
+ position: relative;
+ margin-bottom: 15px;
+}
+.travel-wrapper .post-title {
+ margin-top: 30px;
+}
+.travel-wrapper .post-title a {
+ color: #444;
+}
+.travel-wrapper {
+ float: left;
+ width: 100%;
+ margin-bottom: 15px;
+ border: 1px solid #c3c3c3;
+}
+.travel-wrapper .item {
+ cursor: pointer;
+}
+.travel-wrapper .box_mid {
+ line-height: 1.4em;
+ padding-top: 10px;
+ padding-right: 10px;
+ padding-left: 10px;
+ padding-bottom: 10px;
+}
+.travel-wrapper h5 {
+ font-weight: 700;
+}
+.travel-wrapper .item:hover .item-img img {
+ -moz-transform: scale(1.1, 1.1);
+ -ms-transform: scale(1.1, 1.1);
+ -o-transform: scale(1.1, 1.1);
+ -webkit-transform: scale(1.1, 1.1);
+ transform: scale(1.1, 1.1);
+}
+.travel-wrapper .item .item-img img {
+ width: 100%;
+ -moz-transition: all 0.3s ease;
+ -o-transition: all 0.3s ease;
+ -webkit-transition: all 0.3s ease;
+ transition: all 0.3s ease;
+ -moz-transform: scale(1, 1);
+ -ms-transform: scale(1, 1);
+ -o-transform: scale(1, 1);
+ -webkit-transform: scale(1, 1);
+ transform: scale(1, 1);
+}
+.travel-wrapper .item .item-img {
+ overflow: hidden;
+ display: block;
+ max-height: 180px;
+}
+.travel-wrapper .item .price {
+ color: #558c55;
+ font-weight: 700;
+ padding: 8px 0 0;
+}
+.travel-wrapper .item > a.item-button {
+ text-transform: uppercase;
+ display: block;
+ position: relative;
+ background-color: #ffc926;
+ color: #fff;
+ padding: 8px 58px 8px 20px;
+ font-size: 14px;
+ font-weight: 700;
+ text-overflow: ellipsis;
+ word-wrap: break-word;
+ overflow: hidden;
+ line-height: 1.4em;
+ /*span {
+ color: #fff;
+ height: 3.6em;
+ display: table-cell;
+ vertical-align: middle;
+ }*/
+}
+.travel-wrapper .item > a.item-button.single_line {
+ padding-top: 17px;
+ height: 3.6em;
+}
+.travel-wrapper .item > a.item-button.dobble_line {
+ height: 3.6em;
+}
+.travel-wrapper .item .hl5 {
+ text-overflow: ellipsis;
+ word-wrap: break-word;
+ overflow: hidden;
+ height: 1.4em;
+ line-height: 1.4em !important;
+}
+.travel-wrapper .item p {
+ text-overflow: ellipsis;
+ word-wrap: break-word;
+ overflow: hidden;
+ height: 4em;
+ line-height: 1.4em;
+}
+.travel-wrapper .item > a.item-button.one-line {
+ line-height: 56px;
+ padding: 0px 58px 0px 20px;
+}
+.item-switch {
+ padding-top: 0px;
+ position: relative;
+ display: block;
+ float: left;
+ width: 100%;
+}
+.item-switch > a.item-button-prev,
+.item-switch > a.item-button-next {
+ text-transform: uppercase;
+ display: block;
+ position: relative;
+ background-color: #ffc926;
+ color: #fff;
+ padding: 4px 12px 3px 12px;
+ font-size: 14px;
+ font-weight: 700;
+ width: 49%;
+}
+.item-switch > a.item-button-prev {
+ float: left;
+ text-align: right;
+}
+.item-switch > a.item-button-next {
+ float: right;
+ text-align: left;
+}
+.item-switch > a.item-button-prev:hover {
+ color: #fff;
+ background-color: #777777;
+}
+.item-switch > a.item-button-next:hover {
+ color: #fff;
+ background-color: #777777;
+}
+.travel-wrapper .item > a.item-button:hover {
+ color: #fff;
+ background-color: #777777;
+}
+.travel-wrapper .item > a.item-button:hover:after {
+ background-color: #5e5e5e;
+}
+.travel-wrapper .item > a.item-button:after {
+ transition: 0.5s ease;
+ -o-transition: 0.5s ease;
+ -webkit-transition: 0.5s ease;
+ top: 0;
+ bottom: 0;
+ width: 46px;
+ right: 0px;
+ background-color: #f2b600;
+ content: '';
+ position: absolute;
+ text-align: center;
+ font-weight: normal;
+ font-family: 'FontAwesome';
+ line-height: 52px;
+ font-size: 26px;
+}
+.item-switch > a.item-button-prev:hover:before {
+ background-color: #5e5e5e;
+}
+.item-switch > a.item-button-prev:before {
+ transition: 0.5s ease;
+ -o-transition: 0.5s ease;
+ -webkit-transition: 0.5s ease;
+ top: 0;
+ bottom: 0;
+ width: 30px;
+ left: 0px;
+ background-color: #f2b600;
+ content: '\f104';
+ position: absolute;
+ text-align: center;
+ font-weight: normal;
+ font-family: 'FontAwesome';
+ line-height: 34px;
+ font-size: 26px;
+}
+.item-switch > a.item-button-next:hover:after {
+ background-color: #5e5e5e;
+}
+.item-switch > a.item-button-next:after {
+ transition: 0.5s ease;
+ -o-transition: 0.5s ease;
+ -webkit-transition: 0.5s ease;
+ top: 0;
+ bottom: 0;
+ width: 30px;
+ right: 0px;
+ background-color: #f2b600;
+ content: '';
+ position: absolute;
+ text-align: center;
+ font-weight: normal;
+ font-family: 'FontAwesome';
+ line-height: 34px;
+ font-size: 26px;
+}
+.single-travel-image {
+ position: relative;
+}
+.single-travel-image img {
+ width: 100%;
+}
+.sidebar-price,
+.single-travel-image .price {
+ position: absolute;
+ top: 30%;
+ right: 5%;
+ padding: 25px 40px;
+ background-color: rgba(255, 255, 255, 0.8);
+}
+.sidebar-price,
+.price {
+ text-align: center;
+}
+.sidebar-price h2 span,
+.price h2 span {
+ font-size: 15px;
+ padding: 0;
+}
+.sidebar-price h2,
+.price h2 {
+ margin-bottom: 0;
+ font-size: 45px;
+ padding: 0;
+}
+.price h2 small {
+ color: #444444;
+}
+.single-travel-bottom {
+ background-color: #eeeeee;
+ padding: 20px;
+ margin-bottom: 0;
+ text-align: center;
+}
+.single-travel-bottom p i {
+ padding-right: 5px;
+ padding-left: 30px;
+}
+.single-travel-bottom p {
+ margin-bottom: 0;
+ color: #444444;
+}
+.single-travel-image .thumbnails {
+ position: absolute;
+ bottom: 15%;
+ left: 3%;
+ padding: 0;
+}
+.thumbnails {
+ max-width: 100px;
+}
+.thumbnails img {
+ max-width: 100px;
+ border: 2px solid #ffffff;
+ margin: 5px 0;
+}
+.travel-hr {
+ margin: 40px 0;
+}
+.notice {
+ font-size: 13px;
+ font-style: italic;
+}
+.widget .sidebar-price {
+ position: relative;
+ margin: 30px 0 0 0 !important;
+ background: #eeeeee;
+ left: 0 !important;
+ right: 0 !important;
+}
+.widget .sidebar-price .btn {
+ color: #ffffff !important;
+}
+/*
+ 7) SHORTCODES
+===============================================================
+*/
+/* ==================================================================
+ SHORTCODES
+================================================================== */
+#map {
+ height: 650px;
+ width: 100%;
+}
+#map img {
+ max-width: inherit;
+}
+.map {
+ position: relative;
+}
+.infobox {
+ display: inline-block;
+ position: relative;
+}
+.infobox img {
+ width: 80px !important;
+ padding-right: 10px;
+}
+.infobox .title {
+ font-size: 13px;
+ font-weight: bold;
+ margin-top: 0;
+ margin-bottom: 0;
+ text-transform: uppercase;
+ padding-bottom: 5px;
+}
+.infobox .title a {
+ font-weight: bold;
+}
+.service-style {
+ margin: 10px 0;
+}
+.service-style .icon-container {
+ display: inline-block;
+ font-size: 31px;
+ height: 70px;
+ line-height: 70px;
+ margin-right: 10px;
+ text-align: center;
+ width: 70px;
+}
+.btn-over-slider {
+ position: absolute;
+ right: 25px;
+ top: 70px;
+ z-index: 1000;
+}
+.btn-over-slider .btn {
+ border: 1px solid #fff;
+ -webkit-box-shadow: 0px 0px 8px 5px rgba(255, 255, 255, 0.4);
+ -moz-box-shadow: 0px 0px 8px 5px rgba(255, 255, 255, 0.4);
+ box-shadow: 0px 0px 8px 5px rgba(255, 255, 255, 0.4);
+}
+.owl-item-container .quick-view {
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ margin: -21px 0 0 -90px;
+ padding: 16px 8px;
+ background: rgba(255, 201, 38, 0.8);
+ color: #fff;
+ width: 180px;
+ text-align: center;
+ font-size: 16px;
+ font-weight: 500;
+ -moz-box-shadow: rgba(0, 0, 0, 0.16) 0 2px 8px;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.16) 0 2px 8px;
+ box-shadow: rgba(0, 0, 0, 0.16) 0 2px 8px;
+ -moz-transition: all 0.3s ease;
+ -o-transition: all 0.3s ease;
+ -webkit-transition: all 0.3s ease;
+ transition: all 0.3s ease;
+}
+.owl-item-container .quick-view a {
+ color: #fff;
+}
+.owl-item-container .quick-view:hover {
+ background: #ffc926;
+}
+.owl-item-container .quick-view {
+ -moz-transform: scale(0, 0);
+ -ms-transform: scale(0, 0);
+ -o-transform: scale(0, 0);
+ -webkit-transform: scale(0, 0);
+ transform: scale(0, 0);
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
+ opacity: 0;
+}
+.owl-item-container:hover .quick-view {
+ -moz-transform: scale(1, 1);
+ -ms-transform: scale(1, 1);
+ -o-transform: scale(1, 1);
+ -webkit-transform: scale(1, 1);
+ transform: scale(1, 1);
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
+ opacity: 1;
+}
+.owl-item-full {
+ padding-left: 8px;
+ padding-right: 8px;
+}
+.owl-fullwidth .owl-nav {
+ top: 50%;
+ position: absolute;
+ width: 100%;
+ color: #fff;
+}
+.owl-carousel .owl-nav .owl-next {
+ width: 60px;
+ height: 60px;
+ line-height: 53px;
+ border: 1px solid #ffffff !important;
+ font-size: 34px;
+ border-radius: 100%;
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ right: auto;
+ left: -10px;
+ background-color: #ffc926;
+ display: inline-block;
+ text-align: center;
+}
+.owl-carousel .owl-nav .owl-next:hover {
+ background-color: #777777;
+}
+.owl-carousel .owl-nav .owl-prev {
+ width: 60px;
+ height: 60px;
+ line-height: 53px;
+ border: 1px solid #ffffff !important;
+ font-size: 34px;
+ border-radius: 100%;
+ bottom: 0;
+ left: 0;
+ position: absolute;
+ right: -10px;
+ left: auto;
+ background-color: #ffc926;
+ display: inline-block;
+ text-align: center;
+}
+.owl-carousel .owl-nav .owl-prev:hover {
+ background-color: #777777;
+}
+.noborder {
+ border: 0 !important;
+}
+.mini-desti {
+ padding: 30px 0;
+ border-bottom: 1px solid #eee;
+}
+.mini-desti h6 {
+ margin: 0;
+}
+.mini-desti .rating {
+ margin: 5px 0;
+ display: block;
+}
+.mini-desti img {
+ width: 100%;
+}
+.home-message {
+ padding: 89px 0px;
+ min-height: 580px;
+}
+.home-message.small {
+ min-height: 130px;
+}
+.home-info-box {
+ background: #ffc926;
+ float: right;
+ width: 340px;
+ height: 90px;
+ border-radius: 0 0 8px 8px;
+ margin-right: -15px;
+ z-index: 200;
+ position: relative;
+}
+.home-info-box .eKomi-header {
+ float: left;
+ padding-top: 8px;
+ padding-left: 10px;
+}
+.home-info-box .c4 {
+ float: right;
+ width: 260px;
+ font-size: 14px;
+ font-weight: 500;
+ text-align: left;
+ margin-top: 6px;
+}
+.home-info-box .c4 li {
+ margin: 0;
+ margin-left: 20px;
+}
+.home-info-box .c4 li:before {
+ color: #558c55;
+}
+.form-box {
+ background-color: #eaeaea;
+ display: inline-block;
+ padding: 20px 12px 20px 12px;
+ margin-bottom: 20px;
+ width: 100%;
+}
+.form-box h7 {
+ color: #666;
+}
+.form-box h5 {
+ padding-bottom: 10px;
+ border-bottom: 1px solid #ffc926;
+}
+.booking_form .table {
+ font-family: 'Raleway', sans-serif;
+}
+.booking_form .table.first-table .bootstrap-select:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) {
+ width: 92%;
+}
+.booking_form .table > tbody > tr > td {
+ text-align: left;
+ background-color: transparent;
+ border: none;
+ border-bottom: 1px solid #fff;
+}
+.booking_form #no-more-tables.table {
+ font-family: 'Raleway', sans-serif;
+}
+.booking_form #no-more-tables .table > thead > tr > th {
+ background-color: transparent;
+ font-weight: 600;
+ border: none;
+ border-bottom: 1px solid #fff;
+ padding: 0;
+}
+.booking_form #no-more-tables .form-control {
+ padding: 10px;
+ margin-bottom: 0px;
+}
+@media (max-width: 992px) {
+ .booking_form #no-more-tables td {
+ padding-top: 30px;
+ padding-left: 6px;
+ }
+ .booking_form #no-more-tables td:last-child {
+ padding-left: 6px;
+ }
+}
+@media (max-width: 786px) {
+ .booking_form .table > tbody > tr > td {
+ display: block;
+ width: 98%;
+ }
+ .booking_form .table.first-table .bootstrap-select:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) {
+ width: 98%;
+ }
+ .booking_form .table > tbody > tr > td:first-child {
+ border-bottom: none;
+ font-weight: bold;
+ }
+ .booking_form .form-box {
+ padding: 20px 0px 20px 0px;
+ }
+ .booking_form .btn-white.btn-lg,
+ .booking_form .btn-default.btn-lg,
+ .booking_form .btn-primary.btn-lg {
+ height: 60px !important;
+ padding: 2px 45px 0px !important;
+ }
+}
+@media (max-width: 320px) {
+ .booking_form .table.first-table .bootstrap-select:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) {
+ width: 82%;
+ }
+}
+.home-message h1,
+.home-message {
+ color: #ffffff;
+}
+.home-message .btn {
+ margin-top: 10px;
+}
+.nav-tabs {
+ border: none;
+}
+.home-form .nav-tabs i {
+ vertical-align: middle;
+}
+.home-form .nav-tabs > li > a {
+ color: #444444;
+ text-align: center;
+ text-transform: uppercase;
+ font-size: 15px;
+ padding: 20px 34px 20px 34px;
+ border: 0 solid #eeebeb !important;
+ border-radius: 0px;
+ margin-right: 0px;
+ width: auto;
+ font-weight: 600;
+ background: #eeebeb;
+ /* The Fallback */
+ background: rgba(238, 235, 235, 0.9);
+}
+.home-form .nav-tabs > li.active > a i,
+.home-form .nav-tabs > li > a:hover i,
+.home-form .nav-tabs > li.active > a:focus i {
+ color: #ffffff !important;
+}
+.home-form .nav-tabs > li > a i {
+ font-size: 28px;
+ line-height: 28px;
+}
+.homeform {
+ padding: 200px 0 40px;
+}
+.home-form .nav-tabs > li {
+ border-right: 1px solid #aaaaaa;
+ border-bottom: 1px solid #aaaaaa;
+}
+#withphone .home-form .nav-tabs > li {
+ width: auto;
+}
+#withphone .home-form .tab-pane {
+ margin-top: 3px;
+}
+#withphone.absolute {
+ margin-top: -75px;
+}
+#withphone.absolute li h6 {
+ color: #ffffff;
+ padding: 20px ;
+}
+.home-form .tab-pane {
+ padding: 20px 10px 0px 10px;
+ background: #eeebeb;
+ /* The Fallback */
+ background: rgba(238, 235, 235, 0.8);
+}
+.home-form .bootstrap-select > .btn {
+ width: 100%;
+ position: relative;
+ display: block;
+ margin: 0;
+ color: #666 !important;
+ font-weight: 600;
+}
+.home-form .bootstrap-select .icon-search {
+ vertical-align: bottom !important;
+ font-size: 31px;
+}
+.make-margin {
+ margin: 30px 0 30px !important;
+}
+.bootstrap-select:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) {
+ width: 100%;
+}
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+ color: #ffffff;
+ font-size: 12px;
+ background: #ffc926;
+ border-color: #c3c3c3;
+}
+.ui-datepicker .ui-datepicker-title {
+ color: #c3c3c3;
+ font-size: 16px;
+ font-weight: 400;
+ line-height: 1.8em;
+ margin: 0 2.3em;
+ text-align: center;
+ text-transform: uppercase;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+ background: #ffffff !important;
+ border: 0;
+ color: #777777 !important;
+}
+.ui-widget-header {
+ background: #fff !important;
+ border: 0 solid #c3c3c3 !important;
+ color: #c3c3c3 !important;
+ font-weight: bold;
+}
+.ui-widget-content {
+ background: #ffc926;
+ border: 5px solid #c3c3c3;
+ color: #ffffff;
+ padding: 0;
+}
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+ background: #ffc926;
+ border-color: #c3c3c3;
+ color: #777777;
+ font-weight: 400;
+ font-size: 12px;
+ text-align: center;
+}
+.ui-datepicker th,
+.ui-widget-header {
+ background: #ffc926;
+ border: 1px solid #c3c3c3;
+ color: #3b3b3b !important;
+ font-family: "raleway" !important;
+ font-weight: 300;
+}
+#countdown {
+ text-align: center;
+ margin: 100px auto 0;
+}
+.dash {
+ height: 100px;
+ line-height: 1.4;
+ display: block;
+ overflow: hidden;
+ position: relative;
+}
+.dash .digit {
+ font-size: 63px;
+ line-height: 60px;
+ padding: 10px 5px 0;
+ border-radius: 3px;
+ font-weight: bold;
+ display: inline-block;
+ text-align: center;
+ overflow: hidden;
+ position: relative;
+}
+.dash_title {
+ position: absolute;
+ display: block;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ text-align: center;
+ font-size: 15px;
+ text-transform: uppercase;
+}
+.contact-info ul li {
+ list-style: none;
+ margin-top: 20px;
+}
+.contact-info ul li i {
+ padding-right: 5px;
+ vertical-align: sub;
+ margin-top: 3px;
+}
+.form-control {
+ font-family: 'Raleway', sans-serif;
+ font-weight: 600;
+ border-color: #dddddd;
+ height: 55px;
+ border-radius: 0;
+ padding: 10px 20px;
+ margin-bottom: 16px;
+ box-shadow: none;
+}
+.form-bottom,
+.form-inline .form-bottom {
+ margin-bottom: 16px;
+ width: 100%;
+}
+.pricing-table-body ul li {
+ list-style: none;
+ border-bottom: 1px solid #dddddd;
+ padding: 10px 0;
+}
+.pricing-table-body ul li:last-child {
+ border-bottom: 0 solid #aaa;
+}
+.pricing-price sup {
+ top: auto;
+ bottom: 0 !important;
+ font-family: arial !important;
+ font-size: 21px !important;
+ font-weight: normal !important;
+}
+.pricing-price {
+ padding: 14px;
+ position: relative;
+}
+.bestoffer {
+ background: #222222;
+ color: #ffffff;
+ display: block;
+ font-size: 12px;
+ font-weight: bold;
+ height: 65px;
+ left: 15px;
+ line-height: 1.5;
+ padding-top: 13px;
+ position: absolute;
+ top: -30px;
+ width: 65px;
+}
+.pricing-price h2 {
+ margin: 0;
+ font-size: 55px;
+}
+.pricing-price h4 {
+ padding: 0;
+ margin: 0;
+ font-size: 16px;
+}
+.pricing-table-footer,
+.pricing-table-header,
+.pricing-table-body {
+ background: #f6f6f6;
+ display: block;
+ text-align: center;
+ padding: 25px;
+ position: relative;
+}
+.pricing-table-footer h3 a,
+.pricing-table-footer h3,
+.pricing-table-header h3 {
+ color: #ffffff;
+ font-size: 16px;
+ letter-spacing: 1px;
+ padding: 0;
+ margin: 0;
+ text-transform: uppercase;
+}
+.circle-stat {
+ position: relative;
+}
+.circle-stat h3 {
+ font-size: 30px;
+ left: 0;
+ margin: -20px auto;
+ position: absolute;
+ right: 0;
+ top: 50%;
+}
+.circle-stat h3 span {
+ font-family: "Raleway";
+}
+.stat-details h3 {
+ font-size: 15px;
+ padding: 20px 0 5px;
+}
+.panel-title {
+ line-height: 16px;
+}
+.panel-heading {
+ border-radius: 0 !important;
+ padding: 18px 24px;
+}
+.panel-heading h3 {
+ color: #ffffff;
+ font-size: 15px;
+ padding: 0;
+ margin: 0;
+ display: inline-block;
+}
+.panel-default > .panel-heading + .panel-collapse > .panel-body {
+ border-top: 0 none;
+}
+.panel p {
+ margin-bottom: 0;
+}
+.panel-heading i {
+ font-size: 21px;
+ margin: -2px;
+}
+.panel {
+ border-color: #ffffff;
+ border-radius: 0 !important;
+ box-shadow: none;
+}
+.accordion-toggle-2 .panel-body {
+ background: #ffffff !important;
+ border-left: 1px solid #dadada !important;
+ border-right: 1px solid #dadada !important;
+ border-bottom: 1px solid #dadada !important;
+}
+.accordion-toggle-2 .panel-heading {
+ background: #ffffff !important;
+ border: 1px solid #dadada !important;
+}
+.accordion-toggle-2 .panel-heading i,
+.accordion-toggle-2 .panel-heading h3 {
+ color: #444444;
+}
+.c3 li span {
+ padding-right: 10px;
+}
+.c1 {
+ padding-left: 10px !important;
+ color: #3b3b3b;
+}
+.c4 {
+ padding-left: 20px !important;
+ color: #3b3b3b;
+}
+.c4 {
+ font-weight: bold;
+}
+.c2 li,
+.c3 li,
+.c1 li,
+.c4 li {
+ margin: 15px 15px;
+ list-style: none;
+}
+.c1 li {
+ margin: 5px 15px;
+ list-style: none;
+}
+.c1 li a {
+ color: #3b3b3b;
+}
+.c1 li a:hover {
+ color: #e5aa30;
+}
+.c1 li:before {
+ content: '\2022';
+ /* For a square bullet */
+ /*content:'\25A0';*/
+ display: block;
+ position: relative;
+ max-width: 0px;
+ max-height: 0px;
+ left: -20px;
+ top: 0px;
+ font-size: 40px;
+}
+.c4 li:before {
+ font-family: "trips";
+ content: "\e034";
+ /* For a square bullet */
+ /*content:'\25A0';*/
+ display: block;
+ position: relative;
+ max-width: 0px;
+ max-height: 0px;
+ left: -30px;
+ top: 0px;
+ font-size: 24px;
+}
+.c2 li span {
+ color: #ffffff;
+ margin-right: 10px;
+ text-align: center;
+ width: 25px;
+ font-size: 13px;
+ line-height: 25px;
+ height: 25px;
+ border-radius: 25px;
+ display: inline-block;
+}
+.progress {
+ border-radius: 0;
+ height: 20px;
+ margin: 20px 0;
+ background-color: #ffffff;
+ box-shadow: none;
+ border: 0 solid #dddddd;
+}
+.progress-bar {
+ float: left;
+ width: 0%;
+ height: 100%;
+ overflow: visible;
+ color: #ffffff;
+ text-align: center;
+ background-color: #696969;
+ -webkit-transition: width 1.1s ease;
+ -o-transition: width 1.1s ease;
+ transition: width 1.1s ease;
+}
+.progress {
+ overflow: initial;
+ position: relative;
+}
+.progress .progress-bar {
+ position: absolute;
+ z-index: 10;
+ line-height: 20px;
+}
+.progress .progressbar-back-text {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ font-size: 12px;
+ line-height: 20px;
+ text-align: center;
+}
+.skills h3 {
+ font-size: 15px;
+ text-transform: uppercase;
+}
+.progress .progressbar-front-text {
+ width: 100%;
+ font-size: 12px;
+ line-height: 20px;
+}
+.progress-bar span {
+ background: none repeat scroll 0 0 #000000 !important;
+ border-radius: 4px !important;
+ color: #fff !important;
+ display: block;
+ font-size: 14px;
+ font-weight: bold;
+ height: 25px;
+ line-height: 25px;
+ overflow: visible;
+ position: absolute;
+ right: 0;
+ text-align: center;
+ top: -37px;
+ width: 45px;
+ z-index: 9999;
+}
+.progress-bar span:after {
+ top: 100%;
+ left: 50%;
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ border-color: rgba(0, 0, 0, 0);
+ border-top-color: #000000;
+ border-width: 4px;
+ margin-left: -4px;
+}
+.price-range img {
+ margin-bottom: 30px;
+ z-index: 1000;
+ position: relative;
+}
+.price-details ul li span {
+ display: -moz-stack;
+ width: 114px;
+}
+.price-details ul {
+ margin-top: 10px;
+}
+.price-details ul li {
+ list-style: none;
+ font-size: 13px;
+}
+.bookprice {
+ display: block;
+ position: relative;
+ padding: 20px;
+ background: #fff6cc;
+}
+.bookprice .lead {
+ font-style: italic;
+ font-size: 14px;
+}
+.bookprice span.pull-right {
+ text-decoration: line-through;
+}
+.labels-wrapper {
+ margin-bottom: 20px;
+}
+.labels-wrapper label {
+ margin-bottom: 20px;
+}
+/*
+ 8) SECTIONS % PAGES
+===============================================================
+*/
+/* ==================================================================
+ SECTION & PAGE
+================================================================== */
+/*#myModal{
+ height: 400px;
+ top: calc(50% - 200px) !important;
+}*/
+.modal {
+ z-index: 9999;
+}
+body.modal-open {
+ padding-right: 0px !important;
+}
+.modal-open {
+ overflow: auto !important;
+}
+/* background setup */
+.background {
+ background-repeat: no-repeat;
+ background-position: 50% 50%;
+ background-position: 50% 50%\9 !important;
+}
+.fullscreen {
+ width: 100%;
+ min-height: 100%;
+}
+.not-fullscreen,
+.not-fullscreen .content-a,
+.fullscreen.not-overflow,
+.fullscreen.not-overflow .content-a {
+ height: 100%;
+ overflow: hidden;
+}
+.section {
+ background-color: #ffffff;
+ position: relative;
+ display: block;
+ padding: 60px 0;
+ overflow: hidden;
+}
+.section.padding-top-20 {
+ padding-top: 20px;
+}
+.section.padding-top-30 {
+ padding-top: 30px;
+}
+.section.padding-0 {
+ padding: 0px;
+}
+.section.margin-bottom-20 {
+ margin-bottom: 20px !important;
+}
+.section-grey {
+ background-color: #eeeeee;
+}
+.section-light {
+ background-color: #f6f6f6;
+}
+#page-header {
+ background: url(images/page-header.jpg) no-repeat scroll center center / cover rgba(0, 0, 0, 0);
+ display: block;
+ padding: 70px 0;
+ position: relative;
+ text-align: center;
+}
+.absolute-section {
+ position: absolute;
+ width: 100%;
+}
+.absolute {
+ padding: 0;
+ position: relative;
+ margin-top: -122px;
+ z-index: 100;
+ display: block;
+ width: 100%;
+}
+.absolute .tab-pane {
+ background-color: transparent !important;
+}
+.parallax-slider {
+ z-index: 100;
+ height: 380px;
+}
+.parallax-buttons ul {
+ list-style: none;
+}
+.parallax-buttons ul li a {
+ content: "";
+ width: 30px;
+ height: 30px;
+ background-color: #ffc926;
+ border-radius: 50%;
+}
+.carousel,
+.item,
+.active {
+ height: 100%;
+}
+.carousel-inner {
+ height: 100%;
+ margin-top: 0px;
+}
+/* Background images are set within the HTML using inline CSS, not here */
+.fill {
+ width: 100%;
+ height: 280px;
+ background-position: center;
+ -webkit-background-size: cover;
+ -moz-background-size: cover;
+ background-size: cover;
+ -o-background-size: cover;
+}
+.start-slider {
+ padding-top: 148px;
+}
+.start-slider .home-message {
+ padding-top: 0px;
+}
+.start-slider .fill {
+ height: 380px;
+}
+@media (max-width: 768px) {
+ .start-slider {
+ padding-top: 160px;
+ }
+ .start-slider .home-message {
+ padding-top: 0px;
+ }
+ .start-slider .fill {
+ height: 360px;
+ }
+}
+.container-absolute {
+ position: absolute;
+}
+.absolute-carousel {
+ position: absolute;
+ z-index: 9999;
+ width: 100%;
+ top: 49px;
+}
+.carousel-indicators li {
+ width: 26px;
+ height: 26px;
+ background-color: #fff;
+ border: 1px solid #ffc926;
+ border-radius: 50%;
+ box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.4);
+}
+.carousel-indicators li:hover,
+.carousel-indicators .active {
+ width: 26px;
+ height: 26px;
+ background-color: #ffc926;
+ border: 1px solid #fff;
+ border-radius: 50%;
+ box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.4);
+}
+a.carousel-control .glyphicon {
+ color: #ffc926;
+}
+.px-bullets-count {
+ position: relative;
+ right: -50%;
+ width: 100%;
+}
+.px-bullets {
+ position: absolute;
+ bottom: 20px;
+ right: 50%;
+ bottom: -20px;
+}
+.px-bullet {
+ width: 26px;
+ height: 26px;
+ background-color: #fff;
+ border: 1px solid #ffc926;
+ border-radius: 50%;
+ cursor: pointer;
+ float: left;
+ margin: 5px;
+ box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.4);
+}
+.px-bullet:hover {
+ background-color: #ffc926;
+ border: 1px solid #fff;
+}
+.px-bullet-selected {
+ background-color: #ffc926;
+ border: 1px solid #fff;
+}
+#ui-datepicker-div {
+ z-index: 1000 !important;
+}
+i {
+ vertical-align: middle;
+}
+#page-header .rating {
+ padding-right: 10px;
+}
+#page-header p {
+ margin-top: 20px;
+ margin-bottom: 0;
+}
+#page-header h3 {
+ font-size: 25px;
+ margin: 0;
+ padding: 0;
+ text-transform: uppercase;
+ z-index: 1;
+}
+.breadcrumb-holder {
+ padding-top: 20px;
+ padding-bottom: 10px;
+}
+.breadcrumb > li + li::before {
+ content: ">";
+ padding: 0 2px 0 0;
+ font-size: 12px;
+}
+.breadcrumb {
+ background-color: transparent;
+ border-radius: 0;
+ position: absolute;
+ left: 15px;
+ top: -10px;
+ font-weight: 500;
+ list-style: outside none none;
+ margin: 0;
+ padding: 0;
+ padding-left: 5px;
+}
+.breadcrumb li a,
+.breadcrumb li a > span {
+ color: #444444 !important;
+}
+.breadcrumb li a.on,
+.breadcrumb li a.on > span {
+ color: #e5aa30 !important;
+ font-weight: 600;
+}
+.ekomi_prop {
+ margin-top: -10px;
+}
+.prop {
+ text-align: center;
+ position: relative;
+ background-color: #f6f6f6;
+ padding: 71px 20px 18px;
+}
+.prop .maxheight {
+ min-height: 160px;
+}
+.prop .fa {
+ color: #fff;
+ line-height: 75px;
+ font-size: 36px;
+ text-align: center;
+ position: absolute;
+ border-radius: 500px;
+ display: block;
+ border: 6px solid #fff;
+ width: 84px;
+ height: 84px;
+ left: 50%;
+ margin-left: -42px;
+ top: -41px;
+ background-color: #ffc926;
+}
+.prop .title {
+ margin-bottom: 12px;
+ font-weight: 500;
+ font-size: 28px;
+ line-height: 36px;
+ text-transform: uppercase;
+}
+.prop p {
+ margin-bottom: 0;
+ padding: 0 20px;
+}
+/*** CONTENT ***/
+#content section {
+ margin-bottom: 40px;
+ /* @media (max-width: 991px) {
+ .nav-tabs > li {
+ display: inline-block;
+ width: auto;
+ }
+ .nav-tabs > li > a {
+ display: block;
+ width: auto;
+ margin-bottom: 5px;
+ }
+ } */
+}
+#content section .hl2 {
+ font-size: 25px;
+ position: relative;
+ padding-bottom: 8px;
+ border-bottom: 1px solid #ffc926;
+ font-weight: normal;
+ margin-bottom: 20px;
+ color: #777777;
+ line-height: 1.2em;
+ vertical-align: baseline;
+}
+#content section .hl5 {
+ font-size: 19px;
+ position: relative;
+ padding-bottom: 8px;
+ font-weight: 700;
+ margin-bottom: 10px;
+ color: #777777;
+ line-height: 1.2em;
+ vertical-align: baseline;
+}
+#content section .hl5.bottom {
+ margin-bottom: 30px;
+}
+#content section .content-copy h5 {
+ font-weight: 700;
+}
+#content section .content-copy p {
+ line-height: 1.4em;
+}
+#content section .nav-tabs {
+ padding-bottom: 20px;
+ overflow-x: auto;
+ overflow-y: hidden;
+ display: -webkit-box;
+ display: -moz-box;
+ overflow-x: hidden;
+}
+#content section .nav-tabs .fa {
+ color: #ffd659;
+ padding-bottom: 3px;
+}
+#content section .nav-tabs > li > a {
+ margin-right: 2px;
+ line-height: 1.42857143;
+ border: 1px solid transparent;
+ border-radius: 0;
+ color: #5e5e5e;
+ background-color: #c3c3c3;
+ font-weight: 600;
+ white-space: nowrap;
+ padding: 10px 10px;
+}
+#content section .nav-tabs > li.active > a,
+#content section .nav-tabs > li.active > a:hover,
+#content section .nav-tabs > li.active > a:focus,
+#content section .nav-tabs > li > a:hover,
+#content section .nav-tabs > li > a:focus {
+ color: #fff;
+ cursor: default;
+ background-color: #ffc926;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+}
+#content section .nav-tabs > li.active > a .fa,
+#content section .nav-tabs > li.active > a:hover .fa,
+#content section .nav-tabs > li.active > a:focus .fa,
+#content section .nav-tabs > li > a:hover .fa,
+#content section .nav-tabs > li > a:focus .fa {
+ color: #fff;
+}
+#content section .scroller-nav-tabs {
+ display: none;
+}
+#content section .scroller-right-nav-tabs {
+ display: none;
+}
+#content section .scroller-left-nav-tabs {
+ display: none;
+}
+@media (max-width: 992px) {
+ #content section .scroller-nav-tabs {
+ display: block;
+ text-align: center;
+ cursor: pointer;
+ display: none;
+ padding: 4px;
+ padding-top: 6px;
+ white-space: no-wrap;
+ vertical-align: middle;
+ background-color: #fff;
+ }
+ #content section .scroller-right-nav-tabs {
+ float: right;
+ }
+ #content section .scroller-left-nav-tabs {
+ float: left;
+ }
+ #content section .wrapper-nav-tabs {
+ position: relative;
+ margin: 0 auto;
+ overflow: hidden;
+ padding: 5px;
+ height: 50px;
+ }
+ #content section .wrapper-nav-tabs .list-nav-tabs {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+ min-width: 3000px;
+ margin-top: 0px;
+ }
+ #content section .wrapper-nav-tabs .list-nav-tabs li {
+ display: table-cell;
+ position: relative;
+ text-align: center;
+ cursor: grab;
+ cursor: -webkit-grab;
+ color: #efefef;
+ vertical-align: middle;
+ width: auto;
+ }
+}
+.result-wrapper .table {
+ font-size: .9em;
+}
+.result-wrapper .table > thead > tr > th {
+ padding: 4px;
+}
+.result-wrapper .result {
+ background-color: #eaeaea;
+ display: inline-block;
+ padding: 20px 12px 20px 12px;
+ margin-bottom: 20px;
+ width: 100%;
+ margin-bottom: -7px;
+}
+@media (max-width: 992px) {
+ .result-wrapper .result .image img.img-responsive {
+ margin: 0 auto;
+ }
+}
+.result-wrapper .result .title {
+ font-size: 18px;
+ font-weight: 700;
+ margin-top: 6px;
+ margin-bottom: 12px;
+}
+.result-wrapper .result .dates-count {
+ text-align: right;
+ font-style: italic;
+ color: #868686;
+}
+.result-wrapper .result .price {
+ font-weight: bold;
+ background-color: #558c55;
+ font-size: 20px;
+ padding: 4px 8px;
+ color: #fff;
+}
+.result-wrapper .result .price .small {
+ font-size: 15px;
+ font-style: italic;
+}
+.table {
+ font-family: 'Oswald', serif;
+ font-weight: 400;
+ color: #5a5a5a;
+ border-color: #fff;
+ margin-bottom: 40px;
+}
+.table > thead > tr > th {
+ background-color: #d8d8d8;
+ border: 1px solid #fff;
+ text-align: center;
+ vertical-align: middle;
+}
+.table > tbody > tr > td {
+ background-color: #f2f2f2;
+ border: 1px solid #fff;
+ text-align: center;
+ vertical-align: middle;
+}
+.table strong {
+ color: #5a5a5a;
+}
+.table .old_price {
+ display: block;
+ text-decoration: line-through;
+ white-space: nowrap;
+}
+.table .new_price {
+ display: block;
+ font-weight: bold;
+ color: #558c55;
+ white-space: nowrap;
+}
+.table .color-brand {
+ color: #e5aa30;
+}
+.tooltip.top .tooltip-inner {
+ background-color: #777777;
+ font-size: 1.1em;
+}
+.tooltip.top .tooltip-arrow {
+ border-top-color: #777777;
+}
+.icons-percent {
+ font-family: 'Oswald', sans-serif;
+}
+.icons-percent::before {
+ content: '%';
+ font-weight: 700;
+ width: 34px;
+ height: 34px;
+ line-height: 34px;
+ font-size: 20px;
+ float: left;
+ background: #ffc926;
+ color: #fff;
+ border-radius: 50%;
+ margin-top: 4px;
+}
+.embed-responsive {
+ position: relative;
+ display: block;
+ height: 0;
+ padding: 0;
+ overflow: hidden;
+}
+.embed-responsive .embed-responsive-item,
+.embed-responsive iframe,
+.embed-responsive embed,
+.embed-responsive object,
+.embed-responsive video {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border: 0;
+}
+.embed-responsive-16by9 {
+ padding-bottom: 56.25%;
+}
+.embed-responsive-4by3 {
+ padding-bottom: 75%;
+}
+/*
+ 9) HEADER
+===============================================================
+*/
+/* ==================================================================
+ HEADER
+================================================================== */
+.topbar {
+ padding: 0;
+ border: 0;
+ position: relative;
+ min-height: 40px;
+ line-height: 40px;
+ display: block;
+}
+.topbar-drops {
+ margin-right: -15px;
+}
+.topbar-drops i {
+ vertical-align: middle;
+ padding-right: 4px;
+ font-size: 17px;
+ padding-bottom: 2px;
+ color: #e5aa30;
+}
+.topbar,
+.topbar a,
+.topbar p {
+ margin: 0;
+ padding: 0;
+ font-size: 14px;
+ font-family: 'Oswald', serif;
+ color: #777777;
+}
+.topbar ul {
+ background: #e5e5e5;
+ border-radius: 0 0 5px 5px;
+}
+.topbar li:hover {
+ background-color: #b2b2b2;
+ color: #fff;
+}
+.topbar li.nohover:hover {
+ background-color: transparent;
+ color: #777777;
+}
+.topbar li {
+ padding: 0 10px;
+ margin: 0;
+ border-radius: 0 0 5px 5px;
+}
+.topbar li.nohover .fa {
+ color: #558c55;
+}
+.navbar-brand {
+ position: absolute;
+ width: 100%;
+ left: 0;
+ top: 0;
+ text-align: center;
+ margin: auto;
+}
+.navbar-brand img {
+ max-width: 220px;
+ margin-top: 12px;
+}
+.header {
+ display: block;
+ position: relative;
+ padding-top: 0;
+ border-bottom: 1px solid #eeeeee;
+ background-color: #fff;
+}
+.header.sticky {
+ position: fixed;
+}
+.navbar-nav > li > a {
+ font-family: 'Raleway', sans-serif;
+ font-weight: 600;
+ text-transform: uppercase;
+ font-size: 16px;
+ color: #3b3b3b;
+ padding: 10px 10px 4px 10px;
+ margin-top: 8px;
+ border-bottom: 3px solid #ffffff;
+}
+.navbar-nav > li > a:hover {
+ background: #ffc926;
+}
+.navbar .navbar-times {
+ background: transparent;
+ color: #777777;
+}
+.navbar .navbar-times i {
+ vertical-align: middle;
+ color: #e5aa30;
+ font-size: 40px;
+ padding-top: 24px;
+ padding-right: 6px;
+}
+.navbar .navbar-times span {
+ line-height: 20px;
+ font-size: 13px;
+ font-weight: 500;
+ float: right;
+ display: block;
+ text-align: right;
+ padding-top: 10px;
+ font-family: 'Oswald', serif;
+}
+.navbar .navbar-subnavi {
+ display: block;
+}
+.navbar .navbar-subnavi .subnavi {
+ padding-left: 16px;
+ position: relative;
+}
+.navbar .navbar-subnavi .subnavi::before {
+ position: absolute;
+ content: "";
+ z-index: 99998;
+ width: 0;
+ height: 0;
+ left: 4px;
+ top: 10px;
+ border-top: 8px solid transparent;
+ border-bottom: 8px solid transparent;
+ border-left: 10px solid #ffc926;
+}
+.subnavi .navbar-nav > li > a {
+ font-family: 'Raleway', sans-serif;
+ font-size: 14px;
+ margin-top: 0px;
+ color: #777777;
+}
+.navbar-default {
+ border: 0;
+ background-color: #ffffff;
+}
+.navbar-collapse,
+.navbar {
+ margin: 0;
+ border: 0;
+ margin-right: -15px;
+}
+#side-navigation {
+ margin-right: 0px;
+}
+.navbar-brand > img {
+ margin: 0;
+}
+.navbar .navbar-left {
+ margin-top: 24px;
+ padding-left: 0px;
+}
+.navbar .navbar-right {
+ margin-right: 0px;
+}
+nav hr {
+ margin-top: 0px;
+ margin-bottom: 0px;
+ border: 0;
+ border-top: 1px solid #777777;
+}
+.navbar .navbar-subnavi .subnavi {
+ margin-top: 0px;
+}
+.dropdown-menu {
+ background-color: #fff !important;
+ border-left: 1px solid #dddddd;
+ border-right: 1px solid #dddddd;
+ border-radius: 0;
+ box-shadow: none !important;
+ color: #ffffff;
+ min-width: 210px;
+ padding: 0px;
+ z-index: 9999;
+}
+.nav .open > a,
+.nav .open > a:hover,
+.nav .open > a:focus,
+.navbar-nav > li > a.active,
+.navbar-nav > li > a:focus,
+.navbar-nav > li > a:hover,
+.navbar-nav > li > a:hover,
+.navbar-nav > li > a:focus,
+.navbar-nav > li > a.active,
+.navbar-nav > li > a:active {
+ background: #ffffff !important;
+ /* The Fallback */
+ background: #ffffff;
+ box-shadow: none;
+}
+.sidebar li a,
+.sidebar li a:hover,
+.sidebar li a:focus {
+ background-color: transparent;
+ background: #ffffff;
+ /* The Fallback */
+ background: rgba(255, 255, 255, 0);
+}
+.dropdown-menu li:last-child {
+ border-bottom: 1px solid transparents;
+}
+.dropdown-menu li {
+ font-family: 'Raleway', sans-serif;
+ font-weight: 600;
+}
+.dropdown-menu li a {
+ color: #777777;
+ font-weight: 600;
+ padding: 3px 10px;
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+ color: #ffffff;
+ text-decoration: none;
+ background-color: transparent;
+}
+.dropdown-menu li {
+ color: #fff;
+ padding: 10px 12px 5px !important;
+ font-size: 14px;
+ line-height: 28px;
+}
+.dropdown-menu li.first {
+ border-bottom: 1px solid #c4c4c4;
+}
+.dropdown-menu li.first a {
+ font-weight: bold;
+}
+.dropdown-menu > li:hover,
+.dropdown-menu > li:focus {
+ color: #fff;
+ background: #ffc926;
+}
+.yamm .dropdown-menu li h3 {
+ font-size: 15px;
+ margin-bottom: 0;
+ color: #999999;
+ padding: 10px 0;
+}
+.nopadding {
+ padding: 0 !important;
+}
+.yamm-content .col-md-6 {
+ min-width: 210px;
+}
+.navbar-nav .noborder {
+ border-bottom: 0 none !important;
+ font-size: 18px;
+ margin-top: 10px;
+ padding: 8px 15px 4px;
+}
+.fixedheader {
+ background: #ffffff !important;
+ background: #ffffff;
+ /* The Fallback */
+ background: rgba(255, 255, 255, 0.9) !important;
+ box-shadow: none;
+ position: absolute;
+ top: 0px;
+ left: 0;
+ z-index: 9999;
+ width: 100%;
+}
+.nomargin {
+ top: 0;
+}
+.setbg {
+ background: url(../images/header-bg.png) no-repeat scroll center top / cover #ffffff !important;
+}
+.nobg,
+.fixedheader .nav .open > a,
+.fixedheader .nav .open > a:hover,
+.fixedheader .nav .open > a:focus,
+.fixedheader .navbar-nav > li > a.active,
+.fixedheader .navbar-nav > li > a:focus,
+.fixedheader .navbar-nav > li > a:hover,
+.fixedheader .navbar-nav > li > a:hover,
+.fixedheader .navbar-nav > li > a:focus,
+.fixedheader .navbar-nav > li > a.active,
+.fixedheader .navbar-nav > li > a:active {
+ background: #ffffff !important;
+ background: #ffffff;
+ /* The Fallback */
+ background: rgba(255, 255, 255, 0) !important;
+}
+.nav .open > a,
+.nav .open > a:hover,
+.nav .open > a:focus,
+.navbar-nav > li > a.active,
+.navbar-nav > li > a:focus,
+.navbar-nav > li > a:hover {
+ border-color: #777777;
+}
+.subnavi li:hover.dropdown::before {
+ position: absolute;
+ content: "";
+ z-index: 99998;
+ width: 0;
+ height: 0;
+ left: 60px;
+ top: 37px;
+ border-left: 8px solid transparent;
+ border-right: 8px solid transparent;
+ border-top: 8px solid #777777;
+}
+.fixedheader .navbar-nav > li > a {
+ border-color: transparent;
+ background: rgba(255, 255, 255, 0) !important;
+}
+.fixedheader .navbar-nav > li > a:hover {
+ background: #ffc926 !important;
+ color: #fff;
+}
+.fixedheader .nav .open > a.dropdown-toggle:hover,
+.fixedheader .nav .open > a.dropdown-toggle:focus,
+.fixedheader .navbar-nav > li > a.dropdown-toggle.active,
+.fixedheader .navbar-nav > li > a.dropdown-toggle:focus,
+.fixedheader .navbar-nav > li > a.dropdown-toggle:hover,
+.fixedheader .navbar-nav > li > a.dropdown-toggle:hover,
+.fixedheader .navbar-nav > li > a.dropdown-toggle:focus,
+.fixedheader .navbar-nav > li > a.dropdown-toggle.active,
+.fixedheader .navbar-nav > li > a.dropdown-toggle:active {
+ background: #ffc926 !important;
+ color: #fff;
+}
+.fixedheader .subnavi .navbar-nav > li > a:hover {
+ color: #3b3b3b;
+}
+.nobg .navbar-nav > li > a i,
+.nobg .navbar-nav > li > a {
+ color: #ffffff;
+}
+.nobg {
+ border-bottom: 1px solid rgba(255, 255, 255, 0.3);
+ -webkit-background-clip: padding-box;
+ /* for Safari */
+ background-clip: padding-box;
+ /* for IE9+, Firefox 4+, Opera, Chrome */
+}
+.navbar-toggle {
+ float: left;
+ margin-bottom: 0px;
+}
+/*
+ 10) SIDEBAR NAV
+===============================================================
+*/
+/* ==================================================================
+ SIDEBAR NAV
+================================================================== */
+.navbar.navbar-static .navbar-header {
+ float: left;
+}
+.navbar .navbar-toggle.toggle-left {
+ float: left;
+ margin-left: 15px;
+}
+.navbar .navbar-toggle.toggle-right {
+ float: right;
+ margin-right: 15px;
+}
+.navbar .navbar-toggle.toggle-sidebar,
+[data-toggle="sidebar"] {
+ display: block;
+}
+.sidebar {
+ padding: 20px;
+ background: #ffffff;
+ border-left: 1px solid rgba(50, 50, 50, 0.1);
+}
+.sidebar li {
+ text-transform: uppercase;
+ border-bottom: 1px solid #ececec;
+}
+.sidebar li:last-child {
+ border-bottom: 0;
+}
+.sidebar a,
+.sidebar i {
+ color: #000;
+}
+.sidebar {
+ position: fixed;
+ display: block;
+ top: 0;
+ bottom: 0;
+ z-index: 9999;
+ min-width: 280px !important;
+ min-height: 100%;
+ max-height: none;
+ overflow: auto;
+}
+.sidebar img {
+ width: 90%;
+ margin: 20px auto;
+}
+.sidebar-left {
+ left: 0;
+}
+.sidebar-right {
+ right: 0;
+}
+.row .sidebar.sidebar-left.sidebar-xs-show {
+ left: 0;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ -moz-transform: none;
+}
+.row .sidebar.sidebar-right.sidebar-xs-show {
+ right: 0;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ -moz-transform: none;
+}
+.sidebar-animate {
+ -webkit-transition: -webkit-transform 300ms ease;
+ -moz-transition: -moz-transform 300ms ease;
+ transition: transform 300ms ease;
+}
+.sidebar.sidebar-left {
+ -webkit-transform: translate3d(-100%, 0, 0);
+ -moz-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+}
+.sidebar.sidebar-left.sidebar-open {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ -moz-transform: none;
+}
+.sidebar.sidebar-right {
+ -webkit-transform: translate3d(100%, 0, 0);
+ -moz-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+}
+.sidebar.sidebar-right.sidebar-open {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ -moz-transform: none;
+}
+/*
+ 11) SLIDER
+===============================================================
+*/
+/* ==================================================================
+ SLIDER
+================================================================== */
+.fixedslider {
+ position: absolute;
+ top: 0;
+}
+.boxedcontainer {
+ max-width: 1170px;
+ margin: auto;
+ padding: 0px 30px;
+}
+.tp-banner-container {
+ width: 100%;
+ position: relative;
+ padding: 0;
+}
+.tp-banner {
+ width: 100%;
+ position: relative;
+}
+.tp-banner-fullscreen-container {
+ width: 100%;
+ position: relative;
+ padding: 0;
+}
+.slider-title,
+.tp-caption.slider-title {
+ position: absolute;
+ color: #fff;
+ font-size: 45px;
+ line-height: 60px;
+ margin: 0px;
+ text-align: center;
+ border-width: 0px;
+ letter-spacing: 2px;
+ border-style: none;
+ white-space: nowrap;
+}
+.slider-title small {
+ font-size: 20px;
+ display: block;
+ margin-top: 20px;
+}
+.slider-title2,
+.tp-caption.slider-title2 {
+ position: absolute;
+ color: #fff;
+ font-weight: 300;
+ font-size: 18px;
+ line-height: 24px;
+ margin: 0px;
+ text-align: center;
+ border-width: 0px;
+ border-style: none;
+ white-space: nowrap;
+}
+.slider-title1,
+.tp-caption.slider-title1 {
+ position: absolute;
+ color: #fff;
+ font-weight: 300;
+ font-size: 16px;
+ line-height: 28px;
+ margin: 0px;
+ text-align: center;
+ border-width: 0px;
+ border-style: none;
+ white-space: nowrap;
+}
+.margin-top a,
+.slider-btn .btn,
+.tp-caption.slider-btn .btn {
+ color: #fff;
+ font-size: 13px !important;
+ text-transform: uppercase;
+ margin: 0 10px 0 0;
+ padding: 14px 44px;
+}
+.slider-btn .btn-white,
+.tp-caption.slider-btn .btn-white {
+ color: #444444;
+}
+.tp-bannertimer {
+ display: none;
+}
+.margin-top {
+ margin-top: 30px;
+}
+/*
+ 12) FOOTER
+===============================================================
+*/
+/* ==================================================================
+ FOOTER
+================================================================== */
+footer .fa {
+ color: #e5aa30;
+ font-size: 50px;
+ padding-right: 14px;
+}
+footer p.text,
+footer a {
+ font-size: 28px;
+ color: #777777;
+}
+footer a:hover {
+ color: #e5aa30;
+}
+footer .info-text .fa {
+ float: left;
+}
+footer .info-text .small {
+ display: block;
+ font-size: 12px;
+ line-height: 1.4em;
+}
+footer.clearfix {
+ border-top: 1px solid #aaaaaa;
+ padding-top: 20px;
+}
+.footer {
+ background-color: #777777;
+ padding: 30px 0 30px;
+ font-size: 16px;
+ color: #fff;
+}
+.footer .left-img {
+ float: left;
+ padding-right: 25px;
+}
+.footer .c4 {
+ float: left;
+}
+.footer .c4 li {
+ color: #fff;
+}
+.footer p.hl4 {
+ font-size: 20px;
+ text-transform: uppercase;
+ color: #fff;
+ padding: 20px 0 0;
+ font-weight: 600;
+}
+.footer .padding-bottom {
+ padding-bottom: 40px;
+}
+.flogo {
+ padding-top: 10px;
+}
+.footer .form-control {
+ background-color: #919191;
+ border-color: #fff;
+ color: #fff;
+ height: 45px;
+ margin: 0 6px 0 0;
+ -webkit-border-radius: 50px;
+ -moz-border-radius: 50px;
+ border-radius: 50px;
+ padding-left: 40px;
+ width: 100%;
+}
+.social-footer a:link i,
+.social-footer a:visited i {
+ color: #fff;
+}
+.social-footer a:hover i,
+.social-footer a:active i {
+ background-color: #777777;
+}
+.social-footer i {
+ display: inline-block;
+ width: 50px;
+ height: 50px;
+ line-height: 50px;
+ text-align: center;
+ font-size: 28px;
+ margin: 0 3px 3px 0;
+ padding: 0 0px 0 0;
+}
+.social-footer i.fa-facebook {
+ background-color: #3b5998;
+}
+.social-footer i.fa-twitter {
+ background-color: #00aced;
+}
+.social-footer i.fa-google-plus {
+ background-color: #dd4b39;
+}
+.social-footer i.fa-youtube {
+ background-color: #bb0000;
+}
+.social-footer i.fa-linkedin {
+ background-color: #007bb6;
+}
+.social-footer i.fa-instagram {
+ background-color: #517fa4;
+}
+.social-footer i.fa-pinterest-p {
+ background-color: #cb2027;
+}
+.social-footer i.fa-vine {
+ background-color: #00bf8f;
+}
+.social-footer i.fa-flickr {
+ background-color: #ff0084;
+}
+.social-footer i.fa-tumblr {
+ background-color: #32506d;
+}
+.social-footer i.fa-vimeo {
+ background-color: #aad450;
+}
+.social-footer i.fa-foursquare {
+ background-color: #0072b1;
+}
+.social-footer i.fa-users {
+ background-color: #e5aa30;
+}
+.footer .form-control::-moz-placeholder {
+ color: #fff;
+ opacity: 1;
+}
+.footer .form-control:-ms-input-placeholder {
+ color: #fff;
+}
+.footer .form-control::-webkit-input-placeholder {
+ color: #fff;
+}
+.footer .btn-primary {
+ height: 45px !important;
+ line-height: 1 !important;
+ padding-left: 25px !important;
+ padding-right: 25px !important;
+}
+.footer .btn-primary:hover {
+ background-color: #fff;
+ color: #e5aa30;
+ border-color: #ffc926;
+}
+.copyrights {
+ background-color: #5e5e5e;
+ padding: 30px 0;
+ font-size: 15px;
+ color: #fff;
+}
+.copyrights p {
+ margin: 0;
+}
+.copyrights a {
+ font-weight: 600;
+}
+.link-footer a i {
+ color: #666666 !important;
+ font-size: 16px;
+ margin-left: 7px;
+}
+.link-footer a:hover i {
+ color: #fff !important;
+}
+/*
+ 13) SIDEBAR WIDGETS
+===============================================================
+*/
+/* ==================================================================
+ SIDEBAR WIDGETS
+================================================================== */
+.post-media img,
+.flickrwidget img {
+ opacity: 1;
+}
+.post-media img:hover,
+.flickrwidget img:hover {
+ opacity: 0.8;
+}
+#sidebar {
+ padding: 0 20px;
+}
+#sidebar .widget {
+ position: relative;
+ display: block;
+ margin-bottom: 40px;
+}
+#sidebar ul {
+ padding: 0;
+}
+#sidebar .widget a.collapse-widget {
+ color: #777777;
+}
+#sidebar .widget a.collapse-widget::before {
+ display: none;
+ font-family: FontAwesome;
+ content: "";
+ padding: 0;
+ font-size: 0;
+ color: #ffc926;
+}
+#sidebar .widget a.collapse-widget.collapsed::before {
+ display: none;
+ content: "";
+}
+@media (max-width: 768px) {
+ #sidebar .widget a.collapse-widget {
+ color: #777777;
+ }
+ #sidebar .widget a.collapse-widget::before {
+ display: inline-block;
+ font-family: FontAwesome;
+ content: "\f106";
+ padding: 6px 10px 0 0;
+ font-size: 32px;
+ color: #ffc926;
+ }
+ #sidebar .widget a.collapse-widget.collapsed::before {
+ display: inline-block;
+ content: "\f107";
+ }
+}
+#sidebar .widget .hl5,
+#sidebar .widget .hl5 a {
+ color: #e5aa30;
+ font-size: 18px;
+ font-weight: 600;
+ margin-bottom: 14px;
+}
+#sidebar .widget .hl5 a:hover,
+#sidebar .widget .hl5:hover {
+ background: transparent;
+ color: #777777;
+}
+#sidebar .widget .boxwidget {
+ text-align: center;
+ margin: 0 auto;
+ padding-bottom: 20px;
+}
+#sidebar .widget .searchwidget {
+ background-color: #eaeaea;
+ border-bottom: 1px solid transparent;
+ padding: 12px 12px;
+}
+#sidebar .widget .searchwidget .form-group {
+ margin-bottom: 10px;
+}
+#sidebar .widget .searchwidget .fa-question {
+ background-color: #777777;
+ width: 26px;
+ height: 26px;
+ border-radius: 50%;
+ line-height: 26px;
+ color: #fff;
+ padding-left: 8px;
+ font-size: 18px;
+}
+#sidebar .widget .newswidget {
+ border-bottom: 1px solid #777777;
+ padding-bottom: 10px;
+ margin-bottom: 10px;
+}
+#sidebar .widget .newswidget p {
+ line-height: 1.4em;
+}
+#sidebar .widget .newswidget.gray-box {
+ background-color: #eaeaea;
+ border-bottom: 1px solid transparent;
+ padding: 12px 12px;
+}
+#sidebar .widget .newswidget.gray-box .hl4 {
+ color: #e5aa30;
+ font-weight: 600;
+ font-size: 17px;
+ margin-bottom: 12px;
+}
+#sidebar .widget .newswidget.gray-box p {
+ font-style: italic;
+}
+#sidebar .widget .imgswidget img {
+ width: 100%;
+ display: block;
+ padding-bottom: 50px;
+ padding-right: 10px;
+ padding-left: 10px;
+}
+#sidebar #side-navigation .side-menu {
+ float: left;
+ width: 100%;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ font-size: 14px;
+ text-align: left;
+ list-style: none;
+ /* li.sub-menu-item:before {
+ list-style: none;
+ font-family: FontAwesome;
+ content: "\f005";
+ position:relative;
+ left: -10px;
+ background-color:@brand-secondary;
+ color:@brand-secondary;
+ display:inline-block;
+ width:8px;
+ height:8px;
+ border-radius:50%
+ }*/
+}
+#sidebar #side-navigation .side-menu li {
+ padding: 5px 12px 5px !important;
+ font-size: 14px;
+ line-height: 28px;
+ background: transparent;
+ border-bottom: 1px solid #c3c3c3;
+}
+#sidebar #side-navigation .side-menu li a {
+ color: #777777;
+ font-weight: 600;
+ padding: 0px 0px 3px 2px;
+}
+#sidebar #side-navigation .side-menu li:hover,
+#sidebar #side-navigation .side-menu li.active {
+ color: #fff;
+ background: #ffc926;
+}
+#sidebar #side-navigation .side-menu li:hover a,
+#sidebar #side-navigation .side-menu li.active a {
+ color: #fff;
+}
+#sidebar #side-navigation .side-menu li.sub-menu-item {
+ border-bottom: none;
+ border-bottom: 1px solid #eaeaea;
+ list-style: none;
+}
+#sidebar #side-navigation .side-menu li.sub-menu-item.active a {
+ color: black;
+}
+#sidebar #side-navigation .side-menu li.sub-menu-item .fa {
+ color: #ffc926;
+}
+#sidebar #side-navigation .side-menu li.sub-menu-item:hover,
+#sidebar #side-navigation .side-menu li.sub-menu-item.active {
+ color: black;
+ background: transparent;
+}
+#sidebar #side-navigation .side-menu li.sub-menu-item:hover a,
+#sidebar #side-navigation .side-menu li.sub-menu-item.active a {
+ color: black;
+}
+.listwidget ul li {
+ padding: 12px 0;
+ margin-left: 10px;
+ border-bottom: 1px solid #dddddd;
+}
+.listwidget ul li:last-child {
+ padding-bottom: 0;
+ border-bottom: 0 solid #dddddd;
+}
+.flickrwidget .list-inline > li {
+ margin: 0;
+ float: left;
+ padding: 0;
+ width: 33.3333%;
+}
+.flickrwidget img {
+ width: 94%;
+ padding: 0 0 0 0;
+}
+#sidebar .widget,
+#sidebar .widget-title {
+ margin-top: 0;
+ padding-top: 0;
+}
+#sidebar .widget-title {
+ font-size: 25px;
+ position: relative;
+ padding-bottom: 8px;
+ border-bottom: 1px solid #ffc926;
+ font-weight: normal;
+ margin-bottom: 20px;
+ color: #777777;
+ line-height: 1.2em;
+ vertical-align: baseline;
+}
+/*
+ 14) COLOR SCHEMES
+===============================================================
+*/
+/* ==================================================================
+ COLOR SCHEMES
+================================================================== */
+.home-form .nav-tabs > li.active > a,
+.home-form .nav-tabs > li > a:hover,
+.home-form .nav-tabs > li.active > a:focus,
+.slider-btn .btn-white:hover,
+.tp-caption.slider-btn .btn-white:hover,
+.owl-theme .owl-dots .owl-dot.active span,
+.owl-theme .owl-dots .owl-dot:hover span,
+.icon-container,
+.dash .digit,
+.pagination > li > a:hover,
+.pagination > li > span:hover,
+.pagination > li > a:focus,
+.pagination > li > span:focus,
+h1:hover a,
+h2:hover a,
+h3:hover a,
+h4:hover a,
+h5:hover a,
+.btn-white:hover,
+.btn-white:focus,
+.btn-white.focus,
+.btn-white:active,
+.btn-white.active,
+.open > .dropdown-toggle.btn-white,
+.btn-default:hover,
+.btn-default:focus,
+.btn-default.focus,
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default,
+.pricing-table-footer,
+.pricing-table-header,
+.yellow,
+.panel-default > .panel-heading,
+.c2 li span,
+.btn-primary {
+ color: #fff;
+ background-color: #ffc926;
+ border-color: #ffc926;
+}
+.form-control:focus {
+ border-color: #ffc926;
+ box-shadow: none;
+}
+.travel-title hr {
+ border-color: #ffc926;
+}
+#infoform .form-control,
+.input-group-addon,
+.dropdown .btn-white,
+.form-inline .input-group > .form-control {
+ border-bottom-color: #ffc926;
+}
+.post-title .pull-right span,
+.bootstrap-select .fa-angle-down,
+.input-group-addon i,
+.rating i,
+a,
+.sidebar li a:hover,
+.sidebar li a:focus,
+.yamm .dropdown-menu li h3 i,
+.yamm .yamm-content li a:hover,
+.yamm .yamm-content li a:focus,
+.breadcrumb > li + li::before,
+.c3 span,
+.c1 li:before {
+ color: #e5aa30;
+}
+/*
+ 15) EXTRAS
+===============================================================
+*/
+/* ==================================================================
+ EXTRAS
+================================================================== */
+.col-xs-15,
+.col-sm-15,
+.col-md-15,
+.col-lg-15 {
+ position: relative;
+ min-height: 1px;
+ padding-right: 10px;
+ padding-left: 10px;
+}
+.col-xs-15 {
+ width: 20%;
+ float: left;
+}
+@media (min-width: 768px) {
+ .col-sm-15 {
+ width: 20%;
+ float: left;
+ }
+}
+@media (min-width: 992px) {
+ .col-md-15 {
+ width: 20%;
+ float: left;
+ }
+}
+@media (min-width: 1200px) {
+ .col-lg-15 {
+ width: 20%;
+ float: left;
+ }
+}
+/*
+ 16) RESPONSIVE
+===============================================================
+*/
+/* ==================================================================
+ RESPONSIVE
+================================================================== */
+@media (max-width: 1200px) {
+ .navbar-nav > li > a {
+ font-size: 13px;
+ padding: 10px 7px 6px 7px;
+ }
+ .absolute-carousel {
+ top: 53px;
+ }
+}
+@media (max-width: 1024px) {
+ #sidebar #side-navigation .side-menu {
+ width: 100%;
+ }
+ .bookform .input-group {
+ width: 100% !important;
+ }
+ .bookform .form-group {
+ margin-bottom: 30px;
+ }
+ .navbar-nav > li > a {
+ font-size: 16px;
+ }
+ .navbar-brand {
+ right: 0;
+ width: auto;
+ left: auto;
+ }
+ .navbar-times {
+ display: none;
+ }
+ .home-message {
+ padding: 88px 42px;
+ min-height: 360px;
+ }
+ .navbar .navbar-subnavi .subnavi {
+ padding-left: 0;
+ }
+ .navbar .navbar-subnavi .subnavi::before {
+ left: 0;
+ top: 0;
+ border-top: none;
+ border-bottom: none;
+ border-left: none;
+ }
+ footer .info-text,
+ footer .text-right {
+ text-align: center;
+ }
+ footer .info-text .fa,
+ footer .text-right .fa {
+ float: none;
+ }
+ footer .text-center {
+ padding-bottom: 12px;
+ }
+ .absolute-carousel {
+ top: 52px;
+ }
+}
+@media (max-width: 992px) {
+ /* Force table to not be like tables anymore */
+ #no-more-tables table,
+ #no-more-tables thead,
+ #no-more-tables tbody,
+ #no-more-tables th,
+ #no-more-tables td,
+ #no-more-tables tr {
+ display: block;
+ }
+ /* Hide table headers (but not display: none;, for accessibility) */
+ #no-more-tables thead tr {
+ position: absolute;
+ top: -9999px;
+ left: -9999px;
+ }
+ #no-more-tables tr {
+ border: 1px solid #ccc;
+ }
+ #no-more-tables td {
+ /* Behave like a "row" */
+ border: none;
+ border-bottom: 1px solid #fff;
+ position: relative;
+ padding-left: 50%;
+ white-space: normal;
+ text-align: right;
+ }
+ #no-more-tables td:before {
+ /* Now like a table header */
+ position: absolute;
+ /* Top/left values mimic padding */
+ top: 6px;
+ left: 6px;
+ width: 45%;
+ padding-right: 10px;
+ white-space: nowrap;
+ text-align: left;
+ font-weight: bold;
+ }
+ #no-more-tables .btn {
+ display: block;
+ width: 100%;
+ }
+ #no-more-tables .icons-percent::before {
+ float: right;
+ padding-right: 6px;
+ }
+ #no-more-tables td:last-child {
+ padding-left: 8px;
+ }
+ #no-more-tables tr:nth-child(2n+1) > td {
+ background-color: #d8d8d8;
+ }
+ /*
+ Label the data
+ */
+ #no-more-tables td:before {
+ content: attr(data-title);
+ }
+}
+@media (max-width: 992px) {
+ /* Force table to not be like tables anymore */
+ .no-more-tables table,
+ .no-more-tables thead,
+ .no-more-tables tbody,
+ .no-more-tables th,
+ .no-more-tables td,
+ .no-more-tables tr {
+ display: block;
+ }
+ /* Hide table headers (but not display: none;, for accessibility) */
+ .no-more-tables thead tr {
+ position: absolute;
+ top: -9999px;
+ left: -9999px;
+ }
+ .no-more-tables tr {
+ border: 1px solid #ccc;
+ }
+ .no-more-tables td,
+ .no-more-tables .table > tbody > tr > td {
+ /* Behave like a "row" */
+ border: none;
+ border-bottom: 1px solid #fff;
+ position: relative;
+ padding-left: 50%;
+ white-space: normal;
+ text-align: right;
+ }
+ .no-more-tables td:before {
+ /* Now like a table header */
+ position: absolute;
+ /* Top/left values mimic padding */
+ top: 6px;
+ left: 6px;
+ width: 45%;
+ padding-right: 10px;
+ white-space: nowrap;
+ text-align: left;
+ font-weight: bold;
+ }
+ .no-more-tables .btn {
+ display: block;
+ width: 100%;
+ }
+ .no-more-tables .icons-percent::before {
+ float: right;
+ padding-right: 6px;
+ }
+ .no-more-tables td:last-child {
+ padding-left: 8px;
+ }
+ .no-more-tables tr:nth-child(2n+1) > td {
+ background-color: #d8d8d8;
+ }
+ /*
+ Label the data
+ */
+ .no-more-tables td:before {
+ content: attr(data-title);
+ }
+}
+@media (max-width: 768px) {
+ .navbar .navbar-subnavi .navbar-nav {
+ margin: 7.5px -10px;
+ }
+ #no-more-tables_first {
+ overflow-x: hidden;
+ }
+ .container {
+ padding-left: 8px;
+ padding-right: 8px;
+ }
+ .home-info-box {
+ margin-right: -30px;
+ }
+ .btn-over-slider {
+ top: 110px;
+ }
+ #sidebar #side-navigation .side-menu {
+ width: 100%;
+ }
+ #widthphone.home-form .nav-tabs > li {
+ width: 50%;
+ }
+ .fullscreen {
+ padding: 0;
+ }
+ .absolute-carousel {
+ top: 0px;
+ left: -10px;
+ }
+ .home-message {
+ padding: 0px 42px;
+ min-height: 360px;
+ }
+ .absolute {
+ margin-top: 0;
+ top: 0;
+ }
+ .fixedheader {
+ position: relative;
+ top: 0;
+ }
+ .travel-list .alignleft {
+ width: 100%;
+ float: none;
+ }
+ .single-travel-image .thumbnails {
+ display: none !important;
+ }
+ .sidebar-price,
+ .single-travel-image .price {
+ display: none;
+ position: absolute;
+ }
+ .pricing-table-header {
+ margin-top: 20px;
+ }
+ .navbar-toggle {
+ margin-top: 0px;
+ padding: 10px;
+ font-size: 24px;
+ }
+ .dropdown-menu li {
+ padding: 5px 10px 5px !important;
+ }
+ .yamm .yamm-content {
+ padding: 0 0;
+ }
+ .navbar-collapse,
+ .navbar {
+ border: 0 none;
+ margin: 4px 0;
+ }
+ .navbar-nav .noborder,
+ .sidebar-menu-container,
+ .breadcrumb {
+ display: none;
+ }
+ .topbar-social {
+ display: inline;
+ }
+ .topbar {
+ line-height: 40px;
+ }
+ .topbar li,
+ .topbar-social li {
+ padding: 0 5px;
+ }
+ .topbar .pull-left,
+ .topbar-social,
+ .topbar .pull-right {
+ float: none !important;
+ text-align: center !important;
+ }
+ .copyrights .text-left,
+ .copyrights .text-right {
+ text-align: center !important;
+ }
+ .navbar-nav > li > a {
+ padding: 10px 15px;
+ border: 0;
+ }
+ .subnavi li:hover.dropdown::before {
+ display: none;
+ }
+ .navbar-brand {
+ margin-top: 0px;
+ padding: 0;
+ }
+ .navbar-brand img {
+ margin-top: 4px;
+ }
+ .navbar .navbar-left {
+ padding-left: 15px;
+ }
+ .header {
+ padding: 0px 0;
+ }
+ .nobg {
+ background: #222222 !important;
+ background-color: #222222 !important;
+ }
+ .home-form .nav-tabs > li > a {
+ padding: 20px 22px;
+ }
+ h1 {
+ font-size: 28px;
+ }
+ .service-style .icon-container,
+ .mini-desti img {
+ margin-bottom: 20px;
+ }
+ .homeform {
+ padding: 40px 0 0 !important;
+ }
+ .home-form .nav-tabs > li > a i {
+ font-size: 16px;
+ line-height: 16px;
+ }
+ .bookform .form-control {
+ margin-bottom: 0;
+ }
+ .bookform .form-group,
+ .bookform .make-margin {
+ margin: 10px 0 !important;
+ }
+}
+/*
+
+/* ################################################################# */
+/*
+ 17) CHECKBOX
+===============================================================
+*/
+.checkbox {
+ padding-left: 20px;
+ display: block;
+}
+.checkbox label {
+ display: inline-block;
+ vertical-align: middle;
+ position: relative;
+ padding-left: 5px;
+}
+.checkbox label::before {
+ content: "";
+ display: inline-block;
+ position: absolute;
+ width: 18px;
+ height: 18px;
+ left: 0;
+ top: 3px;
+ margin-left: -20px;
+ border: 1px solid #ccc;
+ border-radius: 3px;
+ background-color: #fff;
+ -webkit-transition: border 0.15s ease-in-out, color 0.15s ease-in-out;
+ -o-transition: border 0.15s ease-in-out, color 0.15s ease-in-out;
+ transition: border 0.15s ease-in-out, color 0.15s ease-in-out;
+}
+.checkbox label::after {
+ display: inline-block;
+ position: absolute;
+ width: 16px;
+ height: 16px;
+ left: 0;
+ top: 0;
+ margin-left: -20px;
+ padding-left: 3px;
+ padding-top: 1px;
+ font-size: 11px;
+ color: #555555;
+}
+.checkbox input[type="checkbox"],
+.checkbox input[type="radio"] {
+ opacity: 0;
+ z-index: 1;
+}
+.checkbox input[type="checkbox"]:focus + label::before,
+.checkbox input[type="radio"]:focus + label::before {
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+.checkbox input[type="checkbox"]:checked + label::after,
+.checkbox input[type="radio"]:checked + label::after {
+ font-family: 'FontAwesome';
+ font-size: 16px;
+ line-height: 23px;
+ content: "\f00c";
+}
+.checkbox input[type="checkbox"]:indeterminate + label::after,
+.checkbox input[type="radio"]:indeterminate + label::after {
+ display: block;
+ content: " ";
+ width: 10px;
+ height: 3px;
+ background-color: #555555;
+ border-radius: 2px;
+ margin-left: -16.5px;
+ margin-top: 7px;
+}
+.checkbox input[type="checkbox"]:disabled + label,
+.checkbox input[type="radio"]:disabled + label {
+ opacity: 0.65;
+}
+.checkbox input[type="checkbox"]:disabled + label::before,
+.checkbox input[type="radio"]:disabled + label::before {
+ background-color: #eeeeee;
+ cursor: not-allowed;
+}
+.checkbox.checkbox-circle label::before {
+ border-radius: 50%;
+}
+.checkbox.checkbox-inline {
+ margin-top: 0;
+}
+.checkbox-primary input[type="checkbox"]:checked + label::before,
+.checkbox-primary input[type="radio"]:checked + label::before {
+ background-color: #777777;
+ border-color: #777777;
+}
+.checkbox-primary input[type="checkbox"]:checked + label::after,
+.checkbox-primary input[type="radio"]:checked + label::after {
+ color: #fff;
+}
+.checkbox-danger input[type="checkbox"]:checked + label::before,
+.checkbox-danger input[type="radio"]:checked + label::before {
+ background-color: #d9534f;
+ border-color: #d9534f;
+}
+.checkbox-danger input[type="checkbox"]:checked + label::after,
+.checkbox-danger input[type="radio"]:checked + label::after {
+ color: #fff;
+}
+.checkbox-info input[type="checkbox"]:checked + label::before,
+.checkbox-info input[type="radio"]:checked + label::before {
+ background-color: #5bc0de;
+ border-color: #5bc0de;
+}
+.checkbox-info input[type="checkbox"]:checked + label::after,
+.checkbox-info input[type="radio"]:checked + label::after {
+ color: #fff;
+}
+.checkbox-warning input[type="checkbox"]:checked + label::before,
+.checkbox-warning input[type="radio"]:checked + label::before {
+ background-color: #f0ad4e;
+ border-color: #f0ad4e;
+}
+.checkbox-warning input[type="checkbox"]:checked + label::after,
+.checkbox-warning input[type="radio"]:checked + label::after {
+ color: #fff;
+}
+.checkbox-success input[type="checkbox"]:checked + label::before,
+.checkbox-success input[type="radio"]:checked + label::before {
+ background-color: #558c55;
+ border-color: #558c55;
+}
+.checkbox-success input[type="checkbox"]:checked + label::after,
+.checkbox-success input[type="radio"]:checked + label::after {
+ color: #fff;
+}
+.checkbox-primary input[type="checkbox"]:indeterminate + label::before,
+.checkbox-primary input[type="radio"]:indeterminate + label::before {
+ background-color: #777777;
+ border-color: #777777;
+}
+.checkbox-primary input[type="checkbox"]:indeterminate + label::after,
+.checkbox-primary input[type="radio"]:indeterminate + label::after {
+ background-color: #fff;
+}
+.checkbox-danger input[type="checkbox"]:indeterminate + label::before,
+.checkbox-danger input[type="radio"]:indeterminate + label::before {
+ background-color: #d9534f;
+ border-color: #d9534f;
+}
+.checkbox-danger input[type="checkbox"]:indeterminate + label::after,
+.checkbox-danger input[type="radio"]:indeterminate + label::after {
+ background-color: #fff;
+}
+.checkbox-info input[type="checkbox"]:indeterminate + label::before,
+.checkbox-info input[type="radio"]:indeterminate + label::before {
+ background-color: #5bc0de;
+ border-color: #5bc0de;
+}
+.checkbox-info input[type="checkbox"]:indeterminate + label::after,
+.checkbox-info input[type="radio"]:indeterminate + label::after {
+ background-color: #fff;
+}
+.checkbox-warning input[type="checkbox"]:indeterminate + label::before,
+.checkbox-warning input[type="radio"]:indeterminate + label::before {
+ background-color: #f0ad4e;
+ border-color: #f0ad4e;
+}
+.checkbox-warning input[type="checkbox"]:indeterminate + label::after,
+.checkbox-warning input[type="radio"]:indeterminate + label::after {
+ background-color: #fff;
+}
+.checkbox-success input[type="checkbox"]:indeterminate + label::before,
+.checkbox-success input[type="radio"]:indeterminate + label::before {
+ background-color: #558c55;
+ border-color: #558c55;
+}
+.checkbox-success input[type="checkbox"]:indeterminate + label::after,
+.checkbox-success input[type="radio"]:indeterminate + label::after {
+ background-color: #fff;
+}
+.radio {
+ padding-left: 20px;
+}
+.radio label {
+ display: inline-block;
+ vertical-align: middle;
+ position: relative;
+ padding-left: 5px;
+}
+.radio label::before {
+ content: "";
+ display: inline-block;
+ position: absolute;
+ width: 17px;
+ height: 17px;
+ left: 0;
+ margin-left: -20px;
+ border: 1px solid #ccc;
+ border-radius: 50%;
+ background-color: #fff;
+ -webkit-transition: border 0.15s ease-in-out;
+ -o-transition: border 0.15s ease-in-out;
+ transition: border 0.15s ease-in-out;
+}
+.radio label::after {
+ display: inline-block;
+ position: absolute;
+ content: " ";
+ width: 11px;
+ height: 11px;
+ left: 3px;
+ top: 3px;
+ margin-left: -20px;
+ border-radius: 50%;
+ background-color: #555555;
+ -webkit-transform: scale(0, 0);
+ -ms-transform: scale(0, 0);
+ -o-transform: scale(0, 0);
+ transform: scale(0, 0);
+ -webkit-transition: -webkit-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33);
+ -moz-transition: -moz-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33);
+ -o-transition: -o-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33);
+ transition: transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33);
+}
+.radio input[type="radio"] {
+ opacity: 0;
+ z-index: 1;
+}
+.radio input[type="radio"]:focus + label::before {
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+.radio input[type="radio"]:checked + label::after {
+ -webkit-transform: scale(1, 1);
+ -ms-transform: scale(1, 1);
+ -o-transform: scale(1, 1);
+ transform: scale(1, 1);
+}
+.radio input[type="radio"]:disabled + label {
+ opacity: 0.65;
+}
+.radio input[type="radio"]:disabled + label::before {
+ cursor: not-allowed;
+}
+.radio.radio-inline {
+ margin-top: 0;
+}
+.radio-primary input[type="radio"] + label::after {
+ background-color: #777777;
+}
+.radio-primary input[type="radio"]:checked + label::before {
+ border-color: #777777;
+}
+.radio-primary input[type="radio"]:checked + label::after {
+ background-color: #777777;
+}
+.radio-danger input[type="radio"] + label::after {
+ background-color: #d9534f;
+}
+.radio-danger input[type="radio"]:checked + label::before {
+ border-color: #d9534f;
+}
+.radio-danger input[type="radio"]:checked + label::after {
+ background-color: #d9534f;
+}
+.radio-info input[type="radio"] + label::after {
+ background-color: #5bc0de;
+}
+.radio-info input[type="radio"]:checked + label::before {
+ border-color: #5bc0de;
+}
+.radio-info input[type="radio"]:checked + label::after {
+ background-color: #5bc0de;
+}
+.radio-warning input[type="radio"] + label::after {
+ background-color: #f0ad4e;
+}
+.radio-warning input[type="radio"]:checked + label::before {
+ border-color: #f0ad4e;
+}
+.radio-warning input[type="radio"]:checked + label::after {
+ background-color: #f0ad4e;
+}
+.radio-success input[type="radio"] + label::after {
+ background-color: #558c55;
+}
+.radio-success input[type="radio"]:checked + label::before {
+ border-color: #558c55;
+}
+.radio-success input[type="radio"]:checked + label::after {
+ background-color: #558c55;
+}
+input[type="checkbox"].styled:checked + label:after,
+input[type="radio"].styled:checked + label:after {
+ font-family: 'FontAwesome';
+ content: "\f00c";
+}
+input[type="checkbox"] .styled:checked + label::before,
+input[type="radio"] .styled:checked + label::before {
+ color: #fff;
+}
+input[type="checkbox"] .styled:checked + label::after,
+input[type="radio"] .styled:checked + label::after {
+ color: #fff;
+}
+/*
+ 18) FONT TRIPS
+===============================================================
+*/
+@font-face {
+ font-family: "trips";
+ src: url("../fonts/trips.eot");
+ src: url("../fonts/trips.eot?#iefix") format("embedded-opentype"), url("../fonts/trips.woff") format("woff"), url("../fonts/trips.ttf") format("truetype"), url("../fonts/trips.svg#trips") format("svg");
+ font-weight: normal;
+ font-style: normal;
+}
+[data-icon]:before {
+ font-family: "trips" !important;
+ content: attr(data-icon);
+ font-style: normal !important;
+ font-weight: normal !important;
+ font-variant: normal !important;
+ text-transform: none !important;
+ speak: none;
+ line-height: 1;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+[class^="icon-"]:before,
+[class*=" icon-"]:before {
+ font-family: "trips" !important;
+ font-style: normal !important;
+ font-weight: normal !important;
+ font-variant: normal !important;
+ text-transform: none !important;
+ speak: none;
+ line-height: 1;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+.icon-air6:before {
+ content: "a";
+}
+.icon-airplane51:before {
+ content: "b";
+}
+.icon-airplane67:before {
+ content: "c";
+}
+.icon-airplane68:before {
+ content: "d";
+}
+.icon-airplane70:before {
+ content: "e";
+}
+.icon-airplane72:before {
+ content: "f";
+}
+.icon-airplane73:before {
+ content: "g";
+}
+.icon-airplane74:before {
+ content: "h";
+}
+.icon-bag30:before {
+ content: "i";
+}
+.icon-bicycle2:before {
+ content: "j";
+}
+.icon-bicycle12:before {
+ content: "k";
+}
+.icon-black186:before {
+ content: "l";
+}
+.icon-black401:before {
+ content: "m";
+}
+.icon-boat17:before {
+ content: "n";
+}
+.icon-bus7:before {
+ content: "o";
+}
+.icon-bus21:before {
+ content: "p";
+}
+.icon-bus46:before {
+ content: "q";
+}
+.icon-calendar157:before {
+ content: "r";
+}
+.icon-car80:before {
+ content: "s";
+}
+.icon-car82:before {
+ content: "t";
+}
+.icon-car95:before {
+ content: "u";
+}
+.icon-check52:before {
+ content: "v";
+}
+.icon-checkin:before {
+ content: "w";
+}
+.icon-coconut8:before {
+ content: "x";
+}
+.icon-comment43:before {
+ content: "y";
+}
+.icon-compass67:before {
+ content: "z";
+}
+.icon-containers:before {
+ content: "A";
+}
+.icon-delivery17:before {
+ content: "B";
+}
+.icon-delivery18:before {
+ content: "C";
+}
+.icon-delivery25:before {
+ content: "D";
+}
+.icon-directions2:before {
+ content: "E";
+}
+.icon-distance1:before {
+ content: "F";
+}
+.icon-earth72:before {
+ content: "G";
+}
+.icon-earth186:before {
+ content: "H";
+}
+.icon-earth190:before {
+ content: "I";
+}
+.icon-home63:before {
+ content: "J";
+}
+.icon-hotel16:before {
+ content: "K";
+}
+.icon-hotel68:before {
+ content: "L";
+}
+.icon-house129:before {
+ content: "M";
+}
+.icon-international11:before {
+ content: "N";
+}
+.icon-international22:before {
+ content: "O";
+}
+.icon-location38:before {
+ content: "P";
+}
+.icon-logistics3:before {
+ content: "Q";
+}
+.icon-logistics4:before {
+ content: "R";
+}
+.icon-luggage5:before {
+ content: "S";
+}
+.icon-map29:before {
+ content: "T";
+}
+.icon-map30:before {
+ content: "U";
+}
+.icon-map110:before {
+ content: "V";
+}
+.icon-motorcycle10:before {
+ content: "W";
+}
+.icon-ocean3:before {
+ content: "X";
+}
+.icon-open207:before {
+ content: "Y";
+}
+.icon-parking15:before {
+ content: "Z";
+}
+.icon-passport4:before {
+ content: "0";
+}
+.icon-pc13:before {
+ content: "1";
+}
+.icon-person199:before {
+ content: "2";
+}
+.icon-person209:before {
+ content: "3";
+}
+.icon-persons10:before {
+ content: "4";
+}
+.icon-photo25:before {
+ content: "5";
+}
+.icon-photo147:before {
+ content: "6";
+}
+.icon-pinterest33:before {
+ content: "7";
+}
+.icon-place4:before {
+ content: "8";
+}
+.icon-plane18:before {
+ content: "9";
+}
+.icon-plate17:before {
+ content: "!";
+}
+.icon-road24:before {
+ content: "\"";
+}
+.icon-road29:before {
+ content: "#";
+}
+.icon-rocket48:before {
+ content: "$";
+}
+.icon-rocket61:before {
+ content: "%";
+}
+.icon-school31:before {
+ content: "&";
+}
+.icon-scooter7:before {
+ content: "'";
+}
+.icon-sea8:before {
+ content: "(";
+}
+.icon-sedan3:before {
+ content: ")";
+}
+.icon-shipping:before {
+ content: "*";
+}
+.icon-silhouette66:before {
+ content: "+";
+}
+.icon-smoking4:before {
+ content: ",";
+}
+.icon-snacks1:before {
+ content: "-";
+}
+.icon-stars10:before {
+ content: ".";
+}
+.icon-student40:before {
+ content: "/";
+}
+.icon-suv:before {
+ content: ":";
+}
+.icon-taxi13:before {
+ content: ";";
+}
+.icon-taxi14:before {
+ content: "<";
+}
+.icon-tea24:before {
+ content: "=";
+}
+.icon-telephone5:before {
+ content: ">";
+}
+.icon-tick7:before {
+ content: "?";
+}
+.icon-toilets:before {
+ content: "@";
+}
+.icon-tour:before {
+ content: "[";
+}
+.icon-traffic17:before {
+ content: "]";
+}
+.icon-train8:before {
+ content: "^";
+}
+.icon-train20:before {
+ content: "_";
+}
+.icon-tram4:before {
+ content: "`";
+}
+.icon-transport22:before {
+ content: "{";
+}
+.icon-travel23:before {
+ content: "|";
+}
+.icon-travel25:before {
+ content: "}";
+}
+.icon-truck31:before {
+ content: "~";
+}
+.icon-waiting2:before {
+ content: "\\";
+}
+.icon-walk12:before {
+ content: "\e000";
+}
+.icon-wallet17:before {
+ content: "\e001";
+}
+.icon-wifi10:before {
+ content: "\e002";
+}
+.icon-woman55:before {
+ content: "\e003";
+}
+.icon-address:before {
+ content: "\e004";
+}
+.icon-adjust:before {
+ content: "\e005";
+}
+.icon-air:before {
+ content: "\e006";
+}
+.icon-alert:before {
+ content: "\e007";
+}
+.icon-archive:before {
+ content: "\e008";
+}
+.icon-arrow-combo:before {
+ content: "\e009";
+}
+.icon-arrows-ccw:before {
+ content: "\e00a";
+}
+.icon-attach:before {
+ content: "\e00b";
+}
+.icon-attention:before {
+ content: "\e00c";
+}
+.icon-back:before {
+ content: "\e00d";
+}
+.icon-back-in-time:before {
+ content: "\e00e";
+}
+.icon-bag:before {
+ content: "\e00f";
+}
+.icon-basket:before {
+ content: "\e010";
+}
+.icon-battery:before {
+ content: "\e011";
+}
+.icon-behance:before {
+ content: "\e012";
+}
+.icon-bell:before {
+ content: "\e013";
+}
+.icon-block:before {
+ content: "\e014";
+}
+.icon-book:before {
+ content: "\e015";
+}
+.icon-book-open:before {
+ content: "\e016";
+}
+.icon-bookmark:before {
+ content: "\e017";
+}
+.icon-bookmarks:before {
+ content: "\e018";
+}
+.icon-box:before {
+ content: "\e019";
+}
+.icon-briefcase:before {
+ content: "\e01a";
+}
+.icon-brush:before {
+ content: "\e01b";
+}
+.icon-bucket:before {
+ content: "\e01c";
+}
+.icon-calendar:before {
+ content: "\e01d";
+}
+.icon-camera:before {
+ content: "\e01e";
+}
+.icon-cancel:before {
+ content: "\e01f";
+}
+.icon-cancel-circled:before {
+ content: "\e020";
+}
+.icon-cancel-squared:before {
+ content: "\e021";
+}
+.icon-cc:before {
+ content: "\e022";
+}
+.icon-cc-by:before {
+ content: "\e023";
+}
+.icon-cc-nc:before {
+ content: "\e024";
+}
+.icon-cc-nc-eu:before {
+ content: "\e025";
+}
+.icon-cc-nc-jp:before {
+ content: "\e026";
+}
+.icon-cc-nd:before {
+ content: "\e027";
+}
+.icon-cc-pd:before {
+ content: "\e028";
+}
+.icon-cc-remix:before {
+ content: "\e029";
+}
+.icon-cc-sa:before {
+ content: "\e02a";
+}
+.icon-cc-share:before {
+ content: "\e02b";
+}
+.icon-cc-zero:before {
+ content: "\e02c";
+}
+.icon-ccw:before {
+ content: "\e02d";
+}
+.icon-cd:before {
+ content: "\e02e";
+}
+.icon-chart-area:before {
+ content: "\e02f";
+}
+.icon-chart-bar:before {
+ content: "\e030";
+}
+.icon-chart-line:before {
+ content: "\e031";
+}
+.icon-chart-pie:before {
+ content: "\e032";
+}
+.icon-chat:before {
+ content: "\e033";
+}
+.icon-check:before {
+ content: "\e034";
+}
+.icon-clipboard:before {
+ content: "\e035";
+}
+.icon-clock:before {
+ content: "\e036";
+}
+.icon-cloud:before {
+ content: "\e037";
+}
+.icon-cloud-thunder:before {
+ content: "\e038";
+}
+.icon-code:before {
+ content: "\e039";
+}
+.icon-cog:before {
+ content: "\e03a";
+}
+.icon-comment:before {
+ content: "\e03b";
+}
+.icon-compass:before {
+ content: "\e03c";
+}
+.icon-credit-card:before {
+ content: "\e03d";
+}
+.icon-cup:before {
+ content: "\e03e";
+}
+.icon-cw:before {
+ content: "\e03f";
+}
+.icon-database:before {
+ content: "\e040";
+}
+.icon-db-shape:before {
+ content: "\e041";
+}
+.icon-direction:before {
+ content: "\e042";
+}
+.icon-doc:before {
+ content: "\e043";
+}
+.icon-doc-landscape:before {
+ content: "\e044";
+}
+.icon-doc-text:before {
+ content: "\e045";
+}
+.icon-doc-text-inv:before {
+ content: "\e046";
+}
+.icon-docs:before {
+ content: "\e047";
+}
+.icon-dot:before {
+ content: "\e048";
+}
+.icon-dot-2:before {
+ content: "\e049";
+}
+.icon-dot-3:before {
+ content: "\e04a";
+}
+.icon-down:before {
+ content: "\e04b";
+}
+.icon-down-bold:before {
+ content: "\e04c";
+}
+.icon-down-circled:before {
+ content: "\e04d";
+}
+.icon-down-dir:before {
+ content: "\e04e";
+}
+.icon-down-open:before {
+ content: "\e04f";
+}
+.icon-down-open-big:before {
+ content: "\e050";
+}
+.icon-down-open-mini:before {
+ content: "\e051";
+}
+.icon-down-thin:before {
+ content: "\e052";
+}
+.icon-download:before {
+ content: "\e053";
+}
+.icon-dribbble:before {
+ content: "\e054";
+}
+.icon-dribbble-circled:before {
+ content: "\e055";
+}
+.icon-drive:before {
+ content: "\e056";
+}
+.icon-dropbox:before {
+ content: "\e057";
+}
+.icon-droplet:before {
+ content: "\e058";
+}
+.icon-erase:before {
+ content: "\e059";
+}
+.icon-evernote:before {
+ content: "\e05a";
+}
+.icon-export:before {
+ content: "\e05b";
+}
+.icon-eye:before {
+ content: "\e05c";
+}
+.icon-facebook:before {
+ content: "\e05d";
+}
+.icon-facebook-circled:before {
+ content: "\e05e";
+}
+.icon-facebook-squared:before {
+ content: "\e05f";
+}
+.icon-fast-backward:before {
+ content: "\e060";
+}
+.icon-fast-forward:before {
+ content: "\e061";
+}
+.icon-feather:before {
+ content: "\e062";
+}
+.icon-flag:before {
+ content: "\e063";
+}
+.icon-flash:before {
+ content: "\e064";
+}
+.icon-flashlight:before {
+ content: "\e065";
+}
+.icon-flattr:before {
+ content: "\e066";
+}
+.icon-flickr:before {
+ content: "\e067";
+}
+.icon-flickr-circled:before {
+ content: "\e068";
+}
+.icon-flight:before {
+ content: "\e069";
+}
+.icon-floppy:before {
+ content: "\e06a";
+}
+.icon-flow-branch:before {
+ content: "\e06b";
+}
+.icon-flow-cascade:before {
+ content: "\e06c";
+}
+.icon-flow-line:before {
+ content: "\e06d";
+}
+.icon-flow-parallel:before {
+ content: "\e06e";
+}
+.icon-flow-tree:before {
+ content: "\e06f";
+}
+.icon-folder:before {
+ content: "\e070";
+}
+.icon-forward:before {
+ content: "\e071";
+}
+.icon-gauge:before {
+ content: "\e072";
+}
+.icon-github:before {
+ content: "\e073";
+}
+.icon-github-circled:before {
+ content: "\e074";
+}
+.icon-globe:before {
+ content: "\e075";
+}
+.icon-google-circles:before {
+ content: "\e076";
+}
+.icon-gplus:before {
+ content: "\e077";
+}
+.icon-gplus-circled:before {
+ content: "\e078";
+}
+.icon-graduation-cap:before {
+ content: "\e079";
+}
+.icon-heart:before {
+ content: "\e07a";
+}
+.icon-heart-empty:before {
+ content: "\e07b";
+}
+.icon-help:before {
+ content: "\e07c";
+}
+.icon-help-circled:before {
+ content: "\e07d";
+}
+.icon-home:before {
+ content: "\e07e";
+}
+.icon-hourglass:before {
+ content: "\e07f";
+}
+.icon-inbox:before {
+ content: "\e080";
+}
+.icon-infinity:before {
+ content: "\e081";
+}
+.icon-info:before {
+ content: "\e082";
+}
+.icon-info-circled:before {
+ content: "\e083";
+}
+.icon-instagrem:before {
+ content: "\e084";
+}
+.icon-install:before {
+ content: "\e085";
+}
+.icon-key:before {
+ content: "\e086";
+}
+.icon-keyboard:before {
+ content: "\e087";
+}
+.icon-lamp:before {
+ content: "\e088";
+}
+.icon-language:before {
+ content: "\e089";
+}
+.icon-lastfm:before {
+ content: "\e08a";
+}
+.icon-lastfm-circled:before {
+ content: "\e08b";
+}
+.icon-layout:before {
+ content: "\e08c";
+}
+.icon-leaf:before {
+ content: "\e08d";
+}
+.icon-left:before {
+ content: "\e08e";
+}
+.icon-left-bold:before {
+ content: "\e08f";
+}
+.icon-left-circled:before {
+ content: "\e090";
+}
+.icon-left-dir:before {
+ content: "\e091";
+}
+.icon-left-open:before {
+ content: "\e092";
+}
+.icon-left-open-big:before {
+ content: "\e093";
+}
+.icon-left-open-mini:before {
+ content: "\e094";
+}
+.icon-left-thin:before {
+ content: "\e095";
+}
+.icon-level-down:before {
+ content: "\e096";
+}
+.icon-level-up:before {
+ content: "\e097";
+}
+.icon-lifebuoy:before {
+ content: "\e098";
+}
+.icon-light-down:before {
+ content: "\e099";
+}
+.icon-light-up:before {
+ content: "\e09a";
+}
+.icon-link:before {
+ content: "\e09b";
+}
+.icon-linkedin:before {
+ content: "\e09c";
+}
+.icon-linkedin-circled:before {
+ content: "\e09d";
+}
+.icon-list:before {
+ content: "\e09e";
+}
+.icon-list-add:before {
+ content: "\e09f";
+}
+.icon-location:before {
+ content: "\e0a0";
+}
+.icon-lock:before {
+ content: "\e0a1";
+}
+.icon-lock-open:before {
+ content: "\e0a2";
+}
+.icon-login:before {
+ content: "\e0a3";
+}
+.icon-logo-db:before {
+ content: "\e0a4";
+}
+.icon-logout:before {
+ content: "\e0a5";
+}
+.icon-loop:before {
+ content: "\e0a6";
+}
+.icon-magnet:before {
+ content: "\e0a7";
+}
+.icon-mail:before {
+ content: "\e0a8";
+}
+.icon-map:before {
+ content: "\e0a9";
+}
+.icon-megaphone:before {
+ content: "\e0aa";
+}
+.icon-menu:before {
+ content: "\e0ab";
+}
+.icon-mic:before {
+ content: "\e0ac";
+}
+.icon-minus:before {
+ content: "\e0ad";
+}
+.icon-minus-circled:before {
+ content: "\e0ae";
+}
+.icon-minus-squared:before {
+ content: "\e0af";
+}
+.icon-mixi:before {
+ content: "\e0b0";
+}
+.icon-mobile:before {
+ content: "\e0b1";
+}
+.icon-monitor:before {
+ content: "\e0b2";
+}
+.icon-moon:before {
+ content: "\e0b3";
+}
+.icon-mouse:before {
+ content: "\e0b4";
+}
+.icon-music:before {
+ content: "\e0b5";
+}
+.icon-mute:before {
+ content: "\e0b6";
+}
+.icon-network:before {
+ content: "\e0b7";
+}
+.icon-newspaper:before {
+ content: "\e0b8";
+}
+.icon-note:before {
+ content: "\e0b9";
+}
+.icon-note-beamed:before {
+ content: "\e0ba";
+}
+.icon-palette:before {
+ content: "\e0bb";
+}
+.icon-paper-plane:before {
+ content: "\e0bc";
+}
+.icon-pause:before {
+ content: "\e0bd";
+}
+.icon-paypal:before {
+ content: "\e0be";
+}
+.icon-pencil:before {
+ content: "\e0bf";
+}
+.icon-phone:before {
+ content: "\e0c0";
+}
+.icon-picasa:before {
+ content: "\e0c1";
+}
+.icon-picture:before {
+ content: "\e0c2";
+}
+.icon-pinterest:before {
+ content: "\e0c3";
+}
+.icon-pinterest-circled:before {
+ content: "\e0c4";
+}
+.icon-play:before {
+ content: "\e0c5";
+}
+.icon-plus:before {
+ content: "\e0c6";
+}
+.icon-plus-circled:before {
+ content: "\e0c7";
+}
+.icon-plus-squared:before {
+ content: "\e0c8";
+}
+.icon-popup:before {
+ content: "\e0c9";
+}
+.icon-print:before {
+ content: "\e0ca";
+}
+.icon-progress-0:before {
+ content: "\e0cb";
+}
+.icon-progress-1:before {
+ content: "\e0cc";
+}
+.icon-progress-2:before {
+ content: "\e0cd";
+}
+.icon-progress-3:before {
+ content: "\e0ce";
+}
+.icon-publish:before {
+ content: "\e0cf";
+}
+.icon-qq:before {
+ content: "\e0d0";
+}
+.icon-quote:before {
+ content: "\e0d1";
+}
+.icon-rdio:before {
+ content: "\e0d2";
+}
+.icon-rdio-circled:before {
+ content: "\e0d3";
+}
+.icon-record:before {
+ content: "\e0d4";
+}
+.icon-renren:before {
+ content: "\e0d5";
+}
+.icon-reply:before {
+ content: "\e0d6";
+}
+.icon-reply-all:before {
+ content: "\e0d7";
+}
+.icon-resize-full:before {
+ content: "\e0d8";
+}
+.icon-resize-small:before {
+ content: "\e0d9";
+}
+.icon-retweet:before {
+ content: "\e0da";
+}
+.icon-right:before {
+ content: "\e0db";
+}
+.icon-right-bold:before {
+ content: "\e0dc";
+}
+.icon-right-circled:before {
+ content: "\e0dd";
+}
+.icon-right-dir:before {
+ content: "\e0de";
+}
+.icon-right-open:before {
+ content: "\e0df";
+}
+.icon-right-open-big:before {
+ content: "\e0e0";
+}
+.icon-right-open-mini:before {
+ content: "\e0e1";
+}
+.icon-right-thin:before {
+ content: "\e0e2";
+}
+.icon-rocket:before {
+ content: "\e0e3";
+}
+.icon-rss:before {
+ content: "\e0e4";
+}
+.icon-search:before {
+ content: "\e0e5";
+}
+.icon-share:before {
+ content: "\e0e6";
+}
+.icon-shareable:before {
+ content: "\e0e7";
+}
+.icon-shuffle:before {
+ content: "\e0e8";
+}
+.icon-signal:before {
+ content: "\e0e9";
+}
+.icon-sina-weibo:before {
+ content: "\e0ea";
+}
+.icon-skype:before {
+ content: "\e0eb";
+}
+.icon-skype-circled:before {
+ content: "\e0ec";
+}
+.icon-smashing:before {
+ content: "\e0ed";
+}
+.icon-sound:before {
+ content: "\e0ee";
+}
+.icon-soundcloud:before {
+ content: "\e0ef";
+}
+.icon-spotify:before {
+ content: "\e0f0";
+}
+.icon-spotify-circled:before {
+ content: "\e0f1";
+}
+.icon-star:before {
+ content: "\e0f2";
+}
+.icon-star-empty:before {
+ content: "\e0f3";
+}
+.icon-stop:before {
+ content: "\e0f4";
+}
+.icon-stumbleupon:before {
+ content: "\e0f5";
+}
+.icon-stumbleupon-circled:before {
+ content: "\e0f6";
+}
+.icon-suitcase:before {
+ content: "\e0f7";
+}
+.icon-sweden:before {
+ content: "\e0f8";
+}
+.icon-switch:before {
+ content: "\e0f9";
+}
+.icon-tag:before {
+ content: "\e0fa";
+}
+.icon-tape:before {
+ content: "\e0fb";
+}
+.icon-target:before {
+ content: "\e0fc";
+}
+.icon-thermometer:before {
+ content: "\e0fd";
+}
+.icon-thumbs-down:before {
+ content: "\e0fe";
+}
+.icon-thumbs-up:before {
+ content: "\e0ff";
+}
+.icon-ticket:before {
+ content: "\e100";
+}
+.icon-to-end:before {
+ content: "\e101";
+}
+.icon-to-start:before {
+ content: "\e102";
+}
+.icon-tools:before {
+ content: "\e103";
+}
+.icon-traffic-cone:before {
+ content: "\e104";
+}
+.icon-trash:before {
+ content: "\e105";
+}
+.icon-trophy:before {
+ content: "\e106";
+}
+.icon-tumblr:before {
+ content: "\e107";
+}
+.icon-tumblr-circled:before {
+ content: "\e108";
+}
+.icon-twitter:before {
+ content: "\e109";
+}
+.icon-twitter-circled:before {
+ content: "\e10a";
+}
+.icon-up:before {
+ content: "\e10b";
+}
+.icon-up-bold:before {
+ content: "\e10c";
+}
+.icon-up-circled:before {
+ content: "\e10d";
+}
+.icon-up-dir:before {
+ content: "\e10e";
+}
+.icon-up-open:before {
+ content: "\e10f";
+}
+.icon-up-open-big:before {
+ content: "\e110";
+}
+.icon-up-open-mini:before {
+ content: "\e111";
+}
+.icon-up-thin:before {
+ content: "\e112";
+}
+.icon-upload:before {
+ content: "\e113";
+}
+.icon-upload-cloud:before {
+ content: "\e114";
+}
+.icon-user:before {
+ content: "\e115";
+}
+.icon-user-add:before {
+ content: "\e116";
+}
+.icon-users:before {
+ content: "\e117";
+}
+.icon-vcard:before {
+ content: "\e118";
+}
+.icon-video:before {
+ content: "\e119";
+}
+.icon-vimeo:before {
+ content: "\e11a";
+}
+.icon-vimeo-circled:before {
+ content: "\e11b";
+}
+.icon-vkontakte:before {
+ content: "\e11c";
+}
+.icon-volume:before {
+ content: "\e11d";
+}
+.icon-water:before {
+ content: "\e11e";
+}
+.icon-window:before {
+ content: "\e11f";
+}
+.icon-weather-downpour-fullmoon:before {
+ content: "\e120";
+}
+.icon-weather-downpour-halfmoon:before {
+ content: "\e121";
+}
+.icon-weather-downpour-sun:before {
+ content: "\e122";
+}
+.icon-weather-drop:before {
+ content: "\e123";
+}
+.icon-weather-first-quarter:before {
+ content: "\e124";
+}
+.icon-weather-fog:before {
+ content: "\e125";
+}
+.icon-weather-fog-fullmoon:before {
+ content: "\e126";
+}
+.icon-weather-fog-halfmoon:before {
+ content: "\e127";
+}
+.icon-weather-fog-sun:before {
+ content: "\e128";
+}
+.icon-weather-fullmoon:before {
+ content: "\e129";
+}
+.icon-weather-gemini:before {
+ content: "\e12a";
+}
+.icon-weather-hail:before {
+ content: "\e12b";
+}
+.icon-weather-hail-fullmoon:before {
+ content: "\e12c";
+}
+.icon-weather-hail-halfmoon:before {
+ content: "\e12d";
+}
+.icon-weather-hail-sun:before {
+ content: "\e12e";
+}
+.icon-weather-last-quarter:before {
+ content: "\e12f";
+}
+.icon-weather-leo:before {
+ content: "\e130";
+}
+.icon-weather-libra:before {
+ content: "\e131";
+}
+.icon-weather-lightning:before {
+ content: "\e132";
+}
+.icon-weather-mistyrain:before {
+ content: "\e133";
+}
+.icon-weather-mistyrain-fullmoon:before {
+ content: "\e134";
+}
+.icon-weather-mistyrain-halfmoon:before {
+ content: "\e135";
+}
+.icon-weather-mistyrain-sun:before {
+ content: "\e136";
+}
+.icon-weather-moon:before {
+ content: "\e137";
+}
+.icon-weather-moondown-full:before {
+ content: "\e138";
+}
+.icon-weather-moondown-half:before {
+ content: "\e139";
+}
+.icon-weather-moonset-full:before {
+ content: "\e13a";
+}
+.icon-weather-moonset-half:before {
+ content: "\e13b";
+}
+.icon-weather-move2:before {
+ content: "\e13c";
+}
+.icon-weather-newmoon:before {
+ content: "\e13d";
+}
+.icon-weather-pisces:before {
+ content: "\e13e";
+}
+.icon-weather-rain:before {
+ content: "\e13f";
+}
+.icon-weather-rain-fullmoon:before {
+ content: "\e140";
+}
+.icon-weather-rain-halfmoon:before {
+ content: "\e141";
+}
+.icon-weather-rain-sun:before {
+ content: "\e142";
+}
+.icon-weather-sagittarius:before {
+ content: "\e143";
+}
+.icon-weather-scorpio:before {
+ content: "\e144";
+}
+.icon-weather-snow:before {
+ content: "\e145";
+}
+.icon-weather-snow-fullmoon:before {
+ content: "\e146";
+}
+.icon-weather-snow-halfmoon:before {
+ content: "\e147";
+}
+.icon-weather-snow-sun:before {
+ content: "\e148";
+}
+.icon-weather-snowflake:before {
+ content: "\e149";
+}
+.icon-weather-star:before {
+ content: "\e14a";
+}
+.icon-weather-storm-11:before {
+ content: "\e14b";
+}
+.icon-weather-storm-32:before {
+ content: "\e14c";
+}
+.icon-weather-storm-fullmoon:before {
+ content: "\e14d";
+}
+.icon-weather-storm-halfmoon:before {
+ content: "\e14e";
+}
+.icon-weather-storm-sun:before {
+ content: "\e14f";
+}
+.icon-weather-sun:before {
+ content: "\e150";
+}
+.icon-weather-sundown:before {
+ content: "\e151";
+}
+.icon-weather-sunset:before {
+ content: "\e152";
+}
+.icon-weather-taurus:before {
+ content: "\e153";
+}
+.icon-weather-tempest:before {
+ content: "\e154";
+}
+.icon-weather-tempest-fullmoon:before {
+ content: "\e155";
+}
+.icon-weather-tempest-halfmoon:before {
+ content: "\e156";
+}
+.icon-weather-tempest-sun:before {
+ content: "\e157";
+}
+.icon-weather-variable-fullmoon:before {
+ content: "\e158";
+}
+.icon-weather-variable-halfmoon:before {
+ content: "\e159";
+}
+.icon-weather-variable-sun:before {
+ content: "\e15a";
+}
+.icon-weather-virgo:before {
+ content: "\e15b";
+}
+.icon-weather-waning-cresent:before {
+ content: "\e15c";
+}
+.icon-weather-waning-gibbous:before {
+ content: "\e15d";
+}
+.icon-weather-waxing-cresent:before {
+ content: "\e15e";
+}
+.icon-weather-waxing-gibbous:before {
+ content: "\e15f";
+}
+.icon-weather-wind:before {
+ content: "\e160";
+}
+.icon-weather-cloud:before {
+ content: "\e161";
+}
+.icon-weather-cloud-drop:before {
+ content: "\e162";
+}
+.icon-weather-cloud-lightning:before {
+ content: "\e163";
+}
+.icon-weather-cloud-snowflake:before {
+ content: "\e164";
+}
+.icon-arrow413:before {
+ content: "\e165";
+}
+.icon-arrow427:before {
+ content: "\e166";
+}
+.icon-wrong6:before {
+ content: "\e167";
+}
+.icon-list23:before {
+ content: "\e168";
+}
+.icon-list23-1:before {
+ content: "\e169";
+}
+.icon-menu27:before {
+ content: "\e16a";
+}
+.icon-menu45:before {
+ content: "\e16b";
+}
+.icon-menu53:before {
+ content: "\e16c";
+}
+.icon-menu55:before {
+ content: "\e16d";
+}
+.icon-wrong6-1:before {
+ content: "\e16e";
+}
+.icon-thin35:before {
+ content: "\e16f";
+}
+.icon-thin36:before {
+ content: "\e170";
+}
+.icon-right106:before {
+ content: "\e171";
+}
+.icon-up77:before {
+ content: "\e172";
+}
+.icon-next15:before {
+ content: "\e173";
+}
+.icon-previous11:before {
+ content: "\e174";
+}
diff --git a/trunk/src/AppBundle/Resources/public/css/font-awesome-4.7.0.css b/trunk/src/AppBundle/Resources/public/css/font-awesome-4.7.0.css
new file mode 100644
index 00000000..ee906a81
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/css/font-awesome-4.7.0.css
@@ -0,0 +1,2337 @@
+/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+/* FONT PATH
+ * -------------------------- */
+@font-face {
+ font-family: 'FontAwesome';
+ src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');
+ src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');
+ font-weight: normal;
+ font-style: normal;
+}
+.fa {
+ display: inline-block;
+ font: normal normal normal 14px/1 FontAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+/* makes the font 33% larger relative to the icon container */
+.fa-lg {
+ font-size: 1.33333333em;
+ line-height: 0.75em;
+ vertical-align: -15%;
+}
+.fa-2x {
+ font-size: 2em;
+}
+.fa-3x {
+ font-size: 3em;
+}
+.fa-4x {
+ font-size: 4em;
+}
+.fa-5x {
+ font-size: 5em;
+}
+.fa-fw {
+ width: 1.28571429em;
+ text-align: center;
+}
+.fa-ul {
+ padding-left: 0;
+ margin-left: 2.14285714em;
+ list-style-type: none;
+}
+.fa-ul > li {
+ position: relative;
+}
+.fa-li {
+ position: absolute;
+ left: -2.14285714em;
+ width: 2.14285714em;
+ top: 0.14285714em;
+ text-align: center;
+}
+.fa-li.fa-lg {
+ left: -1.85714286em;
+}
+.fa-border {
+ padding: .2em .25em .15em;
+ border: solid 0.08em #eeeeee;
+ border-radius: .1em;
+}
+.fa-pull-left {
+ float: left;
+}
+.fa-pull-right {
+ float: right;
+}
+.fa.fa-pull-left {
+ margin-right: .3em;
+}
+.fa.fa-pull-right {
+ margin-left: .3em;
+}
+/* Deprecated as of 4.4.0 */
+.pull-right {
+ float: right;
+}
+.pull-left {
+ float: left;
+}
+.fa.pull-left {
+ margin-right: .3em;
+}
+.fa.pull-right {
+ margin-left: .3em;
+}
+.fa-spin {
+ -webkit-animation: fa-spin 2s infinite linear;
+ animation: fa-spin 2s infinite linear;
+}
+.fa-pulse {
+ -webkit-animation: fa-spin 1s infinite steps(8);
+ animation: fa-spin 1s infinite steps(8);
+}
+@-webkit-keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+@keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+.fa-rotate-90 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
+ -webkit-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg);
+}
+.fa-rotate-180 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
+ -webkit-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ transform: rotate(180deg);
+}
+.fa-rotate-270 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
+ -webkit-transform: rotate(270deg);
+ -ms-transform: rotate(270deg);
+ transform: rotate(270deg);
+}
+.fa-flip-horizontal {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
+ -webkit-transform: scale(-1, 1);
+ -ms-transform: scale(-1, 1);
+ transform: scale(-1, 1);
+}
+.fa-flip-vertical {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
+ -webkit-transform: scale(1, -1);
+ -ms-transform: scale(1, -1);
+ transform: scale(1, -1);
+}
+:root .fa-rotate-90,
+:root .fa-rotate-180,
+:root .fa-rotate-270,
+:root .fa-flip-horizontal,
+:root .fa-flip-vertical {
+ filter: none;
+}
+.fa-stack {
+ position: relative;
+ display: inline-block;
+ width: 2em;
+ height: 2em;
+ line-height: 2em;
+ vertical-align: middle;
+}
+.fa-stack-1x,
+.fa-stack-2x {
+ position: absolute;
+ left: 0;
+ width: 100%;
+ text-align: center;
+}
+.fa-stack-1x {
+ line-height: inherit;
+}
+.fa-stack-2x {
+ font-size: 2em;
+}
+.fa-inverse {
+ color: #ffffff;
+}
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+ readers do not read off random characters that represent icons */
+.fa-glass:before {
+ content: "\f000";
+}
+.fa-music:before {
+ content: "\f001";
+}
+.fa-search:before {
+ content: "\f002";
+}
+.fa-envelope-o:before {
+ content: "\f003";
+}
+.fa-heart:before {
+ content: "\f004";
+}
+.fa-star:before {
+ content: "\f005";
+}
+.fa-star-o:before {
+ content: "\f006";
+}
+.fa-user:before {
+ content: "\f007";
+}
+.fa-film:before {
+ content: "\f008";
+}
+.fa-th-large:before {
+ content: "\f009";
+}
+.fa-th:before {
+ content: "\f00a";
+}
+.fa-th-list:before {
+ content: "\f00b";
+}
+.fa-check:before {
+ content: "\f00c";
+}
+.fa-remove:before,
+.fa-close:before,
+.fa-times:before {
+ content: "\f00d";
+}
+.fa-search-plus:before {
+ content: "\f00e";
+}
+.fa-search-minus:before {
+ content: "\f010";
+}
+.fa-power-off:before {
+ content: "\f011";
+}
+.fa-signal:before {
+ content: "\f012";
+}
+.fa-gear:before,
+.fa-cog:before {
+ content: "\f013";
+}
+.fa-trash-o:before {
+ content: "\f014";
+}
+.fa-home:before {
+ content: "\f015";
+}
+.fa-file-o:before {
+ content: "\f016";
+}
+.fa-clock-o:before {
+ content: "\f017";
+}
+.fa-road:before {
+ content: "\f018";
+}
+.fa-download:before {
+ content: "\f019";
+}
+.fa-arrow-circle-o-down:before {
+ content: "\f01a";
+}
+.fa-arrow-circle-o-up:before {
+ content: "\f01b";
+}
+.fa-inbox:before {
+ content: "\f01c";
+}
+.fa-play-circle-o:before {
+ content: "\f01d";
+}
+.fa-rotate-right:before,
+.fa-repeat:before {
+ content: "\f01e";
+}
+.fa-refresh:before {
+ content: "\f021";
+}
+.fa-list-alt:before {
+ content: "\f022";
+}
+.fa-lock:before {
+ content: "\f023";
+}
+.fa-flag:before {
+ content: "\f024";
+}
+.fa-headphones:before {
+ content: "\f025";
+}
+.fa-volume-off:before {
+ content: "\f026";
+}
+.fa-volume-down:before {
+ content: "\f027";
+}
+.fa-volume-up:before {
+ content: "\f028";
+}
+.fa-qrcode:before {
+ content: "\f029";
+}
+.fa-barcode:before {
+ content: "\f02a";
+}
+.fa-tag:before {
+ content: "\f02b";
+}
+.fa-tags:before {
+ content: "\f02c";
+}
+.fa-book:before {
+ content: "\f02d";
+}
+.fa-bookmark:before {
+ content: "\f02e";
+}
+.fa-print:before {
+ content: "\f02f";
+}
+.fa-camera:before {
+ content: "\f030";
+}
+.fa-font:before {
+ content: "\f031";
+}
+.fa-bold:before {
+ content: "\f032";
+}
+.fa-italic:before {
+ content: "\f033";
+}
+.fa-text-height:before {
+ content: "\f034";
+}
+.fa-text-width:before {
+ content: "\f035";
+}
+.fa-align-left:before {
+ content: "\f036";
+}
+.fa-align-center:before {
+ content: "\f037";
+}
+.fa-align-right:before {
+ content: "\f038";
+}
+.fa-align-justify:before {
+ content: "\f039";
+}
+.fa-list:before {
+ content: "\f03a";
+}
+.fa-dedent:before,
+.fa-outdent:before {
+ content: "\f03b";
+}
+.fa-indent:before {
+ content: "\f03c";
+}
+.fa-video-camera:before {
+ content: "\f03d";
+}
+.fa-photo:before,
+.fa-image:before,
+.fa-picture-o:before {
+ content: "\f03e";
+}
+.fa-pencil:before {
+ content: "\f040";
+}
+.fa-map-marker:before {
+ content: "\f041";
+}
+.fa-adjust:before {
+ content: "\f042";
+}
+.fa-tint:before {
+ content: "\f043";
+}
+.fa-edit:before,
+.fa-pencil-square-o:before {
+ content: "\f044";
+}
+.fa-share-square-o:before {
+ content: "\f045";
+}
+.fa-check-square-o:before {
+ content: "\f046";
+}
+.fa-arrows:before {
+ content: "\f047";
+}
+.fa-step-backward:before {
+ content: "\f048";
+}
+.fa-fast-backward:before {
+ content: "\f049";
+}
+.fa-backward:before {
+ content: "\f04a";
+}
+.fa-play:before {
+ content: "\f04b";
+}
+.fa-pause:before {
+ content: "\f04c";
+}
+.fa-stop:before {
+ content: "\f04d";
+}
+.fa-forward:before {
+ content: "\f04e";
+}
+.fa-fast-forward:before {
+ content: "\f050";
+}
+.fa-step-forward:before {
+ content: "\f051";
+}
+.fa-eject:before {
+ content: "\f052";
+}
+.fa-chevron-left:before {
+ content: "\f053";
+}
+.fa-chevron-right:before {
+ content: "\f054";
+}
+.fa-plus-circle:before {
+ content: "\f055";
+}
+.fa-minus-circle:before {
+ content: "\f056";
+}
+.fa-times-circle:before {
+ content: "\f057";
+}
+.fa-check-circle:before {
+ content: "\f058";
+}
+.fa-question-circle:before {
+ content: "\f059";
+}
+.fa-info-circle:before {
+ content: "\f05a";
+}
+.fa-crosshairs:before {
+ content: "\f05b";
+}
+.fa-times-circle-o:before {
+ content: "\f05c";
+}
+.fa-check-circle-o:before {
+ content: "\f05d";
+}
+.fa-ban:before {
+ content: "\f05e";
+}
+.fa-arrow-left:before {
+ content: "\f060";
+}
+.fa-arrow-right:before {
+ content: "\f061";
+}
+.fa-arrow-up:before {
+ content: "\f062";
+}
+.fa-arrow-down:before {
+ content: "\f063";
+}
+.fa-mail-forward:before,
+.fa-share:before {
+ content: "\f064";
+}
+.fa-expand:before {
+ content: "\f065";
+}
+.fa-compress:before {
+ content: "\f066";
+}
+.fa-plus:before {
+ content: "\f067";
+}
+.fa-minus:before {
+ content: "\f068";
+}
+.fa-asterisk:before {
+ content: "\f069";
+}
+.fa-exclamation-circle:before {
+ content: "\f06a";
+}
+.fa-gift:before {
+ content: "\f06b";
+}
+.fa-leaf:before {
+ content: "\f06c";
+}
+.fa-fire:before {
+ content: "\f06d";
+}
+.fa-eye:before {
+ content: "\f06e";
+}
+.fa-eye-slash:before {
+ content: "\f070";
+}
+.fa-warning:before,
+.fa-exclamation-triangle:before {
+ content: "\f071";
+}
+.fa-plane:before {
+ content: "\f072";
+}
+.fa-calendar:before {
+ content: "\f073";
+}
+.fa-random:before {
+ content: "\f074";
+}
+.fa-comment:before {
+ content: "\f075";
+}
+.fa-magnet:before {
+ content: "\f076";
+}
+.fa-chevron-up:before {
+ content: "\f077";
+}
+.fa-chevron-down:before {
+ content: "\f078";
+}
+.fa-retweet:before {
+ content: "\f079";
+}
+.fa-shopping-cart:before {
+ content: "\f07a";
+}
+.fa-folder:before {
+ content: "\f07b";
+}
+.fa-folder-open:before {
+ content: "\f07c";
+}
+.fa-arrows-v:before {
+ content: "\f07d";
+}
+.fa-arrows-h:before {
+ content: "\f07e";
+}
+.fa-bar-chart-o:before,
+.fa-bar-chart:before {
+ content: "\f080";
+}
+.fa-twitter-square:before {
+ content: "\f081";
+}
+.fa-facebook-square:before {
+ content: "\f082";
+}
+.fa-camera-retro:before {
+ content: "\f083";
+}
+.fa-key:before {
+ content: "\f084";
+}
+.fa-gears:before,
+.fa-cogs:before {
+ content: "\f085";
+}
+.fa-comments:before {
+ content: "\f086";
+}
+.fa-thumbs-o-up:before {
+ content: "\f087";
+}
+.fa-thumbs-o-down:before {
+ content: "\f088";
+}
+.fa-star-half:before {
+ content: "\f089";
+}
+.fa-heart-o:before {
+ content: "\f08a";
+}
+.fa-sign-out:before {
+ content: "\f08b";
+}
+.fa-linkedin-square:before {
+ content: "\f08c";
+}
+.fa-thumb-tack:before {
+ content: "\f08d";
+}
+.fa-external-link:before {
+ content: "\f08e";
+}
+.fa-sign-in:before {
+ content: "\f090";
+}
+.fa-trophy:before {
+ content: "\f091";
+}
+.fa-github-square:before {
+ content: "\f092";
+}
+.fa-upload:before {
+ content: "\f093";
+}
+.fa-lemon-o:before {
+ content: "\f094";
+}
+.fa-phone:before {
+ content: "\f095";
+}
+.fa-square-o:before {
+ content: "\f096";
+}
+.fa-bookmark-o:before {
+ content: "\f097";
+}
+.fa-phone-square:before {
+ content: "\f098";
+}
+.fa-twitter:before {
+ content: "\f099";
+}
+.fa-facebook-f:before,
+.fa-facebook:before {
+ content: "\f09a";
+}
+.fa-github:before {
+ content: "\f09b";
+}
+.fa-unlock:before {
+ content: "\f09c";
+}
+.fa-credit-card:before {
+ content: "\f09d";
+}
+.fa-feed:before,
+.fa-rss:before {
+ content: "\f09e";
+}
+.fa-hdd-o:before {
+ content: "\f0a0";
+}
+.fa-bullhorn:before {
+ content: "\f0a1";
+}
+.fa-bell:before {
+ content: "\f0f3";
+}
+.fa-certificate:before {
+ content: "\f0a3";
+}
+.fa-hand-o-right:before {
+ content: "\f0a4";
+}
+.fa-hand-o-left:before {
+ content: "\f0a5";
+}
+.fa-hand-o-up:before {
+ content: "\f0a6";
+}
+.fa-hand-o-down:before {
+ content: "\f0a7";
+}
+.fa-arrow-circle-left:before {
+ content: "\f0a8";
+}
+.fa-arrow-circle-right:before {
+ content: "\f0a9";
+}
+.fa-arrow-circle-up:before {
+ content: "\f0aa";
+}
+.fa-arrow-circle-down:before {
+ content: "\f0ab";
+}
+.fa-globe:before {
+ content: "\f0ac";
+}
+.fa-wrench:before {
+ content: "\f0ad";
+}
+.fa-tasks:before {
+ content: "\f0ae";
+}
+.fa-filter:before {
+ content: "\f0b0";
+}
+.fa-briefcase:before {
+ content: "\f0b1";
+}
+.fa-arrows-alt:before {
+ content: "\f0b2";
+}
+.fa-group:before,
+.fa-users:before {
+ content: "\f0c0";
+}
+.fa-chain:before,
+.fa-link:before {
+ content: "\f0c1";
+}
+.fa-cloud:before {
+ content: "\f0c2";
+}
+.fa-flask:before {
+ content: "\f0c3";
+}
+.fa-cut:before,
+.fa-scissors:before {
+ content: "\f0c4";
+}
+.fa-copy:before,
+.fa-files-o:before {
+ content: "\f0c5";
+}
+.fa-paperclip:before {
+ content: "\f0c6";
+}
+.fa-save:before,
+.fa-floppy-o:before {
+ content: "\f0c7";
+}
+.fa-square:before {
+ content: "\f0c8";
+}
+.fa-navicon:before,
+.fa-reorder:before,
+.fa-bars:before {
+ content: "\f0c9";
+}
+.fa-list-ul:before {
+ content: "\f0ca";
+}
+.fa-list-ol:before {
+ content: "\f0cb";
+}
+.fa-strikethrough:before {
+ content: "\f0cc";
+}
+.fa-underline:before {
+ content: "\f0cd";
+}
+.fa-table:before {
+ content: "\f0ce";
+}
+.fa-magic:before {
+ content: "\f0d0";
+}
+.fa-truck:before {
+ content: "\f0d1";
+}
+.fa-pinterest:before {
+ content: "\f0d2";
+}
+.fa-pinterest-square:before {
+ content: "\f0d3";
+}
+.fa-google-plus-square:before {
+ content: "\f0d4";
+}
+.fa-google-plus:before {
+ content: "\f0d5";
+}
+.fa-money:before {
+ content: "\f0d6";
+}
+.fa-caret-down:before {
+ content: "\f0d7";
+}
+.fa-caret-up:before {
+ content: "\f0d8";
+}
+.fa-caret-left:before {
+ content: "\f0d9";
+}
+.fa-caret-right:before {
+ content: "\f0da";
+}
+.fa-columns:before {
+ content: "\f0db";
+}
+.fa-unsorted:before,
+.fa-sort:before {
+ content: "\f0dc";
+}
+.fa-sort-down:before,
+.fa-sort-desc:before {
+ content: "\f0dd";
+}
+.fa-sort-up:before,
+.fa-sort-asc:before {
+ content: "\f0de";
+}
+.fa-envelope:before {
+ content: "\f0e0";
+}
+.fa-linkedin:before {
+ content: "\f0e1";
+}
+.fa-rotate-left:before,
+.fa-undo:before {
+ content: "\f0e2";
+}
+.fa-legal:before,
+.fa-gavel:before {
+ content: "\f0e3";
+}
+.fa-dashboard:before,
+.fa-tachometer:before {
+ content: "\f0e4";
+}
+.fa-comment-o:before {
+ content: "\f0e5";
+}
+.fa-comments-o:before {
+ content: "\f0e6";
+}
+.fa-flash:before,
+.fa-bolt:before {
+ content: "\f0e7";
+}
+.fa-sitemap:before {
+ content: "\f0e8";
+}
+.fa-umbrella:before {
+ content: "\f0e9";
+}
+.fa-paste:before,
+.fa-clipboard:before {
+ content: "\f0ea";
+}
+.fa-lightbulb-o:before {
+ content: "\f0eb";
+}
+.fa-exchange:before {
+ content: "\f0ec";
+}
+.fa-cloud-download:before {
+ content: "\f0ed";
+}
+.fa-cloud-upload:before {
+ content: "\f0ee";
+}
+.fa-user-md:before {
+ content: "\f0f0";
+}
+.fa-stethoscope:before {
+ content: "\f0f1";
+}
+.fa-suitcase:before {
+ content: "\f0f2";
+}
+.fa-bell-o:before {
+ content: "\f0a2";
+}
+.fa-coffee:before {
+ content: "\f0f4";
+}
+.fa-cutlery:before {
+ content: "\f0f5";
+}
+.fa-file-text-o:before {
+ content: "\f0f6";
+}
+.fa-building-o:before {
+ content: "\f0f7";
+}
+.fa-hospital-o:before {
+ content: "\f0f8";
+}
+.fa-ambulance:before {
+ content: "\f0f9";
+}
+.fa-medkit:before {
+ content: "\f0fa";
+}
+.fa-fighter-jet:before {
+ content: "\f0fb";
+}
+.fa-beer:before {
+ content: "\f0fc";
+}
+.fa-h-square:before {
+ content: "\f0fd";
+}
+.fa-plus-square:before {
+ content: "\f0fe";
+}
+.fa-angle-double-left:before {
+ content: "\f100";
+}
+.fa-angle-double-right:before {
+ content: "\f101";
+}
+.fa-angle-double-up:before {
+ content: "\f102";
+}
+.fa-angle-double-down:before {
+ content: "\f103";
+}
+.fa-angle-left:before {
+ content: "\f104";
+}
+.fa-angle-right:before {
+ content: "\f105";
+}
+.fa-angle-up:before {
+ content: "\f106";
+}
+.fa-angle-down:before {
+ content: "\f107";
+}
+.fa-desktop:before {
+ content: "\f108";
+}
+.fa-laptop:before {
+ content: "\f109";
+}
+.fa-tablet:before {
+ content: "\f10a";
+}
+.fa-mobile-phone:before,
+.fa-mobile:before {
+ content: "\f10b";
+}
+.fa-circle-o:before {
+ content: "\f10c";
+}
+.fa-quote-left:before {
+ content: "\f10d";
+}
+.fa-quote-right:before {
+ content: "\f10e";
+}
+.fa-spinner:before {
+ content: "\f110";
+}
+.fa-circle:before {
+ content: "\f111";
+}
+.fa-mail-reply:before,
+.fa-reply:before {
+ content: "\f112";
+}
+.fa-github-alt:before {
+ content: "\f113";
+}
+.fa-folder-o:before {
+ content: "\f114";
+}
+.fa-folder-open-o:before {
+ content: "\f115";
+}
+.fa-smile-o:before {
+ content: "\f118";
+}
+.fa-frown-o:before {
+ content: "\f119";
+}
+.fa-meh-o:before {
+ content: "\f11a";
+}
+.fa-gamepad:before {
+ content: "\f11b";
+}
+.fa-keyboard-o:before {
+ content: "\f11c";
+}
+.fa-flag-o:before {
+ content: "\f11d";
+}
+.fa-flag-checkered:before {
+ content: "\f11e";
+}
+.fa-terminal:before {
+ content: "\f120";
+}
+.fa-code:before {
+ content: "\f121";
+}
+.fa-mail-reply-all:before,
+.fa-reply-all:before {
+ content: "\f122";
+}
+.fa-star-half-empty:before,
+.fa-star-half-full:before,
+.fa-star-half-o:before {
+ content: "\f123";
+}
+.fa-location-arrow:before {
+ content: "\f124";
+}
+.fa-crop:before {
+ content: "\f125";
+}
+.fa-code-fork:before {
+ content: "\f126";
+}
+.fa-unlink:before,
+.fa-chain-broken:before {
+ content: "\f127";
+}
+.fa-question:before {
+ content: "\f128";
+}
+.fa-info:before {
+ content: "\f129";
+}
+.fa-exclamation:before {
+ content: "\f12a";
+}
+.fa-superscript:before {
+ content: "\f12b";
+}
+.fa-subscript:before {
+ content: "\f12c";
+}
+.fa-eraser:before {
+ content: "\f12d";
+}
+.fa-puzzle-piece:before {
+ content: "\f12e";
+}
+.fa-microphone:before {
+ content: "\f130";
+}
+.fa-microphone-slash:before {
+ content: "\f131";
+}
+.fa-shield:before {
+ content: "\f132";
+}
+.fa-calendar-o:before {
+ content: "\f133";
+}
+.fa-fire-extinguisher:before {
+ content: "\f134";
+}
+.fa-rocket:before {
+ content: "\f135";
+}
+.fa-maxcdn:before {
+ content: "\f136";
+}
+.fa-chevron-circle-left:before {
+ content: "\f137";
+}
+.fa-chevron-circle-right:before {
+ content: "\f138";
+}
+.fa-chevron-circle-up:before {
+ content: "\f139";
+}
+.fa-chevron-circle-down:before {
+ content: "\f13a";
+}
+.fa-html5:before {
+ content: "\f13b";
+}
+.fa-css3:before {
+ content: "\f13c";
+}
+.fa-anchor:before {
+ content: "\f13d";
+}
+.fa-unlock-alt:before {
+ content: "\f13e";
+}
+.fa-bullseye:before {
+ content: "\f140";
+}
+.fa-ellipsis-h:before {
+ content: "\f141";
+}
+.fa-ellipsis-v:before {
+ content: "\f142";
+}
+.fa-rss-square:before {
+ content: "\f143";
+}
+.fa-play-circle:before {
+ content: "\f144";
+}
+.fa-ticket:before {
+ content: "\f145";
+}
+.fa-minus-square:before {
+ content: "\f146";
+}
+.fa-minus-square-o:before {
+ content: "\f147";
+}
+.fa-level-up:before {
+ content: "\f148";
+}
+.fa-level-down:before {
+ content: "\f149";
+}
+.fa-check-square:before {
+ content: "\f14a";
+}
+.fa-pencil-square:before {
+ content: "\f14b";
+}
+.fa-external-link-square:before {
+ content: "\f14c";
+}
+.fa-share-square:before {
+ content: "\f14d";
+}
+.fa-compass:before {
+ content: "\f14e";
+}
+.fa-toggle-down:before,
+.fa-caret-square-o-down:before {
+ content: "\f150";
+}
+.fa-toggle-up:before,
+.fa-caret-square-o-up:before {
+ content: "\f151";
+}
+.fa-toggle-right:before,
+.fa-caret-square-o-right:before {
+ content: "\f152";
+}
+.fa-euro:before,
+.fa-eur:before {
+ content: "\f153";
+}
+.fa-gbp:before {
+ content: "\f154";
+}
+.fa-dollar:before,
+.fa-usd:before {
+ content: "\f155";
+}
+.fa-rupee:before,
+.fa-inr:before {
+ content: "\f156";
+}
+.fa-cny:before,
+.fa-rmb:before,
+.fa-yen:before,
+.fa-jpy:before {
+ content: "\f157";
+}
+.fa-ruble:before,
+.fa-rouble:before,
+.fa-rub:before {
+ content: "\f158";
+}
+.fa-won:before,
+.fa-krw:before {
+ content: "\f159";
+}
+.fa-bitcoin:before,
+.fa-btc:before {
+ content: "\f15a";
+}
+.fa-file:before {
+ content: "\f15b";
+}
+.fa-file-text:before {
+ content: "\f15c";
+}
+.fa-sort-alpha-asc:before {
+ content: "\f15d";
+}
+.fa-sort-alpha-desc:before {
+ content: "\f15e";
+}
+.fa-sort-amount-asc:before {
+ content: "\f160";
+}
+.fa-sort-amount-desc:before {
+ content: "\f161";
+}
+.fa-sort-numeric-asc:before {
+ content: "\f162";
+}
+.fa-sort-numeric-desc:before {
+ content: "\f163";
+}
+.fa-thumbs-up:before {
+ content: "\f164";
+}
+.fa-thumbs-down:before {
+ content: "\f165";
+}
+.fa-youtube-square:before {
+ content: "\f166";
+}
+.fa-youtube:before {
+ content: "\f167";
+}
+.fa-xing:before {
+ content: "\f168";
+}
+.fa-xing-square:before {
+ content: "\f169";
+}
+.fa-youtube-play:before {
+ content: "\f16a";
+}
+.fa-dropbox:before {
+ content: "\f16b";
+}
+.fa-stack-overflow:before {
+ content: "\f16c";
+}
+.fa-instagram:before {
+ content: "\f16d";
+}
+.fa-flickr:before {
+ content: "\f16e";
+}
+.fa-adn:before {
+ content: "\f170";
+}
+.fa-bitbucket:before {
+ content: "\f171";
+}
+.fa-bitbucket-square:before {
+ content: "\f172";
+}
+.fa-tumblr:before {
+ content: "\f173";
+}
+.fa-tumblr-square:before {
+ content: "\f174";
+}
+.fa-long-arrow-down:before {
+ content: "\f175";
+}
+.fa-long-arrow-up:before {
+ content: "\f176";
+}
+.fa-long-arrow-left:before {
+ content: "\f177";
+}
+.fa-long-arrow-right:before {
+ content: "\f178";
+}
+.fa-apple:before {
+ content: "\f179";
+}
+.fa-windows:before {
+ content: "\f17a";
+}
+.fa-android:before {
+ content: "\f17b";
+}
+.fa-linux:before {
+ content: "\f17c";
+}
+.fa-dribbble:before {
+ content: "\f17d";
+}
+.fa-skype:before {
+ content: "\f17e";
+}
+.fa-foursquare:before {
+ content: "\f180";
+}
+.fa-trello:before {
+ content: "\f181";
+}
+.fa-female:before {
+ content: "\f182";
+}
+.fa-male:before {
+ content: "\f183";
+}
+.fa-gittip:before,
+.fa-gratipay:before {
+ content: "\f184";
+}
+.fa-sun-o:before {
+ content: "\f185";
+}
+.fa-moon-o:before {
+ content: "\f186";
+}
+.fa-archive:before {
+ content: "\f187";
+}
+.fa-bug:before {
+ content: "\f188";
+}
+.fa-vk:before {
+ content: "\f189";
+}
+.fa-weibo:before {
+ content: "\f18a";
+}
+.fa-renren:before {
+ content: "\f18b";
+}
+.fa-pagelines:before {
+ content: "\f18c";
+}
+.fa-stack-exchange:before {
+ content: "\f18d";
+}
+.fa-arrow-circle-o-right:before {
+ content: "\f18e";
+}
+.fa-arrow-circle-o-left:before {
+ content: "\f190";
+}
+.fa-toggle-left:before,
+.fa-caret-square-o-left:before {
+ content: "\f191";
+}
+.fa-dot-circle-o:before {
+ content: "\f192";
+}
+.fa-wheelchair:before {
+ content: "\f193";
+}
+.fa-vimeo-square:before {
+ content: "\f194";
+}
+.fa-turkish-lira:before,
+.fa-try:before {
+ content: "\f195";
+}
+.fa-plus-square-o:before {
+ content: "\f196";
+}
+.fa-space-shuttle:before {
+ content: "\f197";
+}
+.fa-slack:before {
+ content: "\f198";
+}
+.fa-envelope-square:before {
+ content: "\f199";
+}
+.fa-wordpress:before {
+ content: "\f19a";
+}
+.fa-openid:before {
+ content: "\f19b";
+}
+.fa-institution:before,
+.fa-bank:before,
+.fa-university:before {
+ content: "\f19c";
+}
+.fa-mortar-board:before,
+.fa-graduation-cap:before {
+ content: "\f19d";
+}
+.fa-yahoo:before {
+ content: "\f19e";
+}
+.fa-google:before {
+ content: "\f1a0";
+}
+.fa-reddit:before {
+ content: "\f1a1";
+}
+.fa-reddit-square:before {
+ content: "\f1a2";
+}
+.fa-stumbleupon-circle:before {
+ content: "\f1a3";
+}
+.fa-stumbleupon:before {
+ content: "\f1a4";
+}
+.fa-delicious:before {
+ content: "\f1a5";
+}
+.fa-digg:before {
+ content: "\f1a6";
+}
+.fa-pied-piper-pp:before {
+ content: "\f1a7";
+}
+.fa-pied-piper-alt:before {
+ content: "\f1a8";
+}
+.fa-drupal:before {
+ content: "\f1a9";
+}
+.fa-joomla:before {
+ content: "\f1aa";
+}
+.fa-language:before {
+ content: "\f1ab";
+}
+.fa-fax:before {
+ content: "\f1ac";
+}
+.fa-building:before {
+ content: "\f1ad";
+}
+.fa-child:before {
+ content: "\f1ae";
+}
+.fa-paw:before {
+ content: "\f1b0";
+}
+.fa-spoon:before {
+ content: "\f1b1";
+}
+.fa-cube:before {
+ content: "\f1b2";
+}
+.fa-cubes:before {
+ content: "\f1b3";
+}
+.fa-behance:before {
+ content: "\f1b4";
+}
+.fa-behance-square:before {
+ content: "\f1b5";
+}
+.fa-steam:before {
+ content: "\f1b6";
+}
+.fa-steam-square:before {
+ content: "\f1b7";
+}
+.fa-recycle:before {
+ content: "\f1b8";
+}
+.fa-automobile:before,
+.fa-car:before {
+ content: "\f1b9";
+}
+.fa-cab:before,
+.fa-taxi:before {
+ content: "\f1ba";
+}
+.fa-tree:before {
+ content: "\f1bb";
+}
+.fa-spotify:before {
+ content: "\f1bc";
+}
+.fa-deviantart:before {
+ content: "\f1bd";
+}
+.fa-soundcloud:before {
+ content: "\f1be";
+}
+.fa-database:before {
+ content: "\f1c0";
+}
+.fa-file-pdf-o:before {
+ content: "\f1c1";
+}
+.fa-file-word-o:before {
+ content: "\f1c2";
+}
+.fa-file-excel-o:before {
+ content: "\f1c3";
+}
+.fa-file-powerpoint-o:before {
+ content: "\f1c4";
+}
+.fa-file-photo-o:before,
+.fa-file-picture-o:before,
+.fa-file-image-o:before {
+ content: "\f1c5";
+}
+.fa-file-zip-o:before,
+.fa-file-archive-o:before {
+ content: "\f1c6";
+}
+.fa-file-sound-o:before,
+.fa-file-audio-o:before {
+ content: "\f1c7";
+}
+.fa-file-movie-o:before,
+.fa-file-video-o:before {
+ content: "\f1c8";
+}
+.fa-file-code-o:before {
+ content: "\f1c9";
+}
+.fa-vine:before {
+ content: "\f1ca";
+}
+.fa-codepen:before {
+ content: "\f1cb";
+}
+.fa-jsfiddle:before {
+ content: "\f1cc";
+}
+.fa-life-bouy:before,
+.fa-life-buoy:before,
+.fa-life-saver:before,
+.fa-support:before,
+.fa-life-ring:before {
+ content: "\f1cd";
+}
+.fa-circle-o-notch:before {
+ content: "\f1ce";
+}
+.fa-ra:before,
+.fa-resistance:before,
+.fa-rebel:before {
+ content: "\f1d0";
+}
+.fa-ge:before,
+.fa-empire:before {
+ content: "\f1d1";
+}
+.fa-git-square:before {
+ content: "\f1d2";
+}
+.fa-git:before {
+ content: "\f1d3";
+}
+.fa-y-combinator-square:before,
+.fa-yc-square:before,
+.fa-hacker-news:before {
+ content: "\f1d4";
+}
+.fa-tencent-weibo:before {
+ content: "\f1d5";
+}
+.fa-qq:before {
+ content: "\f1d6";
+}
+.fa-wechat:before,
+.fa-weixin:before {
+ content: "\f1d7";
+}
+.fa-send:before,
+.fa-paper-plane:before {
+ content: "\f1d8";
+}
+.fa-send-o:before,
+.fa-paper-plane-o:before {
+ content: "\f1d9";
+}
+.fa-history:before {
+ content: "\f1da";
+}
+.fa-circle-thin:before {
+ content: "\f1db";
+}
+.fa-header:before {
+ content: "\f1dc";
+}
+.fa-paragraph:before {
+ content: "\f1dd";
+}
+.fa-sliders:before {
+ content: "\f1de";
+}
+.fa-share-alt:before {
+ content: "\f1e0";
+}
+.fa-share-alt-square:before {
+ content: "\f1e1";
+}
+.fa-bomb:before {
+ content: "\f1e2";
+}
+.fa-soccer-ball-o:before,
+.fa-futbol-o:before {
+ content: "\f1e3";
+}
+.fa-tty:before {
+ content: "\f1e4";
+}
+.fa-binoculars:before {
+ content: "\f1e5";
+}
+.fa-plug:before {
+ content: "\f1e6";
+}
+.fa-slideshare:before {
+ content: "\f1e7";
+}
+.fa-twitch:before {
+ content: "\f1e8";
+}
+.fa-yelp:before {
+ content: "\f1e9";
+}
+.fa-newspaper-o:before {
+ content: "\f1ea";
+}
+.fa-wifi:before {
+ content: "\f1eb";
+}
+.fa-calculator:before {
+ content: "\f1ec";
+}
+.fa-paypal:before {
+ content: "\f1ed";
+}
+.fa-google-wallet:before {
+ content: "\f1ee";
+}
+.fa-cc-visa:before {
+ content: "\f1f0";
+}
+.fa-cc-mastercard:before {
+ content: "\f1f1";
+}
+.fa-cc-discover:before {
+ content: "\f1f2";
+}
+.fa-cc-amex:before {
+ content: "\f1f3";
+}
+.fa-cc-paypal:before {
+ content: "\f1f4";
+}
+.fa-cc-stripe:before {
+ content: "\f1f5";
+}
+.fa-bell-slash:before {
+ content: "\f1f6";
+}
+.fa-bell-slash-o:before {
+ content: "\f1f7";
+}
+.fa-trash:before {
+ content: "\f1f8";
+}
+.fa-copyright:before {
+ content: "\f1f9";
+}
+.fa-at:before {
+ content: "\f1fa";
+}
+.fa-eyedropper:before {
+ content: "\f1fb";
+}
+.fa-paint-brush:before {
+ content: "\f1fc";
+}
+.fa-birthday-cake:before {
+ content: "\f1fd";
+}
+.fa-area-chart:before {
+ content: "\f1fe";
+}
+.fa-pie-chart:before {
+ content: "\f200";
+}
+.fa-line-chart:before {
+ content: "\f201";
+}
+.fa-lastfm:before {
+ content: "\f202";
+}
+.fa-lastfm-square:before {
+ content: "\f203";
+}
+.fa-toggle-off:before {
+ content: "\f204";
+}
+.fa-toggle-on:before {
+ content: "\f205";
+}
+.fa-bicycle:before {
+ content: "\f206";
+}
+.fa-bus:before {
+ content: "\f207";
+}
+.fa-ioxhost:before {
+ content: "\f208";
+}
+.fa-angellist:before {
+ content: "\f209";
+}
+.fa-cc:before {
+ content: "\f20a";
+}
+.fa-shekel:before,
+.fa-sheqel:before,
+.fa-ils:before {
+ content: "\f20b";
+}
+.fa-meanpath:before {
+ content: "\f20c";
+}
+.fa-buysellads:before {
+ content: "\f20d";
+}
+.fa-connectdevelop:before {
+ content: "\f20e";
+}
+.fa-dashcube:before {
+ content: "\f210";
+}
+.fa-forumbee:before {
+ content: "\f211";
+}
+.fa-leanpub:before {
+ content: "\f212";
+}
+.fa-sellsy:before {
+ content: "\f213";
+}
+.fa-shirtsinbulk:before {
+ content: "\f214";
+}
+.fa-simplybuilt:before {
+ content: "\f215";
+}
+.fa-skyatlas:before {
+ content: "\f216";
+}
+.fa-cart-plus:before {
+ content: "\f217";
+}
+.fa-cart-arrow-down:before {
+ content: "\f218";
+}
+.fa-diamond:before {
+ content: "\f219";
+}
+.fa-ship:before {
+ content: "\f21a";
+}
+.fa-user-secret:before {
+ content: "\f21b";
+}
+.fa-motorcycle:before {
+ content: "\f21c";
+}
+.fa-street-view:before {
+ content: "\f21d";
+}
+.fa-heartbeat:before {
+ content: "\f21e";
+}
+.fa-venus:before {
+ content: "\f221";
+}
+.fa-mars:before {
+ content: "\f222";
+}
+.fa-mercury:before {
+ content: "\f223";
+}
+.fa-intersex:before,
+.fa-transgender:before {
+ content: "\f224";
+}
+.fa-transgender-alt:before {
+ content: "\f225";
+}
+.fa-venus-double:before {
+ content: "\f226";
+}
+.fa-mars-double:before {
+ content: "\f227";
+}
+.fa-venus-mars:before {
+ content: "\f228";
+}
+.fa-mars-stroke:before {
+ content: "\f229";
+}
+.fa-mars-stroke-v:before {
+ content: "\f22a";
+}
+.fa-mars-stroke-h:before {
+ content: "\f22b";
+}
+.fa-neuter:before {
+ content: "\f22c";
+}
+.fa-genderless:before {
+ content: "\f22d";
+}
+.fa-facebook-official:before {
+ content: "\f230";
+}
+.fa-pinterest-p:before {
+ content: "\f231";
+}
+.fa-whatsapp:before {
+ content: "\f232";
+}
+.fa-server:before {
+ content: "\f233";
+}
+.fa-user-plus:before {
+ content: "\f234";
+}
+.fa-user-times:before {
+ content: "\f235";
+}
+.fa-hotel:before,
+.fa-bed:before {
+ content: "\f236";
+}
+.fa-viacoin:before {
+ content: "\f237";
+}
+.fa-train:before {
+ content: "\f238";
+}
+.fa-subway:before {
+ content: "\f239";
+}
+.fa-medium:before {
+ content: "\f23a";
+}
+.fa-yc:before,
+.fa-y-combinator:before {
+ content: "\f23b";
+}
+.fa-optin-monster:before {
+ content: "\f23c";
+}
+.fa-opencart:before {
+ content: "\f23d";
+}
+.fa-expeditedssl:before {
+ content: "\f23e";
+}
+.fa-battery-4:before,
+.fa-battery:before,
+.fa-battery-full:before {
+ content: "\f240";
+}
+.fa-battery-3:before,
+.fa-battery-three-quarters:before {
+ content: "\f241";
+}
+.fa-battery-2:before,
+.fa-battery-half:before {
+ content: "\f242";
+}
+.fa-battery-1:before,
+.fa-battery-quarter:before {
+ content: "\f243";
+}
+.fa-battery-0:before,
+.fa-battery-empty:before {
+ content: "\f244";
+}
+.fa-mouse-pointer:before {
+ content: "\f245";
+}
+.fa-i-cursor:before {
+ content: "\f246";
+}
+.fa-object-group:before {
+ content: "\f247";
+}
+.fa-object-ungroup:before {
+ content: "\f248";
+}
+.fa-sticky-note:before {
+ content: "\f249";
+}
+.fa-sticky-note-o:before {
+ content: "\f24a";
+}
+.fa-cc-jcb:before {
+ content: "\f24b";
+}
+.fa-cc-diners-club:before {
+ content: "\f24c";
+}
+.fa-clone:before {
+ content: "\f24d";
+}
+.fa-balance-scale:before {
+ content: "\f24e";
+}
+.fa-hourglass-o:before {
+ content: "\f250";
+}
+.fa-hourglass-1:before,
+.fa-hourglass-start:before {
+ content: "\f251";
+}
+.fa-hourglass-2:before,
+.fa-hourglass-half:before {
+ content: "\f252";
+}
+.fa-hourglass-3:before,
+.fa-hourglass-end:before {
+ content: "\f253";
+}
+.fa-hourglass:before {
+ content: "\f254";
+}
+.fa-hand-grab-o:before,
+.fa-hand-rock-o:before {
+ content: "\f255";
+}
+.fa-hand-stop-o:before,
+.fa-hand-paper-o:before {
+ content: "\f256";
+}
+.fa-hand-scissors-o:before {
+ content: "\f257";
+}
+.fa-hand-lizard-o:before {
+ content: "\f258";
+}
+.fa-hand-spock-o:before {
+ content: "\f259";
+}
+.fa-hand-pointer-o:before {
+ content: "\f25a";
+}
+.fa-hand-peace-o:before {
+ content: "\f25b";
+}
+.fa-trademark:before {
+ content: "\f25c";
+}
+.fa-registered:before {
+ content: "\f25d";
+}
+.fa-creative-commons:before {
+ content: "\f25e";
+}
+.fa-gg:before {
+ content: "\f260";
+}
+.fa-gg-circle:before {
+ content: "\f261";
+}
+.fa-tripadvisor:before {
+ content: "\f262";
+}
+.fa-odnoklassniki:before {
+ content: "\f263";
+}
+.fa-odnoklassniki-square:before {
+ content: "\f264";
+}
+.fa-get-pocket:before {
+ content: "\f265";
+}
+.fa-wikipedia-w:before {
+ content: "\f266";
+}
+.fa-safari:before {
+ content: "\f267";
+}
+.fa-chrome:before {
+ content: "\f268";
+}
+.fa-firefox:before {
+ content: "\f269";
+}
+.fa-opera:before {
+ content: "\f26a";
+}
+.fa-internet-explorer:before {
+ content: "\f26b";
+}
+.fa-tv:before,
+.fa-television:before {
+ content: "\f26c";
+}
+.fa-contao:before {
+ content: "\f26d";
+}
+.fa-500px:before {
+ content: "\f26e";
+}
+.fa-amazon:before {
+ content: "\f270";
+}
+.fa-calendar-plus-o:before {
+ content: "\f271";
+}
+.fa-calendar-minus-o:before {
+ content: "\f272";
+}
+.fa-calendar-times-o:before {
+ content: "\f273";
+}
+.fa-calendar-check-o:before {
+ content: "\f274";
+}
+.fa-industry:before {
+ content: "\f275";
+}
+.fa-map-pin:before {
+ content: "\f276";
+}
+.fa-map-signs:before {
+ content: "\f277";
+}
+.fa-map-o:before {
+ content: "\f278";
+}
+.fa-map:before {
+ content: "\f279";
+}
+.fa-commenting:before {
+ content: "\f27a";
+}
+.fa-commenting-o:before {
+ content: "\f27b";
+}
+.fa-houzz:before {
+ content: "\f27c";
+}
+.fa-vimeo:before {
+ content: "\f27d";
+}
+.fa-black-tie:before {
+ content: "\f27e";
+}
+.fa-fonticons:before {
+ content: "\f280";
+}
+.fa-reddit-alien:before {
+ content: "\f281";
+}
+.fa-edge:before {
+ content: "\f282";
+}
+.fa-credit-card-alt:before {
+ content: "\f283";
+}
+.fa-codiepie:before {
+ content: "\f284";
+}
+.fa-modx:before {
+ content: "\f285";
+}
+.fa-fort-awesome:before {
+ content: "\f286";
+}
+.fa-usb:before {
+ content: "\f287";
+}
+.fa-product-hunt:before {
+ content: "\f288";
+}
+.fa-mixcloud:before {
+ content: "\f289";
+}
+.fa-scribd:before {
+ content: "\f28a";
+}
+.fa-pause-circle:before {
+ content: "\f28b";
+}
+.fa-pause-circle-o:before {
+ content: "\f28c";
+}
+.fa-stop-circle:before {
+ content: "\f28d";
+}
+.fa-stop-circle-o:before {
+ content: "\f28e";
+}
+.fa-shopping-bag:before {
+ content: "\f290";
+}
+.fa-shopping-basket:before {
+ content: "\f291";
+}
+.fa-hashtag:before {
+ content: "\f292";
+}
+.fa-bluetooth:before {
+ content: "\f293";
+}
+.fa-bluetooth-b:before {
+ content: "\f294";
+}
+.fa-percent:before {
+ content: "\f295";
+}
+.fa-gitlab:before {
+ content: "\f296";
+}
+.fa-wpbeginner:before {
+ content: "\f297";
+}
+.fa-wpforms:before {
+ content: "\f298";
+}
+.fa-envira:before {
+ content: "\f299";
+}
+.fa-universal-access:before {
+ content: "\f29a";
+}
+.fa-wheelchair-alt:before {
+ content: "\f29b";
+}
+.fa-question-circle-o:before {
+ content: "\f29c";
+}
+.fa-blind:before {
+ content: "\f29d";
+}
+.fa-audio-description:before {
+ content: "\f29e";
+}
+.fa-volume-control-phone:before {
+ content: "\f2a0";
+}
+.fa-braille:before {
+ content: "\f2a1";
+}
+.fa-assistive-listening-systems:before {
+ content: "\f2a2";
+}
+.fa-asl-interpreting:before,
+.fa-american-sign-language-interpreting:before {
+ content: "\f2a3";
+}
+.fa-deafness:before,
+.fa-hard-of-hearing:before,
+.fa-deaf:before {
+ content: "\f2a4";
+}
+.fa-glide:before {
+ content: "\f2a5";
+}
+.fa-glide-g:before {
+ content: "\f2a6";
+}
+.fa-signing:before,
+.fa-sign-language:before {
+ content: "\f2a7";
+}
+.fa-low-vision:before {
+ content: "\f2a8";
+}
+.fa-viadeo:before {
+ content: "\f2a9";
+}
+.fa-viadeo-square:before {
+ content: "\f2aa";
+}
+.fa-snapchat:before {
+ content: "\f2ab";
+}
+.fa-snapchat-ghost:before {
+ content: "\f2ac";
+}
+.fa-snapchat-square:before {
+ content: "\f2ad";
+}
+.fa-pied-piper:before {
+ content: "\f2ae";
+}
+.fa-first-order:before {
+ content: "\f2b0";
+}
+.fa-yoast:before {
+ content: "\f2b1";
+}
+.fa-themeisle:before {
+ content: "\f2b2";
+}
+.fa-google-plus-circle:before,
+.fa-google-plus-official:before {
+ content: "\f2b3";
+}
+.fa-fa:before,
+.fa-font-awesome:before {
+ content: "\f2b4";
+}
+.fa-handshake-o:before {
+ content: "\f2b5";
+}
+.fa-envelope-open:before {
+ content: "\f2b6";
+}
+.fa-envelope-open-o:before {
+ content: "\f2b7";
+}
+.fa-linode:before {
+ content: "\f2b8";
+}
+.fa-address-book:before {
+ content: "\f2b9";
+}
+.fa-address-book-o:before {
+ content: "\f2ba";
+}
+.fa-vcard:before,
+.fa-address-card:before {
+ content: "\f2bb";
+}
+.fa-vcard-o:before,
+.fa-address-card-o:before {
+ content: "\f2bc";
+}
+.fa-user-circle:before {
+ content: "\f2bd";
+}
+.fa-user-circle-o:before {
+ content: "\f2be";
+}
+.fa-user-o:before {
+ content: "\f2c0";
+}
+.fa-id-badge:before {
+ content: "\f2c1";
+}
+.fa-drivers-license:before,
+.fa-id-card:before {
+ content: "\f2c2";
+}
+.fa-drivers-license-o:before,
+.fa-id-card-o:before {
+ content: "\f2c3";
+}
+.fa-quora:before {
+ content: "\f2c4";
+}
+.fa-free-code-camp:before {
+ content: "\f2c5";
+}
+.fa-telegram:before {
+ content: "\f2c6";
+}
+.fa-thermometer-4:before,
+.fa-thermometer:before,
+.fa-thermometer-full:before {
+ content: "\f2c7";
+}
+.fa-thermometer-3:before,
+.fa-thermometer-three-quarters:before {
+ content: "\f2c8";
+}
+.fa-thermometer-2:before,
+.fa-thermometer-half:before {
+ content: "\f2c9";
+}
+.fa-thermometer-1:before,
+.fa-thermometer-quarter:before {
+ content: "\f2ca";
+}
+.fa-thermometer-0:before,
+.fa-thermometer-empty:before {
+ content: "\f2cb";
+}
+.fa-shower:before {
+ content: "\f2cc";
+}
+.fa-bathtub:before,
+.fa-s15:before,
+.fa-bath:before {
+ content: "\f2cd";
+}
+.fa-podcast:before {
+ content: "\f2ce";
+}
+.fa-window-maximize:before {
+ content: "\f2d0";
+}
+.fa-window-minimize:before {
+ content: "\f2d1";
+}
+.fa-window-restore:before {
+ content: "\f2d2";
+}
+.fa-times-rectangle:before,
+.fa-window-close:before {
+ content: "\f2d3";
+}
+.fa-times-rectangle-o:before,
+.fa-window-close-o:before {
+ content: "\f2d4";
+}
+.fa-bandcamp:before {
+ content: "\f2d5";
+}
+.fa-grav:before {
+ content: "\f2d6";
+}
+.fa-etsy:before {
+ content: "\f2d7";
+}
+.fa-imdb:before {
+ content: "\f2d8";
+}
+.fa-ravelry:before {
+ content: "\f2d9";
+}
+.fa-eercast:before {
+ content: "\f2da";
+}
+.fa-microchip:before {
+ content: "\f2db";
+}
+.fa-snowflake-o:before {
+ content: "\f2dc";
+}
+.fa-superpowers:before {
+ content: "\f2dd";
+}
+.fa-wpexplorer:before {
+ content: "\f2de";
+}
+.fa-meetup:before {
+ content: "\f2e0";
+}
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0;
+}
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto;
+}
diff --git a/trunk/src/AppBundle/Resources/public/css/owl-carousel.css b/trunk/src/AppBundle/Resources/public/css/owl-carousel.css
new file mode 100644
index 00000000..86565fae
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/css/owl-carousel.css
@@ -0,0 +1,338 @@
+/*
+ * Default theme - Owl Carousel CSS File
+ */
+
+ .testi-item h3 {
+ font-size:25px !important;
+ }
+ .testi-item h6 {
+ font-size:13px !important;
+ }
+.owl-theme .owl-controls {
+ left: 0;
+ margin-top: 0;
+ padding: 0;
+ position: absolute;
+ right: 0;
+ text-align: center;
+ top: auto;
+ width: auto;
+}
+
+#testimonials {
+ position: relative;
+ display: block;
+}
+#testimonials .owl-controls {
+ bottom: 10%;
+}
+.top-destinations .post-title {
+ padding-top: 10px;
+}
+
+.testi-item .hotel-title {
+ padding: 50px 0;
+}
+
+.owl-theme .owl-controls .owl-nav [class*='owl-'] {
+ border-radius: 100%;
+ cursor: pointer;
+ display: inline-block;
+ color:#ffffff;
+ margin: 0;
+ padding: 0;
+ text-align: center;
+}
+.owl-theme .owl-controls .owl-nav [class*='owl-']:hover {
+ color: #ffffff;
+ border-color: #0b0b0b;
+ text-decoration: none;
+}
+.owl-theme .owl-controls .owl-nav .disabled {
+ opacity: 0.5;
+ cursor: default;
+}
+.owl-theme .owl-dots .owl-dot {
+ display: inline-block;
+ zoom: 1;
+ *display: inline;
+}
+.owl-theme .owl-dots .owl-dot span {
+ width: 10px;
+ height: 10px;
+ margin: 0 5px 0;
+ background: #777777;
+ display: block;
+ -webkit-backface-visibility: visible;
+ -webkit-transition: opacity 200ms ease;
+ -moz-transition: opacity 200ms ease;
+ -ms-transition: opacity 200ms ease;
+ -o-transition: opacity 200ms ease;
+ transition: opacity 200ms ease;
+ -webkit-border-radius: 30px;
+ -moz-border-radius: 30px;
+ border-radius: 30px;
+}
+.owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span {
+ background: #869791;
+}
+
+/*
+ * Owl Carousel - Animate Plugin
+ */
+.owl-carousel .animated {
+ -webkit-animation-duration: 1000ms;
+ animation-duration: 1000ms;
+ -webkit-animation-fill-mode: both;
+ animation-fill-mode: both;
+}
+.owl-carousel .owl-animated-in {
+ z-index: 0;
+}
+.owl-carousel .owl-animated-out {
+ z-index: 1;
+}
+.owl-carousel .fadeOut {
+ -webkit-animation-name: fadeOut;
+ animation-name: fadeOut;
+}
+
+@-webkit-keyframes fadeOut {
+ 0% {
+ opacity: 1;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+@keyframes fadeOut {
+ 0% {
+ opacity: 1;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
+
+/*
+ * Owl Carousel - Auto Height Plugin
+ */
+.owl-height {
+ -webkit-transition: height 500ms ease-in-out;
+ -moz-transition: height 500ms ease-in-out;
+ -ms-transition: height 500ms ease-in-out;
+ -o-transition: height 500ms ease-in-out;
+ transition: height 500ms ease-in-out;
+}
+
+/*
+ * Core Owl Carousel CSS File
+ */
+.owl-carousel {
+ display: none;
+ width: 100%;
+ -webkit-tap-highlight-color: transparent;
+ /* position relative and z-index fix webkit rendering fonts issue */
+ position: relative;
+ z-index: 1;
+}
+.owl-carousel .owl-stage {
+ position: relative;
+ -ms-touch-action: pan-Y;
+}
+.owl-carousel .owl-stage:after {
+ content: ".";
+ display: block;
+ clear: both;
+ visibility: hidden;
+ line-height: 0;
+ height: 0;
+}
+.owl-carousel .owl-stage-outer {
+ position: relative;
+ overflow: hidden;
+ /* fix for flashing background */
+ -webkit-transform: translate3d(0px, 0px, 0px);
+}
+
+.owl-controls {
+ position:absolute;
+ top:0;
+ right:0;
+}
+.owl-carousel .owl-controls .owl-nav .owl-prev,
+.owl-carousel .owl-controls .owl-nav .owl-next,
+.owl-carousel .owl-controls .owl-dot {
+ cursor: pointer;
+ cursor: hand;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.owl-fullwidth .owl-controls {
+ left: 0;
+ padding: 0;
+ position: absolute;
+ right: 0;
+ text-align: center;
+ top: 58%;
+ width: auto;
+}
+
+.owl-carousel .owl-controls .owl-nav .owl-next {
+ width: 60px;
+ height: 60px;
+ line-height: 53px;
+ border:1px solid #ffffff !important;
+ font-size:34px;
+ border-radius: 100%;
+ position: absolute;
+ bottom:0;
+ right: auto;
+ left: 30px;
+ background-color: transparent;
+}
+.owl-carousel .owl-controls .owl-nav .owl-prev {
+ width: 60px;
+ height: 60px;
+ line-height: 53px;
+ border:1px solid #ffffff !important;
+ font-size:34px;
+ border-radius: 100%;
+ bottom:0;
+ position: absolute;
+ right: 30px;
+ left: auto;
+ background-color: transparent;
+}
+.owl-carousel.owl-loaded {
+ display: block;
+}
+.owl-carousel.owl-loading {
+ opacity: 0;
+ display: block;
+}
+.owl-carousel.owl-hidden {
+ opacity: 0;
+}
+.owl-carousel .owl-refresh .owl-item {
+ display: none;
+}
+.owl-carousel .owl-item {
+ position: relative;
+ min-height: 1px;
+ float: left;
+ -webkit-backface-visibility: hidden;
+ -webkit-tap-highlight-color: transparent;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.owl-carousel .owl-item img {
+ display: block;
+ width: 100%;
+ -webkit-transform-style: preserve-3d;
+}
+.owl-carousel.owl-text-select-on .owl-item {
+ -webkit-user-select: auto;
+ -moz-user-select: auto;
+ -ms-user-select: auto;
+ user-select: auto;
+}
+.owl-carousel .owl-grab {
+ cursor: move;
+ cursor: -webkit-grab;
+ cursor: -o-grab;
+ cursor: -ms-grab;
+ cursor: grab;
+}
+.owl-carousel.owl-rtl {
+ direction: rtl;
+}
+.owl-carousel.owl-rtl .owl-item {
+ float: right;
+}
+
+/* No Js */
+.no-js .owl-carousel {
+ display: block;
+}
+
+/*
+ * Owl Carousel - Lazy Load Plugin
+ */
+.owl-carousel .owl-item .owl-lazy {
+ opacity: 0;
+ -webkit-transition: opacity 400ms ease;
+ -moz-transition: opacity 400ms ease;
+ -ms-transition: opacity 400ms ease;
+ -o-transition: opacity 400ms ease;
+ transition: opacity 400ms ease;
+}
+.owl-carousel .owl-item img {
+ transform-style: preserve-3d;
+}
+
+/*
+ * Owl Carousel - Video Plugin
+ */
+.owl-carousel .owl-video-wrapper {
+ position: relative;
+ height: 100%;
+ background: #000;
+}
+.owl-carousel .owl-video-play-icon {
+ position: absolute;
+ height: 80px;
+ width: 80px;
+ left: 50%;
+ top: 50%;
+ margin-left: -40px;
+ margin-top: -40px;
+ background: url("owl.video.play.png") no-repeat;
+ cursor: pointer;
+ z-index: 1;
+ -webkit-backface-visibility: hidden;
+ -webkit-transition: scale 100ms ease;
+ -moz-transition: scale 100ms ease;
+ -ms-transition: scale 100ms ease;
+ -o-transition: scale 100ms ease;
+ transition: scale 100ms ease;
+}
+.owl-carousel .owl-video-play-icon:hover {
+ -webkit-transition: scale(1.3, 1.3);
+ -moz-transition: scale(1.3, 1.3);
+ -ms-transition: scale(1.3, 1.3);
+ -o-transition: scale(1.3, 1.3);
+ transition: scale(1.3, 1.3);
+}
+.owl-carousel .owl-video-playing .owl-video-tn,
+.owl-carousel .owl-video-playing .owl-video-play-icon {
+ display: none;
+}
+.owl-carousel .owl-video-tn {
+ opacity: 0;
+ height: 100%;
+ background-position: center center;
+ background-repeat: no-repeat;
+ -webkit-background-size: contain;
+ -moz-background-size: contain;
+ -o-background-size: contain;
+ background-size: contain;
+ -webkit-transition: opacity 400ms ease;
+ -moz-transition: opacity 400ms ease;
+ -ms-transition: opacity 400ms ease;
+ -o-transition: opacity 400ms ease;
+ transition: opacity 400ms ease;
+}
+.owl-carousel .owl-video-frame {
+ position: relative;
+ z-index: 1;
+}
diff --git a/trunk/src/AppBundle/Resources/public/css/prettyPhoto.css b/trunk/src/AppBundle/Resources/public/css/prettyPhoto.css
new file mode 100644
index 00000000..9770e157
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/css/prettyPhoto.css
@@ -0,0 +1,170 @@
+div.pp_default .pp_top,div.pp_default .pp_top .pp_middle,div.pp_default .pp_top .pp_left,div.pp_default .pp_top .pp_right,div.pp_default .pp_bottom,div.pp_default .pp_bottom .pp_left,div.pp_default .pp_bottom .pp_middle,div.pp_default .pp_bottom .pp_right{height:13px}
+div.pp_default .pp_top .pp_left{background:url(../images/prettyPhoto/default/sprite.png) -78px -93px no-repeat}
+div.pp_default .pp_top .pp_middle{background:url(../images/prettyPhoto/default/sprite_x.png) top left repeat-x}
+div.pp_default .pp_top .pp_right{background:url(../images/prettyPhoto/default/sprite.png) -112px -93px no-repeat}
+div.pp_default .pp_content .ppt{color:#f8f8f8}
+div.pp_default .pp_content_container .pp_left{background:url(../images/prettyPhoto/default/sprite_y.png) -7px 0 repeat-y;padding-left:13px}
+div.pp_default .pp_content_container .pp_right{background:url(../images/prettyPhoto/default/sprite_y.png) top right repeat-y;padding-right:13px}
+div.pp_default .pp_next:hover{background:url(../images/prettyPhoto/default/sprite_next.png) center right no-repeat;cursor:pointer}
+div.pp_default .pp_previous:hover{background:url(../images/prettyPhoto/default/sprite_prev.png) center left no-repeat;cursor:pointer}
+div.pp_default .pp_expand{background:url(../images/prettyPhoto/default/sprite.png) 0 -29px no-repeat;cursor:pointer;width:28px;height:28px}
+div.pp_default .pp_expand:hover{background:url(../images/prettyPhoto/default/sprite.png) 0 -56px no-repeat;cursor:pointer}
+div.pp_default .pp_contract{background:url(../images/prettyPhoto/default/sprite.png) 0 -84px no-repeat;cursor:pointer;width:28px;height:28px}
+div.pp_default .pp_contract:hover{background:url(../images/prettyPhoto/default/sprite.png) 0 -113px no-repeat;cursor:pointer}
+div.pp_default .pp_close{width:30px;height:30px;background:url(../images/prettyPhoto/default/sprite.png) 2px 1px no-repeat;cursor:pointer}
+div.pp_default .pp_gallery ul li a{background:url(../images/prettyPhoto/default/default_thumb.png) center center #f8f8f8;border:1px solid #aaa}
+div.pp_default .pp_social{margin-top:7px}
+div.pp_default .pp_gallery a.pp_arrow_previous,div.pp_default .pp_gallery a.pp_arrow_next{position:static;left:auto}
+div.pp_default .pp_nav .pp_play,div.pp_default .pp_nav .pp_pause{background:url(../images/prettyPhoto/default/sprite.png) -51px 1px no-repeat;height:30px;width:30px}
+div.pp_default .pp_nav .pp_pause{background-position:-51px -29px}
+div.pp_default a.pp_arrow_previous,div.pp_default a.pp_arrow_next{background:url(../images/prettyPhoto/default/sprite.png) -31px -3px no-repeat;height:20px;width:20px;margin:4px 0 0}
+div.pp_default a.pp_arrow_next{left:52px;background-position:-82px -3px}
+div.pp_default .pp_content_container .pp_details{margin-top:5px}
+div.pp_default .pp_nav{clear:none;height:30px;width:110px;position:relative}
+div.pp_default .pp_nav .currentTextHolder{font-family:Georgia;font-style:italic;color:#999;font-size:11px;left:75px;line-height:25px;position:absolute;top:2px;margin:0;padding:0 0 0 10px}
+div.pp_default .pp_close:hover,div.pp_default .pp_nav .pp_play:hover,div.pp_default .pp_nav .pp_pause:hover,div.pp_default .pp_arrow_next:hover,div.pp_default .pp_arrow_previous:hover{opacity:0.7}
+div.pp_default .pp_description{font-size:11px;font-weight:700;line-height:14px;margin:5px 50px 5px 0}
+div.pp_default .pp_bottom .pp_left{background:url(../images/prettyPhoto/default/sprite.png) -78px -127px no-repeat}
+div.pp_default .pp_bottom .pp_middle{background:url(../images/prettyPhoto/default/sprite_x.png) bottom left repeat-x}
+div.pp_default .pp_bottom .pp_right{background:url(../images/prettyPhoto/default/sprite.png) -112px -127px no-repeat}
+div.pp_default .pp_loaderIcon{background:url(../images/prettyPhoto/default/loader.gif) center center no-repeat}
+div.light_rounded .pp_top .pp_left{background:url(../images/prettyPhoto/light_rounded/sprite.png) -88px -53px no-repeat}
+div.light_rounded .pp_top .pp_right{background:url(../images/prettyPhoto/light_rounded/sprite.png) -110px -53px no-repeat}
+div.light_rounded .pp_next:hover{background:url(../images/prettyPhoto/light_rounded/btnNext.png) center right no-repeat;cursor:pointer}
+div.light_rounded .pp_previous:hover{background:url(../images/prettyPhoto/light_rounded/btnPrevious.png) center left no-repeat;cursor:pointer}
+div.light_rounded .pp_expand{background:url(../images/prettyPhoto/light_rounded/sprite.png) -31px -26px no-repeat;cursor:pointer}
+div.light_rounded .pp_expand:hover{background:url(../images/prettyPhoto/light_rounded/sprite.png) -31px -47px no-repeat;cursor:pointer}
+div.light_rounded .pp_contract{background:url(../images/prettyPhoto/light_rounded/sprite.png) 0 -26px no-repeat;cursor:pointer}
+div.light_rounded .pp_contract:hover{background:url(../images/prettyPhoto/light_rounded/sprite.png) 0 -47px no-repeat;cursor:pointer}
+div.light_rounded .pp_close{width:75px;height:22px;background:url(../images/prettyPhoto/light_rounded/sprite.png) -1px -1px no-repeat;cursor:pointer}
+div.light_rounded .pp_nav .pp_play{background:url(../images/prettyPhoto/light_rounded/sprite.png) -1px -100px no-repeat;height:15px;width:14px}
+div.light_rounded .pp_nav .pp_pause{background:url(../images/prettyPhoto/light_rounded/sprite.png) -24px -100px no-repeat;height:15px;width:14px}
+div.light_rounded .pp_arrow_previous{background:url(../images/prettyPhoto/light_rounded/sprite.png) 0 -71px no-repeat}
+div.light_rounded .pp_arrow_next{background:url(../images/prettyPhoto/light_rounded/sprite.png) -22px -71px no-repeat}
+div.light_rounded .pp_bottom .pp_left{background:url(../images/prettyPhoto/light_rounded/sprite.png) -88px -80px no-repeat}
+div.light_rounded .pp_bottom .pp_right{background:url(../images/prettyPhoto/light_rounded/sprite.png) -110px -80px no-repeat}
+div.dark_rounded .pp_top .pp_left{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -88px -53px no-repeat}
+div.dark_rounded .pp_top .pp_right{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -110px -53px no-repeat}
+div.dark_rounded .pp_content_container .pp_left{background:url(../images/prettyPhoto/dark_rounded/contentPattern.png) top left repeat-y}
+div.dark_rounded .pp_content_container .pp_right{background:url(../images/prettyPhoto/dark_rounded/contentPattern.png) top right repeat-y}
+div.dark_rounded .pp_next:hover{background:url(../images/prettyPhoto/dark_rounded/btnNext.png) center right no-repeat;cursor:pointer}
+div.dark_rounded .pp_previous:hover{background:url(../images/prettyPhoto/dark_rounded/btnPrevious.png) center left no-repeat;cursor:pointer}
+div.dark_rounded .pp_expand{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -31px -26px no-repeat;cursor:pointer}
+div.dark_rounded .pp_expand:hover{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -31px -47px no-repeat;cursor:pointer}
+div.dark_rounded .pp_contract{background:url(../images/prettyPhoto/dark_rounded/sprite.png) 0 -26px no-repeat;cursor:pointer}
+div.dark_rounded .pp_contract:hover{background:url(../images/prettyPhoto/dark_rounded/sprite.png) 0 -47px no-repeat;cursor:pointer}
+div.dark_rounded .pp_close{width:75px;height:22px;background:url(../images/prettyPhoto/dark_rounded/sprite.png) -1px -1px no-repeat;cursor:pointer}
+div.dark_rounded .pp_description{margin-right:85px;color:#fff}
+div.dark_rounded .pp_nav .pp_play{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -1px -100px no-repeat;height:15px;width:14px}
+div.dark_rounded .pp_nav .pp_pause{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -24px -100px no-repeat;height:15px;width:14px}
+div.dark_rounded .pp_arrow_previous{background:url(../images/prettyPhoto/dark_rounded/sprite.png) 0 -71px no-repeat}
+div.dark_rounded .pp_arrow_next{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -22px -71px no-repeat}
+div.dark_rounded .pp_bottom .pp_left{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -88px -80px no-repeat}
+div.dark_rounded .pp_bottom .pp_right{background:url(../images/prettyPhoto/dark_rounded/sprite.png) -110px -80px no-repeat}
+div.dark_rounded .pp_loaderIcon{background:url(../images/prettyPhoto/dark_rounded/loader.gif) center center no-repeat}
+div.dark_square .pp_left,div.dark_square .pp_middle,div.dark_square .pp_right,div.dark_square .pp_content{background:#000}
+div.dark_square .pp_description{color:#fff;margin:0 85px 0 0}
+div.dark_square .pp_loaderIcon{background:url(../images/prettyPhoto/dark_square/loader.gif) center center no-repeat}
+div.dark_square .pp_expand{background:url(../images/prettyPhoto/dark_square/sprite.png) -31px -26px no-repeat;cursor:pointer}
+div.dark_square .pp_expand:hover{background:url(../images/prettyPhoto/dark_square/sprite.png) -31px -47px no-repeat;cursor:pointer}
+div.dark_square .pp_contract{background:url(../images/prettyPhoto/dark_square/sprite.png) 0 -26px no-repeat;cursor:pointer}
+div.dark_square .pp_contract:hover{background:url(../images/prettyPhoto/dark_square/sprite.png) 0 -47px no-repeat;cursor:pointer}
+div.dark_square .pp_close{width:75px;height:22px;background:url(../images/prettyPhoto/dark_square/sprite.png) -1px -1px no-repeat;cursor:pointer}
+div.dark_square .pp_nav{clear:none}
+div.dark_square .pp_nav .pp_play{background:url(../images/prettyPhoto/dark_square/sprite.png) -1px -100px no-repeat;height:15px;width:14px}
+div.dark_square .pp_nav .pp_pause{background:url(../images/prettyPhoto/dark_square/sprite.png) -24px -100px no-repeat;height:15px;width:14px}
+div.dark_square .pp_arrow_previous{background:url(../images/prettyPhoto/dark_square/sprite.png) 0 -71px no-repeat}
+div.dark_square .pp_arrow_next{background:url(../images/prettyPhoto/dark_square/sprite.png) -22px -71px no-repeat}
+div.dark_square .pp_next:hover{background:url(../images/prettyPhoto/dark_square/btnNext.png) center right no-repeat;cursor:pointer}
+div.dark_square .pp_previous:hover{background:url(../images/prettyPhoto/dark_square/btnPrevious.png) center left no-repeat;cursor:pointer}
+div.light_square .pp_expand{background:url(../images/prettyPhoto/light_square/sprite.png) -31px -26px no-repeat;cursor:pointer}
+div.light_square .pp_expand:hover{background:url(../images/prettyPhoto/light_square/sprite.png) -31px -47px no-repeat;cursor:pointer}
+div.light_square .pp_contract{background:url(../images/prettyPhoto/light_square/sprite.png) 0 -26px no-repeat;cursor:pointer}
+div.light_square .pp_contract:hover{background:url(../images/prettyPhoto/light_square/sprite.png) 0 -47px no-repeat;cursor:pointer}
+div.light_square .pp_close{width:75px;height:22px;background:url(../images/prettyPhoto/light_square/sprite.png) -1px -1px no-repeat;cursor:pointer}
+div.light_square .pp_nav .pp_play{background:url(../images/prettyPhoto/light_square/sprite.png) -1px -100px no-repeat;height:15px;width:14px}
+div.light_square .pp_nav .pp_pause{background:url(../images/prettyPhoto/light_square/sprite.png) -24px -100px no-repeat;height:15px;width:14px}
+div.light_square .pp_arrow_previous{background:url(../images/prettyPhoto/light_square/sprite.png) 0 -71px no-repeat}
+div.light_square .pp_arrow_next{background:url(../images/prettyPhoto/light_square/sprite.png) -22px -71px no-repeat}
+div.light_square .pp_next:hover{background:url(../images/prettyPhoto/light_square/btnNext.png) center right no-repeat;cursor:pointer}
+div.light_square .pp_previous:hover{background:url(../images/prettyPhoto/light_square/btnPrevious.png) center left no-repeat;cursor:pointer}
+div.facebook .pp_top .pp_left{background:url(../images/prettyPhoto/facebook/sprite.png) -88px -53px no-repeat}
+div.facebook .pp_top .pp_middle{background:url(../images/prettyPhoto/facebook/contentPatternTop.png) top left repeat-x}
+div.facebook .pp_top .pp_right{background:url(../images/prettyPhoto/facebook/sprite.png) -110px -53px no-repeat}
+div.facebook .pp_content_container .pp_left{background:url(../images/prettyPhoto/facebook/contentPatternLeft.png) top left repeat-y}
+div.facebook .pp_content_container .pp_right{background:url(../images/prettyPhoto/facebook/contentPatternRight.png) top right repeat-y}
+div.facebook .pp_expand{background:url(../images/prettyPhoto/facebook/sprite.png) -31px -26px no-repeat;cursor:pointer}
+div.facebook .pp_expand:hover{background:url(../images/prettyPhoto/facebook/sprite.png) -31px -47px no-repeat;cursor:pointer}
+div.facebook .pp_contract{background:url(../images/prettyPhoto/facebook/sprite.png) 0 -26px no-repeat;cursor:pointer}
+div.facebook .pp_contract:hover{background:url(../images/prettyPhoto/facebook/sprite.png) 0 -47px no-repeat;cursor:pointer}
+div.facebook .pp_close{width:22px;height:22px;background:url(../images/prettyPhoto/facebook/sprite.png) -1px -1px no-repeat;cursor:pointer}
+div.facebook .pp_description{margin:0 37px 0 0}
+div.facebook .pp_loaderIcon{background:url(../images/prettyPhoto/facebook/loader.gif) center center no-repeat}
+div.facebook .pp_arrow_previous{background:url(../images/prettyPhoto/facebook/sprite.png) 0 -71px no-repeat;height:22px;margin-top:0;width:22px}
+div.facebook .pp_arrow_previous.disabled{background-position:0 -96px;cursor:default}
+div.facebook .pp_arrow_next{background:url(../images/prettyPhoto/facebook/sprite.png) -32px -71px no-repeat;height:22px;margin-top:0;width:22px}
+div.facebook .pp_arrow_next.disabled{background-position:-32px -96px;cursor:default}
+div.facebook .pp_nav{margin-top:0}
+div.facebook .pp_nav p{font-size:15px;padding:0 3px 0 4px}
+div.facebook .pp_nav .pp_play{background:url(../images/prettyPhoto/facebook/sprite.png) -1px -123px no-repeat;height:22px;width:22px}
+div.facebook .pp_nav .pp_pause{background:url(../images/prettyPhoto/facebook/sprite.png) -32px -123px no-repeat;height:22px;width:22px}
+div.facebook .pp_next:hover{background:url(../images/prettyPhoto/facebook/btnNext.png) center right no-repeat;cursor:pointer}
+div.facebook .pp_previous:hover{background:url(../images/prettyPhoto/facebook/btnPrevious.png) center left no-repeat;cursor:pointer}
+div.facebook .pp_bottom .pp_left{background:url(../images/prettyPhoto/facebook/sprite.png) -88px -80px no-repeat}
+div.facebook .pp_bottom .pp_middle{background:url(../images/prettyPhoto/facebook/contentPatternBottom.png) top left repeat-x}
+div.facebook .pp_bottom .pp_right{background:url(../images/prettyPhoto/facebook/sprite.png) -110px -80px no-repeat}
+div.pp_pic_holder a:focus{outline:none}
+div.pp_overlay{background:#000000;display:none;left:0;position:absolute;top:0;width:100%;z-index:9500}
+div.pp_pic_holder{display:none;position:absolute;width:100px;z-index:10000}
+.pp_content{height:40px;min-width:40px}
+* html .pp_content{width:40px}
+.pp_content_container{position:relative;text-align:left;width:100%}
+.pp_content_container .pp_left{padding-left:20px}
+.pp_content_container .pp_right{padding-right:20px}
+.pp_content_container .pp_details{float:left;margin:10px 0 2px}
+.pp_description{display:none;margin:0}
+.pp_social{float:left;margin:0}
+.pp_social .facebook{float:left;margin-left:5px;width:55px;overflow:hidden}
+.pp_social .twitter{float:left}
+.pp_nav{clear:right;float:left;margin:3px 10px 0 0}
+.pp_nav p{float:left;white-space:nowrap;margin:2px 4px}
+.pp_nav .pp_play,.pp_nav .pp_pause{float:left;margin-right:4px;text-indent:-10000px}
+a.pp_arrow_previous,a.pp_arrow_next{display:block;float:left;height:15px;margin-top:3px;overflow:hidden;text-indent:-10000px;width:14px}
+.pp_hoverContainer{position:absolute;top:0;width:100%;z-index:2000}
+.pp_gallery{display:none;left:50%;margin-top:-50px;position:absolute;z-index:10000}
+.pp_gallery div{float:left;overflow:hidden;position:relative}
+.pp_gallery ul{float:left;height:35px;position:relative;white-space:nowrap;margin:0 0 0 5px;padding:0}
+.pp_gallery ul a{border:1px rgba(0,0,0,0.5) solid;display:block;float:left;height:33px;overflow:hidden}
+.pp_gallery ul a img{border:0}
+.pp_gallery li{display:block;float:left;margin:0 5px 0 0;padding:0}
+.pp_gallery li.default a{background:url(../images/prettyPhoto/facebook/default_thumbnail.gif) 0 0 no-repeat;display:block;height:33px;width:50px}
+.pp_gallery .pp_arrow_previous,.pp_gallery .pp_arrow_next{margin-top:7px!important}
+a.pp_next{background:url(../images/prettyPhoto/light_rounded/btnNext.png) 10000px 10000px no-repeat;display:block;float:right;height:100%;text-indent:-10000px;width:49%}
+a.pp_previous{background:url(../images/prettyPhoto/light_rounded/btnNext.png) 10000px 10000px no-repeat;display:block;float:left;height:100%;text-indent:-10000px;width:49%}
+a.pp_expand,a.pp_contract{cursor:pointer;display:none;height:20px;position:absolute;right:30px;text-indent:-10000px;top:10px;width:20px;z-index:20000}
+a.pp_close{position:absolute;right:0;top:0;display:block;line-height:22px;text-indent:-10000px}
+.pp_loaderIcon{display:block;height:24px;left:50%;position:absolute;top:50%;width:24px;margin:-12px 0 0 -12px}
+#pp_full_res{line-height:1!important}
+#pp_full_res .pp_inline{text-align:left}
+#pp_full_res .pp_inline p{margin:0 0 15px}
+div.ppt{color:#fff;display:none;font-size:17px;z-index:9999;margin:0 0 5px 15px}
+div.pp_default .pp_content,div.light_rounded .pp_content{background-color:#fff}
+div.pp_default #pp_full_res .pp_inline,div.light_rounded .pp_content .ppt,div.light_rounded #pp_full_res .pp_inline,div.light_square .pp_content .ppt,div.light_square #pp_full_res .pp_inline,div.facebook .pp_content .ppt,div.facebook #pp_full_res .pp_inline{color:#000}
+div.pp_default .pp_gallery ul li a:hover,div.pp_default .pp_gallery ul li.selected a,.pp_gallery ul a:hover,.pp_gallery li.selected a{border-color:#fff}
+div.pp_default .pp_details,div.light_rounded .pp_details,div.dark_rounded .pp_details,div.dark_square .pp_details,div.light_square .pp_details,div.facebook .pp_details{position:relative}
+div.light_rounded .pp_top .pp_middle,div.light_rounded .pp_content_container .pp_left,div.light_rounded .pp_content_container .pp_right,div.light_rounded .pp_bottom .pp_middle,div.light_square .pp_left,div.light_square .pp_middle,div.light_square .pp_right,div.light_square .pp_content,div.facebook .pp_content{background:#fff}
+div.light_rounded .pp_description,div.light_square .pp_description{margin-right:85px}
+div.light_rounded .pp_gallery a.pp_arrow_previous,div.light_rounded .pp_gallery a.pp_arrow_next,div.dark_rounded .pp_gallery a.pp_arrow_previous,div.dark_rounded .pp_gallery a.pp_arrow_next,div.dark_square .pp_gallery a.pp_arrow_previous,div.dark_square .pp_gallery a.pp_arrow_next,div.light_square .pp_gallery a.pp_arrow_previous,div.light_square .pp_gallery a.pp_arrow_next{margin-top:12px!important}
+div.light_rounded .pp_arrow_previous.disabled,div.dark_rounded .pp_arrow_previous.disabled,div.dark_square .pp_arrow_previous.disabled,div.light_square .pp_arrow_previous.disabled{background-position:0 -87px;cursor:default}
+div.light_rounded .pp_arrow_next.disabled,div.dark_rounded .pp_arrow_next.disabled,div.dark_square .pp_arrow_next.disabled,div.light_square .pp_arrow_next.disabled{background-position:-22px -87px;cursor:default}
+div.light_rounded .pp_loaderIcon,div.light_square .pp_loaderIcon{background:url(../images/prettyPhoto/light_rounded/loader.gif) center center no-repeat}
+div.dark_rounded .pp_top .pp_middle,div.dark_rounded .pp_content,div.dark_rounded .pp_bottom .pp_middle{background:url(../images/prettyPhoto/dark_rounded/contentPattern.png) top left repeat}
+div.dark_rounded .currentTextHolder,div.dark_square .currentTextHolder{color:#c4c4c4}
+div.dark_rounded #pp_full_res .pp_inline,div.dark_square #pp_full_res .pp_inline{color:#fff}
+.pp_top,.pp_bottom{height:20px;position:relative}
+* html .pp_top,* html .pp_bottom{padding:0 20px}
+.pp_top .pp_left,.pp_bottom .pp_left{height:20px;left:0;position:absolute;width:20px}
+.pp_top .pp_middle,.pp_bottom .pp_middle{height:20px;left:20px;position:absolute;right:20px}
+* html .pp_top .pp_middle,* html .pp_bottom .pp_middle{left:0;position:static}
+.pp_top .pp_right,.pp_bottom .pp_right{height:20px;left:auto;position:absolute;right:0;top:0;width:20px}
+.pp_fade,.pp_gallery li.default a img{display:none}
\ No newline at end of file
diff --git a/trunk/src/AppBundle/Resources/public/fonts/FontAwesome.otf b/trunk/src/AppBundle/Resources/public/fonts/FontAwesome.otf
new file mode 100644
index 00000000..401ec0f3
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/fonts/FontAwesome.otf differ
diff --git a/trunk/src/AppBundle/Resources/public/fonts/fontawesome-webfont.eot b/trunk/src/AppBundle/Resources/public/fonts/fontawesome-webfont.eot
new file mode 100644
index 00000000..e9f60ca9
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/fonts/fontawesome-webfont.eot differ
diff --git a/trunk/src/AppBundle/Resources/public/fonts/fontawesome-webfont.svg b/trunk/src/AppBundle/Resources/public/fonts/fontawesome-webfont.svg
new file mode 100644
index 00000000..855c845e
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/fonts/fontawesome-webfont.svg
@@ -0,0 +1,2671 @@
+
+
+
+
+Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016
+ By ,,,
+Copyright Dave Gandy 2016. All rights reserved.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/trunk/src/AppBundle/Resources/public/fonts/fontawesome-webfont.ttf b/trunk/src/AppBundle/Resources/public/fonts/fontawesome-webfont.ttf
new file mode 100644
index 00000000..35acda2f
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/fonts/fontawesome-webfont.ttf differ
diff --git a/trunk/src/AppBundle/Resources/public/fonts/fontawesome-webfont.woff b/trunk/src/AppBundle/Resources/public/fonts/fontawesome-webfont.woff
new file mode 100644
index 00000000..400014a4
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/fonts/fontawesome-webfont.woff differ
diff --git a/trunk/src/AppBundle/Resources/public/fonts/fontawesome-webfont.woff2 b/trunk/src/AppBundle/Resources/public/fonts/fontawesome-webfont.woff2
new file mode 100644
index 00000000..4d13fc60
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/fonts/fontawesome-webfont.woff2 differ
diff --git a/trunk/src/AppBundle/Resources/public/fonts/glyphicons-halflings-regular.eot b/trunk/src/AppBundle/Resources/public/fonts/glyphicons-halflings-regular.eot
new file mode 100644
index 00000000..b93a4953
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/fonts/glyphicons-halflings-regular.eot differ
diff --git a/trunk/src/AppBundle/Resources/public/fonts/glyphicons-halflings-regular.svg b/trunk/src/AppBundle/Resources/public/fonts/glyphicons-halflings-regular.svg
new file mode 100644
index 00000000..94fb5490
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,288 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/trunk/src/AppBundle/Resources/public/fonts/glyphicons-halflings-regular.ttf b/trunk/src/AppBundle/Resources/public/fonts/glyphicons-halflings-regular.ttf
new file mode 100644
index 00000000..1413fc60
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/fonts/glyphicons-halflings-regular.ttf differ
diff --git a/trunk/src/AppBundle/Resources/public/fonts/glyphicons-halflings-regular.woff b/trunk/src/AppBundle/Resources/public/fonts/glyphicons-halflings-regular.woff
new file mode 100644
index 00000000..9e612858
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/fonts/glyphicons-halflings-regular.woff differ
diff --git a/trunk/src/AppBundle/Resources/public/fonts/glyphicons-halflings-regular.woff2 b/trunk/src/AppBundle/Resources/public/fonts/glyphicons-halflings-regular.woff2
new file mode 100644
index 00000000..64539b54
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/fonts/glyphicons-halflings-regular.woff2 differ
diff --git a/trunk/src/AppBundle/Resources/public/fonts/trips.eot b/trunk/src/AppBundle/Resources/public/fonts/trips.eot
new file mode 100644
index 00000000..1a047088
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/fonts/trips.eot differ
diff --git a/trunk/src/AppBundle/Resources/public/fonts/trips.svg b/trunk/src/AppBundle/Resources/public/fonts/trips.svg
new file mode 100644
index 00000000..0cc25cbe
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/fonts/trips.svg
@@ -0,0 +1,477 @@
+
+
+
+Generated by Fontastic.me
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/trunk/src/AppBundle/Resources/public/fonts/trips.ttf b/trunk/src/AppBundle/Resources/public/fonts/trips.ttf
new file mode 100644
index 00000000..26843a51
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/fonts/trips.ttf differ
diff --git a/trunk/src/AppBundle/Resources/public/fonts/trips.woff b/trunk/src/AppBundle/Resources/public/fonts/trips.woff
new file mode 100644
index 00000000..9553a729
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/fonts/trips.woff differ
diff --git a/trunk/src/AppBundle/Resources/public/images/STERN_Logo_Vektor.eps b/trunk/src/AppBundle/Resources/public/images/STERN_Logo_Vektor.eps
new file mode 100644
index 00000000..cd4a0069
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/STERN_Logo_Vektor.eps differ
diff --git a/trunk/src/AppBundle/Resources/public/images/android-icon-144x144.png b/trunk/src/AppBundle/Resources/public/images/android-icon-144x144.png
new file mode 100644
index 00000000..4e52e5a3
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/android-icon-144x144.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/android-icon-192x192.png b/trunk/src/AppBundle/Resources/public/images/android-icon-192x192.png
new file mode 100644
index 00000000..5e292523
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/android-icon-192x192.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/android-icon-36x36.png b/trunk/src/AppBundle/Resources/public/images/android-icon-36x36.png
new file mode 100644
index 00000000..c14a4caa
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/android-icon-36x36.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/android-icon-48x48.png b/trunk/src/AppBundle/Resources/public/images/android-icon-48x48.png
new file mode 100644
index 00000000..293ffd04
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/android-icon-48x48.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/android-icon-72x72.png b/trunk/src/AppBundle/Resources/public/images/android-icon-72x72.png
new file mode 100644
index 00000000..5ae6be41
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/android-icon-72x72.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/android-icon-96x96.png b/trunk/src/AppBundle/Resources/public/images/android-icon-96x96.png
new file mode 100644
index 00000000..e997c62c
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/android-icon-96x96.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/apple-icon-114x114.png b/trunk/src/AppBundle/Resources/public/images/apple-icon-114x114.png
new file mode 100644
index 00000000..35c621eb
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/apple-icon-114x114.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/apple-icon-120x120.png b/trunk/src/AppBundle/Resources/public/images/apple-icon-120x120.png
new file mode 100644
index 00000000..18f64d7d
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/apple-icon-120x120.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/apple-icon-144x144.png b/trunk/src/AppBundle/Resources/public/images/apple-icon-144x144.png
new file mode 100644
index 00000000..4e52e5a3
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/apple-icon-144x144.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/apple-icon-152x152.png b/trunk/src/AppBundle/Resources/public/images/apple-icon-152x152.png
new file mode 100644
index 00000000..31204703
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/apple-icon-152x152.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/apple-icon-180x180.png b/trunk/src/AppBundle/Resources/public/images/apple-icon-180x180.png
new file mode 100644
index 00000000..9b39cf76
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/apple-icon-180x180.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/apple-icon-57x57.png b/trunk/src/AppBundle/Resources/public/images/apple-icon-57x57.png
new file mode 100644
index 00000000..787808a9
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/apple-icon-57x57.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/apple-icon-60x60.png b/trunk/src/AppBundle/Resources/public/images/apple-icon-60x60.png
new file mode 100644
index 00000000..317f3c24
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/apple-icon-60x60.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/apple-icon-72x72.png b/trunk/src/AppBundle/Resources/public/images/apple-icon-72x72.png
new file mode 100644
index 00000000..5ae6be41
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/apple-icon-72x72.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/apple-icon-76x76.png b/trunk/src/AppBundle/Resources/public/images/apple-icon-76x76.png
new file mode 100644
index 00000000..5aa6d6d7
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/apple-icon-76x76.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/apple-icon-precomposed.png b/trunk/src/AppBundle/Resources/public/images/apple-icon-precomposed.png
new file mode 100644
index 00000000..0488ab64
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/apple-icon-precomposed.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/apple-icon.png b/trunk/src/AppBundle/Resources/public/images/apple-icon.png
new file mode 100644
index 00000000..0488ab64
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/apple-icon.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/bg-embedlng-m.png b/trunk/src/AppBundle/Resources/public/images/bg-embedlng-m.png
new file mode 100644
index 00000000..cd4e3f8f
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/bg-embedlng-m.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/browserconfig.xml b/trunk/src/AppBundle/Resources/public/images/browserconfig.xml
new file mode 100644
index 00000000..c5541482
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/images/browserconfig.xml
@@ -0,0 +1,2 @@
+
+
#ffffff
\ No newline at end of file
diff --git a/trunk/src/AppBundle/Resources/public/images/dummy.png b/trunk/src/AppBundle/Resources/public/images/dummy.png
new file mode 100644
index 00000000..62de185d
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/dummy.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/favicon-16x16.png b/trunk/src/AppBundle/Resources/public/images/favicon-16x16.png
new file mode 100644
index 00000000..efe4a6db
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/favicon-16x16.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/favicon-32x32.png b/trunk/src/AppBundle/Resources/public/images/favicon-32x32.png
new file mode 100644
index 00000000..f199170c
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/favicon-32x32.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/favicon-96x96.png b/trunk/src/AppBundle/Resources/public/images/favicon-96x96.png
new file mode 100644
index 00000000..e997c62c
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/favicon-96x96.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/favicon.ico b/trunk/src/AppBundle/Resources/public/images/favicon.ico
new file mode 100644
index 00000000..66c46115
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/favicon.ico differ
diff --git a/trunk/src/AppBundle/Resources/public/images/flagge-israel.jpg b/trunk/src/AppBundle/Resources/public/images/flagge-israel.jpg
new file mode 100644
index 00000000..19dc906c
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/flagge-israel.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/header-bg.png b/trunk/src/AppBundle/Resources/public/images/header-bg.png
new file mode 100644
index 00000000..460e8658
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/header-bg.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/jordanien.jpg b/trunk/src/AppBundle/Resources/public/images/jordanien.jpg
new file mode 100644
index 00000000..ffe74554
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/jordanien.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/loader.gif b/trunk/src/AppBundle/Resources/public/images/loader.gif
new file mode 100644
index 00000000..e15a87b5
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/loader.gif differ
diff --git a/trunk/src/AppBundle/Resources/public/images/logo-embed-m.png b/trunk/src/AppBundle/Resources/public/images/logo-embed-m.png
new file mode 100644
index 00000000..c41431e5
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/logo-embed-m.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/logo.png b/trunk/src/AppBundle/Resources/public/images/logo.png
new file mode 100644
index 00000000..64c38884
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/logo.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/logos/DB.png b/trunk/src/AppBundle/Resources/public/images/logos/DB.png
new file mode 100644
index 00000000..b9193584
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/logos/DB.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/logos/fairliners.png b/trunk/src/AppBundle/Resources/public/images/logos/fairliners.png
new file mode 100644
index 00000000..a4046f37
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/logos/fairliners.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/logos/fairliners_g.png b/trunk/src/AppBundle/Resources/public/images/logos/fairliners_g.png
new file mode 100644
index 00000000..876fc0f2
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/logos/fairliners_g.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/logos/iata.png b/trunk/src/AppBundle/Resources/public/images/logos/iata.png
new file mode 100644
index 00000000..f840efd1
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/logos/iata.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/logos/logo-jugendreisen-spezialist.png b/trunk/src/AppBundle/Resources/public/images/logos/logo-jugendreisen-spezialist.png
new file mode 100644
index 00000000..dc8b1585
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/logos/logo-jugendreisen-spezialist.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/logos/reisebuero.png b/trunk/src/AppBundle/Resources/public/images/logos/reisebuero.png
new file mode 100644
index 00000000..948cb777
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/logos/reisebuero.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/logos/rundv.png b/trunk/src/AppBundle/Resources/public/images/logos/rundv.png
new file mode 100644
index 00000000..dcecc80d
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/logos/rundv.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/logos/ssl 2.png b/trunk/src/AppBundle/Resources/public/images/logos/ssl 2.png
new file mode 100644
index 00000000..6eb61281
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/logos/ssl 2.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/logos/ssl.png b/trunk/src/AppBundle/Resources/public/images/logos/ssl.png
new file mode 100644
index 00000000..47b6ad4a
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/logos/ssl.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/logos/stardeal.jpg b/trunk/src/AppBundle/Resources/public/images/logos/stardeal.jpg
new file mode 100644
index 00000000..f27d221d
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/logos/stardeal.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/logos/stern-tours.png b/trunk/src/AppBundle/Resources/public/images/logos/stern-tours.png
new file mode 100644
index 00000000..5a8a457d
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/logos/stern-tours.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/logos/sunstar.png b/trunk/src/AppBundle/Resources/public/images/logos/sunstar.png
new file mode 100644
index 00000000..38fb4c9b
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/logos/sunstar.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/logos/thawte.png b/trunk/src/AppBundle/Resources/public/images/logos/thawte.png
new file mode 100644
index 00000000..f15b6317
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/logos/thawte.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/manifest.json b/trunk/src/AppBundle/Resources/public/images/manifest.json
new file mode 100644
index 00000000..013d4a6a
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/images/manifest.json
@@ -0,0 +1,41 @@
+{
+ "name": "App",
+ "icons": [
+ {
+ "src": "\/android-icon-36x36.png",
+ "sizes": "36x36",
+ "type": "image\/png",
+ "density": "0.75"
+ },
+ {
+ "src": "\/android-icon-48x48.png",
+ "sizes": "48x48",
+ "type": "image\/png",
+ "density": "1.0"
+ },
+ {
+ "src": "\/android-icon-72x72.png",
+ "sizes": "72x72",
+ "type": "image\/png",
+ "density": "1.5"
+ },
+ {
+ "src": "\/android-icon-96x96.png",
+ "sizes": "96x96",
+ "type": "image\/png",
+ "density": "2.0"
+ },
+ {
+ "src": "\/android-icon-144x144.png",
+ "sizes": "144x144",
+ "type": "image\/png",
+ "density": "3.0"
+ },
+ {
+ "src": "\/android-icon-192x192.png",
+ "sizes": "192x192",
+ "type": "image\/png",
+ "density": "4.0"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/trunk/src/AppBundle/Resources/public/images/marker.png b/trunk/src/AppBundle/Resources/public/images/marker.png
new file mode 100644
index 00000000..972c9faa
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/marker.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/menu.png b/trunk/src/AppBundle/Resources/public/images/menu.png
new file mode 100644
index 00000000..0d6431c2
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/menu.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/ms-icon-144x144.png b/trunk/src/AppBundle/Resources/public/images/ms-icon-144x144.png
new file mode 100644
index 00000000..4e52e5a3
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/ms-icon-144x144.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/ms-icon-150x150.png b/trunk/src/AppBundle/Resources/public/images/ms-icon-150x150.png
new file mode 100644
index 00000000..f79d6058
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/ms-icon-150x150.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/ms-icon-310x310.png b/trunk/src/AppBundle/Resources/public/images/ms-icon-310x310.png
new file mode 100644
index 00000000..d64e2ad9
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/ms-icon-310x310.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/ms-icon-70x70.png b/trunk/src/AppBundle/Resources/public/images/ms-icon-70x70.png
new file mode 100644
index 00000000..6f1eae06
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/ms-icon-70x70.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/page-header.jpg b/trunk/src/AppBundle/Resources/public/images/page-header.jpg
new file mode 100644
index 00000000..d132601e
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/page-header.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/page1_img1.jpg b/trunk/src/AppBundle/Resources/public/images/page1_img1.jpg
new file mode 100644
index 00000000..c8a147e5
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/page1_img1.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/page1_img2.jpg b/trunk/src/AppBundle/Resources/public/images/page1_img2.jpg
new file mode 100644
index 00000000..54f4bf41
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/page1_img2.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/page1_img3.jpg b/trunk/src/AppBundle/Resources/public/images/page1_img3.jpg
new file mode 100644
index 00000000..30365967
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/page1_img3.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/page1_img4.jpg b/trunk/src/AppBundle/Resources/public/images/page1_img4.jpg
new file mode 100644
index 00000000..2de5f94f
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/page1_img4.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/page2_img2.jpg b/trunk/src/AppBundle/Resources/public/images/page2_img2.jpg
new file mode 100644
index 00000000..47efd362
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/page2_img2.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/payment.png b/trunk/src/AppBundle/Resources/public/images/payment.png
new file mode 100644
index 00000000..02fc4f32
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/payment.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/progress.png b/trunk/src/AppBundle/Resources/public/images/progress.png
new file mode 100644
index 00000000..f28eb912
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/progress.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/range_01.png b/trunk/src/AppBundle/Resources/public/images/range_01.png
new file mode 100644
index 00000000..adcd27cb
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/range_01.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/range_02.png b/trunk/src/AppBundle/Resources/public/images/range_02.png
new file mode 100644
index 00000000..a991dcd7
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/range_02.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/range_03.png b/trunk/src/AppBundle/Resources/public/images/range_03.png
new file mode 100644
index 00000000..582559b2
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/range_03.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/rating-5-cent-m.png b/trunk/src/AppBundle/Resources/public/images/rating-5-cent-m.png
new file mode 100644
index 00000000..96dec1b4
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/rating-5-cent-m.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/siegel_sehr_gut_SternTours.jpg b/trunk/src/AppBundle/Resources/public/images/siegel_sehr_gut_SternTours.jpg
new file mode 100644
index 00000000..c17668a6
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/siegel_sehr_gut_SternTours.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/star-mini.png b/trunk/src/AppBundle/Resources/public/images/star-mini.png
new file mode 100644
index 00000000..d0e13df1
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/star-mini.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/successful.png b/trunk/src/AppBundle/Resources/public/images/successful.png
new file mode 100644
index 00000000..65ce51e3
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/successful.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/travel/best-western-plus-hotel-baltic-hills-usedom-fotolia-strand.jpg.jpg b/trunk/src/AppBundle/Resources/public/images/travel/best-western-plus-hotel-baltic-hills-usedom-fotolia-strand.jpg.jpg
new file mode 100644
index 00000000..9589ac98
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/travel/best-western-plus-hotel-baltic-hills-usedom-fotolia-strand.jpg.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/travel/header-top-image.jpg b/trunk/src/AppBundle/Resources/public/images/travel/header-top-image.jpg
new file mode 100644
index 00000000..e855ba8b
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/travel/header-top-image.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/travel/header-top-image1.jpg b/trunk/src/AppBundle/Resources/public/images/travel/header-top-image1.jpg
new file mode 100644
index 00000000..9895f49c
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/travel/header-top-image1.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/travel/header-top-image2.jpg b/trunk/src/AppBundle/Resources/public/images/travel/header-top-image2.jpg
new file mode 100644
index 00000000..27f31789
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/travel/header-top-image2.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/travel/header-top-image3.jpg b/trunk/src/AppBundle/Resources/public/images/travel/header-top-image3.jpg
new file mode 100644
index 00000000..b656671d
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/travel/header-top-image3.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/travel/header_bg.jpg b/trunk/src/AppBundle/Resources/public/images/travel/header_bg.jpg
new file mode 100644
index 00000000..3da8c17b
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/travel/header_bg.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/travel/header_bg.png b/trunk/src/AppBundle/Resources/public/images/travel/header_bg.png
new file mode 100644
index 00000000..ebff8a73
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/travel/header_bg.png differ
diff --git a/trunk/src/AppBundle/Resources/public/images/travel/hurghada_sandstrand_sonnenschirme.jpg b/trunk/src/AppBundle/Resources/public/images/travel/hurghada_sandstrand_sonnenschirme.jpg
new file mode 100644
index 00000000..b7cf2f7f
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/travel/hurghada_sandstrand_sonnenschirme.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/travel/israelreisen_start31.jpg b/trunk/src/AppBundle/Resources/public/images/travel/israelreisen_start31.jpg
new file mode 100644
index 00000000..fd60d100
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/travel/israelreisen_start31.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/travel/item1.jpg b/trunk/src/AppBundle/Resources/public/images/travel/item1.jpg
new file mode 100644
index 00000000..9a7f9c1a
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/travel/item1.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/travel/item2.jpg b/trunk/src/AppBundle/Resources/public/images/travel/item2.jpg
new file mode 100644
index 00000000..3606fcfa
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/travel/item2.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/travel/item3.jpg b/trunk/src/AppBundle/Resources/public/images/travel/item3.jpg
new file mode 100644
index 00000000..74c5971c
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/travel/item3.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/travel/item4.jpg b/trunk/src/AppBundle/Resources/public/images/travel/item4.jpg
new file mode 100644
index 00000000..9a5d1883
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/travel/item4.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/travel/item5.jpg b/trunk/src/AppBundle/Resources/public/images/travel/item5.jpg
new file mode 100644
index 00000000..98148ebb
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/travel/item5.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/travel/jugendreisen-hotel-7.jpg b/trunk/src/AppBundle/Resources/public/images/travel/jugendreisen-hotel-7.jpg
new file mode 100644
index 00000000..2933495d
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/travel/jugendreisen-hotel-7.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/travel/slider8.jpg b/trunk/src/AppBundle/Resources/public/images/travel/slider8.jpg
new file mode 100644
index 00000000..09aa500d
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/travel/slider8.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/images/wlogo.png b/trunk/src/AppBundle/Resources/public/images/wlogo.png
new file mode 100644
index 00000000..bb18b784
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/images/wlogo.png differ
diff --git a/trunk/src/AppBundle/Resources/public/js/bootstrap-3.3.7.js b/trunk/src/AppBundle/Resources/public/js/bootstrap-3.3.7.js
new file mode 100644
index 00000000..8a2e99a5
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/js/bootstrap-3.3.7.js
@@ -0,0 +1,2377 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under the MIT license
+ */
+
+if (typeof jQuery === 'undefined') {
+ throw new Error('Bootstrap\'s JavaScript requires jQuery')
+}
+
++function ($) {
+ 'use strict';
+ var version = $.fn.jquery.split(' ')[0].split('.')
+ if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
+ throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
+ }
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: transition.js v3.3.7
+ * http://getbootstrap.com/javascript/#transitions
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
+ // ============================================================
+
+ function transitionEnd() {
+ var el = document.createElement('bootstrap')
+
+ var transEndEventNames = {
+ WebkitTransition : 'webkitTransitionEnd',
+ MozTransition : 'transitionend',
+ OTransition : 'oTransitionEnd otransitionend',
+ transition : 'transitionend'
+ }
+
+ for (var name in transEndEventNames) {
+ if (el.style[name] !== undefined) {
+ return { end: transEndEventNames[name] }
+ }
+ }
+
+ return false // explicit for ie8 ( ._.)
+ }
+
+ // http://blog.alexmaccaw.com/css-transitions
+ $.fn.emulateTransitionEnd = function (duration) {
+ var called = false
+ var $el = this
+ $(this).one('bsTransitionEnd', function () { called = true })
+ var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
+ setTimeout(callback, duration)
+ return this
+ }
+
+ $(function () {
+ $.support.transition = transitionEnd()
+
+ if (!$.support.transition) return
+
+ $.event.special.bsTransitionEnd = {
+ bindType: $.support.transition.end,
+ delegateType: $.support.transition.end,
+ handle: function (e) {
+ if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
+ }
+ }
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: alert.js v3.3.7
+ * http://getbootstrap.com/javascript/#alerts
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // ALERT CLASS DEFINITION
+ // ======================
+
+ var dismiss = '[data-dismiss="alert"]'
+ var Alert = function (el) {
+ $(el).on('click', dismiss, this.close)
+ }
+
+ Alert.VERSION = '3.3.7'
+
+ Alert.TRANSITION_DURATION = 150
+
+ Alert.prototype.close = function (e) {
+ var $this = $(this)
+ var selector = $this.attr('data-target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ var $parent = $(selector === '#' ? [] : selector)
+
+ if (e) e.preventDefault()
+
+ if (!$parent.length) {
+ $parent = $this.closest('.alert')
+ }
+
+ $parent.trigger(e = $.Event('close.bs.alert'))
+
+ if (e.isDefaultPrevented()) return
+
+ $parent.removeClass('in')
+
+ function removeElement() {
+ // detach from parent, fire event then clean up data
+ $parent.detach().trigger('closed.bs.alert').remove()
+ }
+
+ $.support.transition && $parent.hasClass('fade') ?
+ $parent
+ .one('bsTransitionEnd', removeElement)
+ .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
+ removeElement()
+ }
+
+
+ // ALERT PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.alert')
+
+ if (!data) $this.data('bs.alert', (data = new Alert(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ var old = $.fn.alert
+
+ $.fn.alert = Plugin
+ $.fn.alert.Constructor = Alert
+
+
+ // ALERT NO CONFLICT
+ // =================
+
+ $.fn.alert.noConflict = function () {
+ $.fn.alert = old
+ return this
+ }
+
+
+ // ALERT DATA-API
+ // ==============
+
+ $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: button.js v3.3.7
+ * http://getbootstrap.com/javascript/#buttons
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // BUTTON PUBLIC CLASS DEFINITION
+ // ==============================
+
+ var Button = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Button.DEFAULTS, options)
+ this.isLoading = false
+ }
+
+ Button.VERSION = '3.3.7'
+
+ Button.DEFAULTS = {
+ loadingText: 'loading...'
+ }
+
+ Button.prototype.setState = function (state) {
+ var d = 'disabled'
+ var $el = this.$element
+ var val = $el.is('input') ? 'val' : 'html'
+ var data = $el.data()
+
+ state += 'Text'
+
+ if (data.resetText == null) $el.data('resetText', $el[val]())
+
+ // push to event loop to allow forms to submit
+ setTimeout($.proxy(function () {
+ $el[val](data[state] == null ? this.options[state] : data[state])
+
+ if (state == 'loadingText') {
+ this.isLoading = true
+ $el.addClass(d).attr(d, d).prop(d, true)
+ } else if (this.isLoading) {
+ this.isLoading = false
+ $el.removeClass(d).removeAttr(d).prop(d, false)
+ }
+ }, this), 0)
+ }
+
+ Button.prototype.toggle = function () {
+ var changed = true
+ var $parent = this.$element.closest('[data-toggle="buttons"]')
+
+ if ($parent.length) {
+ var $input = this.$element.find('input')
+ if ($input.prop('type') == 'radio') {
+ if ($input.prop('checked')) changed = false
+ $parent.find('.active').removeClass('active')
+ this.$element.addClass('active')
+ } else if ($input.prop('type') == 'checkbox') {
+ if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
+ this.$element.toggleClass('active')
+ }
+ $input.prop('checked', this.$element.hasClass('active'))
+ if (changed) $input.trigger('change')
+ } else {
+ this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
+ this.$element.toggleClass('active')
+ }
+ }
+
+
+ // BUTTON PLUGIN DEFINITION
+ // ========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.button')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.button', (data = new Button(this, options)))
+
+ if (option == 'toggle') data.toggle()
+ else if (option) data.setState(option)
+ })
+ }
+
+ var old = $.fn.button
+
+ $.fn.button = Plugin
+ $.fn.button.Constructor = Button
+
+
+ // BUTTON NO CONFLICT
+ // ==================
+
+ $.fn.button.noConflict = function () {
+ $.fn.button = old
+ return this
+ }
+
+
+ // BUTTON DATA-API
+ // ===============
+
+ $(document)
+ .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+ var $btn = $(e.target).closest('.btn')
+ Plugin.call($btn, 'toggle')
+ if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
+ // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
+ e.preventDefault()
+ // The target component still receive the focus
+ if ($btn.is('input,button')) $btn.trigger('focus')
+ else $btn.find('input:visible,button:visible').first().trigger('focus')
+ }
+ })
+ .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+ $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: carousel.js v3.3.7
+ * http://getbootstrap.com/javascript/#carousel
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CAROUSEL CLASS DEFINITION
+ // =========================
+
+ var Carousel = function (element, options) {
+ this.$element = $(element)
+ this.$indicators = this.$element.find('.carousel-indicators')
+ this.options = options
+ this.paused = null
+ this.sliding = null
+ this.interval = null
+ this.$active = null
+ this.$items = null
+
+ this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
+
+ this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
+ .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
+ .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
+ }
+
+ Carousel.VERSION = '3.3.7'
+
+ Carousel.TRANSITION_DURATION = 600
+
+ Carousel.DEFAULTS = {
+ interval: 5000,
+ pause: 'hover',
+ wrap: true,
+ keyboard: true
+ }
+
+ Carousel.prototype.keydown = function (e) {
+ if (/input|textarea/i.test(e.target.tagName)) return
+ switch (e.which) {
+ case 37: this.prev(); break
+ case 39: this.next(); break
+ default: return
+ }
+
+ e.preventDefault()
+ }
+
+ Carousel.prototype.cycle = function (e) {
+ e || (this.paused = false)
+
+ this.interval && clearInterval(this.interval)
+
+ this.options.interval
+ && !this.paused
+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
+
+ return this
+ }
+
+ Carousel.prototype.getItemIndex = function (item) {
+ this.$items = item.parent().children('.item')
+ return this.$items.index(item || this.$active)
+ }
+
+ Carousel.prototype.getItemForDirection = function (direction, active) {
+ var activeIndex = this.getItemIndex(active)
+ var willWrap = (direction == 'prev' && activeIndex === 0)
+ || (direction == 'next' && activeIndex == (this.$items.length - 1))
+ if (willWrap && !this.options.wrap) return active
+ var delta = direction == 'prev' ? -1 : 1
+ var itemIndex = (activeIndex + delta) % this.$items.length
+ return this.$items.eq(itemIndex)
+ }
+
+ Carousel.prototype.to = function (pos) {
+ var that = this
+ var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
+
+ if (pos > (this.$items.length - 1) || pos < 0) return
+
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
+ if (activeIndex == pos) return this.pause().cycle()
+
+ return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
+ }
+
+ Carousel.prototype.pause = function (e) {
+ e || (this.paused = true)
+
+ if (this.$element.find('.next, .prev').length && $.support.transition) {
+ this.$element.trigger($.support.transition.end)
+ this.cycle(true)
+ }
+
+ this.interval = clearInterval(this.interval)
+
+ return this
+ }
+
+ Carousel.prototype.next = function () {
+ if (this.sliding) return
+ return this.slide('next')
+ }
+
+ Carousel.prototype.prev = function () {
+ if (this.sliding) return
+ return this.slide('prev')
+ }
+
+ Carousel.prototype.slide = function (type, next) {
+ var $active = this.$element.find('.item.active')
+ var $next = next || this.getItemForDirection(type, $active)
+ var isCycling = this.interval
+ var direction = type == 'next' ? 'left' : 'right'
+ var that = this
+
+ if ($next.hasClass('active')) return (this.sliding = false)
+
+ var relatedTarget = $next[0]
+ var slideEvent = $.Event('slide.bs.carousel', {
+ relatedTarget: relatedTarget,
+ direction: direction
+ })
+ this.$element.trigger(slideEvent)
+ if (slideEvent.isDefaultPrevented()) return
+
+ this.sliding = true
+
+ isCycling && this.pause()
+
+ if (this.$indicators.length) {
+ this.$indicators.find('.active').removeClass('active')
+ var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
+ $nextIndicator && $nextIndicator.addClass('active')
+ }
+
+ var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
+ if ($.support.transition && this.$element.hasClass('slide')) {
+ $next.addClass(type)
+ $next[0].offsetWidth // force reflow
+ $active.addClass(direction)
+ $next.addClass(direction)
+ $active
+ .one('bsTransitionEnd', function () {
+ $next.removeClass([type, direction].join(' ')).addClass('active')
+ $active.removeClass(['active', direction].join(' '))
+ that.sliding = false
+ setTimeout(function () {
+ that.$element.trigger(slidEvent)
+ }, 0)
+ })
+ .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
+ } else {
+ $active.removeClass('active')
+ $next.addClass('active')
+ this.sliding = false
+ this.$element.trigger(slidEvent)
+ }
+
+ isCycling && this.cycle()
+
+ return this
+ }
+
+
+ // CAROUSEL PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.carousel')
+ var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
+ var action = typeof option == 'string' ? option : options.slide
+
+ if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
+ if (typeof option == 'number') data.to(option)
+ else if (action) data[action]()
+ else if (options.interval) data.pause().cycle()
+ })
+ }
+
+ var old = $.fn.carousel
+
+ $.fn.carousel = Plugin
+ $.fn.carousel.Constructor = Carousel
+
+
+ // CAROUSEL NO CONFLICT
+ // ====================
+
+ $.fn.carousel.noConflict = function () {
+ $.fn.carousel = old
+ return this
+ }
+
+
+ // CAROUSEL DATA-API
+ // =================
+
+ var clickHandler = function (e) {
+ var href
+ var $this = $(this)
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
+ if (!$target.hasClass('carousel')) return
+ var options = $.extend({}, $target.data(), $this.data())
+ var slideIndex = $this.attr('data-slide-to')
+ if (slideIndex) options.interval = false
+
+ Plugin.call($target, options)
+
+ if (slideIndex) {
+ $target.data('bs.carousel').to(slideIndex)
+ }
+
+ e.preventDefault()
+ }
+
+ $(document)
+ .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
+ .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
+
+ $(window).on('load', function () {
+ $('[data-ride="carousel"]').each(function () {
+ var $carousel = $(this)
+ Plugin.call($carousel, $carousel.data())
+ })
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: collapse.js v3.3.7
+ * http://getbootstrap.com/javascript/#collapse
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+/* jshint latedef: false */
+
++function ($) {
+ 'use strict';
+
+ // COLLAPSE PUBLIC CLASS DEFINITION
+ // ================================
+
+ var Collapse = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Collapse.DEFAULTS, options)
+ this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
+ '[data-toggle="collapse"][data-target="#' + element.id + '"]')
+ this.transitioning = null
+
+ if (this.options.parent) {
+ this.$parent = this.getParent()
+ } else {
+ this.addAriaAndCollapsedClass(this.$element, this.$trigger)
+ }
+
+ if (this.options.toggle) this.toggle()
+ }
+
+ Collapse.VERSION = '3.3.7'
+
+ Collapse.TRANSITION_DURATION = 350
+
+ Collapse.DEFAULTS = {
+ toggle: true
+ }
+
+ Collapse.prototype.dimension = function () {
+ var hasWidth = this.$element.hasClass('width')
+ return hasWidth ? 'width' : 'height'
+ }
+
+ Collapse.prototype.show = function () {
+ if (this.transitioning || this.$element.hasClass('in')) return
+
+ var activesData
+ var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
+
+ if (actives && actives.length) {
+ activesData = actives.data('bs.collapse')
+ if (activesData && activesData.transitioning) return
+ }
+
+ var startEvent = $.Event('show.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ if (actives && actives.length) {
+ Plugin.call(actives, 'hide')
+ activesData || actives.data('bs.collapse', null)
+ }
+
+ var dimension = this.dimension()
+
+ this.$element
+ .removeClass('collapse')
+ .addClass('collapsing')[dimension](0)
+ .attr('aria-expanded', true)
+
+ this.$trigger
+ .removeClass('collapsed')
+ .attr('aria-expanded', true)
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.$element
+ .removeClass('collapsing')
+ .addClass('collapse in')[dimension]('')
+ this.transitioning = 0
+ this.$element
+ .trigger('shown.bs.collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ var scrollSize = $.camelCase(['scroll', dimension].join('-'))
+
+ this.$element
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
+ }
+
+ Collapse.prototype.hide = function () {
+ if (this.transitioning || !this.$element.hasClass('in')) return
+
+ var startEvent = $.Event('hide.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ var dimension = this.dimension()
+
+ this.$element[dimension](this.$element[dimension]())[0].offsetHeight
+
+ this.$element
+ .addClass('collapsing')
+ .removeClass('collapse in')
+ .attr('aria-expanded', false)
+
+ this.$trigger
+ .addClass('collapsed')
+ .attr('aria-expanded', false)
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.transitioning = 0
+ this.$element
+ .removeClass('collapsing')
+ .addClass('collapse')
+ .trigger('hidden.bs.collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ this.$element
+ [dimension](0)
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
+ }
+
+ Collapse.prototype.toggle = function () {
+ this[this.$element.hasClass('in') ? 'hide' : 'show']()
+ }
+
+ Collapse.prototype.getParent = function () {
+ return $(this.options.parent)
+ .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
+ .each($.proxy(function (i, element) {
+ var $element = $(element)
+ this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
+ }, this))
+ .end()
+ }
+
+ Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
+ var isOpen = $element.hasClass('in')
+
+ $element.attr('aria-expanded', isOpen)
+ $trigger
+ .toggleClass('collapsed', !isOpen)
+ .attr('aria-expanded', isOpen)
+ }
+
+ function getTargetFromTrigger($trigger) {
+ var href
+ var target = $trigger.attr('data-target')
+ || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
+
+ return $(target)
+ }
+
+
+ // COLLAPSE PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.collapse')
+ var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
+ if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.collapse
+
+ $.fn.collapse = Plugin
+ $.fn.collapse.Constructor = Collapse
+
+
+ // COLLAPSE NO CONFLICT
+ // ====================
+
+ $.fn.collapse.noConflict = function () {
+ $.fn.collapse = old
+ return this
+ }
+
+
+ // COLLAPSE DATA-API
+ // =================
+
+ $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
+ var $this = $(this)
+
+ if (!$this.attr('data-target')) e.preventDefault()
+
+ var $target = getTargetFromTrigger($this)
+ var data = $target.data('bs.collapse')
+ var option = data ? 'toggle' : $this.data()
+
+ Plugin.call($target, option)
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: dropdown.js v3.3.7
+ * http://getbootstrap.com/javascript/#dropdowns
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // DROPDOWN CLASS DEFINITION
+ // =========================
+
+ var backdrop = '.dropdown-backdrop'
+ var toggle = '[data-toggle="dropdown"]'
+ var Dropdown = function (element) {
+ $(element).on('click.bs.dropdown', this.toggle)
+ }
+
+ Dropdown.VERSION = '3.3.7'
+
+ function getParent($this) {
+ var selector = $this.attr('data-target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ var $parent = selector && $(selector)
+
+ return $parent && $parent.length ? $parent : $this.parent()
+ }
+
+ function clearMenus(e) {
+ if (e && e.which === 3) return
+ $(backdrop).remove()
+ $(toggle).each(function () {
+ var $this = $(this)
+ var $parent = getParent($this)
+ var relatedTarget = { relatedTarget: this }
+
+ if (!$parent.hasClass('open')) return
+
+ if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
+
+ $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
+
+ if (e.isDefaultPrevented()) return
+
+ $this.attr('aria-expanded', 'false')
+ $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
+ })
+ }
+
+ Dropdown.prototype.toggle = function (e) {
+ var $this = $(this)
+
+ if ($this.is('.disabled, :disabled')) return
+
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
+
+ clearMenus()
+
+ if (!isActive) {
+ if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
+ // if mobile we use a backdrop because click events don't delegate
+ $(document.createElement('div'))
+ .addClass('dropdown-backdrop')
+ .insertAfter($(this))
+ .on('click', clearMenus)
+ }
+
+ var relatedTarget = { relatedTarget: this }
+ $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
+
+ if (e.isDefaultPrevented()) return
+
+ $this
+ .trigger('focus')
+ .attr('aria-expanded', 'true')
+
+ $parent
+ .toggleClass('open')
+ .trigger($.Event('shown.bs.dropdown', relatedTarget))
+ }
+
+ return false
+ }
+
+ Dropdown.prototype.keydown = function (e) {
+ if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
+
+ var $this = $(this)
+
+ e.preventDefault()
+ e.stopPropagation()
+
+ if ($this.is('.disabled, :disabled')) return
+
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
+
+ if (!isActive && e.which != 27 || isActive && e.which == 27) {
+ if (e.which == 27) $parent.find(toggle).trigger('focus')
+ return $this.trigger('click')
+ }
+
+ var desc = ' li:not(.disabled):visible a'
+ var $items = $parent.find('.dropdown-menu' + desc)
+
+ if (!$items.length) return
+
+ var index = $items.index(e.target)
+
+ if (e.which == 38 && index > 0) index-- // up
+ if (e.which == 40 && index < $items.length - 1) index++ // down
+ if (!~index) index = 0
+
+ $items.eq(index).trigger('focus')
+ }
+
+
+ // DROPDOWN PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.dropdown')
+
+ if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ var old = $.fn.dropdown
+
+ $.fn.dropdown = Plugin
+ $.fn.dropdown.Constructor = Dropdown
+
+
+ // DROPDOWN NO CONFLICT
+ // ====================
+
+ $.fn.dropdown.noConflict = function () {
+ $.fn.dropdown = old
+ return this
+ }
+
+
+ // APPLY TO STANDARD DROPDOWN ELEMENTS
+ // ===================================
+
+ $(document)
+ .on('click.bs.dropdown.data-api', clearMenus)
+ .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
+ .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
+ .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
+ .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: modal.js v3.3.7
+ * http://getbootstrap.com/javascript/#modals
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // MODAL CLASS DEFINITION
+ // ======================
+
+ var Modal = function (element, options) {
+ this.options = options
+ this.$body = $(document.body)
+ this.$element = $(element)
+ this.$dialog = this.$element.find('.modal-dialog')
+ this.$backdrop = null
+ this.isShown = null
+ this.originalBodyPad = null
+ this.scrollbarWidth = 0
+ this.ignoreBackdropClick = false
+
+ if (this.options.remote) {
+ this.$element
+ .find('.modal-content')
+ .load(this.options.remote, $.proxy(function () {
+ this.$element.trigger('loaded.bs.modal')
+ }, this))
+ }
+ }
+
+ Modal.VERSION = '3.3.7'
+
+ Modal.TRANSITION_DURATION = 300
+ Modal.BACKDROP_TRANSITION_DURATION = 150
+
+ Modal.DEFAULTS = {
+ backdrop: true,
+ keyboard: true,
+ show: true
+ }
+
+ Modal.prototype.toggle = function (_relatedTarget) {
+ return this.isShown ? this.hide() : this.show(_relatedTarget)
+ }
+
+ Modal.prototype.show = function (_relatedTarget) {
+ var that = this
+ var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
+
+ this.$element.trigger(e)
+
+ if (this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = true
+
+ this.checkScrollbar()
+ this.setScrollbar()
+ this.$body.addClass('modal-open')
+
+ this.escape()
+ this.resize()
+
+ this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
+
+ this.$dialog.on('mousedown.dismiss.bs.modal', function () {
+ that.$element.one('mouseup.dismiss.bs.modal', function (e) {
+ if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
+ })
+ })
+
+ this.backdrop(function () {
+ var transition = $.support.transition && that.$element.hasClass('fade')
+
+ if (!that.$element.parent().length) {
+ that.$element.appendTo(that.$body) // don't move modals dom position
+ }
+
+ that.$element
+ .show()
+ .scrollTop(0)
+
+ that.adjustDialog()
+
+ if (transition) {
+ that.$element[0].offsetWidth // force reflow
+ }
+
+ that.$element.addClass('in')
+
+ that.enforceFocus()
+
+ var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
+
+ transition ?
+ that.$dialog // wait for modal to slide in
+ .one('bsTransitionEnd', function () {
+ that.$element.trigger('focus').trigger(e)
+ })
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+ that.$element.trigger('focus').trigger(e)
+ })
+ }
+
+ Modal.prototype.hide = function (e) {
+ if (e) e.preventDefault()
+
+ e = $.Event('hide.bs.modal')
+
+ this.$element.trigger(e)
+
+ if (!this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = false
+
+ this.escape()
+ this.resize()
+
+ $(document).off('focusin.bs.modal')
+
+ this.$element
+ .removeClass('in')
+ .off('click.dismiss.bs.modal')
+ .off('mouseup.dismiss.bs.modal')
+
+ this.$dialog.off('mousedown.dismiss.bs.modal')
+
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$element
+ .one('bsTransitionEnd', $.proxy(this.hideModal, this))
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+ this.hideModal()
+ }
+
+ Modal.prototype.enforceFocus = function () {
+ $(document)
+ .off('focusin.bs.modal') // guard against infinite focus loop
+ .on('focusin.bs.modal', $.proxy(function (e) {
+ if (document !== e.target &&
+ this.$element[0] !== e.target &&
+ !this.$element.has(e.target).length) {
+ this.$element.trigger('focus')
+ }
+ }, this))
+ }
+
+ Modal.prototype.escape = function () {
+ if (this.isShown && this.options.keyboard) {
+ this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
+ e.which == 27 && this.hide()
+ }, this))
+ } else if (!this.isShown) {
+ this.$element.off('keydown.dismiss.bs.modal')
+ }
+ }
+
+ Modal.prototype.resize = function () {
+ if (this.isShown) {
+ $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
+ } else {
+ $(window).off('resize.bs.modal')
+ }
+ }
+
+ Modal.prototype.hideModal = function () {
+ var that = this
+ this.$element.hide()
+ this.backdrop(function () {
+ that.$body.removeClass('modal-open')
+ that.resetAdjustments()
+ that.resetScrollbar()
+ that.$element.trigger('hidden.bs.modal')
+ })
+ }
+
+ Modal.prototype.removeBackdrop = function () {
+ this.$backdrop && this.$backdrop.remove()
+ this.$backdrop = null
+ }
+
+ Modal.prototype.backdrop = function (callback) {
+ var that = this
+ var animate = this.$element.hasClass('fade') ? 'fade' : ''
+
+ if (this.isShown && this.options.backdrop) {
+ var doAnimate = $.support.transition && animate
+
+ this.$backdrop = $(document.createElement('div'))
+ .addClass('modal-backdrop ' + animate)
+ .appendTo(this.$body)
+
+ this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
+ if (this.ignoreBackdropClick) {
+ this.ignoreBackdropClick = false
+ return
+ }
+ if (e.target !== e.currentTarget) return
+ this.options.backdrop == 'static'
+ ? this.$element[0].focus()
+ : this.hide()
+ }, this))
+
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+ this.$backdrop.addClass('in')
+
+ if (!callback) return
+
+ doAnimate ?
+ this.$backdrop
+ .one('bsTransitionEnd', callback)
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+ callback()
+
+ } else if (!this.isShown && this.$backdrop) {
+ this.$backdrop.removeClass('in')
+
+ var callbackRemove = function () {
+ that.removeBackdrop()
+ callback && callback()
+ }
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$backdrop
+ .one('bsTransitionEnd', callbackRemove)
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+ callbackRemove()
+
+ } else if (callback) {
+ callback()
+ }
+ }
+
+ // these following methods are used to handle overflowing modals
+
+ Modal.prototype.handleUpdate = function () {
+ this.adjustDialog()
+ }
+
+ Modal.prototype.adjustDialog = function () {
+ var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
+
+ this.$element.css({
+ paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
+ paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
+ })
+ }
+
+ Modal.prototype.resetAdjustments = function () {
+ this.$element.css({
+ paddingLeft: '',
+ paddingRight: ''
+ })
+ }
+
+ Modal.prototype.checkScrollbar = function () {
+ var fullWindowWidth = window.innerWidth
+ if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
+ var documentElementRect = document.documentElement.getBoundingClientRect()
+ fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
+ }
+ this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
+ this.scrollbarWidth = this.measureScrollbar()
+ }
+
+ Modal.prototype.setScrollbar = function () {
+ var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
+ this.originalBodyPad = document.body.style.paddingRight || ''
+ if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
+ }
+
+ Modal.prototype.resetScrollbar = function () {
+ this.$body.css('padding-right', this.originalBodyPad)
+ }
+
+ Modal.prototype.measureScrollbar = function () { // thx walsh
+ var scrollDiv = document.createElement('div')
+ scrollDiv.className = 'modal-scrollbar-measure'
+ this.$body.append(scrollDiv)
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
+ this.$body[0].removeChild(scrollDiv)
+ return scrollbarWidth
+ }
+
+
+ // MODAL PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option, _relatedTarget) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.modal')
+ var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
+ if (typeof option == 'string') data[option](_relatedTarget)
+ else if (options.show) data.show(_relatedTarget)
+ })
+ }
+
+ var old = $.fn.modal
+
+ $.fn.modal = Plugin
+ $.fn.modal.Constructor = Modal
+
+
+ // MODAL NO CONFLICT
+ // =================
+
+ $.fn.modal.noConflict = function () {
+ $.fn.modal = old
+ return this
+ }
+
+
+ // MODAL DATA-API
+ // ==============
+
+ $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
+ var $this = $(this)
+ var href = $this.attr('href')
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
+ var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
+
+ if ($this.is('a')) e.preventDefault()
+
+ $target.one('show.bs.modal', function (showEvent) {
+ if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
+ $target.one('hidden.bs.modal', function () {
+ $this.is(':visible') && $this.trigger('focus')
+ })
+ })
+ Plugin.call($target, option, this)
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tooltip.js v3.3.7
+ * http://getbootstrap.com/javascript/#tooltip
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TOOLTIP PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Tooltip = function (element, options) {
+ this.type = null
+ this.options = null
+ this.enabled = null
+ this.timeout = null
+ this.hoverState = null
+ this.$element = null
+ this.inState = null
+
+ this.init('tooltip', element, options)
+ }
+
+ Tooltip.VERSION = '3.3.7'
+
+ Tooltip.TRANSITION_DURATION = 150
+
+ Tooltip.DEFAULTS = {
+ animation: true,
+ placement: 'top',
+ selector: false,
+ template: '
',
+ trigger: 'hover focus',
+ title: '',
+ delay: 0,
+ html: false,
+ container: false,
+ viewport: {
+ selector: 'body',
+ padding: 0
+ }
+ }
+
+ Tooltip.prototype.init = function (type, element, options) {
+ this.enabled = true
+ this.type = type
+ this.$element = $(element)
+ this.options = this.getOptions(options)
+ this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
+ this.inState = { click: false, hover: false, focus: false }
+
+ if (this.$element[0] instanceof document.constructor && !this.options.selector) {
+ throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
+ }
+
+ var triggers = this.options.trigger.split(' ')
+
+ for (var i = triggers.length; i--;) {
+ var trigger = triggers[i]
+
+ if (trigger == 'click') {
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
+ } else if (trigger != 'manual') {
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
+
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
+ }
+ }
+
+ this.options.selector ?
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
+ this.fixTitle()
+ }
+
+ Tooltip.prototype.getDefaults = function () {
+ return Tooltip.DEFAULTS
+ }
+
+ Tooltip.prototype.getOptions = function (options) {
+ options = $.extend({}, this.getDefaults(), this.$element.data(), options)
+
+ if (options.delay && typeof options.delay == 'number') {
+ options.delay = {
+ show: options.delay,
+ hide: options.delay
+ }
+ }
+
+ return options
+ }
+
+ Tooltip.prototype.getDelegateOptions = function () {
+ var options = {}
+ var defaults = this.getDefaults()
+
+ this._options && $.each(this._options, function (key, value) {
+ if (defaults[key] != value) options[key] = value
+ })
+
+ return options
+ }
+
+ Tooltip.prototype.enter = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget).data('bs.' + this.type)
+
+ if (!self) {
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+ $(obj.currentTarget).data('bs.' + this.type, self)
+ }
+
+ if (obj instanceof $.Event) {
+ self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
+ }
+
+ if (self.tip().hasClass('in') || self.hoverState == 'in') {
+ self.hoverState = 'in'
+ return
+ }
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'in'
+
+ if (!self.options.delay || !self.options.delay.show) return self.show()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'in') self.show()
+ }, self.options.delay.show)
+ }
+
+ Tooltip.prototype.isInStateTrue = function () {
+ for (var key in this.inState) {
+ if (this.inState[key]) return true
+ }
+
+ return false
+ }
+
+ Tooltip.prototype.leave = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget).data('bs.' + this.type)
+
+ if (!self) {
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+ $(obj.currentTarget).data('bs.' + this.type, self)
+ }
+
+ if (obj instanceof $.Event) {
+ self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
+ }
+
+ if (self.isInStateTrue()) return
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'out'
+
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'out') self.hide()
+ }, self.options.delay.hide)
+ }
+
+ Tooltip.prototype.show = function () {
+ var e = $.Event('show.bs.' + this.type)
+
+ if (this.hasContent() && this.enabled) {
+ this.$element.trigger(e)
+
+ var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
+ if (e.isDefaultPrevented() || !inDom) return
+ var that = this
+
+ var $tip = this.tip()
+
+ var tipId = this.getUID(this.type)
+
+ this.setContent()
+ $tip.attr('id', tipId)
+ this.$element.attr('aria-describedby', tipId)
+
+ if (this.options.animation) $tip.addClass('fade')
+
+ var placement = typeof this.options.placement == 'function' ?
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
+ this.options.placement
+
+ var autoToken = /\s?auto?\s?/i
+ var autoPlace = autoToken.test(placement)
+ if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
+
+ $tip
+ .detach()
+ .css({ top: 0, left: 0, display: 'block' })
+ .addClass(placement)
+ .data('bs.' + this.type, this)
+
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
+ this.$element.trigger('inserted.bs.' + this.type)
+
+ var pos = this.getPosition()
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (autoPlace) {
+ var orgPlacement = placement
+ var viewportDim = this.getPosition(this.$viewport)
+
+ placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
+ placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
+ placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
+ placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
+ placement
+
+ $tip
+ .removeClass(orgPlacement)
+ .addClass(placement)
+ }
+
+ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
+
+ this.applyPlacement(calculatedOffset, placement)
+
+ var complete = function () {
+ var prevHoverState = that.hoverState
+ that.$element.trigger('shown.bs.' + that.type)
+ that.hoverState = null
+
+ if (prevHoverState == 'out') that.leave(that)
+ }
+
+ $.support.transition && this.$tip.hasClass('fade') ?
+ $tip
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+ complete()
+ }
+ }
+
+ Tooltip.prototype.applyPlacement = function (offset, placement) {
+ var $tip = this.tip()
+ var width = $tip[0].offsetWidth
+ var height = $tip[0].offsetHeight
+
+ // manually read margins because getBoundingClientRect includes difference
+ var marginTop = parseInt($tip.css('margin-top'), 10)
+ var marginLeft = parseInt($tip.css('margin-left'), 10)
+
+ // we must check for NaN for ie 8/9
+ if (isNaN(marginTop)) marginTop = 0
+ if (isNaN(marginLeft)) marginLeft = 0
+
+ offset.top += marginTop
+ offset.left += marginLeft
+
+ // $.fn.offset doesn't round pixel values
+ // so we use setOffset directly with our own function B-0
+ $.offset.setOffset($tip[0], $.extend({
+ using: function (props) {
+ $tip.css({
+ top: Math.round(props.top),
+ left: Math.round(props.left)
+ })
+ }
+ }, offset), 0)
+
+ $tip.addClass('in')
+
+ // check to see if placing tip in new offset caused the tip to resize itself
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (placement == 'top' && actualHeight != height) {
+ offset.top = offset.top + height - actualHeight
+ }
+
+ var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
+
+ if (delta.left) offset.left += delta.left
+ else offset.top += delta.top
+
+ var isVertical = /top|bottom/.test(placement)
+ var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
+ var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
+
+ $tip.offset(offset)
+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
+ }
+
+ Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
+ this.arrow()
+ .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
+ .css(isVertical ? 'top' : 'left', '')
+ }
+
+ Tooltip.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+
+ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
+ $tip.removeClass('fade in top bottom left right')
+ }
+
+ Tooltip.prototype.hide = function (callback) {
+ var that = this
+ var $tip = $(this.$tip)
+ var e = $.Event('hide.bs.' + this.type)
+
+ function complete() {
+ if (that.hoverState != 'in') $tip.detach()
+ if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
+ that.$element
+ .removeAttr('aria-describedby')
+ .trigger('hidden.bs.' + that.type)
+ }
+ callback && callback()
+ }
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ $tip.removeClass('in')
+
+ $.support.transition && $tip.hasClass('fade') ?
+ $tip
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+ complete()
+
+ this.hoverState = null
+
+ return this
+ }
+
+ Tooltip.prototype.fixTitle = function () {
+ var $e = this.$element
+ if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
+ }
+ }
+
+ Tooltip.prototype.hasContent = function () {
+ return this.getTitle()
+ }
+
+ Tooltip.prototype.getPosition = function ($element) {
+ $element = $element || this.$element
+
+ var el = $element[0]
+ var isBody = el.tagName == 'BODY'
+
+ var elRect = el.getBoundingClientRect()
+ if (elRect.width == null) {
+ // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
+ elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
+ }
+ var isSvg = window.SVGElement && el instanceof window.SVGElement
+ // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
+ // See https://github.com/twbs/bootstrap/issues/20280
+ var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
+ var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
+ var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
+
+ return $.extend({}, elRect, scroll, outerDims, elOffset)
+ }
+
+ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
+
+ }
+
+ Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
+ var delta = { top: 0, left: 0 }
+ if (!this.$viewport) return delta
+
+ var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
+ var viewportDimensions = this.getPosition(this.$viewport)
+
+ if (/right|left/.test(placement)) {
+ var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
+ var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
+ if (topEdgeOffset < viewportDimensions.top) { // top overflow
+ delta.top = viewportDimensions.top - topEdgeOffset
+ } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
+ delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
+ }
+ } else {
+ var leftEdgeOffset = pos.left - viewportPadding
+ var rightEdgeOffset = pos.left + viewportPadding + actualWidth
+ if (leftEdgeOffset < viewportDimensions.left) { // left overflow
+ delta.left = viewportDimensions.left - leftEdgeOffset
+ } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
+ delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
+ }
+ }
+
+ return delta
+ }
+
+ Tooltip.prototype.getTitle = function () {
+ var title
+ var $e = this.$element
+ var o = this.options
+
+ title = $e.attr('data-original-title')
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
+
+ return title
+ }
+
+ Tooltip.prototype.getUID = function (prefix) {
+ do prefix += ~~(Math.random() * 1000000)
+ while (document.getElementById(prefix))
+ return prefix
+ }
+
+ Tooltip.prototype.tip = function () {
+ if (!this.$tip) {
+ this.$tip = $(this.options.template)
+ if (this.$tip.length != 1) {
+ throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
+ }
+ }
+ return this.$tip
+ }
+
+ Tooltip.prototype.arrow = function () {
+ return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
+ }
+
+ Tooltip.prototype.enable = function () {
+ this.enabled = true
+ }
+
+ Tooltip.prototype.disable = function () {
+ this.enabled = false
+ }
+
+ Tooltip.prototype.toggleEnabled = function () {
+ this.enabled = !this.enabled
+ }
+
+ Tooltip.prototype.toggle = function (e) {
+ var self = this
+ if (e) {
+ self = $(e.currentTarget).data('bs.' + this.type)
+ if (!self) {
+ self = new this.constructor(e.currentTarget, this.getDelegateOptions())
+ $(e.currentTarget).data('bs.' + this.type, self)
+ }
+ }
+
+ if (e) {
+ self.inState.click = !self.inState.click
+ if (self.isInStateTrue()) self.enter(self)
+ else self.leave(self)
+ } else {
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
+ }
+ }
+
+ Tooltip.prototype.destroy = function () {
+ var that = this
+ clearTimeout(this.timeout)
+ this.hide(function () {
+ that.$element.off('.' + that.type).removeData('bs.' + that.type)
+ if (that.$tip) {
+ that.$tip.detach()
+ }
+ that.$tip = null
+ that.$arrow = null
+ that.$viewport = null
+ that.$element = null
+ })
+ }
+
+
+ // TOOLTIP PLUGIN DEFINITION
+ // =========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tooltip')
+ var options = typeof option == 'object' && option
+
+ if (!data && /destroy|hide/.test(option)) return
+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.tooltip
+
+ $.fn.tooltip = Plugin
+ $.fn.tooltip.Constructor = Tooltip
+
+
+ // TOOLTIP NO CONFLICT
+ // ===================
+
+ $.fn.tooltip.noConflict = function () {
+ $.fn.tooltip = old
+ return this
+ }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: popover.js v3.3.7
+ * http://getbootstrap.com/javascript/#popovers
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // POPOVER PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Popover = function (element, options) {
+ this.init('popover', element, options)
+ }
+
+ if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
+
+ Popover.VERSION = '3.3.7'
+
+ Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
+ placement: 'right',
+ trigger: 'click',
+ content: '',
+ template: '
'
+ })
+
+
+ // NOTE: POPOVER EXTENDS tooltip.js
+ // ================================
+
+ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
+
+ Popover.prototype.constructor = Popover
+
+ Popover.prototype.getDefaults = function () {
+ return Popover.DEFAULTS
+ }
+
+ Popover.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+ var content = this.getContent()
+
+ $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
+ $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
+ this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
+ ](content)
+
+ $tip.removeClass('fade top bottom left right in')
+
+ // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
+ // this manually by checking the contents.
+ if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
+ }
+
+ Popover.prototype.hasContent = function () {
+ return this.getTitle() || this.getContent()
+ }
+
+ Popover.prototype.getContent = function () {
+ var $e = this.$element
+ var o = this.options
+
+ return $e.attr('data-content')
+ || (typeof o.content == 'function' ?
+ o.content.call($e[0]) :
+ o.content)
+ }
+
+ Popover.prototype.arrow = function () {
+ return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
+ }
+
+
+ // POPOVER PLUGIN DEFINITION
+ // =========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.popover')
+ var options = typeof option == 'object' && option
+
+ if (!data && /destroy|hide/.test(option)) return
+ if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.popover
+
+ $.fn.popover = Plugin
+ $.fn.popover.Constructor = Popover
+
+
+ // POPOVER NO CONFLICT
+ // ===================
+
+ $.fn.popover.noConflict = function () {
+ $.fn.popover = old
+ return this
+ }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: scrollspy.js v3.3.7
+ * http://getbootstrap.com/javascript/#scrollspy
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // SCROLLSPY CLASS DEFINITION
+ // ==========================
+
+ function ScrollSpy(element, options) {
+ this.$body = $(document.body)
+ this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
+ this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
+ this.selector = (this.options.target || '') + ' .nav li > a'
+ this.offsets = []
+ this.targets = []
+ this.activeTarget = null
+ this.scrollHeight = 0
+
+ this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
+ this.refresh()
+ this.process()
+ }
+
+ ScrollSpy.VERSION = '3.3.7'
+
+ ScrollSpy.DEFAULTS = {
+ offset: 10
+ }
+
+ ScrollSpy.prototype.getScrollHeight = function () {
+ return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
+ }
+
+ ScrollSpy.prototype.refresh = function () {
+ var that = this
+ var offsetMethod = 'offset'
+ var offsetBase = 0
+
+ this.offsets = []
+ this.targets = []
+ this.scrollHeight = this.getScrollHeight()
+
+ if (!$.isWindow(this.$scrollElement[0])) {
+ offsetMethod = 'position'
+ offsetBase = this.$scrollElement.scrollTop()
+ }
+
+ this.$body
+ .find(this.selector)
+ .map(function () {
+ var $el = $(this)
+ var href = $el.data('target') || $el.attr('href')
+ var $href = /^#./.test(href) && $(href)
+
+ return ($href
+ && $href.length
+ && $href.is(':visible')
+ && [[$href[offsetMethod]().top + offsetBase, href]]) || null
+ })
+ .sort(function (a, b) { return a[0] - b[0] })
+ .each(function () {
+ that.offsets.push(this[0])
+ that.targets.push(this[1])
+ })
+ }
+
+ ScrollSpy.prototype.process = function () {
+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
+ var scrollHeight = this.getScrollHeight()
+ var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
+ var offsets = this.offsets
+ var targets = this.targets
+ var activeTarget = this.activeTarget
+ var i
+
+ if (this.scrollHeight != scrollHeight) {
+ this.refresh()
+ }
+
+ if (scrollTop >= maxScroll) {
+ return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
+ }
+
+ if (activeTarget && scrollTop < offsets[0]) {
+ this.activeTarget = null
+ return this.clear()
+ }
+
+ for (i = offsets.length; i--;) {
+ activeTarget != targets[i]
+ && scrollTop >= offsets[i]
+ && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
+ && this.activate(targets[i])
+ }
+ }
+
+ ScrollSpy.prototype.activate = function (target) {
+ this.activeTarget = target
+
+ this.clear()
+
+ var selector = this.selector +
+ '[data-target="' + target + '"],' +
+ this.selector + '[href="' + target + '"]'
+
+ var active = $(selector)
+ .parents('li')
+ .addClass('active')
+
+ if (active.parent('.dropdown-menu').length) {
+ active = active
+ .closest('li.dropdown')
+ .addClass('active')
+ }
+
+ active.trigger('activate.bs.scrollspy')
+ }
+
+ ScrollSpy.prototype.clear = function () {
+ $(this.selector)
+ .parentsUntil(this.options.target, '.active')
+ .removeClass('active')
+ }
+
+
+ // SCROLLSPY PLUGIN DEFINITION
+ // ===========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.scrollspy')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.scrollspy
+
+ $.fn.scrollspy = Plugin
+ $.fn.scrollspy.Constructor = ScrollSpy
+
+
+ // SCROLLSPY NO CONFLICT
+ // =====================
+
+ $.fn.scrollspy.noConflict = function () {
+ $.fn.scrollspy = old
+ return this
+ }
+
+
+ // SCROLLSPY DATA-API
+ // ==================
+
+ $(window).on('load.bs.scrollspy.data-api', function () {
+ $('[data-spy="scroll"]').each(function () {
+ var $spy = $(this)
+ Plugin.call($spy, $spy.data())
+ })
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tab.js v3.3.7
+ * http://getbootstrap.com/javascript/#tabs
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TAB CLASS DEFINITION
+ // ====================
+
+ var Tab = function (element) {
+ // jscs:disable requireDollarBeforejQueryAssignment
+ this.element = $(element)
+ // jscs:enable requireDollarBeforejQueryAssignment
+ }
+
+ Tab.VERSION = '3.3.7'
+
+ Tab.TRANSITION_DURATION = 150
+
+ Tab.prototype.show = function () {
+ var $this = this.element
+ var $ul = $this.closest('ul:not(.dropdown-menu)')
+ var selector = $this.data('target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ if ($this.parent('li').hasClass('active')) return
+
+ var $previous = $ul.find('.active:last a')
+ var hideEvent = $.Event('hide.bs.tab', {
+ relatedTarget: $this[0]
+ })
+ var showEvent = $.Event('show.bs.tab', {
+ relatedTarget: $previous[0]
+ })
+
+ $previous.trigger(hideEvent)
+ $this.trigger(showEvent)
+
+ if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
+
+ var $target = $(selector)
+
+ this.activate($this.closest('li'), $ul)
+ this.activate($target, $target.parent(), function () {
+ $previous.trigger({
+ type: 'hidden.bs.tab',
+ relatedTarget: $this[0]
+ })
+ $this.trigger({
+ type: 'shown.bs.tab',
+ relatedTarget: $previous[0]
+ })
+ })
+ }
+
+ Tab.prototype.activate = function (element, container, callback) {
+ var $active = container.find('> .active')
+ var transition = callback
+ && $.support.transition
+ && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
+
+ function next() {
+ $active
+ .removeClass('active')
+ .find('> .dropdown-menu > .active')
+ .removeClass('active')
+ .end()
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', false)
+
+ element
+ .addClass('active')
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', true)
+
+ if (transition) {
+ element[0].offsetWidth // reflow for transition
+ element.addClass('in')
+ } else {
+ element.removeClass('fade')
+ }
+
+ if (element.parent('.dropdown-menu').length) {
+ element
+ .closest('li.dropdown')
+ .addClass('active')
+ .end()
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', true)
+ }
+
+ callback && callback()
+ }
+
+ $active.length && transition ?
+ $active
+ .one('bsTransitionEnd', next)
+ .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
+ next()
+
+ $active.removeClass('in')
+ }
+
+
+ // TAB PLUGIN DEFINITION
+ // =====================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tab')
+
+ if (!data) $this.data('bs.tab', (data = new Tab(this)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.tab
+
+ $.fn.tab = Plugin
+ $.fn.tab.Constructor = Tab
+
+
+ // TAB NO CONFLICT
+ // ===============
+
+ $.fn.tab.noConflict = function () {
+ $.fn.tab = old
+ return this
+ }
+
+
+ // TAB DATA-API
+ // ============
+
+ var clickHandler = function (e) {
+ e.preventDefault()
+ Plugin.call($(this), 'show')
+ }
+
+ $(document)
+ .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
+ .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: affix.js v3.3.7
+ * http://getbootstrap.com/javascript/#affix
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // AFFIX CLASS DEFINITION
+ // ======================
+
+ var Affix = function (element, options) {
+ this.options = $.extend({}, Affix.DEFAULTS, options)
+
+ this.$target = $(this.options.target)
+ .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
+ .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
+
+ this.$element = $(element)
+ this.affixed = null
+ this.unpin = null
+ this.pinnedOffset = null
+
+ this.checkPosition()
+ }
+
+ Affix.VERSION = '3.3.7'
+
+ Affix.RESET = 'affix affix-top affix-bottom'
+
+ Affix.DEFAULTS = {
+ offset: 0,
+ target: window
+ }
+
+ Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ var targetHeight = this.$target.height()
+
+ if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
+
+ if (this.affixed == 'bottom') {
+ if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
+ return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
+ }
+
+ var initializing = this.affixed == null
+ var colliderTop = initializing ? scrollTop : position.top
+ var colliderHeight = initializing ? targetHeight : height
+
+ if (offsetTop != null && scrollTop <= offsetTop) return 'top'
+ if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
+
+ return false
+ }
+
+ Affix.prototype.getPinnedOffset = function () {
+ if (this.pinnedOffset) return this.pinnedOffset
+ this.$element.removeClass(Affix.RESET).addClass('affix')
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ return (this.pinnedOffset = position.top - scrollTop)
+ }
+
+ Affix.prototype.checkPositionWithEventLoop = function () {
+ setTimeout($.proxy(this.checkPosition, this), 1)
+ }
+
+ Affix.prototype.checkPosition = function () {
+ if (!this.$element.is(':visible')) return
+
+ var height = this.$element.height()
+ var offset = this.options.offset
+ var offsetTop = offset.top
+ var offsetBottom = offset.bottom
+ var scrollHeight = Math.max($(document).height(), $(document.body).height())
+
+ if (typeof offset != 'object') offsetBottom = offsetTop = offset
+ if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
+ if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
+
+ var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
+
+ if (this.affixed != affix) {
+ if (this.unpin != null) this.$element.css('top', '')
+
+ var affixType = 'affix' + (affix ? '-' + affix : '')
+ var e = $.Event(affixType + '.bs.affix')
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ this.affixed = affix
+ this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
+
+ this.$element
+ .removeClass(Affix.RESET)
+ .addClass(affixType)
+ .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
+ }
+
+ if (affix == 'bottom') {
+ this.$element.offset({
+ top: scrollHeight - height - offsetBottom
+ })
+ }
+ }
+
+
+ // AFFIX PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.affix')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.affix
+
+ $.fn.affix = Plugin
+ $.fn.affix.Constructor = Affix
+
+
+ // AFFIX NO CONFLICT
+ // =================
+
+ $.fn.affix.noConflict = function () {
+ $.fn.affix = old
+ return this
+ }
+
+
+ // AFFIX DATA-API
+ // ==============
+
+ $(window).on('load', function () {
+ $('[data-spy="affix"]').each(function () {
+ var $spy = $(this)
+ var data = $spy.data()
+
+ data.offset = data.offset || {}
+
+ if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
+ if (data.offsetTop != null) data.offset.top = data.offsetTop
+
+ Plugin.call($spy, data)
+ })
+ })
+
+}(jQuery);
diff --git a/trunk/src/AppBundle/Resources/public/js/bootstrap-select-1.12.0.js b/trunk/src/AppBundle/Resources/public/js/bootstrap-select-1.12.0.js
new file mode 100644
index 00000000..4146f722
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/js/bootstrap-select-1.12.0.js
@@ -0,0 +1,1901 @@
+/*!
+ * Bootstrap-select v1.12.0 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2016 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module unless amdModuleId is set
+ define(["jquery"], function (a0) {
+ return (factory(a0));
+ });
+ } else if (typeof module === 'object' && module.exports) {
+ // Node. Does not work with strict CommonJS, but
+ // only CommonJS-like environments that support module.exports,
+ // like Node.
+ module.exports = factory(require("jquery"));
+ } else {
+ factory(root["jQuery"]);
+ }
+}(this, function (jQuery) {
+
+(function ($) {
+ 'use strict';
+
+ //
+ if (!String.prototype.includes) {
+ (function () {
+ 'use strict'; // needed to support `apply`/`call` with `undefined`/`null`
+ var toString = {}.toString;
+ var defineProperty = (function () {
+ // IE 8 only supports `Object.defineProperty` on DOM elements
+ try {
+ var object = {};
+ var $defineProperty = Object.defineProperty;
+ var result = $defineProperty(object, object, object) && $defineProperty;
+ } catch (error) {
+ }
+ return result;
+ }());
+ var indexOf = ''.indexOf;
+ var includes = function (search) {
+ if (this == null) {
+ throw new TypeError();
+ }
+ var string = String(this);
+ if (search && toString.call(search) == '[object RegExp]') {
+ throw new TypeError();
+ }
+ var stringLength = string.length;
+ var searchString = String(search);
+ var searchLength = searchString.length;
+ var position = arguments.length > 1 ? arguments[1] : undefined;
+ // `ToInteger`
+ var pos = position ? Number(position) : 0;
+ if (pos != pos) { // better `isNaN`
+ pos = 0;
+ }
+ var start = Math.min(Math.max(pos, 0), stringLength);
+ // Avoid the `indexOf` call if no match is possible
+ if (searchLength + start > stringLength) {
+ return false;
+ }
+ return indexOf.call(string, searchString, pos) != -1;
+ };
+ if (defineProperty) {
+ defineProperty(String.prototype, 'includes', {
+ 'value': includes,
+ 'configurable': true,
+ 'writable': true
+ });
+ } else {
+ String.prototype.includes = includes;
+ }
+ }());
+ }
+
+ if (!String.prototype.startsWith) {
+ (function () {
+ 'use strict'; // needed to support `apply`/`call` with `undefined`/`null`
+ var defineProperty = (function () {
+ // IE 8 only supports `Object.defineProperty` on DOM elements
+ try {
+ var object = {};
+ var $defineProperty = Object.defineProperty;
+ var result = $defineProperty(object, object, object) && $defineProperty;
+ } catch (error) {
+ }
+ return result;
+ }());
+ var toString = {}.toString;
+ var startsWith = function (search) {
+ if (this == null) {
+ throw new TypeError();
+ }
+ var string = String(this);
+ if (search && toString.call(search) == '[object RegExp]') {
+ throw new TypeError();
+ }
+ var stringLength = string.length;
+ var searchString = String(search);
+ var searchLength = searchString.length;
+ var position = arguments.length > 1 ? arguments[1] : undefined;
+ // `ToInteger`
+ var pos = position ? Number(position) : 0;
+ if (pos != pos) { // better `isNaN`
+ pos = 0;
+ }
+ var start = Math.min(Math.max(pos, 0), stringLength);
+ // Avoid the `indexOf` call if no match is possible
+ if (searchLength + start > stringLength) {
+ return false;
+ }
+ var index = -1;
+ while (++index < searchLength) {
+ if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) {
+ return false;
+ }
+ }
+ return true;
+ };
+ if (defineProperty) {
+ defineProperty(String.prototype, 'startsWith', {
+ 'value': startsWith,
+ 'configurable': true,
+ 'writable': true
+ });
+ } else {
+ String.prototype.startsWith = startsWith;
+ }
+ }());
+ }
+
+ if (!Object.keys) {
+ Object.keys = function (
+ o, // object
+ k, // key
+ r // result array
+ ){
+ // initialize object and result
+ r=[];
+ // iterate over object keys
+ for (k in o)
+ // fill result array with non-prototypical keys
+ r.hasOwnProperty.call(o, k) && r.push(k);
+ // return result
+ return r;
+ };
+ }
+
+ // set data-selected on select element if the value has been programmatically selected
+ // prior to initialization of bootstrap-select
+ // * consider removing or replacing an alternative method *
+ var valHooks = {
+ useDefault: false,
+ _set: $.valHooks.select.set
+ };
+
+ $.valHooks.select.set = function(elem, value) {
+ if (value && !valHooks.useDefault) $(elem).data('selected', true);
+
+ return valHooks._set.apply(this, arguments);
+ };
+
+ var changed_arguments = null;
+ $.fn.triggerNative = function (eventName) {
+ var el = this[0],
+ event;
+
+ if (el.dispatchEvent) { // for modern browsers & IE9+
+ if (typeof Event === 'function') {
+ // For modern browsers
+ event = new Event(eventName, {
+ bubbles: true
+ });
+ } else {
+ // For IE since it doesn't support Event constructor
+ event = document.createEvent('Event');
+ event.initEvent(eventName, true, false);
+ }
+
+ el.dispatchEvent(event);
+ } else if (el.fireEvent) { // for IE8
+ event = document.createEventObject();
+ event.eventType = eventName;
+ el.fireEvent('on' + eventName, event);
+ } else {
+ // fall back to jQuery.trigger
+ this.trigger(eventName);
+ }
+ };
+ //
+
+ // Case insensitive contains search
+ $.expr.pseudos.icontains = function (obj, index, meta) {
+ var $obj = $(obj);
+ var haystack = ($obj.data('tokens') || $obj.text()).toString().toUpperCase();
+ return haystack.includes(meta[3].toUpperCase());
+ };
+
+ // Case insensitive begins search
+ $.expr.pseudos.ibegins = function (obj, index, meta) {
+ var $obj = $(obj);
+ var haystack = ($obj.data('tokens') || $obj.text()).toString().toUpperCase();
+ return haystack.startsWith(meta[3].toUpperCase());
+ };
+
+ // Case and accent insensitive contains search
+ $.expr.pseudos.aicontains = function (obj, index, meta) {
+ var $obj = $(obj);
+ var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toString().toUpperCase();
+ return haystack.includes(meta[3].toUpperCase());
+ };
+
+ // Case and accent insensitive begins search
+ $.expr.pseudos.aibegins = function (obj, index, meta) {
+ var $obj = $(obj);
+ var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toString().toUpperCase();
+ return haystack.startsWith(meta[3].toUpperCase());
+ };
+
+ /**
+ * Remove all diatrics from the given text.
+ * @access private
+ * @param {String} text
+ * @returns {String}
+ */
+ function normalizeToBase(text) {
+ var rExps = [
+ {re: /[\xC0-\xC6]/g, ch: "A"},
+ {re: /[\xE0-\xE6]/g, ch: "a"},
+ {re: /[\xC8-\xCB]/g, ch: "E"},
+ {re: /[\xE8-\xEB]/g, ch: "e"},
+ {re: /[\xCC-\xCF]/g, ch: "I"},
+ {re: /[\xEC-\xEF]/g, ch: "i"},
+ {re: /[\xD2-\xD6]/g, ch: "O"},
+ {re: /[\xF2-\xF6]/g, ch: "o"},
+ {re: /[\xD9-\xDC]/g, ch: "U"},
+ {re: /[\xF9-\xFC]/g, ch: "u"},
+ {re: /[\xC7-\xE7]/g, ch: "c"},
+ {re: /[\xD1]/g, ch: "N"},
+ {re: /[\xF1]/g, ch: "n"}
+ ];
+ $.each(rExps, function () {
+ text = text ? text.replace(this.re, this.ch) : '';
+ });
+ return text;
+ }
+
+
+ // List of HTML entities for escaping.
+ var escapeMap = {
+ '&': '&',
+ '<': '<',
+ '>': '>',
+ '"': '"',
+ "'": ''',
+ '`': '`'
+ };
+
+ var unescapeMap = {
+ '&': '&',
+ '<': '<',
+ '>': '>',
+ '"': '"',
+ ''': "'",
+ '`': '`'
+ };
+
+ // Functions for escaping and unescaping strings to/from HTML interpolation.
+ var createEscaper = function(map) {
+ var escaper = function(match) {
+ return map[match];
+ };
+ // Regexes for identifying a key that needs to be escaped.
+ var source = '(?:' + Object.keys(map).join('|') + ')';
+ var testRegexp = RegExp(source);
+ var replaceRegexp = RegExp(source, 'g');
+ return function(string) {
+ string = string == null ? '' : '' + string;
+ return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
+ };
+ };
+
+ var htmlEscape = createEscaper(escapeMap);
+ var htmlUnescape = createEscaper(unescapeMap);
+
+ var Selectpicker = function (element, options, e) {
+ // bootstrap-select has been initialized - revert valHooks.select.set back to its original function
+ if (!valHooks.useDefault) {
+ $.valHooks.select.set = valHooks._set;
+ valHooks.useDefault = true;
+ }
+
+ if (e) {
+ e.stopPropagation();
+ e.preventDefault();
+ }
+
+ this.$element = $(element);
+ this.$newElement = null;
+ this.$button = null;
+ this.$menu = null;
+ this.$lis = null;
+ this.options = options;
+
+ // If we have no title yet, try to pull it from the html title attribute (jQuery doesnt' pick it up as it's not a
+ // data-attribute)
+ if (this.options.title === null) {
+ this.options.title = this.$element.attr('title');
+ }
+
+ // Format window padding
+ var winPad = this.options.windowPadding;
+ if (typeof winPad === 'number') {
+ this.options.windowPadding = [winPad, winPad, winPad, winPad];
+ }
+
+ //Expose public methods
+ this.val = Selectpicker.prototype.val;
+ this.render = Selectpicker.prototype.render;
+ this.refresh = Selectpicker.prototype.refresh;
+ this.setStyle = Selectpicker.prototype.setStyle;
+ this.selectAll = Selectpicker.prototype.selectAll;
+ this.deselectAll = Selectpicker.prototype.deselectAll;
+ this.destroy = Selectpicker.prototype.destroy;
+ this.remove = Selectpicker.prototype.remove;
+ this.show = Selectpicker.prototype.show;
+ this.hide = Selectpicker.prototype.hide;
+
+ this.init();
+ };
+
+ Selectpicker.VERSION = '1.12.0';
+
+ // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both.
+ Selectpicker.DEFAULTS = {
+ noneSelectedText: 'Nothing selected',
+ noneResultsText: 'No results matched {0}',
+ countSelectedText: function (numSelected, numTotal) {
+ return (numSelected == 1) ? "{0} item selected" : "{0} items selected";
+ },
+ maxOptionsText: function (numAll, numGroup) {
+ return [
+ (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)',
+ (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'
+ ];
+ },
+ selectAllText: 'Select All',
+ deselectAllText: 'Deselect All',
+ doneButton: false,
+ doneButtonText: 'Close',
+ multipleSeparator: ', ',
+ styleBase: 'btn',
+ style: 'btn-default',
+ size: 'auto',
+ title: null,
+ selectedTextFormat: 'values',
+ width: false,
+ container: false,
+ hideDisabled: false,
+ showSubtext: false,
+ showIcon: true,
+ showContent: true,
+ dropupAuto: true,
+ header: false,
+ liveSearch: false,
+ liveSearchPlaceholder: null,
+ liveSearchNormalize: false,
+ liveSearchStyle: 'contains',
+ actionsBox: false,
+ iconBase: 'glyphicon',
+ tickIcon: 'glyphicon-ok',
+ showTick: false,
+ template: {
+ caret: '
'
+ },
+ maxOptions: false,
+ mobile: false,
+ selectOnTab: false,
+ dropdownAlignRight: false,
+ windowPadding: 0
+ };
+
+ Selectpicker.prototype = {
+
+ constructor: Selectpicker,
+
+ init: function () {
+ var that = this,
+ id = this.$element.attr('id');
+
+ this.$element.addClass('bs-select-hidden');
+
+ // store originalIndex (key) and newIndex (value) in this.liObj for fast accessibility
+ // allows us to do this.$lis.eq(that.liObj[index]) instead of this.$lis.filter('[data-original-index="' + index + '"]')
+ this.liObj = {};
+ this.multiple = this.$element.prop('multiple');
+ this.autofocus = this.$element.prop('autofocus');
+ this.$newElement = this.createView();
+ this.$element
+ .after(this.$newElement)
+ .appendTo(this.$newElement);
+ this.$button = this.$newElement.children('button');
+ this.$menu = this.$newElement.children('.dropdown-menu');
+ this.$menuInner = this.$menu.children('.inner');
+ this.$searchbox = this.$menu.find('input');
+
+ this.$element.removeClass('bs-select-hidden');
+
+ if (this.options.dropdownAlignRight === true) this.$menu.addClass('dropdown-menu-right');
+
+ if (typeof id !== 'undefined') {
+ this.$button.attr('data-id', id);
+ $('label[for="' + id + '"]').click(function (e) {
+ e.preventDefault();
+ that.$button.focus();
+ });
+ }
+
+ this.checkDisabled();
+ this.clickListener();
+ if (this.options.liveSearch) this.liveSearchListener();
+ this.render();
+ this.setStyle();
+ this.setWidth();
+ if (this.options.container) this.selectPosition();
+ this.$menu.data('this', this);
+ this.$newElement.data('this', this);
+ if (this.options.mobile) this.mobile();
+
+ this.$newElement.on({
+ 'hide.bs.dropdown': function (e) {
+ that.$menuInner.attr('aria-expanded', false);
+ that.$element.trigger('hide.bs.select', e);
+ },
+ 'hidden.bs.dropdown': function (e) {
+ that.$element.trigger('hidden.bs.select', e);
+ },
+ 'show.bs.dropdown': function (e) {
+ that.$menuInner.attr('aria-expanded', true);
+ that.$element.trigger('show.bs.select', e);
+ },
+ 'shown.bs.dropdown': function (e) {
+ that.$element.trigger('shown.bs.select', e);
+ }
+ });
+
+ if (that.$element[0].hasAttribute('required')) {
+ this.$element.on('invalid', function () {
+ that.$button
+ .addClass('bs-invalid')
+ .focus();
+
+ that.$element.on({
+ 'focus.bs.select': function () {
+ that.$button.focus();
+ that.$element.off('focus.bs.select');
+ },
+ 'shown.bs.select': function () {
+ that.$element
+ .val(that.$element.val()) // set the value to hide the validation message in Chrome when menu is opened
+ .off('shown.bs.select');
+ },
+ 'rendered.bs.select': function () {
+ // if select is no longer invalid, remove the bs-invalid class
+ if (this.validity.valid) that.$button.removeClass('bs-invalid');
+ that.$element.off('rendered.bs.select');
+ }
+ });
+ });
+ }
+
+ setTimeout(function () {
+ that.$element.trigger('loaded.bs.select');
+ });
+ },
+
+ createDropdown: function () {
+ // Options
+ // If we are multiple or showTick option is set, then add the show-tick class
+ var showTick = (this.multiple || this.options.showTick) ? ' show-tick' : '',
+ inputGroup = this.$element.parent().hasClass('input-group') ? ' input-group-btn' : '',
+ autofocus = this.autofocus ? ' autofocus' : '';
+ // Elements
+ var header = this.options.header ? '
× ' + this.options.header + '
' : '';
+ var searchbox = this.options.liveSearch ?
+ '
' +
+ ' ' +
+ '
'
+ : '';
+ var actionsbox = this.multiple && this.options.actionsBox ?
+ '
' +
+ '
' +
+ '' +
+ this.options.selectAllText +
+ ' ' +
+ '' +
+ this.options.deselectAllText +
+ ' ' +
+ '
' +
+ '
'
+ : '';
+ var donebutton = this.multiple && this.options.doneButton ?
+ '
'
+ : '';
+ var drop =
+ '
' +
+ '' +
+ ' ' +
+ '' +
+ this.options.template.caret +
+ ' ' +
+ ' ' +
+ '' +
+ '
';
+
+ return $(drop);
+ },
+
+ createView: function () {
+ var $drop = this.createDropdown(),
+ li = this.createLi();
+
+ $drop.find('ul')[0].innerHTML = li;
+ return $drop;
+ },
+
+ reloadLi: function () {
+ // rebuild
+ var li = this.createLi();
+ this.$menuInner[0].innerHTML = li;
+ },
+
+ createLi: function () {
+ var that = this,
+ _li = [],
+ optID = 0,
+ titleOption = document.createElement('option'),
+ liIndex = -1; // increment liIndex whenever a new
element is created to ensure liObj is correct
+
+ // Helper functions
+ /**
+ * @param content
+ * @param [index]
+ * @param [classes]
+ * @param [optgroup]
+ * @returns {string}
+ */
+ var generateLI = function (content, index, classes, optgroup) {
+ return ' ' + content + ' ';
+ };
+
+ /**
+ * @param text
+ * @param [classes]
+ * @param [inline]
+ * @param [tokens]
+ * @returns {string}
+ */
+ var generateA = function (text, classes, inline, tokens) {
+ return '
' + text +
+ ' ' +
+ ' ';
+ };
+
+ if (this.options.title && !this.multiple) {
+ // this option doesn't create a new
element, but does add a new option, so liIndex is decreased
+ // since liObj is recalculated on every refresh, liIndex needs to be decreased even if the titleOption is already appended
+ liIndex--;
+
+ if (!this.$element.find('.bs-title-option').length) {
+ // Use native JS to prepend option (faster)
+ var element = this.$element[0];
+ titleOption.className = 'bs-title-option';
+ titleOption.innerHTML = this.options.title;
+ titleOption.value = '';
+ element.insertBefore(titleOption, element.firstChild);
+ // Check if selected or data-selected attribute is already set on an option. If not, select the titleOption option.
+ // the selected item may have been changed by user or programmatically before the bootstrap select plugin runs,
+ // if so, the select will have the data-selected attribute
+ var $opt = $(element.options[element.selectedIndex]);
+ if ($opt.attr('selected') === undefined && this.$element.data('selected') === undefined) {
+ titleOption.selected = true;
+ }
+ }
+ }
+
+ this.$element.find('option').each(function (index) {
+ var $this = $(this);
+
+ liIndex++;
+
+ if ($this.hasClass('bs-title-option')) return;
+
+ // Get the class and text for the option
+ var optionClass = this.className || '',
+ inline = this.style.cssText,
+ text = $this.data('content') ? $this.data('content') : $this.html(),
+ tokens = $this.data('tokens') ? $this.data('tokens') : null,
+ subtext = typeof $this.data('subtext') !== 'undefined' ? '' + $this.data('subtext') + ' ' : '',
+ icon = typeof $this.data('icon') !== 'undefined' ? ' ' : '',
+ $parent = $this.parent(),
+ isOptgroup = $parent[0].tagName === 'OPTGROUP',
+ isOptgroupDisabled = isOptgroup && $parent[0].disabled,
+ isDisabled = this.disabled || isOptgroupDisabled;
+
+ if (icon !== '' && isDisabled) {
+ icon = '' + icon + ' ';
+ }
+
+ if (that.options.hideDisabled && (isDisabled && !isOptgroup || isOptgroupDisabled)) {
+ liIndex--;
+ return;
+ }
+
+ if (!$this.data('content')) {
+ // Prepend any icon and append any subtext to the main text.
+ text = icon + '' + text + subtext + ' ';
+ }
+
+ if (isOptgroup && $this.data('divider') !== true) {
+ if (that.options.hideDisabled && isDisabled) {
+ if ($parent.data('allOptionsDisabled') === undefined) {
+ var $options = $parent.children();
+ $parent.data('allOptionsDisabled', $options.filter(':disabled').length === $options.length);
+ }
+
+ if ($parent.data('allOptionsDisabled')) {
+ liIndex--;
+ return;
+ }
+ }
+
+ var optGroupClass = ' ' + $parent[0].className || '';
+
+ if ($this.index() === 0) { // Is it the first option of the optgroup?
+ optID += 1;
+
+ // Get the opt group label
+ var label = $parent[0].label,
+ labelSubtext = typeof $parent.data('subtext') !== 'undefined' ? '' + $parent.data('subtext') + ' ' : '',
+ labelIcon = $parent.data('icon') ? ' ' : '';
+
+ label = labelIcon + '' + htmlEscape(label) + labelSubtext + ' ';
+
+ if (index !== 0 && _li.length > 0) { // Is it NOT the first option of the select && are there elements in the dropdown?
+ liIndex++;
+ _li.push(generateLI('', null, 'divider', optID + 'div'));
+ }
+ liIndex++;
+ _li.push(generateLI(label, null, 'dropdown-header' + optGroupClass, optID));
+ }
+
+ if (that.options.hideDisabled && isDisabled) {
+ liIndex--;
+ return;
+ }
+
+ _li.push(generateLI(generateA(text, 'opt ' + optionClass + optGroupClass, inline, tokens), index, '', optID));
+ } else if ($this.data('divider') === true) {
+ _li.push(generateLI('', index, 'divider'));
+ } else if ($this.data('hidden') === true) {
+ _li.push(generateLI(generateA(text, optionClass, inline, tokens), index, 'hidden is-hidden'));
+ } else {
+ var showDivider = this.previousElementSibling && this.previousElementSibling.tagName === 'OPTGROUP';
+
+ // if previous element is not an optgroup and hideDisabled is true
+ if (!showDivider && that.options.hideDisabled) {
+ // get previous elements
+ var $prev = $(this).prevAll();
+
+ for (var i = 0; i < $prev.length; i++) {
+ // find the first element in the previous elements that is an optgroup
+ if ($prev[i].tagName === 'OPTGROUP') {
+ var optGroupDistance = 0;
+
+ // loop through the options in between the current option and the optgroup
+ // and check if they are hidden or disabled
+ for (var d = 0; d < i; d++) {
+ var prevOption = $prev[d];
+ if (prevOption.disabled || $(prevOption).data('hidden') === true) optGroupDistance++;
+ }
+
+ // if all of the options between the current option and the optgroup are hidden or disabled, show the divider
+ if (optGroupDistance === i) showDivider = true;
+
+ break;
+ }
+ }
+ }
+
+ if (showDivider) {
+ liIndex++;
+ _li.push(generateLI('', null, 'divider', optID + 'div'));
+ }
+ _li.push(generateLI(generateA(text, optionClass, inline, tokens), index));
+ }
+
+ that.liObj[index] = liIndex;
+ });
+
+ //If we are not multiple, we don't have a selected item, and we don't have a title, select the first element so something is set in the button
+ if (!this.multiple && this.$element.find('option:selected').length === 0 && !this.options.title) {
+ this.$element.find('option').eq(0).prop('selected', true).attr('selected', 'selected');
+ }
+
+ return _li.join('');
+ },
+
+ findLis: function () {
+ if (this.$lis == null) this.$lis = this.$menu.find('li');
+ return this.$lis;
+ },
+
+ /**
+ * @param [updateLi] defaults to true
+ */
+ render: function (updateLi) {
+ var that = this,
+ notDisabled;
+
+ //Update the LI to match the SELECT
+ if (updateLi !== false) {
+ this.$element.find('option').each(function (index) {
+ var $lis = that.findLis().eq(that.liObj[index]);
+
+ that.setDisabled(index, this.disabled || this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled, $lis);
+ that.setSelected(index, this.selected, $lis);
+ });
+ }
+
+ this.togglePlaceholder();
+
+ this.tabIndex();
+
+ var selectedItems = this.$element.find('option').map(function () {
+ if (this.selected) {
+ if (that.options.hideDisabled && (this.disabled || this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled)) return;
+
+ var $this = $(this),
+ icon = $this.data('icon') && that.options.showIcon ? ' ' : '',
+ subtext;
+
+ if (that.options.showSubtext && $this.data('subtext') && !that.multiple) {
+ subtext = ' ' + $this.data('subtext') + ' ';
+ } else {
+ subtext = '';
+ }
+ if (typeof $this.attr('title') !== 'undefined') {
+ return $this.attr('title');
+ } else if ($this.data('content') && that.options.showContent) {
+ return $this.data('content').toString();
+ } else {
+ return icon + $this.html() + subtext;
+ }
+ }
+ }).toArray();
+
+ //Fixes issue in IE10 occurring when no default option is selected and at least one option is disabled
+ //Convert all the values into a comma delimited string
+ var title = !this.multiple ? selectedItems[0] : selectedItems.join(this.options.multipleSeparator);
+
+ //If this is multi select, and the selectText type is count, the show 1 of 2 selected etc..
+ if (this.multiple && this.options.selectedTextFormat.indexOf('count') > -1) {
+ var max = this.options.selectedTextFormat.split('>');
+ if ((max.length > 1 && selectedItems.length > max[1]) || (max.length == 1 && selectedItems.length >= 2)) {
+ notDisabled = this.options.hideDisabled ? ', [disabled]' : '';
+ var totalCount = this.$element.find('option').not('[data-divider="true"], [data-hidden="true"]' + notDisabled).length,
+ tr8nText = (typeof this.options.countSelectedText === 'function') ? this.options.countSelectedText(selectedItems.length, totalCount) : this.options.countSelectedText;
+ title = tr8nText.replace('{0}', selectedItems.length.toString()).replace('{1}', totalCount.toString());
+ }
+ }
+
+ if (this.options.title == undefined) {
+ this.options.title = this.$element.attr('title');
+ }
+
+ if (this.options.selectedTextFormat == 'static') {
+ title = this.options.title;
+ }
+
+ //If we dont have a title, then use the default, or if nothing is set at all, use the not selected text
+ if (!title) {
+ title = typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText;
+ }
+
+ //strip all HTML tags and trim the result, then unescape any escaped tags
+ this.$button.attr('title', htmlUnescape($.trim(title.replace(/<[^>]*>?/g, ''))));
+ this.$button.children('.filter-option').html(title);
+
+ this.$element.trigger('rendered.bs.select');
+ },
+
+ /**
+ * @param [style]
+ * @param [status]
+ */
+ setStyle: function (style, status) {
+ if (this.$element.attr('class')) {
+ this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi, ''));
+ }
+
+ var buttonClass = style ? style : this.options.style;
+
+ if (status == 'add') {
+ this.$button.addClass(buttonClass);
+ } else if (status == 'remove') {
+ this.$button.removeClass(buttonClass);
+ } else {
+ this.$button.removeClass(this.options.style);
+ this.$button.addClass(buttonClass);
+ }
+ },
+
+ liHeight: function (refresh) {
+ if (!refresh && (this.options.size === false || this.sizeInfo)) return;
+
+ var newElement = document.createElement('div'),
+ menu = document.createElement('div'),
+ menuInner = document.createElement('ul'),
+ divider = document.createElement('li'),
+ li = document.createElement('li'),
+ a = document.createElement('a'),
+ text = document.createElement('span'),
+ header = this.options.header && this.$menu.find('.popover-title').length > 0 ? this.$menu.find('.popover-title')[0].cloneNode(true) : null,
+ search = this.options.liveSearch ? document.createElement('div') : null,
+ actions = this.options.actionsBox && this.multiple && this.$menu.find('.bs-actionsbox').length > 0 ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null,
+ doneButton = this.options.doneButton && this.multiple && this.$menu.find('.bs-donebutton').length > 0 ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null;
+
+ text.className = 'text';
+ newElement.className = this.$menu[0].parentNode.className + ' open';
+ menu.className = 'dropdown-menu open';
+ menuInner.className = 'dropdown-menu inner';
+ divider.className = 'divider';
+
+ text.appendChild(document.createTextNode('Inner text'));
+ a.appendChild(text);
+ li.appendChild(a);
+ menuInner.appendChild(li);
+ menuInner.appendChild(divider);
+ if (header) menu.appendChild(header);
+ if (search) {
+ // create a span instead of input as creating an input element is slower
+ var input = document.createElement('span');
+ search.className = 'bs-searchbox';
+ input.className = 'form-control';
+ search.appendChild(input);
+ menu.appendChild(search);
+ }
+ if (actions) menu.appendChild(actions);
+ menu.appendChild(menuInner);
+ if (doneButton) menu.appendChild(doneButton);
+ newElement.appendChild(menu);
+
+ document.body.appendChild(newElement);
+
+ var liHeight = a.offsetHeight,
+ headerHeight = header ? header.offsetHeight : 0,
+ searchHeight = search ? search.offsetHeight : 0,
+ actionsHeight = actions ? actions.offsetHeight : 0,
+ doneButtonHeight = doneButton ? doneButton.offsetHeight : 0,
+ dividerHeight = $(divider).outerHeight(true),
+ // fall back to jQuery if getComputedStyle is not supported
+ menuStyle = typeof getComputedStyle === 'function' ? getComputedStyle(menu) : false,
+ $menu = menuStyle ? null : $(menu),
+ menuPadding = {
+ vert: parseInt(menuStyle ? menuStyle.paddingTop : $menu.css('paddingTop')) +
+ parseInt(menuStyle ? menuStyle.paddingBottom : $menu.css('paddingBottom')) +
+ parseInt(menuStyle ? menuStyle.borderTopWidth : $menu.css('borderTopWidth')) +
+ parseInt(menuStyle ? menuStyle.borderBottomWidth : $menu.css('borderBottomWidth')),
+ horiz: parseInt(menuStyle ? menuStyle.paddingLeft : $menu.css('paddingLeft')) +
+ parseInt(menuStyle ? menuStyle.paddingRight : $menu.css('paddingRight')) +
+ parseInt(menuStyle ? menuStyle.borderLeftWidth : $menu.css('borderLeftWidth')) +
+ parseInt(menuStyle ? menuStyle.borderRightWidth : $menu.css('borderRightWidth'))
+ },
+ menuExtras = {
+ vert: menuPadding.vert +
+ parseInt(menuStyle ? menuStyle.marginTop : $menu.css('marginTop')) +
+ parseInt(menuStyle ? menuStyle.marginBottom : $menu.css('marginBottom')) + 2,
+ horiz: menuPadding.horiz +
+ parseInt(menuStyle ? menuStyle.marginLeft : $menu.css('marginLeft')) +
+ parseInt(menuStyle ? menuStyle.marginRight : $menu.css('marginRight')) + 2
+ }
+
+ document.body.removeChild(newElement);
+
+ this.sizeInfo = {
+ liHeight: liHeight,
+ headerHeight: headerHeight,
+ searchHeight: searchHeight,
+ actionsHeight: actionsHeight,
+ doneButtonHeight: doneButtonHeight,
+ dividerHeight: dividerHeight,
+ menuPadding: menuPadding,
+ menuExtras: menuExtras
+ };
+ },
+
+ setSize: function () {
+ this.findLis();
+ this.liHeight();
+
+ if (this.options.header) this.$menu.css('padding-top', 0);
+ if (this.options.size === false) return;
+
+ var that = this,
+ $menu = this.$menu,
+ $menuInner = this.$menuInner,
+ $window = $(window),
+ selectHeight = this.$newElement[0].offsetHeight,
+ selectWidth = this.$newElement[0].offsetWidth,
+ liHeight = this.sizeInfo['liHeight'],
+ headerHeight = this.sizeInfo['headerHeight'],
+ searchHeight = this.sizeInfo['searchHeight'],
+ actionsHeight = this.sizeInfo['actionsHeight'],
+ doneButtonHeight = this.sizeInfo['doneButtonHeight'],
+ divHeight = this.sizeInfo['dividerHeight'],
+ menuPadding = this.sizeInfo['menuPadding'],
+ menuExtras = this.sizeInfo['menuExtras'],
+ notDisabled = this.options.hideDisabled ? '.disabled' : '',
+ menuHeight,
+ menuWidth,
+ getHeight,
+ getWidth,
+ selectOffsetTop,
+ selectOffsetBot,
+ selectOffsetLeft,
+ selectOffsetRight,
+ getPos = function() {
+ var pos = that.$newElement.offset(),
+ $container = $(that.options.container),
+ containerPos;
+
+ if (that.options.container && !$container.is('body')) {
+ containerPos = $container.offset();
+ containerPos.top += parseInt($container.css('borderTopWidth'));
+ containerPos.left += parseInt($container.css('borderLeftWidth'));
+ } else {
+ containerPos = { top: 0, left: 0 };
+ }
+
+ var winPad = that.options.windowPadding;
+ selectOffsetTop = pos.top - containerPos.top - $window.scrollTop();
+ selectOffsetBot = $window.height() - selectOffsetTop - selectHeight - containerPos.top - winPad[2];
+ selectOffsetLeft = pos.left - containerPos.left - $window.scrollLeft();
+ selectOffsetRight = $window.width() - selectOffsetLeft - selectWidth - containerPos.left - winPad[1];
+ selectOffsetTop -= winPad[0];
+ selectOffsetLeft -= winPad[3];
+ };
+
+ getPos();
+
+ if (this.options.size === 'auto') {
+ var getSize = function () {
+ var minHeight,
+ hasClass = function (className, include) {
+ return function (element) {
+ if (include) {
+ return (element.classList ? element.classList.contains(className) : $(element).hasClass(className));
+ } else {
+ return !(element.classList ? element.classList.contains(className) : $(element).hasClass(className));
+ }
+ };
+ },
+ lis = that.$menuInner[0].getElementsByTagName('li'),
+ lisVisible = Array.prototype.filter ? Array.prototype.filter.call(lis, hasClass('hidden', false)) : that.$lis.not('.hidden'),
+ optGroup = Array.prototype.filter ? Array.prototype.filter.call(lisVisible, hasClass('dropdown-header', true)) : lisVisible.filter('.dropdown-header');
+
+ getPos();
+ menuHeight = selectOffsetBot - menuExtras.vert;
+ menuWidth = selectOffsetRight - menuExtras.horiz;
+
+ if (that.options.container) {
+ if (!$menu.data('height')) $menu.data('height', $menu.height());
+ getHeight = $menu.data('height');
+
+ if (!$menu.data('width')) $menu.data('width', $menu.width());
+ getWidth = $menu.data('width');
+ } else {
+ getHeight = $menu.height();
+ getWidth = $menu.width();
+ }
+
+ if (that.options.dropupAuto) {
+ that.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras.vert) < getHeight);
+ }
+
+ if (that.$newElement.hasClass('dropup')) {
+ menuHeight = selectOffsetTop - menuExtras.vert;
+ }
+
+ if (that.options.dropdownAlignRight === 'auto') {
+ $menu.toggleClass('dropdown-menu-right', selectOffsetLeft > selectOffsetRight && (menuWidth - menuExtras.horiz) < (getWidth - selectWidth));
+ }
+
+ if ((lisVisible.length + optGroup.length) > 3) {
+ minHeight = liHeight * 3 + menuExtras.vert - 2;
+ } else {
+ minHeight = 0;
+ }
+
+ $menu.css({
+ 'max-height': menuHeight + 'px',
+ 'overflow': 'hidden',
+ 'min-height': minHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px'
+ });
+ $menuInner.css({
+ 'max-height': menuHeight - headerHeight - searchHeight - actionsHeight - doneButtonHeight - menuPadding.vert + 'px',
+ 'overflow-y': 'auto',
+ 'min-height': Math.max(minHeight - menuPadding.vert, 0) + 'px'
+ });
+ };
+ getSize();
+ this.$searchbox.off('input.getSize propertychange.getSize').on('input.getSize propertychange.getSize', getSize);
+ $window.off('resize.getSize scroll.getSize').on('resize.getSize scroll.getSize', getSize);
+ } else if (this.options.size && this.options.size != 'auto' && this.$lis.not(notDisabled).length > this.options.size) {
+ var optIndex = this.$lis.not('.divider').not(notDisabled).children().slice(0, this.options.size).last().parent().index(),
+ divLength = this.$lis.slice(0, optIndex + 1).filter('.divider').length;
+ menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding.vert;
+
+ if (that.options.container) {
+ if (!$menu.data('height')) $menu.data('height', $menu.height());
+ getHeight = $menu.data('height');
+ } else {
+ getHeight = $menu.height();
+ }
+
+ if (that.options.dropupAuto) {
+ //noinspection JSUnusedAssignment
+ this.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras.vert) < getHeight);
+ }
+ $menu.css({
+ 'max-height': menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px',
+ 'overflow': 'hidden',
+ 'min-height': ''
+ });
+ $menuInner.css({
+ 'max-height': menuHeight - menuPadding.vert + 'px',
+ 'overflow-y': 'auto',
+ 'min-height': ''
+ });
+ }
+ },
+
+ setWidth: function () {
+ if (this.options.width === 'auto') {
+ this.$menu.css('min-width', '0');
+
+ // Get correct width if element is hidden
+ var $selectClone = this.$menu.parent().clone().appendTo('body'),
+ $selectClone2 = this.options.container ? this.$newElement.clone().appendTo('body') : $selectClone,
+ ulWidth = $selectClone.children('.dropdown-menu').outerWidth(),
+ btnWidth = $selectClone2.css('width', 'auto').children('button').outerWidth();
+
+ $selectClone.remove();
+ $selectClone2.remove();
+
+ // Set width to whatever's larger, button title or longest option
+ this.$newElement.css('width', Math.max(ulWidth, btnWidth) + 'px');
+ } else if (this.options.width === 'fit') {
+ // Remove inline min-width so width can be changed from 'auto'
+ this.$menu.css('min-width', '');
+ this.$newElement.css('width', '').addClass('fit-width');
+ } else if (this.options.width) {
+ // Remove inline min-width so width can be changed from 'auto'
+ this.$menu.css('min-width', '');
+ this.$newElement.css('width', this.options.width);
+ } else {
+ // Remove inline min-width/width so width can be changed
+ this.$menu.css('min-width', '');
+ this.$newElement.css('width', '');
+ }
+ // Remove fit-width class if width is changed programmatically
+ if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') {
+ this.$newElement.removeClass('fit-width');
+ }
+ },
+
+ selectPosition: function () {
+ this.$bsContainer = $('
');
+
+ var that = this,
+ $container = $(this.options.container),
+ pos,
+ containerPos,
+ actualHeight,
+ getPlacement = function ($element) {
+ that.$bsContainer.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass('dropup', $element.hasClass('dropup'));
+ pos = $element.offset();
+
+ if (!$container.is('body')) {
+ containerPos = $container.offset();
+ containerPos.top += parseInt($container.css('borderTopWidth')) - $container.scrollTop();
+ containerPos.left += parseInt($container.css('borderLeftWidth')) - $container.scrollLeft();
+ } else {
+ containerPos = { top: 0, left: 0 };
+ }
+
+ actualHeight = $element.hasClass('dropup') ? 0 : $element[0].offsetHeight;
+
+ that.$bsContainer.css({
+ 'top': pos.top - containerPos.top + actualHeight,
+ 'left': pos.left - containerPos.left,
+ 'width': $element[0].offsetWidth
+ });
+ };
+
+ this.$button.on('click', function () {
+ var $this = $(this);
+
+ if (that.isDisabled()) {
+ return;
+ }
+
+ getPlacement(that.$newElement);
+
+ that.$bsContainer
+ .appendTo(that.options.container)
+ .toggleClass('open', !$this.hasClass('open'))
+ .append(that.$menu);
+ });
+
+ $(window).on('resize scroll', function () {
+ getPlacement(that.$newElement);
+ });
+
+ this.$element.on('hide.bs.select', function () {
+ that.$menu.data('height', that.$menu.height());
+ that.$bsContainer.detach();
+ });
+ },
+
+ /**
+ * @param {number} index - the index of the option that is being changed
+ * @param {boolean} selected - true if the option is being selected, false if being deselected
+ * @param {JQuery} $lis - the 'li' element that is being modified
+ */
+ setSelected: function (index, selected, $lis) {
+ if (!$lis) {
+ this.togglePlaceholder(); // check if setSelected is being called by changing the value of the select
+ $lis = this.findLis().eq(this.liObj[index]);
+ }
+
+ $lis.toggleClass('selected', selected).find('a').attr('aria-selected', selected);
+ },
+
+ /**
+ * @param {number} index - the index of the option that is being disabled
+ * @param {boolean} disabled - true if the option is being disabled, false if being enabled
+ * @param {JQuery} $lis - the 'li' element that is being modified
+ */
+ setDisabled: function (index, disabled, $lis) {
+ if (!$lis) {
+ $lis = this.findLis().eq(this.liObj[index]);
+ }
+
+ if (disabled) {
+ $lis.addClass('disabled').children('a').attr('href', '#').attr('tabindex', -1).attr('aria-disabled', true);
+ } else {
+ $lis.removeClass('disabled').children('a').removeAttr('href').attr('tabindex', 0).attr('aria-disabled', false);
+ }
+ },
+
+ isDisabled: function () {
+ return this.$element[0].disabled;
+ },
+
+ checkDisabled: function () {
+ var that = this;
+
+ if (this.isDisabled()) {
+ this.$newElement.addClass('disabled');
+ this.$button.addClass('disabled').attr('tabindex', -1).attr('aria-disabled', true);
+ } else {
+ if (this.$button.hasClass('disabled')) {
+ this.$newElement.removeClass('disabled');
+ this.$button.removeClass('disabled').attr('aria-disabled', false);
+ }
+
+ if (this.$button.attr('tabindex') == -1 && !this.$element.data('tabindex')) {
+ this.$button.removeAttr('tabindex');
+ }
+ }
+
+ this.$button.click(function () {
+ return !that.isDisabled();
+ });
+ },
+
+ togglePlaceholder: function () {
+ var value = this.$element.val();
+ this.$button.toggleClass('bs-placeholder', value === null || value === '' || (value.constructor === Array && value.length === 0));
+ },
+
+ tabIndex: function () {
+ if (this.$element.data('tabindex') !== this.$element.attr('tabindex') &&
+ (this.$element.attr('tabindex') !== -98 && this.$element.attr('tabindex') !== '-98')) {
+ this.$element.data('tabindex', this.$element.attr('tabindex'));
+ this.$button.attr('tabindex', this.$element.data('tabindex'));
+ }
+
+ this.$element.attr('tabindex', -98);
+ },
+
+ clickListener: function () {
+ var that = this,
+ $document = $(document);
+
+ $document.data('spaceSelect', false);
+
+ this.$button.on('keyup', function (e) {
+ if (/(32)/.test(e.keyCode.toString(10)) && $document.data('spaceSelect')) {
+ e.preventDefault();
+ $document.data('spaceSelect', false);
+ }
+ });
+
+ this.$button.on('click', function () {
+ that.setSize();
+ });
+
+ this.$element.on('shown.bs.select', function () {
+ if (!that.options.liveSearch && !that.multiple) {
+ that.$menuInner.find('.selected a').focus();
+ } else if (!that.multiple) {
+ var selectedIndex = that.liObj[that.$element[0].selectedIndex];
+
+ if (typeof selectedIndex !== 'number' || that.options.size === false) return;
+
+ // scroll to selected option
+ var offset = that.$lis.eq(selectedIndex)[0].offsetTop - that.$menuInner[0].offsetTop;
+ offset = offset - that.$menuInner[0].offsetHeight/2 + that.sizeInfo.liHeight/2;
+ that.$menuInner[0].scrollTop = offset;
+ }
+ });
+
+ this.$menuInner.on('click', 'li a', function (e) {
+ var $this = $(this),
+ clickedIndex = $this.parent().data('originalIndex'),
+ prevValue = that.$element.val(),
+ prevIndex = that.$element.prop('selectedIndex'),
+ triggerChange = true;
+
+ // Don't close on multi choice menu
+ if (that.multiple && that.options.maxOptions !== 1) {
+ e.stopPropagation();
+ }
+
+ e.preventDefault();
+
+ //Don't run if we have been disabled
+ if (!that.isDisabled() && !$this.parent().hasClass('disabled')) {
+ var $options = that.$element.find('option'),
+ $option = $options.eq(clickedIndex),
+ state = $option.prop('selected'),
+ $optgroup = $option.parent('optgroup'),
+ maxOptions = that.options.maxOptions,
+ maxOptionsGrp = $optgroup.data('maxOptions') || false;
+
+ if (!that.multiple) { // Deselect all others if not multi select box
+ $options.prop('selected', false);
+ $option.prop('selected', true);
+ that.$menuInner.find('.selected').removeClass('selected').find('a').attr('aria-selected', false);
+ that.setSelected(clickedIndex, true);
+ } else { // Toggle the one we have chosen if we are multi select.
+ $option.prop('selected', !state);
+ that.setSelected(clickedIndex, !state);
+ $this.blur();
+
+ if (maxOptions !== false || maxOptionsGrp !== false) {
+ var maxReached = maxOptions < $options.filter(':selected').length,
+ maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length;
+
+ if ((maxOptions && maxReached) || (maxOptionsGrp && maxReachedGrp)) {
+ if (maxOptions && maxOptions == 1) {
+ $options.prop('selected', false);
+ $option.prop('selected', true);
+ that.$menuInner.find('.selected').removeClass('selected');
+ that.setSelected(clickedIndex, true);
+ } else if (maxOptionsGrp && maxOptionsGrp == 1) {
+ $optgroup.find('option:selected').prop('selected', false);
+ $option.prop('selected', true);
+ var optgroupID = $this.parent().data('optgroup');
+ that.$menuInner.find('[data-optgroup="' + optgroupID + '"]').removeClass('selected');
+ that.setSelected(clickedIndex, true);
+ } else {
+ var maxOptionsText = typeof that.options.maxOptionsText === 'string' ? [that.options.maxOptionsText, that.options.maxOptionsText] : that.options.maxOptionsText,
+ maxOptionsArr = typeof maxOptionsText === 'function' ? maxOptionsText(maxOptions, maxOptionsGrp) : maxOptionsText,
+ maxTxt = maxOptionsArr[0].replace('{n}', maxOptions),
+ maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp),
+ $notify = $('
');
+ // If {var} is set in array, replace it
+ /** @deprecated */
+ if (maxOptionsArr[2]) {
+ maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]);
+ maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]);
+ }
+
+ $option.prop('selected', false);
+
+ that.$menu.append($notify);
+
+ if (maxOptions && maxReached) {
+ $notify.append($('' + maxTxt + '
'));
+ triggerChange = false;
+ that.$element.trigger('maxReached.bs.select');
+ }
+
+ if (maxOptionsGrp && maxReachedGrp) {
+ $notify.append($('' + maxTxtGrp + '
'));
+ triggerChange = false;
+ that.$element.trigger('maxReachedGrp.bs.select');
+ }
+
+ setTimeout(function () {
+ that.setSelected(clickedIndex, false);
+ }, 10);
+
+ $notify.delay(750).fadeOut(300, function () {
+ $(this).remove();
+ });
+ }
+ }
+ }
+ }
+
+ if (!that.multiple || (that.multiple && that.options.maxOptions === 1)) {
+ that.$button.focus();
+ } else if (that.options.liveSearch) {
+ that.$searchbox.focus();
+ }
+
+ // Trigger select 'change'
+ if (triggerChange) {
+ if ((prevValue != that.$element.val() && that.multiple) || (prevIndex != that.$element.prop('selectedIndex') && !that.multiple)) {
+ // $option.prop('selected') is current option state (selected/unselected). state is previous option state.
+ changed_arguments = [clickedIndex, $option.prop('selected'), state];
+ that.$element
+ .triggerNative('change');
+ }
+ }
+ }
+ });
+
+ this.$menu.on('click', 'li.disabled a, .popover-title, .popover-title :not(.close)', function (e) {
+ if (e.currentTarget == this) {
+ e.preventDefault();
+ e.stopPropagation();
+ if (that.options.liveSearch && !$(e.target).hasClass('close')) {
+ that.$searchbox.focus();
+ } else {
+ that.$button.focus();
+ }
+ }
+ });
+
+ this.$menuInner.on('click', '.divider, .dropdown-header', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+ if (that.options.liveSearch) {
+ that.$searchbox.focus();
+ } else {
+ that.$button.focus();
+ }
+ });
+
+ this.$menu.on('click', '.popover-title .close', function () {
+ that.$button.click();
+ });
+
+ this.$searchbox.on('click', function (e) {
+ e.stopPropagation();
+ });
+
+ this.$menu.on('click', '.actions-btn', function (e) {
+ if (that.options.liveSearch) {
+ that.$searchbox.focus();
+ } else {
+ that.$button.focus();
+ }
+
+ e.preventDefault();
+ e.stopPropagation();
+
+ if ($(this).hasClass('bs-select-all')) {
+ that.selectAll();
+ } else {
+ that.deselectAll();
+ }
+ });
+
+ this.$element.change(function () {
+ that.render(false);
+ that.$element.trigger('changed.bs.select', changed_arguments);
+ changed_arguments = null;
+ });
+ },
+
+ liveSearchListener: function () {
+ var that = this,
+ $no_results = $(' ');
+
+ this.$button.on('click.dropdown.data-api', function () {
+ that.$menuInner.find('.active').removeClass('active');
+ if (!!that.$searchbox.val()) {
+ that.$searchbox.val('');
+ that.$lis.not('.is-hidden').removeClass('hidden');
+ if (!!$no_results.parent().length) $no_results.remove();
+ }
+ if (!that.multiple) that.$menuInner.find('.selected').addClass('active');
+ setTimeout(function () {
+ that.$searchbox.focus();
+ }, 10);
+ });
+
+ this.$searchbox.on('click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api', function (e) {
+ e.stopPropagation();
+ });
+
+ this.$searchbox.on('input propertychange', function () {
+ that.$lis.not('.is-hidden').removeClass('hidden');
+ that.$lis.filter('.active').removeClass('active');
+ $no_results.remove();
+
+ if (that.$searchbox.val()) {
+ var $searchBase = that.$lis.not('.is-hidden, .divider, .dropdown-header'),
+ $hideItems;
+ if (that.options.liveSearchNormalize) {
+ $hideItems = $searchBase.not(':a' + that._searchStyle() + '("' + normalizeToBase(that.$searchbox.val()) + '")');
+ } else {
+ $hideItems = $searchBase.not(':' + that._searchStyle() + '("' + that.$searchbox.val() + '")');
+ }
+
+ if ($hideItems.length === $searchBase.length) {
+ $no_results.html(that.options.noneResultsText.replace('{0}', '"' + htmlEscape(that.$searchbox.val()) + '"'));
+ that.$menuInner.append($no_results);
+ that.$lis.addClass('hidden');
+ } else {
+ $hideItems.addClass('hidden');
+
+ var $lisVisible = that.$lis.not('.hidden'),
+ $foundDiv;
+
+ // hide divider if first or last visible, or if followed by another divider
+ $lisVisible.each(function (index) {
+ var $this = $(this);
+
+ if ($this.hasClass('divider')) {
+ if ($foundDiv === undefined) {
+ $this.addClass('hidden');
+ } else {
+ if ($foundDiv) $foundDiv.addClass('hidden');
+ $foundDiv = $this;
+ }
+ } else if ($this.hasClass('dropdown-header') && $lisVisible.eq(index + 1).data('optgroup') !== $this.data('optgroup')) {
+ $this.addClass('hidden');
+ } else {
+ $foundDiv = null;
+ }
+ });
+ if ($foundDiv) $foundDiv.addClass('hidden');
+
+ $searchBase.not('.hidden').first().addClass('active');
+ }
+ }
+ });
+ },
+
+ _searchStyle: function () {
+ var styles = {
+ begins: 'ibegins',
+ startsWith: 'ibegins'
+ };
+
+ return styles[this.options.liveSearchStyle] || 'icontains';
+ },
+
+ val: function (value) {
+ if (typeof value !== 'undefined') {
+ this.$element.val(value);
+ this.render();
+
+ return this.$element;
+ } else {
+ return this.$element.val();
+ }
+ },
+
+ changeAll: function (status) {
+ if (!this.multiple) return;
+ if (typeof status === 'undefined') status = true;
+
+ this.findLis();
+
+ var $options = this.$element.find('option'),
+ $lisVisible = this.$lis.not('.divider, .dropdown-header, .disabled, .hidden'),
+ lisVisLen = $lisVisible.length,
+ selectedOptions = [];
+
+ if (status) {
+ if ($lisVisible.filter('.selected').length === $lisVisible.length) return;
+ } else {
+ if ($lisVisible.filter('.selected').length === 0) return;
+ }
+
+ $lisVisible.toggleClass('selected', status);
+
+ for (var i = 0; i < lisVisLen; i++) {
+ var origIndex = $lisVisible[i].getAttribute('data-original-index');
+ selectedOptions[selectedOptions.length] = $options.eq(origIndex)[0];
+ }
+
+ $(selectedOptions).prop('selected', status);
+
+ this.render(false);
+
+ this.togglePlaceholder();
+
+ this.$element
+ .triggerNative('change');
+ },
+
+ selectAll: function () {
+ return this.changeAll(true);
+ },
+
+ deselectAll: function () {
+ return this.changeAll(false);
+ },
+
+ toggle: function (e) {
+ e = e || window.event;
+
+ if (e) e.stopPropagation();
+
+ this.$button.trigger('click');
+ },
+
+ keydown: function (e) {
+ var $this = $(this),
+ $parent = $this.is('input') ? $this.parent().parent() : $this.parent(),
+ $items,
+ that = $parent.data('this'),
+ index,
+ next,
+ first,
+ last,
+ prev,
+ nextPrev,
+ prevIndex,
+ isActive,
+ selector = ':not(.disabled, .hidden, .dropdown-header, .divider)',
+ keyCodeMap = {
+ 32: ' ',
+ 48: '0',
+ 49: '1',
+ 50: '2',
+ 51: '3',
+ 52: '4',
+ 53: '5',
+ 54: '6',
+ 55: '7',
+ 56: '8',
+ 57: '9',
+ 59: ';',
+ 65: 'a',
+ 66: 'b',
+ 67: 'c',
+ 68: 'd',
+ 69: 'e',
+ 70: 'f',
+ 71: 'g',
+ 72: 'h',
+ 73: 'i',
+ 74: 'j',
+ 75: 'k',
+ 76: 'l',
+ 77: 'm',
+ 78: 'n',
+ 79: 'o',
+ 80: 'p',
+ 81: 'q',
+ 82: 'r',
+ 83: 's',
+ 84: 't',
+ 85: 'u',
+ 86: 'v',
+ 87: 'w',
+ 88: 'x',
+ 89: 'y',
+ 90: 'z',
+ 96: '0',
+ 97: '1',
+ 98: '2',
+ 99: '3',
+ 100: '4',
+ 101: '5',
+ 102: '6',
+ 103: '7',
+ 104: '8',
+ 105: '9'
+ };
+
+ if (that.options.liveSearch) $parent = $this.parent().parent();
+
+ if (that.options.container) $parent = that.$menu;
+
+ $items = $('[role="listbox"] li', $parent);
+
+ isActive = that.$newElement.hasClass('open');
+
+ if (!isActive && (e.keyCode >= 48 && e.keyCode <= 57 || e.keyCode >= 96 && e.keyCode <= 105 || e.keyCode >= 65 && e.keyCode <= 90)) {
+ if (!that.options.container) {
+ that.setSize();
+ that.$menu.parent().addClass('open');
+ isActive = true;
+ } else {
+ that.$button.trigger('click');
+ }
+ that.$searchbox.focus();
+ return;
+ }
+
+ if (that.options.liveSearch) {
+ if (/(^9$|27)/.test(e.keyCode.toString(10)) && isActive) {
+ e.preventDefault();
+ e.stopPropagation();
+ that.$menuInner.click();
+ that.$button.focus();
+ }
+ // $items contains li elements when liveSearch is enabled
+ $items = $('[role="listbox"] li' + selector, $parent);
+ if (!$this.val() && !/(38|40)/.test(e.keyCode.toString(10))) {
+ if ($items.filter('.active').length === 0) {
+ $items = that.$menuInner.find('li');
+ if (that.options.liveSearchNormalize) {
+ $items = $items.filter(':a' + that._searchStyle() + '(' + normalizeToBase(keyCodeMap[e.keyCode]) + ')');
+ } else {
+ $items = $items.filter(':' + that._searchStyle() + '(' + keyCodeMap[e.keyCode] + ')');
+ }
+ }
+ }
+ }
+
+ if (!$items.length) return;
+
+ if (/(38|40)/.test(e.keyCode.toString(10))) {
+ index = $items.index($items.find('a').filter(':focus').parent());
+ first = $items.filter(selector).first().index();
+ last = $items.filter(selector).last().index();
+ next = $items.eq(index).nextAll(selector).eq(0).index();
+ prev = $items.eq(index).prevAll(selector).eq(0).index();
+ nextPrev = $items.eq(next).prevAll(selector).eq(0).index();
+
+ if (that.options.liveSearch) {
+ $items.each(function (i) {
+ if (!$(this).hasClass('disabled')) {
+ $(this).data('index', i);
+ }
+ });
+ index = $items.index($items.filter('.active'));
+ first = $items.first().data('index');
+ last = $items.last().data('index');
+ next = $items.eq(index).nextAll().eq(0).data('index');
+ prev = $items.eq(index).prevAll().eq(0).data('index');
+ nextPrev = $items.eq(next).prevAll().eq(0).data('index');
+ }
+
+ prevIndex = $this.data('prevIndex');
+
+ if (e.keyCode == 38) {
+ if (that.options.liveSearch) index--;
+ if (index != nextPrev && index > prev) index = prev;
+ if (index < first) index = first;
+ if (index == prevIndex) index = last;
+ } else if (e.keyCode == 40) {
+ if (that.options.liveSearch) index++;
+ if (index == -1) index = 0;
+ if (index != nextPrev && index < next) index = next;
+ if (index > last) index = last;
+ if (index == prevIndex) index = first;
+ }
+
+ $this.data('prevIndex', index);
+
+ if (!that.options.liveSearch) {
+ $items.eq(index).children('a').focus();
+ } else {
+ e.preventDefault();
+ if (!$this.hasClass('dropdown-toggle')) {
+ $items.removeClass('active').eq(index).addClass('active').children('a').focus();
+ $this.focus();
+ }
+ }
+
+ } else if (!$this.is('input')) {
+ var keyIndex = [],
+ count,
+ prevKey;
+
+ $items.each(function () {
+ if (!$(this).hasClass('disabled')) {
+ if ($.trim($(this).children('a').text().toLowerCase()).substring(0, 1) == keyCodeMap[e.keyCode]) {
+ keyIndex.push($(this).index());
+ }
+ }
+ });
+
+ count = $(document).data('keycount');
+ count++;
+ $(document).data('keycount', count);
+
+ prevKey = $.trim($(':focus').text().toLowerCase()).substring(0, 1);
+
+ if (prevKey != keyCodeMap[e.keyCode]) {
+ count = 1;
+ $(document).data('keycount', count);
+ } else if (count >= keyIndex.length) {
+ $(document).data('keycount', 0);
+ if (count > keyIndex.length) count = 1;
+ }
+
+ $items.eq(keyIndex[count - 1]).children('a').focus();
+ }
+
+ // Select focused option if "Enter", "Spacebar" or "Tab" (when selectOnTab is true) are pressed inside the menu.
+ if ((/(13|32)/.test(e.keyCode.toString(10)) || (/(^9$)/.test(e.keyCode.toString(10)) && that.options.selectOnTab)) && isActive) {
+ if (!/(32)/.test(e.keyCode.toString(10))) e.preventDefault();
+ if (!that.options.liveSearch) {
+ var elem = $(':focus');
+ elem.click();
+ // Bring back focus for multiselects
+ elem.focus();
+ // Prevent screen from scrolling if the user hit the spacebar
+ e.preventDefault();
+ // Fixes spacebar selection of dropdown items in FF & IE
+ $(document).data('spaceSelect', true);
+ } else if (!/(32)/.test(e.keyCode.toString(10))) {
+ that.$menuInner.find('.active a').click();
+ $this.focus();
+ }
+ $(document).data('keycount', 0);
+ }
+
+ if ((/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && (that.multiple || that.options.liveSearch)) || (/(27)/.test(e.keyCode.toString(10)) && !isActive)) {
+ that.$menu.parent().removeClass('open');
+ if (that.options.container) that.$newElement.removeClass('open');
+ that.$button.focus();
+ }
+ },
+
+ mobile: function () {
+ this.$element.addClass('mobile-device');
+ },
+
+ refresh: function () {
+ this.$lis = null;
+ this.liObj = {};
+ this.reloadLi();
+ this.render();
+ this.checkDisabled();
+ this.liHeight(true);
+ this.setStyle();
+ this.setWidth();
+ if (this.$lis) this.$searchbox.trigger('propertychange');
+
+ this.$element.trigger('refreshed.bs.select');
+ },
+
+ hide: function () {
+ this.$newElement.hide();
+ },
+
+ show: function () {
+ this.$newElement.show();
+ },
+
+ remove: function () {
+ this.$newElement.remove();
+ this.$element.remove();
+ },
+
+ destroy: function () {
+ this.$newElement.before(this.$element).remove();
+
+ if (this.$bsContainer) {
+ this.$bsContainer.remove();
+ } else {
+ this.$menu.remove();
+ }
+
+ this.$element
+ .off('.bs.select')
+ .removeData('selectpicker')
+ .removeClass('bs-select-hidden selectpicker');
+ }
+ };
+
+ // SELECTPICKER PLUGIN DEFINITION
+ // ==============================
+ function Plugin(option, event) {
+ // get the args of the outer function..
+ var args = arguments;
+ // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them
+ // to get lost/corrupted in android 2.3 and IE9 #715 #775
+ var _option = option,
+ _event = event;
+ [].shift.apply(args);
+
+ var value;
+ var chain = this.each(function () {
+ var $this = $(this);
+ if ($this.is('select')) {
+ var data = $this.data('selectpicker'),
+ options = typeof _option == 'object' && _option;
+
+ if (!data) {
+ var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, $this.data(), options);
+ config.template = $.extend({}, Selectpicker.DEFAULTS.template, ($.fn.selectpicker.defaults ? $.fn.selectpicker.defaults.template : {}), $this.data().template, options.template);
+ $this.data('selectpicker', (data = new Selectpicker(this, config, _event)));
+ } else if (options) {
+ for (var i in options) {
+ if (options.hasOwnProperty(i)) {
+ data.options[i] = options[i];
+ }
+ }
+ }
+
+ if (typeof _option == 'string') {
+ if (data[_option] instanceof Function) {
+ value = data[_option].apply(data, args);
+ } else {
+ value = data.options[_option];
+ }
+ }
+ }
+ });
+
+ if (typeof value !== 'undefined') {
+ //noinspection JSUnusedAssignment
+ return value;
+ } else {
+ return chain;
+ }
+ }
+
+ var old = $.fn.selectpicker;
+ $.fn.selectpicker = Plugin;
+ $.fn.selectpicker.Constructor = Selectpicker;
+
+ // SELECTPICKER NO CONFLICT
+ // ========================
+ $.fn.selectpicker.noConflict = function () {
+ $.fn.selectpicker = old;
+ return this;
+ };
+
+ $(document)
+ .data('keycount', 0)
+ .on('keydown.bs.select', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="listbox"], .bs-searchbox input', Selectpicker.prototype.keydown)
+ .on('focusin.modal', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="listbox"], .bs-searchbox input', function (e) {
+ e.stopPropagation();
+ });
+
+ // SELECTPICKER DATA-API
+ // =====================
+ $(window).on('load.bs.select.data-api', function () {
+ $('.selectpicker').each(function () {
+ var $selectpicker = $(this);
+ Plugin.call($selectpicker, $selectpicker.data());
+ })
+ });
+})(jQuery);
+
+
+}));
diff --git a/trunk/src/AppBundle/Resources/public/js/custom.js b/trunk/src/AppBundle/Resources/public/js/custom.js
new file mode 100644
index 00000000..75c7c055
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/js/custom.js
@@ -0,0 +1,342 @@
+(function($) {
+ "use strict";
+
+ /* ==============================================
+ HEADER STICKY -->
+ =============================================== */
+
+ var navbarCollapse = false;
+
+ $(window).scroll(function() {
+ if(!navbarCollapse){
+ if ($(this).scrollTop() > 1){
+ $('header').addClass("sticky");
+ }
+ else{
+ $('header').removeClass("sticky");
+ }
+ }
+ });
+
+
+ $('#navbar-collapse').on('shown.bs.collapse', function () {
+ navbarCollapse = true;
+ $('header').removeClass("sticky");
+ $(window).scrollTop(0);
+
+ });
+
+ $('#navbar-collapse').on('hide.bs.collapse', function () {
+ navbarCollapse = false;
+ });
+
+
+ /* ==============================================
+ nav-tabs -->
+ =============================================== */
+ var hidWidth;
+ var scrollBarWidths = 40;
+ var windowW = $(window).width();
+
+
+ var widthOfList = function(){
+ var itemsWidth = 0;
+ $('.list-nav-tabs li').each(function(){
+ var itemWidth = $(this).outerWidth();
+ itemsWidth+=itemWidth;
+ });
+ return itemsWidth;
+ };
+
+ var widthOfHidden = function(){
+ return (($('.wrapper-nav-tabs').outerWidth())-widthOfList()-getLeftPosi())-scrollBarWidths;
+ };
+
+ var getLeftPosi = function(){
+ if($('.list-nav-tabs').length){
+ return $('.list-nav-tabs').position().left;
+ }else{
+ return 0;
+ }
+ };
+
+ var reAdjust = function(){
+ if (($('.wrapper-nav-tabs').outerWidth()) < widthOfList()) {
+ $('.scroller-right-nav-tabs').show();
+ }
+ else {
+ $('.scroller-right-nav-tabs').hide();
+ }
+
+ if (getLeftPosi()<0) {
+ $('.scroller-left-nav-tabs').show();
+ }
+ else {
+ $('.item').animate({left:"-="+getLeftPosi()+"px"},'slow');
+ $('.scroller-left-nav-tabs').hide();
+ }
+ }
+
+ if(windowW <= 992){
+ reAdjust();
+ }
+ $(window).on('resize',function(e){
+ var windowW = $(window).width();
+ if(windowW <= 992){
+ reAdjust();
+ }else{
+ $('.scroller-right-nav-tabs').hide();
+ $('.scroller-left-nav-tabs').hide();
+ }
+ });
+
+
+ $('.scroller-right-nav-tabs').click(function() {
+
+ if(((getLeftPosi()*-1) + $('.wrapper-nav-tabs').outerWidth()) < (widthOfHidden()*-1)){
+ $('.scroller-left-nav-tabs').fadeIn('slow');
+ $('.list-nav-tabs').animate({left:"+="+($('.wrapper-nav-tabs').outerWidth()*-1)+"px"},'slow',function(){
+
+ });
+ }else{
+ $('.scroller-left-nav-tabs').fadeIn('slow');
+ $('.scroller-right-nav-tabs').fadeOut('slow');
+ $('.list-nav-tabs').animate({left:"+="+widthOfHidden()+"px"},'slow',function(){
+
+ });
+ }
+
+ });
+
+ $('.scroller-left-nav-tabs').click(function() {
+
+
+
+ if(((getLeftPosi()) + $('.wrapper-nav-tabs').outerWidth()) < 0){
+ $('.scroller-left-nav-tabs').fadeIn('slow');
+ $('.list-nav-tabs').animate({left:"-="+($('.wrapper-nav-tabs').outerWidth()*-1)+"px"},'slow',function(){
+
+ });
+ }else{
+ $('.scroller-right-nav-tabs').fadeIn('slow');
+ $('.scroller-left-nav-tabs').fadeOut('slow');
+ $('.list-nav-tabs').animate({left:"-="+getLeftPosi()+"px"},'slow',function(){
+ $('.list-nav-tabs').css({'left': 0});
+ });
+ }
+
+
+ });
+
+ /* ==============================================
+ MENU HOVER -->
+ =============================================== */
+ if($(window).width() > 768){
+ $(".header .dropdown:not(.openClick)").hover(
+ function() {
+ $(".dropdown.openClick").removeClass('open');
+ $('.dropdown-menu', this).stop( true, true ).slideDown("fast");
+ $('.bootstrap-select.open').removeClass('open');
+ $(this).toggleClass('open');
+ },
+ function() {
+ $('.dropdown-menu', this).stop( true, true ).slideUp("fast");
+ $(this).toggleClass('open');
+ }
+ );
+ }
+
+
+
+
+ /* ==============================================
+ collapse_open -->
+ =============================================== */
+
+ function collapse_open(){
+ var windowW = $(window).width();
+ if(windowW <= 768){
+ $('.collapse-widget').addClass('collapsed');
+ $('.collapse-widget').parents('.widget').find('.collapse').removeClass('in');
+ }else{
+ $('.collapse-widget').removeClass('collapsed');
+ $('.collapse-widget').parents('.widget').find('.collapse').addClass('in');
+ }
+
+ }
+
+ var $frist = false;
+ $(window).resize(function() {
+ if(!$first){
+ var $first = true;
+ collapse_open();
+ }
+ });
+ collapse_open();
+
+
+ /* ==============================================
+ nav-tabs -->
+ =============================================== */
+ $('.nav-tabs li a').click(function (e) {
+ //get selected href
+ var href = $(this).attr('href');
+
+ //set all nav tabs to inactive
+ $('.nav-tabs li').removeClass('active');
+
+ //get all nav tabs matching the href and set to active
+ $('.nav-tabs li a[href="'+href+'"]').closest('li').addClass('active');
+
+ //active tab
+ $('.tab-pane').removeClass('active');
+ $('.tab-pane'+href).addClass('active');
+
+ if($(this).parents('.nav-tabs-bottom').length){
+ $('html, body').animate({
+ scrollTop: ($(".content-copy").offset().top + 200)
+ }, 500);
+ }
+
+ })
+
+ /* ==============================================
+ tooltip -->
+ =============================================== */
+
+ $(function () {
+ $('[data-toggle="tooltip"]').tooltip()
+ })
+
+ /* ==============================================
+ carousel -->
+ =============================================== */
+
+ $('.carousel').carousel({
+ interval: 5000 //changes the speed
+ })
+
+ /* ==============================================
+ ACCORDION -->
+ =============================================== */
+
+ function toggleChevron(e) {
+ console.log(e.target);
+ var $i = $(e.target)
+ .parent('.panel-group')
+ .find("i.indicator");
+
+ $i.toggleClass('icon-minus icon-plus');
+
+ if($i.hasClass('icon-minus')){
+ $i.parent('h3').find('span').html('Reiseleistungen ausblenden');
+ }
+ if($i.hasClass('icon-plus')){
+ $i.parent('h3').find('span').html('Reiseleistungen einblenden');
+ }
+ }
+ $('#accordion').on('hidden.bs.collapse', toggleChevron);
+ $('#accordion').on('shown.bs.collapse', toggleChevron);
+
+
+ /* ==============================================
+ LIGHTBOX -->
+ =============================================== */
+
+ /*
+ jQuery('a[data-gal]').each(function() {
+ jQuery(this).attr('rel', jQuery(this).data('gal'));
+ });
+ jQuery("a[data-gal^='prettyPhoto']").prettyPhoto({animationSpeed:'slow',slideshow:false,overlay_gallery: false,theme:'light_square',social_tools:false,deeplinking:false});
+ */
+ /* ==============================================
+ CAROUSEL -->
+ =============================================== */
+
+ $('.owl-fullwidth').owlCarousel({
+ loop:true,
+ margin:0,
+ nav:true,
+ dots:false,
+ navText: [
+ "
",
+ "
"],
+ responsive:{
+ 0:{
+ items:1
+ },
+ 600:{
+ items:2
+ },
+ 1000:{
+ items:3
+ }
+ }
+ })
+
+ /* ==============================================
+ BOX LINK -->
+ =============================================== */
+
+ $('.get-box-link').click(function(){
+ location.href = $(this).find('.is-box-link').attr('href');
+ });
+
+ function resize_box (){
+ $('.owl-fullwidth:not(.noresize)').each(function(){
+ var boxes = $(this).find('.hl5');
+ var maxHeight = Math.max.apply(
+ Math, boxes.map(function() {
+ return $(this).height();
+ }).get());
+ boxes.height(maxHeight);
+ });
+
+ $('a.item-button').each(function(){
+ $(this).removeClass('single_line');
+ $(this).removeClass('dobble_line');
+ if($(this).height() <= 36){
+ $(this).addClass('single_line');
+ }else{
+ $(this).addClass('dobble_line');
+ }
+ });
+
+
+ }
+ resize_box();
+
+ $(window).resize(function() {
+ resize_box();
+ });
+
+ /* ==============================================
+ DATAPICKER -->
+ =============================================== */
+
+ $(".datepicker").each(function(){
+ var windowW = $(window).width();
+ if(windowW <= 768){
+ $(this).attr('readonly', 'true');
+ }
+ });
+ $( ".datepicker" ).datepicker({
+ dateFormat: 'dd.mm.yy', prevText: '<zurück', prevStatus: '',
+ prevJumpText: '<<', prevJumpStatus: '',
+ nextText: 'Vor>', nextStatus: '',
+ nextJumpText: '>>', nextJumpStatus: '',
+ currentText: 'heute', currentStatus: '',
+ todayText: 'heute', todayStatus: '',
+ clearText: '-', clearStatus: '',
+ closeText: 'schließen', closeStatus: '',
+ monthNames: ['Januar','Februar','März','April','Mai','Juni',
+ 'Juli','August','September','Oktober','November','Dezember'],
+ monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
+ 'Jul','Aug','Sep','Okt','Nov','Dez'],
+ dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
+ dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+ dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+ firstDay: 1
+ });
+
+ })(jQuery);
\ No newline at end of file
diff --git a/trunk/src/AppBundle/Resources/public/js/custom.js.bak b/trunk/src/AppBundle/Resources/public/js/custom.js.bak
new file mode 100644
index 00000000..17ed83c9
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/js/custom.js.bak
@@ -0,0 +1,316 @@
+(function($) {
+ "use strict";
+
+ /* ==============================================
+ HEADER STICKY -->
+ =============================================== */
+
+ $(window).scroll(function() {
+ if ($(this).scrollTop() > 1){
+ $('header').addClass("sticky");
+ }
+ else{
+ $('header').removeClass("sticky");
+ }
+ });
+
+
+ /* ==============================================
+ nav-tabs -->
+ =============================================== */
+ var hidWidth;
+ var scrollBarWidths = 40;
+ var windowW = $(window).width();
+
+ var widthOfList = function(){
+ var itemsWidth = 0;
+ $('.list-nav-tabs li').each(function(){
+ var itemWidth = $(this).outerWidth();
+ itemsWidth+=itemWidth;
+ });
+ return itemsWidth;
+ };
+
+ var widthOfHidden = function(){
+ return (($('.wrapper-nav-tabs').outerWidth())-widthOfList()-getLeftPosi())-scrollBarWidths;
+ };
+
+ var getLeftPosi = function(){
+ if($('.list-nav-tabs').length){
+ return $('.list-nav-tabs').position().left;
+ }else{
+ return 0;
+ }
+ };
+
+ var reAdjust = function(){
+ if (($('.wrapper-nav-tabs').outerWidth()) < widthOfList()) {
+ $('.scroller-right-nav-tabs').show();
+ }
+ else {
+ $('.scroller-right-nav-tabs').hide();
+ }
+
+ if (getLeftPosi()<0) {
+ $('.scroller-left-nav-tabs').show();
+ }
+ else {
+ $('.item').animate({left:"-="+getLeftPosi()+"px"},'slow');
+ $('.scroller-left-nav-tabs').hide();
+ }
+ }
+
+ if(windowW <= 992){
+ reAdjust();
+ }
+ $(window).on('resize',function(e){
+ var windowW = $(window).width();
+ if(windowW <= 992){
+ reAdjust();
+ }else{
+ $('.scroller-right-nav-tabs').hide();
+ $('.scroller-left-nav-tabs').hide();
+ }
+ });
+
+
+ $('.scroller-right-nav-tabs').click(function() {
+
+ if(((getLeftPosi()*-1) + $('.wrapper-nav-tabs').outerWidth()) < (widthOfHidden()*-1)){
+ $('.scroller-left-nav-tabs').fadeIn('slow');
+ $('.list-nav-tabs').animate({left:"+="+($('.wrapper-nav-tabs').outerWidth()*-1)+"px"},'slow',function(){
+
+ });
+ }else{
+ $('.scroller-left-nav-tabs').fadeIn('slow');
+ $('.scroller-right-nav-tabs').fadeOut('slow');
+ $('.list-nav-tabs').animate({left:"+="+widthOfHidden()+"px"},'slow',function(){
+
+ });
+ }
+
+ });
+
+ $('.scroller-left-nav-tabs').click(function() {
+
+
+
+ if(((getLeftPosi()) + $('.wrapper-nav-tabs').outerWidth()) < 0){
+ $('.scroller-left-nav-tabs').fadeIn('slow');
+ $('.list-nav-tabs').animate({left:"-="+($('.wrapper-nav-tabs').outerWidth()*-1)+"px"},'slow',function(){
+
+ });
+ }else{
+ $('.scroller-right-nav-tabs').fadeIn('slow');
+ $('.scroller-left-nav-tabs').fadeOut('slow');
+ $('.list-nav-tabs').animate({left:"-="+getLeftPosi()+"px"},'slow',function(){
+ $('.list-nav-tabs').css({'left': 0});
+ });
+ }
+
+
+ });
+
+ /* ==============================================
+ MENU HOVER -->
+ =============================================== */
+
+ $(".header .dropdown:not(.openClick)").hover(
+ function() {
+ $(".dropdown.openClick").removeClass('open');
+ $('.dropdown-menu', this).stop( true, true ).slideDown("fast");
+ $(this).toggleClass('open');
+ },
+ function() {
+ if(!$(".dropdown-toggle").hasClass('selectpicker')){
+ $(".dropdown-toggle").dropdown('toggle');
+ }
+ $('.dropdown-menu', this).stop( true, true ).slideUp("fast");
+ $(this).toggleClass('open');
+ }
+ );
+
+
+
+
+
+ /* ==============================================
+ collapse_open -->
+ =============================================== */
+
+ function collapse_open(){
+ var windowW = $(window).width();
+ if(windowW <= 768){
+ $('.collapse-widget').addClass('collapsed');
+ $('.collapse-widget').parents('.widget').find('.collapse').removeClass('in');
+ }else{
+ $('.collapse-widget').removeClass('collapsed');
+ $('.collapse-widget').parents('.widget').find('.collapse').addClass('in');
+ }
+
+ }
+
+ var $frist = false;
+ $(window).resize(function() {
+ if(!$first){
+ var $first = true;
+ collapse_open();
+ }
+ });
+ collapse_open();
+
+
+ /* ==============================================
+ nav-tabs -->
+ =============================================== */
+ $('.nav-tabs li a').click(function (e) {
+ //get selected href
+ var href = $(this).attr('href');
+
+ //set all nav tabs to inactive
+ $('.nav-tabs li').removeClass('active');
+
+ //get all nav tabs matching the href and set to active
+ $('.nav-tabs li a[href="'+href+'"]').closest('li').addClass('active');
+
+ //active tab
+ $('.tab-pane').removeClass('active');
+ $('.tab-pane'+href).addClass('active');
+
+ if($(this).parents('.nav-tabs-bottom').length){
+ $('html, body').animate({
+ scrollTop: ($(".content-copy").offset().top + 200)
+ }, 500);
+ }
+
+ })
+
+ /* ==============================================
+ tooltip -->
+ =============================================== */
+
+ $(function () {
+ $('[data-toggle="tooltip"]').tooltip()
+ })
+
+ /* ==============================================
+ carousel -->
+ =============================================== */
+
+ $('.carousel').carousel({
+ interval: 5000 //changes the speed
+ })
+
+ /* ==============================================
+ ACCORDION -->
+ =============================================== */
+
+ function toggleChevron(e) {
+ console.log(e.target);
+ var $i = $(e.target)
+ .parent('.panel-group')
+ .find("i.indicator");
+
+ $i.toggleClass('icon-minus icon-plus');
+
+ if($i.hasClass('icon-minus')){
+ $i.parent('h3').find('span').html('Reiseleistungen ausblenden');
+ }
+ if($i.hasClass('icon-plus')){
+ $i.parent('h3').find('span').html('Reiseleistungen einblenden');
+ }
+ }
+ $('#accordion').on('hidden.bs.collapse', toggleChevron);
+ $('#accordion').on('shown.bs.collapse', toggleChevron);
+
+
+ /* ==============================================
+ LIGHTBOX -->
+ =============================================== */
+
+ /*
+ jQuery('a[data-gal]').each(function() {
+ jQuery(this).attr('rel', jQuery(this).data('gal'));
+ });
+ jQuery("a[data-gal^='prettyPhoto']").prettyPhoto({animationSpeed:'slow',slideshow:false,overlay_gallery: false,theme:'light_square',social_tools:false,deeplinking:false});
+ */
+ /* ==============================================
+ CAROUSEL -->
+ =============================================== */
+
+ $('.owl-fullwidth').owlCarousel({
+ loop:true,
+ margin:0,
+ nav:true,
+ dots:false,
+ navText: [
+ "
",
+ "
"],
+ responsive:{
+ 0:{
+ items:1
+ },
+ 600:{
+ items:2
+ },
+ 1000:{
+ items:3
+ }
+ }
+ })
+
+ /* ==============================================
+ BOX LINK -->
+ =============================================== */
+
+ $('.get-box-link').click(function(){
+ location.href = $(this).find('.is-box-link').attr('href');
+ });
+
+ function resize_box (){
+ $('.owl-fullwidth:not(.noresize)').each(function(){
+ var boxes = $(this).find('.hl5');
+ var maxHeight = Math.max.apply(
+ Math, boxes.map(function() {
+ return $(this).height();
+ }).get());
+ boxes.height(maxHeight);
+ });
+
+ }
+ resize_box();
+
+ $(window).resize(function() {
+ resize_box();
+ });
+
+ /* ==============================================
+ DATAPICKER -->
+ =============================================== */
+
+ $(".datepicker").each(function(){
+ var windowW = $(window).width();
+ if(windowW <= 768){
+ $(this).attr('readonly', 'true');
+ }
+ });
+ $( ".datepicker" ).datepicker({
+ dateFormat: 'dd.mm.yy', prevText: '<zurück', prevStatus: '',
+ prevJumpText: '<<', prevJumpStatus: '',
+ nextText: 'Vor>', nextStatus: '',
+ nextJumpText: '>>', nextJumpStatus: '',
+ currentText: 'heute', currentStatus: '',
+ todayText: 'heute', todayStatus: '',
+ clearText: '-', clearStatus: '',
+ closeText: 'schließen', closeStatus: '',
+ monthNames: ['Januar','Februar','März','April','Mai','Juni',
+ 'Juli','August','September','Oktober','November','Dezember'],
+ monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
+ 'Jul','Aug','Sep','Okt','Nov','Dez'],
+ dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
+ dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+ dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+ firstDay: 1
+ });
+
+ })(jQuery);
\ No newline at end of file
diff --git a/trunk/src/AppBundle/Resources/public/js/jquery-3.1.1.js b/trunk/src/AppBundle/Resources/public/js/jquery-3.1.1.js
new file mode 100644
index 00000000..072e3081
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/js/jquery-3.1.1.js
@@ -0,0 +1,10220 @@
+/*!
+ * jQuery JavaScript Library v3.1.1
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2016-09-22T22:30Z
+ */
+( function( global, factory ) {
+
+ "use strict";
+
+ if ( typeof module === "object" && typeof module.exports === "object" ) {
+
+ // For CommonJS and CommonJS-like environments where a proper `window`
+ // is present, execute the factory and get jQuery.
+ // For environments that do not have a `window` with a `document`
+ // (such as Node.js), expose a factory as module.exports.
+ // This accentuates the need for the creation of a real `window`.
+ // e.g. var jQuery = require("jquery")(window);
+ // See ticket #14549 for more info.
+ module.exports = global.document ?
+ factory( global, true ) :
+ function( w ) {
+ if ( !w.document ) {
+ throw new Error( "jQuery requires a window with a document" );
+ }
+ return factory( w );
+ };
+ } else {
+ factory( global );
+ }
+
+// Pass this if window is not defined yet
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+"use strict";
+
+var arr = [];
+
+var document = window.document;
+
+var getProto = Object.getPrototypeOf;
+
+var slice = arr.slice;
+
+var concat = arr.concat;
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
+var support = {};
+
+
+
+ function DOMEval( code, doc ) {
+ doc = doc || document;
+
+ var script = doc.createElement( "script" );
+
+ script.text = code;
+ doc.head.appendChild( script ).parentNode.removeChild( script );
+ }
+/* global Symbol */
+// Defining this global in .eslintrc.json would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+
+
+var
+ version = "3.1.1",
+
+ // Define a local copy of jQuery
+ jQuery = function( selector, context ) {
+
+ // The jQuery object is actually just the init constructor 'enhanced'
+ // Need init if jQuery is called (just allow error to be thrown if not included)
+ return new jQuery.fn.init( selector, context );
+ },
+
+ // Support: Android <=4.0 only
+ // Make sure we trim BOM and NBSP
+ rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+ // Matches dashed string for camelizing
+ rmsPrefix = /^-ms-/,
+ rdashAlpha = /-([a-z])/g,
+
+ // Used by jQuery.camelCase as callback to replace()
+ fcamelCase = function( all, letter ) {
+ return letter.toUpperCase();
+ };
+
+jQuery.fn = jQuery.prototype = {
+
+ // The current version of jQuery being used
+ jquery: version,
+
+ constructor: jQuery,
+
+ // The default length of a jQuery object is 0
+ length: 0,
+
+ toArray: function() {
+ return slice.call( this );
+ },
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function( num ) {
+
+ // Return all the elements in a clean array
+ if ( num == null ) {
+ return slice.call( this );
+ }
+
+ // Return just the one element from the set
+ return num < 0 ? this[ num + this.length ] : this[ num ];
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function( elems ) {
+
+ // Build a new jQuery matched element set
+ var ret = jQuery.merge( this.constructor(), elems );
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Execute a callback for every element in the matched set.
+ each: function( callback ) {
+ return jQuery.each( this, callback );
+ },
+
+ map: function( callback ) {
+ return this.pushStack( jQuery.map( this, function( elem, i ) {
+ return callback.call( elem, i, elem );
+ } ) );
+ },
+
+ slice: function() {
+ return this.pushStack( slice.apply( this, arguments ) );
+ },
+
+ first: function() {
+ return this.eq( 0 );
+ },
+
+ last: function() {
+ return this.eq( -1 );
+ },
+
+ eq: function( i ) {
+ var len = this.length,
+ j = +i + ( i < 0 ? len : 0 );
+ return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+ },
+
+ end: function() {
+ return this.prevObject || this.constructor();
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: push,
+ sort: arr.sort,
+ splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+ var options, name, src, copy, copyIsArray, clone,
+ target = arguments[ 0 ] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+
+ // Skip the boolean and the target
+ target = arguments[ i ] || {};
+ i++;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
+ target = {};
+ }
+
+ // Extend jQuery itself if only one argument is passed
+ if ( i === length ) {
+ target = this;
+ i--;
+ }
+
+ for ( ; i < length; i++ ) {
+
+ // Only deal with non-null/undefined values
+ if ( ( options = arguments[ i ] ) != null ) {
+
+ // Extend the base object
+ for ( name in options ) {
+ src = target[ name ];
+ copy = options[ name ];
+
+ // Prevent never-ending loop
+ if ( target === copy ) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+ ( copyIsArray = jQuery.isArray( copy ) ) ) ) {
+
+ if ( copyIsArray ) {
+ copyIsArray = false;
+ clone = src && jQuery.isArray( src ) ? src : [];
+
+ } else {
+ clone = src && jQuery.isPlainObject( src ) ? src : {};
+ }
+
+ // Never move original objects, clone them
+ target[ name ] = jQuery.extend( deep, clone, copy );
+
+ // Don't bring in undefined values
+ } else if ( copy !== undefined ) {
+ target[ name ] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
+
+jQuery.extend( {
+
+ // Unique for each copy of jQuery on the page
+ expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+ // Assume jQuery is ready without the ready module
+ isReady: true,
+
+ error: function( msg ) {
+ throw new Error( msg );
+ },
+
+ noop: function() {},
+
+ isFunction: function( obj ) {
+ return jQuery.type( obj ) === "function";
+ },
+
+ isArray: Array.isArray,
+
+ isWindow: function( obj ) {
+ return obj != null && obj === obj.window;
+ },
+
+ isNumeric: function( obj ) {
+
+ // As of jQuery 3.0, isNumeric is limited to
+ // strings and numbers (primitives or objects)
+ // that can be coerced to finite numbers (gh-2662)
+ var type = jQuery.type( obj );
+ return ( type === "number" || type === "string" ) &&
+
+ // parseFloat NaNs numeric-cast false positives ("")
+ // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+ // subtraction forces infinities to NaN
+ !isNaN( obj - parseFloat( obj ) );
+ },
+
+ isPlainObject: function( obj ) {
+ var proto, Ctor;
+
+ // Detect obvious negatives
+ // Use toString instead of jQuery.type to catch host objects
+ if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+ return false;
+ }
+
+ proto = getProto( obj );
+
+ // Objects with no prototype (e.g., `Object.create( null )`) are plain
+ if ( !proto ) {
+ return true;
+ }
+
+ // Objects with prototype are plain iff they were constructed by a global Object function
+ Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+ return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+ },
+
+ isEmptyObject: function( obj ) {
+
+ /* eslint-disable no-unused-vars */
+ // See https://github.com/eslint/eslint/issues/6125
+ var name;
+
+ for ( name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ type: function( obj ) {
+ if ( obj == null ) {
+ return obj + "";
+ }
+
+ // Support: Android <=2.3 only (functionish RegExp)
+ return typeof obj === "object" || typeof obj === "function" ?
+ class2type[ toString.call( obj ) ] || "object" :
+ typeof obj;
+ },
+
+ // Evaluates a script in a global context
+ globalEval: function( code ) {
+ DOMEval( code );
+ },
+
+ // Convert dashed to camelCase; used by the css and data modules
+ // Support: IE <=9 - 11, Edge 12 - 13
+ // Microsoft forgot to hump their vendor prefix (#9572)
+ camelCase: function( string ) {
+ return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+ },
+
+ nodeName: function( elem, name ) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+ },
+
+ each: function( obj, callback ) {
+ var length, i = 0;
+
+ if ( isArrayLike( obj ) ) {
+ length = obj.length;
+ for ( ; i < length; i++ ) {
+ if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( i in obj ) {
+ if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+ break;
+ }
+ }
+ }
+
+ return obj;
+ },
+
+ // Support: Android <=4.0 only
+ trim: function( text ) {
+ return text == null ?
+ "" :
+ ( text + "" ).replace( rtrim, "" );
+ },
+
+ // results is for internal usage only
+ makeArray: function( arr, results ) {
+ var ret = results || [];
+
+ if ( arr != null ) {
+ if ( isArrayLike( Object( arr ) ) ) {
+ jQuery.merge( ret,
+ typeof arr === "string" ?
+ [ arr ] : arr
+ );
+ } else {
+ push.call( ret, arr );
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function( elem, arr, i ) {
+ return arr == null ? -1 : indexOf.call( arr, elem, i );
+ },
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // push.apply(_, arraylike) throws on ancient WebKit
+ merge: function( first, second ) {
+ var len = +second.length,
+ j = 0,
+ i = first.length;
+
+ for ( ; j < len; j++ ) {
+ first[ i++ ] = second[ j ];
+ }
+
+ first.length = i;
+
+ return first;
+ },
+
+ grep: function( elems, callback, invert ) {
+ var callbackInverse,
+ matches = [],
+ i = 0,
+ length = elems.length,
+ callbackExpect = !invert;
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for ( ; i < length; i++ ) {
+ callbackInverse = !callback( elems[ i ], i );
+ if ( callbackInverse !== callbackExpect ) {
+ matches.push( elems[ i ] );
+ }
+ }
+
+ return matches;
+ },
+
+ // arg is for internal usage only
+ map: function( elems, callback, arg ) {
+ var length, value,
+ i = 0,
+ ret = [];
+
+ // Go through the array, translating each of the items to their new values
+ if ( isArrayLike( elems ) ) {
+ length = elems.length;
+ for ( ; i < length; i++ ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret.push( value );
+ }
+ }
+
+ // Go through every key on the object,
+ } else {
+ for ( i in elems ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret.push( value );
+ }
+ }
+ }
+
+ // Flatten any nested arrays
+ return concat.apply( [], ret );
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ // Bind a function to a context, optionally partially applying any
+ // arguments.
+ proxy: function( fn, context ) {
+ var tmp, args, proxy;
+
+ if ( typeof context === "string" ) {
+ tmp = fn[ context ];
+ context = fn;
+ fn = tmp;
+ }
+
+ // Quick check to determine if target is callable, in the spec
+ // this throws a TypeError, but we will just return undefined.
+ if ( !jQuery.isFunction( fn ) ) {
+ return undefined;
+ }
+
+ // Simulated bind
+ args = slice.call( arguments, 2 );
+ proxy = function() {
+ return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+ };
+
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+ return proxy;
+ },
+
+ now: Date.now,
+
+ // jQuery.support is not used in Core but other projects attach their
+ // properties to it so it needs to exist.
+ support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+ jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( i, name ) {
+ class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+ // Support: real iOS 8.2 only (not reproducible in simulator)
+ // `in` check used to prevent JIT error (gh-2145)
+ // hasOwn isn't used here due to false negatives
+ // regarding Nodelist length in IE
+ var length = !!obj && "length" in obj && obj.length,
+ type = jQuery.type( obj );
+
+ if ( type === "function" || jQuery.isWindow( obj ) ) {
+ return false;
+ }
+
+ return type === "array" || length === 0 ||
+ typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.3.3
+ * https://sizzlejs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2016-08-08
+ */
+(function( window ) {
+
+var i,
+ support,
+ Expr,
+ getText,
+ isXML,
+ tokenize,
+ compile,
+ select,
+ outermostContext,
+ sortInput,
+ hasDuplicate,
+
+ // Local document vars
+ setDocument,
+ document,
+ docElem,
+ documentIsHTML,
+ rbuggyQSA,
+ rbuggyMatches,
+ matches,
+ contains,
+
+ // Instance-specific data
+ expando = "sizzle" + 1 * new Date(),
+ preferredDoc = window.document,
+ dirruns = 0,
+ done = 0,
+ classCache = createCache(),
+ tokenCache = createCache(),
+ compilerCache = createCache(),
+ sortOrder = function( a, b ) {
+ if ( a === b ) {
+ hasDuplicate = true;
+ }
+ return 0;
+ },
+
+ // Instance methods
+ hasOwn = ({}).hasOwnProperty,
+ arr = [],
+ pop = arr.pop,
+ push_native = arr.push,
+ push = arr.push,
+ slice = arr.slice,
+ // Use a stripped-down indexOf as it's faster than native
+ // https://jsperf.com/thor-indexof-vs-for/5
+ indexOf = function( list, elem ) {
+ var i = 0,
+ len = list.length;
+ for ( ; i < len; i++ ) {
+ if ( list[i] === elem ) {
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+ // Regular expressions
+
+ // http://www.w3.org/TR/css3-selectors/#whitespace
+ whitespace = "[\\x20\\t\\r\\n\\f]",
+
+ // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+ identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
+
+ // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+ attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+ // Operator (capture 2)
+ "*([*^$|!~]?=)" + whitespace +
+ // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+ "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+ "*\\]",
+
+ pseudos = ":(" + identifier + ")(?:\\((" +
+ // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+ // 1. quoted (capture 3; capture 4 or capture 5)
+ "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+ // 2. simple (capture 6)
+ "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+ // 3. anything else (capture 2)
+ ".*" +
+ ")\\)|)",
+
+ // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+ rwhitespace = new RegExp( whitespace + "+", "g" ),
+ rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+ rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+ rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+ rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
+
+ rpseudo = new RegExp( pseudos ),
+ ridentifier = new RegExp( "^" + identifier + "$" ),
+
+ matchExpr = {
+ "ID": new RegExp( "^#(" + identifier + ")" ),
+ "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+ "TAG": new RegExp( "^(" + identifier + "|[*])" ),
+ "ATTR": new RegExp( "^" + attributes ),
+ "PSEUDO": new RegExp( "^" + pseudos ),
+ "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+ "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+ "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+ "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+ // For use in libraries implementing .is()
+ // We use this for POS matching in `select`
+ "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+ whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+ },
+
+ rinputs = /^(?:input|select|textarea|button)$/i,
+ rheader = /^h\d$/i,
+
+ rnative = /^[^{]+\{\s*\[native \w/,
+
+ // Easily-parseable/retrievable ID or TAG or CLASS selectors
+ rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+ rsibling = /[+~]/,
+
+ // CSS escapes
+ // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+ runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+ funescape = function( _, escaped, escapedWhitespace ) {
+ var high = "0x" + escaped - 0x10000;
+ // NaN means non-codepoint
+ // Support: Firefox<24
+ // Workaround erroneous numeric interpretation of +"0x"
+ return high !== high || escapedWhitespace ?
+ escaped :
+ high < 0 ?
+ // BMP codepoint
+ String.fromCharCode( high + 0x10000 ) :
+ // Supplemental Plane codepoint (surrogate pair)
+ String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+ },
+
+ // CSS string/identifier serialization
+ // https://drafts.csswg.org/cssom/#common-serializing-idioms
+ rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
+ fcssescape = function( ch, asCodePoint ) {
+ if ( asCodePoint ) {
+
+ // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+ if ( ch === "\0" ) {
+ return "\uFFFD";
+ }
+
+ // Control characters and (dependent upon position) numbers get escaped as code points
+ return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+ }
+
+ // Other potentially-special ASCII characters get backslash-escaped
+ return "\\" + ch;
+ },
+
+ // Used for iframes
+ // See setDocument()
+ // Removing the function wrapper causes a "Permission Denied"
+ // error in IE
+ unloadHandler = function() {
+ setDocument();
+ },
+
+ disabledAncestor = addCombinator(
+ function( elem ) {
+ return elem.disabled === true && ("form" in elem || "label" in elem);
+ },
+ { dir: "parentNode", next: "legend" }
+ );
+
+// Optimize for push.apply( _, NodeList )
+try {
+ push.apply(
+ (arr = slice.call( preferredDoc.childNodes )),
+ preferredDoc.childNodes
+ );
+ // Support: Android<4.0
+ // Detect silently failing push.apply
+ arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+ push = { apply: arr.length ?
+
+ // Leverage slice if possible
+ function( target, els ) {
+ push_native.apply( target, slice.call(els) );
+ } :
+
+ // Support: IE<9
+ // Otherwise append directly
+ function( target, els ) {
+ var j = target.length,
+ i = 0;
+ // Can't trust NodeList.length
+ while ( (target[j++] = els[i++]) ) {}
+ target.length = j - 1;
+ }
+ };
+}
+
+function Sizzle( selector, context, results, seed ) {
+ var m, i, elem, nid, match, groups, newSelector,
+ newContext = context && context.ownerDocument,
+
+ // nodeType defaults to 9, since context defaults to document
+ nodeType = context ? context.nodeType : 9;
+
+ results = results || [];
+
+ // Return early from calls with invalid selector or context
+ if ( typeof selector !== "string" || !selector ||
+ nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+ return results;
+ }
+
+ // Try to shortcut find operations (as opposed to filters) in HTML documents
+ if ( !seed ) {
+
+ if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+ setDocument( context );
+ }
+ context = context || document;
+
+ if ( documentIsHTML ) {
+
+ // If the selector is sufficiently simple, try using a "get*By*" DOM method
+ // (excepting DocumentFragment context, where the methods don't exist)
+ if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
+
+ // ID selector
+ if ( (m = match[1]) ) {
+
+ // Document context
+ if ( nodeType === 9 ) {
+ if ( (elem = context.getElementById( m )) ) {
+
+ // Support: IE, Opera, Webkit
+ // TODO: identify versions
+ // getElementById can match elements by name instead of ID
+ if ( elem.id === m ) {
+ results.push( elem );
+ return results;
+ }
+ } else {
+ return results;
+ }
+
+ // Element context
+ } else {
+
+ // Support: IE, Opera, Webkit
+ // TODO: identify versions
+ // getElementById can match elements by name instead of ID
+ if ( newContext && (elem = newContext.getElementById( m )) &&
+ contains( context, elem ) &&
+ elem.id === m ) {
+
+ results.push( elem );
+ return results;
+ }
+ }
+
+ // Type selector
+ } else if ( match[2] ) {
+ push.apply( results, context.getElementsByTagName( selector ) );
+ return results;
+
+ // Class selector
+ } else if ( (m = match[3]) && support.getElementsByClassName &&
+ context.getElementsByClassName ) {
+
+ push.apply( results, context.getElementsByClassName( m ) );
+ return results;
+ }
+ }
+
+ // Take advantage of querySelectorAll
+ if ( support.qsa &&
+ !compilerCache[ selector + " " ] &&
+ (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+
+ if ( nodeType !== 1 ) {
+ newContext = context;
+ newSelector = selector;
+
+ // qSA looks outside Element context, which is not what we want
+ // Thanks to Andrew Dupont for this workaround technique
+ // Support: IE <=8
+ // Exclude object elements
+ } else if ( context.nodeName.toLowerCase() !== "object" ) {
+
+ // Capture the context ID, setting it first if necessary
+ if ( (nid = context.getAttribute( "id" )) ) {
+ nid = nid.replace( rcssescape, fcssescape );
+ } else {
+ context.setAttribute( "id", (nid = expando) );
+ }
+
+ // Prefix every selector in the list
+ groups = tokenize( selector );
+ i = groups.length;
+ while ( i-- ) {
+ groups[i] = "#" + nid + " " + toSelector( groups[i] );
+ }
+ newSelector = groups.join( "," );
+
+ // Expand context for sibling selectors
+ newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+ context;
+ }
+
+ if ( newSelector ) {
+ try {
+ push.apply( results,
+ newContext.querySelectorAll( newSelector )
+ );
+ return results;
+ } catch ( qsaError ) {
+ } finally {
+ if ( nid === expando ) {
+ context.removeAttribute( "id" );
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // All others
+ return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ * deleting the oldest entry
+ */
+function createCache() {
+ var keys = [];
+
+ function cache( key, value ) {
+ // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+ if ( keys.push( key + " " ) > Expr.cacheLength ) {
+ // Only keep the most recent entries
+ delete cache[ keys.shift() ];
+ }
+ return (cache[ key + " " ] = value);
+ }
+ return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+ fn[ expando ] = true;
+ return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created element and returns a boolean result
+ */
+function assert( fn ) {
+ var el = document.createElement("fieldset");
+
+ try {
+ return !!fn( el );
+ } catch (e) {
+ return false;
+ } finally {
+ // Remove from its parent by default
+ if ( el.parentNode ) {
+ el.parentNode.removeChild( el );
+ }
+ // release memory in IE
+ el = null;
+ }
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+ var arr = attrs.split("|"),
+ i = arr.length;
+
+ while ( i-- ) {
+ Expr.attrHandle[ arr[i] ] = handler;
+ }
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+ var cur = b && a,
+ diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+ a.sourceIndex - b.sourceIndex;
+
+ // Use IE sourceIndex if available on both nodes
+ if ( diff ) {
+ return diff;
+ }
+
+ // Check if b follows a
+ if ( cur ) {
+ while ( (cur = cur.nextSibling) ) {
+ if ( cur === b ) {
+ return -1;
+ }
+ }
+ }
+
+ return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+ return function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === type;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+ return function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && elem.type === type;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for :enabled/:disabled
+ * @param {Boolean} disabled true for :disabled; false for :enabled
+ */
+function createDisabledPseudo( disabled ) {
+
+ // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
+ return function( elem ) {
+
+ // Only certain elements can match :enabled or :disabled
+ // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
+ // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
+ if ( "form" in elem ) {
+
+ // Check for inherited disabledness on relevant non-disabled elements:
+ // * listed form-associated elements in a disabled fieldset
+ // https://html.spec.whatwg.org/multipage/forms.html#category-listed
+ // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
+ // * option elements in a disabled optgroup
+ // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
+ // All such elements have a "form" property.
+ if ( elem.parentNode && elem.disabled === false ) {
+
+ // Option elements defer to a parent optgroup if present
+ if ( "label" in elem ) {
+ if ( "label" in elem.parentNode ) {
+ return elem.parentNode.disabled === disabled;
+ } else {
+ return elem.disabled === disabled;
+ }
+ }
+
+ // Support: IE 6 - 11
+ // Use the isDisabled shortcut property to check for disabled fieldset ancestors
+ return elem.isDisabled === disabled ||
+
+ // Where there is no isDisabled, check manually
+ /* jshint -W018 */
+ elem.isDisabled !== !disabled &&
+ disabledAncestor( elem ) === disabled;
+ }
+
+ return elem.disabled === disabled;
+
+ // Try to winnow out elements that can't be disabled before trusting the disabled property.
+ // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
+ // even exist on them, let alone have a boolean value.
+ } else if ( "label" in elem ) {
+ return elem.disabled === disabled;
+ }
+
+ // Remaining elements are neither :enabled nor :disabled
+ return false;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+ return markFunction(function( argument ) {
+ argument = +argument;
+ return markFunction(function( seed, matches ) {
+ var j,
+ matchIndexes = fn( [], seed.length, argument ),
+ i = matchIndexes.length;
+
+ // Match elements found at the specified indexes
+ while ( i-- ) {
+ if ( seed[ (j = matchIndexes[i]) ] ) {
+ seed[j] = !(matches[j] = seed[j]);
+ }
+ }
+ });
+ });
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+ return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+ // documentElement is verified for cases where it doesn't yet exist
+ // (such as loading iframes in IE - #4833)
+ var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+ return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+ var hasCompare, subWindow,
+ doc = node ? node.ownerDocument || node : preferredDoc;
+
+ // Return early if doc is invalid or already selected
+ if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+ return document;
+ }
+
+ // Update global variables
+ document = doc;
+ docElem = document.documentElement;
+ documentIsHTML = !isXML( document );
+
+ // Support: IE 9-11, Edge
+ // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+ if ( preferredDoc !== document &&
+ (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
+
+ // Support: IE 11, Edge
+ if ( subWindow.addEventListener ) {
+ subWindow.addEventListener( "unload", unloadHandler, false );
+
+ // Support: IE 9 - 10 only
+ } else if ( subWindow.attachEvent ) {
+ subWindow.attachEvent( "onunload", unloadHandler );
+ }
+ }
+
+ /* Attributes
+ ---------------------------------------------------------------------- */
+
+ // Support: IE<8
+ // Verify that getAttribute really returns attributes and not properties
+ // (excepting IE8 booleans)
+ support.attributes = assert(function( el ) {
+ el.className = "i";
+ return !el.getAttribute("className");
+ });
+
+ /* getElement(s)By*
+ ---------------------------------------------------------------------- */
+
+ // Check if getElementsByTagName("*") returns only elements
+ support.getElementsByTagName = assert(function( el ) {
+ el.appendChild( document.createComment("") );
+ return !el.getElementsByTagName("*").length;
+ });
+
+ // Support: IE<9
+ support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+ // Support: IE<10
+ // Check if getElementById returns elements by name
+ // The broken getElementById methods don't pick up programmatically-set names,
+ // so use a roundabout getElementsByName test
+ support.getById = assert(function( el ) {
+ docElem.appendChild( el ).id = expando;
+ return !document.getElementsByName || !document.getElementsByName( expando ).length;
+ });
+
+ // ID filter and find
+ if ( support.getById ) {
+ Expr.filter["ID"] = function( id ) {
+ var attrId = id.replace( runescape, funescape );
+ return function( elem ) {
+ return elem.getAttribute("id") === attrId;
+ };
+ };
+ Expr.find["ID"] = function( id, context ) {
+ if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+ var elem = context.getElementById( id );
+ return elem ? [ elem ] : [];
+ }
+ };
+ } else {
+ Expr.filter["ID"] = function( id ) {
+ var attrId = id.replace( runescape, funescape );
+ return function( elem ) {
+ var node = typeof elem.getAttributeNode !== "undefined" &&
+ elem.getAttributeNode("id");
+ return node && node.value === attrId;
+ };
+ };
+
+ // Support: IE 6 - 7 only
+ // getElementById is not reliable as a find shortcut
+ Expr.find["ID"] = function( id, context ) {
+ if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+ var node, i, elems,
+ elem = context.getElementById( id );
+
+ if ( elem ) {
+
+ // Verify the id attribute
+ node = elem.getAttributeNode("id");
+ if ( node && node.value === id ) {
+ return [ elem ];
+ }
+
+ // Fall back on getElementsByName
+ elems = context.getElementsByName( id );
+ i = 0;
+ while ( (elem = elems[i++]) ) {
+ node = elem.getAttributeNode("id");
+ if ( node && node.value === id ) {
+ return [ elem ];
+ }
+ }
+ }
+
+ return [];
+ }
+ };
+ }
+
+ // Tag
+ Expr.find["TAG"] = support.getElementsByTagName ?
+ function( tag, context ) {
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
+ return context.getElementsByTagName( tag );
+
+ // DocumentFragment nodes don't have gEBTN
+ } else if ( support.qsa ) {
+ return context.querySelectorAll( tag );
+ }
+ } :
+
+ function( tag, context ) {
+ var elem,
+ tmp = [],
+ i = 0,
+ // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+ results = context.getElementsByTagName( tag );
+
+ // Filter out possible comments
+ if ( tag === "*" ) {
+ while ( (elem = results[i++]) ) {
+ if ( elem.nodeType === 1 ) {
+ tmp.push( elem );
+ }
+ }
+
+ return tmp;
+ }
+ return results;
+ };
+
+ // Class
+ Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+ if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+ return context.getElementsByClassName( className );
+ }
+ };
+
+ /* QSA/matchesSelector
+ ---------------------------------------------------------------------- */
+
+ // QSA and matchesSelector support
+
+ // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+ rbuggyMatches = [];
+
+ // qSa(:focus) reports false when true (Chrome 21)
+ // We allow this because of a bug in IE8/9 that throws an error
+ // whenever `document.activeElement` is accessed on an iframe
+ // So, we allow :focus to pass through QSA all the time to avoid the IE error
+ // See https://bugs.jquery.com/ticket/13378
+ rbuggyQSA = [];
+
+ if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
+ // Build QSA regex
+ // Regex strategy adopted from Diego Perini
+ assert(function( el ) {
+ // Select is set to empty string on purpose
+ // This is to test IE's treatment of not explicitly
+ // setting a boolean content attribute,
+ // since its presence should be enough
+ // https://bugs.jquery.com/ticket/12359
+ docElem.appendChild( el ).innerHTML = "
" +
+ "
" +
+ " ";
+
+ // Support: IE8, Opera 11-12.16
+ // Nothing should be selected when empty strings follow ^= or $= or *=
+ // The test attribute must be unknown in Opera but "safe" for WinRT
+ // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+ if ( el.querySelectorAll("[msallowcapture^='']").length ) {
+ rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+ }
+
+ // Support: IE8
+ // Boolean attributes and "value" are not treated correctly
+ if ( !el.querySelectorAll("[selected]").length ) {
+ rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+ }
+
+ // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+ if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+ rbuggyQSA.push("~=");
+ }
+
+ // Webkit/Opera - :checked should return selected option elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ // IE8 throws error here and will not see later tests
+ if ( !el.querySelectorAll(":checked").length ) {
+ rbuggyQSA.push(":checked");
+ }
+
+ // Support: Safari 8+, iOS 8+
+ // https://bugs.webkit.org/show_bug.cgi?id=136851
+ // In-page `selector#id sibling-combinator selector` fails
+ if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
+ rbuggyQSA.push(".#.+[+~]");
+ }
+ });
+
+ assert(function( el ) {
+ el.innerHTML = "
" +
+ "
";
+
+ // Support: Windows 8 Native Apps
+ // The type and name attributes are restricted during .innerHTML assignment
+ var input = document.createElement("input");
+ input.setAttribute( "type", "hidden" );
+ el.appendChild( input ).setAttribute( "name", "D" );
+
+ // Support: IE8
+ // Enforce case-sensitivity of name attribute
+ if ( el.querySelectorAll("[name=d]").length ) {
+ rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+ }
+
+ // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+ // IE8 throws error here and will not see later tests
+ if ( el.querySelectorAll(":enabled").length !== 2 ) {
+ rbuggyQSA.push( ":enabled", ":disabled" );
+ }
+
+ // Support: IE9-11+
+ // IE's :disabled selector does not pick up the children of disabled fieldsets
+ docElem.appendChild( el ).disabled = true;
+ if ( el.querySelectorAll(":disabled").length !== 2 ) {
+ rbuggyQSA.push( ":enabled", ":disabled" );
+ }
+
+ // Opera 10-11 does not throw on post-comma invalid pseudos
+ el.querySelectorAll("*,:x");
+ rbuggyQSA.push(",.*:");
+ });
+ }
+
+ if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+ docElem.webkitMatchesSelector ||
+ docElem.mozMatchesSelector ||
+ docElem.oMatchesSelector ||
+ docElem.msMatchesSelector) )) ) {
+
+ assert(function( el ) {
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9)
+ support.disconnectedMatch = matches.call( el, "*" );
+
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ matches.call( el, "[s!='']:x" );
+ rbuggyMatches.push( "!=", pseudos );
+ });
+ }
+
+ rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+ rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+ /* Contains
+ ---------------------------------------------------------------------- */
+ hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+ // Element contains another
+ // Purposefully self-exclusive
+ // As in, an element does not contain itself
+ contains = hasCompare || rnative.test( docElem.contains ) ?
+ function( a, b ) {
+ var adown = a.nodeType === 9 ? a.documentElement : a,
+ bup = b && b.parentNode;
+ return a === bup || !!( bup && bup.nodeType === 1 && (
+ adown.contains ?
+ adown.contains( bup ) :
+ a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+ ));
+ } :
+ function( a, b ) {
+ if ( b ) {
+ while ( (b = b.parentNode) ) {
+ if ( b === a ) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+
+ /* Sorting
+ ---------------------------------------------------------------------- */
+
+ // Document order sorting
+ sortOrder = hasCompare ?
+ function( a, b ) {
+
+ // Flag for duplicate removal
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ // Sort on method existence if only one input has compareDocumentPosition
+ var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+ if ( compare ) {
+ return compare;
+ }
+
+ // Calculate position if both inputs belong to the same document
+ compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+ a.compareDocumentPosition( b ) :
+
+ // Otherwise we know they are disconnected
+ 1;
+
+ // Disconnected nodes
+ if ( compare & 1 ||
+ (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+ // Choose the first element that is related to our preferred document
+ if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+ return -1;
+ }
+ if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+ return 1;
+ }
+
+ // Maintain original order
+ return sortInput ?
+ ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+ 0;
+ }
+
+ return compare & 4 ? -1 : 1;
+ } :
+ function( a, b ) {
+ // Exit early if the nodes are identical
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ var cur,
+ i = 0,
+ aup = a.parentNode,
+ bup = b.parentNode,
+ ap = [ a ],
+ bp = [ b ];
+
+ // Parentless nodes are either documents or disconnected
+ if ( !aup || !bup ) {
+ return a === document ? -1 :
+ b === document ? 1 :
+ aup ? -1 :
+ bup ? 1 :
+ sortInput ?
+ ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+ 0;
+
+ // If the nodes are siblings, we can do a quick check
+ } else if ( aup === bup ) {
+ return siblingCheck( a, b );
+ }
+
+ // Otherwise we need full lists of their ancestors for comparison
+ cur = a;
+ while ( (cur = cur.parentNode) ) {
+ ap.unshift( cur );
+ }
+ cur = b;
+ while ( (cur = cur.parentNode) ) {
+ bp.unshift( cur );
+ }
+
+ // Walk down the tree looking for a discrepancy
+ while ( ap[i] === bp[i] ) {
+ i++;
+ }
+
+ return i ?
+ // Do a sibling check if the nodes have a common ancestor
+ siblingCheck( ap[i], bp[i] ) :
+
+ // Otherwise nodes in our document sort first
+ ap[i] === preferredDoc ? -1 :
+ bp[i] === preferredDoc ? 1 :
+ 0;
+ };
+
+ return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+ return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+ // Set document vars if needed
+ if ( ( elem.ownerDocument || elem ) !== document ) {
+ setDocument( elem );
+ }
+
+ // Make sure that attribute selectors are quoted
+ expr = expr.replace( rattributeQuotes, "='$1']" );
+
+ if ( support.matchesSelector && documentIsHTML &&
+ !compilerCache[ expr + " " ] &&
+ ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+ ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
+
+ try {
+ var ret = matches.call( elem, expr );
+
+ // IE 9's matchesSelector returns false on disconnected nodes
+ if ( ret || support.disconnectedMatch ||
+ // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9
+ elem.document && elem.document.nodeType !== 11 ) {
+ return ret;
+ }
+ } catch (e) {}
+ }
+
+ return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+ // Set document vars if needed
+ if ( ( context.ownerDocument || context ) !== document ) {
+ setDocument( context );
+ }
+ return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+ // Set document vars if needed
+ if ( ( elem.ownerDocument || elem ) !== document ) {
+ setDocument( elem );
+ }
+
+ var fn = Expr.attrHandle[ name.toLowerCase() ],
+ // Don't get fooled by Object.prototype properties (jQuery #13807)
+ val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+ fn( elem, name, !documentIsHTML ) :
+ undefined;
+
+ return val !== undefined ?
+ val :
+ support.attributes || !documentIsHTML ?
+ elem.getAttribute( name ) :
+ (val = elem.getAttributeNode(name)) && val.specified ?
+ val.value :
+ null;
+};
+
+Sizzle.escape = function( sel ) {
+ return (sel + "").replace( rcssescape, fcssescape );
+};
+
+Sizzle.error = function( msg ) {
+ throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+ var elem,
+ duplicates = [],
+ j = 0,
+ i = 0;
+
+ // Unless we *know* we can detect duplicates, assume their presence
+ hasDuplicate = !support.detectDuplicates;
+ sortInput = !support.sortStable && results.slice( 0 );
+ results.sort( sortOrder );
+
+ if ( hasDuplicate ) {
+ while ( (elem = results[i++]) ) {
+ if ( elem === results[ i ] ) {
+ j = duplicates.push( i );
+ }
+ }
+ while ( j-- ) {
+ results.splice( duplicates[ j ], 1 );
+ }
+ }
+
+ // Clear input after sorting to release objects
+ // See https://github.com/jquery/sizzle/pull/225
+ sortInput = null;
+
+ return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+ var node,
+ ret = "",
+ i = 0,
+ nodeType = elem.nodeType;
+
+ if ( !nodeType ) {
+ // If no nodeType, this is expected to be an array
+ while ( (node = elem[i++]) ) {
+ // Do not traverse comment nodes
+ ret += getText( node );
+ }
+ } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+ // Use textContent for elements
+ // innerText usage removed for consistency of new lines (jQuery #11153)
+ if ( typeof elem.textContent === "string" ) {
+ return elem.textContent;
+ } else {
+ // Traverse its children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+ ret += getText( elem );
+ }
+ }
+ } else if ( nodeType === 3 || nodeType === 4 ) {
+ return elem.nodeValue;
+ }
+ // Do not include comment or processing instruction nodes
+
+ return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+ // Can be adjusted by the user
+ cacheLength: 50,
+
+ createPseudo: markFunction,
+
+ match: matchExpr,
+
+ attrHandle: {},
+
+ find: {},
+
+ relative: {
+ ">": { dir: "parentNode", first: true },
+ " ": { dir: "parentNode" },
+ "+": { dir: "previousSibling", first: true },
+ "~": { dir: "previousSibling" }
+ },
+
+ preFilter: {
+ "ATTR": function( match ) {
+ match[1] = match[1].replace( runescape, funescape );
+
+ // Move the given value to match[3] whether quoted or unquoted
+ match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+
+ if ( match[2] === "~=" ) {
+ match[3] = " " + match[3] + " ";
+ }
+
+ return match.slice( 0, 4 );
+ },
+
+ "CHILD": function( match ) {
+ /* matches from matchExpr["CHILD"]
+ 1 type (only|nth|...)
+ 2 what (child|of-type)
+ 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+ 4 xn-component of xn+y argument ([+-]?\d*n|)
+ 5 sign of xn-component
+ 6 x of xn-component
+ 7 sign of y-component
+ 8 y of y-component
+ */
+ match[1] = match[1].toLowerCase();
+
+ if ( match[1].slice( 0, 3 ) === "nth" ) {
+ // nth-* requires argument
+ if ( !match[3] ) {
+ Sizzle.error( match[0] );
+ }
+
+ // numeric x and y parameters for Expr.filter.CHILD
+ // remember that false/true cast respectively to 0/1
+ match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+ match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+ // other types prohibit arguments
+ } else if ( match[3] ) {
+ Sizzle.error( match[0] );
+ }
+
+ return match;
+ },
+
+ "PSEUDO": function( match ) {
+ var excess,
+ unquoted = !match[6] && match[2];
+
+ if ( matchExpr["CHILD"].test( match[0] ) ) {
+ return null;
+ }
+
+ // Accept quoted arguments as-is
+ if ( match[3] ) {
+ match[2] = match[4] || match[5] || "";
+
+ // Strip excess characters from unquoted arguments
+ } else if ( unquoted && rpseudo.test( unquoted ) &&
+ // Get excess from tokenize (recursively)
+ (excess = tokenize( unquoted, true )) &&
+ // advance to the next closing parenthesis
+ (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+ // excess is a negative index
+ match[0] = match[0].slice( 0, excess );
+ match[2] = unquoted.slice( 0, excess );
+ }
+
+ // Return only captures needed by the pseudo filter method (type and argument)
+ return match.slice( 0, 3 );
+ }
+ },
+
+ filter: {
+
+ "TAG": function( nodeNameSelector ) {
+ var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+ return nodeNameSelector === "*" ?
+ function() { return true; } :
+ function( elem ) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+ };
+ },
+
+ "CLASS": function( className ) {
+ var pattern = classCache[ className + " " ];
+
+ return pattern ||
+ (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+ classCache( className, function( elem ) {
+ return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
+ });
+ },
+
+ "ATTR": function( name, operator, check ) {
+ return function( elem ) {
+ var result = Sizzle.attr( elem, name );
+
+ if ( result == null ) {
+ return operator === "!=";
+ }
+ if ( !operator ) {
+ return true;
+ }
+
+ result += "";
+
+ return operator === "=" ? result === check :
+ operator === "!=" ? result !== check :
+ operator === "^=" ? check && result.indexOf( check ) === 0 :
+ operator === "*=" ? check && result.indexOf( check ) > -1 :
+ operator === "$=" ? check && result.slice( -check.length ) === check :
+ operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+ operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+ false;
+ };
+ },
+
+ "CHILD": function( type, what, argument, first, last ) {
+ var simple = type.slice( 0, 3 ) !== "nth",
+ forward = type.slice( -4 ) !== "last",
+ ofType = what === "of-type";
+
+ return first === 1 && last === 0 ?
+
+ // Shortcut for :nth-*(n)
+ function( elem ) {
+ return !!elem.parentNode;
+ } :
+
+ function( elem, context, xml ) {
+ var cache, uniqueCache, outerCache, node, nodeIndex, start,
+ dir = simple !== forward ? "nextSibling" : "previousSibling",
+ parent = elem.parentNode,
+ name = ofType && elem.nodeName.toLowerCase(),
+ useCache = !xml && !ofType,
+ diff = false;
+
+ if ( parent ) {
+
+ // :(first|last|only)-(child|of-type)
+ if ( simple ) {
+ while ( dir ) {
+ node = elem;
+ while ( (node = node[ dir ]) ) {
+ if ( ofType ?
+ node.nodeName.toLowerCase() === name :
+ node.nodeType === 1 ) {
+
+ return false;
+ }
+ }
+ // Reverse direction for :only-* (if we haven't yet done so)
+ start = dir = type === "only" && !start && "nextSibling";
+ }
+ return true;
+ }
+
+ start = [ forward ? parent.firstChild : parent.lastChild ];
+
+ // non-xml :nth-child(...) stores cache data on `parent`
+ if ( forward && useCache ) {
+
+ // Seek `elem` from a previously-cached index
+
+ // ...in a gzip-friendly way
+ node = parent;
+ outerCache = node[ expando ] || (node[ expando ] = {});
+
+ // Support: IE <9 only
+ // Defend against cloned attroperties (jQuery gh-1709)
+ uniqueCache = outerCache[ node.uniqueID ] ||
+ (outerCache[ node.uniqueID ] = {});
+
+ cache = uniqueCache[ type ] || [];
+ nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+ diff = nodeIndex && cache[ 2 ];
+ node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+ while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+ // Fallback to seeking `elem` from the start
+ (diff = nodeIndex = 0) || start.pop()) ) {
+
+ // When found, cache indexes on `parent` and break
+ if ( node.nodeType === 1 && ++diff && node === elem ) {
+ uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+ break;
+ }
+ }
+
+ } else {
+ // Use previously-cached element index if available
+ if ( useCache ) {
+ // ...in a gzip-friendly way
+ node = elem;
+ outerCache = node[ expando ] || (node[ expando ] = {});
+
+ // Support: IE <9 only
+ // Defend against cloned attroperties (jQuery gh-1709)
+ uniqueCache = outerCache[ node.uniqueID ] ||
+ (outerCache[ node.uniqueID ] = {});
+
+ cache = uniqueCache[ type ] || [];
+ nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+ diff = nodeIndex;
+ }
+
+ // xml :nth-child(...)
+ // or :nth-last-child(...) or :nth(-last)?-of-type(...)
+ if ( diff === false ) {
+ // Use the same loop as above to seek `elem` from the start
+ while ( (node = ++nodeIndex && node && node[ dir ] ||
+ (diff = nodeIndex = 0) || start.pop()) ) {
+
+ if ( ( ofType ?
+ node.nodeName.toLowerCase() === name :
+ node.nodeType === 1 ) &&
+ ++diff ) {
+
+ // Cache the index of each encountered element
+ if ( useCache ) {
+ outerCache = node[ expando ] || (node[ expando ] = {});
+
+ // Support: IE <9 only
+ // Defend against cloned attroperties (jQuery gh-1709)
+ uniqueCache = outerCache[ node.uniqueID ] ||
+ (outerCache[ node.uniqueID ] = {});
+
+ uniqueCache[ type ] = [ dirruns, diff ];
+ }
+
+ if ( node === elem ) {
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ // Incorporate the offset, then check against cycle size
+ diff -= last;
+ return diff === first || ( diff % first === 0 && diff / first >= 0 );
+ }
+ };
+ },
+
+ "PSEUDO": function( pseudo, argument ) {
+ // pseudo-class names are case-insensitive
+ // http://www.w3.org/TR/selectors/#pseudo-classes
+ // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+ // Remember that setFilters inherits from pseudos
+ var args,
+ fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+ Sizzle.error( "unsupported pseudo: " + pseudo );
+
+ // The user may use createPseudo to indicate that
+ // arguments are needed to create the filter function
+ // just as Sizzle does
+ if ( fn[ expando ] ) {
+ return fn( argument );
+ }
+
+ // But maintain support for old signatures
+ if ( fn.length > 1 ) {
+ args = [ pseudo, pseudo, "", argument ];
+ return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+ markFunction(function( seed, matches ) {
+ var idx,
+ matched = fn( seed, argument ),
+ i = matched.length;
+ while ( i-- ) {
+ idx = indexOf( seed, matched[i] );
+ seed[ idx ] = !( matches[ idx ] = matched[i] );
+ }
+ }) :
+ function( elem ) {
+ return fn( elem, 0, args );
+ };
+ }
+
+ return fn;
+ }
+ },
+
+ pseudos: {
+ // Potentially complex pseudos
+ "not": markFunction(function( selector ) {
+ // Trim the selector passed to compile
+ // to avoid treating leading and trailing
+ // spaces as combinators
+ var input = [],
+ results = [],
+ matcher = compile( selector.replace( rtrim, "$1" ) );
+
+ return matcher[ expando ] ?
+ markFunction(function( seed, matches, context, xml ) {
+ var elem,
+ unmatched = matcher( seed, null, xml, [] ),
+ i = seed.length;
+
+ // Match elements unmatched by `matcher`
+ while ( i-- ) {
+ if ( (elem = unmatched[i]) ) {
+ seed[i] = !(matches[i] = elem);
+ }
+ }
+ }) :
+ function( elem, context, xml ) {
+ input[0] = elem;
+ matcher( input, null, xml, results );
+ // Don't keep the element (issue #299)
+ input[0] = null;
+ return !results.pop();
+ };
+ }),
+
+ "has": markFunction(function( selector ) {
+ return function( elem ) {
+ return Sizzle( selector, elem ).length > 0;
+ };
+ }),
+
+ "contains": markFunction(function( text ) {
+ text = text.replace( runescape, funescape );
+ return function( elem ) {
+ return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+ };
+ }),
+
+ // "Whether an element is represented by a :lang() selector
+ // is based solely on the element's language value
+ // being equal to the identifier C,
+ // or beginning with the identifier C immediately followed by "-".
+ // The matching of C against the element's language value is performed case-insensitively.
+ // The identifier C does not have to be a valid language name."
+ // http://www.w3.org/TR/selectors/#lang-pseudo
+ "lang": markFunction( function( lang ) {
+ // lang value must be a valid identifier
+ if ( !ridentifier.test(lang || "") ) {
+ Sizzle.error( "unsupported lang: " + lang );
+ }
+ lang = lang.replace( runescape, funescape ).toLowerCase();
+ return function( elem ) {
+ var elemLang;
+ do {
+ if ( (elemLang = documentIsHTML ?
+ elem.lang :
+ elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+ elemLang = elemLang.toLowerCase();
+ return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+ }
+ } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+ return false;
+ };
+ }),
+
+ // Miscellaneous
+ "target": function( elem ) {
+ var hash = window.location && window.location.hash;
+ return hash && hash.slice( 1 ) === elem.id;
+ },
+
+ "root": function( elem ) {
+ return elem === docElem;
+ },
+
+ "focus": function( elem ) {
+ return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+ },
+
+ // Boolean properties
+ "enabled": createDisabledPseudo( false ),
+ "disabled": createDisabledPseudo( true ),
+
+ "checked": function( elem ) {
+ // In CSS3, :checked should return both checked and selected elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ var nodeName = elem.nodeName.toLowerCase();
+ return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+ },
+
+ "selected": function( elem ) {
+ // Accessing this property makes selected-by-default
+ // options in Safari work properly
+ if ( elem.parentNode ) {
+ elem.parentNode.selectedIndex;
+ }
+
+ return elem.selected === true;
+ },
+
+ // Contents
+ "empty": function( elem ) {
+ // http://www.w3.org/TR/selectors/#empty-pseudo
+ // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+ // but not by others (comment: 8; processing instruction: 7; etc.)
+ // nodeType < 6 works because attributes (2) do not appear as children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+ if ( elem.nodeType < 6 ) {
+ return false;
+ }
+ }
+ return true;
+ },
+
+ "parent": function( elem ) {
+ return !Expr.pseudos["empty"]( elem );
+ },
+
+ // Element/input types
+ "header": function( elem ) {
+ return rheader.test( elem.nodeName );
+ },
+
+ "input": function( elem ) {
+ return rinputs.test( elem.nodeName );
+ },
+
+ "button": function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === "button" || name === "button";
+ },
+
+ "text": function( elem ) {
+ var attr;
+ return elem.nodeName.toLowerCase() === "input" &&
+ elem.type === "text" &&
+
+ // Support: IE<8
+ // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+ ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+ },
+
+ // Position-in-collection
+ "first": createPositionalPseudo(function() {
+ return [ 0 ];
+ }),
+
+ "last": createPositionalPseudo(function( matchIndexes, length ) {
+ return [ length - 1 ];
+ }),
+
+ "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ return [ argument < 0 ? argument + length : argument ];
+ }),
+
+ "even": createPositionalPseudo(function( matchIndexes, length ) {
+ var i = 0;
+ for ( ; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "odd": createPositionalPseudo(function( matchIndexes, length ) {
+ var i = 1;
+ for ( ; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ var i = argument < 0 ? argument + length : argument;
+ for ( ; --i >= 0; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ var i = argument < 0 ? argument + length : argument;
+ for ( ; ++i < length; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ })
+ }
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+ Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+ Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+ var matched, match, tokens, type,
+ soFar, groups, preFilters,
+ cached = tokenCache[ selector + " " ];
+
+ if ( cached ) {
+ return parseOnly ? 0 : cached.slice( 0 );
+ }
+
+ soFar = selector;
+ groups = [];
+ preFilters = Expr.preFilter;
+
+ while ( soFar ) {
+
+ // Comma and first run
+ if ( !matched || (match = rcomma.exec( soFar )) ) {
+ if ( match ) {
+ // Don't consume trailing commas as valid
+ soFar = soFar.slice( match[0].length ) || soFar;
+ }
+ groups.push( (tokens = []) );
+ }
+
+ matched = false;
+
+ // Combinators
+ if ( (match = rcombinators.exec( soFar )) ) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ // Cast descendant combinators to space
+ type: match[0].replace( rtrim, " " )
+ });
+ soFar = soFar.slice( matched.length );
+ }
+
+ // Filters
+ for ( type in Expr.filter ) {
+ if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+ (match = preFilters[ type ]( match ))) ) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ type: type,
+ matches: match
+ });
+ soFar = soFar.slice( matched.length );
+ }
+ }
+
+ if ( !matched ) {
+ break;
+ }
+ }
+
+ // Return the length of the invalid excess
+ // if we're just parsing
+ // Otherwise, throw an error or return tokens
+ return parseOnly ?
+ soFar.length :
+ soFar ?
+ Sizzle.error( selector ) :
+ // Cache the tokens
+ tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+ var i = 0,
+ len = tokens.length,
+ selector = "";
+ for ( ; i < len; i++ ) {
+ selector += tokens[i].value;
+ }
+ return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+ var dir = combinator.dir,
+ skip = combinator.next,
+ key = skip || dir,
+ checkNonElements = base && key === "parentNode",
+ doneName = done++;
+
+ return combinator.first ?
+ // Check against closest ancestor/preceding element
+ function( elem, context, xml ) {
+ while ( (elem = elem[ dir ]) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ return matcher( elem, context, xml );
+ }
+ }
+ return false;
+ } :
+
+ // Check against all ancestor/preceding elements
+ function( elem, context, xml ) {
+ var oldCache, uniqueCache, outerCache,
+ newCache = [ dirruns, doneName ];
+
+ // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+ if ( xml ) {
+ while ( (elem = elem[ dir ]) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ if ( matcher( elem, context, xml ) ) {
+ return true;
+ }
+ }
+ }
+ } else {
+ while ( (elem = elem[ dir ]) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ outerCache = elem[ expando ] || (elem[ expando ] = {});
+
+ // Support: IE <9 only
+ // Defend against cloned attroperties (jQuery gh-1709)
+ uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
+
+ if ( skip && skip === elem.nodeName.toLowerCase() ) {
+ elem = elem[ dir ] || elem;
+ } else if ( (oldCache = uniqueCache[ key ]) &&
+ oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+ // Assign to newCache so results back-propagate to previous elements
+ return (newCache[ 2 ] = oldCache[ 2 ]);
+ } else {
+ // Reuse newcache so results back-propagate to previous elements
+ uniqueCache[ key ] = newCache;
+
+ // A match means we're done; a fail means we have to keep checking
+ if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+ };
+}
+
+function elementMatcher( matchers ) {
+ return matchers.length > 1 ?
+ function( elem, context, xml ) {
+ var i = matchers.length;
+ while ( i-- ) {
+ if ( !matchers[i]( elem, context, xml ) ) {
+ return false;
+ }
+ }
+ return true;
+ } :
+ matchers[0];
+}
+
+function multipleContexts( selector, contexts, results ) {
+ var i = 0,
+ len = contexts.length;
+ for ( ; i < len; i++ ) {
+ Sizzle( selector, contexts[i], results );
+ }
+ return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+ var elem,
+ newUnmatched = [],
+ i = 0,
+ len = unmatched.length,
+ mapped = map != null;
+
+ for ( ; i < len; i++ ) {
+ if ( (elem = unmatched[i]) ) {
+ if ( !filter || filter( elem, context, xml ) ) {
+ newUnmatched.push( elem );
+ if ( mapped ) {
+ map.push( i );
+ }
+ }
+ }
+ }
+
+ return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+ if ( postFilter && !postFilter[ expando ] ) {
+ postFilter = setMatcher( postFilter );
+ }
+ if ( postFinder && !postFinder[ expando ] ) {
+ postFinder = setMatcher( postFinder, postSelector );
+ }
+ return markFunction(function( seed, results, context, xml ) {
+ var temp, i, elem,
+ preMap = [],
+ postMap = [],
+ preexisting = results.length,
+
+ // Get initial elements from seed or context
+ elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+ // Prefilter to get matcher input, preserving a map for seed-results synchronization
+ matcherIn = preFilter && ( seed || !selector ) ?
+ condense( elems, preMap, preFilter, context, xml ) :
+ elems,
+
+ matcherOut = matcher ?
+ // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+ postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+ // ...intermediate processing is necessary
+ [] :
+
+ // ...otherwise use results directly
+ results :
+ matcherIn;
+
+ // Find primary matches
+ if ( matcher ) {
+ matcher( matcherIn, matcherOut, context, xml );
+ }
+
+ // Apply postFilter
+ if ( postFilter ) {
+ temp = condense( matcherOut, postMap );
+ postFilter( temp, [], context, xml );
+
+ // Un-match failing elements by moving them back to matcherIn
+ i = temp.length;
+ while ( i-- ) {
+ if ( (elem = temp[i]) ) {
+ matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+ }
+ }
+ }
+
+ if ( seed ) {
+ if ( postFinder || preFilter ) {
+ if ( postFinder ) {
+ // Get the final matcherOut by condensing this intermediate into postFinder contexts
+ temp = [];
+ i = matcherOut.length;
+ while ( i-- ) {
+ if ( (elem = matcherOut[i]) ) {
+ // Restore matcherIn since elem is not yet a final match
+ temp.push( (matcherIn[i] = elem) );
+ }
+ }
+ postFinder( null, (matcherOut = []), temp, xml );
+ }
+
+ // Move matched elements from seed to results to keep them synchronized
+ i = matcherOut.length;
+ while ( i-- ) {
+ if ( (elem = matcherOut[i]) &&
+ (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
+
+ seed[temp] = !(results[temp] = elem);
+ }
+ }
+ }
+
+ // Add elements to results, through postFinder if defined
+ } else {
+ matcherOut = condense(
+ matcherOut === results ?
+ matcherOut.splice( preexisting, matcherOut.length ) :
+ matcherOut
+ );
+ if ( postFinder ) {
+ postFinder( null, results, matcherOut, xml );
+ } else {
+ push.apply( results, matcherOut );
+ }
+ }
+ });
+}
+
+function matcherFromTokens( tokens ) {
+ var checkContext, matcher, j,
+ len = tokens.length,
+ leadingRelative = Expr.relative[ tokens[0].type ],
+ implicitRelative = leadingRelative || Expr.relative[" "],
+ i = leadingRelative ? 1 : 0,
+
+ // The foundational matcher ensures that elements are reachable from top-level context(s)
+ matchContext = addCombinator( function( elem ) {
+ return elem === checkContext;
+ }, implicitRelative, true ),
+ matchAnyContext = addCombinator( function( elem ) {
+ return indexOf( checkContext, elem ) > -1;
+ }, implicitRelative, true ),
+ matchers = [ function( elem, context, xml ) {
+ var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+ (checkContext = context).nodeType ?
+ matchContext( elem, context, xml ) :
+ matchAnyContext( elem, context, xml ) );
+ // Avoid hanging onto element (issue #299)
+ checkContext = null;
+ return ret;
+ } ];
+
+ for ( ; i < len; i++ ) {
+ if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+ matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+ } else {
+ matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+ // Return special upon seeing a positional matcher
+ if ( matcher[ expando ] ) {
+ // Find the next relative operator (if any) for proper handling
+ j = ++i;
+ for ( ; j < len; j++ ) {
+ if ( Expr.relative[ tokens[j].type ] ) {
+ break;
+ }
+ }
+ return setMatcher(
+ i > 1 && elementMatcher( matchers ),
+ i > 1 && toSelector(
+ // If the preceding token was a descendant combinator, insert an implicit any-element `*`
+ tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+ ).replace( rtrim, "$1" ),
+ matcher,
+ i < j && matcherFromTokens( tokens.slice( i, j ) ),
+ j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+ j < len && toSelector( tokens )
+ );
+ }
+ matchers.push( matcher );
+ }
+ }
+
+ return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+ var bySet = setMatchers.length > 0,
+ byElement = elementMatchers.length > 0,
+ superMatcher = function( seed, context, xml, results, outermost ) {
+ var elem, j, matcher,
+ matchedCount = 0,
+ i = "0",
+ unmatched = seed && [],
+ setMatched = [],
+ contextBackup = outermostContext,
+ // We must always have either seed elements or outermost context
+ elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+ // Use integer dirruns iff this is the outermost matcher
+ dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+ len = elems.length;
+
+ if ( outermost ) {
+ outermostContext = context === document || context || outermost;
+ }
+
+ // Add elements passing elementMatchers directly to results
+ // Support: IE<9, Safari
+ // Tolerate NodeList properties (IE: "length"; Safari:
) matching elements by id
+ for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+ if ( byElement && elem ) {
+ j = 0;
+ if ( !context && elem.ownerDocument !== document ) {
+ setDocument( elem );
+ xml = !documentIsHTML;
+ }
+ while ( (matcher = elementMatchers[j++]) ) {
+ if ( matcher( elem, context || document, xml) ) {
+ results.push( elem );
+ break;
+ }
+ }
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ }
+ }
+
+ // Track unmatched elements for set filters
+ if ( bySet ) {
+ // They will have gone through all possible matchers
+ if ( (elem = !matcher && elem) ) {
+ matchedCount--;
+ }
+
+ // Lengthen the array for every element, matched or not
+ if ( seed ) {
+ unmatched.push( elem );
+ }
+ }
+ }
+
+ // `i` is now the count of elements visited above, and adding it to `matchedCount`
+ // makes the latter nonnegative.
+ matchedCount += i;
+
+ // Apply set filters to unmatched elements
+ // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+ // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+ // no element matchers and no seed.
+ // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+ // case, which will result in a "00" `matchedCount` that differs from `i` but is also
+ // numerically zero.
+ if ( bySet && i !== matchedCount ) {
+ j = 0;
+ while ( (matcher = setMatchers[j++]) ) {
+ matcher( unmatched, setMatched, context, xml );
+ }
+
+ if ( seed ) {
+ // Reintegrate element matches to eliminate the need for sorting
+ if ( matchedCount > 0 ) {
+ while ( i-- ) {
+ if ( !(unmatched[i] || setMatched[i]) ) {
+ setMatched[i] = pop.call( results );
+ }
+ }
+ }
+
+ // Discard index placeholder values to get only actual matches
+ setMatched = condense( setMatched );
+ }
+
+ // Add matches to results
+ push.apply( results, setMatched );
+
+ // Seedless set matches succeeding multiple successful matchers stipulate sorting
+ if ( outermost && !seed && setMatched.length > 0 &&
+ ( matchedCount + setMatchers.length ) > 1 ) {
+
+ Sizzle.uniqueSort( results );
+ }
+ }
+
+ // Override manipulation of globals by nested matchers
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ outermostContext = contextBackup;
+ }
+
+ return unmatched;
+ };
+
+ return bySet ?
+ markFunction( superMatcher ) :
+ superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+ var i,
+ setMatchers = [],
+ elementMatchers = [],
+ cached = compilerCache[ selector + " " ];
+
+ if ( !cached ) {
+ // Generate a function of recursive functions that can be used to check each element
+ if ( !match ) {
+ match = tokenize( selector );
+ }
+ i = match.length;
+ while ( i-- ) {
+ cached = matcherFromTokens( match[i] );
+ if ( cached[ expando ] ) {
+ setMatchers.push( cached );
+ } else {
+ elementMatchers.push( cached );
+ }
+ }
+
+ // Cache the compiled function
+ cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+
+ // Save selector and tokenization
+ cached.selector = selector;
+ }
+ return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ * selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ * selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+ var i, tokens, token, type, find,
+ compiled = typeof selector === "function" && selector,
+ match = !seed && tokenize( (selector = compiled.selector || selector) );
+
+ results = results || [];
+
+ // Try to minimize operations if there is only one selector in the list and no seed
+ // (the latter of which guarantees us context)
+ if ( match.length === 1 ) {
+
+ // Reduce context if the leading compound selector is an ID
+ tokens = match[0] = match[0].slice( 0 );
+ if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+ context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
+
+ context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+ if ( !context ) {
+ return results;
+
+ // Precompiled matchers will still verify ancestry, so step up a level
+ } else if ( compiled ) {
+ context = context.parentNode;
+ }
+
+ selector = selector.slice( tokens.shift().value.length );
+ }
+
+ // Fetch a seed set for right-to-left matching
+ i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+ while ( i-- ) {
+ token = tokens[i];
+
+ // Abort if we hit a combinator
+ if ( Expr.relative[ (type = token.type) ] ) {
+ break;
+ }
+ if ( (find = Expr.find[ type ]) ) {
+ // Search, expanding context for leading sibling combinators
+ if ( (seed = find(
+ token.matches[0].replace( runescape, funescape ),
+ rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+ )) ) {
+
+ // If seed is empty or no tokens remain, we can return early
+ tokens.splice( i, 1 );
+ selector = seed.length && toSelector( tokens );
+ if ( !selector ) {
+ push.apply( results, seed );
+ return results;
+ }
+
+ break;
+ }
+ }
+ }
+ }
+
+ // Compile and execute a filtering function if one is not provided
+ // Provide `match` to avoid retokenization if we modified the selector above
+ ( compiled || compile( selector, match ) )(
+ seed,
+ context,
+ !documentIsHTML,
+ results,
+ !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+ );
+ return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( el ) {
+ // Should return 1, but returns 4 (following)
+ return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( el ) {
+ el.innerHTML = " ";
+ return el.firstChild.getAttribute("href") === "#" ;
+}) ) {
+ addHandle( "type|href|height|width", function( elem, name, isXML ) {
+ if ( !isXML ) {
+ return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+ }
+ });
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( el ) {
+ el.innerHTML = " ";
+ el.firstChild.setAttribute( "value", "" );
+ return el.firstChild.getAttribute( "value" ) === "";
+}) ) {
+ addHandle( "value", function( elem, name, isXML ) {
+ if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+ return elem.defaultValue;
+ }
+ });
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( el ) {
+ return el.getAttribute("disabled") == null;
+}) ) {
+ addHandle( booleans, function( elem, name, isXML ) {
+ var val;
+ if ( !isXML ) {
+ return elem[ name ] === true ? name.toLowerCase() :
+ (val = elem.getAttributeNode( name )) && val.specified ?
+ val.value :
+ null;
+ }
+ });
+}
+
+return Sizzle;
+
+})( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+
+// Deprecated
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+jQuery.escapeSelector = Sizzle.escape;
+
+
+
+
+var dir = function( elem, dir, until ) {
+ var matched = [],
+ truncate = until !== undefined;
+
+ while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+ if ( elem.nodeType === 1 ) {
+ if ( truncate && jQuery( elem ).is( until ) ) {
+ break;
+ }
+ matched.push( elem );
+ }
+ }
+ return matched;
+};
+
+
+var siblings = function( n, elem ) {
+ var matched = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ matched.push( n );
+ }
+ }
+
+ return matched;
+};
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
+
+
+
+var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+ if ( jQuery.isFunction( qualifier ) ) {
+ return jQuery.grep( elements, function( elem, i ) {
+ return !!qualifier.call( elem, i, elem ) !== not;
+ } );
+ }
+
+ // Single element
+ if ( qualifier.nodeType ) {
+ return jQuery.grep( elements, function( elem ) {
+ return ( elem === qualifier ) !== not;
+ } );
+ }
+
+ // Arraylike of elements (jQuery, arguments, Array)
+ if ( typeof qualifier !== "string" ) {
+ return jQuery.grep( elements, function( elem ) {
+ return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
+ } );
+ }
+
+ // Simple selector that can be filtered directly, removing non-Elements
+ if ( risSimple.test( qualifier ) ) {
+ return jQuery.filter( qualifier, elements, not );
+ }
+
+ // Complex selector, compare the two sets, removing non-Elements
+ qualifier = jQuery.filter( qualifier, elements );
+ return jQuery.grep( elements, function( elem ) {
+ return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
+ } );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+ var elem = elems[ 0 ];
+
+ if ( not ) {
+ expr = ":not(" + expr + ")";
+ }
+
+ if ( elems.length === 1 && elem.nodeType === 1 ) {
+ return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
+ }
+
+ return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+ return elem.nodeType === 1;
+ } ) );
+};
+
+jQuery.fn.extend( {
+ find: function( selector ) {
+ var i, ret,
+ len = this.length,
+ self = this;
+
+ if ( typeof selector !== "string" ) {
+ return this.pushStack( jQuery( selector ).filter( function() {
+ for ( i = 0; i < len; i++ ) {
+ if ( jQuery.contains( self[ i ], this ) ) {
+ return true;
+ }
+ }
+ } ) );
+ }
+
+ ret = this.pushStack( [] );
+
+ for ( i = 0; i < len; i++ ) {
+ jQuery.find( selector, self[ i ], ret );
+ }
+
+ return len > 1 ? jQuery.uniqueSort( ret ) : ret;
+ },
+ filter: function( selector ) {
+ return this.pushStack( winnow( this, selector || [], false ) );
+ },
+ not: function( selector ) {
+ return this.pushStack( winnow( this, selector || [], true ) );
+ },
+ is: function( selector ) {
+ return !!winnow(
+ this,
+
+ // If this is a positional/relative selector, check membership in the returned set
+ // so $("p:first").is("p:last") won't return true for a doc with two "p".
+ typeof selector === "string" && rneedsContext.test( selector ) ?
+ jQuery( selector ) :
+ selector || [],
+ false
+ ).length;
+ }
+} );
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+ // A simple way to check for HTML strings
+ // Prioritize #id over to avoid XSS via location.hash (#9521)
+ // Strict HTML recognition (#11290: must start with <)
+ // Shortcut simple #id case for speed
+ rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
+
+ init = jQuery.fn.init = function( selector, context, root ) {
+ var match, elem;
+
+ // HANDLE: $(""), $(null), $(undefined), $(false)
+ if ( !selector ) {
+ return this;
+ }
+
+ // Method init() accepts an alternate rootjQuery
+ // so migrate can support jQuery.sub (gh-2101)
+ root = root || rootjQuery;
+
+ // Handle HTML strings
+ if ( typeof selector === "string" ) {
+ if ( selector[ 0 ] === "<" &&
+ selector[ selector.length - 1 ] === ">" &&
+ selector.length >= 3 ) {
+
+ // Assume that strings that start and end with <> are HTML and skip the regex check
+ match = [ null, selector, null ];
+
+ } else {
+ match = rquickExpr.exec( selector );
+ }
+
+ // Match html or make sure no context is specified for #id
+ if ( match && ( match[ 1 ] || !context ) ) {
+
+ // HANDLE: $(html) -> $(array)
+ if ( match[ 1 ] ) {
+ context = context instanceof jQuery ? context[ 0 ] : context;
+
+ // Option to run scripts is true for back-compat
+ // Intentionally let the error be thrown if parseHTML is not present
+ jQuery.merge( this, jQuery.parseHTML(
+ match[ 1 ],
+ context && context.nodeType ? context.ownerDocument || context : document,
+ true
+ ) );
+
+ // HANDLE: $(html, props)
+ if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+ for ( match in context ) {
+
+ // Properties of context are called as methods if possible
+ if ( jQuery.isFunction( this[ match ] ) ) {
+ this[ match ]( context[ match ] );
+
+ // ...and otherwise set as attributes
+ } else {
+ this.attr( match, context[ match ] );
+ }
+ }
+ }
+
+ return this;
+
+ // HANDLE: $(#id)
+ } else {
+ elem = document.getElementById( match[ 2 ] );
+
+ if ( elem ) {
+
+ // Inject the element directly into the jQuery object
+ this[ 0 ] = elem;
+ this.length = 1;
+ }
+ return this;
+ }
+
+ // HANDLE: $(expr, $(...))
+ } else if ( !context || context.jquery ) {
+ return ( context || root ).find( selector );
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return this.constructor( context ).find( selector );
+ }
+
+ // HANDLE: $(DOMElement)
+ } else if ( selector.nodeType ) {
+ this[ 0 ] = selector;
+ this.length = 1;
+ return this;
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( jQuery.isFunction( selector ) ) {
+ return root.ready !== undefined ?
+ root.ready( selector ) :
+
+ // Execute immediately if ready is not present
+ selector( jQuery );
+ }
+
+ return jQuery.makeArray( selector, this );
+ };
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+ // Methods guaranteed to produce a unique set when starting from a unique set
+ guaranteedUnique = {
+ children: true,
+ contents: true,
+ next: true,
+ prev: true
+ };
+
+jQuery.fn.extend( {
+ has: function( target ) {
+ var targets = jQuery( target, this ),
+ l = targets.length;
+
+ return this.filter( function() {
+ var i = 0;
+ for ( ; i < l; i++ ) {
+ if ( jQuery.contains( this, targets[ i ] ) ) {
+ return true;
+ }
+ }
+ } );
+ },
+
+ closest: function( selectors, context ) {
+ var cur,
+ i = 0,
+ l = this.length,
+ matched = [],
+ targets = typeof selectors !== "string" && jQuery( selectors );
+
+ // Positional selectors never match, since there's no _selection_ context
+ if ( !rneedsContext.test( selectors ) ) {
+ for ( ; i < l; i++ ) {
+ for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+ // Always skip document fragments
+ if ( cur.nodeType < 11 && ( targets ?
+ targets.index( cur ) > -1 :
+
+ // Don't pass non-elements to Sizzle
+ cur.nodeType === 1 &&
+ jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+ matched.push( cur );
+ break;
+ }
+ }
+ }
+ }
+
+ return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+ },
+
+ // Determine the position of an element within the set
+ index: function( elem ) {
+
+ // No argument, return index in parent
+ if ( !elem ) {
+ return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+ }
+
+ // Index in selector
+ if ( typeof elem === "string" ) {
+ return indexOf.call( jQuery( elem ), this[ 0 ] );
+ }
+
+ // Locate the position of the desired element
+ return indexOf.call( this,
+
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[ 0 ] : elem
+ );
+ },
+
+ add: function( selector, context ) {
+ return this.pushStack(
+ jQuery.uniqueSort(
+ jQuery.merge( this.get(), jQuery( selector, context ) )
+ )
+ );
+ },
+
+ addBack: function( selector ) {
+ return this.add( selector == null ?
+ this.prevObject : this.prevObject.filter( selector )
+ );
+ }
+} );
+
+function sibling( cur, dir ) {
+ while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
+ return cur;
+}
+
+jQuery.each( {
+ parent: function( elem ) {
+ var parent = elem.parentNode;
+ return parent && parent.nodeType !== 11 ? parent : null;
+ },
+ parents: function( elem ) {
+ return dir( elem, "parentNode" );
+ },
+ parentsUntil: function( elem, i, until ) {
+ return dir( elem, "parentNode", until );
+ },
+ next: function( elem ) {
+ return sibling( elem, "nextSibling" );
+ },
+ prev: function( elem ) {
+ return sibling( elem, "previousSibling" );
+ },
+ nextAll: function( elem ) {
+ return dir( elem, "nextSibling" );
+ },
+ prevAll: function( elem ) {
+ return dir( elem, "previousSibling" );
+ },
+ nextUntil: function( elem, i, until ) {
+ return dir( elem, "nextSibling", until );
+ },
+ prevUntil: function( elem, i, until ) {
+ return dir( elem, "previousSibling", until );
+ },
+ siblings: function( elem ) {
+ return siblings( ( elem.parentNode || {} ).firstChild, elem );
+ },
+ children: function( elem ) {
+ return siblings( elem.firstChild );
+ },
+ contents: function( elem ) {
+ return elem.contentDocument || jQuery.merge( [], elem.childNodes );
+ }
+}, function( name, fn ) {
+ jQuery.fn[ name ] = function( until, selector ) {
+ var matched = jQuery.map( this, fn, until );
+
+ if ( name.slice( -5 ) !== "Until" ) {
+ selector = until;
+ }
+
+ if ( selector && typeof selector === "string" ) {
+ matched = jQuery.filter( selector, matched );
+ }
+
+ if ( this.length > 1 ) {
+
+ // Remove duplicates
+ if ( !guaranteedUnique[ name ] ) {
+ jQuery.uniqueSort( matched );
+ }
+
+ // Reverse order for parents* and prev-derivatives
+ if ( rparentsprev.test( name ) ) {
+ matched.reverse();
+ }
+ }
+
+ return this.pushStack( matched );
+ };
+} );
+var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
+
+
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+ var object = {};
+ jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
+ object[ flag ] = true;
+ } );
+ return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ * options: an optional list of space-separated options that will change how
+ * the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ * once: will ensure the callback list can only be fired once (like a Deferred)
+ *
+ * memory: will keep track of previous values and will call any callback added
+ * after the list has been fired right away with the latest "memorized"
+ * values (like a Deferred)
+ *
+ * unique: will ensure a callback can only be added once (no duplicate in the list)
+ *
+ * stopOnFalse: interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+ // Convert options from String-formatted to Object-formatted if needed
+ // (we check in cache first)
+ options = typeof options === "string" ?
+ createOptions( options ) :
+ jQuery.extend( {}, options );
+
+ var // Flag to know if list is currently firing
+ firing,
+
+ // Last fire value for non-forgettable lists
+ memory,
+
+ // Flag to know if list was already fired
+ fired,
+
+ // Flag to prevent firing
+ locked,
+
+ // Actual callback list
+ list = [],
+
+ // Queue of execution data for repeatable lists
+ queue = [],
+
+ // Index of currently firing callback (modified by add/remove as needed)
+ firingIndex = -1,
+
+ // Fire callbacks
+ fire = function() {
+
+ // Enforce single-firing
+ locked = options.once;
+
+ // Execute callbacks for all pending executions,
+ // respecting firingIndex overrides and runtime changes
+ fired = firing = true;
+ for ( ; queue.length; firingIndex = -1 ) {
+ memory = queue.shift();
+ while ( ++firingIndex < list.length ) {
+
+ // Run callback and check for early termination
+ if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+ options.stopOnFalse ) {
+
+ // Jump to end and forget the data so .add doesn't re-fire
+ firingIndex = list.length;
+ memory = false;
+ }
+ }
+ }
+
+ // Forget the data if we're done with it
+ if ( !options.memory ) {
+ memory = false;
+ }
+
+ firing = false;
+
+ // Clean up if we're done firing for good
+ if ( locked ) {
+
+ // Keep an empty list if we have data for future add calls
+ if ( memory ) {
+ list = [];
+
+ // Otherwise, this object is spent
+ } else {
+ list = "";
+ }
+ }
+ },
+
+ // Actual Callbacks object
+ self = {
+
+ // Add a callback or a collection of callbacks to the list
+ add: function() {
+ if ( list ) {
+
+ // If we have memory from a past run, we should fire after adding
+ if ( memory && !firing ) {
+ firingIndex = list.length - 1;
+ queue.push( memory );
+ }
+
+ ( function add( args ) {
+ jQuery.each( args, function( _, arg ) {
+ if ( jQuery.isFunction( arg ) ) {
+ if ( !options.unique || !self.has( arg ) ) {
+ list.push( arg );
+ }
+ } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
+
+ // Inspect recursively
+ add( arg );
+ }
+ } );
+ } )( arguments );
+
+ if ( memory && !firing ) {
+ fire();
+ }
+ }
+ return this;
+ },
+
+ // Remove a callback from the list
+ remove: function() {
+ jQuery.each( arguments, function( _, arg ) {
+ var index;
+ while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+ list.splice( index, 1 );
+
+ // Handle firing indexes
+ if ( index <= firingIndex ) {
+ firingIndex--;
+ }
+ }
+ } );
+ return this;
+ },
+
+ // Check if a given callback is in the list.
+ // If no argument is given, return whether or not list has callbacks attached.
+ has: function( fn ) {
+ return fn ?
+ jQuery.inArray( fn, list ) > -1 :
+ list.length > 0;
+ },
+
+ // Remove all callbacks from the list
+ empty: function() {
+ if ( list ) {
+ list = [];
+ }
+ return this;
+ },
+
+ // Disable .fire and .add
+ // Abort any current/pending executions
+ // Clear all callbacks and values
+ disable: function() {
+ locked = queue = [];
+ list = memory = "";
+ return this;
+ },
+ disabled: function() {
+ return !list;
+ },
+
+ // Disable .fire
+ // Also disable .add unless we have memory (since it would have no effect)
+ // Abort any pending executions
+ lock: function() {
+ locked = queue = [];
+ if ( !memory && !firing ) {
+ list = memory = "";
+ }
+ return this;
+ },
+ locked: function() {
+ return !!locked;
+ },
+
+ // Call all callbacks with the given context and arguments
+ fireWith: function( context, args ) {
+ if ( !locked ) {
+ args = args || [];
+ args = [ context, args.slice ? args.slice() : args ];
+ queue.push( args );
+ if ( !firing ) {
+ fire();
+ }
+ }
+ return this;
+ },
+
+ // Call all the callbacks with the given arguments
+ fire: function() {
+ self.fireWith( this, arguments );
+ return this;
+ },
+
+ // To know if the callbacks have already been called at least once
+ fired: function() {
+ return !!fired;
+ }
+ };
+
+ return self;
+};
+
+
+function Identity( v ) {
+ return v;
+}
+function Thrower( ex ) {
+ throw ex;
+}
+
+function adoptValue( value, resolve, reject ) {
+ var method;
+
+ try {
+
+ // Check for promise aspect first to privilege synchronous behavior
+ if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
+ method.call( value ).done( resolve ).fail( reject );
+
+ // Other thenables
+ } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
+ method.call( value, resolve, reject );
+
+ // Other non-thenables
+ } else {
+
+ // Support: Android 4.0 only
+ // Strict mode functions invoked without .call/.apply get global-object context
+ resolve.call( undefined, value );
+ }
+
+ // For Promises/A+, convert exceptions into rejections
+ // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
+ // Deferred#then to conditionally suppress rejection.
+ } catch ( value ) {
+
+ // Support: Android 4.0 only
+ // Strict mode functions invoked without .call/.apply get global-object context
+ reject.call( undefined, value );
+ }
+}
+
+jQuery.extend( {
+
+ Deferred: function( func ) {
+ var tuples = [
+
+ // action, add listener, callbacks,
+ // ... .then handlers, argument index, [final state]
+ [ "notify", "progress", jQuery.Callbacks( "memory" ),
+ jQuery.Callbacks( "memory" ), 2 ],
+ [ "resolve", "done", jQuery.Callbacks( "once memory" ),
+ jQuery.Callbacks( "once memory" ), 0, "resolved" ],
+ [ "reject", "fail", jQuery.Callbacks( "once memory" ),
+ jQuery.Callbacks( "once memory" ), 1, "rejected" ]
+ ],
+ state = "pending",
+ promise = {
+ state: function() {
+ return state;
+ },
+ always: function() {
+ deferred.done( arguments ).fail( arguments );
+ return this;
+ },
+ "catch": function( fn ) {
+ return promise.then( null, fn );
+ },
+
+ // Keep pipe for back-compat
+ pipe: function( /* fnDone, fnFail, fnProgress */ ) {
+ var fns = arguments;
+
+ return jQuery.Deferred( function( newDefer ) {
+ jQuery.each( tuples, function( i, tuple ) {
+
+ // Map tuples (progress, done, fail) to arguments (done, fail, progress)
+ var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
+
+ // deferred.progress(function() { bind to newDefer or newDefer.notify })
+ // deferred.done(function() { bind to newDefer or newDefer.resolve })
+ // deferred.fail(function() { bind to newDefer or newDefer.reject })
+ deferred[ tuple[ 1 ] ]( function() {
+ var returned = fn && fn.apply( this, arguments );
+ if ( returned && jQuery.isFunction( returned.promise ) ) {
+ returned.promise()
+ .progress( newDefer.notify )
+ .done( newDefer.resolve )
+ .fail( newDefer.reject );
+ } else {
+ newDefer[ tuple[ 0 ] + "With" ](
+ this,
+ fn ? [ returned ] : arguments
+ );
+ }
+ } );
+ } );
+ fns = null;
+ } ).promise();
+ },
+ then: function( onFulfilled, onRejected, onProgress ) {
+ var maxDepth = 0;
+ function resolve( depth, deferred, handler, special ) {
+ return function() {
+ var that = this,
+ args = arguments,
+ mightThrow = function() {
+ var returned, then;
+
+ // Support: Promises/A+ section 2.3.3.3.3
+ // https://promisesaplus.com/#point-59
+ // Ignore double-resolution attempts
+ if ( depth < maxDepth ) {
+ return;
+ }
+
+ returned = handler.apply( that, args );
+
+ // Support: Promises/A+ section 2.3.1
+ // https://promisesaplus.com/#point-48
+ if ( returned === deferred.promise() ) {
+ throw new TypeError( "Thenable self-resolution" );
+ }
+
+ // Support: Promises/A+ sections 2.3.3.1, 3.5
+ // https://promisesaplus.com/#point-54
+ // https://promisesaplus.com/#point-75
+ // Retrieve `then` only once
+ then = returned &&
+
+ // Support: Promises/A+ section 2.3.4
+ // https://promisesaplus.com/#point-64
+ // Only check objects and functions for thenability
+ ( typeof returned === "object" ||
+ typeof returned === "function" ) &&
+ returned.then;
+
+ // Handle a returned thenable
+ if ( jQuery.isFunction( then ) ) {
+
+ // Special processors (notify) just wait for resolution
+ if ( special ) {
+ then.call(
+ returned,
+ resolve( maxDepth, deferred, Identity, special ),
+ resolve( maxDepth, deferred, Thrower, special )
+ );
+
+ // Normal processors (resolve) also hook into progress
+ } else {
+
+ // ...and disregard older resolution values
+ maxDepth++;
+
+ then.call(
+ returned,
+ resolve( maxDepth, deferred, Identity, special ),
+ resolve( maxDepth, deferred, Thrower, special ),
+ resolve( maxDepth, deferred, Identity,
+ deferred.notifyWith )
+ );
+ }
+
+ // Handle all other returned values
+ } else {
+
+ // Only substitute handlers pass on context
+ // and multiple values (non-spec behavior)
+ if ( handler !== Identity ) {
+ that = undefined;
+ args = [ returned ];
+ }
+
+ // Process the value(s)
+ // Default process is resolve
+ ( special || deferred.resolveWith )( that, args );
+ }
+ },
+
+ // Only normal processors (resolve) catch and reject exceptions
+ process = special ?
+ mightThrow :
+ function() {
+ try {
+ mightThrow();
+ } catch ( e ) {
+
+ if ( jQuery.Deferred.exceptionHook ) {
+ jQuery.Deferred.exceptionHook( e,
+ process.stackTrace );
+ }
+
+ // Support: Promises/A+ section 2.3.3.3.4.1
+ // https://promisesaplus.com/#point-61
+ // Ignore post-resolution exceptions
+ if ( depth + 1 >= maxDepth ) {
+
+ // Only substitute handlers pass on context
+ // and multiple values (non-spec behavior)
+ if ( handler !== Thrower ) {
+ that = undefined;
+ args = [ e ];
+ }
+
+ deferred.rejectWith( that, args );
+ }
+ }
+ };
+
+ // Support: Promises/A+ section 2.3.3.3.1
+ // https://promisesaplus.com/#point-57
+ // Re-resolve promises immediately to dodge false rejection from
+ // subsequent errors
+ if ( depth ) {
+ process();
+ } else {
+
+ // Call an optional hook to record the stack, in case of exception
+ // since it's otherwise lost when execution goes async
+ if ( jQuery.Deferred.getStackHook ) {
+ process.stackTrace = jQuery.Deferred.getStackHook();
+ }
+ window.setTimeout( process );
+ }
+ };
+ }
+
+ return jQuery.Deferred( function( newDefer ) {
+
+ // progress_handlers.add( ... )
+ tuples[ 0 ][ 3 ].add(
+ resolve(
+ 0,
+ newDefer,
+ jQuery.isFunction( onProgress ) ?
+ onProgress :
+ Identity,
+ newDefer.notifyWith
+ )
+ );
+
+ // fulfilled_handlers.add( ... )
+ tuples[ 1 ][ 3 ].add(
+ resolve(
+ 0,
+ newDefer,
+ jQuery.isFunction( onFulfilled ) ?
+ onFulfilled :
+ Identity
+ )
+ );
+
+ // rejected_handlers.add( ... )
+ tuples[ 2 ][ 3 ].add(
+ resolve(
+ 0,
+ newDefer,
+ jQuery.isFunction( onRejected ) ?
+ onRejected :
+ Thrower
+ )
+ );
+ } ).promise();
+ },
+
+ // Get a promise for this deferred
+ // If obj is provided, the promise aspect is added to the object
+ promise: function( obj ) {
+ return obj != null ? jQuery.extend( obj, promise ) : promise;
+ }
+ },
+ deferred = {};
+
+ // Add list-specific methods
+ jQuery.each( tuples, function( i, tuple ) {
+ var list = tuple[ 2 ],
+ stateString = tuple[ 5 ];
+
+ // promise.progress = list.add
+ // promise.done = list.add
+ // promise.fail = list.add
+ promise[ tuple[ 1 ] ] = list.add;
+
+ // Handle state
+ if ( stateString ) {
+ list.add(
+ function() {
+
+ // state = "resolved" (i.e., fulfilled)
+ // state = "rejected"
+ state = stateString;
+ },
+
+ // rejected_callbacks.disable
+ // fulfilled_callbacks.disable
+ tuples[ 3 - i ][ 2 ].disable,
+
+ // progress_callbacks.lock
+ tuples[ 0 ][ 2 ].lock
+ );
+ }
+
+ // progress_handlers.fire
+ // fulfilled_handlers.fire
+ // rejected_handlers.fire
+ list.add( tuple[ 3 ].fire );
+
+ // deferred.notify = function() { deferred.notifyWith(...) }
+ // deferred.resolve = function() { deferred.resolveWith(...) }
+ // deferred.reject = function() { deferred.rejectWith(...) }
+ deferred[ tuple[ 0 ] ] = function() {
+ deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
+ return this;
+ };
+
+ // deferred.notifyWith = list.fireWith
+ // deferred.resolveWith = list.fireWith
+ // deferred.rejectWith = list.fireWith
+ deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+ } );
+
+ // Make the deferred a promise
+ promise.promise( deferred );
+
+ // Call given func if any
+ if ( func ) {
+ func.call( deferred, deferred );
+ }
+
+ // All done!
+ return deferred;
+ },
+
+ // Deferred helper
+ when: function( singleValue ) {
+ var
+
+ // count of uncompleted subordinates
+ remaining = arguments.length,
+
+ // count of unprocessed arguments
+ i = remaining,
+
+ // subordinate fulfillment data
+ resolveContexts = Array( i ),
+ resolveValues = slice.call( arguments ),
+
+ // the master Deferred
+ master = jQuery.Deferred(),
+
+ // subordinate callback factory
+ updateFunc = function( i ) {
+ return function( value ) {
+ resolveContexts[ i ] = this;
+ resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+ if ( !( --remaining ) ) {
+ master.resolveWith( resolveContexts, resolveValues );
+ }
+ };
+ };
+
+ // Single- and empty arguments are adopted like Promise.resolve
+ if ( remaining <= 1 ) {
+ adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject );
+
+ // Use .then() to unwrap secondary thenables (cf. gh-3000)
+ if ( master.state() === "pending" ||
+ jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
+
+ return master.then();
+ }
+ }
+
+ // Multiple arguments are aggregated like Promise.all array elements
+ while ( i-- ) {
+ adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
+ }
+
+ return master.promise();
+ }
+} );
+
+
+// These usually indicate a programmer mistake during development,
+// warn about them ASAP rather than swallowing them by default.
+var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+
+jQuery.Deferred.exceptionHook = function( error, stack ) {
+
+ // Support: IE 8 - 9 only
+ // Console exists when dev tools are open, which can happen at any time
+ if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
+ window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
+ }
+};
+
+
+
+
+jQuery.readyException = function( error ) {
+ window.setTimeout( function() {
+ throw error;
+ } );
+};
+
+
+
+
+// The deferred used on DOM ready
+var readyList = jQuery.Deferred();
+
+jQuery.fn.ready = function( fn ) {
+
+ readyList
+ .then( fn )
+
+ // Wrap jQuery.readyException in a function so that the lookup
+ // happens at the time of error handling instead of callback
+ // registration.
+ .catch( function( error ) {
+ jQuery.readyException( error );
+ } );
+
+ return this;
+};
+
+jQuery.extend( {
+
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+
+ // A counter to track how many items to wait for before
+ // the ready event fires. See #6781
+ readyWait: 1,
+
+ // Hold (or release) the ready event
+ holdReady: function( hold ) {
+ if ( hold ) {
+ jQuery.readyWait++;
+ } else {
+ jQuery.ready( true );
+ }
+ },
+
+ // Handle when the DOM is ready
+ ready: function( wait ) {
+
+ // Abort if there are pending holds or we're already ready
+ if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+ return;
+ }
+
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If a normal DOM Ready event fired, decrement, and wait if need be
+ if ( wait !== true && --jQuery.readyWait > 0 ) {
+ return;
+ }
+
+ // If there are functions bound, to execute
+ readyList.resolveWith( document, [ jQuery ] );
+ }
+} );
+
+jQuery.ready.then = readyList.then;
+
+// The ready event handler and self cleanup method
+function completed() {
+ document.removeEventListener( "DOMContentLoaded", completed );
+ window.removeEventListener( "load", completed );
+ jQuery.ready();
+}
+
+// Catch cases where $(document).ready() is called
+// after the browser event has already occurred.
+// Support: IE <=9 - 10 only
+// Older IE sometimes signals "interactive" too soon
+if ( document.readyState === "complete" ||
+ ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+ // Handle it asynchronously to allow scripts the opportunity to delay ready
+ window.setTimeout( jQuery.ready );
+
+} else {
+
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", completed );
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener( "load", completed );
+}
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+ var i = 0,
+ len = elems.length,
+ bulk = key == null;
+
+ // Sets many values
+ if ( jQuery.type( key ) === "object" ) {
+ chainable = true;
+ for ( i in key ) {
+ access( elems, fn, i, key[ i ], true, emptyGet, raw );
+ }
+
+ // Sets one value
+ } else if ( value !== undefined ) {
+ chainable = true;
+
+ if ( !jQuery.isFunction( value ) ) {
+ raw = true;
+ }
+
+ if ( bulk ) {
+
+ // Bulk operations run against the entire set
+ if ( raw ) {
+ fn.call( elems, value );
+ fn = null;
+
+ // ...except when executing function values
+ } else {
+ bulk = fn;
+ fn = function( elem, key, value ) {
+ return bulk.call( jQuery( elem ), value );
+ };
+ }
+ }
+
+ if ( fn ) {
+ for ( ; i < len; i++ ) {
+ fn(
+ elems[ i ], key, raw ?
+ value :
+ value.call( elems[ i ], i, fn( elems[ i ], key ) )
+ );
+ }
+ }
+ }
+
+ if ( chainable ) {
+ return elems;
+ }
+
+ // Gets
+ if ( bulk ) {
+ return fn.call( elems );
+ }
+
+ return len ? fn( elems[ 0 ], key ) : emptyGet;
+};
+var acceptData = function( owner ) {
+
+ // Accepts only:
+ // - Node
+ // - Node.ELEMENT_NODE
+ // - Node.DOCUMENT_NODE
+ // - Object
+ // - Any
+ return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+
+
+function Data() {
+ this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+
+Data.prototype = {
+
+ cache: function( owner ) {
+
+ // Check if the owner object already has a cache
+ var value = owner[ this.expando ];
+
+ // If not, create one
+ if ( !value ) {
+ value = {};
+
+ // We can accept data for non-element nodes in modern browsers,
+ // but we should not, see #8335.
+ // Always return an empty object.
+ if ( acceptData( owner ) ) {
+
+ // If it is a node unlikely to be stringify-ed or looped over
+ // use plain assignment
+ if ( owner.nodeType ) {
+ owner[ this.expando ] = value;
+
+ // Otherwise secure it in a non-enumerable property
+ // configurable must be true to allow the property to be
+ // deleted when data is removed
+ } else {
+ Object.defineProperty( owner, this.expando, {
+ value: value,
+ configurable: true
+ } );
+ }
+ }
+ }
+
+ return value;
+ },
+ set: function( owner, data, value ) {
+ var prop,
+ cache = this.cache( owner );
+
+ // Handle: [ owner, key, value ] args
+ // Always use camelCase key (gh-2257)
+ if ( typeof data === "string" ) {
+ cache[ jQuery.camelCase( data ) ] = value;
+
+ // Handle: [ owner, { properties } ] args
+ } else {
+
+ // Copy the properties one-by-one to the cache object
+ for ( prop in data ) {
+ cache[ jQuery.camelCase( prop ) ] = data[ prop ];
+ }
+ }
+ return cache;
+ },
+ get: function( owner, key ) {
+ return key === undefined ?
+ this.cache( owner ) :
+
+ // Always use camelCase key (gh-2257)
+ owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
+ },
+ access: function( owner, key, value ) {
+
+ // In cases where either:
+ //
+ // 1. No key was specified
+ // 2. A string key was specified, but no value provided
+ //
+ // Take the "read" path and allow the get method to determine
+ // which value to return, respectively either:
+ //
+ // 1. The entire cache object
+ // 2. The data stored at the key
+ //
+ if ( key === undefined ||
+ ( ( key && typeof key === "string" ) && value === undefined ) ) {
+
+ return this.get( owner, key );
+ }
+
+ // When the key is not a string, or both a key and value
+ // are specified, set or extend (existing objects) with either:
+ //
+ // 1. An object of properties
+ // 2. A key and value
+ //
+ this.set( owner, key, value );
+
+ // Since the "set" path can have two possible entry points
+ // return the expected data based on which path was taken[*]
+ return value !== undefined ? value : key;
+ },
+ remove: function( owner, key ) {
+ var i,
+ cache = owner[ this.expando ];
+
+ if ( cache === undefined ) {
+ return;
+ }
+
+ if ( key !== undefined ) {
+
+ // Support array or space separated string of keys
+ if ( jQuery.isArray( key ) ) {
+
+ // If key is an array of keys...
+ // We always set camelCase keys, so remove that.
+ key = key.map( jQuery.camelCase );
+ } else {
+ key = jQuery.camelCase( key );
+
+ // If a key with the spaces exists, use it.
+ // Otherwise, create an array by matching non-whitespace
+ key = key in cache ?
+ [ key ] :
+ ( key.match( rnothtmlwhite ) || [] );
+ }
+
+ i = key.length;
+
+ while ( i-- ) {
+ delete cache[ key[ i ] ];
+ }
+ }
+
+ // Remove the expando if there's no more data
+ if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
+
+ // Support: Chrome <=35 - 45
+ // Webkit & Blink performance suffers when deleting properties
+ // from DOM nodes, so set to undefined instead
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
+ if ( owner.nodeType ) {
+ owner[ this.expando ] = undefined;
+ } else {
+ delete owner[ this.expando ];
+ }
+ }
+ },
+ hasData: function( owner ) {
+ var cache = owner[ this.expando ];
+ return cache !== undefined && !jQuery.isEmptyObject( cache );
+ }
+};
+var dataPriv = new Data();
+
+var dataUser = new Data();
+
+
+
+// Implementation Summary
+//
+// 1. Enforce API surface and semantic compatibility with 1.9.x branch
+// 2. Improve the module's maintainability by reducing the storage
+// paths to a single mechanism.
+// 3. Use the same single mechanism to support "private" and "user" data.
+// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+// 5. Avoid exposing implementation details on user objects (eg. expando properties)
+// 6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+ rmultiDash = /[A-Z]/g;
+
+function getData( data ) {
+ if ( data === "true" ) {
+ return true;
+ }
+
+ if ( data === "false" ) {
+ return false;
+ }
+
+ if ( data === "null" ) {
+ return null;
+ }
+
+ // Only convert to a number if it doesn't change the string
+ if ( data === +data + "" ) {
+ return +data;
+ }
+
+ if ( rbrace.test( data ) ) {
+ return JSON.parse( data );
+ }
+
+ return data;
+}
+
+function dataAttr( elem, key, data ) {
+ var name;
+
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if ( data === undefined && elem.nodeType === 1 ) {
+ name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
+ data = elem.getAttribute( name );
+
+ if ( typeof data === "string" ) {
+ try {
+ data = getData( data );
+ } catch ( e ) {}
+
+ // Make sure we set the data so it isn't changed later
+ dataUser.set( elem, key, data );
+ } else {
+ data = undefined;
+ }
+ }
+ return data;
+}
+
+jQuery.extend( {
+ hasData: function( elem ) {
+ return dataUser.hasData( elem ) || dataPriv.hasData( elem );
+ },
+
+ data: function( elem, name, data ) {
+ return dataUser.access( elem, name, data );
+ },
+
+ removeData: function( elem, name ) {
+ dataUser.remove( elem, name );
+ },
+
+ // TODO: Now that all calls to _data and _removeData have been replaced
+ // with direct calls to dataPriv methods, these can be deprecated.
+ _data: function( elem, name, data ) {
+ return dataPriv.access( elem, name, data );
+ },
+
+ _removeData: function( elem, name ) {
+ dataPriv.remove( elem, name );
+ }
+} );
+
+jQuery.fn.extend( {
+ data: function( key, value ) {
+ var i, name, data,
+ elem = this[ 0 ],
+ attrs = elem && elem.attributes;
+
+ // Gets all values
+ if ( key === undefined ) {
+ if ( this.length ) {
+ data = dataUser.get( elem );
+
+ if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
+ i = attrs.length;
+ while ( i-- ) {
+
+ // Support: IE 11 only
+ // The attrs elements can be null (#14894)
+ if ( attrs[ i ] ) {
+ name = attrs[ i ].name;
+ if ( name.indexOf( "data-" ) === 0 ) {
+ name = jQuery.camelCase( name.slice( 5 ) );
+ dataAttr( elem, name, data[ name ] );
+ }
+ }
+ }
+ dataPriv.set( elem, "hasDataAttrs", true );
+ }
+ }
+
+ return data;
+ }
+
+ // Sets multiple values
+ if ( typeof key === "object" ) {
+ return this.each( function() {
+ dataUser.set( this, key );
+ } );
+ }
+
+ return access( this, function( value ) {
+ var data;
+
+ // The calling jQuery object (element matches) is not empty
+ // (and therefore has an element appears at this[ 0 ]) and the
+ // `value` parameter was not undefined. An empty jQuery object
+ // will result in `undefined` for elem = this[ 0 ] which will
+ // throw an exception if an attempt to read a data cache is made.
+ if ( elem && value === undefined ) {
+
+ // Attempt to get data from the cache
+ // The key will always be camelCased in Data
+ data = dataUser.get( elem, key );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // Attempt to "discover" the data in
+ // HTML5 custom data-* attrs
+ data = dataAttr( elem, key );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // We tried really hard, but the data doesn't exist.
+ return;
+ }
+
+ // Set the data...
+ this.each( function() {
+
+ // We always store the camelCased key
+ dataUser.set( this, key, value );
+ } );
+ }, null, value, arguments.length > 1, null, true );
+ },
+
+ removeData: function( key ) {
+ return this.each( function() {
+ dataUser.remove( this, key );
+ } );
+ }
+} );
+
+
+jQuery.extend( {
+ queue: function( elem, type, data ) {
+ var queue;
+
+ if ( elem ) {
+ type = ( type || "fx" ) + "queue";
+ queue = dataPriv.get( elem, type );
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( data ) {
+ if ( !queue || jQuery.isArray( data ) ) {
+ queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
+ } else {
+ queue.push( data );
+ }
+ }
+ return queue || [];
+ }
+ },
+
+ dequeue: function( elem, type ) {
+ type = type || "fx";
+
+ var queue = jQuery.queue( elem, type ),
+ startLength = queue.length,
+ fn = queue.shift(),
+ hooks = jQuery._queueHooks( elem, type ),
+ next = function() {
+ jQuery.dequeue( elem, type );
+ };
+
+ // If the fx queue is dequeued, always remove the progress sentinel
+ if ( fn === "inprogress" ) {
+ fn = queue.shift();
+ startLength--;
+ }
+
+ if ( fn ) {
+
+ // Add a progress sentinel to prevent the fx queue from being
+ // automatically dequeued
+ if ( type === "fx" ) {
+ queue.unshift( "inprogress" );
+ }
+
+ // Clear up the last queue stop function
+ delete hooks.stop;
+ fn.call( elem, next, hooks );
+ }
+
+ if ( !startLength && hooks ) {
+ hooks.empty.fire();
+ }
+ },
+
+ // Not public - generate a queueHooks object, or return the current one
+ _queueHooks: function( elem, type ) {
+ var key = type + "queueHooks";
+ return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
+ empty: jQuery.Callbacks( "once memory" ).add( function() {
+ dataPriv.remove( elem, [ type + "queue", key ] );
+ } )
+ } );
+ }
+} );
+
+jQuery.fn.extend( {
+ queue: function( type, data ) {
+ var setter = 2;
+
+ if ( typeof type !== "string" ) {
+ data = type;
+ type = "fx";
+ setter--;
+ }
+
+ if ( arguments.length < setter ) {
+ return jQuery.queue( this[ 0 ], type );
+ }
+
+ return data === undefined ?
+ this :
+ this.each( function() {
+ var queue = jQuery.queue( this, type, data );
+
+ // Ensure a hooks for this queue
+ jQuery._queueHooks( this, type );
+
+ if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+ jQuery.dequeue( this, type );
+ }
+ } );
+ },
+ dequeue: function( type ) {
+ return this.each( function() {
+ jQuery.dequeue( this, type );
+ } );
+ },
+ clearQueue: function( type ) {
+ return this.queue( type || "fx", [] );
+ },
+
+ // Get a promise resolved when queues of a certain type
+ // are emptied (fx is the type by default)
+ promise: function( type, obj ) {
+ var tmp,
+ count = 1,
+ defer = jQuery.Deferred(),
+ elements = this,
+ i = this.length,
+ resolve = function() {
+ if ( !( --count ) ) {
+ defer.resolveWith( elements, [ elements ] );
+ }
+ };
+
+ if ( typeof type !== "string" ) {
+ obj = type;
+ type = undefined;
+ }
+ type = type || "fx";
+
+ while ( i-- ) {
+ tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
+ if ( tmp && tmp.empty ) {
+ count++;
+ tmp.empty.add( resolve );
+ }
+ }
+ resolve();
+ return defer.promise( obj );
+ }
+} );
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var isHiddenWithinTree = function( elem, el ) {
+
+ // isHiddenWithinTree might be called from jQuery#filter function;
+ // in that case, element will be second argument
+ elem = el || elem;
+
+ // Inline style trumps all
+ return elem.style.display === "none" ||
+ elem.style.display === "" &&
+
+ // Otherwise, check computed style
+ // Support: Firefox <=43 - 45
+ // Disconnected elements can have computed display: none, so first confirm that elem is
+ // in the document.
+ jQuery.contains( elem.ownerDocument, elem ) &&
+
+ jQuery.css( elem, "display" ) === "none";
+ };
+
+var swap = function( elem, options, callback, args ) {
+ var ret, name,
+ old = {};
+
+ // Remember the old values, and insert the new ones
+ for ( name in options ) {
+ old[ name ] = elem.style[ name ];
+ elem.style[ name ] = options[ name ];
+ }
+
+ ret = callback.apply( elem, args || [] );
+
+ // Revert the old values
+ for ( name in options ) {
+ elem.style[ name ] = old[ name ];
+ }
+
+ return ret;
+};
+
+
+
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+ var adjusted,
+ scale = 1,
+ maxIterations = 20,
+ currentValue = tween ?
+ function() {
+ return tween.cur();
+ } :
+ function() {
+ return jQuery.css( elem, prop, "" );
+ },
+ initial = currentValue(),
+ unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+ // Starting value computation is required for potential unit mismatches
+ initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+ rcssNum.exec( jQuery.css( elem, prop ) );
+
+ if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+ // Trust units reported by jQuery.css
+ unit = unit || initialInUnit[ 3 ];
+
+ // Make sure we update the tween properties later on
+ valueParts = valueParts || [];
+
+ // Iteratively approximate from a nonzero starting point
+ initialInUnit = +initial || 1;
+
+ do {
+
+ // If previous iteration zeroed out, double until we get *something*.
+ // Use string for doubling so we don't accidentally see scale as unchanged below
+ scale = scale || ".5";
+
+ // Adjust and apply
+ initialInUnit = initialInUnit / scale;
+ jQuery.style( elem, prop, initialInUnit + unit );
+
+ // Update scale, tolerating zero or NaN from tween.cur()
+ // Break the loop if scale is unchanged or perfect, or if we've just had enough.
+ } while (
+ scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
+ );
+ }
+
+ if ( valueParts ) {
+ initialInUnit = +initialInUnit || +initial || 0;
+
+ // Apply relative offset (+=/-=) if specified
+ adjusted = valueParts[ 1 ] ?
+ initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+ +valueParts[ 2 ];
+ if ( tween ) {
+ tween.unit = unit;
+ tween.start = initialInUnit;
+ tween.end = adjusted;
+ }
+ }
+ return adjusted;
+}
+
+
+var defaultDisplayMap = {};
+
+function getDefaultDisplay( elem ) {
+ var temp,
+ doc = elem.ownerDocument,
+ nodeName = elem.nodeName,
+ display = defaultDisplayMap[ nodeName ];
+
+ if ( display ) {
+ return display;
+ }
+
+ temp = doc.body.appendChild( doc.createElement( nodeName ) );
+ display = jQuery.css( temp, "display" );
+
+ temp.parentNode.removeChild( temp );
+
+ if ( display === "none" ) {
+ display = "block";
+ }
+ defaultDisplayMap[ nodeName ] = display;
+
+ return display;
+}
+
+function showHide( elements, show ) {
+ var display, elem,
+ values = [],
+ index = 0,
+ length = elements.length;
+
+ // Determine new display value for elements that need to change
+ for ( ; index < length; index++ ) {
+ elem = elements[ index ];
+ if ( !elem.style ) {
+ continue;
+ }
+
+ display = elem.style.display;
+ if ( show ) {
+
+ // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
+ // check is required in this first loop unless we have a nonempty display value (either
+ // inline or about-to-be-restored)
+ if ( display === "none" ) {
+ values[ index ] = dataPriv.get( elem, "display" ) || null;
+ if ( !values[ index ] ) {
+ elem.style.display = "";
+ }
+ }
+ if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
+ values[ index ] = getDefaultDisplay( elem );
+ }
+ } else {
+ if ( display !== "none" ) {
+ values[ index ] = "none";
+
+ // Remember what we're overwriting
+ dataPriv.set( elem, "display", display );
+ }
+ }
+ }
+
+ // Set the display of the elements in a second loop to avoid constant reflow
+ for ( index = 0; index < length; index++ ) {
+ if ( values[ index ] != null ) {
+ elements[ index ].style.display = values[ index ];
+ }
+ }
+
+ return elements;
+}
+
+jQuery.fn.extend( {
+ show: function() {
+ return showHide( this, true );
+ },
+ hide: function() {
+ return showHide( this );
+ },
+ toggle: function( state ) {
+ if ( typeof state === "boolean" ) {
+ return state ? this.show() : this.hide();
+ }
+
+ return this.each( function() {
+ if ( isHiddenWithinTree( this ) ) {
+ jQuery( this ).show();
+ } else {
+ jQuery( this ).hide();
+ }
+ } );
+ }
+} );
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
+
+var rscriptType = ( /^$|\/(?:java|ecma)script/i );
+
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+
+ // Support: IE <=9 only
+ option: [ 1, "", " " ],
+
+ // XHTML parsers do not magically insert elements in the
+ // same way that tag soup parsers do. So we cannot shorten
+ // this by omitting or other required elements.
+ thead: [ 1, "" ],
+ col: [ 2, "" ],
+ tr: [ 2, "" ],
+ td: [ 3, "" ],
+
+ _default: [ 0, "", "" ]
+};
+
+// Support: IE <=9 only
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+
+function getAll( context, tag ) {
+
+ // Support: IE <=9 - 11 only
+ // Use typeof to avoid zero-argument method invocation on host objects (#15151)
+ var ret;
+
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
+ ret = context.getElementsByTagName( tag || "*" );
+
+ } else if ( typeof context.querySelectorAll !== "undefined" ) {
+ ret = context.querySelectorAll( tag || "*" );
+
+ } else {
+ ret = [];
+ }
+
+ if ( tag === undefined || tag && jQuery.nodeName( context, tag ) ) {
+ return jQuery.merge( [ context ], ret );
+ }
+
+ return ret;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+ var i = 0,
+ l = elems.length;
+
+ for ( ; i < l; i++ ) {
+ dataPriv.set(
+ elems[ i ],
+ "globalEval",
+ !refElements || dataPriv.get( refElements[ i ], "globalEval" )
+ );
+ }
+}
+
+
+var rhtml = /<|?\w+;/;
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+ var elem, tmp, tag, wrap, contains, j,
+ fragment = context.createDocumentFragment(),
+ nodes = [],
+ i = 0,
+ l = elems.length;
+
+ for ( ; i < l; i++ ) {
+ elem = elems[ i ];
+
+ if ( elem || elem === 0 ) {
+
+ // Add nodes directly
+ if ( jQuery.type( elem ) === "object" ) {
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // push.apply(_, arraylike) throws on ancient WebKit
+ jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+ // Convert non-html into a text node
+ } else if ( !rhtml.test( elem ) ) {
+ nodes.push( context.createTextNode( elem ) );
+
+ // Convert html into DOM nodes
+ } else {
+ tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
+
+ // Deserialize a standard representation
+ tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+ wrap = wrapMap[ tag ] || wrapMap._default;
+ tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+ // Descend through wrappers to the right content
+ j = wrap[ 0 ];
+ while ( j-- ) {
+ tmp = tmp.lastChild;
+ }
+
+ // Support: Android <=4.0 only, PhantomJS 1 only
+ // push.apply(_, arraylike) throws on ancient WebKit
+ jQuery.merge( nodes, tmp.childNodes );
+
+ // Remember the top-level container
+ tmp = fragment.firstChild;
+
+ // Ensure the created nodes are orphaned (#12392)
+ tmp.textContent = "";
+ }
+ }
+ }
+
+ // Remove wrapper from fragment
+ fragment.textContent = "";
+
+ i = 0;
+ while ( ( elem = nodes[ i++ ] ) ) {
+
+ // Skip elements already in the context collection (trac-4087)
+ if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+ if ( ignored ) {
+ ignored.push( elem );
+ }
+ continue;
+ }
+
+ contains = jQuery.contains( elem.ownerDocument, elem );
+
+ // Append to fragment
+ tmp = getAll( fragment.appendChild( elem ), "script" );
+
+ // Preserve script evaluation history
+ if ( contains ) {
+ setGlobalEval( tmp );
+ }
+
+ // Capture executables
+ if ( scripts ) {
+ j = 0;
+ while ( ( elem = tmp[ j++ ] ) ) {
+ if ( rscriptType.test( elem.type || "" ) ) {
+ scripts.push( elem );
+ }
+ }
+ }
+ }
+
+ return fragment;
+}
+
+
+( function() {
+ var fragment = document.createDocumentFragment(),
+ div = fragment.appendChild( document.createElement( "div" ) ),
+ input = document.createElement( "input" );
+
+ // Support: Android 4.0 - 4.3 only
+ // Check state lost if the name is set (#11217)
+ // Support: Windows Web Apps (WWA)
+ // `name` and `type` must use .setAttribute for WWA (#14901)
+ input.setAttribute( "type", "radio" );
+ input.setAttribute( "checked", "checked" );
+ input.setAttribute( "name", "t" );
+
+ div.appendChild( input );
+
+ // Support: Android <=4.1 only
+ // Older WebKit doesn't clone checked state correctly in fragments
+ support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+ // Support: IE <=11 only
+ // Make sure textarea (and checkbox) defaultValue is properly cloned
+ div.innerHTML = "";
+ support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+} )();
+var documentElement = document.documentElement;
+
+
+
+var
+ rkeyEvent = /^key/,
+ rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+ rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+ return true;
+}
+
+function returnFalse() {
+ return false;
+}
+
+// Support: IE <=9 only
+// See #13393 for more info
+function safeActiveElement() {
+ try {
+ return document.activeElement;
+ } catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+ var origFn, type;
+
+ // Types can be a map of types/handlers
+ if ( typeof types === "object" ) {
+
+ // ( types-Object, selector, data )
+ if ( typeof selector !== "string" ) {
+
+ // ( types-Object, data )
+ data = data || selector;
+ selector = undefined;
+ }
+ for ( type in types ) {
+ on( elem, type, selector, data, types[ type ], one );
+ }
+ return elem;
+ }
+
+ if ( data == null && fn == null ) {
+
+ // ( types, fn )
+ fn = selector;
+ data = selector = undefined;
+ } else if ( fn == null ) {
+ if ( typeof selector === "string" ) {
+
+ // ( types, selector, fn )
+ fn = data;
+ data = undefined;
+ } else {
+
+ // ( types, data, fn )
+ fn = data;
+ data = selector;
+ selector = undefined;
+ }
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ } else if ( !fn ) {
+ return elem;
+ }
+
+ if ( one === 1 ) {
+ origFn = fn;
+ fn = function( event ) {
+
+ // Can use an empty set, since event contains the info
+ jQuery().off( event );
+ return origFn.apply( this, arguments );
+ };
+
+ // Use same guid so caller can remove using origFn
+ fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+ }
+ return elem.each( function() {
+ jQuery.event.add( this, types, fn, data, selector );
+ } );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+ global: {},
+
+ add: function( elem, types, handler, data, selector ) {
+
+ var handleObjIn, eventHandle, tmp,
+ events, t, handleObj,
+ special, handlers, type, namespaces, origType,
+ elemData = dataPriv.get( elem );
+
+ // Don't attach events to noData or text/comment nodes (but allow plain objects)
+ if ( !elemData ) {
+ return;
+ }
+
+ // Caller can pass in an object of custom data in lieu of the handler
+ if ( handler.handler ) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ selector = handleObjIn.selector;
+ }
+
+ // Ensure that invalid selectors throw exceptions at attach time
+ // Evaluate against documentElement in case elem is a non-element node (e.g., document)
+ if ( selector ) {
+ jQuery.find.matchesSelector( documentElement, selector );
+ }
+
+ // Make sure that the handler has a unique ID, used to find/remove it later
+ if ( !handler.guid ) {
+ handler.guid = jQuery.guid++;
+ }
+
+ // Init the element's event structure and main handler, if this is the first
+ if ( !( events = elemData.events ) ) {
+ events = elemData.events = {};
+ }
+ if ( !( eventHandle = elemData.handle ) ) {
+ eventHandle = elemData.handle = function( e ) {
+
+ // Discard the second event of a jQuery.event.trigger() and
+ // when an event is called after a page has unloaded
+ return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
+ jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+ };
+ }
+
+ // Handle multiple events separated by a space
+ types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+ t = types.length;
+ while ( t-- ) {
+ tmp = rtypenamespace.exec( types[ t ] ) || [];
+ type = origType = tmp[ 1 ];
+ namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+ // There *must* be a type, no attaching namespace-only handlers
+ if ( !type ) {
+ continue;
+ }
+
+ // If event changes its type, use the special event handlers for the changed type
+ special = jQuery.event.special[ type ] || {};
+
+ // If selector defined, determine special event api type, otherwise given type
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+
+ // Update special based on newly reset type
+ special = jQuery.event.special[ type ] || {};
+
+ // handleObj is passed to all event handlers
+ handleObj = jQuery.extend( {
+ type: type,
+ origType: origType,
+ data: data,
+ handler: handler,
+ guid: handler.guid,
+ selector: selector,
+ needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+ namespace: namespaces.join( "." )
+ }, handleObjIn );
+
+ // Init the event handler queue if we're the first
+ if ( !( handlers = events[ type ] ) ) {
+ handlers = events[ type ] = [];
+ handlers.delegateCount = 0;
+
+ // Only use addEventListener if the special events handler returns false
+ if ( !special.setup ||
+ special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, eventHandle );
+ }
+ }
+ }
+
+ if ( special.add ) {
+ special.add.call( elem, handleObj );
+
+ if ( !handleObj.handler.guid ) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
+ // Add to the element's handler list, delegates in front
+ if ( selector ) {
+ handlers.splice( handlers.delegateCount++, 0, handleObj );
+ } else {
+ handlers.push( handleObj );
+ }
+
+ // Keep track of which events have ever been used, for event optimization
+ jQuery.event.global[ type ] = true;
+ }
+
+ },
+
+ // Detach an event or set of events from an element
+ remove: function( elem, types, handler, selector, mappedTypes ) {
+
+ var j, origCount, tmp,
+ events, t, handleObj,
+ special, handlers, type, namespaces, origType,
+ elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
+
+ if ( !elemData || !( events = elemData.events ) ) {
+ return;
+ }
+
+ // Once for each type.namespace in types; type may be omitted
+ types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+ t = types.length;
+ while ( t-- ) {
+ tmp = rtypenamespace.exec( types[ t ] ) || [];
+ type = origType = tmp[ 1 ];
+ namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+ // Unbind all events (on this namespace, if provided) for the element
+ if ( !type ) {
+ for ( type in events ) {
+ jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+ }
+ continue;
+ }
+
+ special = jQuery.event.special[ type ] || {};
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+ handlers = events[ type ] || [];
+ tmp = tmp[ 2 ] &&
+ new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+ // Remove matching events
+ origCount = j = handlers.length;
+ while ( j-- ) {
+ handleObj = handlers[ j ];
+
+ if ( ( mappedTypes || origType === handleObj.origType ) &&
+ ( !handler || handler.guid === handleObj.guid ) &&
+ ( !tmp || tmp.test( handleObj.namespace ) ) &&
+ ( !selector || selector === handleObj.selector ||
+ selector === "**" && handleObj.selector ) ) {
+ handlers.splice( j, 1 );
+
+ if ( handleObj.selector ) {
+ handlers.delegateCount--;
+ }
+ if ( special.remove ) {
+ special.remove.call( elem, handleObj );
+ }
+ }
+ }
+
+ // Remove generic event handler if we removed something and no more handlers exist
+ // (avoids potential for endless recursion during removal of special event handlers)
+ if ( origCount && !handlers.length ) {
+ if ( !special.teardown ||
+ special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+ jQuery.removeEvent( elem, type, elemData.handle );
+ }
+
+ delete events[ type ];
+ }
+ }
+
+ // Remove data and the expando if it's no longer used
+ if ( jQuery.isEmptyObject( events ) ) {
+ dataPriv.remove( elem, "handle events" );
+ }
+ },
+
+ dispatch: function( nativeEvent ) {
+
+ // Make a writable jQuery.Event from the native event object
+ var event = jQuery.event.fix( nativeEvent );
+
+ var i, j, ret, matched, handleObj, handlerQueue,
+ args = new Array( arguments.length ),
+ handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
+ special = jQuery.event.special[ event.type ] || {};
+
+ // Use the fix-ed jQuery.Event rather than the (read-only) native event
+ args[ 0 ] = event;
+
+ for ( i = 1; i < arguments.length; i++ ) {
+ args[ i ] = arguments[ i ];
+ }
+
+ event.delegateTarget = this;
+
+ // Call the preDispatch hook for the mapped type, and let it bail if desired
+ if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+ return;
+ }
+
+ // Determine handlers
+ handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+ // Run delegates first; they may want to stop propagation beneath us
+ i = 0;
+ while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+ event.currentTarget = matched.elem;
+
+ j = 0;
+ while ( ( handleObj = matched.handlers[ j++ ] ) &&
+ !event.isImmediatePropagationStopped() ) {
+
+ // Triggered event must either 1) have no namespace, or 2) have namespace(s)
+ // a subset or equal to those in the bound event (both can have no namespace).
+ if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
+
+ event.handleObj = handleObj;
+ event.data = handleObj.data;
+
+ ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+ handleObj.handler ).apply( matched.elem, args );
+
+ if ( ret !== undefined ) {
+ if ( ( event.result = ret ) === false ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+ }
+ }
+ }
+
+ // Call the postDispatch hook for the mapped type
+ if ( special.postDispatch ) {
+ special.postDispatch.call( this, event );
+ }
+
+ return event.result;
+ },
+
+ handlers: function( event, handlers ) {
+ var i, handleObj, sel, matchedHandlers, matchedSelectors,
+ handlerQueue = [],
+ delegateCount = handlers.delegateCount,
+ cur = event.target;
+
+ // Find delegate handlers
+ if ( delegateCount &&
+
+ // Support: IE <=9
+ // Black-hole SVG instance trees (trac-13180)
+ cur.nodeType &&
+
+ // Support: Firefox <=42
+ // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
+ // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
+ // Support: IE 11 only
+ // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
+ !( event.type === "click" && event.button >= 1 ) ) {
+
+ for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+ // Don't check non-elements (#13208)
+ // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+ if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
+ matchedHandlers = [];
+ matchedSelectors = {};
+ for ( i = 0; i < delegateCount; i++ ) {
+ handleObj = handlers[ i ];
+
+ // Don't conflict with Object.prototype properties (#13203)
+ sel = handleObj.selector + " ";
+
+ if ( matchedSelectors[ sel ] === undefined ) {
+ matchedSelectors[ sel ] = handleObj.needsContext ?
+ jQuery( sel, this ).index( cur ) > -1 :
+ jQuery.find( sel, this, null, [ cur ] ).length;
+ }
+ if ( matchedSelectors[ sel ] ) {
+ matchedHandlers.push( handleObj );
+ }
+ }
+ if ( matchedHandlers.length ) {
+ handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
+ }
+ }
+ }
+ }
+
+ // Add the remaining (directly-bound) handlers
+ cur = this;
+ if ( delegateCount < handlers.length ) {
+ handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
+ }
+
+ return handlerQueue;
+ },
+
+ addProp: function( name, hook ) {
+ Object.defineProperty( jQuery.Event.prototype, name, {
+ enumerable: true,
+ configurable: true,
+
+ get: jQuery.isFunction( hook ) ?
+ function() {
+ if ( this.originalEvent ) {
+ return hook( this.originalEvent );
+ }
+ } :
+ function() {
+ if ( this.originalEvent ) {
+ return this.originalEvent[ name ];
+ }
+ },
+
+ set: function( value ) {
+ Object.defineProperty( this, name, {
+ enumerable: true,
+ configurable: true,
+ writable: true,
+ value: value
+ } );
+ }
+ } );
+ },
+
+ fix: function( originalEvent ) {
+ return originalEvent[ jQuery.expando ] ?
+ originalEvent :
+ new jQuery.Event( originalEvent );
+ },
+
+ special: {
+ load: {
+
+ // Prevent triggered image.load events from bubbling to window.load
+ noBubble: true
+ },
+ focus: {
+
+ // Fire native event if possible so blur/focus sequence is correct
+ trigger: function() {
+ if ( this !== safeActiveElement() && this.focus ) {
+ this.focus();
+ return false;
+ }
+ },
+ delegateType: "focusin"
+ },
+ blur: {
+ trigger: function() {
+ if ( this === safeActiveElement() && this.blur ) {
+ this.blur();
+ return false;
+ }
+ },
+ delegateType: "focusout"
+ },
+ click: {
+
+ // For checkbox, fire native event so checked state will be right
+ trigger: function() {
+ if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
+ this.click();
+ return false;
+ }
+ },
+
+ // For cross-browser consistency, don't fire native .click() on links
+ _default: function( event ) {
+ return jQuery.nodeName( event.target, "a" );
+ }
+ },
+
+ beforeunload: {
+ postDispatch: function( event ) {
+
+ // Support: Firefox 20+
+ // Firefox doesn't alert if the returnValue field is not set.
+ if ( event.result !== undefined && event.originalEvent ) {
+ event.originalEvent.returnValue = event.result;
+ }
+ }
+ }
+ }
+};
+
+jQuery.removeEvent = function( elem, type, handle ) {
+
+ // This "if" is needed for plain objects
+ if ( elem.removeEventListener ) {
+ elem.removeEventListener( type, handle );
+ }
+};
+
+jQuery.Event = function( src, props ) {
+
+ // Allow instantiation without the 'new' keyword
+ if ( !( this instanceof jQuery.Event ) ) {
+ return new jQuery.Event( src, props );
+ }
+
+ // Event object
+ if ( src && src.type ) {
+ this.originalEvent = src;
+ this.type = src.type;
+
+ // Events bubbling up the document may have been marked as prevented
+ // by a handler lower down the tree; reflect the correct value.
+ this.isDefaultPrevented = src.defaultPrevented ||
+ src.defaultPrevented === undefined &&
+
+ // Support: Android <=2.3 only
+ src.returnValue === false ?
+ returnTrue :
+ returnFalse;
+
+ // Create target properties
+ // Support: Safari <=6 - 7 only
+ // Target should not be a text node (#504, #13143)
+ this.target = ( src.target && src.target.nodeType === 3 ) ?
+ src.target.parentNode :
+ src.target;
+
+ this.currentTarget = src.currentTarget;
+ this.relatedTarget = src.relatedTarget;
+
+ // Event type
+ } else {
+ this.type = src;
+ }
+
+ // Put explicitly provided properties onto the event object
+ if ( props ) {
+ jQuery.extend( this, props );
+ }
+
+ // Create a timestamp if incoming event doesn't have one
+ this.timeStamp = src && src.timeStamp || jQuery.now();
+
+ // Mark it as fixed
+ this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+ constructor: jQuery.Event,
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse,
+ isSimulated: false,
+
+ preventDefault: function() {
+ var e = this.originalEvent;
+
+ this.isDefaultPrevented = returnTrue;
+
+ if ( e && !this.isSimulated ) {
+ e.preventDefault();
+ }
+ },
+ stopPropagation: function() {
+ var e = this.originalEvent;
+
+ this.isPropagationStopped = returnTrue;
+
+ if ( e && !this.isSimulated ) {
+ e.stopPropagation();
+ }
+ },
+ stopImmediatePropagation: function() {
+ var e = this.originalEvent;
+
+ this.isImmediatePropagationStopped = returnTrue;
+
+ if ( e && !this.isSimulated ) {
+ e.stopImmediatePropagation();
+ }
+
+ this.stopPropagation();
+ }
+};
+
+// Includes all common event props including KeyEvent and MouseEvent specific props
+jQuery.each( {
+ altKey: true,
+ bubbles: true,
+ cancelable: true,
+ changedTouches: true,
+ ctrlKey: true,
+ detail: true,
+ eventPhase: true,
+ metaKey: true,
+ pageX: true,
+ pageY: true,
+ shiftKey: true,
+ view: true,
+ "char": true,
+ charCode: true,
+ key: true,
+ keyCode: true,
+ button: true,
+ buttons: true,
+ clientX: true,
+ clientY: true,
+ offsetX: true,
+ offsetY: true,
+ pointerId: true,
+ pointerType: true,
+ screenX: true,
+ screenY: true,
+ targetTouches: true,
+ toElement: true,
+ touches: true,
+
+ which: function( event ) {
+ var button = event.button;
+
+ // Add which for key events
+ if ( event.which == null && rkeyEvent.test( event.type ) ) {
+ return event.charCode != null ? event.charCode : event.keyCode;
+ }
+
+ // Add which for click: 1 === left; 2 === middle; 3 === right
+ if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
+ if ( button & 1 ) {
+ return 1;
+ }
+
+ if ( button & 2 ) {
+ return 3;
+ }
+
+ if ( button & 4 ) {
+ return 2;
+ }
+
+ return 0;
+ }
+
+ return event.which;
+ }
+}, jQuery.event.addProp );
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+ mouseenter: "mouseover",
+ mouseleave: "mouseout",
+ pointerenter: "pointerover",
+ pointerleave: "pointerout"
+}, function( orig, fix ) {
+ jQuery.event.special[ orig ] = {
+ delegateType: fix,
+ bindType: fix,
+
+ handle: function( event ) {
+ var ret,
+ target = this,
+ related = event.relatedTarget,
+ handleObj = event.handleObj;
+
+ // For mouseenter/leave call the handler if related is outside the target.
+ // NB: No relatedTarget if the mouse left/entered the browser window
+ if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+ event.type = handleObj.origType;
+ ret = handleObj.handler.apply( this, arguments );
+ event.type = fix;
+ }
+ return ret;
+ }
+ };
+} );
+
+jQuery.fn.extend( {
+
+ on: function( types, selector, data, fn ) {
+ return on( this, types, selector, data, fn );
+ },
+ one: function( types, selector, data, fn ) {
+ return on( this, types, selector, data, fn, 1 );
+ },
+ off: function( types, selector, fn ) {
+ var handleObj, type;
+ if ( types && types.preventDefault && types.handleObj ) {
+
+ // ( event ) dispatched jQuery.Event
+ handleObj = types.handleObj;
+ jQuery( types.delegateTarget ).off(
+ handleObj.namespace ?
+ handleObj.origType + "." + handleObj.namespace :
+ handleObj.origType,
+ handleObj.selector,
+ handleObj.handler
+ );
+ return this;
+ }
+ if ( typeof types === "object" ) {
+
+ // ( types-object [, selector] )
+ for ( type in types ) {
+ this.off( type, selector, types[ type ] );
+ }
+ return this;
+ }
+ if ( selector === false || typeof selector === "function" ) {
+
+ // ( types [, fn] )
+ fn = selector;
+ selector = undefined;
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ }
+ return this.each( function() {
+ jQuery.event.remove( this, types, fn, selector );
+ } );
+ }
+} );
+
+
+var
+
+ /* eslint-disable max-len */
+
+ // See https://github.com/eslint/eslint/issues/3229
+ rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
+
+ /* eslint-enable */
+
+ // Support: IE <=10 - 11, Edge 12 - 13
+ // In IE/Edge using regex groups here causes severe slowdowns.
+ // See https://connect.microsoft.com/IE/feedback/details/1736512/
+ rnoInnerhtml = /
' /* html or false to disable */
+ }, pp_settings);
+
+ // Global variables accessible only by prettyPhoto
+ var matchedObjects = this, percentBased = false, pp_dimensions, pp_open,
+
+ // prettyPhoto container specific
+ pp_contentHeight, pp_contentWidth, pp_containerHeight, pp_containerWidth,
+
+ // Window size
+ windowHeight = $(window).height(), windowWidth = $(window).width(),
+
+ // Global elements
+ pp_slideshow;
+
+ doresize = true, scroll_pos = _get_scroll();
+
+ // Window/Keyboard events
+ $(window).unbind('resize.prettyphoto').bind('resize.prettyphoto',function(){ _center_overlay(); _resize_overlay(); });
+
+ if(pp_settings.keyboard_shortcuts) {
+ $(document).unbind('keydown.prettyphoto').bind('keydown.prettyphoto',function(e){
+ if(typeof $pp_pic_holder != 'undefined'){
+ if($pp_pic_holder.is(':visible')){
+ switch(e.keyCode){
+ case 37:
+ $.prettyPhoto.changePage('previous');
+ e.preventDefault();
+ break;
+ case 39:
+ $.prettyPhoto.changePage('next');
+ e.preventDefault();
+ break;
+ case 27:
+ if(!settings.modal)
+ $.prettyPhoto.close();
+ e.preventDefault();
+ break;
+ };
+ // return false;
+ };
+ };
+ });
+ };
+
+ /**
+ * Initialize prettyPhoto.
+ */
+ $.prettyPhoto.initialize = function() {
+
+ settings = pp_settings;
+
+ if(settings.theme == 'pp_default') settings.horizontal_padding = 16;
+
+ // Find out if the picture is part of a set
+ theRel = $(this).attr(settings.hook);
+ galleryRegExp = /\[(?:.*)\]/;
+ isSet = (galleryRegExp.exec(theRel)) ? true : false;
+
+ // Put the SRCs, TITLEs, ALTs into an array.
+ pp_images = (isSet) ? jQuery.map(matchedObjects, function(n, i){ if($(n).attr(settings.hook).indexOf(theRel) != -1) return $(n).attr('href'); }) : $.makeArray($(this).attr('href'));
+ pp_titles = (isSet) ? jQuery.map(matchedObjects, function(n, i){ if($(n).attr(settings.hook).indexOf(theRel) != -1) return ($(n).find('img').attr('alt')) ? $(n).find('img').attr('alt') : ""; }) : $.makeArray($(this).find('img').attr('alt'));
+ pp_descriptions = (isSet) ? jQuery.map(matchedObjects, function(n, i){ if($(n).attr(settings.hook).indexOf(theRel) != -1) return ($(n).attr('title')) ? $(n).attr('title') : ""; }) : $.makeArray($(this).attr('title'));
+
+ if(pp_images.length > settings.overlay_gallery_max) settings.overlay_gallery = false;
+
+ set_position = jQuery.inArray($(this).attr('href'), pp_images); // Define where in the array the clicked item is positionned
+ rel_index = (isSet) ? set_position : $("a["+settings.hook+"^='"+theRel+"']").index($(this));
+
+ _build_overlay(this); // Build the overlay {this} being the caller
+
+ if(settings.allow_resize)
+ $(window).bind('scroll.prettyphoto',function(){ _center_overlay(); });
+
+
+ $.prettyPhoto.open();
+
+ return false;
+ }
+
+
+ /**
+ * Opens the prettyPhoto modal box.
+ * @param image {String,Array} Full path to the image to be open, can also be an array containing full images paths.
+ * @param title {String,Array} The title to be displayed with the picture, can also be an array containing all the titles.
+ * @param description {String,Array} The description to be displayed with the picture, can also be an array containing all the descriptions.
+ */
+ $.prettyPhoto.open = function(event) {
+ if(typeof settings == "undefined"){ // Means it's an API call, need to manually get the settings and set the variables
+ settings = pp_settings;
+ pp_images = $.makeArray(arguments[0]);
+ pp_titles = (arguments[1]) ? $.makeArray(arguments[1]) : $.makeArray("");
+ pp_descriptions = (arguments[2]) ? $.makeArray(arguments[2]) : $.makeArray("");
+ isSet = (pp_images.length > 1) ? true : false;
+ set_position = (arguments[3])? arguments[3]: 0;
+ _build_overlay(event.target); // Build the overlay {this} being the caller
+ }
+
+ if(settings.hideflash) $('object,embed,iframe[src*=youtube],iframe[src*=vimeo]').css('visibility','hidden'); // Hide the flash
+
+ _checkPosition($(pp_images).size()); // Hide the next/previous links if on first or last images.
+
+ $('.pp_loaderIcon').show();
+
+ if(settings.deeplinking)
+ setHashtag();
+
+ // Rebuild Facebook Like Button with updated href
+ if(settings.social_tools){
+ facebook_like_link = settings.social_tools.replace('{location_href}', encodeURIComponent(location.href));
+ $pp_pic_holder.find('.pp_social').html(facebook_like_link);
+ }
+
+ // Fade the content in
+ if($ppt.is(':hidden')) $ppt.css('opacity',0).show();
+ $pp_overlay.show().fadeTo(settings.animation_speed,settings.opacity);
+
+ // Display the current position
+ $pp_pic_holder.find('.currentTextHolder').text((set_position+1) + settings.counter_separator_label + $(pp_images).size());
+
+ // Set the description
+ if(typeof pp_descriptions[set_position] != 'undefined' && pp_descriptions[set_position] != ""){
+ $pp_pic_holder.find('.pp_description').show().html(unescape(pp_descriptions[set_position]));
+ }else{
+ $pp_pic_holder.find('.pp_description').hide();
+ }
+
+ // Get the dimensions
+ movie_width = ( parseFloat(getParam('width',pp_images[set_position])) ) ? getParam('width',pp_images[set_position]) : settings.default_width.toString();
+ movie_height = ( parseFloat(getParam('height',pp_images[set_position])) ) ? getParam('height',pp_images[set_position]) : settings.default_height.toString();
+
+ // If the size is % based, calculate according to window dimensions
+ percentBased=false;
+ if(movie_height.indexOf('%') != -1) { movie_height = parseFloat(($(window).height() * parseFloat(movie_height) / 100) - 150); percentBased = true; }
+ if(movie_width.indexOf('%') != -1) { movie_width = parseFloat(($(window).width() * parseFloat(movie_width) / 100) - 150); percentBased = true; }
+
+ // Fade the holder
+ $pp_pic_holder.fadeIn(function(){
+ // Set the title
+ (settings.show_title && pp_titles[set_position] != "" && typeof pp_titles[set_position] != "undefined") ? $ppt.html(unescape(pp_titles[set_position])) : $ppt.html(' ');
+
+ imgPreloader = "";
+ skipInjection = false;
+
+ // Inject the proper content
+ switch(_getFileType(pp_images[set_position])){
+ case 'image':
+ imgPreloader = new Image();
+
+ // Preload the neighbour images
+ nextImage = new Image();
+ if(isSet && set_position < $(pp_images).size() -1) nextImage.src = pp_images[set_position + 1];
+ prevImage = new Image();
+ if(isSet && pp_images[set_position - 1]) prevImage.src = pp_images[set_position - 1];
+
+ $pp_pic_holder.find('#pp_full_res')[0].innerHTML = settings.image_markup.replace(/{path}/g,pp_images[set_position]);
+
+ imgPreloader.onload = function(){
+ // Fit item to viewport
+ pp_dimensions = _fitToViewport(imgPreloader.width,imgPreloader.height);
+
+ _showContent();
+ };
+
+ imgPreloader.onerror = function(){
+ alert('Image cannot be loaded. Make sure the path is correct and image exist.');
+ $.prettyPhoto.close();
+ };
+
+ imgPreloader.src = pp_images[set_position];
+ break;
+
+ case 'youtube':
+ pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
+
+ // Regular youtube link
+ movie_id = getParam('v',pp_images[set_position]);
+
+ // youtu.be link
+ if(movie_id == ""){
+ movie_id = pp_images[set_position].split('youtu.be/');
+ movie_id = movie_id[1];
+ if(movie_id.indexOf('?') > 0)
+ movie_id = movie_id.substr(0,movie_id.indexOf('?')); // Strip anything after the ?
+
+ if(movie_id.indexOf('&') > 0)
+ movie_id = movie_id.substr(0,movie_id.indexOf('&')); // Strip anything after the &
+ }
+
+ movie = 'http://www.youtube.com/embed/'+movie_id;
+ (getParam('rel',pp_images[set_position])) ? movie+="?rel="+getParam('rel',pp_images[set_position]) : movie+="?rel=1";
+
+ if(settings.autoplay) movie += "&autoplay=1";
+
+ toInject = settings.iframe_markup.replace(/{width}/g,pp_dimensions['width']).replace(/{height}/g,pp_dimensions['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,movie);
+ break;
+
+ case 'vimeo':
+ pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
+
+ movie_id = pp_images[set_position];
+ var regExp = /http(s?):\/\/(www\.)?vimeo.com\/(\d+)/;
+ var match = movie_id.match(regExp);
+
+ movie = 'http://player.vimeo.com/video/'+ match[3] +'?title=0&byline=0&portrait=0';
+ if(settings.autoplay) movie += "&autoplay=1;";
+
+ vimeo_width = pp_dimensions['width'] + '/embed/?moog_width='+ pp_dimensions['width'];
+
+ toInject = settings.iframe_markup.replace(/{width}/g,vimeo_width).replace(/{height}/g,pp_dimensions['height']).replace(/{path}/g,movie);
+ break;
+
+ case 'quicktime':
+ pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
+ pp_dimensions['height']+=15; pp_dimensions['contentHeight']+=15; pp_dimensions['containerHeight']+=15; // Add space for the control bar
+
+ toInject = settings.quicktime_markup.replace(/{width}/g,pp_dimensions['width']).replace(/{height}/g,pp_dimensions['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,pp_images[set_position]).replace(/{autoplay}/g,settings.autoplay);
+ break;
+
+ case 'flash':
+ pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
+
+ flash_vars = pp_images[set_position];
+ flash_vars = flash_vars.substring(pp_images[set_position].indexOf('flashvars') + 10,pp_images[set_position].length);
+
+ filename = pp_images[set_position];
+ filename = filename.substring(0,filename.indexOf('?'));
+
+ toInject = settings.flash_markup.replace(/{width}/g,pp_dimensions['width']).replace(/{height}/g,pp_dimensions['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,filename+'?'+flash_vars);
+ break;
+
+ case 'iframe':
+ pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
+
+ frame_url = pp_images[set_position];
+ frame_url = frame_url.substr(0,frame_url.indexOf('iframe')-1);
+
+ toInject = settings.iframe_markup.replace(/{width}/g,pp_dimensions['width']).replace(/{height}/g,pp_dimensions['height']).replace(/{path}/g,frame_url);
+ break;
+
+ case 'ajax':
+ doresize = false; // Make sure the dimensions are not resized.
+ pp_dimensions = _fitToViewport(movie_width,movie_height);
+ doresize = true; // Reset the dimensions
+
+ skipInjection = true;
+ $.get(pp_images[set_position],function(responseHTML){
+ toInject = settings.inline_markup.replace(/{content}/g,responseHTML);
+ $pp_pic_holder.find('#pp_full_res')[0].innerHTML = toInject;
+ _showContent();
+ });
+
+ break;
+
+ case 'custom':
+ pp_dimensions = _fitToViewport(movie_width,movie_height); // Fit item to viewport
+
+ toInject = settings.custom_markup;
+ break;
+
+ case 'inline':
+ // to get the item height clone it, apply default width, wrap it in the prettyPhoto containers , then delete
+ myClone = $(pp_images[set_position]).clone().append(' ').css({'width':settings.default_width}).wrapInner('').appendTo($('body')).show();
+ doresize = false; // Make sure the dimensions are not resized.
+ pp_dimensions = _fitToViewport($(myClone).width(),$(myClone).height());
+ doresize = true; // Reset the dimensions
+ $(myClone).remove();
+ toInject = settings.inline_markup.replace(/{content}/g,$(pp_images[set_position]).html());
+ break;
+ };
+
+ if(!imgPreloader && !skipInjection){
+ $pp_pic_holder.find('#pp_full_res')[0].innerHTML = toInject;
+
+ // Show content
+ _showContent();
+ };
+ });
+
+ return false;
+ };
+
+
+ /**
+ * Change page in the prettyPhoto modal box
+ * @param direction {String} Direction of the paging, previous or next.
+ */
+ $.prettyPhoto.changePage = function(direction){
+ currentGalleryPage = 0;
+
+ if(direction == 'previous') {
+ set_position--;
+ if (set_position < 0) set_position = $(pp_images).size()-1;
+ }else if(direction == 'next'){
+ set_position++;
+ if(set_position > $(pp_images).size()-1) set_position = 0;
+ }else{
+ set_position=direction;
+ };
+
+ rel_index = set_position;
+
+ if(!doresize) doresize = true; // Allow the resizing of the images
+ if(settings.allow_expand) {
+ $('.pp_contract').removeClass('pp_contract').addClass('pp_expand');
+ }
+
+ _hideContent(function(){ $.prettyPhoto.open(); });
+ };
+
+
+ /**
+ * Change gallery page in the prettyPhoto modal box
+ * @param direction {String} Direction of the paging, previous or next.
+ */
+ $.prettyPhoto.changeGalleryPage = function(direction){
+ if(direction=='next'){
+ currentGalleryPage ++;
+
+ if(currentGalleryPage > totalPage) currentGalleryPage = 0;
+ }else if(direction=='previous'){
+ currentGalleryPage --;
+
+ if(currentGalleryPage < 0) currentGalleryPage = totalPage;
+ }else{
+ currentGalleryPage = direction;
+ };
+
+ slide_speed = (direction == 'next' || direction == 'previous') ? settings.animation_speed : 0;
+
+ slide_to = currentGalleryPage * (itemsPerPage * itemWidth);
+
+ $pp_gallery.find('ul').animate({left:-slide_to},slide_speed);
+ };
+
+
+ /**
+ * Start the slideshow...
+ */
+ $.prettyPhoto.startSlideshow = function(){
+ if(typeof pp_slideshow == 'undefined'){
+ $pp_pic_holder.find('.pp_play').unbind('click').removeClass('pp_play').addClass('pp_pause').click(function(){
+ $.prettyPhoto.stopSlideshow();
+ return false;
+ });
+ pp_slideshow = setInterval($.prettyPhoto.startSlideshow,settings.slideshow);
+ }else{
+ $.prettyPhoto.changePage('next');
+ };
+ }
+
+
+ /**
+ * Stop the slideshow...
+ */
+ $.prettyPhoto.stopSlideshow = function(){
+ $pp_pic_holder.find('.pp_pause').unbind('click').removeClass('pp_pause').addClass('pp_play').click(function(){
+ $.prettyPhoto.startSlideshow();
+ return false;
+ });
+ clearInterval(pp_slideshow);
+ pp_slideshow=undefined;
+ }
+
+
+ /**
+ * Closes prettyPhoto.
+ */
+ $.prettyPhoto.close = function(){
+ if($pp_overlay.is(":animated")) return;
+
+ $.prettyPhoto.stopSlideshow();
+
+ $pp_pic_holder.stop().find('object,embed').css('visibility','hidden');
+
+ $('div.pp_pic_holder,div.ppt,.pp_fade').fadeOut(settings.animation_speed,function(){ $(this).remove(); });
+
+ $pp_overlay.fadeOut(settings.animation_speed, function(){
+
+ if(settings.hideflash) $('object,embed,iframe[src*=youtube],iframe[src*=vimeo]').css('visibility','visible'); // Show the flash
+
+ $(this).remove(); // No more need for the prettyPhoto markup
+
+ $(window).unbind('scroll.prettyphoto');
+
+ clearHashtag();
+
+ settings.callback();
+
+ doresize = true;
+
+ pp_open = false;
+
+ delete settings;
+ });
+ };
+
+ /**
+ * Set the proper sizes on the containers and animate the content in.
+ */
+ function _showContent(){
+ $('.pp_loaderIcon').hide();
+
+ // Calculate the opened top position of the pic holder
+ projectedTop = scroll_pos['scrollTop'] + ((windowHeight/2) - (pp_dimensions['containerHeight']/2));
+ if(projectedTop < 0) projectedTop = 0;
+
+ $ppt.fadeTo(settings.animation_speed,1);
+
+ // Resize the content holder
+ $pp_pic_holder.find('.pp_content')
+ .animate({
+ height:pp_dimensions['contentHeight'],
+ width:pp_dimensions['contentWidth']
+ },settings.animation_speed);
+
+ // Resize picture the holder
+ $pp_pic_holder.animate({
+ 'top': projectedTop,
+ 'left': ((windowWidth/2) - (pp_dimensions['containerWidth']/2) < 0) ? 0 : (windowWidth/2) - (pp_dimensions['containerWidth']/2),
+ width:pp_dimensions['containerWidth']
+ },settings.animation_speed,function(){
+ $pp_pic_holder.find('.pp_hoverContainer,#fullResImage').height(pp_dimensions['height']).width(pp_dimensions['width']);
+
+ $pp_pic_holder.find('.pp_fade').fadeIn(settings.animation_speed); // Fade the new content
+
+ // Show the nav
+ if(isSet && _getFileType(pp_images[set_position])=="image") { $pp_pic_holder.find('.pp_hoverContainer').show(); }else{ $pp_pic_holder.find('.pp_hoverContainer').hide(); }
+
+ if(settings.allow_expand) {
+ if(pp_dimensions['resized']){ // Fade the resizing link if the image is resized
+ $('a.pp_expand,a.pp_contract').show();
+ }else{
+ $('a.pp_expand').hide();
+ }
+ }
+
+ if(settings.autoplay_slideshow && !pp_slideshow && !pp_open) $.prettyPhoto.startSlideshow();
+
+ settings.changepicturecallback(); // Callback!
+
+ pp_open = true;
+ });
+
+ _insert_gallery();
+ pp_settings.ajaxcallback();
+ };
+
+ /**
+ * Hide the content...DUH!
+ */
+ function _hideContent(callback){
+ // Fade out the current picture
+ $pp_pic_holder.find('#pp_full_res object,#pp_full_res embed').css('visibility','hidden');
+ $pp_pic_holder.find('.pp_fade').fadeOut(settings.animation_speed,function(){
+ $('.pp_loaderIcon').show();
+
+ callback();
+ });
+ };
+
+ /**
+ * Check the item position in the gallery array, hide or show the navigation links
+ * @param setCount {integer} The total number of items in the set
+ */
+ function _checkPosition(setCount){
+ (setCount > 1) ? $('.pp_nav').show() : $('.pp_nav').hide(); // Hide the bottom nav if it's not a set.
+ };
+
+ /**
+ * Resize the item dimensions if it's bigger than the viewport
+ * @param width {integer} Width of the item to be opened
+ * @param height {integer} Height of the item to be opened
+ * @return An array containin the "fitted" dimensions
+ */
+ function _fitToViewport(width,height){
+ resized = false;
+
+ _getDimensions(width,height);
+
+ // Define them in case there's no resize needed
+ imageWidth = width, imageHeight = height;
+
+ if( ((pp_containerWidth > windowWidth) || (pp_containerHeight > windowHeight)) && doresize && settings.allow_resize && !percentBased) {
+ resized = true, fitting = false;
+
+ while (!fitting){
+ if((pp_containerWidth > windowWidth)){
+ imageWidth = (windowWidth - 200);
+ imageHeight = (height/width) * imageWidth;
+ }else if((pp_containerHeight > windowHeight)){
+ imageHeight = (windowHeight - 200);
+ imageWidth = (width/height) * imageHeight;
+ }else{
+ fitting = true;
+ };
+
+ pp_containerHeight = imageHeight, pp_containerWidth = imageWidth;
+ };
+
+
+
+ if((pp_containerWidth > windowWidth) || (pp_containerHeight > windowHeight)){
+ _fitToViewport(pp_containerWidth,pp_containerHeight)
+ };
+
+ _getDimensions(imageWidth,imageHeight);
+ };
+
+ return {
+ width:Math.floor(imageWidth),
+ height:Math.floor(imageHeight),
+ containerHeight:Math.floor(pp_containerHeight),
+ containerWidth:Math.floor(pp_containerWidth) + (settings.horizontal_padding * 2),
+ contentHeight:Math.floor(pp_contentHeight),
+ contentWidth:Math.floor(pp_contentWidth),
+ resized:resized
+ };
+ };
+
+ /**
+ * Get the containers dimensions according to the item size
+ * @param width {integer} Width of the item to be opened
+ * @param height {integer} Height of the item to be opened
+ */
+ function _getDimensions(width,height){
+ width = parseFloat(width);
+ height = parseFloat(height);
+
+ // Get the details height, to do so, I need to clone it since it's invisible
+ $pp_details = $pp_pic_holder.find('.pp_details');
+ $pp_details.width(width);
+ detailsHeight = parseFloat($pp_details.css('marginTop')) + parseFloat($pp_details.css('marginBottom'));
+
+ $pp_details = $pp_details.clone().addClass(settings.theme).width(width).appendTo($('body')).css({
+ 'position':'absolute',
+ 'top':-10000
+ });
+ detailsHeight += $pp_details.height();
+ detailsHeight = (detailsHeight <= 34) ? 36 : detailsHeight; // Min-height for the details
+ $pp_details.remove();
+
+ // Get the titles height, to do so, I need to clone it since it's invisible
+ $pp_title = $pp_pic_holder.find('.ppt');
+ $pp_title.width(width);
+ titleHeight = parseFloat($pp_title.css('marginTop')) + parseFloat($pp_title.css('marginBottom'));
+ $pp_title = $pp_title.clone().appendTo($('body')).css({
+ 'position':'absolute',
+ 'top':-10000
+ });
+ titleHeight += $pp_title.height();
+ $pp_title.remove();
+
+ // Get the container size, to resize the holder to the right dimensions
+ pp_contentHeight = height + detailsHeight;
+ pp_contentWidth = width;
+ pp_containerHeight = pp_contentHeight + titleHeight + $pp_pic_holder.find('.pp_top').height() + $pp_pic_holder.find('.pp_bottom').height();
+ pp_containerWidth = width;
+ }
+
+ function _getFileType(itemSrc){
+ if (itemSrc.match(/youtube\.com\/watch/i) || itemSrc.match(/youtu\.be/i)) {
+ return 'youtube';
+ }else if (itemSrc.match(/vimeo\.com/i)) {
+ return 'vimeo';
+ }else if(itemSrc.match(/\b.mov\b/i)){
+ return 'quicktime';
+ }else if(itemSrc.match(/\b.swf\b/i)){
+ return 'flash';
+ }else if(itemSrc.match(/\biframe=true\b/i)){
+ return 'iframe';
+ }else if(itemSrc.match(/\bajax=true\b/i)){
+ return 'ajax';
+ }else if(itemSrc.match(/\bcustom=true\b/i)){
+ return 'custom';
+ }else if(itemSrc.substr(0,1) == '#'){
+ return 'inline';
+ }else{
+ return 'image';
+ };
+ };
+
+ function _center_overlay(){
+ if(doresize && typeof $pp_pic_holder != 'undefined') {
+ scroll_pos = _get_scroll();
+ contentHeight = $pp_pic_holder.height(), contentwidth = $pp_pic_holder.width();
+
+ projectedTop = (windowHeight/2) + scroll_pos['scrollTop'] - (contentHeight/2);
+ if(projectedTop < 0) projectedTop = 0;
+
+ if(contentHeight > windowHeight)
+ return;
+
+ $pp_pic_holder.css({
+ 'top': projectedTop,
+ 'left': (windowWidth/2) + scroll_pos['scrollLeft'] - (contentwidth/2)
+ });
+ };
+ };
+
+ function _get_scroll(){
+ if (self.pageYOffset) {
+ return {scrollTop:self.pageYOffset,scrollLeft:self.pageXOffset};
+ } else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
+ return {scrollTop:document.documentElement.scrollTop,scrollLeft:document.documentElement.scrollLeft};
+ } else if (document.body) {// all other Explorers
+ return {scrollTop:document.body.scrollTop,scrollLeft:document.body.scrollLeft};
+ };
+ };
+
+ function _resize_overlay() {
+ windowHeight = $(window).height(), windowWidth = $(window).width();
+
+ if(typeof $pp_overlay != "undefined") $pp_overlay.height($(document).height()).width(windowWidth);
+ };
+
+ function _insert_gallery(){
+ if(isSet && settings.overlay_gallery && _getFileType(pp_images[set_position])=="image") {
+ itemWidth = 52+5; // 52 beign the thumb width, 5 being the right margin.
+ navWidth = (settings.theme == "facebook" || settings.theme == "pp_default") ? 50 : 30; // Define the arrow width depending on the theme
+
+ itemsPerPage = Math.floor((pp_dimensions['containerWidth'] - 100 - navWidth) / itemWidth);
+ itemsPerPage = (itemsPerPage < pp_images.length) ? itemsPerPage : pp_images.length;
+ totalPage = Math.ceil(pp_images.length / itemsPerPage) - 1;
+
+ // Hide the nav in the case there's no need for links
+ if(totalPage == 0){
+ navWidth = 0; // No nav means no width!
+ $pp_gallery.find('.pp_arrow_next,.pp_arrow_previous').hide();
+ }else{
+ $pp_gallery.find('.pp_arrow_next,.pp_arrow_previous').show();
+ };
+
+ galleryWidth = itemsPerPage * itemWidth;
+ fullGalleryWidth = pp_images.length * itemWidth;
+
+ // Set the proper width to the gallery items
+ $pp_gallery
+ .css('margin-left',-((galleryWidth/2) + (navWidth/2)))
+ .find('div:first').width(galleryWidth+5)
+ .find('ul').width(fullGalleryWidth)
+ .find('li.selected').removeClass('selected');
+
+ goToPage = (Math.floor(set_position/itemsPerPage) < totalPage) ? Math.floor(set_position/itemsPerPage) : totalPage;
+
+ $.prettyPhoto.changeGalleryPage(goToPage);
+
+ $pp_gallery_li.filter(':eq('+set_position+')').addClass('selected');
+ }else{
+ $pp_pic_holder.find('.pp_content').unbind('mouseenter mouseleave');
+ // $pp_gallery.hide();
+ }
+ }
+
+ function _build_overlay(caller){
+ // Inject Social Tool markup into General markup
+ if(settings.social_tools)
+ facebook_like_link = settings.social_tools.replace('{location_href}', encodeURIComponent(location.href));
+
+ settings.markup = settings.markup.replace('{pp_social}','');
+
+ $('body').append(settings.markup); // Inject the markup
+
+ $pp_pic_holder = $('.pp_pic_holder') , $ppt = $('.ppt'), $pp_overlay = $('div.pp_overlay'); // Set my global selectors
+
+ // Inject the inline gallery!
+ if(isSet && settings.overlay_gallery) {
+ currentGalleryPage = 0;
+ toInject = "";
+ for (var i=0; i < pp_images.length; i++) {
+ if(!pp_images[i].match(/\b(jpg|jpeg|png|gif)\b/gi)){
+ classname = 'default';
+ img_src = '';
+ }else{
+ classname = '';
+ img_src = pp_images[i];
+ }
+ toInject += " ";
+ };
+
+ toInject = settings.gallery_markup.replace(/{gallery}/g,toInject);
+
+ $pp_pic_holder.find('#pp_full_res').after(toInject);
+
+ $pp_gallery = $('.pp_pic_holder .pp_gallery'), $pp_gallery_li = $pp_gallery.find('li'); // Set the gallery selectors
+
+ $pp_gallery.find('.pp_arrow_next').click(function(){
+ $.prettyPhoto.changeGalleryPage('next');
+ $.prettyPhoto.stopSlideshow();
+ return false;
+ });
+
+ $pp_gallery.find('.pp_arrow_previous').click(function(){
+ $.prettyPhoto.changeGalleryPage('previous');
+ $.prettyPhoto.stopSlideshow();
+ return false;
+ });
+
+ $pp_pic_holder.find('.pp_content').hover(
+ function(){
+ $pp_pic_holder.find('.pp_gallery:not(.disabled)').fadeIn();
+ },
+ function(){
+ $pp_pic_holder.find('.pp_gallery:not(.disabled)').fadeOut();
+ });
+
+ itemWidth = 52+5; // 52 beign the thumb width, 5 being the right margin.
+ $pp_gallery_li.each(function(i){
+ $(this)
+ .find('a')
+ .click(function(){
+ $.prettyPhoto.changePage(i);
+ $.prettyPhoto.stopSlideshow();
+ return false;
+ });
+ });
+ };
+
+
+ // Inject the play/pause if it's a slideshow
+ if(settings.slideshow){
+ $pp_pic_holder.find('.pp_nav').prepend('Play ')
+ $pp_pic_holder.find('.pp_nav .pp_play').click(function(){
+ $.prettyPhoto.startSlideshow();
+ return false;
+ });
+ }
+
+ $pp_pic_holder.attr('class','pp_pic_holder ' + settings.theme); // Set the proper theme
+
+ $pp_overlay
+ .css({
+ 'opacity':0,
+ 'height':$(document).height(),
+ 'width':$(window).width()
+ })
+ .bind('click',function(){
+ if(!settings.modal) $.prettyPhoto.close();
+ });
+
+ $('a.pp_close').bind('click',function(){ $.prettyPhoto.close(); return false; });
+
+
+ if(settings.allow_expand) {
+ $('a.pp_expand').bind('click',function(e){
+ // Expand the image
+ if($(this).hasClass('pp_expand')){
+ $(this).removeClass('pp_expand').addClass('pp_contract');
+ doresize = false;
+ }else{
+ $(this).removeClass('pp_contract').addClass('pp_expand');
+ doresize = true;
+ };
+
+ _hideContent(function(){ $.prettyPhoto.open(); });
+
+ return false;
+ });
+ }
+
+ $pp_pic_holder.find('.pp_previous, .pp_nav .pp_arrow_previous').bind('click',function(){
+ $.prettyPhoto.changePage('previous');
+ $.prettyPhoto.stopSlideshow();
+ return false;
+ });
+
+ $pp_pic_holder.find('.pp_next, .pp_nav .pp_arrow_next').bind('click',function(){
+ $.prettyPhoto.changePage('next');
+ $.prettyPhoto.stopSlideshow();
+ return false;
+ });
+
+ _center_overlay(); // Center it
+ };
+
+ if(!pp_alreadyInitialized && getHashtag()){
+ pp_alreadyInitialized = true;
+
+ // Grab the rel index to trigger the click on the correct element
+ hashIndex = getHashtag();
+ hashRel = hashIndex;
+ hashIndex = hashIndex.substring(hashIndex.indexOf('/')+1,hashIndex.length-1);
+ hashRel = hashRel.substring(0,hashRel.indexOf('/'));
+
+ // Little timeout to make sure all the prettyPhoto initialize scripts has been run.
+ // Useful in the event the page contain several init scripts.
+ setTimeout(function(){ $("a["+pp_settings.hook+"^='"+hashRel+"']:eq("+hashIndex+")").trigger('click'); },50);
+ }
+
+ return this.unbind('click.prettyphoto').bind('click.prettyphoto',$.prettyPhoto.initialize); // Return the jQuery object for chaining. The unbind method is used to avoid click conflict when the plugin is called more than once
+ };
+
+ function getHashtag(){
+ var url = location.href;
+ hashtag = (url.indexOf('#prettyPhoto') !== -1) ? decodeURI(url.substring(url.indexOf('#prettyPhoto')+1,url.length)) : false;
+ if(hashtag){ hashtag = hashtag.replace(/<|>/g,''); }
+ return hashtag;
+ };
+
+ function setHashtag(){
+ if(typeof theRel == 'undefined') return; // theRel is set on normal calls, it's impossible to deeplink using the API
+ location.hash = theRel + '/'+rel_index+'/';
+ };
+
+ function clearHashtag(){
+ if ( location.href.indexOf('#prettyPhoto') !== -1 ) location.hash = "prettyPhoto";
+ }
+
+ function getParam(name,url){
+ name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
+ var regexS = "[\\?&]"+name+"=([^]*)";
+ var regex = new RegExp( regexS );
+ var results = regex.exec( url );
+ return ( results == null ) ? "" : results[1];
+ }
+
+})(jQuery);
+
+var pp_alreadyInitialized = false; // Used for the deep linking to make sure not to call the same function several times.
diff --git a/trunk/src/AppBundle/Resources/public/js/owl.carousel-2.2.0.js b/trunk/src/AppBundle/Resources/public/js/owl.carousel-2.2.0.js
new file mode 100644
index 00000000..b112f2f6
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/js/owl.carousel-2.2.0.js
@@ -0,0 +1,3273 @@
+/**
+ * Owl Carousel v2.2.0
+ * Copyright 2013-2016 David Deutsch
+ * Licensed under MIT (https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE)
+ */
+/**
+ * Owl carousel
+ * @version 2.1.6
+ * @author Bartosz Wojciechowski
+ * @author David Deutsch
+ * @license The MIT License (MIT)
+ * @todo Lazy Load Icon
+ * @todo prevent animationend bubling
+ * @todo itemsScaleUp
+ * @todo Test Zepto
+ * @todo stagePadding calculate wrong active classes
+ */
+;(function($, window, document, undefined) {
+
+ /**
+ * Creates a carousel.
+ * @class The Owl Carousel.
+ * @public
+ * @param {HTMLElement|jQuery} element - The element to create the carousel for.
+ * @param {Object} [options] - The options
+ */
+ function Owl(element, options) {
+
+ /**
+ * Current settings for the carousel.
+ * @public
+ */
+ this.settings = null;
+
+ /**
+ * Current options set by the caller including defaults.
+ * @public
+ */
+ this.options = $.extend({}, Owl.Defaults, options);
+
+ /**
+ * Plugin element.
+ * @public
+ */
+ this.$element = $(element);
+
+ /**
+ * Proxied event handlers.
+ * @protected
+ */
+ this._handlers = {};
+
+ /**
+ * References to the running plugins of this carousel.
+ * @protected
+ */
+ this._plugins = {};
+
+ /**
+ * Currently suppressed events to prevent them from beeing retriggered.
+ * @protected
+ */
+ this._supress = {};
+
+ /**
+ * Absolute current position.
+ * @protected
+ */
+ this._current = null;
+
+ /**
+ * Animation speed in milliseconds.
+ * @protected
+ */
+ this._speed = null;
+
+ /**
+ * Coordinates of all items in pixel.
+ * @todo The name of this member is missleading.
+ * @protected
+ */
+ this._coordinates = [];
+
+ /**
+ * Current breakpoint.
+ * @todo Real media queries would be nice.
+ * @protected
+ */
+ this._breakpoint = null;
+
+ /**
+ * Current width of the plugin element.
+ */
+ this._width = null;
+
+ /**
+ * All real items.
+ * @protected
+ */
+ this._items = [];
+
+ /**
+ * All cloned items.
+ * @protected
+ */
+ this._clones = [];
+
+ /**
+ * Merge values of all items.
+ * @todo Maybe this could be part of a plugin.
+ * @protected
+ */
+ this._mergers = [];
+
+ /**
+ * Widths of all items.
+ */
+ this._widths = [];
+
+ /**
+ * Invalidated parts within the update process.
+ * @protected
+ */
+ this._invalidated = {};
+
+ /**
+ * Ordered list of workers for the update process.
+ * @protected
+ */
+ this._pipe = [];
+
+ /**
+ * Current state information for the drag operation.
+ * @todo #261
+ * @protected
+ */
+ this._drag = {
+ time: null,
+ target: null,
+ pointer: null,
+ stage: {
+ start: null,
+ current: null
+ },
+ direction: null
+ };
+
+ /**
+ * Current state information and their tags.
+ * @type {Object}
+ * @protected
+ */
+ this._states = {
+ current: {},
+ tags: {
+ 'initializing': [ 'busy' ],
+ 'animating': [ 'busy' ],
+ 'dragging': [ 'interacting' ]
+ }
+ };
+
+ $.each([ 'onResize', 'onThrottledResize' ], $.proxy(function(i, handler) {
+ this._handlers[handler] = $.proxy(this[handler], this);
+ }, this));
+
+ $.each(Owl.Plugins, $.proxy(function(key, plugin) {
+ this._plugins[key.charAt(0).toLowerCase() + key.slice(1)]
+ = new plugin(this);
+ }, this));
+
+ $.each(Owl.Workers, $.proxy(function(priority, worker) {
+ this._pipe.push({
+ 'filter': worker.filter,
+ 'run': $.proxy(worker.run, this)
+ });
+ }, this));
+
+ this.setup();
+ this.initialize();
+ }
+
+ /**
+ * Default options for the carousel.
+ * @public
+ */
+ Owl.Defaults = {
+ items: 3,
+ loop: false,
+ center: false,
+ rewind: false,
+
+ mouseDrag: true,
+ touchDrag: true,
+ pullDrag: true,
+ freeDrag: false,
+
+ margin: 0,
+ stagePadding: 0,
+
+ merge: false,
+ mergeFit: true,
+ autoWidth: false,
+
+ startPosition: 0,
+ rtl: false,
+
+ smartSpeed: 250,
+ fluidSpeed: false,
+ dragEndSpeed: false,
+
+ responsive: {},
+ responsiveRefreshRate: 200,
+ responsiveBaseElement: window,
+
+ fallbackEasing: 'swing',
+
+ info: false,
+
+ nestedItemSelector: false,
+ itemElement: 'div',
+ stageElement: 'div',
+
+ refreshClass: 'owl-refresh',
+ loadedClass: 'owl-loaded',
+ loadingClass: 'owl-loading',
+ rtlClass: 'owl-rtl',
+ responsiveClass: 'owl-responsive',
+ dragClass: 'owl-drag',
+ itemClass: 'owl-item',
+ stageClass: 'owl-stage',
+ stageOuterClass: 'owl-stage-outer',
+ grabClass: 'owl-grab'
+ };
+
+ /**
+ * Enumeration for width.
+ * @public
+ * @readonly
+ * @enum {String}
+ */
+ Owl.Width = {
+ Default: 'default',
+ Inner: 'inner',
+ Outer: 'outer'
+ };
+
+ /**
+ * Enumeration for types.
+ * @public
+ * @readonly
+ * @enum {String}
+ */
+ Owl.Type = {
+ Event: 'event',
+ State: 'state'
+ };
+
+ /**
+ * Contains all registered plugins.
+ * @public
+ */
+ Owl.Plugins = {};
+
+ /**
+ * List of workers involved in the update process.
+ */
+ Owl.Workers = [ {
+ filter: [ 'width', 'settings' ],
+ run: function() {
+ this._width = this.$element.width();
+ }
+ }, {
+ filter: [ 'width', 'items', 'settings' ],
+ run: function(cache) {
+ cache.current = this._items && this._items[this.relative(this._current)];
+ }
+ }, {
+ filter: [ 'items', 'settings' ],
+ run: function() {
+ this.$stage.children('.cloned').remove();
+ }
+ }, {
+ filter: [ 'width', 'items', 'settings' ],
+ run: function(cache) {
+ var margin = this.settings.margin || '',
+ grid = !this.settings.autoWidth,
+ rtl = this.settings.rtl,
+ css = {
+ 'width': 'auto',
+ 'margin-left': rtl ? margin : '',
+ 'margin-right': rtl ? '' : margin
+ };
+
+ !grid && this.$stage.children().css(css);
+
+ cache.css = css;
+ }
+ }, {
+ filter: [ 'width', 'items', 'settings' ],
+ run: function(cache) {
+ var width = (this.width() / this.settings.items).toFixed(3) - this.settings.margin,
+ merge = null,
+ iterator = this._items.length,
+ grid = !this.settings.autoWidth,
+ widths = [];
+
+ cache.items = {
+ merge: false,
+ width: width
+ };
+
+ while (iterator--) {
+ merge = this._mergers[iterator];
+ merge = this.settings.mergeFit && Math.min(merge, this.settings.items) || merge;
+
+ cache.items.merge = merge > 1 || cache.items.merge;
+
+ widths[iterator] = !grid ? this._items[iterator].width() : width * merge;
+ }
+
+ this._widths = widths;
+ }
+ }, {
+ filter: [ 'items', 'settings' ],
+ run: function() {
+ var clones = [],
+ items = this._items,
+ settings = this.settings,
+ view = Math.max(settings.items * 2, 4),
+ size = Math.ceil(items.length / 2) * 2,
+ repeat = settings.loop && items.length ? settings.rewind ? view : Math.max(view, size) : 0,
+ append = '',
+ prepend = '';
+
+ repeat /= 2;
+
+ while (repeat--) {
+ clones.push(this.normalize(clones.length / 2, true));
+ append = append + items[clones[clones.length - 1]][0].outerHTML;
+ clones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true));
+ prepend = items[clones[clones.length - 1]][0].outerHTML + prepend;
+ }
+
+ this._clones = clones;
+
+ $(append).addClass('cloned').appendTo(this.$stage);
+ $(prepend).addClass('cloned').prependTo(this.$stage);
+ }
+ }, {
+ filter: [ 'width', 'items', 'settings' ],
+ run: function() {
+ var rtl = this.settings.rtl ? 1 : -1,
+ size = this._clones.length + this._items.length,
+ iterator = -1,
+ previous = 0,
+ current = 0,
+ coordinates = [];
+
+ while (++iterator < size) {
+ previous = coordinates[iterator - 1] || 0;
+ current = this._widths[this.relative(iterator)] + this.settings.margin;
+ coordinates.push(previous + current * rtl);
+ }
+
+ this._coordinates = coordinates;
+ }
+ }, {
+ filter: [ 'width', 'items', 'settings' ],
+ run: function() {
+ var padding = this.settings.stagePadding,
+ coordinates = this._coordinates,
+ css = {
+ 'width': Math.ceil(Math.abs(coordinates[coordinates.length - 1])) + padding * 2,
+ 'padding-left': padding || '',
+ 'padding-right': padding || ''
+ };
+
+ this.$stage.css(css);
+ }
+ }, {
+ filter: [ 'width', 'items', 'settings' ],
+ run: function(cache) {
+ var iterator = this._coordinates.length,
+ grid = !this.settings.autoWidth,
+ items = this.$stage.children();
+
+ if (grid && cache.items.merge) {
+ while (iterator--) {
+ cache.css.width = this._widths[this.relative(iterator)];
+ items.eq(iterator).css(cache.css);
+ }
+ } else if (grid) {
+ cache.css.width = cache.items.width;
+ items.css(cache.css);
+ }
+ }
+ }, {
+ filter: [ 'items' ],
+ run: function() {
+ this._coordinates.length < 1 && this.$stage.removeAttr('style');
+ }
+ }, {
+ filter: [ 'width', 'items', 'settings' ],
+ run: function(cache) {
+ cache.current = cache.current ? this.$stage.children().index(cache.current) : 0;
+ cache.current = Math.max(this.minimum(), Math.min(this.maximum(), cache.current));
+ this.reset(cache.current);
+ }
+ }, {
+ filter: [ 'position' ],
+ run: function() {
+ this.animate(this.coordinates(this._current));
+ }
+ }, {
+ filter: [ 'width', 'position', 'items', 'settings' ],
+ run: function() {
+ var rtl = this.settings.rtl ? 1 : -1,
+ padding = this.settings.stagePadding * 2,
+ begin = this.coordinates(this.current()) + padding,
+ end = begin + this.width() * rtl,
+ inner, outer, matches = [], i, n;
+
+ for (i = 0, n = this._coordinates.length; i < n; i++) {
+ inner = this._coordinates[i - 1] || 0;
+ outer = Math.abs(this._coordinates[i]) + padding * rtl;
+
+ if ((this.op(inner, '<=', begin) && (this.op(inner, '>', end)))
+ || (this.op(outer, '<', begin) && this.op(outer, '>', end))) {
+ matches.push(i);
+ }
+ }
+
+ this.$stage.children('.active').removeClass('active');
+ this.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass('active');
+
+ if (this.settings.center) {
+ this.$stage.children('.center').removeClass('center');
+ this.$stage.children().eq(this.current()).addClass('center');
+ }
+ }
+ } ];
+
+ /**
+ * Initializes the carousel.
+ * @protected
+ */
+ Owl.prototype.initialize = function() {
+ this.enter('initializing');
+ this.trigger('initialize');
+
+ this.$element.toggleClass(this.settings.rtlClass, this.settings.rtl);
+
+ if (this.settings.autoWidth && !this.is('pre-loading')) {
+ var imgs, nestedSelector, width;
+ imgs = this.$element.find('img');
+ nestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined;
+ width = this.$element.children(nestedSelector).width();
+
+ if (imgs.length && width <= 0) {
+ this.preloadAutoWidthImages(imgs);
+ }
+ }
+
+ this.$element.addClass(this.options.loadingClass);
+
+ // create stage
+ this.$stage = $('<' + this.settings.stageElement + ' class="' + this.settings.stageClass + '"/>')
+ .wrap('
');
+
+ // append stage
+ this.$element.append(this.$stage.parent());
+
+ // append content
+ this.replace(this.$element.children().not(this.$stage.parent()));
+
+ // check visibility
+ if (this.$element.is(':visible')) {
+ // update view
+ this.refresh();
+ } else {
+ // invalidate width
+ this.invalidate('width');
+ }
+
+ this.$element
+ .removeClass(this.options.loadingClass)
+ .addClass(this.options.loadedClass);
+
+ // register event handlers
+ this.registerEventHandlers();
+
+ this.leave('initializing');
+ this.trigger('initialized');
+ };
+
+ /**
+ * Setups the current settings.
+ * @todo Remove responsive classes. Why should adaptive designs be brought into IE8?
+ * @todo Support for media queries by using `matchMedia` would be nice.
+ * @public
+ */
+ Owl.prototype.setup = function() {
+ var viewport = this.viewport(),
+ overwrites = this.options.responsive,
+ match = -1,
+ settings = null;
+
+ if (!overwrites) {
+ settings = $.extend({}, this.options);
+ } else {
+ $.each(overwrites, function(breakpoint) {
+ if (breakpoint <= viewport && breakpoint > match) {
+ match = Number(breakpoint);
+ }
+ });
+
+ settings = $.extend({}, this.options, overwrites[match]);
+ if (typeof settings.stagePadding === 'function') {
+ settings.stagePadding = settings.stagePadding();
+ }
+ delete settings.responsive;
+
+ // responsive class
+ if (settings.responsiveClass) {
+ this.$element.attr('class',
+ this.$element.attr('class').replace(new RegExp('(' + this.options.responsiveClass + '-)\\S+\\s', 'g'), '$1' + match)
+ );
+ }
+ }
+
+ this.trigger('change', { property: { name: 'settings', value: settings } });
+ this._breakpoint = match;
+ this.settings = settings;
+ this.invalidate('settings');
+ this.trigger('changed', { property: { name: 'settings', value: this.settings } });
+ };
+
+ /**
+ * Updates option logic if necessery.
+ * @protected
+ */
+ Owl.prototype.optionsLogic = function() {
+ if (this.settings.autoWidth) {
+ this.settings.stagePadding = false;
+ this.settings.merge = false;
+ }
+ };
+
+ /**
+ * Prepares an item before add.
+ * @todo Rename event parameter `content` to `item`.
+ * @protected
+ * @returns {jQuery|HTMLElement} - The item container.
+ */
+ Owl.prototype.prepare = function(item) {
+ var event = this.trigger('prepare', { content: item });
+
+ if (!event.data) {
+ event.data = $('<' + this.settings.itemElement + '/>')
+ .addClass(this.options.itemClass).append(item)
+ }
+
+ this.trigger('prepared', { content: event.data });
+
+ return event.data;
+ };
+
+ /**
+ * Updates the view.
+ * @public
+ */
+ Owl.prototype.update = function() {
+ var i = 0,
+ n = this._pipe.length,
+ filter = $.proxy(function(p) { return this[p] }, this._invalidated),
+ cache = {};
+
+ while (i < n) {
+ if (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) {
+ this._pipe[i].run(cache);
+ }
+ i++;
+ }
+
+ this._invalidated = {};
+
+ !this.is('valid') && this.enter('valid');
+ };
+
+ /**
+ * Gets the width of the view.
+ * @public
+ * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return.
+ * @returns {Number} - The width of the view in pixel.
+ */
+ Owl.prototype.width = function(dimension) {
+ dimension = dimension || Owl.Width.Default;
+ switch (dimension) {
+ case Owl.Width.Inner:
+ case Owl.Width.Outer:
+ return this._width;
+ default:
+ return this._width - this.settings.stagePadding * 2 + this.settings.margin;
+ }
+ };
+
+ /**
+ * Refreshes the carousel primarily for adaptive purposes.
+ * @public
+ */
+ Owl.prototype.refresh = function() {
+ this.enter('refreshing');
+ this.trigger('refresh');
+
+ this.setup();
+
+ this.optionsLogic();
+
+ this.$element.addClass(this.options.refreshClass);
+
+ this.update();
+
+ this.$element.removeClass(this.options.refreshClass);
+
+ this.leave('refreshing');
+ this.trigger('refreshed');
+ };
+
+ /**
+ * Checks window `resize` event.
+ * @protected
+ */
+ Owl.prototype.onThrottledResize = function() {
+ window.clearTimeout(this.resizeTimer);
+ this.resizeTimer = window.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate);
+ };
+
+ /**
+ * Checks window `resize` event.
+ * @protected
+ */
+ Owl.prototype.onResize = function() {
+ if (!this._items.length) {
+ return false;
+ }
+
+ if (this._width === this.$element.width()) {
+ return false;
+ }
+
+ if (!this.$element.is(':visible')) {
+ return false;
+ }
+
+ this.enter('resizing');
+
+ if (this.trigger('resize').isDefaultPrevented()) {
+ this.leave('resizing');
+ return false;
+ }
+
+ this.invalidate('width');
+
+ this.refresh();
+
+ this.leave('resizing');
+ this.trigger('resized');
+ };
+
+ /**
+ * Registers event handlers.
+ * @todo Check `msPointerEnabled`
+ * @todo #261
+ * @protected
+ */
+ Owl.prototype.registerEventHandlers = function() {
+ if ($.support.transition) {
+ this.$stage.on($.support.transition.end + '.owl.core', $.proxy(this.onTransitionEnd, this));
+ }
+
+ if (this.settings.responsive !== false) {
+ this.on(window, 'resize', this._handlers.onThrottledResize);
+ }
+
+ if (this.settings.mouseDrag) {
+ this.$element.addClass(this.options.dragClass);
+ this.$stage.on('mousedown.owl.core', $.proxy(this.onDragStart, this));
+ this.$stage.on('dragstart.owl.core selectstart.owl.core', function() { return false });
+ }
+
+ if (this.settings.touchDrag){
+ this.$stage.on('touchstart.owl.core', $.proxy(this.onDragStart, this));
+ this.$stage.on('touchcancel.owl.core', $.proxy(this.onDragEnd, this));
+ }
+ };
+
+ /**
+ * Handles `touchstart` and `mousedown` events.
+ * @todo Horizontal swipe threshold as option
+ * @todo #261
+ * @protected
+ * @param {Event} event - The event arguments.
+ */
+ Owl.prototype.onDragStart = function(event) {
+ var stage = null;
+
+ if (event.which === 3) {
+ return;
+ }
+
+ if ($.support.transform) {
+ stage = this.$stage.css('transform').replace(/.*\(|\)| /g, '').split(',');
+ stage = {
+ x: stage[stage.length === 16 ? 12 : 4],
+ y: stage[stage.length === 16 ? 13 : 5]
+ };
+ } else {
+ stage = this.$stage.position();
+ stage = {
+ x: this.settings.rtl ?
+ stage.left + this.$stage.width() - this.width() + this.settings.margin :
+ stage.left,
+ y: stage.top
+ };
+ }
+
+ if (this.is('animating')) {
+ $.support.transform ? this.animate(stage.x) : this.$stage.stop()
+ this.invalidate('position');
+ }
+
+ this.$element.toggleClass(this.options.grabClass, event.type === 'mousedown');
+
+ this.speed(0);
+
+ this._drag.time = new Date().getTime();
+ this._drag.target = $(event.target);
+ this._drag.stage.start = stage;
+ this._drag.stage.current = stage;
+ this._drag.pointer = this.pointer(event);
+
+ $(document).on('mouseup.owl.core touchend.owl.core', $.proxy(this.onDragEnd, this));
+
+ $(document).one('mousemove.owl.core touchmove.owl.core', $.proxy(function(event) {
+ var delta = this.difference(this._drag.pointer, this.pointer(event));
+
+ $(document).on('mousemove.owl.core touchmove.owl.core', $.proxy(this.onDragMove, this));
+
+ if (Math.abs(delta.x) < Math.abs(delta.y) && this.is('valid')) {
+ return;
+ }
+
+ event.preventDefault();
+
+ this.enter('dragging');
+ this.trigger('drag');
+ }, this));
+ };
+
+ /**
+ * Handles the `touchmove` and `mousemove` events.
+ * @todo #261
+ * @protected
+ * @param {Event} event - The event arguments.
+ */
+ Owl.prototype.onDragMove = function(event) {
+ var minimum = null,
+ maximum = null,
+ pull = null,
+ delta = this.difference(this._drag.pointer, this.pointer(event)),
+ stage = this.difference(this._drag.stage.start, delta);
+
+ if (!this.is('dragging')) {
+ return;
+ }
+
+ event.preventDefault();
+
+ if (this.settings.loop) {
+ minimum = this.coordinates(this.minimum());
+ maximum = this.coordinates(this.maximum() + 1) - minimum;
+ stage.x = (((stage.x - minimum) % maximum + maximum) % maximum) + minimum;
+ } else {
+ minimum = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum());
+ maximum = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum());
+ pull = this.settings.pullDrag ? -1 * delta.x / 5 : 0;
+ stage.x = Math.max(Math.min(stage.x, minimum + pull), maximum + pull);
+ }
+
+ this._drag.stage.current = stage;
+
+ this.animate(stage.x);
+ };
+
+ /**
+ * Handles the `touchend` and `mouseup` events.
+ * @todo #261
+ * @todo Threshold for click event
+ * @protected
+ * @param {Event} event - The event arguments.
+ */
+ Owl.prototype.onDragEnd = function(event) {
+ var delta = this.difference(this._drag.pointer, this.pointer(event)),
+ stage = this._drag.stage.current,
+ direction = delta.x > 0 ^ this.settings.rtl ? 'left' : 'right';
+
+ $(document).off('.owl.core');
+
+ this.$element.removeClass(this.options.grabClass);
+
+ if (delta.x !== 0 && this.is('dragging') || !this.is('valid')) {
+ this.speed(this.settings.dragEndSpeed || this.settings.smartSpeed);
+ this.current(this.closest(stage.x, delta.x !== 0 ? direction : this._drag.direction));
+ this.invalidate('position');
+ this.update();
+
+ this._drag.direction = direction;
+
+ if (Math.abs(delta.x) > 3 || new Date().getTime() - this._drag.time > 300) {
+ this._drag.target.one('click.owl.core', function() { return false; });
+ }
+ }
+
+ if (!this.is('dragging')) {
+ return;
+ }
+
+ this.leave('dragging');
+ this.trigger('dragged');
+ };
+
+ /**
+ * Gets absolute position of the closest item for a coordinate.
+ * @todo Setting `freeDrag` makes `closest` not reusable. See #165.
+ * @protected
+ * @param {Number} coordinate - The coordinate in pixel.
+ * @param {String} direction - The direction to check for the closest item. Ether `left` or `right`.
+ * @return {Number} - The absolute position of the closest item.
+ */
+ Owl.prototype.closest = function(coordinate, direction) {
+ var position = -1,
+ pull = 30,
+ width = this.width(),
+ coordinates = this.coordinates();
+
+ if (!this.settings.freeDrag) {
+ // check closest item
+ $.each(coordinates, $.proxy(function(index, value) {
+ // on a left pull, check on current index
+ if (direction === 'left' && coordinate > value - pull && coordinate < value + pull) {
+ position = index;
+ // on a right pull, check on previous index
+ // to do so, subtract width from value and set position = index + 1
+ } else if (direction === 'right' && coordinate > value - width - pull && coordinate < value - width + pull) {
+ position = index + 1;
+ } else if (this.op(coordinate, '<', value)
+ && this.op(coordinate, '>', coordinates[index + 1] || value - width)) {
+ position = direction === 'left' ? index + 1 : index;
+ }
+ return position === -1;
+ }, this));
+ }
+
+ if (!this.settings.loop) {
+ // non loop boundries
+ if (this.op(coordinate, '>', coordinates[this.minimum()])) {
+ position = coordinate = this.minimum();
+ } else if (this.op(coordinate, '<', coordinates[this.maximum()])) {
+ position = coordinate = this.maximum();
+ }
+ }
+
+ return position;
+ };
+
+ /**
+ * Animates the stage.
+ * @todo #270
+ * @public
+ * @param {Number} coordinate - The coordinate in pixels.
+ */
+ Owl.prototype.animate = function(coordinate) {
+ var animate = this.speed() > 0;
+
+ this.is('animating') && this.onTransitionEnd();
+
+ if (animate) {
+ this.enter('animating');
+ this.trigger('translate');
+ }
+
+ if ($.support.transform3d && $.support.transition) {
+ this.$stage.css({
+ transform: 'translate3d(' + coordinate + 'px,0px,0px)',
+ transition: (this.speed() / 1000) + 's'
+ });
+ } else if (animate) {
+ this.$stage.animate({
+ left: coordinate + 'px'
+ }, this.speed(), this.settings.fallbackEasing, $.proxy(this.onTransitionEnd, this));
+ } else {
+ this.$stage.css({
+ left: coordinate + 'px'
+ });
+ }
+ };
+
+ /**
+ * Checks whether the carousel is in a specific state or not.
+ * @param {String} state - The state to check.
+ * @returns {Boolean} - The flag which indicates if the carousel is busy.
+ */
+ Owl.prototype.is = function(state) {
+ return this._states.current[state] && this._states.current[state] > 0;
+ };
+
+ /**
+ * Sets the absolute position of the current item.
+ * @public
+ * @param {Number} [position] - The new absolute position or nothing to leave it unchanged.
+ * @returns {Number} - The absolute position of the current item.
+ */
+ Owl.prototype.current = function(position) {
+ if (position === undefined) {
+ return this._current;
+ }
+
+ if (this._items.length === 0) {
+ return undefined;
+ }
+
+ position = this.normalize(position);
+
+ if (this._current !== position) {
+ var event = this.trigger('change', { property: { name: 'position', value: position } });
+
+ if (event.data !== undefined) {
+ position = this.normalize(event.data);
+ }
+
+ this._current = position;
+
+ this.invalidate('position');
+
+ this.trigger('changed', { property: { name: 'position', value: this._current } });
+ }
+
+ return this._current;
+ };
+
+ /**
+ * Invalidates the given part of the update routine.
+ * @param {String} [part] - The part to invalidate.
+ * @returns {Array.} - The invalidated parts.
+ */
+ Owl.prototype.invalidate = function(part) {
+ if ($.type(part) === 'string') {
+ this._invalidated[part] = true;
+ this.is('valid') && this.leave('valid');
+ }
+ return $.map(this._invalidated, function(v, i) { return i });
+ };
+
+ /**
+ * Resets the absolute position of the current item.
+ * @public
+ * @param {Number} position - The absolute position of the new item.
+ */
+ Owl.prototype.reset = function(position) {
+ position = this.normalize(position);
+
+ if (position === undefined) {
+ return;
+ }
+
+ this._speed = 0;
+ this._current = position;
+
+ this.suppress([ 'translate', 'translated' ]);
+
+ this.animate(this.coordinates(position));
+
+ this.release([ 'translate', 'translated' ]);
+ };
+
+ /**
+ * Normalizes an absolute or a relative position of an item.
+ * @public
+ * @param {Number} position - The absolute or relative position to normalize.
+ * @param {Boolean} [relative=false] - Whether the given position is relative or not.
+ * @returns {Number} - The normalized position.
+ */
+ Owl.prototype.normalize = function(position, relative) {
+ var n = this._items.length,
+ m = relative ? 0 : this._clones.length;
+
+ if (!this.isNumeric(position) || n < 1) {
+ position = undefined;
+ } else if (position < 0 || position >= n + m) {
+ position = ((position - m / 2) % n + n) % n + m / 2;
+ }
+
+ return position;
+ };
+
+ /**
+ * Converts an absolute position of an item into a relative one.
+ * @public
+ * @param {Number} position - The absolute position to convert.
+ * @returns {Number} - The converted position.
+ */
+ Owl.prototype.relative = function(position) {
+ position -= this._clones.length / 2;
+ return this.normalize(position, true);
+ };
+
+ /**
+ * Gets the maximum position for the current item.
+ * @public
+ * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.
+ * @returns {Number}
+ */
+ Owl.prototype.maximum = function(relative) {
+ var settings = this.settings,
+ maximum = this._coordinates.length,
+ iterator,
+ reciprocalItemsWidth,
+ elementWidth;
+
+ if (settings.loop) {
+ maximum = this._clones.length / 2 + this._items.length - 1;
+ } else if (settings.autoWidth || settings.merge) {
+ iterator = this._items.length;
+ reciprocalItemsWidth = this._items[--iterator].width();
+ elementWidth = this.$element.width();
+ while (iterator--) {
+ reciprocalItemsWidth += this._items[iterator].width() + this.settings.margin;
+ if (reciprocalItemsWidth > elementWidth) {
+ break;
+ }
+ }
+ maximum = iterator + 1;
+ } else if (settings.center) {
+ maximum = this._items.length - 1;
+ } else {
+ maximum = this._items.length - settings.items;
+ }
+
+ if (relative) {
+ maximum -= this._clones.length / 2;
+ }
+
+ return Math.max(maximum, 0);
+ };
+
+ /**
+ * Gets the minimum position for the current item.
+ * @public
+ * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.
+ * @returns {Number}
+ */
+ Owl.prototype.minimum = function(relative) {
+ return relative ? 0 : this._clones.length / 2;
+ };
+
+ /**
+ * Gets an item at the specified relative position.
+ * @public
+ * @param {Number} [position] - The relative position of the item.
+ * @return {jQuery|Array.} - The item at the given position or all items if no position was given.
+ */
+ Owl.prototype.items = function(position) {
+ if (position === undefined) {
+ return this._items.slice();
+ }
+
+ position = this.normalize(position, true);
+ return this._items[position];
+ };
+
+ /**
+ * Gets an item at the specified relative position.
+ * @public
+ * @param {Number} [position] - The relative position of the item.
+ * @return {jQuery|Array.} - The item at the given position or all items if no position was given.
+ */
+ Owl.prototype.mergers = function(position) {
+ if (position === undefined) {
+ return this._mergers.slice();
+ }
+
+ position = this.normalize(position, true);
+ return this._mergers[position];
+ };
+
+ /**
+ * Gets the absolute positions of clones for an item.
+ * @public
+ * @param {Number} [position] - The relative position of the item.
+ * @returns {Array.} - The absolute positions of clones for the item or all if no position was given.
+ */
+ Owl.prototype.clones = function(position) {
+ var odd = this._clones.length / 2,
+ even = odd + this._items.length,
+ map = function(index) { return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2 };
+
+ if (position === undefined) {
+ return $.map(this._clones, function(v, i) { return map(i) });
+ }
+
+ return $.map(this._clones, function(v, i) { return v === position ? map(i) : null });
+ };
+
+ /**
+ * Sets the current animation speed.
+ * @public
+ * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged.
+ * @returns {Number} - The current animation speed in milliseconds.
+ */
+ Owl.prototype.speed = function(speed) {
+ if (speed !== undefined) {
+ this._speed = speed;
+ }
+
+ return this._speed;
+ };
+
+ /**
+ * Gets the coordinate of an item.
+ * @todo The name of this method is missleanding.
+ * @public
+ * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`.
+ * @returns {Number|Array.} - The coordinate of the item in pixel or all coordinates.
+ */
+ Owl.prototype.coordinates = function(position) {
+ var multiplier = 1,
+ newPosition = position - 1,
+ coordinate;
+
+ if (position === undefined) {
+ return $.map(this._coordinates, $.proxy(function(coordinate, index) {
+ return this.coordinates(index);
+ }, this));
+ }
+
+ if (this.settings.center) {
+ if (this.settings.rtl) {
+ multiplier = -1;
+ newPosition = position + 1;
+ }
+
+ coordinate = this._coordinates[position];
+ coordinate += (this.width() - coordinate + (this._coordinates[newPosition] || 0)) / 2 * multiplier;
+ } else {
+ coordinate = this._coordinates[newPosition] || 0;
+ }
+
+ coordinate = Math.ceil(coordinate);
+
+ return coordinate;
+ };
+
+ /**
+ * Calculates the speed for a translation.
+ * @protected
+ * @param {Number} from - The absolute position of the start item.
+ * @param {Number} to - The absolute position of the target item.
+ * @param {Number} [factor=undefined] - The time factor in milliseconds.
+ * @returns {Number} - The time in milliseconds for the translation.
+ */
+ Owl.prototype.duration = function(from, to, factor) {
+ if (factor === 0) {
+ return 0;
+ }
+
+ return Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs((factor || this.settings.smartSpeed));
+ };
+
+ /**
+ * Slides to the specified item.
+ * @public
+ * @param {Number} position - The position of the item.
+ * @param {Number} [speed] - The time in milliseconds for the transition.
+ */
+ Owl.prototype.to = function(position, speed) {
+ var current = this.current(),
+ revert = null,
+ distance = position - this.relative(current),
+ direction = (distance > 0) - (distance < 0),
+ items = this._items.length,
+ minimum = this.minimum(),
+ maximum = this.maximum();
+
+ if (this.settings.loop) {
+ if (!this.settings.rewind && Math.abs(distance) > items / 2) {
+ distance += direction * -1 * items;
+ }
+
+ position = current + distance;
+ revert = ((position - minimum) % items + items) % items + minimum;
+
+ if (revert !== position && revert - distance <= maximum && revert - distance > 0) {
+ current = revert - distance;
+ position = revert;
+ this.reset(current);
+ }
+ } else if (this.settings.rewind) {
+ maximum += 1;
+ position = (position % maximum + maximum) % maximum;
+ } else {
+ position = Math.max(minimum, Math.min(maximum, position));
+ }
+
+ this.speed(this.duration(current, position, speed));
+ this.current(position);
+
+ if (this.$element.is(':visible')) {
+ this.update();
+ }
+ };
+
+ /**
+ * Slides to the next item.
+ * @public
+ * @param {Number} [speed] - The time in milliseconds for the transition.
+ */
+ Owl.prototype.next = function(speed) {
+ speed = speed || false;
+ this.to(this.relative(this.current()) + 1, speed);
+ };
+
+ /**
+ * Slides to the previous item.
+ * @public
+ * @param {Number} [speed] - The time in milliseconds for the transition.
+ */
+ Owl.prototype.prev = function(speed) {
+ speed = speed || false;
+ this.to(this.relative(this.current()) - 1, speed);
+ };
+
+ /**
+ * Handles the end of an animation.
+ * @protected
+ * @param {Event} event - The event arguments.
+ */
+ Owl.prototype.onTransitionEnd = function(event) {
+
+ // if css2 animation then event object is undefined
+ if (event !== undefined) {
+ event.stopPropagation();
+
+ // Catch only owl-stage transitionEnd event
+ if ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) {
+ return false;
+ }
+ }
+
+ this.leave('animating');
+ this.trigger('translated');
+ };
+
+ /**
+ * Gets viewport width.
+ * @protected
+ * @return {Number} - The width in pixel.
+ */
+ Owl.prototype.viewport = function() {
+ var width;
+ if (this.options.responsiveBaseElement !== window) {
+ width = $(this.options.responsiveBaseElement).width();
+ } else if (window.innerWidth) {
+ width = window.innerWidth;
+ } else if (document.documentElement && document.documentElement.clientWidth) {
+ width = document.documentElement.clientWidth;
+ } else {
+ throw 'Can not detect viewport width.';
+ }
+ return width;
+ };
+
+ /**
+ * Replaces the current content.
+ * @public
+ * @param {HTMLElement|jQuery|String} content - The new content.
+ */
+ Owl.prototype.replace = function(content) {
+ this.$stage.empty();
+ this._items = [];
+
+ if (content) {
+ content = (content instanceof jQuery) ? content : $(content);
+ }
+
+ if (this.settings.nestedItemSelector) {
+ content = content.find('.' + this.settings.nestedItemSelector);
+ }
+
+ content.filter(function() {
+ return this.nodeType === 1;
+ }).each($.proxy(function(index, item) {
+ item = this.prepare(item);
+ this.$stage.append(item);
+ this._items.push(item);
+ this._mergers.push(item.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);
+ }, this));
+
+ this.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0);
+
+ this.invalidate('items');
+ };
+
+ /**
+ * Adds an item.
+ * @todo Use `item` instead of `content` for the event arguments.
+ * @public
+ * @param {HTMLElement|jQuery|String} content - The item content to add.
+ * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end.
+ */
+ Owl.prototype.add = function(content, position) {
+ var current = this.relative(this._current);
+
+ position = position === undefined ? this._items.length : this.normalize(position, true);
+ content = content instanceof jQuery ? content : $(content);
+
+ this.trigger('add', { content: content, position: position });
+
+ content = this.prepare(content);
+
+ if (this._items.length === 0 || position === this._items.length) {
+ this._items.length === 0 && this.$stage.append(content);
+ this._items.length !== 0 && this._items[position - 1].after(content);
+ this._items.push(content);
+ this._mergers.push(content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);
+ } else {
+ this._items[position].before(content);
+ this._items.splice(position, 0, content);
+ this._mergers.splice(position, 0, content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);
+ }
+
+ this._items[current] && this.reset(this._items[current].index());
+
+ this.invalidate('items');
+
+ this.trigger('added', { content: content, position: position });
+ };
+
+ /**
+ * Removes an item by its position.
+ * @todo Use `item` instead of `content` for the event arguments.
+ * @public
+ * @param {Number} position - The relative position of the item to remove.
+ */
+ Owl.prototype.remove = function(position) {
+ position = this.normalize(position, true);
+
+ if (position === undefined) {
+ return;
+ }
+
+ this.trigger('remove', { content: this._items[position], position: position });
+
+ this._items[position].remove();
+ this._items.splice(position, 1);
+ this._mergers.splice(position, 1);
+
+ this.invalidate('items');
+
+ this.trigger('removed', { content: null, position: position });
+ };
+
+ /**
+ * Preloads images with auto width.
+ * @todo Replace by a more generic approach
+ * @protected
+ */
+ Owl.prototype.preloadAutoWidthImages = function(images) {
+ images.each($.proxy(function(i, element) {
+ this.enter('pre-loading');
+ element = $(element);
+ $(new Image()).one('load', $.proxy(function(e) {
+ element.attr('src', e.target.src);
+ element.css('opacity', 1);
+ this.leave('pre-loading');
+ !this.is('pre-loading') && !this.is('initializing') && this.refresh();
+ }, this)).attr('src', element.attr('src') || element.attr('data-src') || element.attr('data-src-retina'));
+ }, this));
+ };
+
+ /**
+ * Destroys the carousel.
+ * @public
+ */
+ Owl.prototype.destroy = function() {
+
+ this.$element.off('.owl.core');
+ this.$stage.off('.owl.core');
+ $(document).off('.owl.core');
+
+ if (this.settings.responsive !== false) {
+ window.clearTimeout(this.resizeTimer);
+ this.off(window, 'resize', this._handlers.onThrottledResize);
+ }
+
+ for (var i in this._plugins) {
+ this._plugins[i].destroy();
+ }
+
+ this.$stage.children('.cloned').remove();
+
+ this.$stage.unwrap();
+ this.$stage.children().contents().unwrap();
+ this.$stage.children().unwrap();
+
+ this.$element
+ .removeClass(this.options.refreshClass)
+ .removeClass(this.options.loadingClass)
+ .removeClass(this.options.loadedClass)
+ .removeClass(this.options.rtlClass)
+ .removeClass(this.options.dragClass)
+ .removeClass(this.options.grabClass)
+ .attr('class', this.$element.attr('class').replace(new RegExp(this.options.responsiveClass + '-\\S+\\s', 'g'), ''))
+ .removeData('owl.carousel');
+ };
+
+ /**
+ * Operators to calculate right-to-left and left-to-right.
+ * @protected
+ * @param {Number} [a] - The left side operand.
+ * @param {String} [o] - The operator.
+ * @param {Number} [b] - The right side operand.
+ */
+ Owl.prototype.op = function(a, o, b) {
+ var rtl = this.settings.rtl;
+ switch (o) {
+ case '<':
+ return rtl ? a > b : a < b;
+ case '>':
+ return rtl ? a < b : a > b;
+ case '>=':
+ return rtl ? a <= b : a >= b;
+ case '<=':
+ return rtl ? a >= b : a <= b;
+ default:
+ break;
+ }
+ };
+
+ /**
+ * Attaches to an internal event.
+ * @protected
+ * @param {HTMLElement} element - The event source.
+ * @param {String} event - The event name.
+ * @param {Function} listener - The event handler to attach.
+ * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not.
+ */
+ Owl.prototype.on = function(element, event, listener, capture) {
+ if (element.addEventListener) {
+ element.addEventListener(event, listener, capture);
+ } else if (element.attachEvent) {
+ element.attachEvent('on' + event, listener);
+ }
+ };
+
+ /**
+ * Detaches from an internal event.
+ * @protected
+ * @param {HTMLElement} element - The event source.
+ * @param {String} event - The event name.
+ * @param {Function} listener - The attached event handler to detach.
+ * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not.
+ */
+ Owl.prototype.off = function(element, event, listener, capture) {
+ if (element.removeEventListener) {
+ element.removeEventListener(event, listener, capture);
+ } else if (element.detachEvent) {
+ element.detachEvent('on' + event, listener);
+ }
+ };
+
+ /**
+ * Triggers a public event.
+ * @todo Remove `status`, `relatedTarget` should be used instead.
+ * @protected
+ * @param {String} name - The event name.
+ * @param {*} [data=null] - The event data.
+ * @param {String} [namespace=carousel] - The event namespace.
+ * @param {String} [state] - The state which is associated with the event.
+ * @param {Boolean} [enter=false] - Indicates if the call enters the specified state or not.
+ * @returns {Event} - The event arguments.
+ */
+ Owl.prototype.trigger = function(name, data, namespace, state, enter) {
+ var status = {
+ item: { count: this._items.length, index: this.current() }
+ }, handler = $.camelCase(
+ $.grep([ 'on', name, namespace ], function(v) { return v })
+ .join('-').toLowerCase()
+ ), event = $.Event(
+ [ name, 'owl', namespace || 'carousel' ].join('.').toLowerCase(),
+ $.extend({ relatedTarget: this }, status, data)
+ );
+
+ if (!this._supress[name]) {
+ $.each(this._plugins, function(name, plugin) {
+ if (plugin.onTrigger) {
+ plugin.onTrigger(event);
+ }
+ });
+
+ this.register({ type: Owl.Type.Event, name: name });
+ this.$element.trigger(event);
+
+ if (this.settings && typeof this.settings[handler] === 'function') {
+ this.settings[handler].call(this, event);
+ }
+ }
+
+ return event;
+ };
+
+ /**
+ * Enters a state.
+ * @param name - The state name.
+ */
+ Owl.prototype.enter = function(name) {
+ $.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {
+ if (this._states.current[name] === undefined) {
+ this._states.current[name] = 0;
+ }
+
+ this._states.current[name]++;
+ }, this));
+ };
+
+ /**
+ * Leaves a state.
+ * @param name - The state name.
+ */
+ Owl.prototype.leave = function(name) {
+ $.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {
+ this._states.current[name]--;
+ }, this));
+ };
+
+ /**
+ * Registers an event or state.
+ * @public
+ * @param {Object} object - The event or state to register.
+ */
+ Owl.prototype.register = function(object) {
+ if (object.type === Owl.Type.Event) {
+ if (!$.event.special[object.name]) {
+ $.event.special[object.name] = {};
+ }
+
+ if (!$.event.special[object.name].owl) {
+ var _default = $.event.special[object.name]._default;
+ $.event.special[object.name]._default = function(e) {
+ if (_default && _default.apply && (!e.namespace || e.namespace.indexOf('owl') === -1)) {
+ return _default.apply(this, arguments);
+ }
+ return e.namespace && e.namespace.indexOf('owl') > -1;
+ };
+ $.event.special[object.name].owl = true;
+ }
+ } else if (object.type === Owl.Type.State) {
+ if (!this._states.tags[object.name]) {
+ this._states.tags[object.name] = object.tags;
+ } else {
+ this._states.tags[object.name] = this._states.tags[object.name].concat(object.tags);
+ }
+
+ this._states.tags[object.name] = $.grep(this._states.tags[object.name], $.proxy(function(tag, i) {
+ return $.inArray(tag, this._states.tags[object.name]) === i;
+ }, this));
+ }
+ };
+
+ /**
+ * Suppresses events.
+ * @protected
+ * @param {Array.} events - The events to suppress.
+ */
+ Owl.prototype.suppress = function(events) {
+ $.each(events, $.proxy(function(index, event) {
+ this._supress[event] = true;
+ }, this));
+ };
+
+ /**
+ * Releases suppressed events.
+ * @protected
+ * @param {Array.} events - The events to release.
+ */
+ Owl.prototype.release = function(events) {
+ $.each(events, $.proxy(function(index, event) {
+ delete this._supress[event];
+ }, this));
+ };
+
+ /**
+ * Gets unified pointer coordinates from event.
+ * @todo #261
+ * @protected
+ * @param {Event} - The `mousedown` or `touchstart` event.
+ * @returns {Object} - Contains `x` and `y` coordinates of current pointer position.
+ */
+ Owl.prototype.pointer = function(event) {
+ var result = { x: null, y: null };
+
+ event = event.originalEvent || event || window.event;
+
+ event = event.touches && event.touches.length ?
+ event.touches[0] : event.changedTouches && event.changedTouches.length ?
+ event.changedTouches[0] : event;
+
+ if (event.pageX) {
+ result.x = event.pageX;
+ result.y = event.pageY;
+ } else {
+ result.x = event.clientX;
+ result.y = event.clientY;
+ }
+
+ return result;
+ };
+
+ /**
+ * Determines if the input is a Number or something that can be coerced to a Number
+ * @protected
+ * @param {Number|String|Object|Array|Boolean|RegExp|Function|Symbol} - The input to be tested
+ * @returns {Boolean} - An indication if the input is a Number or can be coerced to a Number
+ */
+ Owl.prototype.isNumeric = function(number) {
+ return !isNaN(parseFloat(number));
+ };
+
+ /**
+ * Gets the difference of two vectors.
+ * @todo #261
+ * @protected
+ * @param {Object} - The first vector.
+ * @param {Object} - The second vector.
+ * @returns {Object} - The difference.
+ */
+ Owl.prototype.difference = function(first, second) {
+ return {
+ x: first.x - second.x,
+ y: first.y - second.y
+ };
+ };
+
+ /**
+ * The jQuery Plugin for the Owl Carousel
+ * @todo Navigation plugin `next` and `prev`
+ * @public
+ */
+ $.fn.owlCarousel = function(option) {
+ var args = Array.prototype.slice.call(arguments, 1);
+
+ return this.each(function() {
+ var $this = $(this),
+ data = $this.data('owl.carousel');
+
+ if (!data) {
+ data = new Owl(this, typeof option == 'object' && option);
+ $this.data('owl.carousel', data);
+
+ $.each([
+ 'next', 'prev', 'to', 'destroy', 'refresh', 'replace', 'add', 'remove'
+ ], function(i, event) {
+ data.register({ type: Owl.Type.Event, name: event });
+ data.$element.on(event + '.owl.carousel.core', $.proxy(function(e) {
+ if (e.namespace && e.relatedTarget !== this) {
+ this.suppress([ event ]);
+ data[event].apply(this, [].slice.call(arguments, 1));
+ this.release([ event ]);
+ }
+ }, data));
+ });
+ }
+
+ if (typeof option == 'string' && option.charAt(0) !== '_') {
+ data[option].apply(data, args);
+ }
+ });
+ };
+
+ /**
+ * The constructor for the jQuery Plugin
+ * @public
+ */
+ $.fn.owlCarousel.Constructor = Owl;
+
+})(window.Zepto || window.jQuery, window, document);
+
+/**
+ * AutoRefresh Plugin
+ * @version 2.1.0
+ * @author Artus Kolanowski
+ * @author David Deutsch
+ * @license The MIT License (MIT)
+ */
+;(function($, window, document, undefined) {
+
+ /**
+ * Creates the auto refresh plugin.
+ * @class The Auto Refresh Plugin
+ * @param {Owl} carousel - The Owl Carousel
+ */
+ var AutoRefresh = function(carousel) {
+ /**
+ * Reference to the core.
+ * @protected
+ * @type {Owl}
+ */
+ this._core = carousel;
+
+ /**
+ * Refresh interval.
+ * @protected
+ * @type {number}
+ */
+ this._interval = null;
+
+ /**
+ * Whether the element is currently visible or not.
+ * @protected
+ * @type {Boolean}
+ */
+ this._visible = null;
+
+ /**
+ * All event handlers.
+ * @protected
+ * @type {Object}
+ */
+ this._handlers = {
+ 'initialized.owl.carousel': $.proxy(function(e) {
+ if (e.namespace && this._core.settings.autoRefresh) {
+ this.watch();
+ }
+ }, this)
+ };
+
+ // set default options
+ this._core.options = $.extend({}, AutoRefresh.Defaults, this._core.options);
+
+ // register event handlers
+ this._core.$element.on(this._handlers);
+ };
+
+ /**
+ * Default options.
+ * @public
+ */
+ AutoRefresh.Defaults = {
+ autoRefresh: true,
+ autoRefreshInterval: 500
+ };
+
+ /**
+ * Watches the element.
+ */
+ AutoRefresh.prototype.watch = function() {
+ if (this._interval) {
+ return;
+ }
+
+ this._visible = this._core.$element.is(':visible');
+ this._interval = window.setInterval($.proxy(this.refresh, this), this._core.settings.autoRefreshInterval);
+ };
+
+ /**
+ * Refreshes the element.
+ */
+ AutoRefresh.prototype.refresh = function() {
+ if (this._core.$element.is(':visible') === this._visible) {
+ return;
+ }
+
+ this._visible = !this._visible;
+
+ this._core.$element.toggleClass('owl-hidden', !this._visible);
+
+ this._visible && (this._core.invalidate('width') && this._core.refresh());
+ };
+
+ /**
+ * Destroys the plugin.
+ */
+ AutoRefresh.prototype.destroy = function() {
+ var handler, property;
+
+ window.clearInterval(this._interval);
+
+ for (handler in this._handlers) {
+ this._core.$element.off(handler, this._handlers[handler]);
+ }
+ for (property in Object.getOwnPropertyNames(this)) {
+ typeof this[property] != 'function' && (this[property] = null);
+ }
+ };
+
+ $.fn.owlCarousel.Constructor.Plugins.AutoRefresh = AutoRefresh;
+
+})(window.Zepto || window.jQuery, window, document);
+
+/**
+ * Lazy Plugin
+ * @version 2.1.0
+ * @author Bartosz Wojciechowski
+ * @author David Deutsch
+ * @license The MIT License (MIT)
+ */
+;(function($, window, document, undefined) {
+
+ /**
+ * Creates the lazy plugin.
+ * @class The Lazy Plugin
+ * @param {Owl} carousel - The Owl Carousel
+ */
+ var Lazy = function(carousel) {
+
+ /**
+ * Reference to the core.
+ * @protected
+ * @type {Owl}
+ */
+ this._core = carousel;
+
+ /**
+ * Already loaded items.
+ * @protected
+ * @type {Array.}
+ */
+ this._loaded = [];
+
+ /**
+ * Event handlers.
+ * @protected
+ * @type {Object}
+ */
+ this._handlers = {
+ 'initialized.owl.carousel change.owl.carousel resized.owl.carousel': $.proxy(function(e) {
+ if (!e.namespace) {
+ return;
+ }
+
+ if (!this._core.settings || !this._core.settings.lazyLoad) {
+ return;
+ }
+
+ if ((e.property && e.property.name == 'position') || e.type == 'initialized') {
+ var settings = this._core.settings,
+ n = (settings.center && Math.ceil(settings.items / 2) || settings.items),
+ i = ((settings.center && n * -1) || 0),
+ position = (e.property && e.property.value !== undefined ? e.property.value : this._core.current()) + i,
+ clones = this._core.clones().length,
+ load = $.proxy(function(i, v) { this.load(v) }, this);
+
+ while (i++ < n) {
+ this.load(clones / 2 + this._core.relative(position));
+ clones && $.each(this._core.clones(this._core.relative(position)), load);
+ position++;
+ }
+ }
+ }, this)
+ };
+
+ // set the default options
+ this._core.options = $.extend({}, Lazy.Defaults, this._core.options);
+
+ // register event handler
+ this._core.$element.on(this._handlers);
+ };
+
+ /**
+ * Default options.
+ * @public
+ */
+ Lazy.Defaults = {
+ lazyLoad: false
+ };
+
+ /**
+ * Loads all resources of an item at the specified position.
+ * @param {Number} position - The absolute position of the item.
+ * @protected
+ */
+ Lazy.prototype.load = function(position) {
+ var $item = this._core.$stage.children().eq(position),
+ $elements = $item && $item.find('.owl-lazy');
+
+ if (!$elements || $.inArray($item.get(0), this._loaded) > -1) {
+ return;
+ }
+
+ $elements.each($.proxy(function(index, element) {
+ var $element = $(element), image,
+ url = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src');
+
+ this._core.trigger('load', { element: $element, url: url }, 'lazy');
+
+ if ($element.is('img')) {
+ $element.one('load.owl.lazy', $.proxy(function() {
+ $element.css('opacity', 1);
+ this._core.trigger('loaded', { element: $element, url: url }, 'lazy');
+ }, this)).attr('src', url);
+ } else {
+ image = new Image();
+ image.onload = $.proxy(function() {
+ $element.css({
+ 'background-image': 'url(' + url + ')',
+ 'opacity': '1'
+ });
+ this._core.trigger('loaded', { element: $element, url: url }, 'lazy');
+ }, this);
+ image.src = url;
+ }
+ }, this));
+
+ this._loaded.push($item.get(0));
+ };
+
+ /**
+ * Destroys the plugin.
+ * @public
+ */
+ Lazy.prototype.destroy = function() {
+ var handler, property;
+
+ for (handler in this.handlers) {
+ this._core.$element.off(handler, this.handlers[handler]);
+ }
+ for (property in Object.getOwnPropertyNames(this)) {
+ typeof this[property] != 'function' && (this[property] = null);
+ }
+ };
+
+ $.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy;
+
+})(window.Zepto || window.jQuery, window, document);
+
+/**
+ * AutoHeight Plugin
+ * @version 2.1.0
+ * @author Bartosz Wojciechowski
+ * @author David Deutsch
+ * @license The MIT License (MIT)
+ */
+;(function($, window, document, undefined) {
+
+ /**
+ * Creates the auto height plugin.
+ * @class The Auto Height Plugin
+ * @param {Owl} carousel - The Owl Carousel
+ */
+ var AutoHeight = function(carousel) {
+ /**
+ * Reference to the core.
+ * @protected
+ * @type {Owl}
+ */
+ this._core = carousel;
+
+ /**
+ * All event handlers.
+ * @protected
+ * @type {Object}
+ */
+ this._handlers = {
+ 'initialized.owl.carousel refreshed.owl.carousel': $.proxy(function(e) {
+ if (e.namespace && this._core.settings.autoHeight) {
+ this.update();
+ }
+ }, this),
+ 'changed.owl.carousel': $.proxy(function(e) {
+ if (e.namespace && this._core.settings.autoHeight && e.property.name == 'position'){
+ this.update();
+ }
+ }, this),
+ 'loaded.owl.lazy': $.proxy(function(e) {
+ if (e.namespace && this._core.settings.autoHeight
+ && e.element.closest('.' + this._core.settings.itemClass).index() === this._core.current()) {
+ this.update();
+ }
+ }, this)
+ };
+
+ // set default options
+ this._core.options = $.extend({}, AutoHeight.Defaults, this._core.options);
+
+ // register event handlers
+ this._core.$element.on(this._handlers);
+ };
+
+ /**
+ * Default options.
+ * @public
+ */
+ AutoHeight.Defaults = {
+ autoHeight: false,
+ autoHeightClass: 'owl-height'
+ };
+
+ /**
+ * Updates the view.
+ */
+ AutoHeight.prototype.update = function() {
+ var start = this._core._current,
+ end = start + this._core.settings.items,
+ visible = this._core.$stage.children().toArray().slice(start, end),
+ heights = [],
+ maxheight = 0;
+
+ $.each(visible, function(index, item) {
+ heights.push($(item).height());
+ });
+
+ maxheight = Math.max.apply(null, heights);
+
+ this._core.$stage.parent()
+ .height(maxheight)
+ .addClass(this._core.settings.autoHeightClass);
+ };
+
+ AutoHeight.prototype.destroy = function() {
+ var handler, property;
+
+ for (handler in this._handlers) {
+ this._core.$element.off(handler, this._handlers[handler]);
+ }
+ for (property in Object.getOwnPropertyNames(this)) {
+ typeof this[property] != 'function' && (this[property] = null);
+ }
+ };
+
+ $.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight;
+
+})(window.Zepto || window.jQuery, window, document);
+
+/**
+ * Video Plugin
+ * @version 2.1.0
+ * @author Bartosz Wojciechowski
+ * @author David Deutsch
+ * @license The MIT License (MIT)
+ */
+;(function($, window, document, undefined) {
+
+ /**
+ * Creates the video plugin.
+ * @class The Video Plugin
+ * @param {Owl} carousel - The Owl Carousel
+ */
+ var Video = function(carousel) {
+ /**
+ * Reference to the core.
+ * @protected
+ * @type {Owl}
+ */
+ this._core = carousel;
+
+ /**
+ * Cache all video URLs.
+ * @protected
+ * @type {Object}
+ */
+ this._videos = {};
+
+ /**
+ * Current playing item.
+ * @protected
+ * @type {jQuery}
+ */
+ this._playing = null;
+
+ /**
+ * All event handlers.
+ * @todo The cloned content removale is too late
+ * @protected
+ * @type {Object}
+ */
+ this._handlers = {
+ 'initialized.owl.carousel': $.proxy(function(e) {
+ if (e.namespace) {
+ this._core.register({ type: 'state', name: 'playing', tags: [ 'interacting' ] });
+ }
+ }, this),
+ 'resize.owl.carousel': $.proxy(function(e) {
+ if (e.namespace && this._core.settings.video && this.isInFullScreen()) {
+ e.preventDefault();
+ }
+ }, this),
+ 'refreshed.owl.carousel': $.proxy(function(e) {
+ if (e.namespace && this._core.is('resizing')) {
+ this._core.$stage.find('.cloned .owl-video-frame').remove();
+ }
+ }, this),
+ 'changed.owl.carousel': $.proxy(function(e) {
+ if (e.namespace && e.property.name === 'position' && this._playing) {
+ this.stop();
+ }
+ }, this),
+ 'prepared.owl.carousel': $.proxy(function(e) {
+ if (!e.namespace) {
+ return;
+ }
+
+ var $element = $(e.content).find('.owl-video');
+
+ if ($element.length) {
+ $element.css('display', 'none');
+ this.fetch($element, $(e.content));
+ }
+ }, this)
+ };
+
+ // set default options
+ this._core.options = $.extend({}, Video.Defaults, this._core.options);
+
+ // register event handlers
+ this._core.$element.on(this._handlers);
+
+ this._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function(e) {
+ this.play(e);
+ }, this));
+ };
+
+ /**
+ * Default options.
+ * @public
+ */
+ Video.Defaults = {
+ video: false,
+ videoHeight: false,
+ videoWidth: false
+ };
+
+ /**
+ * Gets the video ID and the type (YouTube/Vimeo/vzaar only).
+ * @protected
+ * @param {jQuery} target - The target containing the video data.
+ * @param {jQuery} item - The item containing the video.
+ */
+ Video.prototype.fetch = function(target, item) {
+ var type = (function() {
+ if (target.attr('data-vimeo-id')) {
+ return 'vimeo';
+ } else if (target.attr('data-vzaar-id')) {
+ return 'vzaar'
+ } else {
+ return 'youtube';
+ }
+ })(),
+ id = target.attr('data-vimeo-id') || target.attr('data-youtube-id') || target.attr('data-vzaar-id'),
+ width = target.attr('data-width') || this._core.settings.videoWidth,
+ height = target.attr('data-height') || this._core.settings.videoHeight,
+ url = target.attr('href');
+
+ if (url) {
+
+ /*
+ Parses the id's out of the following urls (and probably more):
+ https://www.youtube.com/watch?v=:id
+ https://youtu.be/:id
+ https://vimeo.com/:id
+ https://vimeo.com/channels/:channel/:id
+ https://vimeo.com/groups/:group/videos/:id
+ https://app.vzaar.com/videos/:id
+
+ Visual example: https://regexper.com/#(http%3A%7Chttps%3A%7C)%5C%2F%5C%2F(player.%7Cwww.%7Capp.)%3F(vimeo%5C.com%7Cyoutu(be%5C.com%7C%5C.be%7Cbe%5C.googleapis%5C.com)%7Cvzaar%5C.com)%5C%2F(video%5C%2F%7Cvideos%5C%2F%7Cembed%5C%2F%7Cchannels%5C%2F.%2B%5C%2F%7Cgroups%5C%2F.%2B%5C%2F%7Cwatch%5C%3Fv%3D%7Cv%5C%2F)%3F(%5BA-Za-z0-9._%25-%5D*)(%5C%26%5CS%2B)%3F
+ */
+
+ id = url.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/);
+
+ if (id[3].indexOf('youtu') > -1) {
+ type = 'youtube';
+ } else if (id[3].indexOf('vimeo') > -1) {
+ type = 'vimeo';
+ } else if (id[3].indexOf('vzaar') > -1) {
+ type = 'vzaar';
+ } else {
+ throw new Error('Video URL not supported.');
+ }
+ id = id[6];
+ } else {
+ throw new Error('Missing video URL.');
+ }
+
+ this._videos[url] = {
+ type: type,
+ id: id,
+ width: width,
+ height: height
+ };
+
+ item.attr('data-video', url);
+
+ this.thumbnail(target, this._videos[url]);
+ };
+
+ /**
+ * Creates video thumbnail.
+ * @protected
+ * @param {jQuery} target - The target containing the video data.
+ * @param {Object} info - The video info object.
+ * @see `fetch`
+ */
+ Video.prototype.thumbnail = function(target, video) {
+ var tnLink,
+ icon,
+ path,
+ dimensions = video.width && video.height ? 'style="width:' + video.width + 'px;height:' + video.height + 'px;"' : '',
+ customTn = target.find('img'),
+ srcType = 'src',
+ lazyClass = '',
+ settings = this._core.settings,
+ create = function(path) {
+ icon = '
';
+
+ if (settings.lazyLoad) {
+ tnLink = '
';
+ } else {
+ tnLink = '
';
+ }
+ target.after(tnLink);
+ target.after(icon);
+ };
+
+ // wrap video content into owl-video-wrapper div
+ target.wrap('
');
+
+ if (this._core.settings.lazyLoad) {
+ srcType = 'data-src';
+ lazyClass = 'owl-lazy';
+ }
+
+ // custom thumbnail
+ if (customTn.length) {
+ create(customTn.attr(srcType));
+ customTn.remove();
+ return false;
+ }
+
+ if (video.type === 'youtube') {
+ path = "//img.youtube.com/vi/" + video.id + "/hqdefault.jpg";
+ create(path);
+ } else if (video.type === 'vimeo') {
+ $.ajax({
+ type: 'GET',
+ url: '//vimeo.com/api/v2/video/' + video.id + '.json',
+ jsonp: 'callback',
+ dataType: 'jsonp',
+ success: function(data) {
+ path = data[0].thumbnail_large;
+ create(path);
+ }
+ });
+ } else if (video.type === 'vzaar') {
+ $.ajax({
+ type: 'GET',
+ url: '//vzaar.com/api/videos/' + video.id + '.json',
+ jsonp: 'callback',
+ dataType: 'jsonp',
+ success: function(data) {
+ path = data.framegrab_url;
+ create(path);
+ }
+ });
+ }
+ };
+
+ /**
+ * Stops the current video.
+ * @public
+ */
+ Video.prototype.stop = function() {
+ this._core.trigger('stop', null, 'video');
+ this._playing.find('.owl-video-frame').remove();
+ this._playing.removeClass('owl-video-playing');
+ this._playing = null;
+ this._core.leave('playing');
+ this._core.trigger('stopped', null, 'video');
+ };
+
+ /**
+ * Starts the current video.
+ * @public
+ * @param {Event} event - The event arguments.
+ */
+ Video.prototype.play = function(event) {
+ var target = $(event.target),
+ item = target.closest('.' + this._core.settings.itemClass),
+ video = this._videos[item.attr('data-video')],
+ width = video.width || '100%',
+ height = video.height || this._core.$stage.height(),
+ html;
+
+ if (this._playing) {
+ return;
+ }
+
+ this._core.enter('playing');
+ this._core.trigger('play', null, 'video');
+
+ item = this._core.items(this._core.relative(item.index()));
+
+ this._core.reset(item.index());
+
+ if (video.type === 'youtube') {
+ html = '';
+ } else if (video.type === 'vimeo') {
+ html = '';
+ } else if (video.type === 'vzaar') {
+ html = '';
+ }
+
+ $('' + html + '
').insertAfter(item.find('.owl-video'));
+
+ this._playing = item.addClass('owl-video-playing');
+ };
+
+ /**
+ * Checks whether an video is currently in full screen mode or not.
+ * @todo Bad style because looks like a readonly method but changes members.
+ * @protected
+ * @returns {Boolean}
+ */
+ Video.prototype.isInFullScreen = function() {
+ var element = document.fullscreenElement || document.mozFullScreenElement ||
+ document.webkitFullscreenElement;
+
+ return element && $(element).parent().hasClass('owl-video-frame');
+ };
+
+ /**
+ * Destroys the plugin.
+ */
+ Video.prototype.destroy = function() {
+ var handler, property;
+
+ this._core.$element.off('click.owl.video');
+
+ for (handler in this._handlers) {
+ this._core.$element.off(handler, this._handlers[handler]);
+ }
+ for (property in Object.getOwnPropertyNames(this)) {
+ typeof this[property] != 'function' && (this[property] = null);
+ }
+ };
+
+ $.fn.owlCarousel.Constructor.Plugins.Video = Video;
+
+})(window.Zepto || window.jQuery, window, document);
+
+/**
+ * Animate Plugin
+ * @version 2.1.0
+ * @author Bartosz Wojciechowski
+ * @author David Deutsch
+ * @license The MIT License (MIT)
+ */
+;(function($, window, document, undefined) {
+
+ /**
+ * Creates the animate plugin.
+ * @class The Navigation Plugin
+ * @param {Owl} scope - The Owl Carousel
+ */
+ var Animate = function(scope) {
+ this.core = scope;
+ this.core.options = $.extend({}, Animate.Defaults, this.core.options);
+ this.swapping = true;
+ this.previous = undefined;
+ this.next = undefined;
+
+ this.handlers = {
+ 'change.owl.carousel': $.proxy(function(e) {
+ if (e.namespace && e.property.name == 'position') {
+ this.previous = this.core.current();
+ this.next = e.property.value;
+ }
+ }, this),
+ 'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function(e) {
+ if (e.namespace) {
+ this.swapping = e.type == 'translated';
+ }
+ }, this),
+ 'translate.owl.carousel': $.proxy(function(e) {
+ if (e.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) {
+ this.swap();
+ }
+ }, this)
+ };
+
+ this.core.$element.on(this.handlers);
+ };
+
+ /**
+ * Default options.
+ * @public
+ */
+ Animate.Defaults = {
+ animateOut: false,
+ animateIn: false
+ };
+
+ /**
+ * Toggles the animation classes whenever an translations starts.
+ * @protected
+ * @returns {Boolean|undefined}
+ */
+ Animate.prototype.swap = function() {
+
+ if (this.core.settings.items !== 1) {
+ return;
+ }
+
+ if (!$.support.animation || !$.support.transition) {
+ return;
+ }
+
+ this.core.speed(0);
+
+ var left,
+ clear = $.proxy(this.clear, this),
+ previous = this.core.$stage.children().eq(this.previous),
+ next = this.core.$stage.children().eq(this.next),
+ incoming = this.core.settings.animateIn,
+ outgoing = this.core.settings.animateOut;
+
+ if (this.core.current() === this.previous) {
+ return;
+ }
+
+ if (outgoing) {
+ left = this.core.coordinates(this.previous) - this.core.coordinates(this.next);
+ previous.one($.support.animation.end, clear)
+ .css( { 'left': left + 'px' } )
+ .addClass('animated owl-animated-out')
+ .addClass(outgoing);
+ }
+
+ if (incoming) {
+ next.one($.support.animation.end, clear)
+ .addClass('animated owl-animated-in')
+ .addClass(incoming);
+ }
+ };
+
+ Animate.prototype.clear = function(e) {
+ $(e.target).css( { 'left': '' } )
+ .removeClass('animated owl-animated-out owl-animated-in')
+ .removeClass(this.core.settings.animateIn)
+ .removeClass(this.core.settings.animateOut);
+ this.core.onTransitionEnd();
+ };
+
+ /**
+ * Destroys the plugin.
+ * @public
+ */
+ Animate.prototype.destroy = function() {
+ var handler, property;
+
+ for (handler in this.handlers) {
+ this.core.$element.off(handler, this.handlers[handler]);
+ }
+ for (property in Object.getOwnPropertyNames(this)) {
+ typeof this[property] != 'function' && (this[property] = null);
+ }
+ };
+
+ $.fn.owlCarousel.Constructor.Plugins.Animate = Animate;
+
+})(window.Zepto || window.jQuery, window, document);
+
+/**
+ * Autoplay Plugin
+ * @version 2.1.0
+ * @author Bartosz Wojciechowski
+ * @author Artus Kolanowski
+ * @author David Deutsch
+ * @license The MIT License (MIT)
+ */
+;(function($, window, document, undefined) {
+
+ /**
+ * Creates the autoplay plugin.
+ * @class The Autoplay Plugin
+ * @param {Owl} scope - The Owl Carousel
+ */
+ var Autoplay = function(carousel) {
+ /**
+ * Reference to the core.
+ * @protected
+ * @type {Owl}
+ */
+ this._core = carousel;
+
+ /**
+ * The autoplay timeout.
+ * @type {Timeout}
+ */
+ this._timeout = null;
+
+ /**
+ * Indicates whenever the autoplay is paused.
+ * @type {Boolean}
+ */
+ this._paused = false;
+
+ /**
+ * All event handlers.
+ * @protected
+ * @type {Object}
+ */
+ this._handlers = {
+ 'changed.owl.carousel': $.proxy(function(e) {
+ if (e.namespace && e.property.name === 'settings') {
+ if (this._core.settings.autoplay) {
+ this.play();
+ } else {
+ this.stop();
+ }
+ } else if (e.namespace && e.property.name === 'position') {
+ //console.log('play?', e);
+ if (this._core.settings.autoplay) {
+ this._setAutoPlayInterval();
+ }
+ }
+ }, this),
+ 'initialized.owl.carousel': $.proxy(function(e) {
+ if (e.namespace && this._core.settings.autoplay) {
+ this.play();
+ }
+ }, this),
+ 'play.owl.autoplay': $.proxy(function(e, t, s) {
+ if (e.namespace) {
+ this.play(t, s);
+ }
+ }, this),
+ 'stop.owl.autoplay': $.proxy(function(e) {
+ if (e.namespace) {
+ this.stop();
+ }
+ }, this),
+ 'mouseover.owl.autoplay': $.proxy(function() {
+ if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {
+ this.pause();
+ }
+ }, this),
+ 'mouseleave.owl.autoplay': $.proxy(function() {
+ if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {
+ this.play();
+ }
+ }, this),
+ 'touchstart.owl.core': $.proxy(function() {
+ if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {
+ this.pause();
+ }
+ }, this),
+ 'touchend.owl.core': $.proxy(function() {
+ if (this._core.settings.autoplayHoverPause) {
+ this.play();
+ }
+ }, this)
+ };
+
+ // register event handlers
+ this._core.$element.on(this._handlers);
+
+ // set default options
+ this._core.options = $.extend({}, Autoplay.Defaults, this._core.options);
+ };
+
+ /**
+ * Default options.
+ * @public
+ */
+ Autoplay.Defaults = {
+ autoplay: false,
+ autoplayTimeout: 5000,
+ autoplayHoverPause: false,
+ autoplaySpeed: false
+ };
+
+ /**
+ * Starts the autoplay.
+ * @public
+ * @param {Number} [timeout] - The interval before the next animation starts.
+ * @param {Number} [speed] - The animation speed for the animations.
+ */
+ Autoplay.prototype.play = function(timeout, speed) {
+ this._paused = false;
+
+ if (this._core.is('rotating')) {
+ return;
+ }
+
+ this._core.enter('rotating');
+
+ this._setAutoPlayInterval();
+ };
+
+ /**
+ * Gets a new timeout
+ * @private
+ * @param {Number} [timeout] - The interval before the next animation starts.
+ * @param {Number} [speed] - The animation speed for the animations.
+ * @return {Timeout}
+ */
+ Autoplay.prototype._getNextTimeout = function(timeout, speed) {
+ if ( this._timeout ) {
+ window.clearTimeout(this._timeout);
+ }
+ return window.setTimeout($.proxy(function() {
+ if (this._paused || this._core.is('busy') || this._core.is('interacting') || document.hidden) {
+ return;
+ }
+ this._core.next(speed || this._core.settings.autoplaySpeed);
+ }, this), timeout || this._core.settings.autoplayTimeout);
+ };
+
+ /**
+ * Sets autoplay in motion.
+ * @private
+ */
+ Autoplay.prototype._setAutoPlayInterval = function() {
+ this._timeout = this._getNextTimeout();
+ };
+
+ /**
+ * Stops the autoplay.
+ * @public
+ */
+ Autoplay.prototype.stop = function() {
+ if (!this._core.is('rotating')) {
+ return;
+ }
+
+ window.clearTimeout(this._timeout);
+ this._core.leave('rotating');
+ };
+
+ /**
+ * Stops the autoplay.
+ * @public
+ */
+ Autoplay.prototype.pause = function() {
+ if (!this._core.is('rotating')) {
+ return;
+ }
+
+ this._paused = true;
+ };
+
+ /**
+ * Destroys the plugin.
+ */
+ Autoplay.prototype.destroy = function() {
+ var handler, property;
+
+ this.stop();
+
+ for (handler in this._handlers) {
+ this._core.$element.off(handler, this._handlers[handler]);
+ }
+ for (property in Object.getOwnPropertyNames(this)) {
+ typeof this[property] != 'function' && (this[property] = null);
+ }
+ };
+
+ $.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay;
+
+})(window.Zepto || window.jQuery, window, document);
+
+/**
+ * Navigation Plugin
+ * @version 2.1.0
+ * @author Artus Kolanowski
+ * @author David Deutsch
+ * @license The MIT License (MIT)
+ */
+;(function($, window, document, undefined) {
+ 'use strict';
+
+ /**
+ * Creates the navigation plugin.
+ * @class The Navigation Plugin
+ * @param {Owl} carousel - The Owl Carousel.
+ */
+ var Navigation = function(carousel) {
+ /**
+ * Reference to the core.
+ * @protected
+ * @type {Owl}
+ */
+ this._core = carousel;
+
+ /**
+ * Indicates whether the plugin is initialized or not.
+ * @protected
+ * @type {Boolean}
+ */
+ this._initialized = false;
+
+ /**
+ * The current paging indexes.
+ * @protected
+ * @type {Array}
+ */
+ this._pages = [];
+
+ /**
+ * All DOM elements of the user interface.
+ * @protected
+ * @type {Object}
+ */
+ this._controls = {};
+
+ /**
+ * Markup for an indicator.
+ * @protected
+ * @type {Array.}
+ */
+ this._templates = [];
+
+ /**
+ * The carousel element.
+ * @type {jQuery}
+ */
+ this.$element = this._core.$element;
+
+ /**
+ * Overridden methods of the carousel.
+ * @protected
+ * @type {Object}
+ */
+ this._overrides = {
+ next: this._core.next,
+ prev: this._core.prev,
+ to: this._core.to
+ };
+
+ /**
+ * All event handlers.
+ * @protected
+ * @type {Object}
+ */
+ this._handlers = {
+ 'prepared.owl.carousel': $.proxy(function(e) {
+ if (e.namespace && this._core.settings.dotsData) {
+ this._templates.push('' +
+ $(e.content).find('[data-dot]').addBack('[data-dot]').attr('data-dot') + '
');
+ }
+ }, this),
+ 'added.owl.carousel': $.proxy(function(e) {
+ if (e.namespace && this._core.settings.dotsData) {
+ this._templates.splice(e.position, 0, this._templates.pop());
+ }
+ }, this),
+ 'remove.owl.carousel': $.proxy(function(e) {
+ if (e.namespace && this._core.settings.dotsData) {
+ this._templates.splice(e.position, 1);
+ }
+ }, this),
+ 'changed.owl.carousel': $.proxy(function(e) {
+ if (e.namespace && e.property.name == 'position') {
+ this.draw();
+ }
+ }, this),
+ 'initialized.owl.carousel': $.proxy(function(e) {
+ if (e.namespace && !this._initialized) {
+ this._core.trigger('initialize', null, 'navigation');
+ this.initialize();
+ this.update();
+ this.draw();
+ this._initialized = true;
+ this._core.trigger('initialized', null, 'navigation');
+ }
+ }, this),
+ 'refreshed.owl.carousel': $.proxy(function(e) {
+ if (e.namespace && this._initialized) {
+ this._core.trigger('refresh', null, 'navigation');
+ this.update();
+ this.draw();
+ this._core.trigger('refreshed', null, 'navigation');
+ }
+ }, this)
+ };
+
+ // set default options
+ this._core.options = $.extend({}, Navigation.Defaults, this._core.options);
+
+ // register event handlers
+ this.$element.on(this._handlers);
+ };
+
+ /**
+ * Default options.
+ * @public
+ * @todo Rename `slideBy` to `navBy`
+ */
+ Navigation.Defaults = {
+ nav: false,
+ navText: [ 'prev', 'next' ],
+ navSpeed: false,
+ navElement: 'div',
+ navContainer: false,
+ navContainerClass: 'owl-nav',
+ navClass: [ 'owl-prev', 'owl-next' ],
+ slideBy: 1,
+ dotClass: 'owl-dot',
+ dotsClass: 'owl-dots',
+ dots: true,
+ dotsEach: false,
+ dotsData: false,
+ dotsSpeed: false,
+ dotsContainer: false
+ };
+
+ /**
+ * Initializes the layout of the plugin and extends the carousel.
+ * @protected
+ */
+ Navigation.prototype.initialize = function() {
+ var override,
+ settings = this._core.settings;
+
+ // create DOM structure for relative navigation
+ this._controls.$relative = (settings.navContainer ? $(settings.navContainer)
+ : $('').addClass(settings.navContainerClass).appendTo(this.$element)).addClass('disabled');
+
+ this._controls.$previous = $('<' + settings.navElement + '>')
+ .addClass(settings.navClass[0])
+ .html(settings.navText[0])
+ .prependTo(this._controls.$relative)
+ .on('click', $.proxy(function(e) {
+ this.prev(settings.navSpeed);
+ }, this));
+ this._controls.$next = $('<' + settings.navElement + '>')
+ .addClass(settings.navClass[1])
+ .html(settings.navText[1])
+ .appendTo(this._controls.$relative)
+ .on('click', $.proxy(function(e) {
+ this.next(settings.navSpeed);
+ }, this));
+
+ // create DOM structure for absolute navigation
+ if (!settings.dotsData) {
+ this._templates = [ $('
')
+ .addClass(settings.dotClass)
+ .append($('
'))
+ .prop('outerHTML') ];
+ }
+
+ this._controls.$absolute = (settings.dotsContainer ? $(settings.dotsContainer)
+ : $('').addClass(settings.dotsClass).appendTo(this.$element)).addClass('disabled');
+
+ this._controls.$absolute.on('click', 'div', $.proxy(function(e) {
+ var index = $(e.target).parent().is(this._controls.$absolute)
+ ? $(e.target).index() : $(e.target).parent().index();
+
+ e.preventDefault();
+
+ this.to(index, settings.dotsSpeed);
+ }, this));
+
+ // override public methods of the carousel
+ for (override in this._overrides) {
+ this._core[override] = $.proxy(this[override], this);
+ }
+ };
+
+ /**
+ * Destroys the plugin.
+ * @protected
+ */
+ Navigation.prototype.destroy = function() {
+ var handler, control, property, override;
+
+ for (handler in this._handlers) {
+ this.$element.off(handler, this._handlers[handler]);
+ }
+ for (control in this._controls) {
+ this._controls[control].remove();
+ }
+ for (override in this.overides) {
+ this._core[override] = this._overrides[override];
+ }
+ for (property in Object.getOwnPropertyNames(this)) {
+ typeof this[property] != 'function' && (this[property] = null);
+ }
+ };
+
+ /**
+ * Updates the internal state.
+ * @protected
+ */
+ Navigation.prototype.update = function() {
+ var i, j, k,
+ lower = this._core.clones().length / 2,
+ upper = lower + this._core.items().length,
+ maximum = this._core.maximum(true),
+ settings = this._core.settings,
+ size = settings.center || settings.autoWidth || settings.dotsData
+ ? 1 : settings.dotsEach || settings.items;
+
+ if (settings.slideBy !== 'page') {
+ settings.slideBy = Math.min(settings.slideBy, settings.items);
+ }
+
+ if (settings.dots || settings.slideBy == 'page') {
+ this._pages = [];
+
+ for (i = lower, j = 0, k = 0; i < upper; i++) {
+ if (j >= size || j === 0) {
+ this._pages.push({
+ start: Math.min(maximum, i - lower),
+ end: i - lower + size - 1
+ });
+ if (Math.min(maximum, i - lower) === maximum) {
+ break;
+ }
+ j = 0, ++k;
+ }
+ j += this._core.mergers(this._core.relative(i));
+ }
+ }
+ };
+
+ /**
+ * Draws the user interface.
+ * @todo The option `dotsData` wont work.
+ * @protected
+ */
+ Navigation.prototype.draw = function() {
+ var difference,
+ settings = this._core.settings,
+ disabled = this._core.items().length <= settings.items,
+ index = this._core.relative(this._core.current()),
+ loop = settings.loop || settings.rewind;
+
+ this._controls.$relative.toggleClass('disabled', !settings.nav || disabled);
+
+ if (settings.nav) {
+ this._controls.$previous.toggleClass('disabled', !loop && index <= this._core.minimum(true));
+ this._controls.$next.toggleClass('disabled', !loop && index >= this._core.maximum(true));
+ }
+
+ this._controls.$absolute.toggleClass('disabled', !settings.dots || disabled);
+
+ if (settings.dots) {
+ difference = this._pages.length - this._controls.$absolute.children().length;
+
+ if (settings.dotsData && difference !== 0) {
+ this._controls.$absolute.html(this._templates.join(''));
+ } else if (difference > 0) {
+ this._controls.$absolute.append(new Array(difference + 1).join(this._templates[0]));
+ } else if (difference < 0) {
+ this._controls.$absolute.children().slice(difference).remove();
+ }
+
+ this._controls.$absolute.find('.active').removeClass('active');
+ this._controls.$absolute.children().eq($.inArray(this.current(), this._pages)).addClass('active');
+ }
+ };
+
+ /**
+ * Extends event data.
+ * @protected
+ * @param {Event} event - The event object which gets thrown.
+ */
+ Navigation.prototype.onTrigger = function(event) {
+ var settings = this._core.settings;
+
+ event.page = {
+ index: $.inArray(this.current(), this._pages),
+ count: this._pages.length,
+ size: settings && (settings.center || settings.autoWidth || settings.dotsData
+ ? 1 : settings.dotsEach || settings.items)
+ };
+ };
+
+ /**
+ * Gets the current page position of the carousel.
+ * @protected
+ * @returns {Number}
+ */
+ Navigation.prototype.current = function() {
+ var current = this._core.relative(this._core.current());
+ return $.grep(this._pages, $.proxy(function(page, index) {
+ return page.start <= current && page.end >= current;
+ }, this)).pop();
+ };
+
+ /**
+ * Gets the current succesor/predecessor position.
+ * @protected
+ * @returns {Number}
+ */
+ Navigation.prototype.getPosition = function(successor) {
+ var position, length,
+ settings = this._core.settings;
+
+ if (settings.slideBy == 'page') {
+ position = $.inArray(this.current(), this._pages);
+ length = this._pages.length;
+ successor ? ++position : --position;
+ position = this._pages[((position % length) + length) % length].start;
+ } else {
+ position = this._core.relative(this._core.current());
+ length = this._core.items().length;
+ successor ? position += settings.slideBy : position -= settings.slideBy;
+ }
+
+ return position;
+ };
+
+ /**
+ * Slides to the next item or page.
+ * @public
+ * @param {Number} [speed=false] - The time in milliseconds for the transition.
+ */
+ Navigation.prototype.next = function(speed) {
+ $.proxy(this._overrides.to, this._core)(this.getPosition(true), speed);
+ };
+
+ /**
+ * Slides to the previous item or page.
+ * @public
+ * @param {Number} [speed=false] - The time in milliseconds for the transition.
+ */
+ Navigation.prototype.prev = function(speed) {
+ $.proxy(this._overrides.to, this._core)(this.getPosition(false), speed);
+ };
+
+ /**
+ * Slides to the specified item or page.
+ * @public
+ * @param {Number} position - The position of the item or page.
+ * @param {Number} [speed] - The time in milliseconds for the transition.
+ * @param {Boolean} [standard=false] - Whether to use the standard behaviour or not.
+ */
+ Navigation.prototype.to = function(position, speed, standard) {
+ var length;
+
+ if (!standard && this._pages.length) {
+ length = this._pages.length;
+ $.proxy(this._overrides.to, this._core)(this._pages[((position % length) + length) % length].start, speed);
+ } else {
+ $.proxy(this._overrides.to, this._core)(position, speed);
+ }
+ };
+
+ $.fn.owlCarousel.Constructor.Plugins.Navigation = Navigation;
+
+})(window.Zepto || window.jQuery, window, document);
+
+/**
+ * Hash Plugin
+ * @version 2.1.0
+ * @author Artus Kolanowski
+ * @author David Deutsch
+ * @license The MIT License (MIT)
+ */
+;(function($, window, document, undefined) {
+ 'use strict';
+
+ /**
+ * Creates the hash plugin.
+ * @class The Hash Plugin
+ * @param {Owl} carousel - The Owl Carousel
+ */
+ var Hash = function(carousel) {
+ /**
+ * Reference to the core.
+ * @protected
+ * @type {Owl}
+ */
+ this._core = carousel;
+
+ /**
+ * Hash index for the items.
+ * @protected
+ * @type {Object}
+ */
+ this._hashes = {};
+
+ /**
+ * The carousel element.
+ * @type {jQuery}
+ */
+ this.$element = this._core.$element;
+
+ /**
+ * All event handlers.
+ * @protected
+ * @type {Object}
+ */
+ this._handlers = {
+ 'initialized.owl.carousel': $.proxy(function(e) {
+ if (e.namespace && this._core.settings.startPosition === 'URLHash') {
+ $(window).trigger('hashchange.owl.navigation');
+ }
+ }, this),
+ 'prepared.owl.carousel': $.proxy(function(e) {
+ if (e.namespace) {
+ var hash = $(e.content).find('[data-hash]').addBack('[data-hash]').attr('data-hash');
+
+ if (!hash) {
+ return;
+ }
+
+ this._hashes[hash] = e.content;
+ }
+ }, this),
+ 'changed.owl.carousel': $.proxy(function(e) {
+ if (e.namespace && e.property.name === 'position') {
+ var current = this._core.items(this._core.relative(this._core.current())),
+ hash = $.map(this._hashes, function(item, hash) {
+ return item === current ? hash : null;
+ }).join();
+
+ if (!hash || window.location.hash.slice(1) === hash) {
+ return;
+ }
+
+ window.location.hash = hash;
+ }
+ }, this)
+ };
+
+ // set default options
+ this._core.options = $.extend({}, Hash.Defaults, this._core.options);
+
+ // register the event handlers
+ this.$element.on(this._handlers);
+
+ // register event listener for hash navigation
+ $(window).on('hashchange.owl.navigation', $.proxy(function(e) {
+ var hash = window.location.hash.substring(1),
+ items = this._core.$stage.children(),
+ position = this._hashes[hash] && items.index(this._hashes[hash]);
+
+ if (position === undefined || position === this._core.current()) {
+ return;
+ }
+
+ this._core.to(this._core.relative(position), false, true);
+ }, this));
+ };
+
+ /**
+ * Default options.
+ * @public
+ */
+ Hash.Defaults = {
+ URLhashListener: false
+ };
+
+ /**
+ * Destroys the plugin.
+ * @public
+ */
+ Hash.prototype.destroy = function() {
+ var handler, property;
+
+ $(window).off('hashchange.owl.navigation');
+
+ for (handler in this._handlers) {
+ this._core.$element.off(handler, this._handlers[handler]);
+ }
+ for (property in Object.getOwnPropertyNames(this)) {
+ typeof this[property] != 'function' && (this[property] = null);
+ }
+ };
+
+ $.fn.owlCarousel.Constructor.Plugins.Hash = Hash;
+
+})(window.Zepto || window.jQuery, window, document);
+
+/**
+ * Support Plugin
+ *
+ * @version 2.1.0
+ * @author Vivid Planet Software GmbH
+ * @author Artus Kolanowski
+ * @author David Deutsch
+ * @license The MIT License (MIT)
+ */
+;(function($, window, document, undefined) {
+
+ var style = $('
').get(0).style,
+ prefixes = 'Webkit Moz O ms'.split(' '),
+ events = {
+ transition: {
+ end: {
+ WebkitTransition: 'webkitTransitionEnd',
+ MozTransition: 'transitionend',
+ OTransition: 'oTransitionEnd',
+ transition: 'transitionend'
+ }
+ },
+ animation: {
+ end: {
+ WebkitAnimation: 'webkitAnimationEnd',
+ MozAnimation: 'animationend',
+ OAnimation: 'oAnimationEnd',
+ animation: 'animationend'
+ }
+ }
+ },
+ tests = {
+ csstransforms: function() {
+ return !!test('transform');
+ },
+ csstransforms3d: function() {
+ return !!test('perspective');
+ },
+ csstransitions: function() {
+ return !!test('transition');
+ },
+ cssanimations: function() {
+ return !!test('animation');
+ }
+ };
+
+ function test(property, prefixed) {
+ var result = false,
+ upper = property.charAt(0).toUpperCase() + property.slice(1);
+
+ $.each((property + ' ' + prefixes.join(upper + ' ') + upper).split(' '), function(i, property) {
+ if (style[property] !== undefined) {
+ result = prefixed ? property : true;
+ return false;
+ }
+ });
+
+ return result;
+ }
+
+ function prefixed(property) {
+ return test(property, true);
+ }
+
+ if (tests.csstransitions()) {
+ /* jshint -W053 */
+ $.support.transition = new String(prefixed('transition'))
+ $.support.transition.end = events.transition.end[ $.support.transition ];
+ }
+
+ if (tests.cssanimations()) {
+ /* jshint -W053 */
+ $.support.animation = new String(prefixed('animation'))
+ $.support.animation.end = events.animation.end[ $.support.animation ];
+ }
+
+ if (tests.csstransforms()) {
+ /* jshint -W053 */
+ $.support.transform = new String(prefixed('transform'));
+ $.support.transform3d = tests.csstransforms3d();
+ }
+
+})(window.Zepto || window.jQuery, window, document);
diff --git a/trunk/src/AppBundle/Resources/public/js/parallax.js b/trunk/src/AppBundle/Resources/public/js/parallax.js
new file mode 100644
index 00000000..abb66081
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/js/parallax.js
@@ -0,0 +1,141 @@
+/* detect touch */
+if("ontouchstart" in window){
+ document.documentElement.className = document.documentElement.className + " touch";
+}
+if(!$("html").hasClass("touch")){
+ /* background fix */
+ $(".parallax").css("background-attachment", "fixed");
+}
+
+/* fix vertical when not overflow
+call fullscreenFix() if .fullscreen content changes */
+function fullscreenFix(){
+ var h = $('body').height();
+ // set .fullscreen height
+ $(".content-b").each(function(i){
+ if($(this).innerHeight() <= h){
+ $(this).closest(".fullscreen").addClass("not-overflow");
+ }
+ });
+}
+$(window).resize(fullscreenFix);
+fullscreenFix();
+
+if($(".px-bullets")){
+
+ $('.px-bullet').on('click', function(){
+ var image = 'url('+$(this).data('src')+')';
+ $('.px-bullet').removeClass('px-bullet-selected');
+ $(this).addClass('px-bullet-selected');
+ $('.parallax').fadeTo('slow', 0.1, function()
+ {
+ $(this).css('background-image', image);
+ }).fadeTo('slow', 1);
+ //$('.parallax').css('background-image', image).fadeTo('slow', 1);
+
+ });
+
+}
+/* resize background images */
+function backgroundResize(){
+ var windowH = $(window).height();
+ var windowW = $(window).width();
+ $(".background").each(function(i){
+ var path = $(this);
+ // variables
+ var contW = path.width();
+ var contH = path.height();
+ var imgW = path.attr("data-img-width");
+ var imgH = path.attr("data-img-height");
+
+ var ratio = imgW / imgH;
+
+ var ratio2 = imgH / imgW;
+ // overflowing difference
+ var diff = parseFloat(path.attr("data-diff"));
+ diff = diff ? diff : 0;
+ // remaining height to have fullscreen image only on parallax
+ var remainingH = 0;
+ var remainingW = 0;
+ if(path.hasClass("parallax") && !$("html").hasClass("touch")){
+
+ var maxW = contW > windowW ? contW : windowW
+ var maxH = contH > windowH ? contH : windowH;
+ remainingH = windowH - contH;
+ remainingW = windowW - contW;
+ }
+
+ if(windowW > 1024){
+ imgW = contW + remainingW;
+ imgH = imgW * ratio2;
+ }else{
+ imgH = contH + remainingH;
+ imgW = imgH * ratio;
+ if(contW > imgW){
+ imgW = contW;
+ imgH = imgW / ratio;
+ }
+ }
+
+
+
+ //
+ path.data("resized-imgW", imgW);
+ path.data("resized-imgH", imgH);
+ path.css("background-size", imgW + "px " + imgH + "px");
+ });
+}
+$(window).resize(backgroundResize);
+$(window).focus(backgroundResize);
+backgroundResize();
+
+/* set parallax background-position */
+function parallaxPosition(e){
+ var heightWindow = $(window).height();
+ var topWindow = $(window).scrollTop();
+ var bottomWindow = topWindow + heightWindow;
+ var currentWindow = (topWindow + bottomWindow) / 2;
+
+ $(".parallax").each(function(i){
+ var path = $(this);
+ var height = path.height();
+ var top = 150; //path.offset().top;
+ var bottom = top + height;
+
+
+ var diff = parseFloat(path.attr("data-diff"));
+ diff = diff ? diff : 0;
+ if(heightWindow < 1000){
+ diff = 200;
+ }
+
+ // only when in range
+ if(bottomWindow > top && topWindow < bottom){
+ var imgW = path.data("resized-imgW");
+ var imgH = path.data("resized-imgH");
+ // min when image touch top of window
+ var min = 0;
+ // max when image touch bottom of window
+ var max = - imgH + heightWindow;
+ // overflow changes parallax
+ var overflowH = height < heightWindow ? imgH - height : imgH - heightWindow; // fix height on overflow
+ top = top - overflowH;
+ bottom = bottom + overflowH;
+ // value with linear interpolation
+ var value = min + (max - min) * (currentWindow + top) / (bottom + top);
+
+ value = (value -diff);
+ // set background-position
+ var orizontalPosition = path.attr("data-oriz-pos");
+ orizontalPosition = orizontalPosition ? orizontalPosition : "50%";
+ $(this).css("background-position", orizontalPosition + " " + value + "px");
+ }
+ });
+}
+if(!$("html").hasClass("touch")){
+ $(window).resize(parallaxPosition);
+ //$(window).focus(parallaxPosition);
+ $(window).scroll(parallaxPosition);
+ parallaxPosition();
+}
+
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrow_large_left.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrow_large_left.png
new file mode 100644
index 00000000..d0e0f427
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrow_large_left.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrow_large_right.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrow_large_right.png
new file mode 100644
index 00000000..c1c23e3e
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrow_large_right.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrow_left.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrow_left.png
new file mode 100644
index 00000000..b71957fa
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrow_left.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrow_left2.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrow_left2.png
new file mode 100644
index 00000000..b5694484
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrow_left2.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrow_right.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrow_right.png
new file mode 100644
index 00000000..76f81f51
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrow_right.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrow_right2.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrow_right2.png
new file mode 100644
index 00000000..c6a27262
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrow_right2.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrowleft.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrowleft.png
new file mode 100644
index 00000000..2e7daf8e
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrowleft.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrowright.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrowright.png
new file mode 100644
index 00000000..0702b883
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrowright.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrows.psd b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrows.psd
new file mode 100644
index 00000000..ade2810a
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/arrows.psd differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/black50.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/black50.png
new file mode 100644
index 00000000..01e9141d
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/black50.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/boxed_bgtile.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/boxed_bgtile.png
new file mode 100644
index 00000000..7068133b
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/boxed_bgtile.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/bullet.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/bullet.png
new file mode 100644
index 00000000..1203f8ad
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/bullet.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/bullet_boxed.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/bullet_boxed.png
new file mode 100644
index 00000000..7e28118f
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/bullet_boxed.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/bullets.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/bullets.png
new file mode 100644
index 00000000..eca59779
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/bullets.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/bullets.psd b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/bullets.psd
new file mode 100644
index 00000000..181523b6
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/bullets.psd differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/bullets2.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/bullets2.png
new file mode 100644
index 00000000..bf3c7f21
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/bullets2.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/coloredbg.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/coloredbg.png
new file mode 100644
index 00000000..db75b7a1
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/coloredbg.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/grain.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/grain.png
new file mode 100644
index 00000000..d892efe4
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/grain.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/gridtile.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/gridtile.png
new file mode 100644
index 00000000..b07e3964
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/gridtile.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/gridtile_3x3.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/gridtile_3x3.png
new file mode 100644
index 00000000..6f2c31d5
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/gridtile_3x3.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/gridtile_3x3_white.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/gridtile_3x3_white.png
new file mode 100644
index 00000000..a8830fcb
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/gridtile_3x3_white.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/gridtile_white.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/gridtile_white.png
new file mode 100644
index 00000000..7f2599ef
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/gridtile_white.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/large_left.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/large_left.png
new file mode 100644
index 00000000..896d084f
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/large_left.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/large_right.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/large_right.png
new file mode 100644
index 00000000..43db6f67
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/large_right.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/loader.gif b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/loader.gif
new file mode 100644
index 00000000..53dd589f
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/loader.gif differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/loader2.gif b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/loader2.gif
new file mode 100644
index 00000000..4ec1dda3
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/loader2.gif differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/navigdots.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/navigdots.png
new file mode 100644
index 00000000..3c0ea2f5
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/navigdots.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/navigdots_bgtile.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/navigdots_bgtile.png
new file mode 100644
index 00000000..84f1c287
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/navigdots_bgtile.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/shadow1.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/shadow1.png
new file mode 100644
index 00000000..55293a19
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/shadow1.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/shadow2.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/shadow2.png
new file mode 100644
index 00000000..8d0f298b
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/shadow2.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/shadow3.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/shadow3.png
new file mode 100644
index 00000000..2ceccf84
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/shadow3.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/small_arrows.psd b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/small_arrows.psd
new file mode 100644
index 00000000..5a60813e
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/small_arrows.psd differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/small_left.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/small_left.png
new file mode 100644
index 00000000..0fb36a64
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/small_left.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/small_left_boxed.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/small_left_boxed.png
new file mode 100644
index 00000000..59cd3bc0
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/small_left_boxed.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/small_right.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/small_right.png
new file mode 100644
index 00000000..b83563a4
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/small_right.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/small_right_boxed.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/small_right_boxed.png
new file mode 100644
index 00000000..d89a0954
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/small_right_boxed.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/timer.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/timer.png
new file mode 100644
index 00000000..8e2ee79a
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/timer.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/timerdot.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/timerdot.png
new file mode 100644
index 00000000..0174d3d6
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/timerdot.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/transparent.jpg b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/transparent.jpg
new file mode 100644
index 00000000..f0e511b2
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/transparent.jpg differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/white50.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/white50.png
new file mode 100644
index 00000000..32426051
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/assets/white50.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/css/settings-ie8.css b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/css/settings-ie8.css
new file mode 100644
index 00000000..e4cdf500
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/css/settings-ie8.css
@@ -0,0 +1,814 @@
+/*-----------------------------------------------------------------------------
+
+ - Revolution Slider 1.5.3 -
+
+ Screen Stylesheet
+
+version: 2.1
+date: 09/18/11
+last update: 06.12.2012
+author: themepunch
+email: info@themepunch.com
+website: http://www.themepunch.com
+-----------------------------------------------------------------------------*/
+
+
+/*-----------------------------------------------------------------------------
+
+ - Revolution Slider 2.0 Captions -
+
+ Screen Stylesheet
+
+version: 1.4.5
+date: 09/18/11
+last update: 06.12.2012
+author: themepunch
+email: info@themepunch.com
+website: http://www.themepunch.com
+-----------------------------------------------------------------------------*/
+
+
+
+/*************************
+ - CAPTIONS -
+**************************/
+
+.tp-hide-revslider,.tp-caption.tp-hidden-caption { visibility:hidden !important; display:none !important;}
+
+.tp-caption { z-index:1;}
+.tp-caption.big_white{
+ position: absolute;
+ color: #fff;
+ text-shadow: none;
+ font-weight: 800;
+ font-size: 20px;
+ line-height: 20px;
+ font-family: 'Open Sans', sans;
+ padding: 3px 4px;
+ padding-top: 1px;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ background-color:#000;
+ letter-spacing: 0px;
+ }
+
+.tp-caption.big_orange{
+ position: absolute;
+ color: #fff;
+ text-shadow: none;
+ font-weight: 700;
+ font-size: 36px;
+ line-height: 36px;
+ font-family: Arial;
+ padding: 0px 4px;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ background-color:#fb7354;
+ letter-spacing: -1.5px;
+ }
+
+.tp-caption.big_black{
+ position: absolute;
+ color: #000;
+ text-shadow: none;
+ font-weight: 800;
+ font-size: 36px;
+ line-height: 36px;
+ font-family: 'Open Sans', sans;
+ padding: 0px 4px;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ background-color:#fff;
+ letter-spacing: -1.5px;
+ }
+
+.tp-caption.medium_grey{
+ position: absolute;
+ color: #fff;
+ text-shadow: none;
+ font-weight: 700;
+ font-size: 20px;
+ line-height: 20px;
+ font-family: Arial;
+ padding: 2px 4px;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ background-color:#888;
+ white-space:nowrap;
+ text-shadow: 0px 2px 5px rgba(0, 0, 0, 0.5);
+ }
+
+.tp-caption.small_text{
+ position: absolute;
+ color: #fff;
+ text-shadow: none;
+ font-weight: 700;
+ font-size: 14px;
+ line-height: 20px;
+ font-family: Arial;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ white-space:nowrap;
+ text-shadow: 0px 2px 5px rgba(0, 0, 0, 0.5);
+ }
+
+.tp-caption.medium_text{
+ position: absolute;
+ color: #fff;
+ text-shadow: none;
+ font-weight: 300;
+ font-size: 20px;
+ line-height: 20px;
+ font-family: 'Open Sans', sans;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ white-space:nowrap;
+ text-shadow: 0px 2px 5px rgba(0, 0, 0, 0.5);
+ }
+
+.tp-caption.large_text{
+ position: absolute;
+ color: #fff;
+ text-shadow: none;
+ font-weight: 800;
+ font-size: 36px;
+ line-height: 36px;
+ font-family: 'Open Sans', sans;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ white-space:nowrap;
+ text-shadow: 0px 2px 5px rgba(0, 0, 0, 0.5);
+ }
+.tp-caption.large_black_text{
+ position: absolute;
+ color: #000;
+ text-shadow: none;
+ font-weight: 300;
+ font-size: 42px;
+ line-height: 42px;
+ font-family: 'Open Sans', sans;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ white-space:nowrap;
+ }
+
+.tp-caption.very_large_text{
+ position: absolute;
+ color: #fff;
+ text-shadow: none;
+ font-weight: 800;
+ font-size: 60px;
+ line-height: 60px;
+ font-family: 'Open Sans', sans;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ white-space:nowrap;
+ text-shadow: 0px 2px 5px rgba(0, 0, 0, 0.5);
+ letter-spacing: 0px;
+ }
+.tp-caption.very_large_black_text{
+ position: absolute;
+ color: #000;
+ text-shadow: none;
+ font-weight: 800;
+ font-size: 72px;
+ line-height: 72px;
+ font-family: 'Open Sans', sans;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ white-space:nowrap;
+ }
+.tp-caption.bold_red_text{
+ position: absolute;
+ color: #d31e00;
+ text-shadow: none;
+ font-weight: 800;
+ font-size: 20px;
+ line-height: 20px;
+ font-family: 'Open Sans', sans;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ white-space:nowrap;
+ }
+.tp-caption.bold_brown_text{
+ position: absolute;
+ color: #a04606;
+ text-shadow: none;
+ font-weight: 800;
+ font-size: 20px;
+ line-height: 20px;
+ font-family: 'Open Sans', sans;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ white-space:nowrap;
+ }
+ .tp-caption.bold_green_text{
+ position: absolute;
+ color: #5b9830;
+ text-shadow: none;
+ font-weight: 800;
+ font-size: 20px;
+ line-height: 20px;
+ font-family: 'Open Sans', sans;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ white-space:nowrap;
+ }
+
+.tp-caption.very_big_white{
+ position: absolute;
+ color: #fff;
+ text-shadow: none;
+ font-weight: 800;
+ font-size: 36px;
+ line-height: 36px;
+ font-family: 'Open Sans', sans;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ white-space:nowrap;
+ padding: 3px 4px;
+ padding-top: 1px;
+ background-color:#7e8e96;
+ }
+
+.tp-caption.very_big_black{
+ position: absolute;
+ color: #000;
+ text-shadow: none;
+ font-weight: 700;
+ font-size: 60px;
+ line-height: 60px;
+ font-family: Arial;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ white-space:nowrap;
+ padding: 0px 4px;
+ padding-top: 1px;
+ background-color:#fff;
+ }
+
+
+.tp-caption.modern_medium_fat{
+ position: absolute;
+ color: #000;
+ text-shadow: none;
+ font-weight: 800;
+ font-size: 24px;
+ line-height: 20px;
+ font-family: 'Open Sans', sans-serif;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ white-space:nowrap;
+ }
+.tp-caption.modern_medium_fat_white{
+ position: absolute;
+ color: #fff;
+ text-shadow: none;
+ font-weight: 800;
+ font-size: 24px;
+ line-height: 20px;
+ font-family: 'Open Sans', sans-serif;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ white-space:nowrap;
+ }
+.tp-caption.modern_medium_light{
+ position: absolute;
+ color: #000;
+ text-shadow: none;
+ font-weight: 300;
+ font-size: 24px;
+ line-height: 20px;
+ font-family: 'Open Sans', sans-serif;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ white-space:nowrap;
+ }
+.tp-caption.modern_big_bluebg{
+ position: absolute;
+ color: #fff;
+ text-shadow: none;
+ font-weight: 800;
+ font-size: 30px;
+ line-height: 36px;
+ font-family: 'Open Sans', sans-serif;
+ padding: 3px 10px;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ background-color:#4e5b6c;
+ letter-spacing: 0;
+ }
+.tp-caption.modern_big_redbg{
+ position: absolute;
+ color: #fff;
+ text-shadow: none;
+ font-weight: 300;
+ font-size: 30px;
+ line-height: 36px;
+ font-family: 'Open Sans', sans-serif;
+ padding: 3px 10px;
+ padding-top: 1px;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ background-color:#de543e;
+ letter-spacing: 0;
+ }
+.tp-caption.modern_small_text_dark{
+ position: absolute;
+ color: #555;
+ text-shadow: none;
+ font-size: 14px;
+ line-height: 22px;
+ font-family: Arial;
+ margin: 0px;
+ border-width: 0px;
+ border-style: none;
+ white-space:nowrap;
+ }
+
+
+
+
+
+.tp-caption.boxshadow{
+ -moz-box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.5);
+ -webkit-box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.5);
+ box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.5);
+ }
+
+.tp-caption.black{
+ color: #000;
+ text-shadow: none;
+ font-weight: 300;
+ font-size: 19px;
+ line-height: 19px;
+ font-family: 'Open Sans', sans;
+ }
+
+.tp-caption.noshadow {
+ text-shadow: none;
+ }
+
+.tp-caption a {
+ color: #ff7302; text-shadow: none; -webkit-transition: all 0.2s ease-out; -moz-transition: all 0.2s ease-out; -o-transition: all 0.2s ease-out; -ms-transition: all 0.2s ease-out;
+}
+
+.tp-caption a:hover {
+ color: #ffa902;
+}
+
+
+.tp_inner_padding { box-sizing:border-box;
+ -webkit-box-sizing:border-box;
+ -moz-box-sizing:border-box;
+ max-height:none !important; }
+
+
+.tp-caption .frontcorner {
+ width: 0;
+ height: 0;
+ border-left: 40px solid transparent;
+ border-right: 0px solid transparent;
+ border-top: 40px solid #00A8FF;
+ position: absolute;left:-40px;top:0px;
+ }
+
+.tp-caption .backcorner {
+ width: 0;
+ height: 0;
+ border-left: 0px solid transparent;
+ border-right: 40px solid transparent;
+ border-bottom: 40px solid #00A8FF;
+ position: absolute;right:0px;top:0px;
+ }
+
+.tp-caption .frontcornertop {
+ width: 0;
+ height: 0;
+ border-left: 40px solid transparent;
+ border-right: 0px solid transparent;
+ border-bottom: 40px solid #00A8FF;
+ position: absolute;left:-40px;top:0px;
+ }
+
+.tp-caption .backcornertop {
+ width: 0;
+ height: 0;
+ border-left: 0px solid transparent;
+ border-right: 40px solid transparent;
+ border-top: 40px solid #00A8FF;
+ position: absolute;right:0px;top:0px;
+ }
+
+
+/******************************
+ - BUTTONS -
+*******************************/
+
+.button { padding:6px 13px 5px; border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; height:30px;
+ cursor:pointer;
+ color:#fff !important; text-shadow:0px 1px 1px rgba(0, 0, 0, 0.6) !important; font-size:15px; line-height:45px !important;
+ background:url(../images/gradient/g30.png) repeat-x top; font-family: arial, sans-serif; font-weight: bold; letter-spacing: -1px;
+ }
+
+.button.big { color:#fff; text-shadow:0px 1px 1px rgba(0, 0, 0, 0.6); font-weight:bold; padding:9px 20px; font-size:19px; line-height:57px !important; background:url(../images/gradient/g40.png) repeat-x top;}
+
+
+.purchase:hover,
+.button:hover,
+.button.big:hover { background-position:bottom, 15px 11px;}
+
+
+
+ @media only screen and (min-width: 768px) and (max-width: 959px) {
+
+ }
+
+
+
+ @media only screen and (min-width: 480px) and (max-width: 767px) {
+ .button { padding:4px 8px 3px; line-height:25px !important; font-size:11px !important;font-weight:normal; }
+ a.button { -webkit-transition: none; -moz-transition: none; -o-transition: none; -ms-transition: none; }
+
+
+ }
+
+ @media only screen and (min-width: 0px) and (max-width: 479px) {
+ .button { padding:2px 5px 2px; line-height:20px !important; font-size:10px !important;}
+ a.button { -webkit-transition: none; -moz-transition: none; -o-transition: none; -ms-transition: none; }
+ }
+
+
+
+
+
+/* BUTTON COLORS */
+
+
+
+.button.green, .button:hover.green,
+.purchase.green, .purchase:hover.green { background-color:#21a117; -webkit-box-shadow: 0px 3px 0px 0px #104d0b; -moz-box-shadow: 0px 3px 0px 0px #104d0b; box-shadow: 0px 3px 0px 0px #104d0b; }
+
+
+.button.blue, .button:hover.blue,
+.purchase.blue, .purchase:hover.blue { background-color:#1d78cb; -webkit-box-shadow: 0px 3px 0px 0px #0f3e68; -moz-box-shadow: 0px 3px 0px 0px #0f3e68; box-shadow: 0px 3px 0px 0px #0f3e68;}
+
+
+.button.red, .button:hover.red,
+.purchase.red, .purchase:hover.red { background-color:#cb1d1d; -webkit-box-shadow: 0px 3px 0px 0px #7c1212; -moz-box-shadow: 0px 3px 0px 0px #7c1212; box-shadow: 0px 3px 0px 0px #7c1212;}
+
+.button.orange, .button:hover.orange,
+.purchase.orange, .purchase:hover.orange { background-color:#ff7700; -webkit-box-shadow: 0px 3px 0px 0px #a34c00; -moz-box-shadow: 0px 3px 0px 0px #a34c00; box-shadow: 0px 3px 0px 0px #a34c00;}
+
+.button.darkgrey,.button.grey,
+.button:hover.darkgrey,.button:hover.grey,
+.purchase.darkgrey, .purchase:hover.darkgrey { background-color:#555; -webkit-box-shadow: 0px 3px 0px 0px #222; -moz-box-shadow: 0px 3px 0px 0px #222; box-shadow: 0px 3px 0px 0px #222;}
+
+.button.lightgrey, .button:hover.lightgrey,
+.purchase.lightgrey, .purchase:hover.lightgrey { background-color:#888; -webkit-box-shadow: 0px 3px 0px 0px #555; -moz-box-shadow: 0px 3px 0px 0px #555; box-shadow: 0px 3px 0px 0px #555;}
+
+
+
+/****************************************************************
+
+ - SET THE ANIMATION EVEN MORE SMOOTHER ON ANDROID -
+
+******************************************************************/
+
+.tp-simpleresponsive .slotholder *,
+.tp-simpleresponsive img { -webkit-transform: translateZ(0);
+ -webkit-backface-visibility: hidden;
+ -webkit-perspective: 1000;
+ }
+
+
+/************************************************
+ - SOME CAPTION MODIFICATION AT START -
+*************************************************/
+.tp-simpleresponsive .caption,
+.tp-simpleresponsive .tp-caption {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; -moz-opacity: 0; -khtml-opacity: 0; opacity: 0; position:absolute; visibility: hidden;
+
+}
+
+.tp-simpleresponsive img { max-width:none;}
+
+
+
+/******************************
+ - IE8 HACKS -
+*******************************/
+.noFilterClass {
+ filter:none !important;
+}
+
+
+/******************************
+ - SHADOWS -
+******************************/
+.tp-bannershadow {
+ position:absolute;
+
+ margin-left:auto;
+ margin-right:auto;
+ -moz-user-select: none;
+ -khtml-user-select: none;
+ -webkit-user-select: none;
+ -o-user-select: none;
+ }
+
+.tp-bannershadow.tp-shadow1 { background:url(../assets/shadow1.png) no-repeat; background-size:100%; width:890px; height:60px; bottom:-60px;}
+.tp-bannershadow.tp-shadow2 { background:url(../assets/shadow2.png) no-repeat; background-size:100%; width:890px; height:60px;bottom:-60px;}
+.tp-bannershadow.tp-shadow3 { background:url(../assets/shadow3.png) no-repeat; background-size:100%; width:890px; height:60px;bottom:-60px;}
+
+
+/********************************
+ - FULLSCREEN VIDEO -
+*********************************/
+.caption.fullscreenvideo { left:0px; top:0px; position:absolute;width:100%;height:100%;}
+.caption.fullscreenvideo iframe { width:100% !important; height:100% !important;}
+
+.tp-caption.fullscreenvideo { left:0px; top:0px; position:absolute;width:100%;height:100%;}
+.tp-caption.fullscreenvideo iframe { width:100% !important; height:100% !important;}
+
+/************************
+ - NAVIGATION -
+*************************/
+
+/** BULLETS **/
+
+.tpclear { clear:both;}
+
+
+.tp-bullets { z-index:1000; position:absolute;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+ -webkit-transition: opacity 0.2s ease-out; -moz-transition: opacity 0.2s ease-out; -o-transition: opacity 0.2s ease-out; -ms-transition: opacity 0.2s ease-out;
+ }
+.tp-bullets.hidebullets {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ -moz-opacity: 0;
+ -khtml-opacity: 0;
+ opacity: 0;
+ }
+
+
+.tp-bullets.simplebullets.navbar { border:1px solid #666; border-bottom:1px solid #444; background:url(../assets/boxed_bgtile.png); height:40px; padding:0px 10px; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px ;}
+
+.tp-bullets.simplebullets.navbar-old { background:url(../assets/navigdots_bgtile.png); height:35px; padding:0px 10px; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px ;}
+
+
+.tp-bullets.simplebullets.round .bullet { cursor:pointer; position:relative; background:url(../assets/bullet.png) no-Repeat top left; width:20px; height:20px; margin-right:0px; float:left; margin-top:2px; margin-left:3px;}
+.tp-bullets.simplebullets.round .bullet.last { margin-right:3px;}
+
+.tp-bullets.simplebullets.round-old .bullet { cursor:pointer; position:relative; background:url(../assets/bullets.png) no-Repeat bottom left; width:23px; height:23px; margin-right:0px; float:left; margin-top:0px;}
+.tp-bullets.simplebullets.round-old .bullet.last { margin-right:0px;}
+
+
+/** SQUARE BULLETS **/
+.tp-bullets.simplebullets.square .bullet { cursor:pointer; position:relative; background:url(../assets/bullets2.png) no-Repeat bottom left; width:19px; height:19px; margin-right:0px; float:left; margin-top:2px;}
+.tp-bullets.simplebullets.square .bullet.last { margin-right:0px;}
+
+
+/** SQUARE BULLETS **/
+.tp-bullets.simplebullets.square-old .bullet { cursor:pointer; position:relative; background:url(../assets/bullets2.png) no-Repeat bottom left; width:19px; height:19px; margin-right:0px; float:left; margin-top:2px;}
+.tp-bullets.simplebullets.square-old .bullet.last { margin-right:0px;}
+
+
+/** navbar NAVIGATION VERSION **/
+.tp-bullets.simplebullets.navbar .bullet { cursor:pointer; position:relative; background:url(../assets/bullet_boxed.png) no-Repeat top left; width:18px; height:19px; margin-right:5px; float:left; margin-top:10px;}
+
+.tp-bullets.simplebullets.navbar .bullet.first { margin-left:0px !important;}
+.tp-bullets.simplebullets.navbar .bullet.last { margin-right:0px !important;}
+
+
+
+/** navbar NAVIGATION VERSION **/
+.tp-bullets.simplebullets.navbar-old .bullet { cursor:pointer; position:relative; background:url(../assets/navigdots.png) no-Repeat bottom left; width:15px; height:15px; margin-left:5px !important; margin-right:5px !important;float:left; margin-top:10px;}
+.tp-bullets.simplebullets.navbar-old .bullet.first { margin-left:0px !important;}
+.tp-bullets.simplebullets.navbar-old .bullet.last { margin-right:0px !important;}
+
+
+.tp-bullets.simplebullets .bullet:hover,
+.tp-bullets.simplebullets .bullet.selected { background-position:top left; }
+
+.tp-bullets.simplebullets.round .bullet:hover,
+.tp-bullets.simplebullets.round .bullet.selected,
+.tp-bullets.simplebullets.navbar .bullet:hover,
+.tp-bullets.simplebullets.navbar .bullet.selected { background-position:bottom left; }
+
+
+
+/*************************************
+ - TP ARROWS -
+**************************************/
+.tparrows { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+ -webkit-transition: opacity 0.2s ease-out; -moz-transition: opacity 0.2s ease-out; -o-transition: opacity 0.2s ease-out; -ms-transition: opacity 0.2s ease-out;
+
+ }
+.tparrows.hidearrows {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ -moz-opacity: 0;
+ -khtml-opacity: 0;
+ opacity: 0;
+ }
+.tp-leftarrow { z-index:100;cursor:pointer; position:relative; background:url(../assets/large_left.png) no-Repeat top left; width:40px; height:40px; }
+.tp-rightarrow { z-index:100;cursor:pointer; position:relative; background:url(../assets/large_right.png) no-Repeat top left; width:40px; height:40px; }
+
+
+.tp-leftarrow.round { z-index:100;cursor:pointer; position:relative; background:url(../assets/small_left.png) no-Repeat top left; width:19px; height:14px; margin-right:0px; float:left; margin-top:0px; }
+.tp-rightarrow.round { z-index:100;cursor:pointer; position:relative; background:url(../assets/small_right.png) no-Repeat top left; width:19px; height:14px; margin-right:0px; float:left; margin-top:0px;}
+
+
+.tp-leftarrow.round-old { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrow_left.png) no-Repeat top left; width:26px; height:26px; margin-right:0px; float:left; margin-top:0px; }
+.tp-rightarrow.round-old { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrow_right.png) no-Repeat top left; width:26px; height:26px; margin-right:0px; float:left; margin-top:0px;}
+
+
+.tp-leftarrow.navbar { z-index:100;cursor:pointer; position:relative; background:url(../assets/small_left_boxed.png) no-Repeat top left; width:20px; height:15px; float:left; margin-right:6px; margin-top:12px;}
+.tp-rightarrow.navbar { z-index:100;cursor:pointer; position:relative; background:url(../assets/small_right_boxed.png) no-Repeat top left; width:20px; height:15px; float:left; margin-left:6px; margin-top:12px;}
+
+
+.tp-leftarrow.navbar-old { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrowleft.png) no-Repeat top left; width:9px; height:16px; float:left; margin-right:6px; margin-top:10px;}
+.tp-rightarrow.navbar-old { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrowright.png) no-Repeat top left; width:9px; height:16px; float:left; margin-left:6px; margin-top:10px;}
+
+.tp-leftarrow.navbar-old.thumbswitharrow { margin-right:10px; }
+.tp-rightarrow.navbar-old.thumbswitharrow { margin-left:0px; }
+
+.tp-leftarrow.square { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrow_left2.png) no-Repeat top left; width:12px; height:17px; float:left; margin-right:0px; margin-top:0px;}
+.tp-rightarrow.square { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrow_right2.png) no-Repeat top left; width:12px; height:17px; float:left; margin-left:0px; margin-top:0px;}
+
+
+.tp-leftarrow.square-old { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrow_left2.png) no-Repeat top left; width:12px; height:17px; float:left; margin-right:0px; margin-top:0px;}
+.tp-rightarrow.square-old { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrow_right2.png) no-Repeat top left; width:12px; height:17px; float:left; margin-left:0px; margin-top:0px;}
+
+
+.tp-leftarrow.default { z-index:100;cursor:pointer; position:relative; background:url(../assets/large_left.png) no-Repeat 0 0; width:40px; height:40px;
+
+ }
+.tp-rightarrow.default { z-index:100;cursor:pointer; position:relative; background:url(../assets/large_right.png) no-Repeat 0 0; width:40px; height:40px;
+
+ }
+
+
+
+
+.tp-leftarrow:hover,
+.tp-rightarrow:hover { background-position:bottom left; }
+
+
+
+
+
+
+/****************************************************************************************************
+ - TP THUMBS -
+*****************************************************************************************************
+
+ - tp-thumbs & tp-mask Width is the width of the basic Thumb Container (500px basic settings)
+
+ - .bullet width & height is the dimension of a simple Thumbnail (basic 100px x 50px)
+
+ *****************************************************************************************************/
+
+
+.tp-bullets.tp-thumbs { z-index:1000; position:absolute; padding:3px;background-color:#fff;
+ width:500px;height:50px; /* THE DIMENSIONS OF THE THUMB CONTAINER */
+ margin-top:-50px;
+ }
+
+
+.fullwidthbanner-container .tp-thumbs { padding:3px;}
+
+.tp-bullets.tp-thumbs .tp-mask { width:500px; height:50px; /* THE DIMENSIONS OF THE THUMB CONTAINER */
+ overflow:hidden; position:relative;}
+
+
+.tp-bullets.tp-thumbs .tp-mask .tp-thumbcontainer { width:5000px; position:absolute;}
+
+.tp-bullets.tp-thumbs .bullet { width:100px; height:50px; /* THE DIMENSION OF A SINGLE THUMB */
+ cursor:pointer; overflow:hidden;background:none;margin:0;float:left;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+ /*filter: alpha(opacity=50); */
+ -moz-opacity: 0.5;
+ -khtml-opacity: 0.5;
+ opacity: 0.5;
+
+ -webkit-transition: all 0.2s ease-out; -moz-transition: all 0.2s ease-out; -o-transition: all 0.2s ease-out; -ms-transition: all 0.2s ease-out;
+ }
+
+
+.tp-bullets.tp-thumbs .bullet:hover,
+.tp-bullets.tp-thumbs .bullet.selected { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+ }
+.tp-thumbs img { width:100%; }
+
+
+/************************************
+ - TP BANNER TIMER -
+*************************************/
+.tp-bannertimer { width:100%; height:10px; background:url(../assets/timer.png);position:absolute; z-index:200;top:0px;}
+.tp-bannertimer.tp-bottom { bottom:0px;height:5px; top:auto;}
+
+
+
+
+/***************************************
+ - RESPONSIVE SETTINGS -
+****************************************/
+
+
+ @media only screen and (min-width: 768px) and (max-width: 959px) {
+
+ }
+
+
+
+ @media only screen and (min-width: 480px) and (max-width: 767px) {
+ .responsive .tp-bullets.tp-thumbs { width:300px !important; height:30px !important;}
+ .responsive .tp-bullets.tp-thumbs .tp-mask { width:300px !important; height:30px !important;}
+ .responsive .tp-bullets.tp-thumbs .bullet { width:60px !important;height:30px !important;}
+
+ }
+
+ @media only screen and (min-width: 0px) and (max-width: 479px) {
+ .responsive .tp-bullets { display:none}
+ .responsive .tparrows { display:none;}
+ }
+
+
+
+
+
+/*********************************************
+
+ - BASIC SETTINGS FOR THE BANNER -
+
+***********************************************/
+
+ .tp-simpleresponsive img {
+ -moz-user-select: none;
+ -khtml-user-select: none;
+ -webkit-user-select: none;
+ -o-user-select: none;
+}
+
+
+
+.tp-simpleresponsive a{ text-decoration:none;}
+
+.tp-simpleresponsive ul {
+ list-style:none;
+ padding:0;
+ margin:0;
+}
+
+.tp-simpleresponsive >ul >li{
+ list-stye:none;
+ position:absolute;
+ visibility:hidden;
+}
+/* CAPTION SLIDELINK **/
+.caption.slidelink a div,
+.tp-caption.slidelink a div { width:3000px; height:1500px; background:url(../assets/coloredbg.png) repeat;}
+
+.tp-loader { background:url(../assets/loader.gif) no-repeat 10px 10px; background-color:#fff; margin:-22px -22px; top:50%; left:50%; z-index:10000; position:absolute;width:44px;height:44px;
+ border-radius: 3px;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ }
+
+
+.tp-transparentimg { content:"url(../assets/transparent.png)"}
+.tp-3d { -webkit-transform-style: preserve-3d;
+ -webkit-transform-origin: 50% 50%;
+ }
+
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/css/settings.css b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/css/settings.css
new file mode 100644
index 00000000..dc35fe30
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/css/settings.css
@@ -0,0 +1,2436 @@
+/*-----------------------------------------------------------------------------
+
+ - Revolution Slider 4.1 Captions -
+
+ Screen Stylesheet
+
+version: 1.4.5
+date: 27/11/13
+author: themepunch
+email: info@themepunch.com
+website: http://www.themepunch.com
+-----------------------------------------------------------------------------*/
+
+
+
+/*************************
+ - CAPTIONS -
+**************************/
+
+.tp-static-layers { position:absolute; z-index:505; top:0px;left:0px}
+
+.tp-hide-revslider,.tp-caption.tp-hidden-caption { visibility:hidden !important; display:none !important}
+
+
+.tp-caption { z-index:1; white-space:nowrap}
+
+.tp-caption-demo .tp-caption { position:relative !important; display:inline-block; margin-bottom:10px; margin-right:20px !important}
+
+
+.tp-caption.whitedivider3px {
+
+ color: #000000;
+ text-shadow: none;
+ background-color: rgb(255, 255, 255);
+ background-color: rgba(255, 255, 255, 1);
+ text-decoration: none;
+ min-width: 408px;
+ min-height: 3px;
+ background-position: initial initial;
+ background-repeat: initial initial;
+ border-width: 0px;
+ border-color: #000000;
+ border-style: none;
+}
+
+
+.tp-caption.finewide_large_white {
+color:#ffffff;
+text-shadow:none;
+font-size:60px;
+line-height:60px;
+font-weight:300;
+font-family:"Open Sans", sans-serif;
+background-color:transparent;
+text-decoration:none;
+text-transform:uppercase;
+letter-spacing:8px;
+border-width:0px;
+border-color:rgb(0, 0, 0);
+border-style:none;
+}
+
+.tp-caption.whitedivider3px {
+color:#000000;
+text-shadow:none;
+background-color:rgb(255, 255, 255);
+background-color:rgba(255, 255, 255, 1);
+text-decoration:none;
+font-size:0px;
+line-height:0;
+min-width:468px;
+min-height:3px;
+border-width:0px;
+border-color:rgb(0, 0, 0);
+border-style:none;
+}
+
+.tp-caption.finewide_medium_white {
+color:#ffffff;
+text-shadow:none;
+font-size:37px;
+line-height:37px;
+font-weight:300;
+font-family:"Open Sans", sans-serif;
+background-color:transparent;
+text-decoration:none;
+text-transform:uppercase;
+letter-spacing:5px;
+border-width:0px;
+border-color:rgb(0, 0, 0);
+border-style:none;
+}
+
+.tp-caption.boldwide_small_white {
+font-size:25px;
+line-height:25px;
+font-weight:800;
+font-family:"Open Sans", sans-serif;
+color:rgb(255, 255, 255);
+text-decoration:none;
+background-color:transparent;
+text-shadow:none;
+text-transform:uppercase;
+letter-spacing:5px;
+border-width:0px;
+border-color:rgb(0, 0, 0);
+border-style:none;
+}
+
+.tp-caption.whitedivider3px_vertical {
+color:#000000;
+text-shadow:none;
+background-color:rgb(255, 255, 255);
+background-color:rgba(255, 255, 255, 1);
+text-decoration:none;
+font-size:0px;
+line-height:0;
+min-width:3px;
+min-height:130px;
+border-width:0px;
+border-color:rgb(0, 0, 0);
+border-style:none;
+}
+
+.tp-caption.finewide_small_white {
+color:#ffffff;
+text-shadow:none;
+font-size:25px;
+line-height:25px;
+font-weight:300;
+font-family:"Open Sans", sans-serif;
+background-color:transparent;
+text-decoration:none;
+text-transform:uppercase;
+letter-spacing:5px;
+border-width:0px;
+border-color:rgb(0, 0, 0);
+border-style:none;
+}
+
+.tp-caption.finewide_verysmall_white_mw {
+font-size:13px;
+line-height:25px;
+font-weight:400;
+font-family:"Open Sans", sans-serif;
+color:#ffffff;
+text-decoration:none;
+background-color:transparent;
+text-shadow:none;
+text-transform:uppercase;
+letter-spacing:5px;
+max-width:470px;
+white-space:normal !important;
+border-width:0px;
+border-color:rgb(0, 0, 0);
+border-style:none;
+}
+
+.tp-caption.lightgrey_divider {
+text-decoration:none;
+background-color:rgb(235, 235, 235);
+background-color:rgba(235, 235, 235, 1);
+width:370px;
+height:3px;
+background-position:initial initial;
+background-repeat:initial initial;
+border-width:0px;
+border-color:rgb(34, 34, 34);
+border-style:none;
+}
+
+.tp-caption.finewide_large_white {
+color: #FFF;
+text-shadow: none;
+font-size: 60px;
+line-height: 60px;
+font-weight: 300;
+font-family: "Open Sans", sans-serif;
+background-color: rgba(0, 0, 0, 0);
+text-decoration: none;
+text-transform: uppercase;
+letter-spacing: 8px;
+border-width: 0px;
+border-color: #000;
+border-style: none;
+}
+
+.tp-caption.finewide_medium_white {
+color: #FFF;
+text-shadow: none;
+font-size: 34px;
+line-height: 34px;
+font-weight: 300;
+font-family: "Open Sans", sans-serif;
+background-color: rgba(0, 0, 0, 0);
+text-decoration: none;
+text-transform: uppercase;
+letter-spacing: 5px;
+border-width: 0px;
+border-color: #000;
+border-style: none;
+}
+
+.tp-caption.huge_red {
+position:absolute;
+color:rgb(223,75,107);
+font-weight:400;
+font-size:150px;
+line-height:130px;
+font-family: 'Oswald', sans-serif;
+margin:0px;
+border-width:0px;
+border-style:none;
+white-space:nowrap;
+background-color:rgb(45,49,54);
+padding:0px;
+}
+
+.tp-caption.middle_yellow {
+position:absolute;
+color:rgb(251,213,114);
+font-weight:600;
+font-size:50px;
+line-height:50px;
+font-family: 'Open Sans', sans-serif;
+margin:0px;
+border-width:0px;
+border-style:none;
+white-space:nowrap;
+}
+
+.tp-caption.huge_thin_yellow {
+ position:absolute;
+color:rgb(251,213,114);
+font-weight:300;
+font-size:90px;
+line-height:90px;
+font-family: 'Open Sans', sans-serif;
+margin:0px;
+letter-spacing: 20px;
+border-width:0px;
+border-style:none;
+white-space:nowrap;
+}
+
+.tp-caption.big_dark {
+position:absolute;
+color:#333;
+font-weight:700;
+font-size:70px;
+line-height:70px;
+font-family:"Open Sans";
+margin:0px;
+border-width:0px;
+border-style:none;
+white-space:nowrap;
+}
+
+.tp-caption.medium_dark {
+position:absolute;
+color:#333;
+font-weight:300;
+font-size:40px;
+line-height:40px;
+font-family:"Open Sans";
+margin:0px;
+letter-spacing: 5px;
+border-width:0px;
+border-style:none;
+white-space:nowrap;
+}
+
+
+.tp-caption.medium_grey {
+position:absolute;
+color:#fff;
+text-shadow:0px 2px 5px rgba(0, 0, 0, 0.5);
+font-weight:700;
+font-size:20px;
+line-height:20px;
+font-family:Arial;
+padding:2px 4px;
+margin:0px;
+border-width:0px;
+border-style:none;
+background-color:#888;
+white-space:nowrap;
+}
+
+.tp-caption.small_text {
+position:absolute;
+color:#fff;
+text-shadow:0px 2px 5px rgba(0, 0, 0, 0.5);
+font-weight:700;
+font-size:14px;
+line-height:20px;
+font-family:Arial;
+margin:0px;
+border-width:0px;
+border-style:none;
+white-space:nowrap;
+}
+
+.tp-caption.medium_text {
+position:absolute;
+color:#fff;
+text-shadow:0px 2px 5px rgba(0, 0, 0, 0.5);
+font-weight:700;
+font-size:20px;
+line-height:20px;
+font-family:Arial;
+margin:0px;
+border-width:0px;
+border-style:none;
+white-space:nowrap;
+}
+
+
+.tp-caption.large_bold_white_25 {
+font-size:55px;
+line-height:65px;
+font-weight:700;
+font-family:"Open Sans";
+color:#fff;
+text-decoration:none;
+background-color:transparent;
+text-align:center;
+text-shadow:#000 0px 5px 10px;
+border-width:0px;
+border-color:rgb(255, 255, 255);
+border-style:none;
+}
+
+.tp-caption.medium_text_shadow {
+font-size:25px;
+line-height:25px;
+font-weight:600;
+font-family:"Open Sans";
+color:#fff;
+text-decoration:none;
+background-color:transparent;
+text-align:center;
+text-shadow:#000 0px 5px 10px;
+border-width:0px;
+border-color:rgb(255, 255, 255);
+border-style:none;
+}
+
+.tp-caption.large_text {
+position:absolute;
+color:#fff;
+text-shadow:0px 2px 5px rgba(0, 0, 0, 0.5);
+font-weight:700;
+font-size:40px;
+line-height:40px;
+font-family:Arial;
+margin:0px;
+border-width:0px;
+border-style:none;
+white-space:nowrap;
+}
+
+.tp-caption.medium_bold_grey {
+font-size:30px;
+line-height:30px;
+font-weight:800;
+font-family:"Open Sans";
+color:rgb(102, 102, 102);
+text-decoration:none;
+background-color:transparent;
+text-shadow:none;
+margin:0px;
+padding:1px 4px 0px;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.very_large_text {
+position:absolute;
+color:#fff;
+text-shadow:0px 2px 5px rgba(0, 0, 0, 0.5);
+font-weight:700;
+font-size:60px;
+line-height:60px;
+font-family:Arial;
+margin:0px;
+border-width:0px;
+border-style:none;
+white-space:nowrap;
+letter-spacing:-2px;
+}
+
+.tp-caption.very_big_white {
+position:absolute;
+color:#fff;
+text-shadow:none;
+font-weight:800;
+font-size:60px;
+line-height:60px;
+font-family:Arial;
+margin:0px;
+border-width:0px;
+border-style:none;
+white-space:nowrap;
+padding:0px 4px;
+padding-top:1px;
+background-color:#000;
+}
+
+.tp-caption.very_big_black {
+position:absolute;
+color:#000;
+text-shadow:none;
+font-weight:700;
+font-size:60px;
+line-height:60px;
+font-family:Arial;
+margin:0px;
+border-width:0px;
+border-style:none;
+white-space:nowrap;
+padding:0px 4px;
+padding-top:1px;
+background-color:#fff;
+}
+
+.tp-caption.modern_medium_fat {
+position:absolute;
+color:#000;
+text-shadow:none;
+font-weight:800;
+font-size:24px;
+line-height:20px;
+font-family:"Open Sans", sans-serif;
+margin:0px;
+border-width:0px;
+border-style:none;
+white-space:nowrap;
+}
+
+.tp-caption.modern_medium_fat_white {
+position:absolute;
+color:#fff;
+text-shadow:none;
+font-weight:800;
+font-size:24px;
+line-height:20px;
+font-family:"Open Sans", sans-serif;
+margin:0px;
+border-width:0px;
+border-style:none;
+white-space:nowrap;
+}
+
+.tp-caption.modern_medium_light {
+position:absolute;
+color:#000;
+text-shadow:none;
+font-weight:300;
+font-size:24px;
+line-height:20px;
+font-family:"Open Sans", sans-serif;
+margin:0px;
+border-width:0px;
+border-style:none;
+white-space:nowrap;
+}
+
+.tp-caption.modern_big_bluebg {
+position:absolute;
+color:#fff;
+text-shadow:none;
+font-weight:800;
+font-size:30px;
+line-height:36px;
+font-family:"Open Sans", sans-serif;
+padding:3px 10px;
+margin:0px;
+border-width:0px;
+border-style:none;
+background-color:#4e5b6c;
+letter-spacing:0;
+}
+
+.tp-caption.modern_big_redbg {
+position:absolute;
+color:#fff;
+text-shadow:none;
+font-weight:300;
+font-size:30px;
+line-height:36px;
+font-family:"Open Sans", sans-serif;
+padding:3px 10px;
+padding-top:1px;
+margin:0px;
+border-width:0px;
+border-style:none;
+background-color:#de543e;
+letter-spacing:0;
+}
+
+.tp-caption.modern_small_text_dark {
+position:absolute;
+color:#555;
+text-shadow:none;
+font-size:14px;
+line-height:22px;
+font-family:Arial;
+margin:0px;
+border-width:0px;
+border-style:none;
+white-space:nowrap;
+}
+
+.tp-caption.boxshadow {
+-moz-box-shadow:0px 0px 20px rgba(0, 0, 0, 0.5);
+-webkit-box-shadow:0px 0px 20px rgba(0, 0, 0, 0.5);
+box-shadow:0px 0px 20px rgba(0, 0, 0, 0.5);
+}
+
+.tp-caption.black {
+color:#000;
+text-shadow:none;
+}
+
+.tp-caption.noshadow {
+text-shadow:none;
+}
+
+.tp-caption a {
+color:#ff7302;
+text-shadow:none;
+-webkit-transition:all 0.2s ease-out;
+-moz-transition:all 0.2s ease-out;
+-o-transition:all 0.2s ease-out;
+-ms-transition:all 0.2s ease-out;
+}
+
+.tp-caption a:hover {
+color:#ffa902;
+}
+
+.tp-caption.thinheadline_dark {
+position:absolute;
+color:rgba(0,0,0,0.85);
+text-shadow:none;
+font-weight:300;
+font-size:30px;
+line-height:30px;
+font-family:"Open Sans";
+background-color:transparent;
+}
+
+.tp-caption.thintext_dark {
+position:absolute;
+color:rgba(0,0,0,0.85);
+text-shadow:none;
+font-weight:300;
+font-size:16px;
+line-height:26px;
+font-family:"Open Sans";
+background-color:transparent;
+}
+
+.tp-caption.medium_bg_red a {
+ color: #fff;
+ text-decoration: none;
+}
+
+.tp-caption.medium_bg_red a:hover {
+ color: #fff;
+ text-decoration: underline;
+}
+
+.tp-caption.smoothcircle {
+font-size:30px;
+line-height:75px;
+font-weight:800;
+font-family:"Open Sans";
+color:rgb(255, 255, 255);
+text-decoration:none;
+background-color:rgb(0, 0, 0);
+background-color:rgba(0, 0, 0, 0.498039);
+padding:50px 25px;
+text-align:center;
+border-radius:500px 500px 500px 500px;
+border-width:0px;
+border-color:rgb(0, 0, 0);
+border-style:none;
+}
+
+.tp-caption.largeblackbg {
+font-size:50px;
+line-height:70px;
+font-weight:300;
+font-family:"Open Sans";
+color:rgb(255, 255, 255);
+text-decoration:none;
+background-color:rgb(0, 0, 0);
+padding:0px 20px 5px;
+text-shadow:none;
+border-width:0px;
+border-color:rgb(255, 255, 255);
+border-style:none;
+}
+
+.tp-caption.largepinkbg {
+position:absolute;
+color:#fff;
+text-shadow:none;
+font-weight:300;
+font-size:50px;
+line-height:70px;
+font-family:"Open Sans";
+background-color:#db4360;
+padding:0px 20px;
+-webkit-border-radius:0px;
+-moz-border-radius:0px;
+border-radius:0px;
+}
+
+.tp-caption.largewhitebg {
+position:absolute;
+color:#000;
+text-shadow:none;
+font-weight:300;
+font-size:50px;
+line-height:70px;
+font-family:"Open Sans";
+background-color:#fff;
+padding:0px 20px;
+-webkit-border-radius:0px;
+-moz-border-radius:0px;
+border-radius:0px;
+}
+
+.tp-caption.largegreenbg {
+position:absolute;
+color:#fff;
+text-shadow:none;
+font-weight:300;
+font-size:50px;
+line-height:70px;
+font-family:"Open Sans";
+background-color:#67ae73;
+padding:0px 20px;
+-webkit-border-radius:0px;
+-moz-border-radius:0px;
+border-radius:0px;
+}
+
+.tp-caption.excerpt {
+font-size:36px;
+line-height:36px;
+font-weight:700;
+font-family:Arial;
+color:#ffffff;
+text-decoration:none;
+background-color:rgba(0, 0, 0, 1);
+text-shadow:none;
+margin:0px;
+letter-spacing:-1.5px;
+padding:1px 4px 0px 4px;
+width:150px;
+white-space:normal !important;
+height:auto;
+border-width:0px;
+border-color:rgb(255, 255, 255);
+border-style:none;
+}
+
+.tp-caption.large_bold_grey {
+font-size:60px;
+line-height:60px;
+font-weight:800;
+font-family:"Open Sans";
+color:rgb(102, 102, 102);
+text-decoration:none;
+background-color:transparent;
+text-shadow:none;
+margin:0px;
+padding:1px 4px 0px;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.medium_thin_grey {
+font-size:34px;
+line-height:30px;
+font-weight:300;
+font-family:"Open Sans";
+color:rgb(102, 102, 102);
+text-decoration:none;
+background-color:transparent;
+padding:1px 4px 0px;
+text-shadow:none;
+margin:0px;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.small_thin_grey {
+font-size:18px;
+line-height:26px;
+font-weight:300;
+font-family:"Open Sans";
+color:rgb(117, 117, 117);
+text-decoration:none;
+background-color:transparent;
+padding:1px 4px 0px;
+text-shadow:none;
+margin:0px;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.lightgrey_divider {
+text-decoration:none;
+background-color:rgba(235, 235, 235, 1);
+width:370px;
+height:3px;
+background-position:initial initial;
+background-repeat:initial initial;
+border-width:0px;
+border-color:rgb(34, 34, 34);
+border-style:none;
+}
+
+.tp-caption.large_bold_darkblue {
+font-size:58px;
+line-height:60px;
+font-weight:800;
+font-family:"Open Sans";
+color:rgb(52, 73, 94);
+text-decoration:none;
+background-color:transparent;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.medium_bg_darkblue {
+font-size:20px;
+line-height:20px;
+font-weight:800;
+font-family:"Open Sans";
+color:rgb(255, 255, 255);
+text-decoration:none;
+background-color:rgb(52, 73, 94);
+padding:10px;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.medium_bold_red {
+font-size:24px;
+line-height:30px;
+font-weight:800;
+font-family:"Open Sans";
+color:rgb(227, 58, 12);
+text-decoration:none;
+background-color:transparent;
+padding:0px;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.medium_light_red {
+font-size:21px;
+line-height:26px;
+font-weight:300;
+font-family:"Open Sans";
+color:rgb(227, 58, 12);
+text-decoration:none;
+background-color:transparent;
+padding:0px;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.medium_bg_red {
+font-size:20px;
+line-height:20px;
+font-weight:800;
+font-family:"Open Sans";
+color:rgb(255, 255, 255);
+text-decoration:none;
+background-color:rgb(227, 58, 12);
+padding:10px;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.medium_bold_orange {
+font-size:24px;
+line-height:30px;
+font-weight:800;
+font-family:"Open Sans";
+color:rgb(243, 156, 18);
+text-decoration:none;
+background-color:transparent;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.medium_bg_orange {
+font-size:20px;
+line-height:20px;
+font-weight:800;
+font-family:"Open Sans";
+color:rgb(255, 255, 255);
+text-decoration:none;
+background-color:rgb(243, 156, 18);
+padding:10px;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.grassfloor {
+text-decoration:none;
+background-color:rgba(160, 179, 151, 1);
+width:4000px;
+height:150px;
+border-width:0px;
+border-color:rgb(34, 34, 34);
+border-style:none;
+}
+
+.tp-caption.large_bold_white {
+font-size:58px;
+line-height:60px;
+font-weight:800;
+font-family:"Open Sans";
+color:rgb(255, 255, 255);
+text-decoration:none;
+background-color:transparent;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.medium_light_white {
+font-size:30px;
+line-height:36px;
+font-weight:300;
+font-family:"Open Sans";
+color:rgb(255, 255, 255);
+text-decoration:none;
+background-color:transparent;
+padding:0px;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.mediumlarge_light_white {
+font-size:34px;
+line-height:40px;
+font-weight:300;
+font-family:"Open Sans";
+color:rgb(255, 255, 255);
+text-decoration:none;
+background-color:transparent;
+padding:0px;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.mediumlarge_light_white_center {
+font-size:34px;
+line-height:40px;
+font-weight:300;
+font-family:"Open Sans";
+color:#ffffff;
+text-decoration:none;
+background-color:transparent;
+padding:0px 0px 0px 0px;
+text-align:center;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.medium_bg_asbestos {
+font-size:20px;
+line-height:20px;
+font-weight:800;
+font-family:"Open Sans";
+color:rgb(255, 255, 255);
+text-decoration:none;
+background-color:rgb(127, 140, 141);
+padding:10px;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.medium_light_black {
+font-size:30px;
+line-height:36px;
+font-weight:300;
+font-family:"Open Sans";
+color:rgb(0, 0, 0);
+text-decoration:none;
+background-color:transparent;
+padding:0px;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.large_bold_black {
+font-size:58px;
+line-height:60px;
+font-weight:800;
+font-family:"Open Sans";
+color:rgb(0, 0, 0);
+text-decoration:none;
+background-color:transparent;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.mediumlarge_light_darkblue {
+font-size:34px;
+line-height:40px;
+font-weight:300;
+font-family:"Open Sans";
+color:rgb(52, 73, 94);
+text-decoration:none;
+background-color:transparent;
+padding:0px;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.small_light_white {
+font-size:17px;
+line-height:28px;
+font-weight:300;
+font-family:"Open Sans";
+color:rgb(255, 255, 255);
+text-decoration:none;
+background-color:transparent;
+padding:0px;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.roundedimage {
+border-width:0px;
+border-color:rgb(34, 34, 34);
+border-style:none;
+}
+
+.tp-caption.large_bg_black {
+font-size:40px;
+line-height:40px;
+font-weight:800;
+font-family:"Open Sans";
+color:rgb(255, 255, 255);
+text-decoration:none;
+background-color:rgb(0, 0, 0);
+padding:10px 20px 15px;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+.tp-caption.mediumwhitebg {
+font-size:30px;
+line-height:30px;
+font-weight:300;
+font-family:"Open Sans";
+color:rgb(0, 0, 0);
+text-decoration:none;
+background-color:rgb(255, 255, 255);
+padding:5px 15px 10px;
+text-shadow:none;
+border-width:0px;
+border-color:rgb(0, 0, 0);
+border-style:none;
+}
+
+.tp-caption.medium_bg_orange_new1 {
+font-size:20px;
+line-height:20px;
+font-weight:800;
+font-family:"Open Sans";
+color:rgb(255, 255, 255);
+text-decoration:none;
+background-color:rgb(243, 156, 18);
+padding:10px;
+border-width:0px;
+border-color:rgb(255, 214, 88);
+border-style:none;
+}
+
+
+
+.tp-caption.boxshadow{
+ -moz-box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.5);
+ -webkit-box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.5);
+ box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.5);
+ }
+
+.tp-caption.black{
+ color: #000;
+ text-shadow: none;
+ font-weight: 300;
+ font-size: 19px;
+ line-height: 19px;
+ font-family: 'Open Sans', sans;
+ }
+
+.tp-caption.noshadow {
+ text-shadow: none;
+ }
+
+
+.tp_inner_padding { box-sizing:border-box;
+ -webkit-box-sizing:border-box;
+ -moz-box-sizing:border-box;
+ max-height:none !important; }
+
+
+/*.tp-caption { transform:none !important}*/
+
+
+/*********************************
+ - SPECIAL TP CAPTIONS -
+**********************************/
+.tp-caption .frontcorner {
+ width: 0;
+ height: 0;
+ border-left: 40px solid transparent;
+ border-right: 0px solid transparent;
+ border-top: 40px solid #00A8FF;
+ position: absolute;left:-40px;top:0px;
+ }
+
+.tp-caption .backcorner {
+ width: 0;
+ height: 0;
+ border-left: 0px solid transparent;
+ border-right: 40px solid transparent;
+ border-bottom: 40px solid #00A8FF;
+ position: absolute;right:0px;top:0px;
+ }
+
+.tp-caption .frontcornertop {
+ width: 0;
+ height: 0;
+ border-left: 40px solid transparent;
+ border-right: 0px solid transparent;
+ border-bottom: 40px solid #00A8FF;
+ position: absolute;left:-40px;top:0px;
+ }
+
+.tp-caption .backcornertop {
+ width: 0;
+ height: 0;
+ border-left: 0px solid transparent;
+ border-right: 40px solid transparent;
+ border-top: 40px solid #00A8FF;
+ position: absolute;right:0px;top:0px;
+ }
+
+
+/***********************************************
+ - SPECIAL ALTERNATIVE IMAGE SETTINGS -
+***********************************************/
+
+img.tp-slider-alternative-image { width:100%; height:auto;}
+
+/******************************
+ - BUTTONS -
+*******************************/
+
+.tp-simpleresponsive .button { padding:6px 13px 5px; border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; height:30px;
+ cursor:pointer;
+ color:#fff !important; text-shadow:0px 1px 1px rgba(0, 0, 0, 0.6) !important; font-size:15px; line-height:45px !important;
+ background:url(../images/gradient/g30.png) repeat-x top; font-family: arial, sans-serif; font-weight: bold; letter-spacing: -1px;
+ }
+
+.tp-simpleresponsive .button.big { color:#fff; text-shadow:0px 1px 1px rgba(0, 0, 0, 0.6); font-weight:bold; padding:9px 20px; font-size:19px; line-height:57px !important; background:url(../images/gradient/g40.png) repeat-x top}
+
+
+.tp-simpleresponsive .purchase:hover,
+.tp-simpleresponsive .button:hover,
+.tp-simpleresponsive .button.big:hover { background-position:bottom, 15px 11px}
+
+
+
+ @media only screen and (min-width: 768px) and (max-width: 959px) {
+
+ }
+
+
+
+ @media only screen and (min-width: 480px) and (max-width: 767px) {
+ .tp-simpleresponsive .button { padding:4px 8px 3px; line-height:25px !important; font-size:11px !important;font-weight:normal; }
+ .tp-simpleresponsive a.button { -webkit-transition: none; -moz-transition: none; -o-transition: none; -ms-transition: none; }
+
+
+ }
+
+ @media only screen and (min-width: 0px) and (max-width: 479px) {
+ .tp-simpleresponsive .button { padding:2px 5px 2px; line-height:20px !important; font-size:10px !important}
+ .tp-simpleresponsive a.button { -webkit-transition: none; -moz-transition: none; -o-transition: none; -ms-transition: none; }
+ }
+
+
+
+
+
+/* BUTTON COLORS */
+
+
+
+.tp-simpleresponsive .button.green, .tp-simpleresponsive .button:hover.green,
+.tp-simpleresponsive .purchase.green, .tp-simpleresponsive .purchase:hover.green { background-color:#21a117; -webkit-box-shadow: 0px 3px 0px 0px #104d0b; -moz-box-shadow: 0px 3px 0px 0px #104d0b; box-shadow: 0px 3px 0px 0px #104d0b; }
+
+
+.tp-simpleresponsive .button.blue, .tp-simpleresponsive .button:hover.blue,
+.tp-simpleresponsive .purchase.blue, .tp-simpleresponsive .purchase:hover.blue { background-color:#1d78cb; -webkit-box-shadow: 0px 3px 0px 0px #0f3e68; -moz-box-shadow: 0px 3px 0px 0px #0f3e68; box-shadow: 0px 3px 0px 0px #0f3e68}
+
+
+.tp-simpleresponsive .button.red, .tp-simpleresponsive .button:hover.red,
+.tp-simpleresponsive .purchase.red, .tp-simpleresponsive .purchase:hover.red { background-color:#cb1d1d; -webkit-box-shadow: 0px 3px 0px 0px #7c1212; -moz-box-shadow: 0px 3px 0px 0px #7c1212; box-shadow: 0px 3px 0px 0px #7c1212}
+
+.tp-simpleresponsive .button.orange, .tp-simpleresponsive .button:hover.orange,
+.tp-simpleresponsive .purchase.orange, .tp-simpleresponsive .purchase:hover.orange { background-color:#ff7700; -webkit-box-shadow: 0px 3px 0px 0px #a34c00; -moz-box-shadow: 0px 3px 0px 0px #a34c00; box-shadow: 0px 3px 0px 0px #a34c00}
+
+.tp-simpleresponsive .button.darkgrey, .tp-simpleresponsive .button.grey,
+.tp-simpleresponsive .button:hover.darkgrey, .tp-simpleresponsive .button:hover.grey,
+.tp-simpleresponsive .purchase.darkgrey, .tp-simpleresponsive .purchase:hover.darkgrey { background-color:#555; -webkit-box-shadow: 0px 3px 0px 0px #222; -moz-box-shadow: 0px 3px 0px 0px #222; box-shadow: 0px 3px 0px 0px #222}
+
+.tp-simpleresponsive .button.lightgrey, .tp-simpleresponsive .button:hover.lightgrey,
+.tp-simpleresponsive .purchase.lightgrey, .tp-simpleresponsive .purchase:hover.lightgrey { background-color:#888; -webkit-box-shadow: 0px 3px 0px 0px #555; -moz-box-shadow: 0px 3px 0px 0px #555; box-shadow: 0px 3px 0px 0px #555}
+
+
+
+/****************************************************************
+
+ - SET THE ANIMATION EVEN MORE SMOOTHER ON ANDROID -
+
+******************************************************************/
+
+/*.tp-simpleresponsive { -webkit-perspective: 1500px;
+ -moz-perspective: 1500px;
+ -o-perspective: 1500px;
+ -ms-perspective: 1500px;
+ perspective: 1500px;
+ }*/
+
+
+
+
+/**********************************************
+ - FULLSCREEN AND FULLWIDHT CONTAINERS -
+**********************************************/
+
+.fullscreen-container {
+ width:100%;
+ position:relative;
+ padding:0;
+}
+
+
+
+.fullwidthbanner-container{
+ width:100%;
+ position:relative;
+ padding:0;
+ overflow:hidden;
+}
+
+.fullwidthbanner-container .fullwidthbanner{
+ width:100%;
+ position:relative;
+}
+
+
+
+/************************************************
+ - SOME CAPTION MODIFICATION AT START -
+*************************************************/
+.tp-simpleresponsive .caption,
+.tp-simpleresponsive .tp-caption {
+ /*-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; -moz-opacity: 0; -khtml-opacity: 0; opacity: 0; */
+ position:absolute;visibility: hidden;
+ -webkit-font-smoothing: antialiased !important;
+}
+
+
+.tp-simpleresponsive img { max-width:none}
+
+
+
+/******************************
+ - IE8 HACKS -
+*******************************/
+.noFilterClass {
+ filter:none !important;
+}
+
+
+/******************************
+ - SHADOWS -
+******************************/
+.tp-bannershadow {
+ position:absolute;
+
+ margin-left:auto;
+ margin-right:auto;
+ -moz-user-select: none;
+ -khtml-user-select: none;
+ -webkit-user-select: none;
+ -o-user-select: none;
+ }
+
+.tp-bannershadow.tp-shadow1 { background:url(../assets/shadow1.png) no-repeat; background-size:100% 100%; width:890px; height:60px; bottom:-60px}
+.tp-bannershadow.tp-shadow2 { background:url(../assets/shadow2.png) no-repeat; background-size:100% 100%; width:890px; height:60px;bottom:-60px}
+.tp-bannershadow.tp-shadow3 { background:url(../assets/shadow3.png) no-repeat; background-size:100% 100%; width:890px; height:60px;bottom:-60px}
+
+
+/********************************
+ - FULLSCREEN VIDEO -
+*********************************/
+.caption.fullscreenvideo { left:0px; top:0px; position:absolute;width:100%;height:100%}
+.caption.fullscreenvideo iframe,
+.caption.fullscreenvideo video { width:100% !important; height:100% !important; display: none}
+
+.tp-caption.fullscreenvideo { left:0px; top:0px; position:absolute;width:100%;height:100%}
+
+
+.tp-caption.fullscreenvideo iframe,
+.tp-caption.fullscreenvideo iframe video { width:100% !important; height:100% !important; display: none}
+
+
+.fullcoveredvideo video,
+.fullscreenvideo video { background: #000}
+
+.fullcoveredvideo .tp-poster { background-position: center center;background-size: cover;width:100%;height:100%;top:0px;left:0px}
+
+.html5vid.videoisplaying .tp-poster { display: none}
+
+.tp-video-play-button { background:#000;
+ background:rgba(0,0,0,0.3);
+ padding:5px;
+ border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ font-size: 40px;
+ color: #FFF;
+ z-index: 3;
+ margin-top: -27px;
+ margin-left: -28px;
+ text-align: center;
+ cursor: pointer;
+ }
+
+.html5vid .tp-revstop { width:15px;height:20px; border-left:5px solid #fff; border-right:5px solid #fff; position:relative;margin:10px 20px; box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}
+.html5vid .tp-revstop { display:none}
+.html5vid.videoisplaying .revicon-right-dir { display:none}
+.html5vid.videoisplaying .tp-revstop { display:block}
+
+.html5vid.videoisplaying .tp-video-play-button { display:none}
+.html5vid:hover .tp-video-play-button { display:block}
+
+.fullcoveredvideo .tp-video-play-button { display:none !important}
+
+.tp-video-controls {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ padding: 5px;
+ opacity: 0;
+ -webkit-transition: opacity .3s;
+ -moz-transition: opacity .3s;
+ -o-transition: opacity .3s;
+ -ms-transition: opacity .3s;
+ transition: opacity .3s;
+ background-image: linear-gradient(bottom, rgb(0,0,0) 13%, rgb(50,50,50) 100%);
+ background-image: -o-linear-gradient(bottom, rgb(0,0,0) 13%, rgb(50,50,50) 100%);
+ background-image: -moz-linear-gradient(bottom, rgb(0,0,0) 13%, rgb(50,50,50) 100%);
+ background-image: -webkit-linear-gradient(bottom, rgb(0,0,0) 13%, rgb(50,50,50) 100%);
+ background-image: -ms-linear-gradient(bottom, rgb(0,0,0) 13%, rgb(50,50,50) 100%);
+
+ background-image: -webkit-gradient(
+ linear,
+ left bottom,
+ left top,
+ color-stop(0.13, rgb(0,0,0)),
+ color-stop(1, rgb(50,50,50))
+ );
+
+ display:table;max-width:100%; overflow:hidden;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;
+}
+
+.tp-caption:hover .tp-video-controls {
+ opacity: .9;
+}
+
+.tp-video-button {
+ background: rgba(0,0,0,.5);
+ border: 0;
+ color: #EEE;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ cursor:pointer;
+ line-height:12px;
+ font-size:12px;
+ color:#fff;
+ padding:0px;
+ margin:0px;
+ outline: none;
+ }
+.tp-video-button:hover {
+ cursor: pointer;
+}
+
+
+.tp-video-button-wrap,
+.tp-video-seek-bar-wrap,
+.tp-video-vol-bar-wrap { padding:0px 5px;display:table-cell; }
+
+.tp-video-seek-bar-wrap { width:80%}
+.tp-video-vol-bar-wrap { width:20%}
+
+.tp-volume-bar,
+.tp-seek-bar { width:100%; cursor: pointer; outline:none; line-height:12px;margin:0; padding:0;}
+
+
+/********************************
+ - FULLSCREEN VIDEO ENDS -
+*********************************/
+
+
+/********************************
+ - DOTTED OVERLAYS -
+*********************************/
+.tp-dottedoverlay { background-repeat:repeat;width:100%;height:100%;position:absolute;top:0px;left:0px;z-index:4}
+.tp-dottedoverlay.twoxtwo { background:url(../assets/gridtile.png)}
+.tp-dottedoverlay.twoxtwowhite { background:url(../assets/gridtile_white.png)}
+.tp-dottedoverlay.threexthree { background:url(../assets/gridtile_3x3.png)}
+.tp-dottedoverlay.threexthreewhite { background:url(../assets/gridtile_3x3_white.png)}
+/********************************
+ - DOTTED OVERLAYS ENDS -
+*********************************/
+
+
+/************************
+ - NAVIGATION -
+*************************/
+
+/** BULLETS **/
+
+.tpclear { clear:both}
+
+
+.tp-bullets { z-index:1000; position:absolute;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+ -webkit-transition: opacity 0.2s ease-out; -moz-transition: opacity 0.2s ease-out; -o-transition: opacity 0.2s ease-out; -ms-transition: opacity 0.2s ease-out;-webkit-transform: translateZ(5px);
+ }
+.tp-bullets.hidebullets {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ -moz-opacity: 0;
+ -khtml-opacity: 0;
+ opacity: 0;
+ }
+
+
+.tp-bullets.simplebullets.navbar { border:1px solid #666; border-bottom:1px solid #444; background:url(../assets/boxed_bgtile.png); height:40px; padding:0px 10px; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px }
+
+.tp-bullets.simplebullets.navbar-old { background:url(../assets/navigdots_bgtile.png); height:35px; padding:0px 10px; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px }
+
+
+.tp-bullets.simplebullets.round .bullet { cursor:pointer; position:relative; background:url(../assets/bullet.png) no-Repeat top left; width:20px; height:20px; margin-right:0px; float:left; margin-top:0px; margin-left:3px}
+.tp-bullets.simplebullets.round .bullet.last { margin-right:3px}
+
+.tp-bullets.simplebullets.round-old .bullet { cursor:pointer; position:relative; background:url(../assets/bullets.png) no-Repeat bottom left; width:23px; height:23px; margin-right:0px; float:left; margin-top:0px}
+.tp-bullets.simplebullets.round-old .bullet.last { margin-right:0px}
+
+
+/** SQUARE BULLETS **/
+.tp-bullets.simplebullets.square .bullet { cursor:pointer; position:relative; background:url(../assets/bullets2.png) no-Repeat bottom left; width:19px; height:19px; margin-right:0px; float:left; margin-top:0px}
+.tp-bullets.simplebullets.square .bullet.last { margin-right:0px}
+
+
+/** SQUARE BULLETS **/
+.tp-bullets.simplebullets.square-old .bullet { cursor:pointer; position:relative; background:url(../assets/bullets2.png) no-Repeat bottom left; width:19px; height:19px; margin-right:0px; float:left; margin-top:0px}
+.tp-bullets.simplebullets.square-old .bullet.last { margin-right:0px}
+
+
+/** navbar NAVIGATION VERSION **/
+.tp-bullets.simplebullets.navbar .bullet { cursor:pointer; position:relative; background:url(../assets/bullet_boxed.png) no-Repeat top left; width:18px; height:19px; margin-right:5px; float:left; margin-top:0px}
+
+.tp-bullets.simplebullets.navbar .bullet.first { margin-left:0px !important}
+.tp-bullets.simplebullets.navbar .bullet.last { margin-right:0px !important}
+
+
+
+/** navbar NAVIGATION VERSION **/
+.tp-bullets.simplebullets.navbar-old .bullet { cursor:pointer; position:relative; background:url(../assets/navigdots.png) no-Repeat bottom left; width:15px; height:15px; margin-left:5px !important; margin-right:5px !important;float:left; margin-top:10px}
+.tp-bullets.simplebullets.navbar-old .bullet.first { margin-left:0px !important}
+.tp-bullets.simplebullets.navbar-old .bullet.last { margin-right:0px !important}
+
+
+.tp-bullets.simplebullets .bullet:hover,
+.tp-bullets.simplebullets .bullet.selected { background-position:top left}
+
+.tp-bullets.simplebullets.round .bullet:hover,
+.tp-bullets.simplebullets.round .bullet.selected,
+.tp-bullets.simplebullets.navbar .bullet:hover,
+.tp-bullets.simplebullets.navbar .bullet.selected { background-position:bottom left}
+
+
+
+/*************************************
+ - TP ARROWS -
+**************************************/
+.tparrows { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+ -webkit-transition: opacity 0.2s ease-out; -moz-transition: opacity 0.2s ease-out; -o-transition: opacity 0.2s ease-out; -ms-transition: opacity 0.2s ease-out;
+ -webkit-transform: translateZ(5000px);
+ -webkit-transform-style: flat;
+ -webkit-backface-visibility: hidden;
+ z-index:600;
+ position: relative;
+
+ }
+.tparrows.hidearrows {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ -moz-opacity: 0;
+ -khtml-opacity: 0;
+ opacity: 0;
+ }
+.tp-leftarrow { z-index:100;cursor:pointer; position:relative; background:url(../assets/large_left.png) no-Repeat top left; width:40px; height:40px; }
+.tp-rightarrow { z-index:100;cursor:pointer; position:relative; background:url(../assets/large_right.png) no-Repeat top left; width:40px; height:40px; }
+
+
+.tp-leftarrow.round { z-index:100;cursor:pointer; position:relative; background:url(../assets/small_left.png) no-Repeat top left; width:19px; height:14px; margin-right:0px; float:left; margin-top:0px; }
+.tp-rightarrow.round { z-index:100;cursor:pointer; position:relative; background:url(../assets/small_right.png) no-Repeat top left; width:19px; height:14px; margin-right:0px; float:left; margin-top:0px}
+
+
+.tp-leftarrow.round-old { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrow_left.png) no-Repeat top left; width:26px; height:26px; margin-right:0px; float:left; margin-top:0px; }
+.tp-rightarrow.round-old { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrow_right.png) no-Repeat top left; width:26px; height:26px; margin-right:0px; float:left; margin-top:0px}
+
+
+.tp-leftarrow.navbar { z-index:100;cursor:pointer; position:relative; background:url(../assets/small_left_boxed.png) no-Repeat top left; width:20px; height:15px; float:left; margin-right:6px; margin-top:12px}
+.tp-rightarrow.navbar { z-index:100;cursor:pointer; position:relative; background:url(../assets/small_right_boxed.png) no-Repeat top left; width:20px; height:15px; float:left; margin-left:6px; margin-top:12px}
+
+
+.tp-leftarrow.navbar-old { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrowleft.png) no-Repeat top left; width:9px; height:16px; float:left; margin-right:6px; margin-top:10px}
+.tp-rightarrow.navbar-old { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrowright.png) no-Repeat top left; width:9px; height:16px; float:left; margin-left:6px; margin-top:10px}
+
+.tp-leftarrow.navbar-old.thumbswitharrow { margin-right:10px}
+.tp-rightarrow.navbar-old.thumbswitharrow { margin-left:0px}
+
+.tp-leftarrow.square { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrow_left2.png) no-Repeat top left; width:12px; height:17px; float:left; margin-right:0px; margin-top:0px}
+.tp-rightarrow.square { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrow_right2.png) no-Repeat top left; width:12px; height:17px; float:left; margin-left:0px; margin-top:0px}
+
+
+.tp-leftarrow.square-old { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrow_left2.png) no-Repeat top left; width:12px; height:17px; float:left; margin-right:0px; margin-top:0px}
+.tp-rightarrow.square-old { z-index:100;cursor:pointer; position:relative; background:url(../assets/arrow_right2.png) no-Repeat top left; width:12px; height:17px; float:left; margin-left:0px; margin-top:0px}
+
+
+.tp-leftarrow.default { z-index:100;cursor:pointer; position:relative; background:url(../assets/large_left.png) no-Repeat 0 0; width:40px; height:40px;
+
+ }
+.tp-rightarrow.default { z-index:100;cursor:pointer; position:relative; background:url(../assets/large_right.png) no-Repeat 0 0; width:40px; height:40px;
+
+ }
+
+
+
+
+.tp-leftarrow:hover,
+.tp-rightarrow:hover { background-position:bottom left}
+
+
+
+
+
+
+/****************************************************************************************************
+ - TP THUMBS -
+*****************************************************************************************************
+
+ - tp-thumbs & tp-mask Width is the width of the basic Thumb Container (500px basic settings)
+
+ - .bullet width & height is the dimension of a simple Thumbnail (basic 100px x 50px)
+
+ *****************************************************************************************************/
+
+
+.tp-bullets.tp-thumbs { z-index:1000; position:absolute; padding:3px;background-color:#fff;
+ width:500px;height:50px; /* THE DIMENSIONS OF THE THUMB CONTAINER */
+ margin-top:-50px;
+ }
+
+
+.fullwidthbanner-container .tp-thumbs { padding:3px}
+
+.tp-bullets.tp-thumbs .tp-mask { width:500px; height:50px; /* THE DIMENSIONS OF THE THUMB CONTAINER */
+ overflow:hidden; position:relative}
+
+
+.tp-bullets.tp-thumbs .tp-mask .tp-thumbcontainer { width:5000px; position:absolute}
+
+.tp-bullets.tp-thumbs .bullet { width:100px; height:50px; /* THE DIMENSION OF A SINGLE THUMB */
+ cursor:pointer; overflow:hidden;background:none;margin:0;float:left;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+ /*filter: alpha(opacity=50); */
+ -moz-opacity: 0.5;
+ -khtml-opacity: 0.5;
+ opacity: 0.5;
+
+ -webkit-transition: all 0.2s ease-out; -moz-transition: all 0.2s ease-out; -o-transition: all 0.2s ease-out; -ms-transition: all 0.2s ease-out;
+ }
+
+
+.tp-bullets.tp-thumbs .bullet:hover,
+.tp-bullets.tp-thumbs .bullet.selected { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+
+ -moz-opacity: 1;
+ -khtml-opacity: 1;
+ opacity: 1;
+ }
+.tp-thumbs img { width:100%}
+
+
+/************************************
+ - TP BANNER TIMER -
+*************************************/
+.tp-bannertimer { width:100%; height:10px; background:url(../assets/timer.png);position:absolute; z-index:200;top:0px}
+.tp-bannertimer.tp-bottom { bottom:0px;height:5px; top:auto}
+
+
+
+
+/***************************************
+ - RESPONSIVE SETTINGS -
+****************************************/
+
+
+
+
+ @media only screen and (min-width: 0px) and (max-width: 479px) {
+ .responsive .tp-bullets { display:none}
+ .responsive .tparrows { display:none}
+ }
+
+
+
+
+
+/*********************************************
+
+ - BASIC SETTINGS FOR THE BANNER -
+
+***********************************************/
+
+ .tp-simpleresponsive img {
+ -moz-user-select: none;
+ -khtml-user-select: none;
+ -webkit-user-select: none;
+ -o-user-select: none;
+}
+
+
+
+.tp-simpleresponsive a{ text-decoration:none}
+
+.tp-simpleresponsive ul,
+.tp-simpleresponsive ul li,
+.tp-simpleresponsive ul li:before {
+ list-style:none;
+ padding:0 !important;
+ margin:0 !important;
+ list-style:none !important;
+ overflow-x: visible;
+ overflow-y: visible;
+ background-image:none
+}
+
+
+.tp-simpleresponsive >ul >li{
+ list-style:none;
+ position:absolute;
+ visibility:hidden
+}
+
+/* CAPTION SLIDELINK **/
+.caption.slidelink a div,
+.tp-caption.slidelink a div { width:3000px; height:1500px; background:url(../assets/coloredbg.png) repeat}
+
+.tp-caption.slidelink a span { background:url(../assets/coloredbg.png) repeat}
+
+
+
+/*****************************************
+ - NAVIGATION FANCY EXAMPLES -
+*****************************************/
+
+.tparrows .tp-arr-imgholder { display: none}
+.tparrows .tp-arr-titleholder { display: none}
+
+
+
+/*****************************************
+ - NAVIGATION FANCY EXAMPLES -
+*****************************************/
+
+/* NAVIGATION PREVIEW 1 */
+.tparrows.preview1 { width:100px;height:100px;-webkit-transform-style: preserve-3d; -webkit-perspective: 1000; -moz-perspective: 1000; -webkit-backface-visibility: hidden; -moz-backface-visibility: hidden;background: transparent}
+.tparrows.preview1:after { position:absolute; left:0px;top:0px; font-family: "revicons"; color:#fff; font-size:30px; width:100px;height:100px;text-align: center; background:#fff;background:rgba(0,0,0,0.15);z-index:2;line-height:100px; -webkit-transition: background 0.3s, color 0.3s; -moz-transition: background 0.3s, color 0.3s; transition: background 0.3s, color 0.3s}
+.tp-rightarrow.preview1:after { content: '\e825'; }
+.tp-leftarrow.preview1:after { content: '\e824'; }
+
+.tparrows.preview1:hover:after { background:rgba(255,255,255,1); color:#aaa}
+
+.tparrows.preview1 .tp-arr-imgholder { background-size:cover; background-position:center center; display:block;width:100%;height:100%;position:absolute;top:0px;
+ -webkit-transition: -webkit-transform 0.3s;
+ transition: transform 0.3s;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ }
+.tparrows.preview1 .tp-arr-iwrapper { -webkit-transition: all 0.3s;transition: all 0.3s;
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter: alpha(opacity=0);-moz-opacity: 0.0;-khtml-opacity: 0.0;opacity: 0.0}
+.tparrows.preview1:hover .tp-arr-iwrapper { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter: alpha(opacity=100);-moz-opacity: 1;-khtml-opacity: 1;opacity: 1}
+
+
+.tp-rightarrow.preview1 .tp-arr-imgholder { right:100%;
+ -webkit-transform: rotateY(-90deg);
+ transform: rotateY(-90deg);
+ -webkit-transform-origin: 100% 50%;
+ transform-origin: 100% 50%;
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter: alpha(opacity=0);-moz-opacity: 0.0;-khtml-opacity: 0.0;opacity: 0.0;
+
+
+
+ }
+.tp-leftarrow.preview1 .tp-arr-imgholder { left:100%;
+ -webkit-transform: rotateY(90deg);
+ transform: rotateY(90deg);
+ -webkit-transform-origin: 0% 50%;
+ transform-origin: 0% 50%;
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter: alpha(opacity=0);-moz-opacity: 0.0;-khtml-opacity: 0.0;opacity: 0.0;
+
+
+
+ }
+
+
+.tparrows.preview1:hover .tp-arr-imgholder { -webkit-transform: rotateY(0deg);
+ transform: rotateY(0deg);
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter: alpha(opacity=100);-moz-opacity: 1;-khtml-opacity: 1;opacity: 1;
+
+ }
+
+
+ @media only screen and (min-width: 768px) and (max-width: 979px) {
+ .tparrows.preview1,
+ .tparrows.preview1:after { width:80px; height:80px;line-height:80px; font-size:24px}
+
+ }
+
+ @media only screen and (min-width: 480px) and (max-width: 767px) {
+ .tparrows.preview1,
+ .tparrows.preview1:after { width:60px; height:60px;line-height:60px;font-size:20px}
+
+ }
+
+
+
+ @media only screen and (min-width: 0px) and (max-width: 479px) {
+ .tparrows.preview1,
+ .tparrows.preview1:after { width:40px; height:40px;line-height:40px; font-size:12px}
+ }
+
+/* PREVIEW 1 BULLETS */
+
+.tp-bullets.preview1 { height: 21px}
+.tp-bullets.preview1 .bullet { cursor: pointer;
+ position: relative !important;
+ background: rgba(0, 0, 0, 0.15) !important;
+ /*-webkit-border-radius: 10px;
+ border-radius: 10px;*/
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ width: 5px !important;
+ height: 5px !important;
+ border: 8px solid rgba(0, 0, 0, 0) !important;
+ display: inline-block;
+ margin-right: 5px !important;
+ margin-bottom: 0px !important;
+ -webkit-transition: background-color 0.2s, border-color 0.2s;
+ -moz-transition: background-color 0.2s, border-color 0.2s;
+ -o-transition: background-color 0.2s, border-color 0.2s;
+ -ms-transition: background-color 0.2s, border-color 0.2s;
+ transition: background-color 0.2s, border-color 0.2s;
+ float:none !important;
+ box-sizing:content-box;
+ -moz-box-sizing:content-box;
+ -webkit-box-sizing:content-box;
+}
+.tp-bullets.preview1 .bullet.last { margin-right: 0px}
+.tp-bullets.preview1 .bullet:hover,
+.tp-bullets.preview1 .bullet.selected { -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ background: #aaa !important;
+ width: 5px !important;
+ height: 5px !important;
+ border: 8px solid rgba(255, 255, 255, 1) !important;
+}
+
+
+
+
+/* NAVIGATION PREVIEW 2 */
+.tparrows.preview2 { min-width:60px; min-height:60px; background:#fff; ;
+
+ border-radius:30px;-moz-border-radius:30px;-webkit-border-radius:30px;
+ overflow:hidden;
+ -webkit-transition: -webkit-transform 1.3s;
+ -webkit-transition: width 0.3s, background-color 0.3s, opacity 0.3s;
+ transition: width 0.3s, background-color 0.3s, opacity 0.3s;
+ backface-visibility: hidden;
+}
+.tparrows.preview2:after { position:absolute; top:50%; font-family: "revicons"; color:#aaa; font-size:25px; margin-top: -12px; -webkit-transition: color 0.3s; -moz-transition: color 0.3s; transition: color 0.3s }
+.tp-rightarrow.preview2:after { content: '\e81e'; right:18px}
+.tp-leftarrow.preview2:after { content: '\e81f'; left:18px}
+
+
+.tparrows.preview2 .tp-arr-titleholder { background-size:cover; background-position:center center; display:block; visibility:hidden;position:relative;top:0px;
+ -webkit-transition: -webkit-transform 0.3s;
+ transition: transform 0.3s;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ white-space: nowrap;
+ color: #000;
+ text-transform: uppercase;
+ font-weight: 400;
+ font-size: 14px;
+ line-height: 60px;
+ padding:0px 10px;
+ }
+
+.tp-rightarrow.preview2 .tp-arr-titleholder { right:50px;
+ -webkit-transform: translateX(-100%);
+ transform: translateX(-100%);
+ }
+.tp-leftarrow.preview2 .tp-arr-titleholder { left:50px;
+ -webkit-transform: translateX(100%);
+ transform: translateX(100%);
+ }
+
+.tparrows.preview2.hovered { width:300px}
+.tparrows.preview2:hover { background:#fff}
+.tparrows.preview2:hover:after { color:#000}
+.tparrows.preview2:hover .tp-arr-titleholder{ -webkit-transform: translateX(0px);
+ transform: translateX(0px);
+ visibility: visible;
+ position: absolute;
+ }
+
+/* PREVIEW 2 BULLETS */
+
+.tp-bullets.preview2 { height: 17px}
+.tp-bullets.preview2 .bullet { cursor: pointer;
+ position: relative !important;
+ background: rgba(0, 0, 0, 0.5) !important;
+ -webkit-border-radius: 10px;
+ border-radius: 10px;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ width: 6px !important;
+ height: 6px !important;
+ border: 5px solid rgba(0, 0, 0, 0) !important;
+ display: inline-block;
+ margin-right: 2px !important;
+ margin-bottom: 0px !important;
+ -webkit-transition: background-color 0.2s, border-color 0.2s;
+ -moz-transition: background-color 0.2s, border-color 0.2s;
+ -o-transition: background-color 0.2s, border-color 0.2s;
+ -ms-transition: background-color 0.2s, border-color 0.2s;
+ transition: background-color 0.2s, border-color 0.2s;
+ float:none !important;
+ box-sizing:content-box;
+ -moz-box-sizing:content-box;
+ -webkit-box-sizing:content-box;
+}
+.tp-bullets.preview2 .bullet.last { margin-right: 0px}
+.tp-bullets.preview2 .bullet:hover,
+.tp-bullets.preview2 .bullet.selected { -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ background: rgba(255, 255, 255, 1) !important;
+ width: 6px !important;
+ height: 6px !important;
+ border: 5px solid rgba(0, 0, 0, 1) !important;
+}
+
+.tp-arr-titleholder.alwayshidden { display:none !important}
+
+
+ @media only screen and (min-width: 768px) and (max-width: 979px) {
+ .tparrows.preview2 { min-width:40px; min-height:40px; width:40px;height:40px;
+ border-radius:20px;-moz-border-radius:20px;-webkit-border-radius:20px;
+ }
+ .tparrows.preview2:after { position:absolute; top:50%; font-family: "revicons"; font-size:20px; margin-top: -12px}
+ .tp-rightarrow.preview2:after { content: '\e81e'; right:11px}
+ .tp-leftarrow.preview2:after { content: '\e81f'; left:11px}
+ .tparrows.preview2 .tp-arr-titleholder { font-size:12px; line-height:40px; letter-spacing: 0px}
+ .tp-rightarrow.preview2 .tp-arr-titleholder { right:35px}
+ .tp-leftarrow.preview2 .tp-arr-titleholder { left:35px}
+
+ }
+
+ @media only screen and (min-width: 480px) and (max-width: 767px) {
+ .tparrows.preview2 { min-width:30px; min-height:30px; width:30px;height:30px;
+ border-radius:15px;-moz-border-radius:15px;-webkit-border-radius:15px;
+ }
+ .tparrows.preview2:after { position:absolute; top:50%; font-family: "revicons"; font-size:14px; margin-top: -12px}
+ .tp-rightarrow.preview2:after { content: '\e81e'; right:8px}
+ .tp-leftarrow.preview2:after { content: '\e81f'; left:8px}
+ .tparrows.preview2 .tp-arr-titleholder { font-size:10px; line-height:30px; letter-spacing: 0px}
+ .tp-rightarrow.preview2 .tp-arr-titleholder { right:25px}
+ .tp-leftarrow.preview2 .tp-arr-titleholder { left:25px}
+ .tparrows.preview2 .tp-arr-titleholder { display:none;visibility:none}
+
+
+ }
+
+ @media only screen and (min-width: 0px) and (max-width: 479px) {
+ .tparrows.preview2 { min-width:30px; min-height:30px; width:30px;height:30px;
+ border-radius:15px;-moz-border-radius:15px;-webkit-border-radius:15px;
+ }
+ .tparrows.preview2:after { position:absolute; top:50%; font-family: "revicons"; font-size:14px; margin-top: -12px}
+ .tp-rightarrow.preview2:after { content: '\e81e'; right:8px}
+ .tp-leftarrow.preview2:after { content: '\e81f'; left:8px}
+ .tparrows.preview2 .tp-arr-titleholder { display:none;visibility:none}
+ .tparrows.preview2:hover { width:30px !important; height:30px !important}
+ }
+
+
+
+/* NAVIGATION PREVIEW 3 */
+.tparrows.preview3 { width:70px; height:70px; background:#fff; background:rgba(255,255,255,1); -webkit-transform-style: flat}
+.tparrows.preview3:after { position:absolute; line-height: 70px;text-align: center; font-family: "revicons"; color:#aaa; font-size:30px; top:0px;left:0px;;background:#fff; z-index:100; width:70px;height:70px; -webkit-transition: color 0.3s; -moz-transition: color 0.3s; transition: color 0.3s}
+.tparrows.preview3:hover:after { color:#000}
+.tp-rightarrow.preview3:after { content: '\e825'; }
+.tp-leftarrow.preview3:after { content: '\e824'; }
+
+
+.tparrows.preview3 .tp-arr-iwrapper {
+ -webkit-transform: scale(0,1);
+ transform: scale(0,1);
+ -webkit-transform-origin: 100% 50%;
+ transform-origin: 100% 50%;
+ -webkit-transition: -webkit-transform 0.2s;
+ transition: transform 0.2s;
+ z-index:0;position: absolute; background: #000; background: rgba(0,0,0,0.75);
+ display: table;min-height:90px;top:-10px}
+
+.tp-leftarrow.preview3 .tp-arr-iwrapper { -webkit-transform: scale(0,1);
+ transform: scale(0,1);
+ -webkit-transform-origin: 0% 50%;
+ transform-origin: 0% 50%;
+ }
+
+.tparrows.preview3 .tp-arr-imgholder { display:block;background-size:cover; background-position:center center; display:table-cell;min-width:90px;height:90px;
+ position:relative;top:0px}
+
+.tp-rightarrow.preview3 .tp-arr-iwrapper { right:0px;padding-right:70px}
+.tp-leftarrow.preview3 .tp-arr-iwrapper { left:0px; direction: rtl;padding-left:70px}
+.tparrows.preview3 .tp-arr-titleholder { display:table-cell; padding:30px;font-size:16px; color:#fff;white-space: nowrap; position: relative; clear:right;vertical-align: middle}
+
+.tparrows.preview3:hover .tp-arr-iwrapper {
+ -webkit-transform: scale(1,1);
+ transform: scale(1,1);
+
+ }
+
+/* PREVIEW 3 BULLETS */
+.tp-bullets.preview3 { height: 17px}
+.tp-bullets.preview3 .bullet { cursor: pointer;
+ position: relative !important;
+ background: rgba(0, 0, 0, 0.5) !important;
+ -webkit-border-radius: 10px;
+ border-radius: 10px;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ width: 6px !important;
+ height: 6px !important;
+ border: 5px solid rgba(0, 0, 0, 0) !important;
+ display: inline-block;
+ margin-right: 2px !important;
+ margin-bottom: 0px !important;
+ -webkit-transition: background-color 0.2s, border-color 0.2s;
+ -moz-transition: background-color 0.2s, border-color 0.2s;
+ -o-transition: background-color 0.2s, border-color 0.2s;
+ -ms-transition: background-color 0.2s, border-color 0.2s;
+ transition: background-color 0.2s, border-color 0.2s;
+ float:none !important;
+ box-sizing:content-box;
+ -moz-box-sizing:content-box;
+ -webkit-box-sizing:content-box;
+}
+.tp-bullets.preview3 .bullet.last { margin-right: 0px}
+.tp-bullets.preview3 .bullet:hover,
+.tp-bullets.preview3 .bullet.selected { -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ background: rgba(255, 255, 255, 1) !important;
+ width: 6px !important;
+ height: 6px !important;
+ border: 5px solid rgba(0, 0, 0, 1) !important;
+}
+
+
+ @media only screen and (min-width: 768px) and (max-width: 979px) {
+ .tparrows.preview3:after,
+ .tparrows.preview3 { width:50px; height:50px; line-height:50px;font-size:20px}
+ .tparrows.preview3 .tp-arr-iwrapper { min-height:70px}
+ .tparrows.preview3 .tp-arr-imgholder { min-width:70px;height:70px}
+ .tp-rightarrow.preview3 .tp-arr-iwrapper { padding-right:50px}
+ .tp-leftarrow.preview3 .tp-arr-iwrapper { padding-left:50px}
+ .tparrows.preview3 .tp-arr-titleholder { padding:10px;font-size:16px}
+
+
+
+ }
+
+ @media only screen and (max-width: 767px) {
+
+ .tparrows.preview3:after,
+ .tparrows.preview3 { width:50px; height:50px; line-height:50px;font-size:20px}
+ .tparrows.preview3 .tp-arr-iwrapper { min-height:70px}
+ }
+
+
+
+
+
+/* NAVIGATION PREVIEW 4 */
+.tparrows.preview4 { width:30px; height:110px; background:transparent;-webkit-transform-style: preserve-3d; -webkit-perspective: 1000; -moz-perspective: 1000}
+.tparrows.preview4:after { position:absolute; line-height: 110px;text-align: center; font-family: "revicons"; color:#fff; font-size:20px; top:0px;left:0px;z-index:0; width:30px;height:110px; background: #000; background: rgba(0,0,0,0.25);
+ -webkit-transition: all 0.2s ease-in-out;
+ -moz-transition: all 0.2s ease-in-out;
+ -o-transition: all 0.2s ease-in-out;
+ transition: all 0.2s ease-in-out;
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter: alpha(opacity=100);-moz-opacity: 1;-khtml-opacity: 1;opacity: 1;
+
+ }
+
+.tp-rightarrow.preview4:after { content: '\e825'; }
+.tp-leftarrow.preview4:after { content: '\e824'; }
+
+
+.tparrows.preview4 .tp-arr-allwrapper { visibility:hidden;width:180px;position: absolute;z-index: 1;min-height:120px;top:0px;left:-150px; overflow: hidden;-webkit-perspective: 1000px;-webkit-transform-style: flat}
+
+.tp-leftarrow.preview4 .tp-arr-allwrapper { left:0px}
+.tparrows.preview4 .tp-arr-iwrapper { position: relative}
+
+.tparrows.preview4 .tp-arr-imgholder { display:block;background-size:cover; background-position:center center;width:180px;height:110px;
+ position:relative;top:0px;
+
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+
+
+
+ }
+
+
+.tparrows.preview4 .tp-arr-imgholder2 { display:block;background-size:cover; background-position:center center; width:180px;height:110px;
+ position:absolute;top:0px; left:180px;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+
+ }
+
+.tp-leftarrow.preview4 .tp-arr-imgholder2 { left:-180px}
+
+
+
+
+.tparrows.preview4 .tp-arr-titleholder { display:block; font-size:12px; line-height:25px; padding:0px 10px;text-align:left;color:#fff; position: relative;
+ background: #000;
+ color: #FFF;
+ text-transform: uppercase;
+ white-space: nowrap;
+ letter-spacing: 1px;
+ font-weight: 700;
+ font-size: 11px;
+ line-height: 2.75;
+ -webkit-transition: all 0.3s;
+ transition: all 0.3s;
+ -webkit-transform: rotateX(-90deg);
+ transform: rotateX(-90deg);
+ -webkit-transform-origin: 50% 0;
+ transform-origin: 50% 0;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter: alpha(opacity=0);-moz-opacity: 0.0;-khtml-opacity: 0.0;opacity: 0.0;
+
+
+}
+
+
+
+.tparrows.preview4:after { transform-origin: 100% 100%; -webkit-transform-origin: 100% 100%}
+.tp-leftarrow.preview4:after { transform-origin: 0% 0%; -webkit-transform-origin: 0% 0%}
+
+
+
+
+@media only screen and (min-width: 768px) {
+ .tparrows.preview4:hover:after { -webkit-transform: rotateY(-90deg); transform:rotateY(-90deg)}
+ .tp-leftarrow.preview4:hover:after { -webkit-transform: rotateY(90deg); transform:rotateY(90deg)}
+
+
+ .tparrows.preview4:hover .tp-arr-titleholder { -webkit-transition-delay: 0.4s;
+ transition-delay: 0.4s;
+ -webkit-transform: rotateX(0deg);
+ transform: rotateX(0deg);
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter: alpha(opacity=100);-moz-opacity: 1;-khtml-opacity: 1;opacity: 1;
+
+ }
+}
+
+/* PREVIEW 4 BULLETS */
+
+.tp-bullets.preview4 { height: 17px}
+.tp-bullets.preview4 .bullet { cursor: pointer;
+ position: relative !important;
+ background: rgba(0, 0, 0, 0.5) !important;
+ -webkit-border-radius: 10px;
+ border-radius: 10px;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ width: 6px !important;
+ height: 6px !important;
+ border: 5px solid rgba(0, 0, 0, 0) !important;
+ display: inline-block;
+ margin-right: 2px !important;
+ margin-bottom: 0px !important;
+ -webkit-transition: background-color 0.2s, border-color 0.2s;
+ -moz-transition: background-color 0.2s, border-color 0.2s;
+ -o-transition: background-color 0.2s, border-color 0.2s;
+ -ms-transition: background-color 0.2s, border-color 0.2s;
+ transition: background-color 0.2s, border-color 0.2s;
+ float:none !important;
+ box-sizing:content-box;
+ -moz-box-sizing:content-box;
+ -webkit-box-sizing:content-box;
+}
+.tp-bullets.preview4 .bullet.last { margin-right: 0px}
+.tp-bullets.preview4 .bullet:hover,
+.tp-bullets.preview4 .bullet.selected { -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ background: rgba(255, 255, 255, 1) !important;
+ width: 6px !important;
+ height: 6px !important;
+ border: 5px solid rgba(0, 0, 0, 1) !important;
+}
+
+
+ @media only screen and (max-width: 767px) {
+ .tparrows.preview4 { width:20px; height:80px}
+ .tparrows.preview4:after { width:20px; height:80px; line-height:80px; font-size:14px}
+
+ .tparrows.preview1 .tp-arr-allwrapper,
+ .tparrows.preview2 .tp-arr-allwrapper,
+ .tparrows.preview3 .tp-arr-allwrapper,
+ .tparrows.preview4 .tp-arr-allwrapper { display: none !important}
+ }
+
+
+
+/******************************
+ - LOADER FORMS -
+********************************/
+
+.tp-loader {
+ top:50%; left:50%;
+ z-index:10000;
+ position:absolute;
+
+
+ }
+
+.tp-loader.spinner0 {
+ width: 40px;
+ height: 40px;
+ background:url(../assets/loader.gif) no-repeat center center;
+ background-color: #fff;
+ box-shadow: 0px 0px 20px 0px rgba(0,0,0,0.15);
+ -webkit-box-shadow: 0px 0px 20px 0px rgba(0,0,0,0.15);
+ margin-top:-20px;
+ margin-left:-20px;
+ -webkit-animation: tp-rotateplane 1.2s infinite ease-in-out;
+ animation: tp-rotateplane 1.2s infinite ease-in-out;
+ border-radius: 3px;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+}
+
+
+.tp-loader.spinner1 {
+ width: 40px;
+ height: 40px;
+ background-color: #fff;
+ box-shadow: 0px 0px 20px 0px rgba(0,0,0,0.15);
+ -webkit-box-shadow: 0px 0px 20px 0px rgba(0,0,0,0.15);
+ margin-top:-20px;
+ margin-left:-20px;
+ -webkit-animation: tp-rotateplane 1.2s infinite ease-in-out;
+ animation: tp-rotateplane 1.2s infinite ease-in-out;
+ border-radius: 3px;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+}
+
+
+
+.tp-loader.spinner5 { background:url(../assets/loader.gif) no-repeat 10px 10px;
+ background-color:#fff;
+ margin:-22px -22px;
+ width:44px;height:44px;
+ border-radius: 3px;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ }
+
+
+@-webkit-keyframes tp-rotateplane {
+ 0% { -webkit-transform: perspective(120px) }
+ 50% { -webkit-transform: perspective(120px) rotateY(180deg) }
+ 100% { -webkit-transform: perspective(120px) rotateY(180deg) rotateX(180deg) }
+}
+
+@keyframes tp-rotateplane {
+ 0% {
+ transform: perspective(120px) rotateX(0deg) rotateY(0deg);
+ -webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg)
+ } 50% {
+ transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
+ -webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg)
+ } 100% {
+ transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
+ -webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
+ }
+}
+
+
+.tp-loader.spinner2 {
+ width: 40px;
+ height: 40px;
+ margin-top:-20px;margin-left:-20px;
+ background-color: #ff0000;
+ box-shadow: 0px 0px 20px 0px rgba(0,0,0,0.15);
+ -webkit-box-shadow: 0px 0px 20px 0px rgba(0,0,0,0.15);
+ border-radius: 100%;
+ -webkit-animation: tp-scaleout 1.0s infinite ease-in-out;
+ animation: tp-scaleout 1.0s infinite ease-in-out;
+}
+
+@-webkit-keyframes tp-scaleout {
+ 0% { -webkit-transform: scale(0.0) }
+ 100% {
+ -webkit-transform: scale(1.0);
+ opacity: 0;
+ }
+}
+
+@keyframes tp-scaleout {
+ 0% {
+ transform: scale(0.0);
+ -webkit-transform: scale(0.0);
+ } 100% {
+ transform: scale(1.0);
+ -webkit-transform: scale(1.0);
+ opacity: 0;
+ }
+}
+
+
+
+
+.tp-loader.spinner3 {
+ margin: -9px 0px 0px -35px;
+ width: 70px;
+ text-align: center;
+
+}
+
+.tp-loader.spinner3 .bounce1,
+.tp-loader.spinner3 .bounce2,
+.tp-loader.spinner3 .bounce3 {
+ width: 18px;
+ height: 18px;
+ background-color: #fff;
+ box-shadow: 0px 0px 20px 0px rgba(0,0,0,0.15);
+ -webkit-box-shadow: 0px 0px 20px 0px rgba(0,0,0,0.15);
+ border-radius: 100%;
+ display: inline-block;
+ -webkit-animation: tp-bouncedelay 1.4s infinite ease-in-out;
+ animation: tp-bouncedelay 1.4s infinite ease-in-out;
+ /* Prevent first frame from flickering when animation starts */
+ -webkit-animation-fill-mode: both;
+ animation-fill-mode: both;
+}
+
+.tp-loader.spinner3 .bounce1 {
+ -webkit-animation-delay: -0.32s;
+ animation-delay: -0.32s;
+}
+
+.tp-loader.spinner3 .bounce2 {
+ -webkit-animation-delay: -0.16s;
+ animation-delay: -0.16s;
+}
+
+@-webkit-keyframes tp-bouncedelay {
+ 0%, 80%, 100% { -webkit-transform: scale(0.0) }
+ 40% { -webkit-transform: scale(1.0) }
+}
+
+@keyframes tp-bouncedelay {
+ 0%, 80%, 100% {
+ transform: scale(0.0);
+ -webkit-transform: scale(0.0);
+ } 40% {
+ transform: scale(1.0);
+ -webkit-transform: scale(1.0);
+ }
+}
+
+
+
+
+.tp-loader.spinner4 {
+ margin: -20px 0px 0px -20px;
+ width: 40px;
+ height: 40px;
+ text-align: center;
+ -webkit-animation: tp-rotate 2.0s infinite linear;
+ animation: tp-rotate 2.0s infinite linear;
+}
+
+.tp-loader.spinner4 .dot1,
+.tp-loader.spinner4 .dot2 {
+ width: 60%;
+ height: 60%;
+ display: inline-block;
+ position: absolute;
+ top: 0;
+ background-color: #fff;
+ border-radius: 100%;
+ -webkit-animation: tp-bounce 2.0s infinite ease-in-out;
+ animation: tp-bounce 2.0s infinite ease-in-out;
+ box-shadow: 0px 0px 20px 0px rgba(0,0,0,0.15);
+ -webkit-box-shadow: 0px 0px 20px 0px rgba(0,0,0,0.15);
+}
+
+.tp-loader.spinner4 .dot2 {
+ top: auto;
+ bottom: 0px;
+ -webkit-animation-delay: -1.0s;
+ animation-delay: -1.0s;
+}
+
+@-webkit-keyframes tp-rotate { 100% { -webkit-transform: rotate(360deg) }}
+@keyframes tp-rotate { 100% { transform: rotate(360deg); -webkit-transform: rotate(360deg) }}
+
+@-webkit-keyframes tp-bounce {
+ 0%, 100% { -webkit-transform: scale(0.0) }
+ 50% { -webkit-transform: scale(1.0) }
+}
+
+@keyframes tp-bounce {
+ 0%, 100% {
+ transform: scale(0.0);
+ -webkit-transform: scale(0.0);
+ } 50% {
+ transform: scale(1.0);
+ -webkit-transform: scale(1.0);
+ }
+}
+
+
+
+.tp-transparentimg { content:"url(../assets/transparent.png)"}
+.tp-3d { -webkit-transform-style: preserve-3d;
+ -webkit-transform-origin: 50% 50%;
+ }
+
+
+
+.tp-caption img {
+background: transparent;
+-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)";
+filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
+zoom: 1;
+}
+
+
+@font-face {
+ font-family: 'revicons';
+ src: url('../font/revicons.eot?5510888');
+ src: url('../font/revicons.eot?5510888#iefix') format('embedded-opentype'),
+ url('../font/revicons.woff?5510888') format('woff'),
+ url('../font/revicons.ttf?5510888') format('truetype'),
+ url('../font/revicons.svg?5510888#revicons') format('svg');
+ font-weight: normal;
+ font-style: normal;
+}
+/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
+/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
+/*
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+ @font-face {
+ font-family: 'revicons';
+ src: url('../font/revicons.svg?5510888#revicons') format('svg');
+ }
+}
+*/
+
+ [class^="revicon-"]:before, [class*=" revicon-"]:before {
+ font-family: "revicons";
+ font-style: normal;
+ font-weight: normal;
+ speak: none;
+
+ display: inline-block;
+ text-decoration: inherit;
+ width: 1em;
+ margin-right: .2em;
+ text-align: center;
+ /* opacity: .8; */
+
+ /* For safety - reset parent styles, that can break glyph codes*/
+ font-variant: normal;
+ text-transform: none;
+
+ /* fix buttons height, for twitter bootstrap */
+ line-height: 1em;
+
+ /* Animation center compensation - margins should be symmetric */
+ /* remove if not needed */
+ margin-left: .2em;
+
+ /* you can be more comfortable with increased icons size */
+ /* font-size: 120%; */
+
+ /* Uncomment for 3D effect */
+ /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
+}
+
+.revicon-search-1:before { content: '\e802'} /* '' */
+.revicon-pencil-1:before { content: '\e831'} /* '' */
+.revicon-picture-1:before { content: '\e803'} /* '' */
+.revicon-cancel:before { content: '\e80a'} /* '' */
+.revicon-info-circled:before { content: '\e80f'} /* '' */
+.revicon-trash:before { content: '\e801'} /* '' */
+.revicon-left-dir:before { content: '\e817'} /* '' */
+.revicon-right-dir:before { content: '\e818'} /* '' */
+.revicon-down-open:before { content: '\e83b'} /* '' */
+.revicon-left-open:before { content: '\e819'} /* '' */
+.revicon-right-open:before { content: '\e81a'} /* '' */
+.revicon-angle-left:before { content: '\e820'} /* '' */
+.revicon-angle-right:before { content: '\e81d'} /* '' */
+.revicon-left-big:before { content: '\e81f'} /* '' */
+.revicon-right-big:before { content: '\e81e'} /* '' */
+.revicon-magic:before { content: '\e807'} /* '' */
+.revicon-picture:before { content: '\e800'} /* '' */
+.revicon-export:before { content: '\e80b'} /* '' */
+.revicon-cog:before { content: '\e832'} /* '' */
+.revicon-login:before { content: '\e833'} /* '' */
+.revicon-logout:before { content: '\e834'} /* '' */
+.revicon-video:before { content: '\e805'} /* '' */
+.revicon-arrow-combo:before { content: '\e827'} /* '' */
+.revicon-left-open-1:before { content: '\e82a'} /* '' */
+.revicon-right-open-1:before { content: '\e82b'} /* '' */
+.revicon-left-open-mini:before { content: '\e822'} /* '' */
+.revicon-right-open-mini:before { content: '\e823'} /* '' */
+.revicon-left-open-big:before { content: '\e824'} /* '' */
+.revicon-right-open-big:before { content: '\e825'} /* '' */
+.revicon-left:before { content: '\e836'} /* '' */
+.revicon-right:before { content: '\e826'} /* '' */
+.revicon-ccw:before { content: '\e808'} /* '' */
+.revicon-arrows-ccw:before { content: '\e806'} /* '' */
+.revicon-palette:before { content: '\e829'} /* '' */
+.revicon-list-add:before { content: '\e80c'} /* '' */
+.revicon-doc:before { content: '\e809'} /* '' */
+.revicon-left-open-outline:before { content: '\e82e'} /* '' */
+.revicon-left-open-2:before { content: '\e82c'} /* '' */
+.revicon-right-open-outline:before { content: '\e82f'} /* '' */
+.revicon-right-open-2:before { content: '\e82d'} /* '' */
+.revicon-equalizer:before { content: '\e83a'} /* '' */
+.revicon-layers-alt:before { content: '\e804'} /* '' */
+.revicon-popup:before { content: '\e828'} /* '' */
\ No newline at end of file
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/font/revicons.eot b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/font/revicons.eot
new file mode 100644
index 00000000..955dc3f1
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/font/revicons.eot differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/font/revicons.svg b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/font/revicons.svg
new file mode 100644
index 00000000..2ec696b5
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/font/revicons.svg
@@ -0,0 +1,54 @@
+
+
+
+Copyright (C) 2013 by original authors @ fontello.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/font/revicons.ttf b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/font/revicons.ttf
new file mode 100644
index 00000000..4e8df989
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/font/revicons.ttf differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/font/revicons.woff b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/font/revicons.woff
new file mode 100644
index 00000000..6d3ea4d9
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/font/revicons.woff differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/images/decor_inside.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/images/decor_inside.png
new file mode 100644
index 00000000..02f3321e
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/images/decor_inside.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/images/decor_inside_white.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/images/decor_inside_white.png
new file mode 100644
index 00000000..a3679f14
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/images/decor_inside_white.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/images/decor_testimonial.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/images/decor_testimonial.png
new file mode 100644
index 00000000..949e5644
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/images/decor_testimonial.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/images/gradient/g30.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/images/gradient/g30.png
new file mode 100644
index 00000000..48595b75
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/images/gradient/g30.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/images/gradient/g40.png b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/images/gradient/g40.png
new file mode 100644
index 00000000..d82af00c
Binary files /dev/null and b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/images/gradient/g40.png differ
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/js/jquery.themepunch.enablelog.js b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/js/jquery.themepunch.enablelog.js
new file mode 100644
index 00000000..3b73f58b
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/js/jquery.themepunch.enablelog.js
@@ -0,0 +1 @@
+window.tplogs = true;
\ No newline at end of file
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/js/jquery.themepunch.revolution.js b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/js/jquery.themepunch.revolution.js
new file mode 100644
index 00000000..3090c064
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/js/jquery.themepunch.revolution.js
@@ -0,0 +1,6267 @@
+/**************************************************************************
+ * jquery.themepunch.revolution.js - jQuery Plugin for Revolution Slider
+ * @version: 4.6.4 (26.11.2014)
+ * @requires jQuery v1.7 or later (tested on 1.9)
+ * @author ThemePunch
+**************************************************************************/
+
+
+(function(jQuery,undefined){
+
+
+
+
+ ////////////////////////////////////////
+ // THE REVOLUTION PLUGIN STARTS HERE //
+ ///////////////////////////////////////
+
+ jQuery.fn.extend({
+
+ // OUR PLUGIN HERE :)
+ revolution: function(options) {
+
+
+
+ ////////////////////////////////
+ // SET DEFAULT VALUES OF ITEM //
+ ////////////////////////////////
+ var defaults = {
+ delay:9000,
+ startheight:500,
+ startwidth:960,
+ fullScreenAlignForce:"off",
+ autoHeight:"off",
+ hideTimerBar:"off",
+ hideThumbs:200,
+ hideNavDelayOnMobile:1500,
+
+ thumbWidth:100, // Thumb With and Height and Amount (only if navigation Tyope set to thumb !)
+ thumbHeight:50,
+ thumbAmount:3,
+
+ navigationType:"bullet", // bullet, thumb, none
+ navigationArrows:"solo", // nextto, solo, none
+ navigationInGrid:"off", // on/off
+
+ hideThumbsOnMobile:"off",
+ hideBulletsOnMobile:"off",
+ hideArrowsOnMobile:"off",
+ hideThumbsUnderResoluition:0,
+
+ navigationStyle:"round", // round,square,navbar,round-old,square-old,navbar-old, or any from the list in the docu (choose between 50+ different item),
+
+ navigationHAlign:"center", // Vertical Align top,center,bottom
+ navigationVAlign:"bottom", // Horizontal Align left,center,right
+ navigationHOffset:0,
+ navigationVOffset:20,
+
+ soloArrowLeftHalign:"left",
+ soloArrowLeftValign:"center",
+ soloArrowLeftHOffset:20,
+ soloArrowLeftVOffset:0,
+
+ soloArrowRightHalign:"right",
+ soloArrowRightValign:"center",
+ soloArrowRightHOffset:20,
+ soloArrowRightVOffset:0,
+
+ keyboardNavigation:"on",
+
+ touchenabled:"on", // Enable Swipe Function : on/off
+ onHoverStop:"on", // Stop Banner Timet at Hover on Slide on/off
+
+
+ stopAtSlide:-1, // Stop Timer if Slide "x" has been Reached. If stopAfterLoops set to 0, then it stops already in the first Loop at slide X which defined. -1 means do not stop at any slide. stopAfterLoops has no sinn in this case.
+ stopAfterLoops:-1, // Stop Timer if All slides has been played "x" times. IT will stop at THe slide which is defined via stopAtSlide:x, if set to -1 slide never stop automatic
+
+ hideCaptionAtLimit:0, // It Defines if a caption should be shown under a Screen Resolution ( Basod on The Width of Browser)
+ hideAllCaptionAtLimit:0, // Hide all The Captions if Width of Browser is less then this value
+ hideSliderAtLimit:0, // Hide the whole slider, and stop also functions if Width of Browser is less than this value
+
+ shadow:0, //0 = no Shadow, 1,2,3 = 3 Different Art of Shadows (No Shadow in Fullwidth Version !)
+ fullWidth:"off", // Turns On or Off the Fullwidth Image Centering in FullWidth Modus
+ fullScreen:"off",
+ minFullScreenHeight:0, // The Minimum FullScreen Height
+ fullScreenOffsetContainer:"", // Size for FullScreen Slider minimising Calculated on the Container sizes
+ fullScreenOffset:"0", // Size for FullScreen Slider minimising
+ dottedOverlay:"none", //twoxtwo, threexthree, twoxtwowhite, threexthreewhite
+
+ forceFullWidth:"off", // Force The FullWidth
+
+ spinner:"spinner0",
+
+ swipe_treshold : 75, // The number of pixels that the user must move their finger by before it is considered a swipe.
+ swipe_min_touches : 1, // Min Finger (touch) used for swipe
+ drag_block_vertical:false, // Prevent Vertical Scroll during Swipe
+ isJoomla:false,
+ parallax:"off",
+ parallaxLevels: [10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85],
+ parallaxBgFreeze: "off",
+ parallaxOpacity:"on",
+ parallaxDisableOnMobile:"off",
+ panZoomDisableOnMobile:"off",
+ simplifyAll:"on",
+ minHeight:0,
+ nextSlideOnWindowFocus:"off",
+
+ startDelay:0 // Delay before the first Animation starts.
+
+
+ };
+
+ options = jQuery.extend({}, defaults, options);
+
+ return this.each(function() {
+
+
+ // REPORT SOME IMPORTAN INFORMATION ABOUT THE SLIDER
+ if (window.tplogs==true)
+ try{
+ console.groupCollapsed("Slider Revolution 4.6.3 Initialisation on "+jQuery(this).attr('id'));
+ console.groupCollapsed("Used Options:");
+ console.info(options);
+ console.groupEnd();
+ console.groupCollapsed("Tween Engine:")
+ } catch(e) {}
+
+ // CHECK IF TweenLite IS LOADED AT ALL
+ if (punchgs.TweenLite==undefined) {
+ if (window.tplogs==true)
+ try{ console.error("GreenSock Engine Does not Exist!");
+ } catch(e) {}
+ return false;
+ }
+
+ punchgs.force3D = true;
+
+ if (window.tplogs==true)
+ try{ console.info("GreenSock Engine Version in Slider Revolution:"+punchgs.TweenLite.version);
+ } catch(e) {
+
+ }
+
+ if (options.simplifyAll=="on") {
+
+ } else {
+ punchgs.TweenLite.lagSmoothing(1000,16);
+ punchgs.force3D = "true";
+ }
+
+ if (window.tplogs==true)
+ try{
+ console.groupEnd();
+ console.groupEnd();
+ } catch(e) {}
+
+
+ initSlider(jQuery(this),options)
+
+
+ })
+ },
+
+
+ // METHODE PAUSE
+ revscroll: function(oy) {
+ return this.each(function() {
+ var container=jQuery(this);
+ if (container!=undefined && container.length>0 && jQuery('body').find('#'+container.attr('id')).length>0)
+ jQuery('body,html').animate({scrollTop:(container.offset().top+(container.find('>ul >li').height())-oy)+"px"},{duration:400});
+ })
+ },
+
+ // METHODE PAUSE
+ revredraw: function(oy) {
+ return this.each(function() {
+ var container=jQuery(this);
+ if (container!=undefined && container.length>0 && jQuery('body').find('#'+container.attr('id')).length>0) {
+ var bt = container.parent().find('.tp-bannertimer');
+ var opt = bt.data('opt');
+ containerResized(container,opt);
+ }
+ })
+ },
+ // METHODE PAUSE
+ revkill: function(oy) {
+
+ var self = this,
+ container=jQuery(this);
+
+ if (container!=undefined && container.length>0 && jQuery('body').find('#'+container.attr('id')).length>0) {
+
+ container.data('conthover',1);
+ container.data('conthover-changed',1);
+ container.trigger('revolution.slide.onpause');
+ var bt = container.parent().find('.tp-bannertimer');
+ var opt = bt.data('opt');
+ opt.bannertimeronpause = true;
+ container.trigger('stoptimer');
+
+ punchgs.TweenLite.killTweensOf(container.find('*'),false);
+ punchgs.TweenLite.killTweensOf(container,false);
+ container.unbind('hover, mouseover, mouseenter,mouseleave, resize');
+ var resizid = "resize.revslider-"+container.attr('id');
+ jQuery(window).off(resizid);
+ container.find('*').each(function() {
+ var el = jQuery(this);
+
+ el.unbind('on, hover, mouseenter,mouseleave,mouseover, resize,restarttimer, stoptimer');
+ el.off('on, hover, mouseenter,mouseleave,mouseover, resize');
+ el.data('mySplitText',null);
+ el.data('ctl',null);
+ if (el.data('tween')!=undefined)
+ el.data('tween').kill();
+ if (el.data('kenburn')!=undefined)
+ el.data('kenburn').kill();
+ el.remove();
+ el.empty();
+ el=null;
+ })
+
+
+ punchgs.TweenLite.killTweensOf(container.find('*'),false);
+ punchgs.TweenLite.killTweensOf(container,false);
+ bt.remove();
+ try{container.closest('.forcefullwidth_wrapper_tp_banner').remove();} catch(e) {}
+ try{container.closest('.rev_slider_wrapper').remove()} catch(e) {}
+ try{container.remove();} catch(e) {}
+ container.empty();
+ container.html();
+ container = null;
+
+ opt = null;
+ delete(self.container);
+ delete(self.opt);
+
+ return true;
+ } else {
+ return false;
+ }
+
+
+ },
+
+ // METHODE PAUSE
+ revpause: function(options) {
+
+ return this.each(function() {
+ var container=jQuery(this);
+ if (container!=undefined && container.length>0 && jQuery('body').find('#'+container.attr('id')).length>0) {
+ container.data('conthover',1);
+ container.data('conthover-changed',1);
+ container.trigger('revolution.slide.onpause');
+ var bt = container.parent().find('.tp-bannertimer');
+ var opt = bt.data('opt');
+ opt.bannertimeronpause = true;
+ container.trigger('stoptimer');
+ }
+ })
+
+
+ },
+
+ // METHODE RESUME
+ revresume: function(options) {
+ return this.each(function() {
+ var container=jQuery(this);
+ if (container!=undefined && container.length>0 && jQuery('body').find('#'+container.attr('id')).length>0) {
+ container.data('conthover',0);
+ container.data('conthover-changed',1);
+ container.trigger('revolution.slide.onresume');
+ var bt = container.parent().find('.tp-bannertimer');
+ var opt = bt.data('opt');
+ opt.bannertimeronpause = false;
+ container.trigger('starttimer');
+ }
+ })
+
+ },
+
+ // METHODE NEXT
+ revnext: function(options) {
+ return this.each(function() {
+
+ // CATCH THE CONTAINER
+ var container=jQuery(this);
+ if (container!=undefined && container.length>0 && jQuery('body').find('#'+container.attr('id')).length>0)
+ container.parent().find('.tp-rightarrow').click();
+
+
+ })
+
+ },
+
+ // METHODE RESUME
+ revprev: function(options) {
+ return this.each(function() {
+ // CATCH THE CONTAINER
+ var container=jQuery(this);
+ if (container!=undefined && container.length>0 && jQuery('body').find('#'+container.attr('id')).length>0)
+ container.parent().find('.tp-leftarrow').click();
+ })
+
+ },
+
+ // METHODE LENGTH
+ revmaxslide: function(options) {
+ // CATCH THE CONTAINER
+ return jQuery(this).find('>ul:first-child >li').length;
+ },
+
+
+ // METHODE CURRENT
+ revcurrentslide: function(options) {
+ // CATCH THE CONTAINER
+ var container=jQuery(this);
+ if (container!=undefined && container.length>0 && jQuery('body').find('#'+container.attr('id')).length>0) {
+ var bt = container.parent().find('.tp-bannertimer');
+ var opt = bt.data('opt');
+ return opt.act;
+ }
+ },
+
+ // METHODE CURRENT
+ revlastslide: function(options) {
+ // CATCH THE CONTAINER
+ var container=jQuery(this);
+ if (container!=undefined && container.length>0 && jQuery('body').find('#'+container.attr('id')).length>0) {
+ var bt = container.parent().find('.tp-bannertimer');
+ var opt = bt.data('opt');
+ return opt.lastslide;
+ }
+ },
+
+
+ // METHODE JUMP TO SLIDE
+ revshowslide: function(slide) {
+ return this.each(function() {
+ // CATCH THE CONTAINER
+ var container=jQuery(this);
+ if (container!=undefined && container.length>0 && jQuery('body').find('#'+container.attr('id')).length>0) {
+ container.data('showus',slide);
+ container.parent().find('.tp-rightarrow').click();
+ }
+ })
+
+ }
+
+
+})
+ /*******************************************
+ - IS IOS VERSION OLDER THAN 5 ?? -
+ *******************************************/
+
+ function iOSVersion() {
+ var oldios = false;
+ if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i))) {
+ if (navigator.userAgent.match(/OS 4_\d like Mac OS X/i)) {
+ oldios = true;
+ }
+ } else {
+ oldios = false;
+ }
+ return oldios;
+ }
+
+ function initSlider(container,opt) {
+ if (container==undefined) return false;
+
+ if (container.data('aimg')!=undefined) {
+ if ((container.data('aie8')=="enabled" && isIE(8)) || (container.data('amobile')=="enabled" && is_mobile()))
+ container.html(' ');
+ }
+ // PREPARE FALL BACK SETTINGS
+ if (opt.navigationStyle=="preview1" || opt.navigationStyle=="preview3" || opt.navigationStyle=="preview4") {
+ opt.soloArrowLeftHalign="left";
+ opt.soloArrowLeftValign="center";
+ opt.soloArrowLeftHOffset=0;
+ opt.soloArrowLeftVOffset=0;
+ opt.soloArrowRightHalign="right";
+ opt.soloArrowRightValign="center";
+ opt.soloArrowRightHOffset=0;
+ opt.soloArrowRightVOffset=0;
+ opt.navigationArrows="solo";
+ }
+
+
+ // SIMPLIFY ANIMATIONS ON OLD IOS AND IE8 IF NEEDED
+ if (opt.simplifyAll=="on" && (isIE(8) || iOSVersion())) {
+ container.find('.tp-caption').each(function() {
+ var tc = jQuery(this);
+ tc.removeClass("customin").removeClass("customout").addClass("fadein").addClass("fadeout");
+ tc.data('splitin',"");
+ tc.data('speed',400);
+ })
+ container.find('>ul>li').each(function() {
+ var li= jQuery(this);
+ li.data('transition',"fade");
+ li.data('masterspeed',500);
+ li.data('slotamount',1);
+ var img = li.find('>img').first();
+ img.data('kenburns',"off");
+ });
+ }
+
+
+
+
+
+ opt.desktop = !navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|BB10|mobi|tablet|opera mini|nexus 7)/i);
+
+ if (opt.fullWidth!="on" && opt.fullScreen!="on") opt.autoHeight = "off";
+ if (opt.fullScreen=="on") opt.autoHeight = "on";
+ if (opt.fullWidth!="on" && opt.fullScreen!="on") forceFulWidth="off";
+
+ if (opt.fullWidth=="on" && opt.autoHeight=="off")
+ container.css({maxHeight:opt.startheight+"px"});
+
+ if (is_mobile() && opt.hideThumbsOnMobile=="on" && opt.navigationType=="thumb")
+ opt.navigationType = "none"
+
+ if (is_mobile() && opt.hideBulletsOnMobile=="on" && opt.navigationType=="bullet")
+ opt.navigationType = "none"
+
+ if (is_mobile() && opt.hideBulletsOnMobile=="on" && opt.navigationType=="both")
+ opt.navigationType = "none"
+
+ if (is_mobile() && opt.hideArrowsOnMobile=="on")
+ opt.navigationArrows = "none"
+
+ if (opt.forceFullWidth=="on" && container.closest('.forcefullwidth_wrapper_tp_banner').length==0) {
+
+ var loff = container.parent().offset().left;
+ var mb = container.parent().css('marginBottom');
+ var mt = container.parent().css('marginTop');
+ if (mb==undefined) mb=0;
+ if (mt==undefined) mt=0;
+
+ container.parent().wrap('
');
+ container.closest('.forcefullwidth_wrapper_tp_banner').append('
');
+ container.css({'backgroundColor':container.parent().css('backgroundColor'),'backgroundImage':container.parent().css('backgroundImage')});
+ //container.parent().css({'position':'absolute','width':jQuery(window).width()});
+ container.parent().css({'left':(0-loff)+"px",position:'absolute','width':jQuery(window).width()});
+ opt.width=jQuery(window).width();
+ }
+
+ // HIDE THUMBS UNDER RESOLUTION
+ try{
+ if (opt.hideThumbsUnderResolution>jQuery(window).width() && opt.hideThumbsUnderResolution!=0) {
+ container.parent().find('.tp-bullets.tp-thumbs').css({display:"none"});
+ } else {
+ container.parent().find('.tp-bullets.tp-thumbs').css({display:"block"});
+ }
+ } catch(e) {}
+
+ if (!container.hasClass("revslider-initialised")) {
+
+ container.addClass("revslider-initialised");
+ if (container.attr('id')==undefined) container.attr('id',"revslider-"+Math.round(Math.random()*1000+5));
+
+ // CHECK IF FIREFOX 13 IS ON WAY.. IT HAS A STRANGE BUG, CSS ANIMATE SHOULD NOT BE USED
+
+
+
+ opt.firefox13 = false;
+ opt.ie = !jQuery.support.opacity;
+ opt.ie9 = (document.documentMode == 9);
+
+ opt.origcd=opt.delay;
+
+ // CHECK THE jQUERY VERSION
+ var version = jQuery.fn.jquery.split('.'),
+ versionTop = parseFloat(version[0]),
+ versionMinor = parseFloat(version[1]),
+ versionIncrement = parseFloat(version[2] || '0');
+
+ if (versionTop==1 && versionMinor < 7) {
+ container.html(' The Current Version of jQuery:'+version+' Please update your jQuery Version to min. 1.7 in Case you wish to use the Revolution Slider Plugin
');
+ }
+
+ if (versionTop>1) opt.ie=false;
+
+
+ // Delegate .transition() calls to .animate()
+ // if the browser can't do CSS transitions.
+ if (!jQuery.support.transition)
+ jQuery.fn.transition = jQuery.fn.animate;
+
+ // CATCH THE CONTAINER
+
+
+ // LOAD THE YOUTUBE API IF NECESSARY
+
+ container.find('.caption').each(function() { jQuery(this).addClass('tp-caption')});
+
+ if (is_mobile()) {
+ container.find('.tp-caption').each(function() {
+ var nextcaption = jQuery(this);
+ if (nextcaption.data('autoplayonlyfirsttime') == true || nextcaption.data('autoplayonlyfirsttime')=="true")
+ nextcaption.data('autoplayonlyfirsttime',"false");
+ if (nextcaption.data('autoplay')==true || nextcaption.data('autoplay')=="true")
+ nextcaption.data('autoplay',false);
+
+ })
+ }
+
+
+ var addedyt=0;
+ var addedvim=0;
+ var addedvid=0;
+ var httpprefix = "http";
+
+ if (location.protocol === 'https:') {
+ httpprefix = "https";
+ }
+ container.find('.tp-caption').each(function(i) {
+ // IF SRC EXIST, RESET SRC'S since WE DONT NEED THEM !!
+
+ try {
+
+ if ((jQuery(this).data('ytid')!=undefined || jQuery(this).find('iframe').attr('src').toLowerCase().indexOf('youtube')>0) && addedyt==0) {
+ addedyt=1;
+ var s = document.createElement("script");
+ var httpprefix2 = "https";
+ s.src = httpprefix2+"://www.youtube.com/iframe_api"; /* Load Player API*/
+
+ var before = document.getElementsByTagName("script")[0];
+ var loadit = true;
+ jQuery('head').find('*').each(function(){
+ if (jQuery(this).attr('src') == httpprefix2+"://www.youtube.com/iframe_api")
+ loadit = false;
+ });
+ if (loadit) {
+ before.parentNode.insertBefore(s, before);
+
+
+ }
+ }
+ } catch(e) {}
+
+ try{
+ if ((jQuery(this).data('vimeoid')!=undefined || jQuery(this).find('iframe').attr('src').toLowerCase().indexOf('vimeo')>0) && addedvim==0) {
+ addedvim=1;
+ var f = document.createElement("script");
+ f.src = httpprefix+"://a.vimeocdn.com/js/froogaloop2.min.js"; /* Load Player API*/
+ var before = document.getElementsByTagName("script")[0];
+
+ var loadit = true;
+ jQuery('head').find('*').each(function(){
+ if (jQuery(this).attr('src') == httpprefix+"://a.vimeocdn.com/js/froogaloop2.min.js")
+ loadit = false;
+ });
+ if (loadit)
+ before.parentNode.insertBefore(f, before);
+ }
+ } catch(e) {}
+
+ try{
+ if ((jQuery(this).data('videomp4')!=undefined || jQuery(this).data('videowebm')!=undefined)) {
+
+ }
+ } catch(e) {}
+ });
+
+
+
+
+ // REMOVE ANY VIDEO JS SETTINGS OF THE VIDEO IF NEEDED
+ container.find('.tp-caption video').each(function(i) {
+ jQuery(this).removeClass("video-js").removeClass("vjs-default-skin");
+ jQuery(this).attr("preload","");
+ jQuery(this).css({display:"none"});
+ });
+
+ container.find('>ul:first-child >li').each(function() {
+ var t = jQuery(this);
+ t.data('origindex',t.index());
+ })
+
+ // SHUFFLE MODE
+ if (opt.shuffle=="on") {
+ var fsa = new Object,
+ fli = container.find('>ul:first-child >li:first-child')
+
+ fsa.fstransition = fli.data('fstransition');
+ fsa.fsmasterspeed = fli.data('fsmasterspeed');
+ fsa.fsslotamount = fli.data('fsslotamount');
+
+
+
+ for (var u=0;uul:first-child >li').length;u++) {
+ var it = Math.round(Math.random()*container.find('>ul:first-child >li').length);
+ container.find('>ul:first-child >li:eq('+it+')').prependTo(container.find('>ul:first-child'));
+ }
+
+ var newfli = container.find('>ul:first-child >li:first-child');
+ newfli.data('fstransition',fsa.fstransition);
+ newfli.data('fsmasterspeed',fsa.fsmasterspeed);
+ newfli.data('fsslotamount',fsa.fsslotamount);
+ }
+
+
+ // CREATE SOME DEFAULT OPTIONS FOR LATER
+ opt.slots=4;
+ opt.act=-1;
+ opt.next=0;
+
+ // IF START SLIDE IS SET
+ if (opt.startWithSlide !=undefined) opt.next=opt.startWithSlide;
+
+ // IF DEEPLINK HAS BEEN SET
+ var deeplink = getUrlVars("#")[0];
+ if (deeplink.length<9) {
+ if (deeplink.split('slide').length>1) {
+ var dslide=parseInt(deeplink.split('slide')[1],0);
+ if (dslide<1) dslide=1;
+ if (dslide>container.find('>ul:first >li').length) dslide=container.find('>ul:first >li').length;
+ opt.next=dslide-1;
+ }
+ }
+
+
+ opt.firststart=1;
+
+ // BASIC OFFSET POSITIONS OF THE BULLETS
+ if (opt.navigationHOffset==undefined) opt.navOffsetHorizontal=0;
+ if (opt.navigationVOffset==undefined) opt.navOffsetVertical=0;
+
+
+
+ container.append(''+
+ '
'+
+ '
'+
+ '
'+
+ '
'+
+ '
'+
+ '
');
+
+ // RESET THE TIMER
+ if (container.find('.tp-bannertimer').length==0) container.append('
');
+ var bt=container.find('.tp-bannertimer');
+ if (bt.length>0) {
+ bt.css({'width':'0%'});
+ };
+
+
+ // WE NEED TO ADD A BASIC CLASS FOR SETTINGS.CSS
+ container.addClass("tp-simpleresponsive");
+ opt.container=container;
+
+ //if (container.height()==0) container.height(opt.startheight);
+
+ // AMOUNT OF THE SLIDES
+ opt.slideamount = container.find('>ul:first >li').length;
+
+
+ // A BASIC GRID MUST BE DEFINED. IF NO DEFAULT GRID EXIST THAN WE NEED A DEFAULT VALUE, ACTUAL SIZE OF CONAINER
+ if (container.height()==0) container.height(opt.startheight);
+ if (opt.startwidth==undefined || opt.startwidth==0) opt.startwidth=container.width();
+ if (opt.startheight==undefined || opt.startheight==0) opt.startheight=container.height();
+
+ // OPT WIDTH && HEIGHT SHOULD BE SET
+ opt.width=container.width();
+ opt.height=container.height();
+
+
+ // DEFAULT DEPENDECIES
+ opt.bw= opt.startwidth / container.width();
+ opt.bh = opt.startheight / container.height();
+
+ // IF THE ITEM ALREADY IN A RESIZED FORM
+ if (opt.width!=opt.startwidth) {
+
+ opt.height = Math.round(opt.startheight * (opt.width/opt.startwidth));
+
+ container.height(opt.height);
+
+ }
+
+ // LETS SEE IF THERE IS ANY SHADOW
+ if (opt.shadow!=0) {
+ container.parent().append('
');
+ var loff=0;
+ if (opt.forceFullWidth=="on")
+ loff = 0-opt.container.parent().offset().left;
+ container.parent().find('.tp-bannershadow').css({'width':opt.width,'left':loff});
+ }
+
+
+ container.find('ul').css({'display':'none'});
+
+ var fliparent = container;
+
+
+ // PREPARE THE SLIDES
+ container.find('ul').css({'display':'block'});
+ prepareSlides(container,opt);
+ if (opt.parallax!="off") checkForParallax(container,opt);
+
+ // CREATE BULLETS
+ if (opt.slideamount >1) createBullets(container,opt);
+
+ if (opt.slideamount >1 && opt.navigationType=="thumb") createThumbs(container,opt);
+ if (opt.slideamount >1) createArrows(container,opt);
+ if (opt.keyboardNavigation=="on") createKeyboard(container,opt);
+
+
+ swipeAction(container,opt);
+
+
+ if (opt.hideThumbs>0) hideThumbs(container,opt);
+ setTimeout(function() {
+ swapSlide(container,opt);
+ },opt.startDelay);
+ opt.startDelay=0;
+ // START COUNTDOWN
+ if (opt.slideamount >1) countDown(container,opt);
+ setTimeout(function() {
+ container.trigger('revolution.slide.onloaded');
+ },500);
+
+
+
+ /******************************
+ - FULLSCREEN CHANGE -
+ ********************************/
+ // FULLSCREEN MODE TESTING
+ jQuery("body").data('rs-fullScreenMode',false);
+ jQuery(window).on ('mozfullscreenchange webkitfullscreenchange fullscreenchange',function(){
+ jQuery("body").data('rs-fullScreenMode',!jQuery("body").data('rs-fullScreenMode'));
+ if (jQuery("body").data('rs-fullScreenMode')) {
+ setTimeout(function() {
+ jQuery(window).trigger("resize");
+
+ },200);
+ }
+ })
+
+
+ var resizid = "resize.revslider-"+container.attr('id');
+
+ // IF RESIZED, NEED TO STOP ACTUAL TRANSITION AND RESIZE ACTUAL IMAGES
+ jQuery(window).on(resizid,function() {
+ if (container==undefined) return false;
+ if (jQuery('body').find(container)!=0)
+ if (opt.forceFullWidth=="on" ) {
+
+ var loff = opt.container.closest('.forcefullwidth_wrapper_tp_banner').offset().left;
+ //opt.container.parent().css({'width':jQuery(window).width()});
+ opt.container.parent().css({'left':(0-loff)+"px",'width':jQuery(window).width()});
+ }
+
+ if (container.outerWidth(true)!=opt.width || container.is(":hidden")) {
+ containerResized(container,opt);
+ }
+
+
+
+
+ });
+
+ // HIDE THUMBS UNDER SIZE...
+ try{
+ if (opt.hideThumbsUnderResoluition!=0 && opt.navigationType=="thumb") {
+ if (opt.hideThumbsUnderResoluition>jQuery(window).width())
+ jQuery('.tp-bullets').css({display:"none"});
+ else
+ jQuery('.tp-bullets').css({display:"block"});
+ }
+ } catch(e) {}
+
+
+
+ // CHECK IF THE CAPTION IS A "SCROLL ME TO POSITION" CAPTION IS
+ //if (opt.fullScreen=="on") {
+ container.find('.tp-scrollbelowslider').on('click',function() {
+ var off=0;
+ try{
+ off = jQuery('body').find(opt.fullScreenOffsetContainer).height();
+ } catch(e) {}
+ try{
+ off = off - parseInt(jQuery(this).data('scrolloffset'),0);
+ } catch(e) {}
+
+
+ jQuery('body,html').animate(
+ {scrollTop:(container.offset().top+(container.find('>ul >li').height())-off)+"px"},{duration:400});
+ });
+ //}
+
+
+ // FIRST TIME STOP/START HIDE / SHOW SLIDER
+ //REMOVE AND SHOW SLIDER ON DEMAND
+ var contpar= container.parent();
+ if (jQuery(window).width()jQuery(window).width())
+ jQuery('.tp-bullets').css({display:"none"});
+ else
+ jQuery('.tp-bullets').css({display:"block"});
+ }
+ } catch(e) {}
+
+
+
+ container.find('.defaultimg').each(function(i) {
+ setSize(jQuery(this),opt);
+ });
+
+
+ //REMOVE AND SHOW SLIDER ON DEMAND
+ var contpar= container.parent();
+ if (jQuery(window).width()ul >li:eq('+opt.act+') .slotholder');
+ var nextsh = container.find('>ul >li:eq('+opt.next+') .slotholder');
+ removeSlots(container,opt,container);
+ punchgs.TweenLite.set(nextsh.find('.defaultimg'),{opacity:0});
+ actsh.find('.defaultimg').css({'opacity':1});
+
+ nextsh.find('.defaultimg').each(function() {
+ var dimg = jQuery(this);
+
+ if (opt.panZoomDisableOnMobile == "on") {
+ // NO KEN BURNS ON MOBILE DEVICES
+
+ } else {
+ if (dimg.data('kenburn')!=undefined) {
+ dimg.data('kenburn').restart();
+ startKenBurn(container,opt,true)
+ }
+ }
+ });
+
+ var nextli = container.find('>ul >li:eq('+opt.next+')');
+
+
+
+ var arr = container.parent().find('.tparrows');
+ if (arr.hasClass("preview2"))
+ arr.css({width:(parseInt(arr.css('minWidth'),0))});
+
+
+ animateTheCaptions(nextli, opt,true);
+ //restartBannerTimer(opt,container);
+ setBulPos(container,opt);
+
+ }
+
+
+
+
+ /*********************************
+ - CHECK IF BROWSER IS IE -
+ ********************************/
+ var isIE = function( version, comparison ){
+ var $div = jQuery('
').appendTo(jQuery('body'));
+ $div.html('');
+ var ieTest = $div.find('a').length;
+ $div.remove();
+ return ieTest;
+ }
+
+
+
+ var callingNewSlide = function(opt,container) {
+ // CHECK THE LOOPS !!
+ if (opt.next==container.find('>ul >li').length-1) {
+ opt.looptogo=opt.looptogo-1;
+ if (opt.looptogo<=0)
+ opt.stopLoop="on";
+ }
+ swapSlide(container,opt);
+
+ }
+
+
+
+
+
+
+ ////////////////////////////////
+ // - CREATE THE BULLETS - //
+ ////////////////////////////////
+ var createBullets = function(container,opt) {
+ var starthidebullets = "hidebullets";
+ if (opt.hideThumbs==0) starthidebullets = "";
+
+ if (opt.navigationType=="bullet" || opt.navigationType=="both") {
+ container.parent().append('
');
+ }
+
+ var bullets = container.parent().find('.tp-bullets');
+ container.find('>ul:first >li').each(function(i) {
+ var src=container.find(">ul:first >li:eq("+i+") img:first").attr('src');
+ bullets.append('
');
+ var bullet= bullets.find('.bullet:first');
+ });
+ // ADD THE BULLET CLICK FUNCTION HERE
+ bullets.find('.bullet').each(function(i) {
+ var bul = jQuery(this);
+ if (i==opt.slideamount-1) bul.addClass('last');
+ if (i==0) bul.addClass('first');
+
+ bul.click(function() {
+ var sameslide = false,
+ buli = bul.index();
+
+ if (opt.navigationArrows=="withbullet" || opt.navigationArrows=="nexttobullets")
+ buli = bul.index()-1;
+
+ if (buli == opt.act) sameslide=true;
+
+ if (opt.transition==0 && !sameslide) {
+ opt.next = buli;
+ callingNewSlide(opt,container);
+ }
+ });
+
+ });
+ bullets.append('
');
+ setBulPos(container,opt);
+ }
+
+ //////////////////////
+ // CREATE ARROWS //
+ /////////////////////
+ var createArrows = function(container,opt) {
+ var bullets = container.find('.tp-bullets'),
+ hidden="",
+ starthidearrows = "hidearrows",
+ arst= opt.navigationStyle;
+
+ if (opt.hideThumbs==0) starthidearrows = "";
+
+
+ if (opt.navigationArrows=="none") hidden="visibility:hidden;display:none";
+ opt.soloArrowStyle = "default"+" "+opt.navigationStyle;
+
+ if (opt.navigationArrows!="none" && opt.navigationArrows!="nexttobullets") arst = opt.soloArrowStyle;
+
+ function aArrow(dir) {
+ container.parent().append('');
+ }
+ aArrow("left");
+ aArrow("right");
+
+ // THE LEFT / RIGHT BUTTON CLICK ! //
+ container.parent().find('.tp-rightarrow').click(function() {
+ if (opt.transition==0) {
+ if (container.data('showus') !=undefined && container.data('showus') != -1)
+ opt.next = container.data('showus')-1;
+ else
+ opt.next = opt.next+1;
+ container.data('showus',-1);
+ if (opt.next >= opt.slideamount) opt.next=0;
+ if (opt.next<0) opt.next=0;
+
+ if (opt.act !=opt.next)
+ callingNewSlide(opt,container);
+ }
+ });
+
+ container.parent().find('.tp-leftarrow').click(function() {
+ if (opt.transition==0) {
+ opt.next = opt.next-1;
+ opt.leftarrowpressed=1;
+ if (opt.next < 0) opt.next=opt.slideamount-1;
+ callingNewSlide(opt,container);
+ }
+ });
+
+ setBulPos(container,opt);
+
+ }
+
+ //////////////////////////////////
+ // ENABLE KEYBOARD INTERACTION //
+ //////////////////////////////////
+ var createKeyboard = function(container,opt) {
+ // THE LEFT / RIGHT BUTTON CLICK ! //
+ jQuery(document).keydown(function(e){
+ if (opt.transition==0 && e.keyCode == 39) {
+ if (container.data('showus') !=undefined && container.data('showus') != -1)
+ opt.next = container.data('showus')-1;
+ else
+ opt.next = opt.next+1;
+ container.data('showus',-1);
+ if (opt.next >= opt.slideamount) opt.next=0;
+ if (opt.next<0) opt.next=0;
+ if (opt.act !=opt.next)
+ callingNewSlide(opt,container);
+ }
+
+ if (opt.transition==0 && e.keyCode == 37) {
+ opt.next = opt.next-1;
+ opt.leftarrowpressed=1;
+ if (opt.next < 0) opt.next=opt.slideamount-1;
+ callingNewSlide(opt,container);
+ }
+ });
+
+ setBulPos(container,opt);
+
+ }
+
+ ////////////////////////////
+ // SET THE SWIPE FUNCTION //
+ ////////////////////////////
+ var swipeAction = function(container,opt) {
+ // TOUCH ENABLED SCROLL
+ var aps = "vertical";
+
+ if (opt.touchenabled=="on") {
+ if (opt.drag_block_vertical == true)
+ aps = "none";
+
+ container.swipe({
+ allowPageScroll:aps,
+ fingers:opt.swipe_min_touches,
+ treshold:opt.swipe_treshold,
+ swipe:function(event,direction,distance,duration,fingerCount,fingerData) {
+ switch (direction) {
+ case "left":
+ if (opt.transition==0) {
+ opt.next = opt.next+1;
+ if (opt.next == opt.slideamount) opt.next=0;
+ callingNewSlide(opt,container);
+ }
+ break;
+ case "right":
+ if (opt.transition==0) {
+ opt.next = opt.next-1;
+ opt.leftarrowpressed=1;
+ if (opt.next < 0) opt.next=opt.slideamount-1;
+ callingNewSlide(opt,container);
+ }
+ break;
+ case "up":
+ if (aps=="none")
+ jQuery("html, body").animate({scrollTop:(container.offset().top + container.height())+"px"});
+ break;
+ case "down":
+ if (aps=="none")
+ jQuery("html, body").animate({scrollTop:(container.offset().top - jQuery(window).height())+"px"});
+ break;
+ }
+ }
+ })
+
+ }
+
+ }
+
+
+
+
+ ////////////////////////////////////////////////////////////////
+ // SHOW AND HIDE THE THUMBS IF MOUE GOES OUT OF THE BANNER ///
+ //////////////////////////////////////////////////////////////
+ var hideThumbs = function(container,opt) {
+
+ var bullets = container.parent().find('.tp-bullets'),
+ ca = container.parent().find('.tparrows');
+
+ if (bullets==null) {
+ container.append('
');
+ var bullets = container.parent().find('.tp-bullets');
+ }
+
+ if (ca==null) {
+ container.append('
');
+ var ca = container.parent().find('.tparrows');
+ }
+
+
+ //var bp = (thumbs.parent().outerHeight(true) - opt.height)/2;
+
+ // ADD THUMBNAIL IMAGES FOR THE BULLETS //
+ container.data('hideThumbs',opt.hideThumbs);
+
+ bullets.addClass("hidebullets");
+ ca.addClass("hidearrows");
+
+ if (is_mobile()) {
+ try{
+ container.hammer().on('touch', function() {
+ container.addClass("hovered");
+ if (opt.onHoverStop=="on")
+ container.trigger('stoptimer');
+ clearTimeout(container.data('hideThumbs'));
+ bullets.removeClass("hidebullets");
+ ca.removeClass("hidearrows");
+
+
+ });
+
+ container.hammer().on('release', function() {
+ container.removeClass("hovered");
+ container.trigger('starttimer');
+ if (!container.hasClass("hovered") && !bullets.hasClass("hovered"))
+ container.data('hideThumbs', setTimeout(function() {
+ bullets.addClass("hidebullets");
+ ca.addClass("hidearrows");
+ container.trigger('starttimer');
+ },opt.hideNavDelayOnMobile));
+ });
+ } catch(e) {}
+
+ } else {
+ bullets.hover(function() {
+ opt.overnav = true;
+ if (opt.onHoverStop=="on")
+ container.trigger('stoptimer');
+ bullets.addClass("hovered");
+ clearTimeout(container.data('hideThumbs'));
+ bullets.removeClass("hidebullets");
+ ca.removeClass("hidearrows");
+ },
+ function() {
+ opt.overnav = false;
+ container.trigger('starttimer');
+ bullets.removeClass("hovered");
+ if (!container.hasClass("hovered") && !bullets.hasClass("hovered"))
+ container.data('hideThumbs', setTimeout(function() {
+ bullets.addClass("hidebullets");
+ ca.addClass("hidearrows");
+ },opt.hideThumbs));
+ });
+
+
+ ca.hover(function() {
+ opt.overnav = true;
+ if (opt.onHoverStop=="on")
+ container.trigger('stoptimer');
+ bullets.addClass("hovered");
+ clearTimeout(container.data('hideThumbs'));
+ bullets.removeClass("hidebullets");
+ ca.removeClass("hidearrows");
+
+ },
+ function() {
+ opt.overnav = false;
+ container.trigger('starttimer');
+ bullets.removeClass("hovered");
+ });
+
+
+
+ container.on('mouseenter', function() {
+ container.addClass("hovered");
+ if (opt.onHoverStop=="on")
+ container.trigger('stoptimer');
+ clearTimeout(container.data('hideThumbs'));
+ bullets.removeClass("hidebullets");
+ ca.removeClass("hidearrows");
+
+
+ });
+
+ container.on('mouseleave', function() {
+ container.removeClass("hovered");
+ container.trigger('starttimer');
+ if (!container.hasClass("hovered") && !bullets.hasClass("hovered"))
+ container.data('hideThumbs', setTimeout(function() {
+ bullets.addClass("hidebullets");
+ ca.addClass("hidearrows");
+ },opt.hideThumbs));
+ });
+ }
+
+
+ }
+
+
+ //////////////////////////////
+ // SET POSITION OF BULLETS //
+ //////////////////////////////
+ var setBulPos = function(container,opt) {
+ var topcont=container.parent();
+ var bullets=topcont.find('.tp-bullets');
+
+ if (opt.navigationType=="thumb") {
+ bullets.find('.thumb').each(function(i) {
+ var thumb = jQuery(this);
+
+ thumb.css({'width':opt.thumbWidth * opt.bw+"px", 'height':opt.thumbHeight*opt.bh+"px"});
+
+ })
+ var bup = bullets.find('.tp-mask');
+
+ bup.width(opt.thumbWidth*opt.thumbAmount * opt.bw);
+ bup.height(opt.thumbHeight * opt.bh);
+ bup.parent().width(opt.thumbWidth*opt.thumbAmount * opt.bw);
+ bup.parent().height(opt.thumbHeight * opt.bh);
+ }
+
+
+ var tl = topcont.find('.tp-leftarrow');
+ var tr = topcont.find('.tp-rightarrow');
+
+ if (opt.navigationType=="thumb" && opt.navigationArrows=="nexttobullets") opt.navigationArrows="solo";
+ // IM CASE WE HAVE NAVIGATION BULLETS TOGETHER WITH ARROWS
+ if (opt.navigationArrows=="nexttobullets") {
+ tl.prependTo(bullets).css({'float':'left'});
+ tr.insertBefore(bullets.find('.tpclear')).css({'float':'left'});
+ }
+ var loff=0;
+ if (opt.forceFullWidth=="on")
+ loff = 0-opt.container.parent().offset().left;
+
+ var gridposX = 0,
+ gridposY = 0;
+
+ if (opt.navigationInGrid=="on") {
+ gridposX = container.width()>opt.startwidth ? (container.width() - opt.startwidth)/2 : 0,
+ gridposY = container.height()>opt.startheight ? (container.height() - opt.startheight)/2 : 0;
+ }
+
+
+
+ if (opt.navigationArrows!="none" && opt.navigationArrows!="nexttobullets") {
+ var lv = opt.soloArrowLeftValign,
+ lh = opt.soloArrowLeftHalign,
+ rv = opt.soloArrowRightValign,
+ rh = opt.soloArrowRightHalign,
+ lvo = opt.soloArrowLeftVOffset,
+ lho = opt.soloArrowLeftHOffset,
+ rvo = opt.soloArrowRightVOffset,
+ rho = opt.soloArrowRightHOffset;
+
+ tl.css({'position':'absolute'});
+ tr.css({'position':'absolute'});
+
+ if (lv=="center") tl.css({'top':'50%','marginTop':(lvo-Math.round(tl.innerHeight()/2))+"px"})
+ else
+ if (lv=="bottom") tl.css({'top':'auto','bottom':(0+lvo)+"px"})
+ else
+ if (lv=="top") tl.css({'bottom':'auto','top':(0+lvo)+"px"});
+
+ if (lh=="center") tl.css({'left':'50%','marginLeft':(loff+lho-Math.round(tl.innerWidth()/2))+"px"})
+ else
+ if (lh=="left") tl.css({'left':(gridposX+lho+loff)+"px"})
+ else
+ if (lh=="right") tl.css({'right':(gridposX+lho-loff)+"px"});
+
+ if (rv=="center") tr.css({'top':'50%','marginTop':(rvo-Math.round(tr.innerHeight()/2))+"px"})
+ else
+ if (rv=="bottom") tr.css({'top':'auto','bottom':(0+rvo)+"px"})
+ else
+ if (rv=="top") tr.css({'bottom':'auto','top':(0+rvo)+"px"})
+
+ if (rh=="center") tr.css({'left':'50%','marginLeft':(loff+rho-Math.round(tr.innerWidth()/2))+"px"})
+ else
+ if (rh=="left") tr.css({'left':(gridposX+rho+loff)+"px"})
+ else
+ if (rh=="right") tr.css({'right':(gridposX+rho-loff)+"px"})
+
+
+ if (tl.position()!=null)
+ tl.css({'top':Math.round(parseInt(tl.position().top,0))+"px"});
+
+ if (tr.position()!=null)
+ tr.css({'top':Math.round(parseInt(tr.position().top,0))+"px"});
+ }
+
+ if (opt.navigationArrows=="none") {
+ tl.css({'visibility':'hidden'});
+ tr.css({'visibility':'hidden'});
+ }
+
+ // SET THE POSITIONS OF THE BULLETS // THUMBNAILS
+ var nv = opt.navigationVAlign,
+ nh = opt.navigationHAlign,
+ nvo = opt.navigationVOffset * opt.bh,
+ nho = opt.navigationHOffset * opt.bw;
+
+ if (nv=="center") bullets.css({'top':'50%','marginTop':(nvo-Math.round(bullets.innerHeight()/2))+"px"});
+ if (nv=="bottom") bullets.css({'bottom':(0+nvo)+"px"});
+ if (nv=="top") bullets.css({'top':(0+nvo)+"px"});
+
+ if (nh=="center") bullets.css({'left':'50%','marginLeft':(loff+nho-Math.round(bullets.innerWidth()/2))+"px"});
+ if (nh=="left") bullets.css({'left':(0+nho+loff)+"px"});
+ if (nh=="right") bullets.css({'right':(0+nho-loff)+"px"});
+ }
+
+
+ /*******************************************************
+ - HANDLING OF PREVIEWS AND CUSTOM PREVIEWS -
+ *******************************************************/
+
+ var handleSpecialPreviews = function(opt) {
+
+ var container= opt.container;
+ // FILL WITH INFOS THE NAVIGATION ARROWS
+ opt.beforli = opt.next-1;
+ opt.comingli = opt.next+1;
+
+ if (opt.beforli<0) opt.beforli = opt.slideamount-1;
+ if (opt.comingli>=opt.slideamount) opt.comingli = 0;
+
+ var comingli = container.find('>ul:first-child >li:eq('+opt.comingli+')'),
+ beforli = container.find('>ul:first-child >li:eq('+opt.beforli+')'),
+ previmgsrc = beforli.find('.defaultimg').attr('src'),
+ nextimgsrc = comingli.find('.defaultimg').attr('src');
+
+ // SAVE REFERENCES
+ if (opt.arr == undefined) {
+ opt.arr = container.parent().find('.tparrows'),
+ opt.rar = container.parent().find('.tp-rightarrow'),
+ opt.lar = container.parent().find('.tp-leftarrow'),
+ opt.raimg = opt.rar.find('.tp-arr-imgholder'),
+ opt.laimg = opt.lar.find('.tp-arr-imgholder'),
+ opt.raimg_b = opt.rar.find('.tp-arr-imgholder2'),
+ opt.laimg_b = opt.lar.find('.tp-arr-imgholder2'),
+ opt.ratit = opt.rar.find('.tp-arr-titleholder'),
+ opt.latit = opt.lar.find('.tp-arr-titleholder');
+ }
+
+ // READ REFERENCES
+ var arr = opt.arr,
+ rar = opt.rar,
+ lar = opt.lar,
+ raimg = opt.raimg,
+ laimg = opt.laimg,
+ raimg_b = opt.raimg_b,
+ laimg_b = opt.laimg_b,
+ ratit = opt.ratit,
+ latit = opt.latit;
+
+
+ if (comingli.data('title') != undefined) ratit.html(comingli.data('title'));
+ if (beforli.data('title') != undefined) latit.html(beforli.data('title'));
+
+
+ if (rar.hasClass("itishovered")) {
+ rar.width(ratit.outerWidth(true)+parseInt(rar.css('minWidth'),0));
+ }
+
+ if (lar.hasClass("itishovered")) {
+ lar.width(latit.outerWidth(true)+parseInt(lar.css('minWidth'),0));
+ }
+
+ if (arr.hasClass("preview2") && !arr.hasClass("hashoveralready")) {
+
+ arr.addClass("hashoveralready");
+
+ if (!is_mobile())
+ arr.hover(function() {
+
+ var arr = jQuery(this),
+ th = arr.find('.tp-arr-titleholder');
+ if (jQuery(window).width()>767)
+ arr.width(th.outerWidth(true)+parseInt(arr.css('minWidth'),0));
+ arr.addClass("itishovered");
+ },function() {
+ var arr = jQuery(this),
+ th = arr.find('.tp-arr-titleholder');
+ arr.css({width:parseInt(arr.css('minWidth'),0)});
+ arr.removeClass("itishovered");
+ });
+ else {
+ var arr = jQuery(this),
+ th = arr.find('.tp-arr-titleholder');
+ th.addClass("alwayshidden");
+ punchgs.TweenLite.set(th,{autoAlpha:0});
+ }
+
+ }
+
+ if (beforli.data('thumb')!=undefined) previmgsrc = beforli.data('thumb');
+ if (comingli.data('thumb')!=undefined) nextimgsrc = comingli.data('thumb')
+
+
+ // CHANGE THE IMAGE SOURCE (AND ANIMATE IF PREVIEW4 MODE IS ON
+ if (!arr.hasClass("preview4")) {
+
+ punchgs.TweenLite.to(raimg,0.5,{autoAlpha:0,onComplete:function() {
+ raimg.css({'backgroundImage':'url('+nextimgsrc+')'});
+ laimg.css({'backgroundImage':'url('+previmgsrc+')'});
+ }});
+ punchgs.TweenLite.to(laimg,0.5,{autoAlpha:0,onComplete:function() {
+ punchgs.TweenLite.to(raimg,0.5,{autoAlpha:1,delay:0.2});
+ punchgs.TweenLite.to(laimg,0.5,{autoAlpha:1,delay:0.2});
+ }});
+ } else {
+
+ raimg_b.css({'backgroundImage':'url('+nextimgsrc+')'});
+ laimg_b.css({'backgroundImage':'url('+previmgsrc+')'});
+
+ punchgs.TweenLite.fromTo(raimg_b,0.8,{force3D:punchgs.force3d,x:0},{x:-raimg.width(),ease:punchgs.Power3.easeOut,delay:1,onComplete:function() {
+ raimg.css({'backgroundImage':'url('+nextimgsrc+')'});
+ punchgs.TweenLite.set(raimg_b,{x:0});
+ }});
+ punchgs.TweenLite.fromTo(laimg_b,0.8,{force3D:punchgs.force3d,x:0},{x:raimg.width(),ease:punchgs.Power3.easeOut,delay:1,onComplete:function() {
+ laimg.css({'backgroundImage':'url('+previmgsrc+')'});
+ punchgs.TweenLite.set(laimg_b,{x:0});
+ }});
+
+
+
+ punchgs.TweenLite.fromTo(raimg,0.8,{x:0},{force3D:punchgs.force3d,x:-raimg.width(),ease:punchgs.Power3.easeOut,delay:1,onComplete:function() {
+ punchgs.TweenLite.set(raimg,{x:0});
+ }});
+ punchgs.TweenLite.fromTo(laimg,0.8,{x:0},{force3D:punchgs.force3d,x:raimg.width(),ease:punchgs.Power3.easeOut,delay:1,onComplete:function() {
+ punchgs.TweenLite.set(laimg,{x:0});
+ }});
+ }
+
+ // HOVER EFFECTS ARE SPECIAL ON PREVIEW4
+ if (rar.hasClass("preview4") && !rar.hasClass("hashoveralready")) {
+
+ rar.addClass("hashoveralready");
+ rar.hover(function() {
+ var iw = jQuery(this).find('.tp-arr-iwrapper');
+ var all = jQuery(this).find('.tp-arr-allwrapper');
+ punchgs.TweenLite.fromTo(iw,0.4,{x:iw.width()},{x:0,delay:0.3,ease:punchgs.Power3.easeOut,overwrite:"all"});
+ punchgs.TweenLite.to(all,0.2,{autoAlpha:1,overwrite:"all"});
+
+ },function() {
+ var iw = jQuery(this).find('.tp-arr-iwrapper');
+ var all = jQuery(this).find('.tp-arr-allwrapper');
+ punchgs.TweenLite.to(iw,0.4,{x:iw.width(),ease:punchgs.Power3.easeOut,delay:0.2,overwrite:"all"});
+ punchgs.TweenLite.to(all,0.2,{delay:0.6,autoAlpha:0,overwrite:"all"});
+ });
+
+
+ lar.hover(function() {
+ var iw = jQuery(this).find('.tp-arr-iwrapper');
+ var all = jQuery(this).find('.tp-arr-allwrapper');
+ punchgs.TweenLite.fromTo(iw,0.4,{x:(0-iw.width())},{x:0,delay:0.3,ease:punchgs.Power3.easeOut,overwrite:"all"});
+ punchgs.TweenLite.to(all,0.2,{autoAlpha:1,overwrite:"all"});
+
+ },function() {
+ var iw = jQuery(this).find('.tp-arr-iwrapper');
+ var all = jQuery(this).find('.tp-arr-allwrapper');
+ punchgs.TweenLite.to(iw,0.4,{x:(0-iw.width()),ease:punchgs.Power3.easeOut,delay:0.2,overwrite:"all"});
+ punchgs.TweenLite.to(all,0.2,{delay:0.6,autoAlpha:0,overwrite:"all"});
+ });
+
+ }
+ // END OF NAVIGATION ARROW CONTENT FILLING
+
+ }
+ //////////////////////////////////////////////////////////
+ // - SET THE IMAGE SIZE TO FIT INTO THE CONTIANER - //
+ ////////////////////////////////////////////////////////
+ var setSize = function(img,opt) {
+
+
+ opt.container.closest('.forcefullwidth_wrapper_tp_banner').find('.tp-fullwidth-forcer').css({'height':opt.container.height()});
+ opt.container.closest('.rev_slider_wrapper').css({'height':opt.container.height()});
+
+
+ opt.width=parseInt(opt.container.width(),0);
+ opt.height=parseInt(opt.container.height(),0);
+
+
+
+ opt.bw= (opt.width / opt.startwidth);
+ opt.bh = (opt.height / opt.startheight);
+
+ if (opt.bh>opt.bw) opt.bh=opt.bw;
+ if (opt.bh1) { opt.bw=1; opt.bh=1; }
+ if (opt.bw>1) {opt.bw=1; opt.bh=1; }
+
+
+ //opt.height= opt.startheight * opt.bh;
+ opt.height = Math.round(opt.startheight * (opt.width/opt.startwidth));
+
+
+ if (opt.height>opt.startheight && opt.autoHeight!="on") opt.height=opt.startheight;
+
+
+ if (opt.fullScreen=="on") {
+ opt.height = opt.bw * opt.startheight;
+ var cow = opt.container.parent().width();
+ var coh = jQuery(window).height();
+
+ if (opt.fullScreenOffsetContainer!=undefined) {
+ try{
+ var offcontainers = opt.fullScreenOffsetContainer.split(",");
+ jQuery.each(offcontainers,function(index,searchedcont) {
+ coh = coh - jQuery(searchedcont).outerHeight(true);
+ if (coh1 && opt.fullScreenOffset!=undefined && opt.fullScreenOffset.length>0) {
+
+ coh = coh - (jQuery(window).height()* parseInt(opt.fullScreenOffset,0)/100);
+ } else {
+ if (opt.fullScreenOffset!=undefined && opt.fullScreenOffset.length>0)
+ coh = coh - parseInt(opt.fullScreenOffset,0);
+ }
+
+
+ if (cohul:first').css({overflow:'hidden',width:'100%',height:'100%',maxHeight:container.parent().css('maxHeight')}).addClass("tp-revslider-mainul");
+ if (opt.autoHeight=="on") {
+ container.find('>ul:first').css({overflow:'hidden',width:'100%',height:'100%',maxHeight:"none"});
+ container.css({'maxHeight':'none'});
+ container.parent().css({'maxHeight':'none'});
+ }
+
+ container.find('>ul:first >li').each(function(j) {
+ var li=jQuery(this);
+ li.addClass("tp-revslider-slidesli");
+
+ // MAKE LI OVERFLOW HIDDEN FOR FURTHER ISSUES
+ li.css({'width':'100%','height':'100%','overflow':'hidden'});
+
+ // IF LINK ON SLIDE EXISTS, NEED TO CREATE A PROPER LAYER FOR IT.
+ if (li.data('link')!=undefined) {
+ var link = li.data('link');
+ var target="_self";
+ var zindex=60;
+ if (li.data('slideindex')=="back") zindex=0;
+ var linktoslide=checksl = li.data('linktoslide');
+ if (linktoslide != undefined) {
+ if (linktoslide!="next" && linktoslide!="prev")
+ container.find('>ul:first-child >li').each(function() {
+ var t = jQuery(this);
+ if (t.data('origindex')+1==checksl) linktoslide = t.index()+1;
+ });
+ }
+ if (li.data('target')!=undefined) target=li.data('target');
+ if (link!="slide") linktoslide="no";
+ var apptxt = '';
+
+ li.append(apptxt);
+ }
+ });
+
+ // RESOLVE OVERFLOW HIDDEN OF MAIN CONTAINER
+ container.parent().css({'overflow':'visible'});
+
+
+ container.find('>ul:first >li >img').each(function(j) {
+
+ var img=jQuery(this);
+
+ img.addClass('defaultimg');
+ if (img.data('lazyload')!=undefined && img.data('lazydone') != 1) {
+
+ } else {
+ setSize(img,opt);
+ }
+
+ if (isIE(8)) {
+ img.data('kenburns',"off");
+ }
+
+ // TURN OF KEN BURNS IF WE ARE ON MOBILE AND IT IS WISHED SO
+ if (opt.panZoomDisableOnMobile == "on" && is_mobile()) {
+ img.data('kenburns',"off");
+ img.data('bgfit',"cover");
+ }
+
+ img.wrap('
');
+
+ if (opt.dottedOverlay!="none" && opt.dottedOverlay!=undefined)
+ img.closest('.slotholder').append('
');
+
+ var src=img.attr('src'),
+ ll = img.data('lazyload'),
+ bgfit = img.data('bgfit'),
+ bgrepeat = img.data('bgrepeat'),
+ bgposition = img.data('bgposition');
+
+
+ if (bgfit==undefined) bgfit="cover";
+ if (bgrepeat==undefined) bgrepeat="no-repeat";
+ if (bgposition==undefined) bgposition="center center"
+
+
+ var pari = img.closest('.slotholder');
+ img.replaceWith('
');
+
+ if (isIE(8)) {
+ pari.find('.tp-bgimg').css({backgroundImage:"none",'background-image':'none'});
+ pari.find('.tp-bgimg').append(' ');
+ }
+
+ img.css({'opacity':0});
+ img.data('li-id',j);
+
+ });
+ }
+
+
+ ///////////////////////
+ // PREPARE THE SLIDE //
+ //////////////////////
+ var prepareOneSlide = function(slotholder,opt,visible,vorh) {
+
+ var sh=slotholder,
+ img = sh.find('.defaultimg'),
+ scalestart = sh.data('zoomstart'),
+ rotatestart = sh.data('rotationstart');
+
+ if (img.data('currotate')!=undefined)
+ rotatestart = img.data('currotate');
+ if (img.data('curscale')!=undefined && vorh=="box")
+ scalestart = img.data('curscale')*100;
+ else
+ if (img.data('curscale')!=undefined)
+ scalestart = img.data('curscale');
+
+ setSize(img,opt)
+
+ var src = img.data('src'),
+ bgcolor=img.css('backgroundColor'),
+ w = opt.width,
+ h = opt.height,
+ fulloff = img.data("fxof"),
+ fullyoff=0;
+
+ if (opt.autoHeight=="on") h = opt.container.height();
+ if (fulloff==undefined) fulloff=0;
+
+
+
+ var off=0,
+ bgfit = img.data('bgfit'),
+ bgrepeat = img.data('bgrepeat'),
+ bgposition = img.data('bgposition');
+
+ if (bgfit==undefined) bgfit="cover";
+ if (bgrepeat==undefined) bgrepeat="no-repeat";
+ if (bgposition==undefined) bgposition="center center";
+
+ if (isIE(8)) {
+ sh.data('kenburns',"off");
+ var imgsrc=src;
+ src="";
+ }
+
+ switch (vorh) {
+ // BOX ANIMATION PREPARING
+ case "box":
+ // SET THE MINIMAL SIZE OF A BOX
+ var basicsize = 0,
+ x = 0,
+ y = 0;
+
+ if (opt.sloth>opt.slotw)
+ basicsize=opt.sloth
+ else
+ basicsize=opt.slotw;
+
+ if (!visible) {
+ var off=0-basicsize;
+ }
+
+ opt.slotw = basicsize;
+ opt.sloth = basicsize;
+ var x=0;
+ var y=0;
+
+ if (sh.data('kenburns')=="on") {
+ bgfit=scalestart;
+ if (bgfit.toString().length<4)
+ bgfit = calculateKenBurnScales(bgfit,sh,opt);
+ }
+
+ for (var j=0;j'+
+
+ ' ');
+ y=y+basicsize;
+
+ if (isIE(8)) {
+
+ sh.find('.slot ').last().find('.slotslide').append(' ');
+ ieimgposition(sh,opt);
+ }
+
+ if (scalestart!=undefined && rotatestart!=undefined)
+ punchgs.TweenLite.set(sh.find('.slot').last(),{rotationZ:rotatestart});
+ }
+ x=x+basicsize;
+ }
+ break;
+
+ // SLOT ANIMATION PREPARING
+ case "vertical":
+ case "horizontal":
+ if (sh.data('kenburns')=="on") {
+ bgfit=scalestart;
+ if (bgfit.toString().length<4)
+ bgfit = calculateKenBurnScales(bgfit,sh,opt);
+ }
+ if (vorh == "horizontal") {
+ if (!visible) var off=0-opt.slotw;
+ for (var i=0;i'+
+ ' ');
+ if (scalestart!=undefined && rotatestart!=undefined)
+ punchgs.TweenLite.set(sh.find('.slot').last(),{rotationZ:rotatestart});
+ if (isIE(8)) {
+ sh.find('.slot ').last().find('.slotslide').append('
');
+ ieimgposition(sh,opt);
+ }
+ }
+ } else {
+ if (!visible) var off=0-opt.sloth;
+ for (var i=0;i
'+
+
+ ' ');
+ if (scalestart!=undefined && rotatestart!=undefined)
+ punchgs.TweenLite.set(sh.find('.slot').last(),{rotationZ:rotatestart});
+ if (isIE(8)) {
+ sh.find('.slot ').last().find('.slotslide').append(' ');
+ ieimgposition(sh,opt);
+ }
+ }
+ }
+ break;
+ }
+ }
+
+ /***********************************************
+ - MOVE IE8 IMAGE IN RIGHT POSITION -
+ ***********************************************/
+
+ var ieimgposition = function(nextsh,opt) {
+
+ if (isIE(8)) {
+
+ var ie8img = nextsh.find('.ieeightfallbackimage');
+
+ var ie8w = ie8img.width(),
+ ie8h = ie8img.height();
+
+
+
+ if (opt.startwidth/opt.startheight 0)
+ loadAllPrepared(element,found);
+ else {
+ clearInterval(inter);
+ if (call!=undefined)
+ call();
+ }
+
+ },100)
+ }
+
+
+ //////////////////////////////
+ // - SWAP THE SLIDES - //
+ ////////////////////////////
+ var swapSlide = function(container,opt) {
+
+ try{
+ var actli =container.find('>ul:first-child >li:eq('+opt.act+')');
+ } catch(e) {
+ var actli=container.find('>ul:first-child >li:eq(1)');
+ }
+ opt.lastslide=opt.act;
+ var nextli = container.find('>ul:first-child >li:eq('+opt.next+')');
+
+ var defimg= nextli.find('.defaultimg');
+
+
+ opt.bannertimeronpause = true;
+ container.trigger('stoptimer');
+ opt.cd=0;
+
+ if (defimg.data('lazyload') !=undefined && defimg.data('lazyload') !="undefined" && defimg.data('lazydone') !=1 ) {
+
+ if (!isIE(8))
+ defimg.css({backgroundImage:'url("'+nextli.find('.defaultimg').data('lazyload')+'")'});
+ else {
+ defimg.attr('src',nextli.find('.defaultimg').data('lazyload'));
+ }
+
+ defimg.data('src',nextli.find('.defaultimg').data('lazyload'));
+ defimg.data('lazydone',1);
+ defimg.data('orgw',0);
+ nextli.data('loadeddone',1);
+
+ container.find('.tp-loader').css({display:"block"});
+ waitForLoads(container.find('.tp-static-layers'),function() {
+ waitForLoads(nextli,function() {
+ var nextsh = nextli.find('.slotholder');
+ if (nextsh.data('kenburns')=="on") {
+ var waitfordimension = setInterval(function() {
+ var ow = nextsh.data('owidth');
+ if (ow>=0) {
+ clearInterval(waitfordimension);
+ swapSlideCall(opt,defimg,container)
+ }
+ },10)
+ } else
+ swapSlideCall(opt,defimg,container)
+ },opt);
+ },opt);
+
+ } else {
+
+ if (nextli.data('loadeddone')===undefined) {
+ nextli.data('loadeddone',1);
+ waitForLoads(nextli,function() {
+ swapSlideCall(opt,defimg,container)
+ },opt);
+ } else
+
+ swapSlideCall(opt,defimg,container)
+ }
+
+ }
+
+ var swapSlideCall = function(opt,defimg,container) {
+ opt.bannertimeronpause = false;
+ opt.cd=0;
+ container.trigger('nulltimer');
+ container.find('.tp-loader').css({display:"none"});
+ setSize(defimg,opt);
+ setBulPos(container,opt);
+ setSize(defimg,opt);
+ swapSlideProgress(container,opt);
+
+ }
+
+ /******************************
+ - SWAP SLIDE PROGRESS -
+ ********************************/
+ /*!SWAP SLIDE*/
+ var swapSlideProgress = function(container,opt) {
+
+
+ container.trigger('revolution.slide.onbeforeswap');
+
+ opt.transition = 1;
+ opt.videoplaying = false;
+ //konsole.log("VideoPlay set to False due swapSlideProgress");
+
+ try{
+ var actli = container.find('>ul:first-child >li:eq('+opt.act+')');
+ } catch(e) {
+ var actli=container.find('>ul:first-child >li:eq(1)');
+ }
+
+ opt.lastslide=opt.act;
+
+ var nextli = container.find('>ul:first-child >li:eq('+opt.next+')');
+
+ setTimeout(function() {
+ handleSpecialPreviews(opt);
+ },200);
+
+ var actsh = actli.find('.slotholder'),
+ nextsh = nextli.find('.slotholder');
+
+ if (nextsh.data('kenburns')=="on" || actsh.data('kenburns')=="on") {
+ stopKenBurn(container,opt);
+ container.find('.kenburnimg').remove();
+ }
+
+
+ // IF DELAY HAS BEEN SET VIA THE SLIDE, WE TAKE THE NEW VALUE, OTHER WAY THE OLD ONE...
+ if (nextli.data('delay')!=undefined) {
+ opt.cd=0;
+ opt.delay=nextli.data('delay');
+ } else {
+ opt.delay=opt.origcd;
+ }
+
+
+ if (opt.firststart==1)
+ punchgs.TweenLite.set(actli,{autoAlpha:0});
+
+ punchgs.TweenLite.set(actli,{zIndex:18});
+ punchgs.TweenLite.set(nextli,{autoAlpha:0,zIndex:20});
+
+ ///////////////////////////
+ // REMOVE THE CAPTIONS //
+ ///////////////////////////
+ var removetime = 0;
+ if (actli.index() != nextli.index() && opt.firststart!=1) {
+ removetime = removeTheCaptions(actli,opt);
+
+ }
+
+ if (actli.data('saveperformance')!="on") removetime = 0;
+
+ setTimeout(function() {
+ //opt.cd=0;
+ //container.trigger('nulltimer');
+ container.trigger('restarttimer');
+ slideAnimation(container,opt,nextli,actli,actsh,nextsh);
+ },removetime)
+
+ }
+
+
+ /******************************************
+ - START THE LAYER ANIMATION -
+ *******************************************/
+
+ var slideAnimation = function(container,opt,nextli,actli,actsh,nextsh) {
+
+ // IF THERE IS AN OTHER FIRST SLIDE START HAS BEED SELECTED
+ if (nextli.data('differentissplayed') =='prepared') {
+ nextli.data('differentissplayed','done');
+ nextli.data('transition',nextli.data('savedtransition'));
+ nextli.data('slotamount',nextli.data('savedslotamount'));
+ nextli.data('masterspeed',nextli.data('savedmasterspeed'));
+ }
+
+
+ if (nextli.data('fstransition') != undefined && nextli.data('differentissplayed') !="done") {
+ nextli.data('savedtransition',nextli.data('transition'));
+ nextli.data('savedslotamount',nextli.data('slotamount'));
+ nextli.data('savedmasterspeed',nextli.data('masterspeed'));
+
+ nextli.data('transition',nextli.data('fstransition'));
+ nextli.data('slotamount',nextli.data('fsslotamount'));
+ nextli.data('masterspeed',nextli.data('fsmasterspeed'));
+
+ nextli.data('differentissplayed','prepared');
+ }
+
+ container.find('.active-revslide').removeClass('.active-revslide');
+ nextli.addClass("active-revslide");
+
+ ///////////////////////////////////////
+ // TRANSITION CHOOSE - RANDOM EFFECTS//
+ ///////////////////////////////////////
+
+
+ if (nextli.data('transition')==undefined) nextli.data('transition',"random");
+
+ var nexttrans = 0,
+ transtext = nextli.data('transition').split(","),
+ curtransid = nextli.data('nexttransid') == undefined ? -1 : nextli.data('nexttransid');
+
+ if (nextli.data('randomtransition')=="on")
+ curtransid = Math.round(Math.random()*transtext.length);
+ else
+ curtransid=curtransid+1;
+
+ if (curtransid==transtext.length) curtransid=0;
+ nextli.data('nexttransid',curtransid);
+
+
+
+ var comingtransition = transtext[curtransid];
+
+ if (opt.ie) {
+ if (comingtransition=="boxfade") comingtransition = "boxslide";
+ if (comingtransition=="slotfade-vertical") comingtransition = "slotzoom-vertical";
+ if (comingtransition=="slotfade-horizontal") comingtransition = "slotzoom-horizontal";
+ }
+
+ if (isIE(8)) {
+ comingtransition = 11;
+ }
+
+
+ var specials = 0;
+
+ if (opt.parallax=="scroll" && opt.parallaxFirstGo==undefined) {
+ opt.parallaxFirstGo = true;
+ scrollParallax(container,opt);
+ setTimeout(function() {
+ scrollParallax(container,opt);
+ },210);
+ setTimeout(function() {
+ scrollParallax(container,opt);
+ },420);
+
+ }
+
+
+
+
+ /* if (opt.ffnn == undefined) opt.ffnn=0;
+ comingtransition=opt.ffnn;
+
+ if ( direction==1)
+ opt.ffnn=opt.ffnn-1;
+ else
+ opt.ffnn=opt.ffnn+1;
+
+ if (opt.ffnn>46) opt.ffnn=0;
+ if (opt.ffnn<0) opt.ffnn = 46;
+
+ jQuery('.logo').html('Next Anim:'+comingtransition);
+
+
+ if (comingtransition=="boxslide" || comingtransition == "boxfade" || comingtransition == "papercut" ||
+ comingtransition==0 || comingtransition == 1 || comingtransition == 16)
+ comingtransition = 9;*/
+
+
+ /* Transition Name ,
+ Transition Code,
+ Transition Sub Code,
+ Max Slots,
+ MasterSpeed Delays,
+ Preparing Slots (box,slideh, slidev),
+ Call on nextsh (null = no, true/false for visibility first preparing),
+ Call on actsh (null = no, true/false for visibility first preparing),
+ */
+
+
+
+ if (comingtransition=="slidehorizontal") {
+ comingtransition = "slideleft"
+ if (opt.leftarrowpressed==1)
+ comingtransition = "slideright"
+ }
+
+ if (comingtransition=="slidevertical") {
+ comingtransition = "slideup"
+ if (opt.leftarrowpressed==1)
+ comingtransition = "slidedown"
+ }
+
+ if (comingtransition=="parallaxhorizontal") {
+ comingtransition = "parallaxtoleft"
+ if (opt.leftarrowpressed==1)
+ comingtransition = "parallaxtoright"
+ }
+
+
+ if (comingtransition=="parallaxvertical") {
+ comingtransition = "parallaxtotop"
+ if (opt.leftarrowpressed==1)
+ comingtransition = "parallaxtobottom"
+ }
+
+
+
+
+ var transitionsArray = [ ['boxslide' , 0, 1, 10, 0,'box',false,null,0],
+ ['boxfade', 1, 0, 10, 0,'box',false,null,1],
+ ['slotslide-horizontal', 2, 0, 0, 200,'horizontal',true,false,2],
+ ['slotslide-vertical', 3, 0,0,200,'vertical',true,false,3],
+ ['curtain-1', 4, 3,0,0,'horizontal',true,true,4],
+ ['curtain-2', 5, 3,0,0,'horizontal',true,true,5],
+ ['curtain-3', 6, 3,25,0,'horizontal',true,true,6],
+ ['slotzoom-horizontal', 7, 0,0,400,'horizontal',true,true,7],
+ ['slotzoom-vertical', 8, 0,0,0,'vertical',true,true,8],
+ ['slotfade-horizontal', 9, 0,0,500,'horizontal',true,null,9],
+ ['slotfade-vertical', 10, 0,0 ,500,'vertical',true,null,10],
+ ['fade', 11, 0, 1 ,300,'horizontal',true,null,11],
+ ['slideleft', 12, 0,1,0,'horizontal',true,true,12],
+ ['slideup', 13, 0,1,0,'horizontal',true,true,13],
+ ['slidedown', 14, 0,1,0,'horizontal',true,true,14],
+ ['slideright', 15, 0,1,0,'horizontal',true,true,15],
+ ['papercut', 16, 0,0,600,'',null,null,16],
+ ['3dcurtain-horizontal', 17, 0,20,100,'vertical',false,true,17],
+ ['3dcurtain-vertical', 18, 0,10,100,'horizontal',false,true,18],
+ ['cubic', 19, 0,20,600,'horizontal',false,true,19],
+ ['cube',19,0,20,600,'horizontal',false,true,20],
+ ['flyin', 20, 0,4,600,'vertical',false,true,21],
+ ['turnoff', 21, 0,1,1600,'horizontal',false,true,22],
+ ['incube', 22, 0,20,200,'horizontal',false,true,23],
+ ['cubic-horizontal', 23, 0,20,500,'vertical',false,true,24],
+ ['cube-horizontal', 23, 0,20,500,'vertical',false,true,25],
+ ['incube-horizontal', 24, 0,20,500,'vertical',false,true,26],
+ ['turnoff-vertical', 25, 0,1,200,'horizontal',false,true,27],
+ ['fadefromright', 12, 1,1,0,'horizontal',true,true,28],
+ ['fadefromleft', 15, 1,1,0,'horizontal',true,true,29],
+ ['fadefromtop', 14, 1,1,0,'horizontal',true,true,30],
+ ['fadefrombottom', 13, 1,1,0,'horizontal',true,true,31],
+ ['fadetoleftfadefromright', 12, 2,1,0,'horizontal',true,true,32],
+ ['fadetorightfadetoleft', 15, 2,1,0,'horizontal',true,true,33],
+ ['fadetobottomfadefromtop', 14, 2,1,0,'horizontal',true,true,34],
+ ['fadetotopfadefrombottom', 13, 2,1,0,'horizontal',true,true,35],
+ ['parallaxtoright', 12, 3,1,0,'horizontal',true,true,36],
+ ['parallaxtoleft', 15, 3,1,0,'horizontal',true,true,37],
+ ['parallaxtotop', 14, 3,1,0,'horizontal',true,true,38],
+ ['parallaxtobottom', 13, 3,1,0,'horizontal',true,true,39],
+ ['scaledownfromright', 12, 4,1,0,'horizontal',true,true,40],
+ ['scaledownfromleft', 15, 4,1,0,'horizontal',true,true,41],
+ ['scaledownfromtop', 14, 4,1,0,'horizontal',true,true,42],
+ ['scaledownfrombottom', 13, 4,1,0,'horizontal',true,true,43],
+ ['zoomout', 13, 5,1,0,'horizontal',true,true,44],
+ ['zoomin', 13, 6,1,0,'horizontal',true,true,45],
+ ['notransition',26,0,1,0,'horizontal',true,null,46]
+ ];
+
+
+ var flatTransitions = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45];
+ var premiumTransitions = [16,17,18,19,20,21,22,23,24,25,26,27]
+
+ var nexttrans =0;
+ var specials = 1;
+ var STAindex = 0;
+ var indexcounter =0;
+ var STA = new Array;
+
+ //START THE KEN BURN PAN ZOOM ANIMATION
+ if (nextsh.data('kenburns')=="on") {
+ if (comingtransition == "boxslide" || comingtransition==0 ||
+ comingtransition == "boxfade" || comingtransition==1 ||
+ comingtransition == "papercut" || comingtransition==16
+ )
+ comingtransition = 11;
+
+ startKenBurn(container,opt,true,true);
+ }
+
+
+
+ // RANDOM TRANSITIONS
+ if (comingtransition == "random") {
+ comingtransition = Math.round(Math.random()*transitionsArray.length-1);
+ if (comingtransition>transitionsArray.length-1) comingtransition=transitionsArray.length-1;
+ }
+
+ // RANDOM FLAT TRANSITIONS
+ if (comingtransition == "random-static") {
+ comingtransition = Math.round(Math.random()*flatTransitions.length-1);
+ if (comingtransition>flatTransitions.length-1) comingtransition=flatTransitions.length-1;
+ comingtransition = flatTransitions[comingtransition];
+ }
+
+ // RANDOM PREMIUM TRANSITIONS
+ if (comingtransition == "random-premium") {
+ comingtransition = Math.round(Math.random()*premiumTransitions.length-1);
+ if (comingtransition>premiumTransitions.length-1) comingtransition=premiumTransitions.length-1;
+ comingtransition = premiumTransitions[comingtransition];
+ }
+
+ //joomla only change: avoid problematic transitions that don't compatible with mootools
+ var problematicTransitions = [12,13,14,15,16,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45];
+ if(opt.isJoomla == true && window.MooTools != undefined && problematicTransitions.indexOf(comingtransition) != -1){
+
+ var newTransIndex = Math.round(Math.random() * (premiumTransitions.length-2) ) + 1;
+
+ //some limits fix
+ if (newTransIndex > premiumTransitions.length-1)
+ newTransIndex = premiumTransitions.length-1;
+
+ if(newTransIndex == 0)
+ newTransIndex = 1;
+
+ comingtransition = premiumTransitions[newTransIndex];
+ }
+
+
+
+ function findTransition() {
+ // FIND THE RIGHT TRANSITION PARAMETERS HERE
+ jQuery.each(transitionsArray,function(inde,trans) {
+ if (trans[0] == comingtransition || trans[8] == comingtransition) {
+ nexttrans = trans[1];
+ specials = trans[2];
+ STAindex = indexcounter;
+ }
+ indexcounter = indexcounter+1;
+ })
+ }
+
+ findTransition();
+
+ // CHECK IF WE HAVE IE8 AND THAN FALL BACK ON FLAT TRANSITIONS
+ if (isIE(8) && nexttrans>15 && nexttrans<28) {
+ comingtransition = Math.round(Math.random()*flatTransitions.length-1);
+ if (comingtransition>flatTransitions.length-1) comingtransition=flatTransitions.length-1;
+ comingtransition = flatTransitions[comingtransition];
+ indexcounter =0;
+ findTransition();
+ }
+
+
+
+
+ // WHICH DIRECTION DID WE HAD ?
+ var direction=-1;
+ if (opt.leftarrowpressed==1 || opt.act>opt.next) direction=1;
+
+
+
+ opt.leftarrowpressed=0;
+
+ if (nexttrans>26) nexttrans = 26;
+ if (nexttrans<0) nexttrans = 0;
+
+
+ // DEFINE THE MASTERSPEED FOR THE SLIDE //
+ var masterspeed=300;
+ if (nextli.data('masterspeed')!=undefined && nextli.data('masterspeed')>99 && nextli.data('masterspeed')opt.delay)
+ masterspeed = opt.delay;
+
+ // PREPARED DEFAULT SETTINGS PER TRANSITION
+ STA = transitionsArray[STAindex];
+
+ /////////////////////////////////////////////
+ // SET THE BULLETS SELECTED OR UNSELECTED //
+ /////////////////////////////////////////////
+ container.parent().find(".bullet").each(function() {
+ var bul = jQuery(this),
+ buli = bul.index();
+ bul.removeClass("selected");
+
+ if (opt.navigationArrows=="withbullet" || opt.navigationArrows=="nexttobullets")
+ buli = bul.index()-1;
+
+ if (buli == opt.next) bul.addClass('selected');
+
+ });
+
+ ///////////////////////////////
+ // MAIN TIMELINE DEFINITION //
+ ///////////////////////////////
+
+ var mtl = new punchgs.TimelineLite({onComplete:function() {
+ letItFree(container,opt,nextsh,actsh,nextli,actli,mtl);
+ }});
+ //SET DEFAULT IMG UNVISIBLE AT START
+ mtl.add(punchgs.TweenLite.set(nextsh.find('.defaultimg'),{opacity:0}));
+ mtl.pause();
+
+
+
+
+ /////////////////////////////////////////////
+ // SET THE ACTUAL AMOUNT OF SLIDES !! //
+ // SET A RANDOM AMOUNT OF SLOTS //
+ ///////////////////////////////////////////
+ if (nextli.data('slotamount')==undefined || nextli.data('slotamount')<1) {
+ opt.slots=Math.round(Math.random()*12+4);
+ if (comingtransition=="boxslide")
+ opt.slots=Math.round(Math.random()*6+3);
+ else
+ if (comingtransition=="flyin")
+ opt.slots=Math.round(Math.random()*4+1);
+ } else {
+ opt.slots=nextli.data('slotamount');
+
+ }
+
+ /////////////////////////////////////////////
+ // SET THE ACTUAL AMOUNT OF SLIDES !! //
+ // SET A RANDOM AMOUNT OF SLOTS //
+ ///////////////////////////////////////////
+ if (nextli.data('rotate')==undefined)
+ opt.rotate = 0
+ else
+ if (nextli.data('rotate')==999)
+ opt.rotate=Math.round(Math.random()*360);
+ else
+ opt.rotate=nextli.data('rotate');
+ if (!jQuery.support.transition || opt.ie || opt.ie9) opt.rotate=0;
+
+
+
+
+ //////////////////////////////
+ // FIRST START //
+ //////////////////////////////
+ if (opt.firststart==1) opt.firststart=0;
+
+
+ // ADJUST MASTERSPEED
+ masterspeed = masterspeed + STA[4];
+
+ if ((nexttrans==4 || nexttrans==5 || nexttrans==6) && opt.slots<3 ) opt.slots=3;
+
+ // ADJUST SLOTS
+ if (STA[3] != 0) opt.slots = Math.min(opt.slots,STA[3]);
+ if (nexttrans==9) opt.slots = opt.width/20;
+ if (nexttrans==10) opt.slots = opt.height/20;
+
+ // prepareOneSlide
+
+ if (STA[7] !=null) prepareOneSlide(actsh,opt,STA[7],STA[5]);
+ if (STA[6] !=null) prepareOneSlide(nextsh,opt,STA[6],STA[5]);
+
+
+ /////////////////////////////////////
+ // THE SLOTSLIDE - TRANSITION I. //
+ ////////////////////////////////////
+ if (nexttrans==0) { // BOXSLIDE
+
+
+ // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT
+ var maxz = Math.ceil(opt.height/opt.sloth);
+ var curz = 0;
+ nextsh.find('.slotslide').each(function(j) {
+ var ss=jQuery(this);
+ curz=curz+1;
+ if (curz==maxz) curz=0;
+
+ mtl.add(punchgs.TweenLite.from(ss,(masterspeed)/600,
+ {opacity:0,top:(0-opt.sloth),left:(0-opt.slotw),rotation:opt.rotate,force3D:"auto",ease:punchgs.Power2.easeOut}),((j*15) + ((curz)*30))/1500);
+ });
+ }
+ /////////////////////////////////////
+ // THE SLOTSLIDE - TRANSITION I. //
+ ////////////////////////////////////
+ if (nexttrans==1) {
+
+ // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT
+ var maxtime,
+ maxj = 0;
+
+ nextsh.find('.slotslide').each(function(j) {
+ var ss=jQuery(this),
+ rand=Math.random()*masterspeed+300,
+ rand2=Math.random()*500+200;
+ if (rand+rand2>maxtime) {
+ maxtime = rand2+rand2;
+ maxj = j;
+ }
+ mtl.add(punchgs.TweenLite.from(ss,rand/1000,
+ {autoAlpha:0, force3D:"auto",rotation:opt.rotate,ease:punchgs.Power2.easeInOut}),rand2/1000);
+ });
+ }
+
+
+ /////////////////////////////////////
+ // THE SLOTSLIDE - TRANSITION I. //
+ ////////////////////////////////////
+ if (nexttrans==2) {
+
+ var subtl = new punchgs.TimelineLite();
+ // ALL OLD SLOTS SHOULD BE SLIDED TO THE RIGHT
+ actsh.find('.slotslide').each(function() {
+ var ss=jQuery(this);
+ subtl.add(punchgs.TweenLite.to(ss,masterspeed/1000,{left:opt.slotw, force3D:"auto",rotation:(0-opt.rotate)}),0);
+ mtl.add(subtl,0);
+ });
+
+ // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT
+ nextsh.find('.slotslide').each(function() {
+ var ss=jQuery(this);
+ subtl.add(punchgs.TweenLite.from(ss,masterspeed/1000,{left:0-opt.slotw, force3D:"auto",rotation:opt.rotate}),0);
+ mtl.add(subtl,0);
+ });
+ }
+
+
+
+ /////////////////////////////////////
+ // THE SLOTSLIDE - TRANSITION I. //
+ ////////////////////////////////////
+ if (nexttrans==3) {
+ var subtl = new punchgs.TimelineLite();
+
+ // ALL OLD SLOTS SHOULD BE SLIDED TO THE RIGHT
+ actsh.find('.slotslide').each(function() {
+ var ss=jQuery(this);
+ subtl.add(punchgs.TweenLite.to(ss,masterspeed/1000,{top:opt.sloth,rotation:opt.rotate,force3D:"auto",transformPerspective:600}),0);
+ mtl.add(subtl,0);
+
+ });
+
+ // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT
+ nextsh.find('.slotslide').each(function() {
+ var ss=jQuery(this);
+ subtl.add(punchgs.TweenLite.from(ss,masterspeed/1000,{top:0-opt.sloth,rotation:opt.rotate,ease:punchgs.Power2.easeOut,force3D:"auto",transformPerspective:600}),0);
+ mtl.add(subtl,0);
+ });
+ }
+
+
+
+ /////////////////////////////////////
+ // THE SLOTSLIDE - TRANSITION I. //
+ ////////////////////////////////////
+ if (nexttrans==4 || nexttrans==5) {
+
+ setTimeout(function() {
+ actsh.find('.defaultimg').css({opacity:0});
+ },100);
+
+
+ // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT
+ var cspeed = (masterspeed)/1000,
+ ticker = cspeed,
+ subtl = new punchgs.TimelineLite();
+
+ actsh.find('.slotslide').each(function(i) {
+ var ss=jQuery(this);
+ var del = (i*cspeed)/opt.slots;
+ if (nexttrans==5) del = ((opt.slots-i-1)*cspeed)/(opt.slots)/1.5;
+ subtl.add(punchgs.TweenLite.to(ss,cspeed*3,{transformPerspective:600,force3D:"auto",top:0+opt.height,opacity:0.5,rotation:opt.rotate,ease:punchgs.Power2.easeInOut,delay:del}),0);
+ mtl.add(subtl,0);
+ });
+
+ // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT
+ nextsh.find('.slotslide').each(function(i) {
+ var ss=jQuery(this);
+ var del = (i*cspeed)/opt.slots;
+ if (nexttrans==5) del = ((opt.slots-i-1)*cspeed)/(opt.slots)/1.5;
+ subtl.add(punchgs.TweenLite.from(ss,cspeed*3,
+ {top:(0-opt.height),opacity:0.5,rotation:opt.rotate,force3D:"auto",ease:punchgs.Power2.easeInOut,delay:del}),0);
+ mtl.add(subtl,0);
+
+ });
+
+
+ }
+
+ /////////////////////////////////////
+ // THE SLOTSLIDE - TRANSITION I. //
+ ////////////////////////////////////
+ if (nexttrans==6) {
+
+
+ if (opt.slots<2) opt.slots=2;
+ if (opt.slots % 2) opt.slots = opt.slots+1;
+
+ var subtl = new punchgs.TimelineLite();
+
+ //SET DEFAULT IMG UNVISIBLE
+ setTimeout(function() {
+ actsh.find('.defaultimg').css({opacity:0});
+ },100);
+
+ actsh.find('.slotslide').each(function(i) {
+ var ss=jQuery(this);
+ if (i+1opt.delay) masterspeed=opt.delay;
+ var subtl = new punchgs.TimelineLite();
+
+ //SET DEFAULT IMG UNVISIBLE
+ setTimeout(function() {
+ actsh.find('.defaultimg').css({opacity:0});
+ },100);
+
+ // ALL OLD SLOTS SHOULD BE SLIDED TO THE RIGHT
+ actsh.find('.slotslide').each(function() {
+ var ss=jQuery(this).find('div');
+ subtl.add(punchgs.TweenLite.to(ss,masterspeed/1000,{
+ left:(0-opt.slotw/2)+'px',
+ top:(0-opt.height/2)+'px',
+ width:(opt.slotw*2)+"px",
+ height:(opt.height*2)+"px",
+ opacity:0,
+ rotation:opt.rotate,
+ force3D:"auto",
+ ease:punchgs.Power2.easeOut}),0);
+ mtl.add(subtl,0);
+
+ });
+
+ //////////////////////////////////////////////////////////////
+ // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT //
+ ///////////////////////////////////////////////////////////////
+ nextsh.find('.slotslide').each(function(i) {
+ var ss=jQuery(this).find('div');
+
+ subtl.add(punchgs.TweenLite.fromTo(ss,masterspeed/1000,
+ {left:0,top:0,opacity:0,transformPerspective:600},
+ {left:(0-i*opt.slotw)+'px',
+ ease:punchgs.Power2.easeOut,
+ force3D:"auto",
+ top:(0)+'px',
+ width:opt.width,
+ height:opt.height,
+ opacity:1,rotation:0,
+ delay:0.1}),0);
+ mtl.add(subtl,0);
+ });
+ }
+
+
+
+
+ ////////////////////////////////////
+ // THE SLOTSZOOM - TRANSITION II. //
+ ////////////////////////////////////
+ if (nexttrans==8) {
+
+ masterspeed = masterspeed * 3;
+ if (masterspeed>opt.delay) masterspeed=opt.delay;
+ var subtl = new punchgs.TimelineLite();
+
+
+
+ // ALL OLD SLOTS SHOULD BE SLIDED TO THE RIGHT
+ actsh.find('.slotslide').each(function() {
+ var ss=jQuery(this).find('div');
+ subtl.add(punchgs.TweenLite.to(ss,masterspeed/1000,
+ {left:(0-opt.width/2)+'px',
+ top:(0-opt.sloth/2)+'px',
+ width:(opt.width*2)+"px",
+ height:(opt.sloth*2)+"px",
+ force3D:"auto",
+ opacity:0,rotation:opt.rotate}),0);
+ mtl.add(subtl,0);
+
+ });
+
+
+ // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT //
+ ///////////////////////////////////////////////////////////////
+ nextsh.find('.slotslide').each(function(i) {
+ var ss=jQuery(this).find('div');
+
+ subtl.add(punchgs.TweenLite.fromTo(ss,masterspeed/1000,
+ {left:0, top:0,opacity:0,force3D:"auto"},
+ {'left':(0)+'px',
+ 'top':(0-i*opt.sloth)+'px',
+ 'width':(nextsh.find('.defaultimg').data('neww'))+"px",
+ 'height':(nextsh.find('.defaultimg').data('newh'))+"px",
+ opacity:1,rotation:0,
+ }),0);
+ mtl.add(subtl,0);
+ });
+ }
+
+
+ ////////////////////////////////////////
+ // THE SLOTSFADE - TRANSITION III. //
+ //////////////////////////////////////
+ if (nexttrans==9 || nexttrans==10) {
+ var ssamount=0;
+ // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT
+ nextsh.find('.slotslide').each(function(i) {
+ var ss=jQuery(this);
+ ssamount++;
+ mtl.add(punchgs.TweenLite.fromTo(ss,masterspeed/1000,{autoAlpha:0,force3D:"auto",transformPerspective:600},
+ {autoAlpha:1,ease:punchgs.Power2.easeInOut,delay:(i*5)/1000}),0);
+
+ });
+ }
+
+ ///////////////////////////
+ // SIMPLE FADE ANIMATION //
+ ///////////////////////////
+ if (nexttrans==11 || nexttrans==26) {
+
+
+ var ssamount=0;
+ if (nexttrans==26) masterspeed=0;
+
+ // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT
+ nextsh.find('.slotslide').each(function(i) {
+ var ss=jQuery(this);
+ mtl.add(punchgs.TweenLite.from(ss,masterspeed/1000,{autoAlpha:0,force3D:"auto",ease:punchgs.Power2.easeInOut}),0);
+ });
+ }
+
+ if (nexttrans==12 || nexttrans==13 || nexttrans==14 || nexttrans==15) {
+ masterspeed = masterspeed;
+ if (masterspeed>opt.delay) masterspeed=opt.delay;
+ //masterspeed = 1000;
+
+ setTimeout(function() {
+ punchgs.TweenLite.set(actsh.find('.defaultimg'),{autoAlpha:0});
+
+ },100);
+
+ var oow = opt.width,
+ ooh = opt.height,
+ ssn=nextsh.find('.slotslide'),
+ twx = 0,
+ twy = 0,
+ op = 1,
+ scal = 1,
+ fromscale = 1,
+ easeitout = punchgs.Power2.easeInOut,
+ easeitin = punchgs.Power2.easeInOut,
+ speedy = masterspeed/1000,
+ speedy2 = speedy;
+
+
+ if (opt.fullWidth=="on" || opt.fullScreen=="on") {
+ oow=ssn.width();
+ ooh=ssn.height();
+ }
+
+ if (nexttrans==12)
+ twx = oow;
+ else
+ if (nexttrans==15)
+ twx = 0-oow;
+ else
+ if (nexttrans==13)
+ twy = ooh;
+ else
+ if (nexttrans==14)
+ twy = 0-ooh;
+
+
+ // DEPENDING ON EXTENDED SPECIALS, DIFFERENT SCALE AND OPACITY FUNCTIONS NEED TO BE ADDED
+ if (specials == 1) op = 0;
+ if (specials == 2) op = 0;
+ if (specials == 3) {
+ easeitout = punchgs.Power2.easeInOut;
+ easeitin = punchgs.Power1.easeInOut;
+ speedy = masterspeed / 1200;
+ }
+
+ if (specials==4 || specials==5)
+ scal=0.6;
+ if (specials==6 )
+ scal=1.4;
+
+
+ if (specials==5 || specials==6) {
+ fromscale=1.4;
+ op=0;
+ oow=0;
+ ooh=0;twx=0;twy=0;
+ }
+ if (specials==6) fromscale=0.6;
+ var dd = 0;
+
+ mtl.add(punchgs.TweenLite.from(ssn,speedy,
+ {left:twx, top:twy, scale:fromscale, opacity:op,rotation:opt.rotate,ease:easeitin,force3D:"auto"}),0);
+
+ var ssa=actsh.find('.slotslide');
+
+ if (specials==4 || specials==5) {
+ oow = 0; ooh=0;
+ }
+
+ if (specials!=1)
+ switch (nexttrans) {
+ case 12:
+ mtl.add(punchgs.TweenLite.to(ssa,speedy2,{'left':(0-oow)+'px',force3D:"auto",scale:scal,opacity:op,rotation:opt.rotate,ease:easeitout}),0);
+ break;
+ case 15:
+ mtl.add(punchgs.TweenLite.to(ssa,speedy2,{'left':(oow)+'px',force3D:"auto",scale:scal,opacity:op,rotation:opt.rotate,ease:easeitout}),0);
+ break;
+ case 13:
+ mtl.add(punchgs.TweenLite.to(ssa,speedy2,{'top':(0-ooh)+'px',force3D:"auto",scale:scal,opacity:op,rotation:opt.rotate,ease:easeitout}),0);
+ break;
+ case 14:
+ mtl.add(punchgs.TweenLite.to(ssa,speedy2,{'top':(ooh)+'px',force3D:"auto",scale:scal,opacity:op,rotation:opt.rotate,ease:easeitout}),0);
+ break;
+ }
+
+ }
+
+ //////////////////////////////////////
+ // THE SLOTSLIDE - TRANSITION XVI. //
+ //////////////////////////////////////
+ if (nexttrans==16) { // PAPERCUT
+
+
+ var subtl = new punchgs.TimelineLite();
+ mtl.add(punchgs.TweenLite.set(actli,{'position':'absolute','z-index':20}),0);
+ mtl.add(punchgs.TweenLite.set(nextli,{'position':'absolute','z-index':15}),0);
+
+
+ // PREPARE THE CUTS
+ actli.wrapInner('
');
+
+ actli.find('.tp-half-one').clone(true).appendTo(actli).addClass("tp-half-two");
+ actli.find('.tp-half-two').removeClass('tp-half-one');
+
+ var oow = opt.width,
+ ooh = opt.height;
+ if (opt.autoHeight=="on")
+ ooh = container.height();
+
+
+ actli.find('.tp-half-one .defaultimg').wrap('
')
+ actli.find('.tp-half-two .defaultimg').wrap('
')
+ actli.find('.tp-half-two .defaultimg').css({position:'absolute',top:'-50%'});
+ actli.find('.tp-half-two .tp-caption').wrapAll('
');
+
+ mtl.add(punchgs.TweenLite.set(actli.find('.tp-half-two'),
+ {width:oow,height:ooh,overflow:'hidden',zIndex:15,position:'absolute',top:ooh/2,left:'0px',transformPerspective:600,transformOrigin:"center bottom"}),0);
+
+ mtl.add(punchgs.TweenLite.set(actli.find('.tp-half-one'),
+ {width:oow,height:ooh/2,overflow:'visible',zIndex:10,position:'absolute',top:'0px',left:'0px',transformPerspective:600,transformOrigin:"center top"}),0);
+
+ // ANIMATE THE CUTS
+ var img=actli.find('.defaultimg'),
+ ro1=Math.round(Math.random()*20-10),
+ ro2=Math.round(Math.random()*20-10),
+ ro3=Math.round(Math.random()*20-10),
+ xof = Math.random()*0.4-0.2,
+ yof = Math.random()*0.4-0.2,
+ sc1=Math.random()*1+1,
+ sc2=Math.random()*1+1,
+ sc3=Math.random()*0.3+0.3;
+
+ mtl.add(punchgs.TweenLite.set(actli.find('.tp-half-one'),{overflow:'hidden'}),0);
+ mtl.add(punchgs.TweenLite.fromTo(actli.find('.tp-half-one'),masterspeed/800,
+ {width:oow,height:ooh/2,position:'absolute',top:'0px',left:'0px',force3D:"auto",transformOrigin:"center top"},
+ {scale:sc1,rotation:ro1,y:(0-ooh-ooh/4),autoAlpha:0,ease:punchgs.Power2.easeInOut}),0);
+ mtl.add(punchgs.TweenLite.fromTo(actli.find('.tp-half-two'),masterspeed/800,
+ {width:oow,height:ooh,overflow:'hidden',position:'absolute',top:ooh/2,left:'0px',force3D:"auto",transformOrigin:"center bottom"},
+ {scale:sc2,rotation:ro2,y:ooh+ooh/4,ease:punchgs.Power2.easeInOut,autoAlpha:0,onComplete:function() {
+ // CLEAN UP
+ punchgs.TweenLite.set(actli,{'position':'absolute','z-index':15});
+ punchgs.TweenLite.set(nextli,{'position':'absolute','z-index':20});
+ if (actli.find('.tp-half-one').length>0) {
+ actli.find('.tp-half-one .defaultimg').unwrap();
+ actli.find('.tp-half-one .slotholder').unwrap();
+ }
+ actli.find('.tp-half-two').remove();
+ }}),0);
+
+ subtl.add(punchgs.TweenLite.set(nextsh.find('.defaultimg'),{autoAlpha:1}),0);
+
+ if (actli.html()!=null)
+ mtl.add(punchgs.TweenLite.fromTo(nextli,(masterspeed-200)/1000,
+ {scale:sc3,x:(opt.width/4)*xof, y:(ooh/4)*yof,rotation:ro3,force3D:"auto",transformOrigin:"center center",ease:punchgs.Power2.easeOut},
+ {autoAlpha:1,scale:1,x:0,y:0,rotation:0}),0);
+
+ mtl.add(subtl,0);
+
+
+ }
+
+ ////////////////////////////////////////
+ // THE SLOTSLIDE - TRANSITION XVII. //
+ ///////////////////////////////////////
+ if (nexttrans==17) { // 3D CURTAIN HORIZONTAL
+
+
+ // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT
+
+ nextsh.find('.slotslide').each(function(j) {
+ var ss=jQuery(this);
+
+ mtl.add(punchgs.TweenLite.fromTo(ss,(masterspeed)/800,
+ {opacity:0,rotationY:0,scale:0.9,rotationX:-110,force3D:"auto",transformPerspective:600,transformOrigin:"center center"},
+ {opacity:1,top:0,left:0,scale:1,rotation:0,rotationX:0,force3D:"auto",rotationY:0,ease:punchgs.Power3.easeOut,delay:j*0.06}),0);
+
+ });
+ }
+
+
+
+ ////////////////////////////////////////
+ // THE SLOTSLIDE - TRANSITION XVIII. //
+ ///////////////////////////////////////
+ if (nexttrans==18) { // 3D CURTAIN VERTICAL
+
+ // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT
+ nextsh.find('.slotslide').each(function(j) {
+ var ss=jQuery(this);
+
+ mtl.add(punchgs.TweenLite.fromTo(ss,(masterspeed)/500,
+ {autoAlpha:0,rotationY:310,scale:0.9,rotationX:10,force3D:"auto",transformPerspective:600,transformOrigin:"center center"},
+ {autoAlpha:1,top:0,left:0,scale:1,rotation:0,rotationX:0,force3D:"auto",rotationY:0,ease:punchgs.Power3.easeOut,delay:j*0.06}),0);
+ });
+
+
+
+ }
+
+
+ ////////////////////////////////////////
+ // THE SLOTSLIDE - TRANSITION XIX. //
+ ///////////////////////////////////////
+ if (nexttrans==19 || nexttrans==22) { // IN CUBE
+
+ var subtl = new punchgs.TimelineLite();
+ //SET DEFAULT IMG UNVISIBLE
+
+ mtl.add(punchgs.TweenLite.set(actli,{zIndex:20}),0);
+ mtl.add(punchgs.TweenLite.set(nextli,{zIndex:20}),0);
+ setTimeout(function() {
+ actsh.find('.defaultimg').css({opacity:0});
+ },100);
+ var chix=nextli.css('z-index'),
+ chix2=actli.css('z-index'),
+ rot = 90,
+ op = 1,
+ torig ="center center ";
+
+ if (direction==1) rot = -90;
+
+ if (nexttrans==19) {
+ torig = torig+"-"+opt.height/2;
+ op=0;
+
+ } else {
+ torig = torig+opt.height/2;
+ }
+
+ // ALL NEW SLOTS SHOULD BE SLIDED FROM THE LEFT TO THE RIGHT
+ punchgs.TweenLite.set(container,{transformStyle:"flat",backfaceVisibility:"hidden",transformPerspective:600});
+
+ nextsh.find('.slotslide').each(function(j) {
+ var ss=jQuery(this);
+
+ subtl.add(punchgs.TweenLite.fromTo(ss,masterspeed/1000,
+ {transformStyle:"flat",backfaceVisibility:"hidden",left:0,rotationY:opt.rotate,z:10,top:0,scale:1,force3D:"auto",transformPerspective:600,transformOrigin:torig,rotationX:rot},
+ {left:0,rotationY:0,top:0,z:0, scale:1,force3D:"auto",rotationX:0, delay:(j*50)/1000,ease:punchgs.Power2.easeInOut}),0);
+ subtl.add(punchgs.TweenLite.to(ss,0.1,{autoAlpha:1,delay:(j*50)/1000}),0);
+ mtl.add(subtl);
+ });
+
+ actsh.find('.slotslide').each(function(j) {
+ var ss=jQuery(this);
+ var rot = -90;
+ if (direction==1) rot = 90;
+
+ subtl.add(punchgs.TweenLite.fromTo(ss,masterspeed/1000,
+ {transformStyle:"flat",backfaceVisibility:"hidden",autoAlpha:1,rotationY:0,top:0,z:0,scale:1,force3D:"auto",transformPerspective:600,transformOrigin:torig, rotationX:0},
+ {autoAlpha:1,rotationY:opt.rotate,top:0,z:10, scale:1,rotationX:rot, delay:(j*50)/1000,force3D:"auto",ease:punchgs.Power2.easeInOut}),0);
+
+ mtl.add(subtl);
+ });
+ }
+
+
+
+
+ ////////////////////////////////////////
+ // THE SLOTSLIDE - TRANSITION XX. //
+ ///////////////////////////////////////
+ if (nexttrans==20 ) { // FLYIN
+
+
+ setTimeout(function() {
+ actsh.find('.defaultimg').css({opacity:0});
+ },100);
+ var chix=nextli.css('z-index'),
+ chix2=actli.css('z-index');
+
+ if (direction==1) {
+ var ofx = -opt.width
+ var rot =70;
+ var torig = "left center -"+opt.height/2;
+ } else {
+ var ofx = opt.width;
+ var rot = -70;
+ var torig = "right center -"+opt.height/2;
+ }
+
+
+ nextsh.find('.slotslide').each(function(j) {
+ var ss=jQuery(this);
+
+ mtl.add(punchgs.TweenLite.fromTo(ss,masterspeed/1500,
+ {left:ofx,rotationX:40,z:-600, opacity:op,top:0,force3D:"auto",transformPerspective:600,transformOrigin:torig,rotationY:rot},
+ {left:0, delay:(j*50)/1000,ease:punchgs.Power2.easeInOut}),0);
+
+ mtl.add(punchgs.TweenLite.fromTo(ss,masterspeed/1000,
+ {rotationX:40,z:-600, opacity:op,top:0,scale:1,force3D:"auto",transformPerspective:600,transformOrigin:torig,rotationY:rot},
+ {rotationX:0,opacity:1,top:0,z:0, scale:1,rotationY:0, delay:(j*50)/1000,ease:punchgs.Power2.easeInOut}),0);
+
+ mtl.add(punchgs.TweenLite.to(ss,0.1,{opacity:1,force3D:"auto",delay:(j*50)/1000+masterspeed/2000}),0);
+
+ });
+ actsh.find('.slotslide').each(function(j) {
+ var ss=jQuery(this);
+
+ if (direction!=1) {
+ var ofx = -opt.width
+ var rot =70;
+ var torig = "left center -"+opt.height/2;
+ } else {
+ var ofx = opt.width;
+ var rot = -70;
+ var torig = "right center -"+opt.height/2;
+ }
+ mtl.add(punchgs.TweenLite.fromTo(ss,masterspeed/1000,
+ {opacity:1,rotationX:0,top:0,z:0,scale:1,left:0, force3D:"auto",transformPerspective:600,transformOrigin:torig, rotationY:0},
+ {opacity:1,rotationX:40,top:0, z:-600, left:ofx, force3D:"auto",scale:0.8,rotationY:rot, delay:(j*50)/1000,ease:punchgs.Power2.easeInOut}),0);
+ mtl.add(punchgs.TweenLite.to(ss,0.1,{force3D:"auto",opacity:0,delay:(j*50)/1000+(masterspeed/1000 - (masterspeed/10000))}),0);
+ });
+ }
+
+ ////////////////////////////////////////
+ // THE SLOTSLIDE - TRANSITION XX. //
+ ///////////////////////////////////////
+ if (nexttrans==21 || nexttrans==25) { // TURNOFF
+
+
+ //SET DEFAULT IMG UNVISIBLE
+
+ setTimeout(function() {
+ actsh.find('.defaultimg').css({opacity:0});
+ },100);
+ var chix=nextli.css('z-index'),
+ chix2=actli.css('z-index'),
+ rot = 90,
+ ofx = -opt.width,
+ rot2 = -rot;
+
+ if (direction==1) {
+ if (nexttrans==25) {
+ var torig = "center top 0";
+ rot = opt.rotate;
+ } else {
+ var torig = "left center 0";
+ rot2 = opt.rotate;
+ }
+
+ } else {
+ ofx = opt.width;
+ rot = -90;
+ if (nexttrans==25) {
+ var torig = "center bottom 0"
+ rot2 = -rot;
+ rot = opt.rotate;
+ } else {
+ var torig = "right center 0";
+ rot2 = opt.rotate;
+ }
+ }
+
+ nextsh.find('.slotslide').each(function(j) {
+ var ss=jQuery(this);
+
+
+ mtl.add(punchgs.TweenLite.fromTo(ss,masterspeed/1000,
+ {left:0,transformStyle:"flat",rotationX:rot2,z:0, autoAlpha:0,top:0,scale:1,force3D:"auto",transformPerspective:600,transformOrigin:torig,rotationY:rot},
+ {left:0,rotationX:0,top:0,z:0, autoAlpha:1,scale:1,rotationY:0,force3D:"auto", ease:punchgs.Power3.easeInOut}),0);
+ });
+
+
+ if (direction!=1) {
+ ofx = -opt.width
+ rot = 90;
+
+ if (nexttrans==25) {
+ torig = "center top 0"
+ rot2 = -rot;
+ rot = opt.rotate;
+ } else {
+ torig = "left center 0";
+ rot2 = opt.rotate;
+ }
+
+ } else {
+ ofx = opt.width;
+ rot = -90;
+ if (nexttrans==25) {
+ torig = "center bottom 0"
+ rot2 = -rot;
+ rot = opt.rotate;
+ } else {
+ torig = "right center 0";
+ rot2 = opt.rotate;
+ }
+ }
+
+ actsh.find('.slotslide').each(function(j) {
+ var ss=jQuery(this);
+ mtl.add(punchgs.TweenLite.fromTo(ss,masterspeed/1000,
+ {left:0,transformStyle:"flat",rotationX:0,z:0, autoAlpha:1,top:0,scale:1,force3D:"auto",transformPerspective:600,transformOrigin:torig,rotationY:0},
+ {left:0,rotationX:rot2,top:0,z:0,autoAlpha:1,force3D:"auto", scale:1,rotationY:rot,ease:punchgs.Power1.easeInOut}),0);
+ });
+ }
+
+
+
+ ////////////////////////////////////////
+ // THE SLOTSLIDE - TRANSITION XX. //
+ ///////////////////////////////////////
+ if (nexttrans==23 || nexttrans == 24) { // cube-horizontal - inboxhorizontal
+
+
+ //SET DEFAULT IMG UNVISIBLE
+ setTimeout(function() {
+ actsh.find('.defaultimg').css({opacity:0});
+ },100);
+ var chix=nextli.css('z-index'),
+ chix2=actli.css('z-index'),
+ rot = -90,
+ op = 1,
+ opx=0;
+
+ if (direction==1) rot = 90;
+ if (nexttrans==23) {
+ var torig = "center center -"+opt.width/2;
+ op=0;
+ } else
+ var torig = "center center "+opt.width/2;
+
+ punchgs.TweenLite.set(container,{transformStyle:"preserve-3d",backfaceVisibility:"hidden",perspective:2500});
+ nextsh.find('.slotslide').each(function(j) {
+ var ss=jQuery(this);
+ mtl.add(punchgs.TweenLite.fromTo(ss,masterspeed/1000,
+ {left:opx,rotationX:opt.rotate,force3D:"auto",opacity:op,top:0,scale:1,transformPerspective:600,transformOrigin:torig,rotationY:rot},
+ {left:0,rotationX:0,autoAlpha:1,top:0,z:0, scale:1,rotationY:0, delay:(j*50)/500,ease:punchgs.Power2.easeInOut}),0);
+ });
+
+ rot = 90;
+ if (direction==1) rot = -90;
+
+ actsh.find('.slotslide').each(function(j) {
+ var ss=jQuery(this);
+ mtl.add(punchgs.TweenLite.fromTo(ss,masterspeed/1000,
+ {left:0,autoAlpha:1,rotationX:0,top:0,z:0,scale:1,force3D:"auto",transformPerspective:600,transformOrigin:torig, rotationY:0},
+ {left:opx,autoAlpha:1,rotationX:opt.rotate,top:0, scale:1,rotationY:rot, delay:(j*50)/500,ease:punchgs.Power2.easeInOut}),0);
+
+
+
+ });
+ }
+
+
+ // SHOW FIRST LI && ANIMATE THE CAPTIONS
+ mtl.pause();
+ animateTheCaptions(nextli, opt,null,mtl);
+ punchgs.TweenLite.to(nextli,0.001,{autoAlpha:1});
+
+ var data={};
+ data.slideIndex=opt.next+1;
+ data.slide = nextli;
+ container.trigger('revolution.slide.onchange',data);
+ setTimeout(function() { container.trigger('revolution.slide.onafterswap'); },masterspeed);
+ container.trigger('revolution.slide.onvideostop');
+
+ }
+
+
+
+
+
+
+ /**************************************
+ - GIVE FREE THE TRANSITIOSN -
+ **************************************/
+ var letItFree = function(container,opt,nextsh,actsh,nextli,actli,mtl) {
+ punchgs.TweenLite.to(nextsh.find('.defaultimg'),0.001,{autoAlpha:1,onComplete:function() {
+ removeSlots(container,opt,nextli);
+ }});
+ if (nextli.index()!=actli.index()) {
+ punchgs.TweenLite.to(actli,0.2,{autoAlpha:0,onComplete:function() {
+ removeSlots(container,opt,actli);
+ }});
+ }
+ opt.act=opt.next;
+ if (opt.navigationType=="thumb") moveSelectedThumb(container);
+ if (nextsh.data('kenburns')=="on") {
+ startKenBurn(container,opt);
+ }
+ container.find('.current-sr-slide-visible').removeClass("current-sr-slide-visible");
+ nextli.addClass("current-sr-slide-visible");
+ if (opt.parallax=="scroll" || opt.parallax=="scroll+mouse" || opt.parallax=="mouse+scroll") {
+ scrollParallax(container,opt);
+ }
+
+ mtl.clear();
+
+ }
+
+
+ //////////////////////////////////////////
+ // CHANG THE YOUTUBE PLAYER STATE HERE //
+ ////////////////////////////////////////
+ var onPlayerStateChange = function(event) {
+
+ var embedCode = event.target.getVideoEmbedCode();
+ var ytcont = jQuery('#'+embedCode.split('id="')[1].split('"')[0])
+ var container = ytcont.closest('.tp-simpleresponsive');
+ var player = ytcont.parent().data('player');
+
+ if (event.data == YT.PlayerState.PLAYING) {
+
+ var bt = container.find('.tp-bannertimer');
+ var opt = bt.data('opt');
+
+
+ if (ytcont.closest('.tp-caption').data('volume')=="mute")
+ player.mute();
+
+ opt.videoplaying=true;
+ container.trigger('stoptimer');
+ container.trigger('revolution.slide.onvideoplay');
+
+ } else {
+
+ var bt = container.find('.tp-bannertimer');
+ var opt = bt.data('opt');
+
+ if ((event.data!=-1 && event.data!=3)) {
+
+ opt.videoplaying=false;
+ container.trigger('starttimer');
+ container.trigger('revolution.slide.onvideostop');
+
+ }
+
+ if (event.data==0 && opt.nextslideatend==true)
+ opt.container.revnext();
+ else {
+
+ opt.videoplaying=false;
+ container.trigger('starttimer');
+ container.trigger('revolution.slide.onvideostop');
+ }
+
+ }
+
+
+ }
+
+
+
+ ////////////////////////
+ // VIMEO ADD EVENT /////
+ ////////////////////////
+ var addEvent = function(element, eventName, callback) {
+
+ if (element.addEventListener)
+ element.addEventListener(eventName, callback, false);
+ else
+ element.attachEvent(eventName, callback, false);
+ }
+
+
+
+
+
+ /////////////////////////////////////
+ // EVENT HANDLING FOR VIMEO VIDEOS //
+ /////////////////////////////////////
+
+ var vimeoready_auto = function(player_id,autoplay) {
+
+ var froogaloop = $f(player_id),
+ vimcont = jQuery('#'+player_id),
+ container = vimcont.closest('.tp-simpleresponsive'),
+ nextcaption = vimcont.closest('.tp-caption');
+
+ setTimeout(function() {
+ froogaloop.addEvent('ready', function(data) {
+ if(autoplay) froogaloop.api('play');
+
+
+ froogaloop.addEvent('play', function(data) {
+ var bt = container.find('.tp-bannertimer');
+ var opt = bt.data('opt');
+
+ opt.videoplaying=true;
+ container.trigger('stoptimer');
+ if (nextcaption.data('volume')=="mute")
+ froogaloop.api('setVolume',"0");
+ });
+
+ froogaloop.addEvent('finish', function(data) {
+ var bt = container.find('.tp-bannertimer');
+ var opt = bt.data('opt');
+ opt.videoplaying=false;
+ container.trigger('starttimer');
+
+ container.trigger('revolution.slide.onvideoplay'); //opt.videostartednow=1;
+ if (opt.nextslideatend==true)
+ opt.container.revnext();
+
+ });
+
+ froogaloop.addEvent('pause', function(data) {
+ var bt = container.find('.tp-bannertimer');
+ var opt = bt.data('opt');
+ opt.videoplaying=false;
+ container.trigger('starttimer');
+ container.trigger('revolution.slide.onvideostop'); //opt.videostoppednow=1;
+ });
+
+ // PLAY VIDEO IF THUMBNAIL HAS BEEN CLICKED
+ nextcaption.find('.tp-thumb-image').click(function() {
+ punchgs.TweenLite.to(jQuery(this),0.3,{autoAlpha:0,force3D:"auto",ease:punchgs.Power3.easeInOut})
+ froogaloop.api("play");
+ })
+ });
+ },150);
+ }
+
+
+
+ /////////////////////////////////////
+ // RESIZE HTML5VIDEO FOR FULLSCREEN//
+ /////////////////////////////////////
+ var updateHTML5Size = function(pc,container) {
+ var windowW = container.width();
+ var windowH = container.height();
+ var mediaAspect = pc.data('mediaAspect');
+ if (mediaAspect == undefined) mediaAspect = 1;
+
+
+ var windowAspect = windowW/windowH;
+
+ pc.css({position:"absolute"});
+ var video = pc.find('video');
+
+
+ if (windowAspect < mediaAspect) {
+ // taller
+ punchgs.TweenLite.to(pc,0.0001,{width:windowH*mediaAspect,force3D:"auto",top:0,
+ left:0-(windowH*mediaAspect-windowW)/2,
+ height:windowH});
+
+ } else {
+ // wider
+ punchgs.TweenLite.to(pc,0.0001,{width:windowW,force3D:"auto",top:0-(windowW/mediaAspect-windowH)/2,
+ left:0,
+ height:windowW/mediaAspect});
+ }
+ }
+
+
+
+ /////////////////////////////////////
+ // - CREATE ANIMATION OBJECT - //
+ /////////////////////////////////////
+ var newAnimObject = function() {
+ var a = new Object();
+ a.x=0;
+ a.y=0;
+ a.rotationX = 0;
+ a.rotationY = 0;
+ a.rotationZ = 0;
+ a.scale = 1;
+ a.scaleX = 1;
+ a.scaleY = 1;
+ a.skewX = 0;
+ a.skewY = 0;
+ a.opacity=0;
+ a.transformOrigin = "center, center";
+ a.transformPerspective = 400;
+ a.rotation = 0;
+ return a;
+ }
+
+ ///////////////////////////////////////////////////
+ // ANALYSE AND READ OUT DATAS FROM HTML CAPTIONS //
+ ///////////////////////////////////////////////////
+ var getAnimDatas = function(frm,data) {
+
+ var customarray = data.split(';');
+ jQuery.each(customarray,function(index,param) {
+
+ param = param.split(":")
+
+ var w = param[0],
+ v = param[1];
+ if (w=="rotationX") frm.rotationX = parseInt(v,0);
+ if (w=="rotationY") frm.rotationY = parseInt(v,0);
+ if (w=="rotationZ") frm.rotationZ = parseInt(v,0);
+ if (w=="rotationZ") frm.rotation = parseInt(v,0);
+ if (w=="scaleX") frm.scaleX = parseFloat(v);
+ if (w=="scaleY") frm.scaleY = parseFloat(v);
+ if (w=="opacity") frm.opacity = parseFloat(v);
+ if (w=="skewX") frm.skewX = parseInt(v,0);
+ if (w=="skewY") frm.skewY = parseInt(v,0);
+ if (w=="x") frm.x = parseInt(v,0);
+ if (w=="y") frm.y = parseInt(v,0);
+ if (w=="z") frm.z = parseInt(v,0);
+ if (w=="transformOrigin") frm.transformOrigin = v.toString();
+ if (w=="transformPerspective") frm.transformPerspective=parseInt(v,0);
+ })
+
+ return frm;
+ }
+ ///////////////////////////////////////////////////////////////////
+ // ANALYSE AND READ OUT DATAS FROM HTML CAPTIONS ANIMATION STEPS //
+ ///////////////////////////////////////////////////////////////////
+ var getAnimSteps = function(data) {
+
+ var paramarray = data.split("animation:");
+ var params = new Object();
+
+ params.animation = getAnimDatas(newAnimObject(),paramarray[1]);
+ var customarray = paramarray[0].split(';');
+
+ jQuery.each(customarray,function(index,param) {
+ param = param.split(":")
+ var w = param[0],
+ v = param[1];
+ if (w=="typ") params.typ = v;
+ if (w=="speed") params.speed = parseInt(v,0)/1000;
+ if (w=="start") params.start = parseInt(v,0)/1000;
+ if (w=="elementdelay") params.elementdelay = parseFloat(v);
+ if (w=="ease") params.ease = v;
+ })
+
+ return params;
+ }
+
+
+
+
+ ////////////////////////
+ // SHOW THE CAPTION //
+ ///////////////////////
+ var animateTheCaptions = function(nextli, opt,recalled,mtl) {
+
+ // MAKE SURE THE ANIMATION ENDS WITH A CLEANING ON MOZ TRANSFORMS
+ function animcompleted() {
+ }
+
+ function tlstart() {
+ }
+
+ if (nextli.data('ctl')==undefined) {
+ nextli.data('ctl',new punchgs.TimelineLite());
+ }
+
+ var ctl = nextli.data('ctl'),
+ offsetx=0,
+ offsety=0,
+ allcaptions = nextli.find('.tp-caption'),
+ allstaticcaptions = opt.container.find('.tp-static-layers').find('.tp-caption');
+
+
+ ctl.pause();
+
+ jQuery.each(allstaticcaptions, function(index,staticcapt) {
+ allcaptions.push(staticcapt);
+ });
+
+ allcaptions.each(function(i) {
+ var internrecalled = recalled,
+ staticdirection = -1, // 1 -> In, 2-> Out 0-> Ignore -1-> Not Static
+ nextcaption=jQuery(this);
+
+ if (nextcaption.hasClass("tp-static-layer")) {
+ var nss = nextcaption.data('startslide'),
+ nes = nextcaption.data('endslide');
+
+ if ( nss == -1 || nss == "-1")
+ nextcaption.data('startslide',0);
+
+ if ( nes== -1 || nes == "-1")
+ nextcaption.data('endslide',opt.slideamount);
+
+ if (nss==0 && nes==opt.slideamount-1)
+ nextcaption.data('endslide',opt.slideamount+1);
+
+
+ // RESET SETTIGNS AFTER SETTING THEM AGAIN
+ nss = nextcaption.data('startslide'),
+ nes = nextcaption.data('endslide');
+
+
+ // IF STATIC ITEM CURRENTLY NOT VISIBLE
+ if (!nextcaption.hasClass("tp-is-shown")) {
+ // IF ITEM SHOULD BECOME VISIBLE
+
+
+ if ((nss<=opt.next && nes>=opt.next) ||
+ (nss == opt.next) || (nes == opt.next)){
+
+ nextcaption.addClass("tp-is-shown");
+ staticdirection = 1;
+ } else {
+
+ staticdirection = 0;
+ }
+ // IF STATIC ITEM ALREADY VISIBLE
+ } else {
+ if ((nes==opt.next) ||
+ (nss > opt.next) ||
+ (nes < opt.next)) {
+
+ staticdirection = 2;
+ //nextcaption.removeClass("tp-is-shown");
+ } else {
+ staticdirection = 0;
+ }
+
+ }
+
+ //if (staticdirection==2) staticdirection = 0;
+
+ }
+
+ offsetx = opt.width/2 - (opt.startwidth*opt.bw)/2;
+
+ var xbw = opt.bw;
+ var xbh = opt.bh;
+
+ if (opt.fullScreen=="on")
+ offsety = opt.height/2 - (opt.startheight*opt.bh)/2;
+
+ if (opt.autoHeight=="on" || (opt.minHeight!=undefined && opt.minHeight>0))
+ offsety = opt.container.height()/2 - (opt.startheight*opt.bh)/2;;
+
+
+ if (offsety<0) offsety=0;
+
+
+
+ var handlecaption=0;
+
+ // HIDE CAPTION IF RESOLUTION IS TOO LOW
+ if (opt.width0 || nextcaption.find('video').length>0 ) {
+
+ // YOUTUBE AND VIMEO LISTENRES INITIALISATION
+ var frameID = "iframe"+Math.round(Math.random()*100000+1),
+ vidw = nextcaption.data("videowidth"),
+ vidh = nextcaption.data("videoheight"),
+ vida = nextcaption.data("videoattributes"),
+ vidytid = nextcaption.data('ytid'),
+ vimeoid = nextcaption.data('vimeoid'),
+ videopreload = nextcaption.data('videpreload'),
+ videomp = nextcaption.data('videomp4'),
+ videowebm = nextcaption.data('videowebm'),
+ videoogv = nextcaption.data('videoogv'),
+ videocontrols = nextcaption.data('videocontrols'),
+ httpprefix = "http",
+ videoloop = nextcaption.data('videoloop')=="loop" ? "loop" : nextcaption.data('videoloop')=="loopandnoslidestop" ? "loop" : "";
+
+ if (nextcaption.data('thumbimage')!=undefined && nextcaption.data('videoposter')==undefined)
+ nextcaption.data('videoposter',nextcaption.data('thumbimage'))
+
+ // ADD YOUTUBE IFRAME IF NEEDED
+ if (vidytid!=undefined && String(vidytid).length>1 && nextcaption.find('iframe').length==0) {
+ httpprefix = "https";
+
+ if (videocontrols=="none") {
+ vida = vida.replace("controls=1","controls=0");
+ if (vida.toLowerCase().indexOf('controls')==-1)
+ vida = vida+"&controls=0";
+ }
+ nextcaption.append('');
+ }
+
+ // ADD VIMEO IFRAME IF NEEDED
+ if (vimeoid!=undefined && String(vimeoid).length>1 && nextcaption.find('iframe').length==0) {
+ if (location.protocol === 'https:')
+ httpprefix = "https";
+
+ nextcaption.append('');
+ }
+
+ // ADD HTML5 VIDEO IF NEEDED
+ if ((videomp!=undefined || videowebm!=undefined) && nextcaption.find('video').length==0) {
+
+ if (videocontrols!="controls") videocontrols="";
+ var apptxt = '';
+ apptxt = apptxt + ' ';
+ apptxt = apptxt + ' ';
+ apptxt = apptxt + ' ';
+ apptxt = apptxt + ' ';
+ nextcaption.append(apptxt);*/
+
+ if (nextcaption.data('videoposter')!=undefined)
+ if (nextcaption.data('videoposter') != undefined) apptxt = apptxt + 'poster="'+nextcaption.data('videoposter')+'">';
+ if (videowebm!=undefined && get_browser().toLowerCase()=="firefox") apptxt = apptxt + ' ';
+ if (videomp!=undefined) apptxt = apptxt + ' ';
+ if (videoogv!=undefined) apptxt = apptxt + ' ';
+ apptxt = apptxt + '';
+ nextcaption.append(apptxt);
+
+ if (videocontrols=="controls")
+ nextcaption.append(''+
+ '
Play
'+
+ '
'+
+ '
Mute
'+
+ '
'+
+ '
Full-Screen
'+
+ '
');
+ }
+
+ // RESET DEFAULTS
+ var autoplaywason = false;
+ if (nextcaption.data('autoplayonlyfirsttime') == true || nextcaption.data('autoplayonlyfirsttime')=="true" || nextcaption.data('autoplay')==true) {
+ nextcaption.data('autoplay',true);
+ autoplaywason = true;
+ }
+
+
+ nextcaption.find('iframe').each(function() {
+ var ifr=jQuery(this);
+
+ punchgs.TweenLite.to(ifr,0.1,{autoAlpha:1, zIndex:0, transformStyle:"preserve-3d",z:0,rotationX:0,force3D:"auto"});
+ if (is_mobile()) {
+ var oldsrc = ifr.attr('src');
+ ifr.attr('src',"");
+ ifr.attr('src',oldsrc);
+ }
+
+
+ // START YOUTUBE HANDLING
+ opt.nextslideatend = nextcaption.data('nextslideatend');
+
+ // IF VIDEOPOSTER EXISTING
+ if (nextcaption.data('videoposter')!=undefined && nextcaption.data('videoposter').length>2 && nextcaption.data('autoplay')!=true && !internrecalled) {
+ if (nextcaption.find('.tp-thumb-image').length==0)
+ nextcaption.append('
');
+ else
+ punchgs.TweenLite.set(nextcaption.find('.tp-thumb-image'),{autoAlpha:1});
+ }
+
+ // IF IFRAME IS A YOUTUBE FRAME
+ if (ifr.attr('src').toLowerCase().indexOf('youtube')>=0) {
+
+ // IF LISTENER DOES NOT EXIST YET
+ if (!ifr.hasClass("HasListener")) {
+ try {
+ ifr.attr('id',frameID);
+ var player;
+ var ytint = setInterval(function() {
+ if (YT !=undefined)
+ if (typeof YT.Player != undefined && typeof YT.Player !="undefined") {
+ player = new YT.Player(frameID, {
+ events: {
+ "onStateChange": onPlayerStateChange,
+ 'onReady': function(event) {
+ var embedCode = event.target.getVideoEmbedCode(),
+ ytcont = jQuery('#'+embedCode.split('id="')[1].split('"')[0]),
+ nextcaption = ytcont.closest('.tp-caption'),
+ videorate = nextcaption.data('videorate'),
+ videostart = nextcaption.data('videostart');
+
+
+ if (videorate!=undefined)
+ event.target.setPlaybackRate(parseFloat(videorate));
+
+ /*if (nextcaption.data('autoplay')==true || autoplaywason)
+ event.target.playVideo();*/
+
+ if (!is_mobile() && nextcaption.data('autoplay')==true || autoplaywason) {
+ nextcaption.data('timerplay',setTimeout(function() {
+ event.target.playVideo();
+ },nextcaption.data('start')));
+ }
+
+ // PLAY VIDEO IF THUMBNAIL HAS BEEN CLICKED
+ nextcaption.find('.tp-thumb-image').click(function() {
+ punchgs.TweenLite.to(jQuery(this),0.3,{autoAlpha:0,force3D:"auto",ease:punchgs.Power3.easeInOut})
+ if (!is_mobile()) {
+ player.playVideo();
+ }
+ })
+
+ }
+ }
+ });
+ }
+ ifr.addClass("HasListener");
+ nextcaption.data('player',player);
+ clearInterval(ytint);
+ }, 100)
+ } catch(e) {}
+ } else {
+ if (!recalled) {
+ var player=nextcaption.data('player');
+ if (nextcaption.data('forcerewind')=="on" && !is_mobile())
+ player.seekTo(0);
+
+ if (!is_mobile() && nextcaption.data('autoplay')==true || autoplaywason) {
+ nextcaption.data('timerplay',setTimeout(function() {
+ player.playVideo();
+ },nextcaption.data('start')));
+ }
+ }
+ } // END YOUTUBE HANDLING
+
+
+ } else
+
+ // START VIMEO HANDLING
+ if (ifr.attr('src').toLowerCase().indexOf('vimeo')>=0) {
+ if (!ifr.hasClass("HasListener")) {
+ ifr.addClass("HasListener");
+ ifr.attr('id',frameID);
+ var isrc = ifr.attr('src');
+ var queryParameters = {}, queryString = isrc,
+ re = /([^&=]+)=([^&]*)/g, m;
+ // Creates a map with the query string parameters
+ while (m = re.exec(queryString)) {
+ queryParameters[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
+ }
+
+ if (queryParameters['player_id']!=undefined)
+ isrc = isrc.replace(queryParameters['player_id'],frameID);
+ else
+ isrc=isrc+"&player_id="+frameID;
+
+ try{ isrc = isrc.replace('api=0','api=1'); } catch(e) {}
+
+ isrc=isrc+"&api=1";
+
+ ifr.attr('src',isrc);
+ var player = nextcaption.find('iframe')[0];
+ var vimint = setInterval(function() {
+ if ($f !=undefined){
+ if (typeof $f(frameID).api != undefined && typeof $f(frameID).api !="undefined") {
+
+ $f(player).addEvent('ready', function(){
+ vimeoready_auto(frameID,autoplaywason)
+ });
+ clearInterval(vimint);
+ }
+ }
+ },100);
+
+ } else {
+ if (!recalled) {
+ if (!is_mobile() && (nextcaption.data('autoplay')==true || nextcaption.data('forcerewind')=="on")) {
+
+ var ifr = nextcaption.find('iframe');
+ var id = ifr.attr('id');
+ var froogaloop = $f(id);
+ if (nextcaption.data('forcerewind')=="on")
+ froogaloop.api("seekTo",0);
+ nextcaption.data('timerplay',setTimeout(function() {
+ if (nextcaption.data('autoplay')==true)
+ froogaloop.api("play");
+ },nextcaption.data('start')));
+ }
+ }
+ }// END HAS LISTENER HANDLING
+ } // END OF VIMEO HANDLING
+ }); // END OF LOOP THROUGH IFRAMES
+
+
+
+ // START OF HTML5 VIDEOS
+ if ((is_mobile() && nextcaption.data('disablevideoonmobile')==1) ||isIE(8)) nextcaption.find('video').remove();
+ //if (is_mobile() && jQuery(window).width()<569) nextcaption.find('video').remove()
+
+ if (nextcaption.find('video').length>0) {
+ nextcaption.find('video').each(function(i) {
+
+ var video = this,
+ jvideo = jQuery(this);
+
+
+ if (!jvideo.parent().hasClass("html5vid"))
+ jvideo.wrap('
');
+
+ var html5vid = jvideo.parent();
+
+ // WAITING FOR META DATAS
+
+ addEvent(video,'loadedmetadata',function(html5vid) {
+ html5vid.data('metaloaded',1);
+ }(html5vid));
+
+
+ clearInterval(html5vid.data('interval'));
+ html5vid.data('interval',setInterval(function() {
+ if (html5vid.data('metaloaded')==1 || video.duration!=NaN) {
+ clearInterval(html5vid.data('interval'));
+ // FIRST TIME LOADED THE HTML5 VIDEO
+ if (!html5vid.hasClass("HasListener")) {
+ html5vid.addClass("HasListener");
+
+ if (nextcaption.data('dottedoverlay')!="none" && nextcaption.data('dottedoverlay')!=undefined)
+ if (nextcaption.find('.tp-dottedoverlay').length!=1)
+ html5vid.append('
');
+
+ if (jvideo.attr('control') == undefined ) {
+ if (html5vid.find('.tp-video-play-button').length==0)
+ html5vid.append('');
+ html5vid.find('video, .tp-poster, .tp-video-play-button').click(function() {
+ if (html5vid.hasClass("videoisplaying"))
+ video.pause();
+ else
+ video.play();
+ })
+ }
+
+ if (nextcaption.data('forcecover')==1 || nextcaption.hasClass('fullscreenvideo')) {
+ if (nextcaption.data('forcecover')==1) {
+ updateHTML5Size(html5vid,opt.container);
+ html5vid.addClass("fullcoveredvideo");
+ nextcaption.addClass("fullcoveredvideo");
+ }
+ html5vid.css({width:"100%", height:"100%"});
+ }
+
+
+
+ var playButton = nextcaption.find('.tp-vid-play-pause')[0],
+ muteButton = nextcaption.find('.tp-vid-mute')[0],
+ fullScreenButton = nextcaption.find('.tp-vid-full-screen')[0],
+ seekBar = nextcaption.find('.tp-seek-bar')[0],
+ volumeBar = nextcaption.find('.tp-volume-bar')[0];
+
+ if (playButton!=undefined) {
+ // Event listener for the play/pause button
+ addEvent(playButton,"click", function() {
+ if (video.paused == true)
+ // Play the video
+ video.play();
+ else
+ // Pause the video
+ video.pause();
+ });
+
+ // Event listener for the mute button
+ addEvent(muteButton,"click", function() {
+ if (video.muted == false) {
+ // Mute the video
+ video.muted = true;
+
+ // Update the button text
+ muteButton.innerHTML = "Unmute";
+ } else {
+ // Unmute the video
+ video.muted = false;
+
+ // Update the button text
+ muteButton.innerHTML = "Mute";
+ }
+ });
+
+ // Event listener for the full-screen button
+ addEvent(fullScreenButton,"click", function() {
+ if (video.requestFullscreen) {
+ video.requestFullscreen();
+ } else if (video.mozRequestFullScreen) {
+ video.mozRequestFullScreen(); // Firefox
+ } else if (video.webkitRequestFullscreen) {
+ video.webkitRequestFullscreen(); // Chrome and Safari
+ }
+ });
+
+
+ // Event listener for the seek bar
+ addEvent(seekBar,"change", function() {
+ // Calculate the new time
+ var time = video.duration * (seekBar.value / 100);
+ // Update the video time
+ video.currentTime = time;
+ });
+
+
+ // Update the seek bar as the video plays
+ addEvent(video,"timeupdate", function() {
+ // Calculate the slider value
+ var value = (100 / video.duration) * video.currentTime;
+
+ // Update the slider value
+ seekBar.value = value;
+ });
+
+ // Pause the video when the seek handle is being dragged
+ addEvent(seekBar,"mousedown", function() {
+ video.pause();
+ });
+
+ // Play the video when the seek handle is dropped
+ addEvent(seekBar,"mouseup", function() {
+ video.play();
+ });
+
+ // Event listener for the volume bar
+ addEvent(volumeBar,"change", function() {
+ // Update the video volume
+ video.volume = volumeBar.value;
+ });
+ }
+
+
+ // VIDEO EVENT LISTENER FOR "PLAY"
+ addEvent(video,"play",function() {
+ if (nextcaption.data('volume')=="mute")
+ video.muted=true;
+
+ html5vid.addClass("videoisplaying");
+
+ if (nextcaption.data('videoloop')=="loopandnoslidestop") {
+ opt.videoplaying=false;
+ opt.container.trigger('starttimer');
+ opt.container.trigger('revolution.slide.onvideostop');
+ } else {
+
+ opt.videoplaying=true;
+ opt.container.trigger('stoptimer');
+ opt.container.trigger('revolution.slide.onvideoplay');
+ }
+
+ var playButton = nextcaption.find('.tp-vid-play-pause')[0],
+ muteButton = nextcaption.find('.tp-vid-mute')[0];
+ if (playButton!=undefined)
+ playButton.innerHTML = "Pause";
+ if (muteButton!=undefined && video.muted)
+ muteButton.innerHTML = "Unmute";
+ });
+
+ // VIDEO EVENT LISTENER FOR "PAUSE"
+ addEvent(video,"pause",function() {
+ html5vid.removeClass("videoisplaying");
+ opt.videoplaying=false;
+ opt.container.trigger('starttimer');
+ opt.container.trigger('revolution.slide.onvideostop');
+ var playButton = nextcaption.find('.tp-vid-play-pause')[0];
+ if (playButton!=undefined)
+ playButton.innerHTML = "Play";
+
+ });
+
+ // VIDEO EVENT LISTENER FOR "END"
+ addEvent(video,"ended",function() {
+ html5vid.removeClass("videoisplaying");
+ opt.videoplaying=false;
+ opt.container.trigger('starttimer');
+ opt.container.trigger('revolution.slide.onvideostop');
+ if (opt.nextslideatend==true)
+ opt.container.revnext();
+ });
+
+ } // END OF LISTENER DECLARATION
+
+ var autoplaywason = false;
+ if (nextcaption.data('autoplayonlyfirsttime') == true || nextcaption.data('autoplayonlyfirsttime')=="true")
+ autoplaywason = true;
+
+ var mediaaspect=16/9;
+ if (nextcaption.data('aspectratio')=="4:3") mediaaspect=4/3;
+ html5vid.data('mediaAspect',mediaaspect);
+
+ if (html5vid.closest('.tp-caption').data('forcecover')==1) {
+ updateHTML5Size(html5vid,opt.container);
+ html5vid.addClass("fullcoveredvideo");
+ }
+
+ jvideo.css({display:"block"});
+ opt.nextslideatend = nextcaption.data('nextslideatend');
+
+ // IF VIDEO SHOULD BE AUTOPLAYED
+ if (nextcaption.data('autoplay')==true || autoplaywason==true) {
+
+
+ if (nextcaption.data('videoloop')=="loopandnoslidestop") {
+ opt.videoplaying=false;
+ opt.container.trigger('starttimer');
+ opt.container.trigger('revolution.slide.onvideostop');
+ } else {
+ opt.videoplaying=true;
+ opt.container.trigger('stoptimer');
+ opt.container.trigger('revolution.slide.onvideoplay');
+ }
+
+
+ if (nextcaption.data('forcerewind')=="on" && !html5vid.hasClass("videoisplaying"))
+ if (video.currentTime>0) video.currentTime=0;
+
+ if (nextcaption.data('volume')=="mute")
+ video.muted = true;
+
+ html5vid.data('timerplay',setTimeout(function() {
+
+ if (nextcaption.data('forcerewind')=="on" && !html5vid.hasClass("videoisplaying"))
+ if (video.currentTime>0) video.currentTime=0;
+
+ if (nextcaption.data('volume')=="mute")
+ video.muted = true;
+
+
+ video.play();
+ },10+nextcaption.data('start')));
+ }
+
+ if (html5vid.data('ww') == undefined) html5vid.data('ww',jvideo.attr('width'));
+ if (html5vid.data('hh') == undefined) html5vid.data('hh',jvideo.attr('height'));
+
+ if (!nextcaption.hasClass("fullscreenvideo") && nextcaption.data('forcecover')==1) {
+ try{
+ html5vid.width(html5vid.data('ww')*opt.bw);
+ html5vid.height(html5vid.data('hh')*opt.bh);
+ } catch(e) {}
+ }
+
+ clearInterval(html5vid.data('interval'));
+ }
+ }),100); // END OF SET INTERVAL
+
+ });
+ } // END OF HTML5 VIDEO FUNCTIONS
+
+ // IF AUTOPLAY IS ON, WE NEED SOME STOP FUNCTION ON
+ if (nextcaption.data('autoplay')==true) {
+ setTimeout(function() {
+
+ if (nextcaption.data('videoloop')!="loopandnoslidestop") {
+ opt.videoplaying=true;
+ opt.container.trigger('stoptimer');
+ }
+ },200)
+ if (nextcaption.data('videoloop')!="loopandnoslidestop") {
+ opt.videoplaying=true;
+ opt.container.trigger('stoptimer');
+ }
+
+ if (nextcaption.data('autoplayonlyfirsttime') == true || nextcaption.data('autoplayonlyfirsttime')=="true" ) {
+ nextcaption.data('autoplay',false);
+ nextcaption.data('autoplayonlyfirsttime',false);
+ }
+ }
+ }
+
+
+
+
+ // NEW ENGINE
+ //if (nextcaption.hasClass("randomrotate") && (opt.ie || opt.ie9)) nextcaption.removeClass("randomrotate").addClass("sfb");
+ // nextcaption.removeClass('noFilterClass');
+
+
+
+ var imw =0;
+ var imh = 0;
+
+ if (nextcaption.find('img').length>0) {
+ var im = nextcaption.find('img');
+ if (im.width()==0) im.css({width:"auto"});
+ if (im.height()==0) im.css({height:"auto"});
+
+ if (im.data('ww') == undefined && im.width()>0) im.data('ww',im.width());
+ if (im.data('hh') == undefined && im.height()>0) im.data('hh',im.height());
+
+ var ww = im.data('ww');
+ var hh = im.data('hh');
+
+ if (ww==undefined) ww=0;
+ if (hh==undefined) hh=0;
+
+ im.width(ww*opt.bw);
+ im.height(hh*opt.bh);
+ imw = im.width();
+ imh = im.height();
+ } else {
+
+ if (nextcaption.find('iframe').length>0 || nextcaption.find('video').length>0) {
+
+ var html5vid = false,
+ im = nextcaption.find('iframe');
+ if (im.length==0) {
+ im = nextcaption.find('video');
+ html5vid = true;
+ }
+ im.css({display:"block"});
+
+ if (nextcaption.data('ww') == undefined) nextcaption.data('ww',im.width());
+ if (nextcaption.data('hh') == undefined) nextcaption.data('hh',im.height());
+
+ var ww = nextcaption.data('ww'),
+ hh = nextcaption.data('hh');
+
+ var nc =nextcaption;
+ if (nc.data('fsize') == undefined) nc.data('fsize',parseInt(nc.css('font-size'),0) || 0);
+ if (nc.data('pt') == undefined) nc.data('pt',parseInt(nc.css('paddingTop'),0) || 0);
+ if (nc.data('pb') == undefined) nc.data('pb',parseInt(nc.css('paddingBottom'),0) || 0);
+ if (nc.data('pl') == undefined) nc.data('pl',parseInt(nc.css('paddingLeft'),0) || 0);
+ if (nc.data('pr') == undefined) nc.data('pr',parseInt(nc.css('paddingRight'),0) || 0);
+
+ if (nc.data('mt') == undefined) nc.data('mt',parseInt(nc.css('marginTop'),0) || 0);
+ if (nc.data('mb') == undefined) nc.data('mb',parseInt(nc.css('marginBottom'),0) || 0);
+ if (nc.data('ml') == undefined) nc.data('ml',parseInt(nc.css('marginLeft'),0) || 0);
+ if (nc.data('mr') == undefined) nc.data('mr',parseInt(nc.css('marginRight'),0) || 0);
+
+ if (nc.data('bt') == undefined) nc.data('bt',parseInt(nc.css('borderTop'),0) || 0);
+ if (nc.data('bb') == undefined) nc.data('bb',parseInt(nc.css('borderBottom'),0) || 0);
+ if (nc.data('bl') == undefined) nc.data('bl',parseInt(nc.css('borderLeft'),0) || 0);
+ if (nc.data('br') == undefined) nc.data('br',parseInt(nc.css('borderRight'),0) || 0);
+
+ if (nc.data('lh') == undefined) nc.data('lh',parseInt(nc.css('lineHeight'),0) || 0);
+
+ // IE8 FIX FOR AUTO LINEHEIGHT
+ if (nc.data('lh')=="auto") nc.data('lh',nc.data('fsize')+4);
+
+ var fvwidth=opt.width,
+ fvheight=opt.height;
+ if (fvwidth>opt.startwidth) fvwidth=opt.startwidth;
+ if (fvheight>opt.startheight) fvheight=opt.startheight;
+
+ if (!nextcaption.hasClass('fullscreenvideo'))
+ nextcaption.css({
+
+ 'font-size': (nc.data('fsize') * opt.bw)+"px",
+
+ 'padding-top': (nc.data('pt') * opt.bh) + "px",
+ 'padding-bottom': (nc.data('pb') * opt.bh) + "px",
+ 'padding-left': (nc.data('pl') * opt.bw) + "px",
+ 'padding-right': (nc.data('pr') * opt.bw) + "px",
+
+ 'margin-top': (nc.data('mt') * opt.bh) + "px",
+ 'margin-bottom': (nc.data('mb') * opt.bh) + "px",
+ 'margin-left': (nc.data('ml') * opt.bw) + "px",
+ 'margin-right': (nc.data('mr') * opt.bw) + "px",
+
+ 'border-top': (nc.data('bt') * opt.bh) + "px",
+ 'border-bottom': (nc.data('bb') * opt.bh) + "px",
+ 'border-left': (nc.data('bl') * opt.bw) + "px",
+ 'border-right': (nc.data('br') * opt.bw) + "px",
+
+ 'line-height': (nc.data('lh') * opt.bh) + "px",
+ 'height':(hh*opt.bh)+'px'
+ });
+ else {
+
+ offsetx=0; offsety=0;
+ nextcaption.data('x',0)
+ nextcaption.data('y',0)
+
+ var ovhh = opt.height
+ if (opt.autoHeight=="on")
+ ovhh = opt.container.height()
+ nextcaption.css({
+
+ 'width':opt.width,
+ 'height':ovhh
+ });
+ }
+
+ if (html5vid == false) {
+ im.width(ww*opt.bw);
+ im.height(hh*opt.bh);
+ }
+
+ else
+
+ if (nextcaption.data('forcecover')!=1 && !nextcaption.hasClass('fullscreenvideo')) {
+ im.width(ww*opt.bw);
+ im.height(hh*opt.bh);
+ }
+
+
+ imw = im.width();
+ imh = im.height();
+ }
+
+ else {
+
+
+ nextcaption.find('.tp-resizeme, .tp-resizeme *').each(function() {
+ calcCaptionResponsive(jQuery(this),opt);
+ });
+
+ if (nextcaption.hasClass("tp-resizeme")) {
+ nextcaption.find('*').each(function() {
+ calcCaptionResponsive(jQuery(this),opt);
+ });
+ }
+
+ calcCaptionResponsive(nextcaption,opt);
+
+ imh=nextcaption.outerHeight(true);
+ imw=nextcaption.outerWidth(true);
+
+ // NEXTCAPTION FRONTCORNER CHANGES
+ var ncch = nextcaption.outerHeight();
+ var bgcol = nextcaption.css('backgroundColor');
+ nextcaption.find('.frontcorner').css({
+ 'borderWidth':ncch+"px",
+ 'left':(0-ncch)+'px',
+ 'borderRight':'0px solid transparent',
+ 'borderTopColor':bgcol
+ });
+
+ nextcaption.find('.frontcornertop').css({
+ 'borderWidth':ncch+"px",
+ 'left':(0-ncch)+'px',
+ 'borderRight':'0px solid transparent',
+ 'borderBottomColor':bgcol
+ });
+
+ // NEXTCAPTION BACKCORNER CHANGES
+ nextcaption.find('.backcorner').css({
+ 'borderWidth':ncch+"px",
+ 'right':(0-ncch)+'px',
+ 'borderLeft':'0px solid transparent',
+ 'borderBottomColor':bgcol
+ });
+
+ // NEXTCAPTION BACKCORNER CHANGES
+ nextcaption.find('.backcornertop').css({
+ 'borderWidth':ncch+"px",
+ 'right':(0-ncch)+'px',
+ 'borderLeft':'0px solid transparent',
+ 'borderTopColor':bgcol
+ });
+
+ }
+
+
+ }
+
+ if (opt.fullScreenAlignForce == "on") {
+ //xbw = 1;
+ //xbh = 1;
+ offsetx=0;
+ offsety=0;
+ }
+
+
+
+ if (nextcaption.data('voffset')==undefined) nextcaption.data('voffset',0);
+ if (nextcaption.data('hoffset')==undefined) nextcaption.data('hoffset',0);
+
+ var vofs= nextcaption.data('voffset')*xbw;
+ var hofs= nextcaption.data('hoffset')*xbw;
+
+ var crw = opt.startwidth*xbw;
+ var crh = opt.startheight*xbw;
+
+ if (opt.fullScreenAlignForce == "on") {
+ crw = opt.container.width();
+ crh = opt.container.height();
+ }
+
+
+
+ // CENTER THE CAPTION HORIZONTALLY
+ if (nextcaption.data('x')=="center" || nextcaption.data('xcenter')=='center') {
+ nextcaption.data('xcenter','center');
+ //nextcaption.data('x',(crw/2 - nextcaption.outerWidth(true)/2)/xbw+ hofs);
+ nextcaption.data('x',(crw/2 - nextcaption.outerWidth(true)/2) + hofs);
+
+
+ }
+
+ // ALIGN LEFT THE CAPTION HORIZONTALLY
+ if (nextcaption.data('x')=="left" || nextcaption.data('xleft')=='left') {
+ nextcaption.data('xleft','left');
+
+ nextcaption.data('x',(0)/xbw+hofs);
+
+ }
+
+ // ALIGN RIGHT THE CAPTION HORIZONTALLY
+ if (nextcaption.data('x')=="right" || nextcaption.data('xright')=='right') {
+ nextcaption.data('xright','right');
+ nextcaption.data('x',((crw - nextcaption.outerWidth(true))+hofs)/xbw);
+ //konsole.log("crw:"+crw+" width:"+nextcaption.outerWidth(true)+" xbw:"+xbw);
+ //konsole.log("x-pos:"+nextcaption.data('x'))
+ }
+
+
+ // CENTER THE CAPTION VERTICALLY
+ if (nextcaption.data('y')=="center" || nextcaption.data('ycenter')=='center') {
+ nextcaption.data('ycenter','center');
+ nextcaption.data('y',(crh/2 - nextcaption.outerHeight(true)/2) + vofs);
+ }
+
+ // ALIGN TOP THE CAPTION VERTICALLY
+ if (nextcaption.data('y')=="top" || nextcaption.data('ytop')=='top') {
+ nextcaption.data('ytop','top');
+ nextcaption.data('y',(0)/opt.bh+vofs);
+
+ }
+
+ // ALIGN BOTTOM THE CAPTION VERTICALLY
+ if (nextcaption.data('y')=="bottom" || nextcaption.data('ybottom')=='bottom') {
+ nextcaption.data('ybottom','bottom');
+ nextcaption.data('y',((crh - nextcaption.outerHeight(true))+vofs)/xbw);
+
+ }
+
+
+
+ // THE TRANSITIONS OF CAPTIONS
+ // MDELAY AND MSPEED
+ if (nextcaption.data('start') == undefined) nextcaption.data('start',1000);
+
+
+
+ var easedata=nextcaption.data('easing');
+ if (easedata==undefined) easedata="punchgs.Power1.easeOut";
+
+
+ var mdelay = nextcaption.data('start')/1000,
+ mspeed = nextcaption.data('speed')/1000;
+
+
+ if (nextcaption.data('x')=="center" || nextcaption.data('xcenter')=='center')
+ var calcx = (nextcaption.data('x')+offsetx);
+ else {
+
+ var calcx = (xbw*nextcaption.data('x')+offsetx);
+ }
+
+
+ if (nextcaption.data('y')=="center" || nextcaption.data('ycenter')=='center')
+ var calcy = (nextcaption.data('y')+offsety);
+ else {
+ //if (opt.fullScreenAlignForce == "on" && (nextcaption.data('y')=="bottom" || nextcaption.data('ybottom')=='bottom'))
+ // opt.bh = 1;
+
+ var calcy = (opt.bh*nextcaption.data('y')+offsety);
+ }
+
+
+ punchgs.TweenLite.set(nextcaption,{top:calcy,left:calcx,overwrite:"auto"});
+
+ if (staticdirection == 0)
+ internrecalled = true;
+
+ if (nextcaption.data('timeline')!=undefined && !internrecalled) {
+ if (staticdirection!=2)
+ nextcaption.data('timeline').gotoAndPlay(0);
+ internrecalled = true;
+ }
+
+ if (!internrecalled) {
+
+
+
+ // CLEAR THE TIMELINE, SINCE IT CAN BE DAMAGED, OR PAUSED AT A FEW PART
+ if (nextcaption.data('timeline')!=undefined) {
+ //nextcaption.data('timeline').clear();
+ }
+
+ var tl = new punchgs.TimelineLite({smoothChildTiming:true,onStart:tlstart});
+ tl.pause();
+
+
+ if (opt.fullScreenAlignForce == "on") {
+ //calcy = nextcaption.data('y')+offsety;
+ }
+
+ var animobject = nextcaption;
+ if (nextcaption.data('mySplitText') !=undefined) nextcaption.data('mySplitText').revert();
+
+
+ if (nextcaption.data('splitin') == "chars" || nextcaption.data('splitin') == "words" || nextcaption.data('splitin') == "lines" || nextcaption.data('splitout') == "chars" || nextcaption.data('splitout') == "words" || nextcaption.data('splitout') == "lines") {
+ if (nextcaption.find('a').length>0)
+ nextcaption.data('mySplitText',new punchgs.SplitText(nextcaption.find('a'),{type:"lines,words,chars",charsClass:"tp-splitted",wordsClass:"tp-splitted",linesClass:"tp-splitted"}));
+ else
+ if (nextcaption.find('.tp-layer-inner-rotation').length>0)
+ nextcaption.data('mySplitText',new punchgs.SplitText(nextcaption.find('.tp-layer-inner-rotation'),{type:"lines,words,chars",charsClass:"tp-splitted",wordsClass:"tp-splitted",linesClass:"tp-splitted"}));
+ else
+ nextcaption.data('mySplitText',new punchgs.SplitText(nextcaption,{type:"lines,words,chars",charsClass:"tp-splitted",wordsClass:"tp-splitted",linesClass:"tp-splitted"}));
+
+ nextcaption.addClass("splitted");
+ }
+
+ if (nextcaption.data('splitin') == "chars")
+ animobject = nextcaption.data('mySplitText').chars;
+
+
+ if (nextcaption.data('splitin') == "words")
+ animobject = nextcaption.data('mySplitText').words;
+
+
+ if (nextcaption.data('splitin') == "lines")
+ animobject = nextcaption.data('mySplitText').lines;
+
+
+
+ var frm = newAnimObject();
+ var endfrm = newAnimObject();
+
+
+ if (nextcaption.data('repeat')!=undefined) repeatV = nextcaption.data('repeat');
+ if (nextcaption.data('yoyo')!=undefined) yoyoV = nextcaption.data('yoyo');
+ if (nextcaption.data('repeatdelay')!=undefined) repeatdelayV = nextcaption.data('repeatdelay');
+
+ var ncc = nextcaption.attr('class');
+
+ // WHICH ANIMATION TYPE SHOULD BE USED
+ if (ncc.match("customin")) frm = getAnimDatas(frm,nextcaption.data('customin'));
+ else
+ if (ncc.match("randomrotate")) {
+
+ frm.scale = Math.random()*3+1;
+ frm.rotation = Math.round(Math.random()*200-100);
+ frm.x = Math.round(Math.random()*200-100);
+ frm.y = Math.round(Math.random()*200-100);
+ }
+ else
+ if (ncc.match('lfr') || ncc.match('skewfromright')) frm.x = 15+opt.width;
+ else
+ if (ncc.match('lfl') || ncc.match('skewfromleft')) frm.x = -15-imw;
+ else
+ if (ncc.match('sfl') || ncc.match('skewfromleftshort')) frm.x = -50;
+ else
+ if (ncc.match('sfr') || ncc.match('skewfromrightshort')) frm.x = 50;
+ else
+ if (ncc.match('lft')) frm.y = -25 - imh;
+ else
+ if (ncc.match('lfb')) frm.y = 25 + opt.height;
+ else
+ if (ncc.match('sft')) frm.y = -50;
+ else
+ if (ncc.match('sfb')) frm.y = 50;
+
+
+ if (ncc.match('skewfromright') || nextcaption.hasClass('skewfromrightshort')) frm.skewX = -85
+ else
+ if (ncc.match('skewfromleft') || nextcaption.hasClass('skewfromleftshort')) frm.skewX = 85
+
+
+ if (ncc.match("fade") || ncc.match('sft') || ncc.match('sfl') || ncc.match('sfb') || ncc.match('skewfromleftshort') || ncc.match('sfr') || ncc.match('skewfromrightshort'))
+ frm.opacity = 0;
+
+ // FOR SAFARI WE NEED TO REMOVE 3D ROTATIONS
+ if (get_browser().toLowerCase()=="safari") {
+ //frm.rotationX=0;frm.rotationY=0;
+ }
+
+ var elemdelay = (nextcaption.data('elementdelay') == undefined) ? 0 : nextcaption.data('elementdelay');
+ endfrm.ease = frm.ease = (nextcaption.data('easing') == undefined) ? punchgs.Power1.easeInOut : nextcaption.data('easing');
+
+
+ // DISTANCES SHOULD BE RESIZED ALSO
+
+ frm.data = new Object();
+ frm.data.oldx = frm.x;
+ frm.data.oldy = frm.y;
+
+ endfrm.data = new Object();
+ endfrm.data.oldx = endfrm.x;
+ endfrm.data.oldy = endfrm.y;
+
+ frm.x = frm.x * xbw;
+ frm.y = frm.y * xbw;
+
+ var newtl = new punchgs.TimelineLite();
+
+
+ if (staticdirection != 2) {
+
+ // CHANGE to punchgs.TweenLite. if Yoyo and Repeat is used. Dont forget to laod the Right Tools for it !!
+ if (ncc.match("customin")) {
+ if (animobject != nextcaption)
+ tl.add(punchgs.TweenLite.set(nextcaption, { force3D:"auto",opacity:1,scaleX:1,scaleY:1,rotationX:0,rotationY:0,rotationZ:0,skewX:0,skewY:0,z:0,x:0,y:0,visibility:'visible',delay:0,overwrite:"all"}));
+ frm.visibility = "hidden";
+ endfrm.visibility = "visible";
+ endfrm.overwrite = "all";
+ endfrm.opacity = 1;
+ endfrm.onComplete = animcompleted();
+ endfrm.delay = mdelay;
+ endfrm.force3D="auto"
+
+ tl.add(newtl.staggerFromTo(animobject,mspeed,frm,endfrm,elemdelay),"frame0");
+
+ } else {
+
+ frm.visibility = "visible";
+ frm.transformPerspective = 600;
+ if (animobject != nextcaption)
+ tl.add(punchgs.TweenLite.set(nextcaption, { force3D:"auto",opacity:1,scaleX:1,scaleY:1,rotationX:0,rotationY:0,rotationZ:0,skewX:0,skewY:0,z:0,x:0,y:0,visibility:'visible',delay:0,overwrite:"all"}));
+
+ endfrm.visibility = "visible";
+ endfrm.delay = mdelay;
+ endfrm.onComplete = animcompleted();
+ endfrm.opacity = 1;
+ endfrm.force3D="auto";
+ if (ncc.match("randomrotate") && animobject != nextcaption) {
+
+ for (var i=0;i0) {
+ var params = getAnimSteps(spframe);
+
+ addMoveCaption(nextcaption,opt,params,"frame"+(index+10),xbw)
+
+ }
+ })
+ } // END OF ANIMATION STEPS
+
+ tl = nextcaption.data('timeline');
+ // IF THERE IS ANY EXIT ANIM DEFINED
+ // For Static Layers -> 1 -> In, 2-> Out 0-> Ignore -1-> Not Static
+ if ((nextcaption.data('end')!=undefined) && (staticdirection==-1 || staticdirection==2)) {
+ endMoveCaption(nextcaption,opt,nextcaption.data('end')/1000,frm,"frame99",xbw);
+ } else {
+ if (staticdirection==-1 || staticdirection==2)
+ endMoveCaption(nextcaption,opt,999999,frm,"frame99",xbw);
+ else
+ endMoveCaption(nextcaption,opt,200,frm,"frame99",xbw);
+ }
+
+ // SAVE THE TIMELINE IN DOM ELEMENT
+ tl = nextcaption.data('timeline');
+ nextcaption.data('timeline',tl);
+ callCaptionLoops(nextcaption,xbw);
+ tl.resume();
+ }
+ }
+
+ if (internrecalled) {
+ killCaptionLoops(nextcaption);
+ callCaptionLoops(nextcaption,xbw);
+
+ if (nextcaption.data('timeline') != undefined) {
+ var tweens = nextcaption.data('timeline').getTweensOf();
+ jQuery.each(tweens,function(index,tween) {
+ if (tween.vars.data != undefined) {
+ var newx = tween.vars.data.oldx * xbw;
+ var newy = tween.vars.data.oldy * xbw;
+ if (tween.progress() !=1 && tween.progress()!=0) {
+ try{
+ //tween.updateTo({x:newx, y:newy},true);
+ tween.vars.x = newx;
+ tween.vary.y = newy;
+ } catch(e) {
+
+ }
+ } else {
+ if (tween.progress()==1) {
+ punchgs.TweenLite.set(tween.target,{x:newx,y:newy});
+ }
+ }
+ }
+ })
+ }
+ }
+
+ })
+
+ var bt=jQuery('body').find('#'+opt.container.attr('id')).find('.tp-bannertimer');
+ bt.data('opt',opt);
+
+
+
+ if (mtl != undefined) setTimeout(function() {
+ mtl.resume();
+ },30);
+
+ }
+
+
+ var get_browser = function(){
+ var N=navigator.appName, ua=navigator.userAgent, tem;
+ var M=ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
+ if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1];
+ M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?'];
+ return M[0];
+ }
+ var get_browser_version = function(){
+ var N=navigator.appName, ua=navigator.userAgent, tem;
+ var M=ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
+ if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1];
+ M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?'];
+ return M[1];
+ }
+
+ /////////////////////////////////////////////////////////////////
+ // - CALCULATE THE RESPONSIVE SIZES OF THE CAPTIONS - //
+ /////////////////////////////////////////////////////////////////
+ var calcCaptionResponsive = function(nc,opt) {
+ if (nc.data('fsize') == undefined) nc.data('fsize',parseInt(nc.css('font-size'),0) || 0);
+ if (nc.data('pt') == undefined) nc.data('pt',parseInt(nc.css('paddingTop'),0) || 0);
+ if (nc.data('pb') == undefined) nc.data('pb',parseInt(nc.css('paddingBottom'),0) || 0);
+ if (nc.data('pl') == undefined) nc.data('pl',parseInt(nc.css('paddingLeft'),0) || 0);
+ if (nc.data('pr') == undefined) nc.data('pr',parseInt(nc.css('paddingRight'),0) || 0);
+
+ if (nc.data('mt') == undefined) nc.data('mt',parseInt(nc.css('marginTop'),0) || 0);
+ if (nc.data('mb') == undefined) nc.data('mb',parseInt(nc.css('marginBottom'),0) || 0);
+ if (nc.data('ml') == undefined) nc.data('ml',parseInt(nc.css('marginLeft'),0) || 0);
+ if (nc.data('mr') == undefined) nc.data('mr',parseInt(nc.css('marginRight'),0) || 0);
+
+ if (nc.data('bt') == undefined) nc.data('bt',parseInt(nc.css('borderTopWidth'),0) || 0);
+ if (nc.data('bb') == undefined) nc.data('bb',parseInt(nc.css('borderBottomWidth'),0) || 0);
+ if (nc.data('bl') == undefined) nc.data('bl',parseInt(nc.css('borderLeftWidth'),0) || 0);
+ if (nc.data('br') == undefined) nc.data('br',parseInt(nc.css('borderRightWidth'),0) || 0);
+
+ if (nc.data('ls') == undefined) nc.data('ls',parseInt(nc.css('letterSpacing'),0) || 0);
+
+ if (nc.data('lh') == undefined) nc.data('lh',parseInt(nc.css('lineHeight'),0) || "auto");
+ if (nc.data('minwidth') == undefined) nc.data('minwidth',parseInt(nc.css('minWidth'),0) || 0);
+ if (nc.data('minheight') == undefined) nc.data('minheight',parseInt(nc.css('minHeight'),0) || 0);
+ if (nc.data('maxwidth') == undefined) nc.data('maxwidth',parseInt(nc.css('maxWidth'),0) || "none");
+ if (nc.data('maxheight') == undefined) nc.data('maxheight',parseInt(nc.css('maxHeight'),0) || "none");
+ if (nc.data('wii') == undefined) nc.data('wii',parseInt(nc.css('width'),0) || 0);
+ if (nc.data('hii') == undefined) nc.data('hii',parseInt(nc.css('height'),0) || 0);
+
+ if (nc.data('wan') == undefined) nc.data('wan',nc.css("-webkit-transition"));
+ if (nc.data('moan') == undefined) nc.data('moan',nc.css("-moz-animation-transition"));
+ if (nc.data('man') == undefined) nc.data('man',nc.css("-ms-animation-transition"));
+ if (nc.data('ani') == undefined) nc.data('ani',nc.css("transition"));
+
+ // IE8 FIX FOR AUTO LINEHEIGHT
+ if (nc.data('lh')=="auto") nc.data('lh',nc.data('fsize')+4);
+
+
+
+
+ if (!nc.hasClass("tp-splitted")) {
+
+
+ nc.css("-webkit-transition", "none");
+ nc.css("-moz-transition", "none");
+ nc.css("-ms-transition", "none");
+ nc.css("transition", "none");
+
+ punchgs.TweenLite.set(nc,{
+ fontSize: Math.round((nc.data('fsize') * opt.bw))+"px",
+
+ letterSpacing:Math.floor((nc.data('ls') * opt.bw))+"px",
+
+ paddingTop: Math.round((nc.data('pt') * opt.bh)) + "px",
+ paddingBottom: Math.round((nc.data('pb') * opt.bh)) + "px",
+ paddingLeft: Math.round((nc.data('pl') * opt.bw)) + "px",
+ paddingRight: Math.round((nc.data('pr') * opt.bw)) + "px",
+
+ marginTop: (nc.data('mt') * opt.bh) + "px",
+ marginBottom: (nc.data('mb') * opt.bh) + "px",
+ marginLeft: (nc.data('ml') * opt.bw) + "px",
+ marginRight: (nc.data('mr') * opt.bw) + "px",
+
+ borderTopWidth: Math.round((nc.data('bt') * opt.bh)) + "px",
+ borderBottomWidth: Math.round((nc.data('bb') * opt.bh)) + "px",
+ borderLeftWidth: Math.round((nc.data('bl') * opt.bw)) + "px",
+ borderRightWidth: Math.round((nc.data('br') * opt.bw)) + "px",
+
+ lineHeight: Math.round((nc.data('lh') * opt.bh)) + "px",
+ minWidth:(nc.data('minwidth') * opt.bw) + "px",
+ minHeight:(nc.data('minheight') * opt.bh) + "px",
+
+ /* width:(nc.data('wii') * opt.bw) + "px",
+ height:(nc.data('hii') * opt.bh) + "px", */
+
+ overwrite:"auto"
+ });
+ setTimeout(function() {
+ nc.css("-webkit-transition", nc.data('wan'));
+ nc.css("-moz-transition", nc.data('moan'));
+ nc.css("-ms-transition", nc.data('man'));
+ nc.css("transition", nc.data('ani'));
+
+ },30);
+
+ //konsole.log(nc.data('maxwidth')+" "+nc.data('maxheight'));
+ if (nc.data('maxheight')!='none')
+ nc.css({'maxHeight':(nc.data('maxheight') * opt.bh) + "px"});
+
+
+ if (nc.data('maxwidth')!='none')
+ nc.css({'maxWidth':(nc.data('maxwidth') * opt.bw) + "px"});
+ }
+ }
+
+
+ /******************************
+ - CAPTION LOOPS -
+ ********************************/
+
+
+ var callCaptionLoops = function(nextcaption,factor) {
+
+ // SOME LOOPING ANIMATION ON INTERNAL ELEMENTS
+ nextcaption.find('.rs-pendulum').each(function() {
+ var el = jQuery(this);
+ if (el.data('timeline')==undefined) {
+ el.data('timeline',new punchgs.TimelineLite);
+ var startdeg = el.data('startdeg')==undefined ? -20 : el.data('startdeg'),
+ enddeg = el.data('enddeg')==undefined ? 20 : el.data('enddeg'),
+ speed = el.data('speed')==undefined ? 2 : el.data('speed'),
+ origin = el.data('origin')==undefined ? "50% 50%" : el.data('origin'),
+ easing = el.data('easing')==undefined ? punchgs.Power2.easeInOut : el.data('ease');
+
+ startdeg = startdeg * factor;
+ enddeg = enddeg * factor;
+
+ el.data('timeline').append(new punchgs.TweenLite.fromTo(el,speed,{force3D:"auto",rotation:startdeg,transformOrigin:origin},{rotation:enddeg,ease:easing}));
+ el.data('timeline').append(new punchgs.TweenLite.fromTo(el,speed,{force3D:"auto",rotation:enddeg,transformOrigin:origin},{rotation:startdeg,ease:easing,onComplete:function() {
+ el.data('timeline').restart();
+ }}));
+ }
+
+ })
+
+ // SOME LOOPING ANIMATION ON INTERNAL ELEMENTS
+ nextcaption.find('.rs-rotate').each(function() {
+ var el = jQuery(this);
+ if (el.data('timeline')==undefined) {
+ el.data('timeline',new punchgs.TimelineLite);
+ var startdeg = el.data('startdeg')==undefined ? 0 : el.data('startdeg'),
+ enddeg = el.data('enddeg')==undefined ? 360 : el.data('enddeg');
+ speed = el.data('speed')==undefined ? 2 : el.data('speed'),
+ origin = el.data('origin')==undefined ? "50% 50%" : el.data('origin'),
+ easing = el.data('easing')==undefined ? punchgs.Power2.easeInOut : el.data('easing');
+
+ startdeg = startdeg * factor;
+ enddeg = enddeg * factor;
+
+ el.data('timeline').append(new punchgs.TweenLite.fromTo(el,speed,{force3D:"auto",rotation:startdeg,transformOrigin:origin},{rotation:enddeg,ease:easing,onComplete:function() {
+ el.data('timeline').restart();
+ }}));
+ }
+
+ })
+
+ // SOME LOOPING ANIMATION ON INTERNAL ELEMENTS
+ nextcaption.find('.rs-slideloop').each(function() {
+ var el = jQuery(this);
+ if (el.data('timeline')==undefined) {
+ el.data('timeline',new punchgs.TimelineLite);
+ var xs = el.data('xs')==undefined ? 0 : el.data('xs'),
+ ys = el.data('ys')==undefined ? 0 : el.data('ys'),
+ xe = el.data('xe')==undefined ? 0 : el.data('xe'),
+ ye = el.data('ye')==undefined ? 0 : el.data('ye'),
+ speed = el.data('speed')==undefined ? 2 : el.data('speed'),
+ easing = el.data('easing')==undefined ? punchgs.Power2.easeInOut : el.data('easing');
+
+ xs = xs * factor;
+ ys = ys * factor;
+ xe = xe * factor;
+ ye = ye * factor;
+
+ el.data('timeline').append(new punchgs.TweenLite.fromTo(el,speed,{force3D:"auto",x:xs,y:ys},{x:xe,y:ye,ease:easing}));
+ el.data('timeline').append(new punchgs.TweenLite.fromTo(el,speed,{force3D:"auto",x:xe,y:ye},{x:xs,y:ys,onComplete:function() {
+ el.data('timeline').restart();
+ }}));
+ }
+
+ })
+
+ // SOME LOOPING ANIMATION ON INTERNAL ELEMENTS
+ nextcaption.find('.rs-pulse').each(function() {
+ var el = jQuery(this);
+ if (el.data('timeline')==undefined) {
+ el.data('timeline',new punchgs.TimelineLite);
+ var zoomstart = el.data('zoomstart')==undefined ? 0 : el.data('zoomstart'),
+ zoomend = el.data('zoomend')==undefined ? 0 : el.data('zoomend'),
+ speed = el.data('speed')==undefined ? 2 : el.data('speed'),
+ easing = el.data('easing')==undefined ? punchgs.Power2.easeInOut : el.data('easing');
+
+ el.data('timeline').append(new punchgs.TweenLite.fromTo(el,speed,{force3D:"auto",scale:zoomstart},{scale:zoomend,ease:easing}));
+ el.data('timeline').append(new punchgs.TweenLite.fromTo(el,speed,{force3D:"auto",scale:zoomend},{scale:zoomstart,onComplete:function() {
+ el.data('timeline').restart();
+ }}));
+ }
+
+ })
+
+ nextcaption.find('.rs-wave').each(function() {
+ var el = jQuery(this);
+ if (el.data('timeline')==undefined) {
+ el.data('timeline',new punchgs.TimelineLite);
+
+ var angle= el.data('angle')==undefined ? 10 : el.data('angle'),
+ radius = el.data('radius')==undefined ? 10 : el.data('radius'),
+ speed = el.data('speed')==undefined ? -20 : el.data('speed'),
+ origin = el.data('origin')==undefined ? -20 : el.data('origin');
+
+ angle = angle*factor;
+ radius = radius * factor;
+
+ var angobj = {a:0, ang : angle, element:el, unit:radius};
+
+
+ el.data('timeline').append(new punchgs.TweenLite.fromTo(angobj,speed,
+ { a:360 },
+ { a:0,
+ force3D:"auto",
+ ease:punchgs.Linear.easeNone,
+ onUpdate:function() {
+
+ var rad = angobj.a * (Math.PI / 180);
+ punchgs.TweenLite.to(angobj.element,0.1,{force3D:"auto",x:Math.cos(rad) * angobj.unit, y:angobj.unit * (1 - Math.sin(rad))});
+
+ },
+ onComplete:function() {
+ el.data('timeline').restart();
+ }
+ }
+ ));
+ }
+
+ })
+ }
+
+ var killCaptionLoops = function(nextcaption) {
+ // SOME LOOPING ANIMATION ON INTERNAL ELEMENTS
+ nextcaption.find('.rs-pendulum, .rs-slideloop, .rs-pulse, .rs-wave').each(function() {
+ var el = jQuery(this);
+ if (el.data('timeline')!=undefined) {
+ el.data('timeline').pause();
+ el.data('timeline',null);
+ }
+ });
+ }
+
+ //////////////////////////
+ // REMOVE THE CAPTIONS //
+ /////////////////////////
+ var removeTheCaptions = function(actli,opt) {
+
+ var removetime = 0;
+
+ var allcaptions = actli.find('.tp-caption'),
+ allstaticcaptions = opt.container.find('.tp-static-layers').find('.tp-caption');
+
+
+ jQuery.each(allstaticcaptions, function(index,staticcapt) {
+ allcaptions.push(staticcapt);
+ });
+
+ allcaptions.each(function(i) {
+
+
+
+ var staticdirection = -1; // 1 -> In, 2-> Out 0-> Ignore -1-> Not Static
+
+ var nextcaption=jQuery(this);
+ if (nextcaption.hasClass("tp-static-layer")) {
+
+ if (nextcaption.data('startslide') == -1 || nextcaption.data('startslide') == "-1")
+ nextcaption.data('startslide',0);
+
+ if (nextcaption.data('endslide') == -1 || nextcaption.data('endslide') == "-1")
+ nextcaption.data('endslide',opt.slideamount);
+
+
+
+ // IF STATIC ITEM CURRENTLY NOT VISIBLE
+ if (nextcaption.hasClass("tp-is-shown")) {
+
+ if ((nextcaption.data('startslide') > opt.next) ||
+ (nextcaption.data('endslide') < opt.next)) {
+
+ staticdirection = 2;
+ nextcaption.removeClass("tp-is-shown");
+ } else {
+ staticdirection = 0;
+ }
+ } else {
+ staticdirection = 2;
+ }
+
+
+
+ }
+
+
+
+ if (staticdirection != 0 ) {
+
+ killCaptionLoops(nextcaption);
+
+ if (nextcaption.find('iframe').length>0) {
+ // VIMEO VIDEO PAUSE
+ //if (nextcaption.data('vimeoid')!=undefined && String(nextcaption.data('vimeoid')).length>0)
+ punchgs.TweenLite.to(nextcaption.find('iframe'),0.2,{autoAlpha:0});
+ if (is_mobile()) nextcaption.find('iframe').remove();
+ try {
+ var ifr = nextcaption.find('iframe');
+ var id = ifr.attr('id');
+ var froogaloop = $f(id);
+ froogaloop.api("pause");
+ clearTimeout(nextcaption.data('timerplay'));
+ } catch(e) {}
+
+ try {
+ var player=nextcaption.data('player');
+ player.stopVideo();
+ clearTimeout(nextcaption.data('timerplay'));
+ } catch(e) {}
+ }
+
+ // IF HTML5 VIDEO IS EMBEDED
+ if (nextcaption.find('video').length>0) {
+ try{
+ nextcaption.find('video').each(function(i) {
+ var html5vid = jQuery(this).parent();
+ var videoID =html5vid.attr('id');
+ clearTimeout(html5vid.data('timerplay'));
+ var video = this;
+ video.pause();
+ })
+ }catch(e) {}
+ } // END OF VIDEO JS FUNCTIONS
+ try {
+
+ //var tl = punchgs.TimelineLite.exportRoot();
+ var tl = nextcaption.data('timeline');
+ var endstarts = tl.getLabelTime("frame99");
+ var curtime = tl.time();
+ if (endstarts>curtime) {
+
+ // WE NEED TO STOP ALL OTHER NIMATIONS
+ var tweens = tl.getTweensOf(nextcaption);
+ jQuery.each(tweens,function(index,tw) {
+
+ if (index!=0)
+ tw.pause();
+ });
+ if (nextcaption.css('opacity')!=0) {
+ var spp = nextcaption.data('endspeed') == undefined ? nextcaption.data('speed') : nextcaption.data('endspeed');
+ if (spp>removetime) removetime =spp;
+ tl.play("frame99");
+ } else
+ tl.progress(1,false);
+ }
+
+ } catch(e) {}
+
+ }
+
+ });
+
+ return removetime;
+ }
+
+ //////////////////////////////
+ // MOVE THE CAPTIONS //
+ ////////////////////////////
+ var addMoveCaption = function(nextcaption,opt,params,frame,downscale) {
+ var tl = nextcaption.data('timeline');
+
+ var newtl = new punchgs.TimelineLite();
+
+ var animobject = nextcaption;
+
+ if (params.typ == "chars") animobject = nextcaption.data('mySplitText').chars;
+ else
+ if (params.typ == "words") animobject = nextcaption.data('mySplitText').words;
+ else
+ if (params.typ == "lines") animobject = nextcaption.data('mySplitText').lines;
+ params.animation.ease = params.ease;
+
+ if (params.animation.rotationZ !=undefined) params.animation.rotation = params.animation.rotationZ;
+ params.animation.data = new Object();
+ params.animation.data.oldx = params.animation.x;
+ params.animation.data.oldy = params.animation.y;
+
+ params.animation.x = params.animation.x * downscale;
+ params.animation.y = params.animation.y * downscale;
+
+
+ tl.add(newtl.staggerTo(animobject,params.speed,params.animation,params.elementdelay),params.start);
+ tl.addLabel(frame,params.start);
+
+ nextcaption.data('timeline',tl);
+
+ }
+ //////////////////////////////
+ // MOVE OUT THE CAPTIONS //
+ ////////////////////////////
+ var endMoveCaption = function(nextcaption,opt,mdelay,backwards,frame,downscale) {
+
+ var tl = nextcaption.data('timeline'),
+ newtl = new punchgs.TimelineLite();
+
+ var frm = newAnimObject(),
+ mspeed= (nextcaption.data('endspeed') == undefined) ? nextcaption.data('speed') : nextcaption.data('endspeed'),
+ ncc = nextcaption.attr('class');
+
+ frm.ease = (nextcaption.data('endeasing') == undefined) ? punchgs.Power1.easeInOut : nextcaption.data('endeasing');
+
+ mspeed = mspeed/1000;
+
+
+
+ if (ncc.match('ltr') ||
+ ncc.match('ltl') ||
+ ncc.match('str') ||
+ ncc.match('stl') ||
+ ncc.match('ltt') ||
+ ncc.match('ltb') ||
+ ncc.match('stt') ||
+ ncc.match('stb') ||
+ ncc.match('skewtoright') ||
+ ncc.match('skewtorightshort') ||
+ ncc.match('skewtoleft') ||
+ ncc.match('skewtoleftshort') ||
+ ncc.match('fadeout') ||
+ ncc.match("randomrotateout"))
+ {
+
+ if (ncc.match('skewtoright') || ncc.match('skewtorightshort')) frm.skewX = 35
+ else
+ if (ncc.match('skewtoleft') || ncc.match('skewtoleftshort')) frm.skewX = -35
+
+
+ if (ncc.match('ltr') || ncc.match('skewtoright'))
+ frm.x=opt.width+60;
+ else if (ncc.match('ltl') || ncc.match('skewtoleft'))
+ frm.x=0-(opt.width+60);
+ else if (ncc.match('ltt'))
+ frm.y=0-(opt.height+60);
+ else if (ncc.match('ltb'))
+ frm.y=opt.height+60;
+ else if (ncc.match('str') || ncc.match('skewtorightshort')) {
+ frm.x=50;frm.opacity=0;
+ } else if (ncc.match('stl') || ncc.match('skewtoleftshort')) {
+ frm.x=-50;frm.opacity=0;
+ } else if (ncc.match('stt')) {
+ frm.y=-50;frm.opacity=0;
+ } else if (ncc.match('stb')) {
+ frm.y=50;frm.opacity=0;
+ } else if (ncc.match("randomrotateout")) {
+ frm.x = Math.random()*opt.width;
+ frm.y = Math.random()*opt.height;
+ frm.scale = Math.random()*2+0.3;
+ frm.rotation = Math.random()*360-180;
+ frm.opacity = 0;
+ } else if (ncc.match('fadeout')) {
+ frm.opacity = 0;
+ }
+
+ if (ncc.match('skewtorightshort')) frm.x = 270;
+ else
+ if (ncc.match('skewtoleftshort')) frm.x = -270
+ frm.data = new Object();
+ frm.data.oldx = frm.x;
+ frm.data.oldy = frm.y;
+ frm.x = frm.x * downscale;
+ frm.y = frm.y * downscale;
+
+ frm.overwrite="auto";
+ var animobject = nextcaption;
+ var animobject = nextcaption;
+ if (nextcaption.data('splitout') == "chars") animobject = nextcaption.data('mySplitText').chars;
+ else
+ if (nextcaption.data('splitout') == "words") animobject = nextcaption.data('mySplitText').words;
+ else
+ if (nextcaption.data('splitout') == "lines") animobject = nextcaption.data('mySplitText').lines;
+ var elemdelay = (nextcaption.data('endelementdelay') == undefined) ? 0 : nextcaption.data('endelementdelay');
+ //tl.add(punchgs.TweenLite.to(nextcaption,mspeed,frm),mdelay);
+ tl.add(newtl.staggerTo(animobject,mspeed,frm,elemdelay),mdelay);
+
+ }
+
+ else
+
+ if (nextcaption.hasClass("customout")) {
+
+ frm = getAnimDatas(frm,nextcaption.data('customout'));
+ var animobject = nextcaption;
+ if (nextcaption.data('splitout') == "chars") animobject = nextcaption.data('mySplitText').chars;
+ else
+ if (nextcaption.data('splitout') == "words") animobject = nextcaption.data('mySplitText').words;
+ else
+ if (nextcaption.data('splitout') == "lines") animobject = nextcaption.data('mySplitText').lines;
+
+ var elemdelay = (nextcaption.data('endelementdelay') == undefined) ? 0 : nextcaption.data('endelementdelay');
+ frm.onStart = function() {
+
+ punchgs.TweenLite.set(nextcaption,{
+ transformPerspective:frm.transformPerspective,
+ transformOrigin:frm.transformOrigin,
+ overwrite:"auto"
+ });
+ }
+
+ frm.data = new Object();
+ frm.data.oldx = frm.x;
+ frm.data.oldy = frm.y;
+
+ frm.x = frm.x * downscale;
+ frm.y = frm.y * downscale;
+
+ tl.add(newtl.staggerTo(animobject,mspeed,frm,elemdelay),mdelay);
+ }
+
+ else {
+ backwards.delay = 0;
+ tl.add(punchgs.TweenLite.to(nextcaption,mspeed,backwards),mdelay);
+ }
+
+
+ tl.addLabel(frame,mdelay);
+
+ nextcaption.data('timeline',tl);
+ }
+
+ ///////////////////////////
+ // REMOVE THE LISTENERS //
+ ///////////////////////////
+ var removeAllListeners = function(container,opt) {
+ container.children().each(function() {
+ try{ jQuery(this).die('click'); } catch(e) {}
+ try{ jQuery(this).die('mouseenter');} catch(e) {}
+ try{ jQuery(this).die('mouseleave');} catch(e) {}
+ try{ jQuery(this).unbind('hover');} catch(e) {}
+ })
+ try{ container.die('click','mouseenter','mouseleave');} catch(e) {}
+ clearInterval(opt.cdint);
+ container=null;
+ }
+
+ ///////////////////////////
+ // - countDown - //
+ /////////////////////////
+ var countDown = function(container,opt) {
+ opt.cd=0;
+ opt.loop=0;
+ if (opt.stopAfterLoops!=undefined && opt.stopAfterLoops>-1)
+ opt.looptogo=opt.stopAfterLoops;
+ else
+ opt.looptogo=9999999;
+
+ if (opt.stopAtSlide!=undefined && opt.stopAtSlide>-1)
+ opt.lastslidetoshow=opt.stopAtSlide;
+ else
+ opt.lastslidetoshow=999;
+
+ opt.stopLoop="off";
+
+ if (opt.looptogo==0) opt.stopLoop="on";
+
+
+ if (opt.slideamount >1 && !(opt.stopAfterLoops==0 && opt.stopAtSlide==1) ) {
+ var bt=container.find('.tp-bannertimer');
+
+
+ // LISTENERS //container.trigger('stoptimer');
+ container.on('stoptimer',function() {
+ var bt = jQuery(this).find('.tp-bannertimer');
+ bt.data('tween').pause();
+ if (opt.hideTimerBar=="on") bt.css({visibility:"hidden"});
+ });
+ container.on('starttimer',function() {
+
+ if (opt.conthover!=1 && opt.videoplaying!=true && opt.width>opt.hideSliderAtLimit && opt.bannertimeronpause != true && opt.overnav !=true)
+ if ((opt.stopLoop=="on" && opt.next==opt.lastslidetoshow-1) || opt.noloopanymore == 1)
+ opt.noloopanymore = 1;
+ else {
+
+ bt.css({visibility:"visible"});
+ bt.data('tween').resume();
+ }
+
+ if (opt.hideTimerBar=="on") bt.css({visibility:"hidden"});
+ });
+ container.on('restarttimer',function() {
+ var bt = jQuery(this).find('.tp-bannertimer');
+ if ((opt.stopLoop=="on" && opt.next==opt.lastslidetoshow-1) || opt.noloopanymore == 1)
+ opt.noloopanymore = 1;
+ else {
+
+ bt.css({visibility:"visible"});
+ bt.data('tween').kill();
+ bt.data('tween',punchgs.TweenLite.fromTo(bt,opt.delay/1000,{width:"0%"},{force3D:"auto",width:"100%",ease:punchgs.Linear.easeNone,onComplete:countDownNext,delay:1}));
+
+ }
+ if (opt.hideTimerBar=="on") bt.css({visibility:"hidden"});
+ });
+
+ container.on('nulltimer',function() {
+ bt.data('tween').pause(0);
+ if (opt.hideTimerBar=="on") bt.css({visibility:"hidden"});
+ });
+
+
+
+ var countDownNext = function() {
+ if (jQuery('body').find(container).length==0) {
+ removeAllListeners(container,opt);
+ clearInterval(opt.cdint);
+ }
+
+ container.trigger("revolution.slide.slideatend");
+
+ //STATE OF API CHANGED -> MOVE TO AIP BETTER
+ if (container.data('conthover-changed') == 1) {
+ opt.conthover= container.data('conthover');
+ container.data('conthover-changed',0);
+ }
+
+ // SWAP TO NEXT BANNER
+ opt.act=opt.next;
+ opt.next=opt.next+1;
+
+ if (opt.next>container.find('>ul >li').length-1) {
+ opt.next=0;
+ opt.looptogo=opt.looptogo-1;
+
+ if (opt.looptogo<=0) {
+ opt.stopLoop="on";
+
+ }
+ }
+
+ // STOP TIMER IF NO LOOP NO MORE NEEDED.
+
+ if (opt.stopLoop=="on" && opt.next==opt.lastslidetoshow-1) {
+ container.find('.tp-bannertimer').css({'visibility':'hidden'});
+ container.trigger('revolution.slide.onstop');
+ opt.noloopanymore = 1;
+ } else {
+ bt.data('tween').restart();
+ }
+
+ // SWAP THE SLIDES
+ swapSlide(container,opt);
+
+ }
+
+ bt.data('tween',punchgs.TweenLite.fromTo(bt,opt.delay/1000,{width:"0%"},{force3D:"auto",width:"100%",ease:punchgs.Linear.easeNone,onComplete:countDownNext,delay:1}));
+ bt.data('opt',opt);
+
+
+ container.hover(
+ function() {
+
+ if (opt.onHoverStop=="on" && (!is_mobile())) {
+ container.trigger('stoptimer');
+
+ container.trigger('revolution.slide.onpause');
+ var nextsh = container.find('>ul >li:eq('+opt.next+') .slotholder');
+ nextsh.find('.defaultimg').each(function() {
+ var dimg = jQuery(this);
+ if (dimg.data('kenburn')!=undefined) {
+ dimg.data('kenburn').pause();
+ }
+ });
+ }
+ },
+ function() {
+ if (container.data('conthover')!=1) {
+ container.trigger('revolution.slide.onresume');
+ container.trigger('starttimer');
+
+ var nextsh = container.find('>ul >li:eq('+opt.next+') .slotholder');
+ nextsh.find('.defaultimg').each(function() {
+ var dimg = jQuery(this);
+ if (dimg.data('kenburn')!=undefined) {
+ dimg.data('kenburn').play();
+ }
+ });
+ }
+ });
+ }
+ }
+
+
+ //////////////////
+ // IS MOBILE ?? //
+ //////////////////
+ var is_mobile = function() {
+ var agents = ['android', 'webos', 'iphone', 'ipad', 'blackberry','Android', 'webos', ,'iPod', 'iPhone', 'iPad', 'Blackberry', 'BlackBerry'];
+ var ismobile=false;
+ for(var i in agents) {
+
+ if (navigator.userAgent.split(agents[i]).length>1) {
+ ismobile = true;
+
+ }
+ }
+ return ismobile;
+ }
+
+
+
+/**************************************************************************
+ * Revolution Slider - PAN ZOOM MODULE
+ * @version: 1.0 (03.06.2013)
+ * @author ThemePunch
+**************************************************************************/
+
+ /***********************************************
+ - KEN BURN BACKGROUND FIT CALCULATOR -
+ ***********************************************/
+ var calculateKenBurnScales = function(proc,sloth,opt) {
+ var ow = sloth.data('owidth');
+ var oh = sloth.data('oheight');
+
+ if (ow / oh > opt.width / opt.height) {
+ var factor = (opt.container.width() /ow);
+ var nheight = oh * factor;
+ var hfactor = (nheight / opt.container.height())*proc;
+ proc = proc * (100/hfactor);
+ hfactor = 100;
+ proc = proc;
+ return (proc+"% "+hfactor+"%"+" 1");
+ } else {
+ var factor = (opt.container.width() /ow);
+ var nheight = oh * factor;
+ var hfactor = (nheight / opt.container.height())*proc;
+ return (proc+"% "+hfactor+"%");
+ }
+ }
+
+
+
+ /******************************
+ - startKenBurn -
+ ********************************/
+ var startKenBurn = function(container,opt,recalc,prepareonly) {
+
+ try{
+ var actli = container.find('>ul:first-child >li:eq('+opt.act+')');
+ } catch(e) {
+ var actli=container.find('>ul:first-child >li:eq(1)');
+ }
+
+ opt.lastslide=opt.act;
+
+
+ var nextli = container.find('>ul:first-child >li:eq('+opt.next+')'),
+ nextsh = nextli.find('.slotholder'),
+ bgps = nextsh.data('bgposition'),
+ bgpe = nextsh.data('bgpositionend'),
+ zos = nextsh.data('zoomstart')/100,
+ zoe = nextsh.data('zoomend')/100,
+ ros = nextsh.data('rotationstart'),
+ roe = nextsh.data('rotationend'),
+ bgfs = nextsh.data('bgfit'),
+ bgfe = nextsh.data('bgfitend'),
+ easeme = nextsh.data('easeme'),
+ dur = nextsh.data('duration')/1000,
+ bgfb = 100;
+
+
+ if (bgfs==undefined) bgfs=100;
+ if (bgfe==undefined) bgfe=100;
+ var obgfs = bgfs,
+ obgfe = bgfe;
+
+ bgfs = calculateKenBurnScales(bgfs,nextsh,opt);
+ bgfe = calculateKenBurnScales(bgfe,nextsh,opt);
+ bgfb = calculateKenBurnScales(100,nextsh,opt);
+
+
+ if (zos==undefined) zos=1;
+ if (zoe==undefined) zoe=1;
+ if (ros==undefined) ros=0;
+ if (roe==undefined) roe=0;
+
+ if (zos<1) zos=1;
+ if (zoe<1) zoe=1;
+
+
+ var imgobj = new Object();
+ imgobj.w = parseInt(bgfb.split(" ")[0],0),
+ imgobj.h = parseInt(bgfb.split(" ")[1],0);
+
+ var turned = false;
+ if (bgfb.split(" ")[2] == "1") {
+ turned = true;
+ }
+
+ nextsh.find('.defaultimg').each(function() {
+ var defimg = jQuery(this);
+ if (nextsh.find('.kenburnimg').length==0)
+ nextsh.append(' ');
+ else {
+ nextsh.find('.kenburnimg img').css({width:imgobj.w+'%',height:imgobj.h+'%'});
+ }
+
+
+
+ var kbimg = nextsh.find('.kenburnimg img');
+
+
+ var imgs = calculateKenBurnImgPos(opt,bgps,bgfs,kbimg,turned),
+ imge = calculateKenBurnImgPos(opt,bgpe,bgfe,kbimg,turned);
+
+ if (turned) {
+ imgs.w = obgfs/100;
+ imge.w = obgfe/100;
+ }
+
+
+
+ if (prepareonly) {
+
+ punchgs.TweenLite.set(kbimg,{autoAlpha:0,
+ transformPerspective:1200,
+ transformOrigin:"0% 0%",
+ top:0,left:0,
+ scale:imgs.w,
+ x:imgs.x,
+ y:imgs.y});
+ var sx = imgs.w,
+ ww = (sx * kbimg.width()) - opt.width,
+ hh = (sx * kbimg.height()) - opt.height,
+ hor = Math.abs((imgs.x / ww)*100),
+ ver = Math.abs((imgs.y / hh)*100);
+ if (hh==0) ver =0;
+ if (ww == 0) hor = 0;
+ defimg.data('bgposition',hor+"% "+ver+"%");
+ if (!isIE(8)) defimg.data('currotate',getRotationDegrees(kbimg));
+ if (!isIE(8)) defimg.data('curscale',(imgobj.w*sx)+"% "+(imgobj.h*sx+"%"));
+
+ nextsh.find('.kenburnimg').remove();
+ }
+ else
+ defimg.data('kenburn',punchgs.TweenLite.fromTo(kbimg,dur,{autoAlpha:1, force3D:punchgs.force3d, transformOrigin:"0% 0%", top:0,left:0, scale:imgs.w, x:imgs.x, y:imgs.y},{autoAlpha:1,rotationZ:roe,ease:easeme, x:imge.x, y:imge.y,scale:imge.w,onUpdate:function() {
+ var sx = kbimg[0]._gsTransform.scaleX;
+ var ww = (sx * kbimg.width()) - opt.width,
+ hh = (sx * kbimg.height()) - opt.height,
+ hor = Math.abs((kbimg[0]._gsTransform.x / ww)*100),
+ ver = Math.abs((kbimg[0]._gsTransform.y / hh)*100);
+ if (hh==0) ver =0;
+ if (ww == 0) hor = 0;
+
+ defimg.data('bgposition',hor+"% "+ver+"%");
+
+ if (!isIE(8)) defimg.data('currotate',getRotationDegrees(kbimg));
+ if (!isIE(8)) defimg.data('curscale',(imgobj.w*sx)+"% "+(imgobj.h*sx+"%"));
+ //punchgs.TweenLite.set(defimg,{rotation:defimg.data('currotate'), backgroundPosition:defimg.data('bgposition'), backgroundSize:defimg.data('curscale')});
+ }}));
+ })
+ }
+
+ /*************************************************
+ - CALCULATE KENBURNS IMAGE POSITIONS -
+ **************************************************/
+
+ var calculateKenBurnImgPos = function(opt,bgp,bgf,img,turned) {
+ var imgobj = new Object;
+
+ if (!turned)
+ imgobj.w = parseInt(bgf.split(" ")[0],0) / 100;
+ else
+ imgobj.w = parseInt(bgf.split(" ")[1],0) / 100;
+
+ switch(bgp) {
+ case "left top":
+ case "top left":
+ imgobj.x = 0;
+ imgobj.y = 0;
+ break;
+ case "center top":
+ case "top center":
+ imgobj.x = (((0-img.width()) * imgobj.w) + parseInt(opt.width,0))/2;
+ imgobj.y = 0;
+ break;
+ case "top right":
+ case "right top":
+ imgobj.x = ((0-img.width()) * imgobj.w) + parseInt(opt.width,0);
+ imgobj.y = 0;
+
+ break;
+ case "center left":
+ case "left center":
+ imgobj.x = 0;
+ imgobj.y = (((0-img.height()) * imgobj.w) + parseInt(opt.height,0)) / 2;
+ break;
+ case "center center":
+ imgobj.x = (((0-img.width()) * imgobj.w) + parseInt(opt.width,0))/2;
+ imgobj.y = (((0-img.height()) * imgobj.w) + parseInt(opt.height,0)) / 2;
+
+ break;
+ case "center right":
+ case "right center":
+ imgobj.x = ((0-img.width()) * imgobj.w) + parseInt(opt.width,0);
+ imgobj.y = (((0-img.height()) * imgobj.w) + parseInt(opt.height,0)) / 2;
+
+ break;
+ case "bottom left":
+ case "left bottom":
+ imgobj.x =0;
+ imgobj.y = ((0-img.height()) * imgobj.w) + parseInt(opt.height,0);
+
+ break;
+ case "bottom center":
+ case "center bottom":
+ imgobj.x = (((0-img.width()) * imgobj.w) + parseInt(opt.width,0))/2;
+ imgobj.y = ((0-img.height()) * imgobj.w) + parseInt(opt.height,0);
+ break;
+ case "bottom right":
+ case "right bottom":
+ imgobj.x = ((0-img.width()) * imgobj.w) + parseInt(opt.width,0);
+ imgobj.y = ((0-img.height()) * imgobj.w) + parseInt(opt.height,0);
+ break;
+ }
+
+
+
+ return imgobj;
+ }
+
+ /******************************
+ - GET ROTATION DEGREES -
+ ********************************/
+ var getRotationDegrees = function(obj) {
+ var matrix = obj.css("-webkit-transform") ||
+ obj.css("-moz-transform") ||
+ obj.css("-ms-transform") ||
+ obj.css("-o-transform") ||
+ obj.css("transform");
+ if(matrix !== 'none') {
+ var values = matrix.split('(')[1].split(')')[0].split(',');
+ var a = values[0];
+ var b = values[1];
+ var angle = Math.round(Math.atan2(b, a) * (180/Math.PI));
+ } else { var angle = 0; }
+ return (angle < 0) ? angle +=360 : angle;
+ }
+
+
+ /******************************
+ - STOP KEN BURN -
+ ********************************/
+ var stopKenBurn = function(container,opt) {
+
+ try{
+ var actli = container.find('>ul:first-child >li:eq('+opt.act+')');
+ } catch(e) {
+ var actli=container.find('>ul:first-child >li:eq(1)');
+ }
+
+ opt.lastslide=opt.act;
+
+ var nextli = container.find('>ul:first-child >li:eq('+opt.next+')');
+
+
+ var actsh = actli.find('.slotholder');
+ var nextsh = nextli.find('.slotholder');
+
+ container.find('.defaultimg').each(function() {
+ var defimg = jQuery(this);
+ punchgs.TweenLite.killTweensOf(defimg,false);
+ punchgs.TweenLite.set(defimg,{scale:1,rotationZ:0});
+ punchgs.TweenLite.killTweensOf(defimg.data('kenburn img'),false);
+ if (defimg.data('kenburn') != undefined) {
+ defimg.data('kenburn').pause();
+ }
+ if (defimg.data('currotate') != undefined && defimg.data('bgposition') !=undefined && defimg.data('curscale') != undefined)
+ punchgs.TweenLite.set(defimg,{rotation:defimg.data('currotate'), backgroundPosition:defimg.data('bgposition'), backgroundSize:defimg.data('curscale')});
+ if (defimg!= undefined && defimg.data('kenburn img') != undefined && defimg.data('kenburn img').length>0) punchgs.TweenLite.set(defimg.data('kenburn img'),{autoAlpha:0});
+
+ });
+ }
+
+//// END OF KENBURNS EXTNESION
+
+
+
+
+/**************************************************************************
+ * Revolution Slider - PARALLAX MODULE
+ * @version: 1.1 (23.06.2013)
+ * @author ThemePunch
+**************************************************************************/
+
+ /******************************
+ - PARALLAX EFFECT -
+ ********************************/
+ var checkForParallax = function(container,opt) {
+ if (is_mobile() && opt.parallaxDisableOnMobile=="on") return false;
+
+ container.find('>ul:first-child >li').each(function() {
+ var li = jQuery(this);
+ for (var i = 1; i<=10;i++)
+ li.find('.rs-parallaxlevel-'+i).each(function() {
+ var pw = jQuery(this);
+ pw.wrap('
');
+ });
+ })
+
+
+
+ if (opt.parallax=="mouse" || opt.parallax=="scroll+mouse" || opt.parallax=="mouse+scroll") {
+
+ container.mouseenter(function(event) {
+ var currslide = container.find('.current-sr-slide-visible');
+ var t = container.offset().top,
+ l = container.offset().left,
+ ex = (event.pageX-l),
+ ey = (event.pageY-t);
+ currslide.data("enterx",ex);
+ currslide.data("entery",ey);
+
+ })
+
+ container.on('mousemove.hoverdir, mouseleave.hoverdir',function(event) {
+ var currslide = container.find('.current-sr-slide-visible');
+ switch (event.type) {
+
+ case "mousemove":
+
+ var t = container.offset().top,
+ l = container.offset().left,
+ mh = currslide.data("enterx"),
+ mv = currslide.data("entery"),
+ diffh = (mh - (event.pageX - l)),
+ diffv = (mv - (event.pageY - t));
+
+ currslide.find(".tp-parallax-container").each(function() {
+ var pc = jQuery(this),
+ pl = parseInt(pc.data('parallaxlevel'),0)/100,
+ offsh = diffh * pl,
+ offsv = diffv * pl;
+ if (opt.parallax=="scroll+mouse" || opt.parallax=="mouse+scroll")
+ punchgs.TweenLite.to(pc,0.4,{force3D:"auto",x:offsh,ease:punchgs.Power3.easeOut,overwrite:"all"});
+ else
+ punchgs.TweenLite.to(pc,0.4,{force3D:"auto",x:offsh,y:offsv,ease:punchgs.Power3.easeOut,overwrite:"all"});
+ })
+
+ break;
+ case "mouseleave":
+ currslide.find(".tp-parallax-container").each(function() {
+ var pc = jQuery(this);
+ if (opt.parallax=="scroll+mouse" || opt.parallax=="mouse+scroll")
+ punchgs.TweenLite.to(pc,1.5,{force3D:"auto",x:0,ease:punchgs.Power3.easeOut});
+ else
+ punchgs.TweenLite.to(pc,1.5,{force3D:"auto",x:0,y:0,ease:punchgs.Power3.easeOut});
+ })
+ break;
+ }
+ });
+
+ if (is_mobile())
+ window.ondeviceorientation = function(event) {
+ var y = Math.round(event.beta || 0),
+ x = Math.round(event.gamma || 0);
+
+ var currslide = container.find('.current-sr-slide-visible');
+
+
+ if (jQuery(window).width() > jQuery(window).height()){
+ var xx = x;
+ x = y;
+ y = xx;
+
+ }
+
+ var curh = 360/container.width() * x,
+ curv = 180/container.height() * y;
+
+
+
+
+ currslide.find(".tp-parallax-container").each(function() {
+ var pc = jQuery(this),
+ pl = parseInt(pc.data('parallaxlevel'),0)/100,
+ offsh = curh * pl,
+ offsv = curv * pl;
+ punchgs.TweenLite.to(pc,0.2,{force3D:"auto",x:offsh,y:offsv,ease:punchgs.Power3.easeOut});
+ })
+
+ // y: -90 -> +90, x:-180 -> +180
+
+ //jQuery('.logo-container').html("h:"+curh+" v:"+curv);
+ }
+ }
+ if (opt.parallax=="scroll" || opt.parallax=="scroll+mouse" || opt.parallax=="mouse+scroll") {
+
+ jQuery(window).on('scroll',function(event) {
+ scrollParallax(container,opt);
+ });
+ }
+ }
+
+ /***************************************
+ - SET POST OF SCROLL PARALLAX -
+ ***************************************/
+ var scrollParallax = function(container,opt) {
+ if (is_mobile() && opt.parallaxDisableOnMobile=="on") return false;
+ var t = container.offset().top,
+ st = jQuery(window).scrollTop(),
+ dist = t+container.height()/2,
+ mv = t+container.height()/2 - st,
+ wh = jQuery(window).height()/2,
+ diffv= wh - mv;
+
+ if (dist');
+ }
+ var bullets = cap.find('.tp-bullets.tp-thumbs .tp-mask .tp-thumbcontainer');
+ var bup = bullets.parent();
+
+ bup.width(opt.thumbWidth*opt.thumbAmount);
+ bup.height(opt.thumbHeight);
+ bup.parent().width(opt.thumbWidth*opt.thumbAmount);
+ bup.parent().height(opt.thumbHeight);
+
+ container.find('>ul:first >li').each(function(i) {
+ var li= container.find(">ul:first >li:eq("+i+")");
+ var bgcolor = li.find(".defaultimg").css("backgroundColor");
+ if (li.data('thumb') !=undefined)
+ var src= li.data('thumb')
+ else
+ var src=li.find("img:first").attr('src');
+
+
+ bullets.append('
');
+ var bullet= bullets.find('.bullet:first');
+ });
+ //bullets.append('
');
+ var minwidth=10;
+
+
+ // ADD THE BULLET CLICK FUNCTION HERE
+ bullets.find('.bullet').each(function(i) {
+ var bul = jQuery(this);
+
+ if (i==opt.slideamount-1) bul.addClass('last');
+ if (i==0) bul.addClass('first');
+ bul.width(opt.thumbWidth);
+ bul.height(opt.thumbHeight);
+
+ if (minwidthul:first >li').length;
+
+ var thumbconwidth=bullets.parent().width();
+ opt.thumbWidth = minwidth;
+
+
+
+ ////////////////////////
+ // SLIDE TO POSITION //
+ ////////////////////////
+ if (thumbconwidthul:first >li').length,
+ diff=(max- thumbconwidth)+15,
+ steps = diff / thumbconwidth;
+
+ $this.addClass("over");
+ x=x-30;
+
+ //ANIMATE TO POSITION
+ var pos=(0-((x)*steps));
+ if (pos>0) pos =0;
+ if (pos<0-max+thumbconwidth) pos=0-max+thumbconwidth;
+ moveThumbSliderToPosition($this,pos,200);
+ });
+
+ bullets.parent().mousemove(function() {
+
+ var $this=jQuery(this),
+ offset = $this.offset(),
+ x = jQuery('body').data('mousex')-offset.left,
+ thumbconwidth=$this.width(),
+ minwidth=$this.find('.bullet:first').outerWidth(true),
+ max=minwidth*container.find('>ul:first >li').length-1,
+ diff=(max- thumbconwidth)+15,
+ steps = diff / thumbconwidth;
+
+ x=x-3;
+ if (x<6) x=0;
+ if (x+3>thumbconwidth-6) x=thumbconwidth;
+
+ //ANIMATE TO POSITION
+ var pos=(0-((x)*steps));
+ if (pos>0) pos =0;
+ if (pos<0-max+thumbconwidth) pos=0-max+thumbconwidth;
+ moveThumbSliderToPosition($this,pos,0);
+
+ });
+
+ bullets.parent().mouseleave(function() {
+ var $this=jQuery(this);
+ $this.removeClass("over");
+ moveSelectedThumb(container);
+ });
+ }
+
+
+ }
+
+
+ ///////////////////////////////
+ // SelectedThumbInPosition //
+ //////////////////////////////
+ var moveSelectedThumb = function(container) {
+
+ var bullets=container.parent().find('.tp-bullets.tp-thumbs .tp-mask .tp-thumbcontainer'),
+ $this=bullets.parent(),
+ offset = $this.offset(),
+ minwidth=$this.find('.bullet:first').outerWidth(true),
+ x = $this.find('.bullet.selected').index() * minwidth,
+ thumbconwidth=$this.width(),
+ minwidth=$this.find('.bullet:first').outerWidth(true),
+ max=minwidth*container.find('>ul:first >li').length,
+ diff=(max- thumbconwidth),
+ steps = diff / thumbconwidth,
+ pos=0-x;
+
+ if (pos>0) pos =0;
+ if (pos<0-max+thumbconwidth) pos=0-max+thumbconwidth;
+ if (!$this.hasClass("over")) {
+ moveThumbSliderToPosition($this,pos,200);
+ }
+ }
+
+
+ ////////////////////////////////////
+ // MOVE THUMB SLIDER TO POSITION //
+ ///////////////////////////////////
+ var moveThumbSliderToPosition = function($this,pos,speed) {
+ punchgs.TweenLite.to($this.find('.tp-thumbcontainer'),0.2,{force3D:"auto",left:pos,ease:punchgs.Power3.easeOut,overwrite:"auto"});
+ }
+})(jQuery);
+
+
+
+/// END OF THUMBNAIL EXTNESIONS
+
+
+
+
+
+
+// SOME ERROR MESSAGES IN CASE THE PLUGIN CAN NOT BE LOADED
+function revslider_showDoubleJqueryError(sliderID) {
+ var errorMessage = "Revolution Slider Error: You have some jquery.js library include that comes after the revolution files js include.";
+ errorMessage += " This includes make eliminates the revolution slider libraries, and make it not work.";
+ errorMessage += " To fix it you can: 1. In the Slider Settings -> Troubleshooting set option: Put JS Includes To Body option to true.";
+ errorMessage += " 2. Find the double jquery.js include and remove it.";
+ errorMessage = "" + errorMessage + " "
+ jQuery(sliderID).show().html(errorMessage);
+}
+
+
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/js/jquery.themepunch.revolution.min.js b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/js/jquery.themepunch.revolution.min.js
new file mode 100644
index 00000000..7fb1b8bb
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/js/jquery.themepunch.revolution.min.js
@@ -0,0 +1,9 @@
+/**************************************************************************
+ * jquery.themepunch.revolution.js - jQuery Plugin for Revolution Slider
+ * @version: 4.6.4 (26.11.2014)
+ * @requires jQuery v1.7 or later (tested on 1.9)
+ * @author ThemePunch
+**************************************************************************/
+
+
+function revslider_showDoubleJqueryError(e){var t="Revolution Slider Error: You have some jquery.js library include that comes after the revolution files js include.";t+=" This includes make eliminates the revolution slider libraries, and make it not work.";t+=" To fix it you can: 1. In the Slider Settings -> Troubleshooting set option: Put JS Includes To Body option to true.";t+=" 2. Find the double jquery.js include and remove it.";t=""+t+" ";jQuery(e).show().html(t)}(function(e,t){function n(){var e=false;if(navigator.userAgent.match(/iPhone/i)||navigator.userAgent.match(/iPod/i)||navigator.userAgent.match(/iPad/i)){if(navigator.userAgent.match(/OS 4_\d like Mac OS X/i)){e=true}}else{e=false}return e}function r(r,i){if(r==t)return false;if(r.data("aimg")!=t){if(r.data("aie8")=="enabled"&&a(8)||r.data("amobile")=="enabled"&&J())r.html(' ')}if(i.navigationStyle=="preview1"||i.navigationStyle=="preview3"||i.navigationStyle=="preview4"){i.soloArrowLeftHalign="left";i.soloArrowLeftValign="center";i.soloArrowLeftHOffset=0;i.soloArrowLeftVOffset=0;i.soloArrowRightHalign="right";i.soloArrowRightValign="center";i.soloArrowRightHOffset=0;i.soloArrowRightVOffset=0;i.navigationArrows="solo"}if(i.simplifyAll=="on"&&(a(8)||n())){r.find(".tp-caption").each(function(){var t=e(this);t.removeClass("customin").removeClass("customout").addClass("fadein").addClass("fadeout");t.data("splitin","");t.data("speed",400)});r.find(">ul>li").each(function(){var t=e(this);t.data("transition","fade");t.data("masterspeed",500);t.data("slotamount",1);var n=t.find(">img").first();n.data("kenburns","off")})}i.desktop=!navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|BB10|mobi|tablet|opera mini|nexus 7)/i);if(i.fullWidth!="on"&&i.fullScreen!="on")i.autoHeight="off";if(i.fullScreen=="on")i.autoHeight="on";if(i.fullWidth!="on"&&i.fullScreen!="on")forceFulWidth="off";if(i.fullWidth=="on"&&i.autoHeight=="off")r.css({maxHeight:i.startheight+"px"});if(J()&&i.hideThumbsOnMobile=="on"&&i.navigationType=="thumb")i.navigationType="none";if(J()&&i.hideBulletsOnMobile=="on"&&i.navigationType=="bullet")i.navigationType="none";if(J()&&i.hideBulletsOnMobile=="on"&&i.navigationType=="both")i.navigationType="none";if(J()&&i.hideArrowsOnMobile=="on")i.navigationArrows="none";if(i.forceFullWidth=="on"&&r.closest(".forcefullwidth_wrapper_tp_banner").length==0){var f=r.parent().offset().left;var v=r.parent().css("marginBottom");var m=r.parent().css("marginTop");if(v==t)v=0;if(m==t)m=0;r.parent().wrap('
');r.closest(".forcefullwidth_wrapper_tp_banner").append('
');r.css({backgroundColor:r.parent().css("backgroundColor"),backgroundImage:r.parent().css("backgroundImage")});r.parent().css({left:0-f+"px",position:"absolute",width:e(window).width()});i.width=e(window).width()}try{if(i.hideThumbsUnderResolution>e(window).width()&&i.hideThumbsUnderResolution!=0){r.parent().find(".tp-bullets.tp-thumbs").css({display:"none"})}else{r.parent().find(".tp-bullets.tp-thumbs").css({display:"block"})}}catch(g){}if(!r.hasClass("revslider-initialised")){r.addClass("revslider-initialised");if(r.attr("id")==t)r.attr("id","revslider-"+Math.round(Math.random()*1e3+5));i.firefox13=false;i.ie=!e.support.opacity;i.ie9=document.documentMode==9;i.origcd=i.delay;var b=e.fn.jquery.split("."),w=parseFloat(b[0]),E=parseFloat(b[1]),S=parseFloat(b[2]||"0");if(w==1&&E<7){r.html(' The Current Version of jQuery:'+b+" Please update your jQuery Version to min. 1.7 in Case you wish to use the Revolution Slider Plugin
")}if(w>1)i.ie=false;if(!e.support.transition)e.fn.transition=e.fn.animate;r.find(".caption").each(function(){e(this).addClass("tp-caption")});if(J()){r.find(".tp-caption").each(function(){var t=e(this);if(t.data("autoplayonlyfirsttime")==true||t.data("autoplayonlyfirsttime")=="true")t.data("autoplayonlyfirsttime","false");if(t.data("autoplay")==true||t.data("autoplay")=="true")t.data("autoplay",false)})}var x=0;var T=0;var C=0;var k="http";if(location.protocol==="https:"){k="https"}r.find(".tp-caption").each(function(n){try{if((e(this).data("ytid")!=t||e(this).find("iframe").attr("src").toLowerCase().indexOf("youtube")>0)&&x==0){x=1;var r=document.createElement("script");var i="https";r.src=i+"://www.youtube.com/iframe_api";var s=document.getElementsByTagName("script")[0];var o=true;e("head").find("*").each(function(){if(e(this).attr("src")==i+"://www.youtube.com/iframe_api")o=false});if(o){s.parentNode.insertBefore(r,s)}}}catch(u){}try{if((e(this).data("vimeoid")!=t||e(this).find("iframe").attr("src").toLowerCase().indexOf("vimeo")>0)&&T==0){T=1;var a=document.createElement("script");a.src=k+"://a.vimeocdn.com/js/froogaloop2.min.js";var s=document.getElementsByTagName("script")[0];var o=true;e("head").find("*").each(function(){if(e(this).attr("src")==k+"://a.vimeocdn.com/js/froogaloop2.min.js")o=false});if(o)s.parentNode.insertBefore(a,s)}}catch(u){}try{if(e(this).data("videomp4")!=t||e(this).data("videowebm")!=t){}}catch(u){}});r.find(".tp-caption video").each(function(t){e(this).removeClass("video-js").removeClass("vjs-default-skin");e(this).attr("preload","");e(this).css({display:"none"})});r.find(">ul:first-child >li").each(function(){var t=e(this);t.data("origindex",t.index())});if(i.shuffle=="on"){var L=new Object,A=r.find(">ul:first-child >li:first-child");L.fstransition=A.data("fstransition");L.fsmasterspeed=A.data("fsmasterspeed");L.fsslotamount=A.data("fsslotamount");for(var O=0;Oul:first-child >li").length;O++){var M=Math.round(Math.random()*r.find(">ul:first-child >li").length);r.find(">ul:first-child >li:eq("+M+")").prependTo(r.find(">ul:first-child"))}var _=r.find(">ul:first-child >li:first-child");_.data("fstransition",L.fstransition);_.data("fsmasterspeed",L.fsmasterspeed);_.data("fsslotamount",L.fsslotamount)}i.slots=4;i.act=-1;i.next=0;if(i.startWithSlide!=t)i.next=i.startWithSlide;var D=o("#")[0];if(D.length<9){if(D.split("slide").length>1){var P=parseInt(D.split("slide")[1],0);if(P<1)P=1;if(P>r.find(">ul:first >li").length)P=r.find(">ul:first >li").length;i.next=P-1}}i.firststart=1;if(i.navigationHOffset==t)i.navOffsetHorizontal=0;if(i.navigationVOffset==t)i.navOffsetVertical=0;r.append('");if(r.find(".tp-bannertimer").length==0)r.append('
');var H=r.find(".tp-bannertimer");if(H.length>0){H.css({width:"0%"})}r.addClass("tp-simpleresponsive");i.container=r;i.slideamount=r.find(">ul:first >li").length;if(r.height()==0)r.height(i.startheight);if(i.startwidth==t||i.startwidth==0)i.startwidth=r.width();if(i.startheight==t||i.startheight==0)i.startheight=r.height();i.width=r.width();i.height=r.height();i.bw=i.startwidth/r.width();i.bh=i.startheight/r.height();if(i.width!=i.startwidth){i.height=Math.round(i.startheight*(i.width/i.startwidth));r.height(i.height)}if(i.shadow!=0){r.parent().append('
');var f=0;if(i.forceFullWidth=="on")f=0-i.container.parent().offset().left;r.parent().find(".tp-bannershadow").css({width:i.width,left:f})}r.find("ul").css({display:"none"});var B=r;r.find("ul").css({display:"block"});y(r,i);if(i.parallax!="off")et(r,i);if(i.slideamount>1)l(r,i);if(i.slideamount>1&&i.navigationType=="thumb")nt(r,i);if(i.slideamount>1)c(r,i);if(i.keyboardNavigation=="on")h(r,i);p(r,i);if(i.hideThumbs>0)d(r,i);setTimeout(function(){N(r,i)},i.startDelay);i.startDelay=0;if(i.slideamount>1)$(r,i);setTimeout(function(){r.trigger("revolution.slide.onloaded")},500);e("body").data("rs-fullScreenMode",false);e(window).on("mozfullscreenchange webkitfullscreenchange fullscreenchange",function(){e("body").data("rs-fullScreenMode",!e("body").data("rs-fullScreenMode"));if(e("body").data("rs-fullScreenMode")){setTimeout(function(){e(window).trigger("resize")},200)}});var j="resize.revslider-"+r.attr("id");e(window).on(j,function(){if(r==t)return false;if(e("body").find(r)!=0)if(i.forceFullWidth=="on"){var n=i.container.closest(".forcefullwidth_wrapper_tp_banner").offset().left;i.container.parent().css({left:0-n+"px",width:e(window).width()})}if(r.outerWidth(true)!=i.width||r.is(":hidden")){u(r,i)}});try{if(i.hideThumbsUnderResoluition!=0&&i.navigationType=="thumb"){if(i.hideThumbsUnderResoluition>e(window).width())e(".tp-bullets").css({display:"none"});else e(".tp-bullets").css({display:"block"})}}catch(g){}r.find(".tp-scrollbelowslider").on("click",function(){var t=0;try{t=e("body").find(i.fullScreenOffsetContainer).height()}catch(n){}try{t=t-parseInt(e(this).data("scrolloffset"),0)}catch(n){}e("body,html").animate({scrollTop:r.offset().top+r.find(">ul >li").height()-t+"px"},{duration:400})});var F=r.parent();if(e(window).width()0&&e("body").find("#"+r.attr("id")).length>0)e("body,html").animate({scrollTop:r.offset().top+r.find(">ul >li").height()-n+"px"},{duration:400})})},revredraw:function(n){return this.each(function(){var n=e(this);if(n!=t&&n.length>0&&e("body").find("#"+n.attr("id")).length>0){var r=n.parent().find(".tp-bannertimer");var i=r.data("opt");u(n,i)}})},revkill:function(n){var r=this,i=e(this);if(i!=t&&i.length>0&&e("body").find("#"+i.attr("id")).length>0){i.data("conthover",1);i.data("conthover-changed",1);i.trigger("revolution.slide.onpause");var s=i.parent().find(".tp-bannertimer");var o=s.data("opt");o.bannertimeronpause=true;i.trigger("stoptimer");punchgs.TweenLite.killTweensOf(i.find("*"),false);punchgs.TweenLite.killTweensOf(i,false);i.unbind("hover, mouseover, mouseenter,mouseleave, resize");var u="resize.revslider-"+i.attr("id");e(window).off(u);i.find("*").each(function(){var n=e(this);n.unbind("on, hover, mouseenter,mouseleave,mouseover, resize,restarttimer, stoptimer");n.off("on, hover, mouseenter,mouseleave,mouseover, resize");n.data("mySplitText",null);n.data("ctl",null);if(n.data("tween")!=t)n.data("tween").kill();if(n.data("kenburn")!=t)n.data("kenburn").kill();n.remove();n.empty();n=null});punchgs.TweenLite.killTweensOf(i.find("*"),false);punchgs.TweenLite.killTweensOf(i,false);s.remove();try{i.closest(".forcefullwidth_wrapper_tp_banner").remove()}catch(a){}try{i.closest(".rev_slider_wrapper").remove()}catch(a){}try{i.remove()}catch(a){}i.empty();i.html();i=null;o=null;delete r.container;delete r.opt;return true}else{return false}},revpause:function(n){return this.each(function(){var n=e(this);if(n!=t&&n.length>0&&e("body").find("#"+n.attr("id")).length>0){n.data("conthover",1);n.data("conthover-changed",1);n.trigger("revolution.slide.onpause");var r=n.parent().find(".tp-bannertimer");var i=r.data("opt");i.bannertimeronpause=true;n.trigger("stoptimer")}})},revresume:function(n){return this.each(function(){var n=e(this);if(n!=t&&n.length>0&&e("body").find("#"+n.attr("id")).length>0){n.data("conthover",0);n.data("conthover-changed",1);n.trigger("revolution.slide.onresume");var r=n.parent().find(".tp-bannertimer");var i=r.data("opt");i.bannertimeronpause=false;n.trigger("starttimer")}})},revnext:function(n){return this.each(function(){var n=e(this);if(n!=t&&n.length>0&&e("body").find("#"+n.attr("id")).length>0)n.parent().find(".tp-rightarrow").click()})},revprev:function(n){return this.each(function(){var n=e(this);if(n!=t&&n.length>0&&e("body").find("#"+n.attr("id")).length>0)n.parent().find(".tp-leftarrow").click()})},revmaxslide:function(t){return e(this).find(">ul:first-child >li").length},revcurrentslide:function(n){var r=e(this);if(r!=t&&r.length>0&&e("body").find("#"+r.attr("id")).length>0){var i=r.parent().find(".tp-bannertimer");var s=i.data("opt");return s.act}},revlastslide:function(n){var r=e(this);if(r!=t&&r.length>0&&e("body").find("#"+r.attr("id")).length>0){var i=r.parent().find(".tp-bannertimer");var s=i.data("opt");return s.lastslide}},revshowslide:function(n){return this.each(function(){var r=e(this);if(r!=t&&r.length>0&&e("body").find("#"+r.attr("id")).length>0){r.data("showus",n);r.parent().find(".tp-rightarrow").click()}})}});var i=function(){var e,t,n={hidden:"visibilitychange",webkitHidden:"webkitvisibilitychange",mozHidden:"mozvisibilitychange",msHidden:"msvisibilitychange"};for(e in n){if(e in document){t=n[e];break}}return function(n){if(n)document.addEventListener(t,n);return!document[e]}}();var s=function(n,r){var i=document.documentMode===t,s=window.chrome;if(i&&!s){e(window).on("focusin",function(){if(n==t)return false;setTimeout(function(){if(r.nextSlideOnWindowFocus=="on")n.revnext();n.revredraw()},300)}).on("focusout",function(){})}else{if(window.addEventListener){window.addEventListener("focus",function(e){if(n==t)return false;setTimeout(function(){if(r.nextSlideOnWindowFocus=="on")n.revnext();n.revredraw()},300)},false);window.addEventListener("blur",function(e){},false)}else{window.attachEvent("focus",function(e){setTimeout(function(){if(n==t)return false;if(r.nextSlideOnWindowFocus=="on")n.revnext();n.revredraw()},300)});window.attachEvent("blur",function(e){})}}};var o=function(e){var t=[],n;var r=window.location.href.slice(window.location.href.indexOf(e)+1).split("_");for(var i=0;ie(window).width())e(".tp-bullets").css({display:"none"});else e(".tp-bullets").css({display:"block"})}}catch(i){}n.find(".defaultimg").each(function(t){g(e(this),r)});var s=n.parent();if(e(window).width()ul >li:eq("+r.act+") .slotholder");var f=n.find(">ul >li:eq("+r.next+") .slotholder");E(n,r,n);punchgs.TweenLite.set(f.find(".defaultimg"),{opacity:0});a.find(".defaultimg").css({opacity:1});f.find(".defaultimg").each(function(){var i=e(this);if(r.panZoomDisableOnMobile=="on"){}else{if(i.data("kenburn")!=t){i.data("kenburn").restart();Q(n,r,true)}}});var l=n.find(">ul >li:eq("+r.next+")");var c=n.parent().find(".tparrows");if(c.hasClass("preview2"))c.css({width:parseInt(c.css("minWidth"),0)});j(l,r,true);v(n,r)};var a=function(t,n){var r=e('
').appendTo(e("body"));r.html("");var i=r.find("a").length;r.remove();return i};var f=function(e,t){if(e.next==t.find(">ul >li").length-1){e.looptogo=e.looptogo-1;if(e.looptogo<=0)e.stopLoop="on"}N(t,e)};var l=function(t,n){var r="hidebullets";if(n.hideThumbs==0)r="";if(n.navigationType=="bullet"||n.navigationType=="both"){t.parent().append('
')}var i=t.parent().find(".tp-bullets");t.find(">ul:first >li").each(function(e){var n=t.find(">ul:first >li:eq("+e+") img:first").attr("src");i.append('
');var r=i.find(".bullet:first")});i.find(".bullet").each(function(r){var i=e(this);if(r==n.slideamount-1)i.addClass("last");if(r==0)i.addClass("first");i.click(function(){var e=false,r=i.index();if(n.navigationArrows=="withbullet"||n.navigationArrows=="nexttobullets")r=i.index()-1;if(r==n.act)e=true;if(n.transition==0&&!e){n.next=r;f(n,t)}})});i.append('
');v(t,n)};var c=function(e,n){function u(t){e.parent().append('')}var r=e.find(".tp-bullets"),i="",s="hidearrows",o=n.navigationStyle;if(n.hideThumbs==0)s="";if(n.navigationArrows=="none")i="visibility:hidden;display:none";n.soloArrowStyle="default"+" "+n.navigationStyle;if(n.navigationArrows!="none"&&n.navigationArrows!="nexttobullets")o=n.soloArrowStyle;u("left");u("right");e.parent().find(".tp-rightarrow").click(function(){if(n.transition==0){if(e.data("showus")!=t&&e.data("showus")!=-1)n.next=e.data("showus")-1;else n.next=n.next+1;e.data("showus",-1);if(n.next>=n.slideamount)n.next=0;if(n.next<0)n.next=0;if(n.act!=n.next)f(n,e)}});e.parent().find(".tp-leftarrow").click(function(){if(n.transition==0){n.next=n.next-1;n.leftarrowpressed=1;if(n.next<0)n.next=n.slideamount-1;f(n,e)}});v(e,n)};var h=function(n,r){e(document).keydown(function(e){if(r.transition==0&&e.keyCode==39){if(n.data("showus")!=t&&n.data("showus")!=-1)r.next=n.data("showus")-1;else r.next=r.next+1;n.data("showus",-1);if(r.next>=r.slideamount)r.next=0;if(r.next<0)r.next=0;if(r.act!=r.next)f(r,n)}if(r.transition==0&&e.keyCode==37){r.next=r.next-1;r.leftarrowpressed=1;if(r.next<0)r.next=r.slideamount-1;f(r,n)}});v(n,r)};var p=function(t,n){var r="vertical";if(n.touchenabled=="on"){if(n.drag_block_vertical==true)r="none";t.swipe({allowPageScroll:r,fingers:n.swipe_min_touches,treshold:n.swipe_treshold,swipe:function(i,s,o,u,a,l){switch(s){case"left":if(n.transition==0){n.next=n.next+1;if(n.next==n.slideamount)n.next=0;f(n,t)}break;case"right":if(n.transition==0){n.next=n.next-1;n.leftarrowpressed=1;if(n.next<0)n.next=n.slideamount-1;f(n,t)}break;case"up":if(r=="none")e("html, body").animate({scrollTop:t.offset().top+t.height()+"px"});break;case"down":if(r=="none")e("html, body").animate({scrollTop:t.offset().top-e(window).height()+"px"});break}}})}};var d=function(e,t){var n=e.parent().find(".tp-bullets"),r=e.parent().find(".tparrows");if(n==null){e.append('
');var n=e.parent().find(".tp-bullets")}if(r==null){e.append('
');var r=e.parent().find(".tparrows")}e.data("hideThumbs",t.hideThumbs);n.addClass("hidebullets");r.addClass("hidearrows");if(J()){try{e.hammer().on("touch",function(){e.addClass("hovered");if(t.onHoverStop=="on")e.trigger("stoptimer");clearTimeout(e.data("hideThumbs"));n.removeClass("hidebullets");r.removeClass("hidearrows")});e.hammer().on("release",function(){e.removeClass("hovered");e.trigger("starttimer");if(!e.hasClass("hovered")&&!n.hasClass("hovered"))e.data("hideThumbs",setTimeout(function(){n.addClass("hidebullets");r.addClass("hidearrows");e.trigger("starttimer")},t.hideNavDelayOnMobile))})}catch(i){}}else{n.hover(function(){t.overnav=true;if(t.onHoverStop=="on")e.trigger("stoptimer");n.addClass("hovered");clearTimeout(e.data("hideThumbs"));n.removeClass("hidebullets");r.removeClass("hidearrows")},function(){t.overnav=false;e.trigger("starttimer");n.removeClass("hovered");if(!e.hasClass("hovered")&&!n.hasClass("hovered"))e.data("hideThumbs",setTimeout(function(){n.addClass("hidebullets");r.addClass("hidearrows")},t.hideThumbs))});r.hover(function(){t.overnav=true;if(t.onHoverStop=="on")e.trigger("stoptimer");n.addClass("hovered");clearTimeout(e.data("hideThumbs"));n.removeClass("hidebullets");r.removeClass("hidearrows")},function(){t.overnav=false;e.trigger("starttimer");n.removeClass("hovered")});e.on("mouseenter",function(){e.addClass("hovered");if(t.onHoverStop=="on")e.trigger("stoptimer");clearTimeout(e.data("hideThumbs"));n.removeClass("hidebullets");r.removeClass("hidearrows")});e.on("mouseleave",function(){e.removeClass("hovered");e.trigger("starttimer");if(!e.hasClass("hovered")&&!n.hasClass("hovered"))e.data("hideThumbs",setTimeout(function(){n.addClass("hidebullets");r.addClass("hidearrows")},t.hideThumbs))})}};var v=function(t,n){var r=t.parent();var i=r.find(".tp-bullets");if(n.navigationType=="thumb"){i.find(".thumb").each(function(t){var r=e(this);r.css({width:n.thumbWidth*n.bw+"px",height:n.thumbHeight*n.bh+"px"})});var s=i.find(".tp-mask");s.width(n.thumbWidth*n.thumbAmount*n.bw);s.height(n.thumbHeight*n.bh);s.parent().width(n.thumbWidth*n.thumbAmount*n.bw);s.parent().height(n.thumbHeight*n.bh)}var o=r.find(".tp-leftarrow");var u=r.find(".tp-rightarrow");if(n.navigationType=="thumb"&&n.navigationArrows=="nexttobullets")n.navigationArrows="solo";if(n.navigationArrows=="nexttobullets"){o.prependTo(i).css({"float":"left"});u.insertBefore(i.find(".tpclear")).css({"float":"left"})}var a=0;if(n.forceFullWidth=="on")a=0-n.container.parent().offset().left;var f=0,l=0;if(n.navigationInGrid=="on"){f=t.width()>n.startwidth?(t.width()-n.startwidth)/2:0,l=t.height()>n.startheight?(t.height()-n.startheight)/2:0}if(n.navigationArrows!="none"&&n.navigationArrows!="nexttobullets"){var c=n.soloArrowLeftValign,h=n.soloArrowLeftHalign,p=n.soloArrowRightValign,d=n.soloArrowRightHalign,v=n.soloArrowLeftVOffset,m=n.soloArrowLeftHOffset,g=n.soloArrowRightVOffset,y=n.soloArrowRightHOffset;o.css({position:"absolute"});u.css({position:"absolute"});if(c=="center")o.css({top:"50%",marginTop:v-Math.round(o.innerHeight()/2)+"px"});else if(c=="bottom")o.css({top:"auto",bottom:0+v+"px"});else if(c=="top")o.css({bottom:"auto",top:0+v+"px"});if(h=="center")o.css({left:"50%",marginLeft:a+m-Math.round(o.innerWidth()/2)+"px"});else if(h=="left")o.css({left:f+m+a+"px"});else if(h=="right")o.css({right:f+m-a+"px"});if(p=="center")u.css({top:"50%",marginTop:g-Math.round(u.innerHeight()/2)+"px"});else if(p=="bottom")u.css({top:"auto",bottom:0+g+"px"});else if(p=="top")u.css({bottom:"auto",top:0+g+"px"});if(d=="center")u.css({left:"50%",marginLeft:a+y-Math.round(u.innerWidth()/2)+"px"});else if(d=="left")u.css({left:f+y+a+"px"});else if(d=="right")u.css({right:f+y-a+"px"});if(o.position()!=null)o.css({top:Math.round(parseInt(o.position().top,0))+"px"});if(u.position()!=null)u.css({top:Math.round(parseInt(u.position().top,0))+"px"})}if(n.navigationArrows=="none"){o.css({visibility:"hidden"});u.css({visibility:"hidden"})}var b=n.navigationVAlign,w=n.navigationHAlign,E=n.navigationVOffset*n.bh,S=n.navigationHOffset*n.bw;if(b=="center")i.css({top:"50%",marginTop:E-Math.round(i.innerHeight()/2)+"px"});if(b=="bottom")i.css({bottom:0+E+"px"});if(b=="top")i.css({top:0+E+"px"});if(w=="center")i.css({left:"50%",marginLeft:a+S-Math.round(i.innerWidth()/2)+"px"});if(w=="left")i.css({left:0+S+a+"px"});if(w=="right")i.css({right:0+S-a+"px"})};var m=function(n){var r=n.container;n.beforli=n.next-1;n.comingli=n.next+1;if(n.beforli<0)n.beforli=n.slideamount-1;if(n.comingli>=n.slideamount)n.comingli=0;var i=r.find(">ul:first-child >li:eq("+n.comingli+")"),s=r.find(">ul:first-child >li:eq("+n.beforli+")"),o=s.find(".defaultimg").attr("src"),u=i.find(".defaultimg").attr("src");if(n.arr==t){n.arr=r.parent().find(".tparrows"),n.rar=r.parent().find(".tp-rightarrow"),n.lar=r.parent().find(".tp-leftarrow"),n.raimg=n.rar.find(".tp-arr-imgholder"),n.laimg=n.lar.find(".tp-arr-imgholder"),n.raimg_b=n.rar.find(".tp-arr-imgholder2"),n.laimg_b=n.lar.find(".tp-arr-imgholder2"),n.ratit=n.rar.find(".tp-arr-titleholder"),n.latit=n.lar.find(".tp-arr-titleholder")}var a=n.arr,f=n.rar,l=n.lar,c=n.raimg,h=n.laimg,p=n.raimg_b,d=n.laimg_b,v=n.ratit,m=n.latit;if(i.data("title")!=t)v.html(i.data("title"));if(s.data("title")!=t)m.html(s.data("title"));if(f.hasClass("itishovered")){f.width(v.outerWidth(true)+parseInt(f.css("minWidth"),0))}if(l.hasClass("itishovered")){l.width(m.outerWidth(true)+parseInt(l.css("minWidth"),0))}if(a.hasClass("preview2")&&!a.hasClass("hashoveralready")){a.addClass("hashoveralready");if(!J())a.hover(function(){var t=e(this),n=t.find(".tp-arr-titleholder");if(e(window).width()>767)t.width(n.outerWidth(true)+parseInt(t.css("minWidth"),0));t.addClass("itishovered")},function(){var t=e(this),n=t.find(".tp-arr-titleholder");t.css({width:parseInt(t.css("minWidth"),0)});t.removeClass("itishovered")});else{var a=e(this),g=a.find(".tp-arr-titleholder");g.addClass("alwayshidden");punchgs.TweenLite.set(g,{autoAlpha:0})}}if(s.data("thumb")!=t)o=s.data("thumb");if(i.data("thumb")!=t)u=i.data("thumb");if(!a.hasClass("preview4")){punchgs.TweenLite.to(c,.5,{autoAlpha:0,onComplete:function(){c.css({backgroundImage:"url("+u+")"});h.css({backgroundImage:"url("+o+")"})}});punchgs.TweenLite.to(h,.5,{autoAlpha:0,onComplete:function(){punchgs.TweenLite.to(c,.5,{autoAlpha:1,delay:.2});punchgs.TweenLite.to(h,.5,{autoAlpha:1,delay:.2})}})}else{p.css({backgroundImage:"url("+u+")"});d.css({backgroundImage:"url("+o+")"});punchgs.TweenLite.fromTo(p,.8,{force3D:punchgs.force3d,x:0},{x:-c.width(),ease:punchgs.Power3.easeOut,delay:1,onComplete:function(){c.css({backgroundImage:"url("+u+")"});punchgs.TweenLite.set(p,{x:0})}});punchgs.TweenLite.fromTo(d,.8,{force3D:punchgs.force3d,x:0},{x:c.width(),ease:punchgs.Power3.easeOut,delay:1,onComplete:function(){h.css({backgroundImage:"url("+o+")"});punchgs.TweenLite.set(d,{x:0})}});punchgs.TweenLite.fromTo(c,.8,{x:0},{force3D:punchgs.force3d,x:-c.width(),ease:punchgs.Power3.easeOut,delay:1,onComplete:function(){punchgs.TweenLite.set(c,{x:0})}});punchgs.TweenLite.fromTo(h,.8,{x:0},{force3D:punchgs.force3d,x:c.width(),ease:punchgs.Power3.easeOut,delay:1,onComplete:function(){punchgs.TweenLite.set(h,{x:0})}})}if(f.hasClass("preview4")&&!f.hasClass("hashoveralready")){f.addClass("hashoveralready");f.hover(function(){var t=e(this).find(".tp-arr-iwrapper");var n=e(this).find(".tp-arr-allwrapper");punchgs.TweenLite.fromTo(t,.4,{x:t.width()},{x:0,delay:.3,ease:punchgs.Power3.easeOut,overwrite:"all"});punchgs.TweenLite.to(n,.2,{autoAlpha:1,overwrite:"all"})},function(){var t=e(this).find(".tp-arr-iwrapper");var n=e(this).find(".tp-arr-allwrapper");punchgs.TweenLite.to(t,.4,{x:t.width(),ease:punchgs.Power3.easeOut,delay:.2,overwrite:"all"});punchgs.TweenLite.to(n,.2,{delay:.6,autoAlpha:0,overwrite:"all"})});l.hover(function(){var t=e(this).find(".tp-arr-iwrapper");var n=e(this).find(".tp-arr-allwrapper");punchgs.TweenLite.fromTo(t,.4,{x:0-t.width()},{x:0,delay:.3,ease:punchgs.Power3.easeOut,overwrite:"all"});punchgs.TweenLite.to(n,.2,{autoAlpha:1,overwrite:"all"})},function(){var t=e(this).find(".tp-arr-iwrapper");var n=e(this).find(".tp-arr-allwrapper");punchgs.TweenLite.to(t,.4,{x:0-t.width(),ease:punchgs.Power3.easeOut,delay:.2,overwrite:"all"});punchgs.TweenLite.to(n,.2,{delay:.6,autoAlpha:0,overwrite:"all"})})}};var g=function(n,r){r.container.closest(".forcefullwidth_wrapper_tp_banner").find(".tp-fullwidth-forcer").css({height:r.container.height()});r.container.closest(".rev_slider_wrapper").css({height:r.container.height()});r.width=parseInt(r.container.width(),0);r.height=parseInt(r.container.height(),0);r.bw=r.width/r.startwidth;r.bh=r.height/r.startheight;if(r.bh>r.bw)r.bh=r.bw;if(r.bh1){r.bw=1;r.bh=1}if(r.bw>1){r.bw=1;r.bh=1}r.height=Math.round(r.startheight*(r.width/r.startwidth));if(r.height>r.startheight&&r.autoHeight!="on")r.height=r.startheight;if(r.fullScreen=="on"){r.height=r.bw*r.startheight;var i=r.container.parent().width();var s=e(window).height();if(r.fullScreenOffsetContainer!=t){try{var o=r.fullScreenOffsetContainer.split(",");e.each(o,function(t,n){s=s-e(n).outerHeight(true);if(s1&&r.fullScreenOffset!=t&&r.fullScreenOffset.length>0){s=s-e(window).height()*parseInt(r.fullScreenOffset,0)/100}else{if(r.fullScreenOffset!=t&&r.fullScreenOffset.length>0)s=s-parseInt(r.fullScreenOffset,0)}if(sul:first").css({overflow:"hidden",width:"100%",height:"100%",maxHeight:n.parent().css("maxHeight")}).addClass("tp-revslider-mainul");if(r.autoHeight=="on"){n.find(">ul:first").css({overflow:"hidden",width:"100%",height:"100%",maxHeight:"none"});n.css({maxHeight:"none"});n.parent().css({maxHeight:"none"})}n.find(">ul:first >li").each(function(r){var i=e(this);i.addClass("tp-revslider-slidesli");i.css({width:"100%",height:"100%",overflow:"hidden"});if(i.data("link")!=t){var s=i.data("link");var o="_self";var u=60;if(i.data("slideindex")=="back")u=0;var a=checksl=i.data("linktoslide");if(a!=t){if(a!="next"&&a!="prev")n.find(">ul:first-child >li").each(function(){var t=e(this);if(t.data("origindex")+1==checksl)a=t.index()+1})}if(i.data("target")!=t)o=i.data("target");if(s!="slide")a="no";var f='';i.append(f)}});n.parent().css({overflow:"visible"});n.find(">ul:first >li >img").each(function(n){var i=e(this);i.addClass("defaultimg");if(i.data("lazyload")!=t&&i.data("lazydone")!=1){}else{g(i,r)}if(a(8)){i.data("kenburns","off")}if(r.panZoomDisableOnMobile=="on"&&J()){i.data("kenburns","off");i.data("bgfit","cover")}i.wrap('
");if(r.dottedOverlay!="none"&&r.dottedOverlay!=t)i.closest(".slotholder").append('
');var s=i.attr("src"),o=i.data("lazyload"),u=i.data("bgfit"),f=i.data("bgrepeat"),l=i.data("bgposition");if(u==t)u="cover";if(f==t)f="no-repeat";if(l==t)l="center center";var c=i.closest(".slotholder");i.replaceWith('
');if(a(8)){c.find(".tp-bgimg").css({backgroundImage:"none","background-image":"none"});c.find(".tp-bgimg").append(' ')}i.css({opacity:0});i.data("li-id",n)})};var b=function(e,n,r,i){var s=e,o=s.find(".defaultimg"),u=s.data("zoomstart"),f=s.data("rotationstart");if(o.data("currotate")!=t)f=o.data("currotate");if(o.data("curscale")!=t&&i=="box")u=o.data("curscale")*100;else if(o.data("curscale")!=t)u=o.data("curscale");g(o,n);var l=o.data("src"),c=o.css("backgroundColor"),h=n.width,p=n.height,d=o.data("fxof"),v=0;if(n.autoHeight=="on")p=n.container.height();if(d==t)d=0;var m=0,y=o.data("bgfit"),b=o.data("bgrepeat"),E=o.data("bgposition");if(y==t)y="cover";if(b==t)b="no-repeat";if(E==t)E="center center";if(a(8)){s.data("kenburns","off");var S=l;l=""}switch(i){case"box":var x=0,T=0,N=0;if(n.sloth>n.slotw)x=n.sloth;else x=n.slotw;if(!r){var m=0-x}n.slotw=x;n.sloth=x;var T=0;var N=0;if(s.data("kenburns")=="on"){y=u;if(y.toString().length<4)y=K(y,s,n)}for(var C=0;C'+'");N=N+x;if(a(8)){s.find(".slot ").last().find(".slotslide").append(' ');w(s,n)}if(u!=t&&f!=t)punchgs.TweenLite.set(s.find(".slot").last(),{rotationZ:f})}T=T+x}break;case"vertical":case"horizontal":if(s.data("kenburns")=="on"){y=u;if(y.toString().length<4)y=K(y,s,n)}if(i=="horizontal"){if(!r)var m=0-n.slotw;for(var k=0;k'+'");if(u!=t&&f!=t)punchgs.TweenLite.set(s.find(".slot").last(),{rotationZ:f});if(a(8)){s.find(".slot ").last().find(".slotslide").append(' ');w(s,n)}}}else{if(!r)var m=0-n.sloth;for(var k=0;k'+'");if(u!=t&&f!=t)punchgs.TweenLite.set(s.find(".slot").last(),{rotationZ:f});if(a(8)){s.find(".slot ").last().find(".slotslide").append(' ');w(s,n)}}}break}};var w=function(e,t){if(a(8)){var n=e.find(".ieeightfallbackimage");var r=n.width(),i=n.height();if(t.startwidth/t.startheight0)S(n,o);else{clearInterval(s);if(r!=t)r()}},100)};var N=function(e,n){try{var r=e.find(">ul:first-child >li:eq("+n.act+")")}catch(i){var r=e.find(">ul:first-child >li:eq(1)")}n.lastslide=n.act;var s=e.find(">ul:first-child >li:eq("+n.next+")");var o=s.find(".defaultimg");n.bannertimeronpause=true;e.trigger("stoptimer");n.cd=0;if(o.data("lazyload")!=t&&o.data("lazyload")!="undefined"&&o.data("lazydone")!=1){if(!a(8))o.css({backgroundImage:'url("'+s.find(".defaultimg").data("lazyload")+'")'});else{o.attr("src",s.find(".defaultimg").data("lazyload"))}o.data("src",s.find(".defaultimg").data("lazyload"));o.data("lazydone",1);o.data("orgw",0);s.data("loadeddone",1);e.find(".tp-loader").css({display:"block"});T(e.find(".tp-static-layers"),function(){T(s,function(){var t=s.find(".slotholder");if(t.data("kenburns")=="on"){var r=setInterval(function(){var i=t.data("owidth");if(i>=0){clearInterval(r);C(n,o,e)}},10)}else C(n,o,e)},n)},n)}else{if(s.data("loadeddone")===t){s.data("loadeddone",1);T(s,function(){C(n,o,e)},n)}else C(n,o,e)}};var C=function(e,t,n){e.bannertimeronpause=false;e.cd=0;n.trigger("nulltimer");n.find(".tp-loader").css({display:"none"});g(t,e);v(n,e);g(t,e);k(n,e)};var k=function(e,n){e.trigger("revolution.slide.onbeforeswap");n.transition=1;n.videoplaying=false;try{var r=e.find(">ul:first-child >li:eq("+n.act+")")}catch(i){var r=e.find(">ul:first-child >li:eq(1)")}n.lastslide=n.act;var s=e.find(">ul:first-child >li:eq("+n.next+")");setTimeout(function(){m(n)},200);var o=r.find(".slotholder"),u=s.find(".slotholder");if(u.data("kenburns")=="on"||o.data("kenburns")=="on"){Z(e,n);e.find(".kenburnimg").remove()}if(s.data("delay")!=t){n.cd=0;n.delay=s.data("delay")}else{n.delay=n.origcd}if(n.firststart==1)punchgs.TweenLite.set(r,{autoAlpha:0});punchgs.TweenLite.set(r,{zIndex:18});punchgs.TweenLite.set(s,{autoAlpha:0,zIndex:20});var a=0;if(r.index()!=s.index()&&n.firststart!=1){a=z(r,n)}if(r.data("saveperformance")!="on")a=0;setTimeout(function(){e.trigger("restarttimer");L(e,n,s,r,o,u)},a)};var L=function(n,r,i,s,o,u){function x(){e.each(d,function(e,t){if(t[0]==h||t[8]==h){f=t[1];p=t[2];g=y}y=y+1})}if(i.data("differentissplayed")=="prepared"){i.data("differentissplayed","done");i.data("transition",i.data("savedtransition"));i.data("slotamount",i.data("savedslotamount"));i.data("masterspeed",i.data("savedmasterspeed"))}if(i.data("fstransition")!=t&&i.data("differentissplayed")!="done"){i.data("savedtransition",i.data("transition"));i.data("savedslotamount",i.data("slotamount"));i.data("savedmasterspeed",i.data("masterspeed"));i.data("transition",i.data("fstransition"));i.data("slotamount",i.data("fsslotamount"));i.data("masterspeed",i.data("fsmasterspeed"));i.data("differentissplayed","prepared")}n.find(".active-revslide").removeClass(".active-revslide");i.addClass("active-revslide");if(i.data("transition")==t)i.data("transition","random");var f=0,l=i.data("transition").split(","),c=i.data("nexttransid")==t?-1:i.data("nexttransid");if(i.data("randomtransition")=="on")c=Math.round(Math.random()*l.length);else c=c+1;if(c==l.length)c=0;i.data("nexttransid",c);var h=l[c];if(r.ie){if(h=="boxfade")h="boxslide";if(h=="slotfade-vertical")h="slotzoom-vertical";if(h=="slotfade-horizontal")h="slotzoom-horizontal"}if(a(8)){h=11}var p=0;if(r.parallax=="scroll"&&r.parallaxFirstGo==t){r.parallaxFirstGo=true;tt(n,r);setTimeout(function(){tt(n,r)},210);setTimeout(function(){tt(n,r)},420)}if(h=="slidehorizontal"){h="slideleft";if(r.leftarrowpressed==1)h="slideright"}if(h=="slidevertical"){h="slideup";if(r.leftarrowpressed==1)h="slidedown"}if(h=="parallaxhorizontal"){h="parallaxtoleft";if(r.leftarrowpressed==1)h="parallaxtoright"}if(h=="parallaxvertical"){h="parallaxtotop";if(r.leftarrowpressed==1)h="parallaxtobottom"}var d=[["boxslide",0,1,10,0,"box",false,null,0],["boxfade",1,0,10,0,"box",false,null,1],["slotslide-horizontal",2,0,0,200,"horizontal",true,false,2],["slotslide-vertical",3,0,0,200,"vertical",true,false,3],["curtain-1",4,3,0,0,"horizontal",true,true,4],["curtain-2",5,3,0,0,"horizontal",true,true,5],["curtain-3",6,3,25,0,"horizontal",true,true,6],["slotzoom-horizontal",7,0,0,400,"horizontal",true,true,7],["slotzoom-vertical",8,0,0,0,"vertical",true,true,8],["slotfade-horizontal",9,0,0,500,"horizontal",true,null,9],["slotfade-vertical",10,0,0,500,"vertical",true,null,10],["fade",11,0,1,300,"horizontal",true,null,11],["slideleft",12,0,1,0,"horizontal",true,true,12],["slideup",13,0,1,0,"horizontal",true,true,13],["slidedown",14,0,1,0,"horizontal",true,true,14],["slideright",15,0,1,0,"horizontal",true,true,15],["papercut",16,0,0,600,"",null,null,16],["3dcurtain-horizontal",17,0,20,100,"vertical",false,true,17],["3dcurtain-vertical",18,0,10,100,"horizontal",false,true,18],["cubic",19,0,20,600,"horizontal",false,true,19],["cube",19,0,20,600,"horizontal",false,true,20],["flyin",20,0,4,600,"vertical",false,true,21],["turnoff",21,0,1,1600,"horizontal",false,true,22],["incube",22,0,20,200,"horizontal",false,true,23],["cubic-horizontal",23,0,20,500,"vertical",false,true,24],["cube-horizontal",23,0,20,500,"vertical",false,true,25],["incube-horizontal",24,0,20,500,"vertical",false,true,26],["turnoff-vertical",25,0,1,200,"horizontal",false,true,27],["fadefromright",12,1,1,0,"horizontal",true,true,28],["fadefromleft",15,1,1,0,"horizontal",true,true,29],["fadefromtop",14,1,1,0,"horizontal",true,true,30],["fadefrombottom",13,1,1,0,"horizontal",true,true,31],["fadetoleftfadefromright",12,2,1,0,"horizontal",true,true,32],["fadetorightfadetoleft",15,2,1,0,"horizontal",true,true,33],["fadetobottomfadefromtop",14,2,1,0,"horizontal",true,true,34],["fadetotopfadefrombottom",13,2,1,0,"horizontal",true,true,35],["parallaxtoright",12,3,1,0,"horizontal",true,true,36],["parallaxtoleft",15,3,1,0,"horizontal",true,true,37],["parallaxtotop",14,3,1,0,"horizontal",true,true,38],["parallaxtobottom",13,3,1,0,"horizontal",true,true,39],["scaledownfromright",12,4,1,0,"horizontal",true,true,40],["scaledownfromleft",15,4,1,0,"horizontal",true,true,41],["scaledownfromtop",14,4,1,0,"horizontal",true,true,42],["scaledownfrombottom",13,4,1,0,"horizontal",true,true,43],["zoomout",13,5,1,0,"horizontal",true,true,44],["zoomin",13,6,1,0,"horizontal",true,true,45],["notransition",26,0,1,0,"horizontal",true,null,46]];var v=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45];var m=[16,17,18,19,20,21,22,23,24,25,26,27];var f=0;var p=1;var g=0;var y=0;var w=new Array;if(u.data("kenburns")=="on"){if(h=="boxslide"||h==0||h=="boxfade"||h==1||h=="papercut"||h==16)h=11;Q(n,r,true,true)}if(h=="random"){h=Math.round(Math.random()*d.length-1);if(h>d.length-1)h=d.length-1}if(h=="random-static"){h=Math.round(Math.random()*v.length-1);if(h>v.length-1)h=v.length-1;h=v[h]}if(h=="random-premium"){h=Math.round(Math.random()*m.length-1);if(h>m.length-1)h=m.length-1;h=m[h]}var E=[12,13,14,15,16,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45];if(r.isJoomla==true&&window.MooTools!=t&&E.indexOf(h)!=-1){var S=Math.round(Math.random()*(m.length-2))+1;if(S>m.length-1)S=m.length-1;if(S==0)S=1;h=m[S]}x();if(a(8)&&f>15&&f<28){h=Math.round(Math.random()*v.length-1);if(h>v.length-1)h=v.length-1;h=v[h];y=0;x()}var T=-1;if(r.leftarrowpressed==1||r.act>r.next)T=1;r.leftarrowpressed=0;if(f>26)f=26;if(f<0)f=0;var N=300;if(i.data("masterspeed")!=t&&i.data("masterspeed")>99&&i.data("masterspeed")r.delay)N=r.delay;w=d[g];n.parent().find(".bullet").each(function(){var t=e(this),n=t.index();t.removeClass("selected");if(r.navigationArrows=="withbullet"||r.navigationArrows=="nexttobullets")n=t.index()-1;if(n==r.next)t.addClass("selected")});var C=new punchgs.TimelineLite({onComplete:function(){A(n,r,u,o,i,s,C)}});C.add(punchgs.TweenLite.set(u.find(".defaultimg"),{opacity:0}));C.pause();if(i.data("slotamount")==t||i.data("slotamount")<1){r.slots=Math.round(Math.random()*12+4);if(h=="boxslide")r.slots=Math.round(Math.random()*6+3);else if(h=="flyin")r.slots=Math.round(Math.random()*4+1)}else{r.slots=i.data("slotamount")}if(i.data("rotate")==t)r.rotate=0;else if(i.data("rotate")==999)r.rotate=Math.round(Math.random()*360);else r.rotate=i.data("rotate");if(!e.support.transition||r.ie||r.ie9)r.rotate=0;if(r.firststart==1)r.firststart=0;N=N+w[4];if((f==4||f==5||f==6)&&r.slots<3)r.slots=3;if(w[3]!=0)r.slots=Math.min(r.slots,w[3]);if(f==9)r.slots=r.width/20;if(f==10)r.slots=r.height/20;if(w[7]!=null)b(o,r,w[7],w[5]);if(w[6]!=null)b(u,r,w[6],w[5]);if(f==0){var k=Math.ceil(r.height/r.sloth);var L=0;u.find(".slotslide").each(function(t){var n=e(this);L=L+1;if(L==k)L=0;C.add(punchgs.TweenLite.from(n,N/600,{opacity:0,top:0-r.sloth,left:0-r.slotw,rotation:r.rotate,force3D:"auto",ease:punchgs.Power2.easeOut}),(t*15+L*30)/1500)})}if(f==1){var O,M=0;u.find(".slotslide").each(function(t){var n=e(this),i=Math.random()*N+300,s=Math.random()*500+200;if(i+s>O){O=s+s;M=t}C.add(punchgs.TweenLite.from(n,i/1e3,{autoAlpha:0,force3D:"auto",rotation:r.rotate,ease:punchgs.Power2.easeInOut}),s/1e3)})}if(f==2){var _=new punchgs.TimelineLite;o.find(".slotslide").each(function(){var t=e(this);_.add(punchgs.TweenLite.to(t,N/1e3,{left:r.slotw,force3D:"auto",rotation:0-r.rotate}),0);C.add(_,0)});u.find(".slotslide").each(function(){var t=e(this);_.add(punchgs.TweenLite.from(t,N/1e3,{left:0-r.slotw,force3D:"auto",rotation:r.rotate}),0);C.add(_,0)})}if(f==3){var _=new punchgs.TimelineLite;o.find(".slotslide").each(function(){var t=e(this);_.add(punchgs.TweenLite.to(t,N/1e3,{top:r.sloth,rotation:r.rotate,force3D:"auto",transformPerspective:600}),0);C.add(_,0)});u.find(".slotslide").each(function(){var t=e(this);_.add(punchgs.TweenLite.from(t,N/1e3,{top:0-r.sloth,rotation:r.rotate,ease:punchgs.Power2.easeOut,force3D:"auto",transformPerspective:600}),0);C.add(_,0)})}if(f==4||f==5){setTimeout(function(){o.find(".defaultimg").css({opacity:0})},100);var D=N/1e3,P=D,_=new punchgs.TimelineLite;o.find(".slotslide").each(function(t){var n=e(this);var i=t*D/r.slots;if(f==5)i=(r.slots-t-1)*D/r.slots/1.5;_.add(punchgs.TweenLite.to(n,D*3,{transformPerspective:600,force3D:"auto",top:0+r.height,opacity:.5,rotation:r.rotate,ease:punchgs.Power2.easeInOut,delay:i}),0);C.add(_,0)});u.find(".slotslide").each(function(t){var n=e(this);var i=t*D/r.slots;if(f==5)i=(r.slots-t-1)*D/r.slots/1.5;_.add(punchgs.TweenLite.from(n,D*3,{top:0-r.height,opacity:.5,rotation:r.rotate,force3D:"auto",ease:punchgs.Power2.easeInOut,delay:i}),0);C.add(_,0)})}if(f==6){if(r.slots<2)r.slots=2;if(r.slots%2)r.slots=r.slots+1;var _=new punchgs.TimelineLite;setTimeout(function(){o.find(".defaultimg").css({opacity:0})},100);o.find(".slotslide").each(function(t){var n=e(this);if(t+1r.delay)N=r.delay;var _=new punchgs.TimelineLite;setTimeout(function(){o.find(".defaultimg").css({opacity:0})},100);o.find(".slotslide").each(function(){var t=e(this).find("div");_.add(punchgs.TweenLite.to(t,N/1e3,{left:0-r.slotw/2+"px",top:0-r.height/2+"px",width:r.slotw*2+"px",height:r.height*2+"px",opacity:0,rotation:r.rotate,force3D:"auto",ease:punchgs.Power2.easeOut}),0);C.add(_,0)});u.find(".slotslide").each(function(t){var n=e(this).find("div");_.add(punchgs.TweenLite.fromTo(n,N/1e3,{left:0,top:0,opacity:0,transformPerspective:600},{left:0-t*r.slotw+"px",ease:punchgs.Power2.easeOut,force3D:"auto",top:0+"px",width:r.width,height:r.height,opacity:1,rotation:0,delay:.1}),0);C.add(_,0)})}if(f==8){N=N*3;if(N>r.delay)N=r.delay;var _=new punchgs.TimelineLite;o.find(".slotslide").each(function(){var t=e(this).find("div");_.add(punchgs.TweenLite.to(t,N/1e3,{left:0-r.width/2+"px",top:0-r.sloth/2+"px",width:r.width*2+"px",height:r.sloth*2+"px",force3D:"auto",opacity:0,rotation:r.rotate}),0);C.add(_,0)});u.find(".slotslide").each(function(t){var n=e(this).find("div");_.add(punchgs.TweenLite.fromTo(n,N/1e3,{left:0,top:0,opacity:0,force3D:"auto"},{left:0+"px",top:0-t*r.sloth+"px",width:u.find(".defaultimg").data("neww")+"px",height:u.find(".defaultimg").data("newh")+"px",opacity:1,rotation:0}),0);C.add(_,0)})}if(f==9||f==10){var H=0;u.find(".slotslide").each(function(t){var n=e(this);H++;C.add(punchgs.TweenLite.fromTo(n,N/1e3,{autoAlpha:0,force3D:"auto",transformPerspective:600},{autoAlpha:1,ease:punchgs.Power2.easeInOut,delay:t*5/1e3}),0)})}if(f==11||f==26){var H=0;if(f==26)N=0;u.find(".slotslide").each(function(t){var n=e(this);C.add(punchgs.TweenLite.from(n,N/1e3,{autoAlpha:0,force3D:"auto",ease:punchgs.Power2.easeInOut}),0)})}if(f==12||f==13||f==14||f==15){N=N;if(N>r.delay)N=r.delay;setTimeout(function(){punchgs.TweenLite.set(o.find(".defaultimg"),{autoAlpha:0})},100);var B=r.width,F=r.height,I=u.find(".slotslide"),q=0,R=0,U=1,z=1,W=1,X=punchgs.Power2.easeInOut,V=punchgs.Power2.easeInOut,$=N/1e3,J=$;if(r.fullWidth=="on"||r.fullScreen=="on"){B=I.width();F=I.height()}if(f==12)q=B;else if(f==15)q=0-B;else if(f==13)R=F;else if(f==14)R=0-F;if(p==1)U=0;if(p==2)U=0;if(p==3){X=punchgs.Power2.easeInOut;V=punchgs.Power1.easeInOut;$=N/1200}if(p==4||p==5)z=.6;if(p==6)z=1.4;if(p==5||p==6){W=1.4;U=0;B=0;F=0;q=0;R=0}if(p==6)W=.6;var K=0;C.add(punchgs.TweenLite.from(I,$,{left:q,top:R,scale:W,opacity:U,rotation:r.rotate,ease:V,force3D:"auto"}),0);var G=o.find(".slotslide");if(p==4||p==5){B=0;F=0}if(p!=1)switch(f){case 12:C.add(punchgs.TweenLite.to(G,J,{left:0-B+"px",force3D:"auto",scale:z,opacity:U,rotation:r.rotate,ease:X}),0);break;case 15:C.add(punchgs.TweenLite.to(G,J,{left:B+"px",force3D:"auto",scale:z,opacity:U,rotation:r.rotate,ease:X}),0);break;case 13:C.add(punchgs.TweenLite.to(G,J,{top:0-F+"px",force3D:"auto",scale:z,opacity:U,rotation:r.rotate,ease:X}),0);break;case 14:C.add(punchgs.TweenLite.to(G,J,{top:F+"px",force3D:"auto",scale:z,opacity:U,rotation:r.rotate,ease:X}),0);break}}if(f==16){var _=new punchgs.TimelineLite;C.add(punchgs.TweenLite.set(s,{position:"absolute","z-index":20}),0);C.add(punchgs.TweenLite.set(i,{position:"absolute","z-index":15}),0);s.wrapInner('
');s.find(".tp-half-one").clone(true).appendTo(s).addClass("tp-half-two");s.find(".tp-half-two").removeClass("tp-half-one");var B=r.width,F=r.height;if(r.autoHeight=="on")F=n.height();s.find(".tp-half-one .defaultimg").wrap('
');s.find(".tp-half-two .defaultimg").wrap('
');s.find(".tp-half-two .defaultimg").css({position:"absolute",top:"-50%"});s.find(".tp-half-two .tp-caption").wrapAll('
');C.add(punchgs.TweenLite.set(s.find(".tp-half-two"),{width:B,height:F,overflow:"hidden",zIndex:15,position:"absolute",top:F/2,left:"0px",transformPerspective:600,transformOrigin:"center bottom"}),0);C.add(punchgs.TweenLite.set(s.find(".tp-half-one"),{width:B,height:F/2,overflow:"visible",zIndex:10,position:"absolute",top:"0px",left:"0px",transformPerspective:600,transformOrigin:"center top"}),0);var Y=s.find(".defaultimg"),Z=Math.round(Math.random()*20-10),et=Math.round(Math.random()*20-10),nt=Math.round(Math.random()*20-10),rt=Math.random()*.4-.2,it=Math.random()*.4-.2,st=Math.random()*1+1,ot=Math.random()*1+1,ut=Math.random()*.3+.3;C.add(punchgs.TweenLite.set(s.find(".tp-half-one"),{overflow:"hidden"}),0);C.add(punchgs.TweenLite.fromTo(s.find(".tp-half-one"),N/800,{width:B,height:F/2,position:"absolute",top:"0px",left:"0px",force3D:"auto",transformOrigin:"center top"},{scale:st,rotation:Z,y:0-F-F/4,autoAlpha:0,ease:punchgs.Power2.easeInOut}),0);C.add(punchgs.TweenLite.fromTo(s.find(".tp-half-two"),N/800,{width:B,height:F,overflow:"hidden",position:"absolute",top:F/2,left:"0px",force3D:"auto",transformOrigin:"center bottom"},{scale:ot,rotation:et,y:F+F/4,ease:punchgs.Power2.easeInOut,autoAlpha:0,onComplete:function(){punchgs.TweenLite.set(s,{position:"absolute","z-index":15});punchgs.TweenLite.set(i,{position:"absolute","z-index":20});if(s.find(".tp-half-one").length>0){s.find(".tp-half-one .defaultimg").unwrap();s.find(".tp-half-one .slotholder").unwrap()}s.find(".tp-half-two").remove()}}),0);_.add(punchgs.TweenLite.set(u.find(".defaultimg"),{autoAlpha:1}),0);if(s.html()!=null)C.add(punchgs.TweenLite.fromTo(i,(N-200)/1e3,{scale:ut,x:r.width/4*rt,y:F/4*it,rotation:nt,force3D:"auto",transformOrigin:"center center",ease:punchgs.Power2.easeOut},{autoAlpha:1,scale:1,x:0,y:0,rotation:0}),0);C.add(_,0)}if(f==17){u.find(".slotslide").each(function(t){var n=e(this);C.add(punchgs.TweenLite.fromTo(n,N/800,{opacity:0,rotationY:0,scale:.9,rotationX:-110,force3D:"auto",transformPerspective:600,transformOrigin:"center center"},{opacity:1,top:0,left:0,scale:1,rotation:0,rotationX:0,force3D:"auto",rotationY:0,ease:punchgs.Power3.easeOut,delay:t*.06}),0)})}if(f==18){u.find(".slotslide").each(function(t){var n=e(this);C.add(punchgs.TweenLite.fromTo(n,N/500,{autoAlpha:0,rotationY:310,scale:.9,rotationX:10,force3D:"auto",transformPerspective:600,transformOrigin:"center center"},{autoAlpha:1,top:0,left:0,scale:1,rotation:0,rotationX:0,force3D:"auto",rotationY:0,ease:punchgs.Power3.easeOut,delay:t*.06}),0)})}if(f==19||f==22){var _=new punchgs.TimelineLite;C.add(punchgs.TweenLite.set(s,{zIndex:20}),0);C.add(punchgs.TweenLite.set(i,{zIndex:20}),0);setTimeout(function(){o.find(".defaultimg").css({opacity:0})},100);var at=i.css("z-index"),ft=s.css("z-index"),lt=90,U=1,ct="center center ";if(T==1)lt=-90;if(f==19){ct=ct+"-"+r.height/2;U=0}else{ct=ct+r.height/2}punchgs.TweenLite.set(n,{transformStyle:"flat",backfaceVisibility:"hidden",transformPerspective:600});u.find(".slotslide").each(function(t){var n=e(this);_.add(punchgs.TweenLite.fromTo(n,N/1e3,{transformStyle:"flat",backfaceVisibility:"hidden",left:0,rotationY:r.rotate,z:10,top:0,scale:1,force3D:"auto",transformPerspective:600,transformOrigin:ct,rotationX:lt},{left:0,rotationY:0,top:0,z:0,scale:1,force3D:"auto",rotationX:0,delay:t*50/1e3,ease:punchgs.Power2.easeInOut}),0);_.add(punchgs.TweenLite.to(n,.1,{autoAlpha:1,delay:t*50/1e3}),0);C.add(_)});o.find(".slotslide").each(function(t){var n=e(this);var i=-90;if(T==1)i=90;_.add(punchgs.TweenLite.fromTo(n,N/1e3,{transformStyle:"flat",backfaceVisibility:"hidden",autoAlpha:1,rotationY:0,top:0,z:0,scale:1,force3D:"auto",transformPerspective:600,transformOrigin:ct,rotationX:0},{autoAlpha:1,rotationY:r.rotate,top:0,z:10,scale:1,rotationX:i,delay:t*50/1e3,force3D:"auto",ease:punchgs.Power2.easeInOut}),0);C.add(_)})}if(f==20){setTimeout(function(){o.find(".defaultimg").css({opacity:0})},100);var at=i.css("z-index"),ft=s.css("z-index");if(T==1){var ht=-r.width;var lt=70;var ct="left center -"+r.height/2}else{var ht=r.width;var lt=-70;var ct="right center -"+r.height/2}u.find(".slotslide").each(function(t){var n=e(this);C.add(punchgs.TweenLite.fromTo(n,N/1500,{left:ht,rotationX:40,z:-600,opacity:U,top:0,force3D:"auto",transformPerspective:600,transformOrigin:ct,rotationY:lt},{left:0,delay:t*50/1e3,ease:punchgs.Power2.easeInOut}),0);C.add(punchgs.TweenLite.fromTo(n,N/1e3,{rotationX:40,z:-600,opacity:U,top:0,scale:1,force3D:"auto",transformPerspective:600,transformOrigin:ct,rotationY:lt},{rotationX:0,opacity:1,top:0,z:0,scale:1,rotationY:0,delay:t*50/1e3,ease:punchgs.Power2.easeInOut}),0);C.add(punchgs.TweenLite.to(n,.1,{opacity:1,force3D:"auto",delay:t*50/1e3+N/2e3}),0)});o.find(".slotslide").each(function(t){var n=e(this);if(T!=1){var i=-r.width;var s=70;var o="left center -"+r.height/2}else{var i=r.width;var s=-70;var o="right center -"+r.height/2}C.add(punchgs.TweenLite.fromTo(n,N/1e3,{opacity:1,rotationX:0,top:0,z:0,scale:1,left:0,force3D:"auto",transformPerspective:600,transformOrigin:o,rotationY:0},{opacity:1,rotationX:40,top:0,z:-600,left:i,force3D:"auto",scale:.8,rotationY:s,delay:t*50/1e3,ease:punchgs.Power2.easeInOut}),0);C.add(punchgs.TweenLite.to(n,.1,{force3D:"auto",opacity:0,delay:t*50/1e3+(N/1e3-N/1e4)}),0)})}if(f==21||f==25){setTimeout(function(){o.find(".defaultimg").css({opacity:0})},100);var at=i.css("z-index"),ft=s.css("z-index"),lt=90,ht=-r.width,pt=-lt;if(T==1){if(f==25){var ct="center top 0";lt=r.rotate}else{var ct="left center 0";pt=r.rotate}}else{ht=r.width;lt=-90;if(f==25){var ct="center bottom 0";pt=-lt;lt=r.rotate}else{var ct="right center 0";pt=r.rotate}}u.find(".slotslide").each(function(t){var n=e(this);C.add(punchgs.TweenLite.fromTo(n,N/1e3,{left:0,transformStyle:"flat",rotationX:pt,z:0,autoAlpha:0,top:0,scale:1,force3D:"auto",transformPerspective:600,transformOrigin:ct,rotationY:lt},{left:0,rotationX:0,top:0,z:0,autoAlpha:1,scale:1,rotationY:0,force3D:"auto",ease:punchgs.Power3.easeInOut}),0)});if(T!=1){ht=-r.width;lt=90;if(f==25){ct="center top 0";pt=-lt;lt=r.rotate}else{ct="left center 0";pt=r.rotate}}else{ht=r.width;lt=-90;if(f==25){ct="center bottom 0";pt=-lt;lt=r.rotate}else{ct="right center 0";pt=r.rotate}}o.find(".slotslide").each(function(t){var n=e(this);C.add(punchgs.TweenLite.fromTo(n,N/1e3,{left:0,transformStyle:"flat",rotationX:0,z:0,autoAlpha:1,top:0,scale:1,force3D:"auto",transformPerspective:600,transformOrigin:ct,rotationY:0},{left:0,rotationX:pt,top:0,z:0,autoAlpha:1,force3D:"auto",scale:1,rotationY:lt,ease:punchgs.Power1.easeInOut}),0)})}if(f==23||f==24){setTimeout(function(){o.find(".defaultimg").css({opacity:0})},100);var at=i.css("z-index"),ft=s.css("z-index"),lt=-90,U=1,dt=0;if(T==1)lt=90;if(f==23){var ct="center center -"+r.width/2;U=0}else var ct="center center "+r.width/2;punchgs.TweenLite.set(n,{transformStyle:"preserve-3d",backfaceVisibility:"hidden",perspective:2500});u.find(".slotslide").each(function(t){var n=e(this);C.add(punchgs.TweenLite.fromTo(n,N/1e3,{left:dt,rotationX:r.rotate,force3D:"auto",opacity:U,top:0,scale:1,transformPerspective:600,transformOrigin:ct,rotationY:lt},{left:0,rotationX:0,autoAlpha:1,top:0,z:0,scale:1,rotationY:0,delay:t*50/500,ease:punchgs.Power2.easeInOut}),0)});lt=90;if(T==1)lt=-90;o.find(".slotslide").each(function(t){var n=e(this);C.add(punchgs.TweenLite.fromTo(n,N/1e3,{left:0,autoAlpha:1,rotationX:0,top:0,z:0,scale:1,force3D:"auto",transformPerspective:600,transformOrigin:ct,rotationY:0},{left:dt,autoAlpha:1,rotationX:r.rotate,top:0,scale:1,rotationY:lt,delay:t*50/500,ease:punchgs.Power2.easeInOut}),0)})}C.pause();j(i,r,null,C);punchgs.TweenLite.to(i,.001,{autoAlpha:1});var vt={};vt.slideIndex=r.next+1;vt.slide=i;n.trigger("revolution.slide.onchange",vt);setTimeout(function(){n.trigger("revolution.slide.onafterswap")},N);n.trigger("revolution.slide.onvideostop")};var A=function(e,t,n,r,i,s,o){punchgs.TweenLite.to(n.find(".defaultimg"),.001,{autoAlpha:1,onComplete:function(){E(e,t,i)}});if(i.index()!=s.index()){punchgs.TweenLite.to(s,.2,{autoAlpha:0,onComplete:function(){E(e,t,s)}})}t.act=t.next;if(t.navigationType=="thumb")rt(e);if(n.data("kenburns")=="on"){Q(e,t)}e.find(".current-sr-slide-visible").removeClass("current-sr-slide-visible");i.addClass("current-sr-slide-visible");if(t.parallax=="scroll"||t.parallax=="scroll+mouse"||t.parallax=="mouse+scroll"){tt(e,t)}o.clear()};var O=function(t){var n=t.target.getVideoEmbedCode();var r=e("#"+n.split('id="')[1].split('"')[0]);var i=r.closest(".tp-simpleresponsive");var s=r.parent().data("player");if(t.data==YT.PlayerState.PLAYING){var o=i.find(".tp-bannertimer");var u=o.data("opt");if(r.closest(".tp-caption").data("volume")=="mute")s.mute();u.videoplaying=true;i.trigger("stoptimer");i.trigger("revolution.slide.onvideoplay")}else{var o=i.find(".tp-bannertimer");var u=o.data("opt");if(t.data!=-1&&t.data!=3){u.videoplaying=false;i.trigger("starttimer");i.trigger("revolution.slide.onvideostop")}if(t.data==0&&u.nextslideatend==true)u.container.revnext();else{u.videoplaying=false;i.trigger("starttimer");i.trigger("revolution.slide.onvideostop")}}};var M=function(e,t,n){if(e.addEventListener)e.addEventListener(t,n,false);else e.attachEvent(t,n,false)};var _=function(t,n){var r=$f(t),i=e("#"+t),s=i.closest(".tp-simpleresponsive"),o=i.closest(".tp-caption");setTimeout(function(){r.addEvent("ready",function(t){if(n)r.api("play");r.addEvent("play",function(e){var t=s.find(".tp-bannertimer");var n=t.data("opt");n.videoplaying=true;s.trigger("stoptimer");if(o.data("volume")=="mute")r.api("setVolume","0")});r.addEvent("finish",function(e){var t=s.find(".tp-bannertimer");var n=t.data("opt");n.videoplaying=false;s.trigger("starttimer");s.trigger("revolution.slide.onvideoplay");if(n.nextslideatend==true)n.container.revnext()});r.addEvent("pause",function(e){var t=s.find(".tp-bannertimer");var n=t.data("opt");n.videoplaying=false;s.trigger("starttimer");s.trigger("revolution.slide.onvideostop")});o.find(".tp-thumb-image").click(function(){punchgs.TweenLite.to(e(this),.3,{autoAlpha:0,force3D:"auto",ease:punchgs.Power3.easeInOut});r.api("play")})})},150)};var D=function(e,n){var r=n.width();var i=n.height();var s=e.data("mediaAspect");if(s==t)s=1;var o=r/i;e.css({position:"absolute"});var u=e.find("video");if(o=r.next||p==r.next||d==r.next){h.addClass("tp-is-shown");f=1}else{f=0}}else{if(d==r.next||p>r.next||d0)c=r.container.height()/2-r.startheight*r.bh/2;if(c<0)c=0;var g=0;if(r.width0||h.find("video").length>0){var y="iframe"+Math.round(Math.random()*1e5+1),b=h.data("videowidth"),w=h.data("videoheight"),E=h.data("videoattributes"),S=h.data("ytid"),x=h.data("vimeoid"),T=h.data("videpreload"),N=h.data("videomp4"),C=h.data("videowebm"),k=h.data("videoogv"),L=h.data("videocontrols"),A="http",j=h.data("videoloop")=="loop"?"loop":h.data("videoloop")=="loopandnoslidestop"?"loop":"";if(h.data("thumbimage")!=t&&h.data("videoposter")==t)h.data("videoposter",h.data("thumbimage"));if(S!=t&&String(S).length>1&&h.find("iframe").length==0){A="https";if(L=="none"){E=E.replace("controls=1","controls=0");if(E.toLowerCase().indexOf("controls")==-1)E=E+"&controls=0"}h.append('')}if(x!=t&&String(x).length>1&&h.find("iframe").length==0){if(location.protocol==="https:")A="https";h.append('')}if((N!=t||C!=t)&&h.find("video").length==0){if(L!="controls")L="";var I='';if(C!=t&&F().toLowerCase()=="firefox")I=I+' ';if(N!=t)I=I+' ';if(k!=t)I=I+' ';I=I+" ";h.append(I);if(L=="controls")h.append(''+'
Play
'+'
'+'
Mute
'+'
'+'
Full-Screen
'+"
")}var z=false;if(h.data("autoplayonlyfirsttime")==true||h.data("autoplayonlyfirsttime")=="true"||h.data("autoplay")==true){h.data("autoplay",true);z=true}h.find("iframe").each(function(){var n=e(this);punchgs.TweenLite.to(n,.1,{autoAlpha:1,zIndex:0,transformStyle:"preserve-3d",z:0,rotationX:0,force3D:"auto"});if(J()){var o=n.attr("src");n.attr("src","");n.attr("src",o)}r.nextslideatend=h.data("nextslideatend");if(h.data("videoposter")!=t&&h.data("videoposter").length>2&&h.data("autoplay")!=true&&!s){if(h.find(".tp-thumb-image").length==0)h.append('
');else punchgs.TweenLite.set(h.find(".tp-thumb-image"),{autoAlpha:1})}if(n.attr("src").toLowerCase().indexOf("youtube")>=0){if(!n.hasClass("HasListener")){try{n.attr("id",y);var u;var a=setInterval(function(){if(YT!=t)if(typeof YT.Player!=t&&typeof YT.Player!="undefined"){u=new YT.Player(y,{events:{onStateChange:O,onReady:function(n){var r=n.target.getVideoEmbedCode(),i=e("#"+r.split('id="')[1].split('"')[0]),s=i.closest(".tp-caption"),o=s.data("videorate"),a=s.data("videostart");if(o!=t)n.target.setPlaybackRate(parseFloat(o));if(!J()&&s.data("autoplay")==true||z){s.data("timerplay",setTimeout(function(){n.target.playVideo()},s.data("start")))}s.find(".tp-thumb-image").click(function(){punchgs.TweenLite.to(e(this),.3,{autoAlpha:0,force3D:"auto",ease:punchgs.Power3.easeInOut});if(!J()){u.playVideo()}})}}})}n.addClass("HasListener");h.data("player",u);clearInterval(a)},100)}catch(f){}}else{if(!i){var u=h.data("player");if(h.data("forcerewind")=="on"&&!J())u.seekTo(0);if(!J()&&h.data("autoplay")==true||z){h.data("timerplay",setTimeout(function(){u.playVideo()},h.data("start")))}}}}else if(n.attr("src").toLowerCase().indexOf("vimeo")>=0){if(!n.hasClass("HasListener")){n.addClass("HasListener");n.attr("id",y);var l=n.attr("src");var c={},p=l,d=/([^&=]+)=([^&]*)/g,v;while(v=d.exec(p)){c[decodeURIComponent(v[1])]=decodeURIComponent(v[2])}if(c["player_id"]!=t)l=l.replace(c["player_id"],y);else l=l+"&player_id="+y;try{l=l.replace("api=0","api=1")}catch(f){}l=l+"&api=1";n.attr("src",l);var u=h.find("iframe")[0];var m=setInterval(function(){if($f!=t){if(typeof $f(y).api!=t&&typeof $f(y).api!="undefined"){$f(u).addEvent("ready",function(){_(y,z)});clearInterval(m)}}},100)}else{if(!i){if(!J()&&(h.data("autoplay")==true||h.data("forcerewind")=="on")){var n=h.find("iframe");var g=n.attr("id");var b=$f(g);if(h.data("forcerewind")=="on")b.api("seekTo",0);h.data("timerplay",setTimeout(function(){if(h.data("autoplay")==true)b.api("play")},h.data("start")))}}}}});if(J()&&h.data("disablevideoonmobile")==1||a(8))h.find("video").remove();if(h.find("video").length>0){h.find("video").each(function(n){var i=this,s=e(this);if(!s.parent().hasClass("html5vid"))s.wrap('
');var o=s.parent();M(i,"loadedmetadata",function(e){e.data("metaloaded",1)}(o));clearInterval(o.data("interval"));o.data("interval",setInterval(function(){if(o.data("metaloaded")==1||i.duration!=NaN){clearInterval(o.data("interval"));if(!o.hasClass("HasListener")){o.addClass("HasListener");if(h.data("dottedoverlay")!="none"&&h.data("dottedoverlay")!=t)if(h.find(".tp-dottedoverlay").length!=1)o.append('
');if(s.attr("control")==t){if(o.find(".tp-video-play-button").length==0)o.append('');o.find("video, .tp-poster, .tp-video-play-button").click(function(){if(o.hasClass("videoisplaying"))i.pause();else i.play()})}if(h.data("forcecover")==1||h.hasClass("fullscreenvideo")){if(h.data("forcecover")==1){D(o,r.container);o.addClass("fullcoveredvideo");h.addClass("fullcoveredvideo")}o.css({width:"100%",height:"100%"})}var e=h.find(".tp-vid-play-pause")[0],n=h.find(".tp-vid-mute")[0],u=h.find(".tp-vid-full-screen")[0],a=h.find(".tp-seek-bar")[0],f=h.find(".tp-volume-bar")[0];if(e!=t){M(e,"click",function(){if(i.paused==true)i.play();else i.pause()});M(n,"click",function(){if(i.muted==false){i.muted=true;n.innerHTML="Unmute"}else{i.muted=false;n.innerHTML="Mute"}});M(u,"click",function(){if(i.requestFullscreen){i.requestFullscreen()}else if(i.mozRequestFullScreen){i.mozRequestFullScreen()}else if(i.webkitRequestFullscreen){i.webkitRequestFullscreen()}});M(a,"change",function(){var e=i.duration*(a.value/100);i.currentTime=e});M(i,"timeupdate",function(){var e=100/i.duration*i.currentTime;a.value=e});M(a,"mousedown",function(){i.pause()});M(a,"mouseup",function(){i.play()});M(f,"change",function(){i.volume=f.value})}M(i,"play",function(){if(h.data("volume")=="mute")i.muted=true;o.addClass("videoisplaying");if(h.data("videoloop")=="loopandnoslidestop"){r.videoplaying=false;r.container.trigger("starttimer");r.container.trigger("revolution.slide.onvideostop")}else{r.videoplaying=true;r.container.trigger("stoptimer");r.container.trigger("revolution.slide.onvideoplay")}var e=h.find(".tp-vid-play-pause")[0],n=h.find(".tp-vid-mute")[0];if(e!=t)e.innerHTML="Pause";if(n!=t&&i.muted)n.innerHTML="Unmute"});M(i,"pause",function(){o.removeClass("videoisplaying");r.videoplaying=false;r.container.trigger("starttimer");r.container.trigger("revolution.slide.onvideostop");var e=h.find(".tp-vid-play-pause")[0];if(e!=t)e.innerHTML="Play"});M(i,"ended",function(){o.removeClass("videoisplaying");r.videoplaying=false;r.container.trigger("starttimer");r.container.trigger("revolution.slide.onvideostop");if(r.nextslideatend==true)r.container.revnext()})}var l=false;if(h.data("autoplayonlyfirsttime")==true||h.data("autoplayonlyfirsttime")=="true")l=true;var c=16/9;if(h.data("aspectratio")=="4:3")c=4/3;o.data("mediaAspect",c);if(o.closest(".tp-caption").data("forcecover")==1){D(o,r.container);o.addClass("fullcoveredvideo")}s.css({display:"block"});r.nextslideatend=h.data("nextslideatend");if(h.data("autoplay")==true||l==true){if(h.data("videoloop")=="loopandnoslidestop"){r.videoplaying=false;r.container.trigger("starttimer");r.container.trigger("revolution.slide.onvideostop")}else{r.videoplaying=true;r.container.trigger("stoptimer");r.container.trigger("revolution.slide.onvideoplay")}if(h.data("forcerewind")=="on"&&!o.hasClass("videoisplaying"))if(i.currentTime>0)i.currentTime=0;if(h.data("volume")=="mute")i.muted=true;o.data("timerplay",setTimeout(function(){if(h.data("forcerewind")=="on"&&!o.hasClass("videoisplaying"))if(i.currentTime>0)i.currentTime=0;if(h.data("volume")=="mute")i.muted=true;i.play()},10+h.data("start")))}if(o.data("ww")==t)o.data("ww",s.attr("width"));if(o.data("hh")==t)o.data("hh",s.attr("height"));if(!h.hasClass("fullscreenvideo")&&h.data("forcecover")==1){try{o.width(o.data("ww")*r.bw);o.height(o.data("hh")*r.bh)}catch(p){}}clearInterval(o.data("interval"))}}),100)})}if(h.data("autoplay")==true){setTimeout(function(){if(h.data("videoloop")!="loopandnoslidestop"){r.videoplaying=true;r.container.trigger("stoptimer")}},200);if(h.data("videoloop")!="loopandnoslidestop"){r.videoplaying=true;r.container.trigger("stoptimer")}if(h.data("autoplayonlyfirsttime")==true||h.data("autoplayonlyfirsttime")=="true"){h.data("autoplay",false);h.data("autoplayonlyfirsttime",false)}}}var V=0;var $=0;if(h.find("img").length>0){var K=h.find("img");if(K.width()==0)K.css({width:"auto"});if(K.height()==0)K.css({height:"auto"});if(K.data("ww")==t&&K.width()>0)K.data("ww",K.width());if(K.data("hh")==t&&K.height()>0)K.data("hh",K.height());var Q=K.data("ww");var G=K.data("hh");if(Q==t)Q=0;if(G==t)G=0;K.width(Q*r.bw);K.height(G*r.bh);V=K.width();$=K.height()}else{if(h.find("iframe").length>0||h.find("video").length>0){var Y=false,K=h.find("iframe");if(K.length==0){K=h.find("video");Y=true}K.css({display:"block"});if(h.data("ww")==t)h.data("ww",K.width());if(h.data("hh")==t)h.data("hh",K.height());var Q=h.data("ww"),G=h.data("hh");var Z=h;if(Z.data("fsize")==t)Z.data("fsize",parseInt(Z.css("font-size"),0)||0);if(Z.data("pt")==t)Z.data("pt",parseInt(Z.css("paddingTop"),0)||0);if(Z.data("pb")==t)Z.data("pb",parseInt(Z.css("paddingBottom"),0)||0);if(Z.data("pl")==t)Z.data("pl",parseInt(Z.css("paddingLeft"),0)||0);if(Z.data("pr")==t)Z.data("pr",parseInt(Z.css("paddingRight"),0)||0);if(Z.data("mt")==t)Z.data("mt",parseInt(Z.css("marginTop"),0)||0);if(Z.data("mb")==t)Z.data("mb",parseInt(Z.css("marginBottom"),0)||0);if(Z.data("ml")==t)Z.data("ml",parseInt(Z.css("marginLeft"),0)||0);if(Z.data("mr")==t)Z.data("mr",parseInt(Z.css("marginRight"),0)||0);if(Z.data("bt")==t)Z.data("bt",parseInt(Z.css("borderTop"),0)||0);if(Z.data("bb")==t)Z.data("bb",parseInt(Z.css("borderBottom"),0)||0);if(Z.data("bl")==t)Z.data("bl",parseInt(Z.css("borderLeft"),0)||0);if(Z.data("br")==t)Z.data("br",parseInt(Z.css("borderRight"),0)||0);if(Z.data("lh")==t)Z.data("lh",parseInt(Z.css("lineHeight"),0)||0);if(Z.data("lh")=="auto")Z.data("lh",Z.data("fsize")+4);var et=r.width,tt=r.height;if(et>r.startwidth)et=r.startwidth;if(tt>r.startheight)tt=r.startheight;if(!h.hasClass("fullscreenvideo"))h.css({"font-size":Z.data("fsize")*r.bw+"px","padding-top":Z.data("pt")*r.bh+"px","padding-bottom":Z.data("pb")*r.bh+"px","padding-left":Z.data("pl")*r.bw+"px","padding-right":Z.data("pr")*r.bw+"px","margin-top":Z.data("mt")*r.bh+"px","margin-bottom":Z.data("mb")*r.bh+"px","margin-left":Z.data("ml")*r.bw+"px","margin-right":Z.data("mr")*r.bw+"px","border-top":Z.data("bt")*r.bh+"px","border-bottom":Z.data("bb")*r.bh+"px","border-left":Z.data("bl")*r.bw+"px","border-right":Z.data("br")*r.bw+"px","line-height":Z.data("lh")*r.bh+"px",height:G*r.bh+"px"});else{l=0;c=0;h.data("x",0);h.data("y",0);var nt=r.height;if(r.autoHeight=="on")nt=r.container.height();h.css({width:r.width,height:nt})}if(Y==false){K.width(Q*r.bw);K.height(G*r.bh)}else if(h.data("forcecover")!=1&&!h.hasClass("fullscreenvideo")){K.width(Q*r.bw);K.height(G*r.bh)}V=K.width();$=K.height()}else{h.find(".tp-resizeme, .tp-resizeme *").each(function(){q(e(this),r)});if(h.hasClass("tp-resizeme")){h.find("*").each(function(){q(e(this),r)})}q(h,r);$=h.outerHeight(true);V=h.outerWidth(true);var rt=h.outerHeight();var it=h.css("backgroundColor");h.find(".frontcorner").css({borderWidth:rt+"px",left:0-rt+"px",borderRight:"0px solid transparent",borderTopColor:it});h.find(".frontcornertop").css({borderWidth:rt+"px",left:0-rt+"px",borderRight:"0px solid transparent",borderBottomColor:it});h.find(".backcorner").css({borderWidth:rt+"px",right:0-rt+"px",borderLeft:"0px solid transparent",borderBottomColor:it});h.find(".backcornertop").css({borderWidth:rt+"px",right:0-rt+"px",borderLeft:"0px solid transparent",borderTopColor:it})}}if(r.fullScreenAlignForce=="on"){l=0;c=0}if(h.data("voffset")==t)h.data("voffset",0);if(h.data("hoffset")==t)h.data("hoffset",0);var st=h.data("voffset")*v;var ot=h.data("hoffset")*v;var ut=r.startwidth*v;var at=r.startheight*v;if(r.fullScreenAlignForce=="on"){ut=r.container.width();at=r.container.height()}if(h.data("x")=="center"||h.data("xcenter")=="center"){h.data("xcenter","center");h.data("x",ut/2-h.outerWidth(true)/2+ot)}if(h.data("x")=="left"||h.data("xleft")=="left"){h.data("xleft","left");h.data("x",0/v+ot)}if(h.data("x")=="right"||h.data("xright")=="right"){h.data("xright","right");h.data("x",(ut-h.outerWidth(true)+ot)/v)}if(h.data("y")=="center"||h.data("ycenter")=="center"){h.data("ycenter","center");h.data("y",at/2-h.outerHeight(true)/2+st)}if(h.data("y")=="top"||h.data("ytop")=="top"){h.data("ytop","top");h.data("y",0/r.bh+st)}if(h.data("y")=="bottom"||h.data("ybottom")=="bottom"){h.data("ybottom","bottom");h.data("y",(at-h.outerHeight(true)+st)/v)}if(h.data("start")==t)h.data("start",1e3);var ft=h.data("easing");if(ft==t)ft="punchgs.Power1.easeOut";var lt=h.data("start")/1e3,ct=h.data("speed")/1e3;if(h.data("x")=="center"||h.data("xcenter")=="center")var ht=h.data("x")+l;else{var ht=v*h.data("x")+l}if(h.data("y")=="center"||h.data("ycenter")=="center")var pt=h.data("y")+c;else{var pt=r.bh*h.data("y")+c}punchgs.TweenLite.set(h,{top:pt,left:ht,overwrite:"auto"});if(f==0)s=true;if(h.data("timeline")!=t&&!s){if(f!=2)h.data("timeline").gotoAndPlay(0);s=true}if(!s){if(h.data("timeline")!=t){}var dt=new punchgs.TimelineLite({smoothChildTiming:true,onStart:u});dt.pause();if(r.fullScreenAlignForce=="on"){}var vt=h;if(h.data("mySplitText")!=t)h.data("mySplitText").revert();if(h.data("splitin")=="chars"||h.data("splitin")=="words"||h.data("splitin")=="lines"||h.data("splitout")=="chars"||h.data("splitout")=="words"||h.data("splitout")=="lines"){if(h.find("a").length>0)h.data("mySplitText",new punchgs.SplitText(h.find("a"),{type:"lines,words,chars",charsClass:"tp-splitted",wordsClass:"tp-splitted",linesClass:"tp-splitted"}));else if(h.find(".tp-layer-inner-rotation").length>0)h.data("mySplitText",new punchgs.SplitText(h.find(".tp-layer-inner-rotation"),{type:"lines,words,chars",charsClass:"tp-splitted",wordsClass:"tp-splitted",linesClass:"tp-splitted"}));else h.data("mySplitText",new punchgs.SplitText(h,{type:"lines,words,chars",charsClass:"tp-splitted",wordsClass:"tp-splitted",linesClass:"tp-splitted"}));h.addClass("splitted")}if(h.data("splitin")=="chars")vt=h.data("mySplitText").chars;if(h.data("splitin")=="words")vt=h.data("mySplitText").words;if(h.data("splitin")=="lines")vt=h.data("mySplitText").lines;var mt=P();var gt=P();if(h.data("repeat")!=t)repeatV=h.data("repeat");if(h.data("yoyo")!=t)yoyoV=h.data("yoyo");if(h.data("repeatdelay")!=t)repeatdelayV=h.data("repeatdelay");var yt=h.attr("class");if(yt.match("customin"))mt=H(mt,h.data("customin"));else if(yt.match("randomrotate")){mt.scale=Math.random()*3+1;mt.rotation=Math.round(Math.random()*200-100);mt.x=Math.round(Math.random()*200-100);mt.y=Math.round(Math.random()*200-100)}else if(yt.match("lfr")||yt.match("skewfromright"))mt.x=15+r.width;else if(yt.match("lfl")||yt.match("skewfromleft"))mt.x=-15-V;else if(yt.match("sfl")||yt.match("skewfromleftshort"))mt.x=-50;else if(yt.match("sfr")||yt.match("skewfromrightshort"))mt.x=50;else if(yt.match("lft"))mt.y=-25-$;else if(yt.match("lfb"))mt.y=25+r.height;else if(yt.match("sft"))mt.y=-50;else if(yt.match("sfb"))mt.y=50;if(yt.match("skewfromright")||h.hasClass("skewfromrightshort"))mt.skewX=-85;else if(yt.match("skewfromleft")||h.hasClass("skewfromleftshort"))mt.skewX=85;if(yt.match("fade")||yt.match("sft")||yt.match("sfl")||yt.match("sfb")||yt.match("skewfromleftshort")||yt.match("sfr")||yt.match("skewfromrightshort"))mt.opacity=0;if(F().toLowerCase()=="safari"){}var bt=h.data("elementdelay")==t?0:h.data("elementdelay");gt.ease=mt.ease=h.data("easing")==t?punchgs.Power1.easeInOut:h.data("easing");mt.data=new Object;mt.data.oldx=mt.x;mt.data.oldy=mt.y;gt.data=new Object;gt.data.oldx=gt.x;gt.data.oldy=gt.y;mt.x=mt.x*v;mt.y=mt.y*v;var wt=new punchgs.TimelineLite;if(f!=2){if(yt.match("customin")){if(vt!=h)dt.add(punchgs.TweenLite.set(h,{force3D:"auto",opacity:1,scaleX:1,scaleY:1,rotationX:0,rotationY:0,rotationZ:0,skewX:0,skewY:0,z:0,x:0,y:0,visibility:"visible",delay:0,overwrite:"all"}));mt.visibility="hidden";gt.visibility="visible";gt.overwrite="all";gt.opacity=1;gt.onComplete=o();gt.delay=lt;gt.force3D="auto";dt.add(wt.staggerFromTo(vt,ct,mt,gt,bt),"frame0")}else{mt.visibility="visible";mt.transformPerspective=600;if(vt!=h)dt.add(punchgs.TweenLite.set(h,{force3D:"auto",opacity:1,scaleX:1,scaleY:1,rotationX:0,rotationY:0,rotationZ:0,skewX:0,skewY:0,z:0,x:0,y:0,visibility:"visible",delay:0,overwrite:"all"}));gt.visibility="visible";gt.delay=lt;gt.onComplete=o();gt.opacity=1;gt.force3D="auto";if(yt.match("randomrotate")&&vt!=h){for(var n=0;n0){var n=B(t);W(h,r,n,"frame"+(e+10),v)}})}dt=h.data("timeline");if(h.data("end")!=t&&(f==-1||f==2)){X(h,r,h.data("end")/1e3,mt,"frame99",v)}else{if(f==-1||f==2)X(h,r,999999,mt,"frame99",v);else X(h,r,200,mt,"frame99",v)}dt=h.data("timeline");h.data("timeline",dt);R(h,v);dt.resume()}}if(s){U(h);R(h,v);if(h.data("timeline")!=t){var Ct=h.data("timeline").getTweensOf();e.each(Ct,function(e,n){if(n.vars.data!=t){var r=n.vars.data.oldx*v;var i=n.vars.data.oldy*v;if(n.progress()!=1&&n.progress()!=0){try{n.vars.x=r;n.vary.y=i}catch(s){}}else{if(n.progress()==1){punchgs.TweenLite.set(n.target,{x:r,y:i})}}}})}}});var d=e("body").find("#"+r.container.attr("id")).find(".tp-bannertimer");d.data("opt",r);if(s!=t)setTimeout(function(){s.resume()},30)};var F=function(){var e=navigator.appName,t=navigator.userAgent,n;var r=t.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);if(r&&(n=t.match(/version\/([\.\d]+)/i))!=null)r[2]=n[1];r=r?[r[1],r[2]]:[e,navigator.appVersion,"-?"];return r[0]};var I=function(){var e=navigator.appName,t=navigator.userAgent,n;var r=t.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);if(r&&(n=t.match(/version\/([\.\d]+)/i))!=null)r[2]=n[1];r=r?[r[1],r[2]]:[e,navigator.appVersion,"-?"];return r[1]};var q=function(e,n){if(e.data("fsize")==t)e.data("fsize",parseInt(e.css("font-size"),0)||0);if(e.data("pt")==t)e.data("pt",parseInt(e.css("paddingTop"),0)||0);if(e.data("pb")==t)e.data("pb",parseInt(e.css("paddingBottom"),0)||0);if(e.data("pl")==t)e.data("pl",parseInt(e.css("paddingLeft"),0)||0);if(e.data("pr")==t)e.data("pr",parseInt(e.css("paddingRight"),0)||0);if(e.data("mt")==t)e.data("mt",parseInt(e.css("marginTop"),0)||0);if(e.data("mb")==t)e.data("mb",parseInt(e.css("marginBottom"),0)||0);if(e.data("ml")==t)e.data("ml",parseInt(e.css("marginLeft"),0)||0);if(e.data("mr")==t)e.data("mr",parseInt(e.css("marginRight"),0)||0);if(e.data("bt")==t)e.data("bt",parseInt(e.css("borderTopWidth"),0)||0);if(e.data("bb")==t)e.data("bb",parseInt(e.css("borderBottomWidth"),0)||0);if(e.data("bl")==t)e.data("bl",parseInt(e.css("borderLeftWidth"),0)||0);if(e.data("br")==t)e.data("br",parseInt(e.css("borderRightWidth"),0)||0);if(e.data("ls")==t)e.data("ls",parseInt(e.css("letterSpacing"),0)||0);if(e.data("lh")==t)e.data("lh",parseInt(e.css("lineHeight"),0)||"auto");if(e.data("minwidth")==t)e.data("minwidth",parseInt(e.css("minWidth"),0)||0);if(e.data("minheight")==t)e.data("minheight",parseInt(e.css("minHeight"),0)||0);if(e.data("maxwidth")==t)e.data("maxwidth",parseInt(e.css("maxWidth"),0)||"none");if(e.data("maxheight")==t)e.data("maxheight",parseInt(e.css("maxHeight"),0)||"none");if(e.data("wii")==t)e.data("wii",parseInt(e.css("width"),0)||0);if(e.data("hii")==t)e.data("hii",parseInt(e.css("height"),0)||0);if(e.data("wan")==t)e.data("wan",e.css("-webkit-transition"));if(e.data("moan")==t)e.data("moan",e.css("-moz-animation-transition"));if(e.data("man")==t)e.data("man",e.css("-ms-animation-transition"));if(e.data("ani")==t)e.data("ani",e.css("transition"));if(e.data("lh")=="auto")e.data("lh",e.data("fsize")+4);if(!e.hasClass("tp-splitted")){e.css("-webkit-transition","none");e.css("-moz-transition","none");e.css("-ms-transition","none");e.css("transition","none");punchgs.TweenLite.set(e,{fontSize:Math.round(e.data("fsize")*n.bw)+"px",letterSpacing:Math.floor(e.data("ls")*n.bw)+"px",paddingTop:Math.round(e.data("pt")*n.bh)+"px",paddingBottom:Math.round(e.data("pb")*n.bh)+"px",paddingLeft:Math.round(e.data("pl")*n.bw)+"px",paddingRight:Math.round(e.data("pr")*n.bw)+"px",marginTop:e.data("mt")*n.bh+"px",marginBottom:e.data("mb")*n.bh+"px",marginLeft:e.data("ml")*n.bw+"px",marginRight:e.data("mr")*n.bw+"px",borderTopWidth:Math.round(e.data("bt")*n.bh)+"px",borderBottomWidth:Math.round(e.data("bb")*n.bh)+"px",borderLeftWidth:Math.round(e.data("bl")*n.bw)+"px",borderRightWidth:Math.round(e.data("br")*n.bw)+"px",lineHeight:Math.round(e.data("lh")*n.bh)+"px",minWidth:e.data("minwidth")*n.bw+"px",minHeight:e.data("minheight")*n.bh+"px",overwrite:"auto"});setTimeout(function(){e.css("-webkit-transition",e.data("wan"));e.css("-moz-transition",e.data("moan"));e.css("-ms-transition",e.data("man"));e.css("transition",e.data("ani"))},30);if(e.data("maxheight")!="none")e.css({maxHeight:e.data("maxheight")*n.bh+"px"});if(e.data("maxwidth")!="none")e.css({maxWidth:e.data("maxwidth")*n.bw+"px"})}};var R=function(n,r){n.find(".rs-pendulum").each(function(){var n=e(this);if(n.data("timeline")==t){n.data("timeline",new punchgs.TimelineLite);var i=n.data("startdeg")==t?-20:n.data("startdeg"),s=n.data("enddeg")==t?20:n.data("enddeg"),o=n.data("speed")==t?2:n.data("speed"),u=n.data("origin")==t?"50% 50%":n.data("origin"),a=n.data("easing")==t?punchgs.Power2.easeInOut:n.data("ease");i=i*r;s=s*r;n.data("timeline").append(new punchgs.TweenLite.fromTo(n,o,{force3D:"auto",rotation:i,transformOrigin:u},{rotation:s,ease:a}));n.data("timeline").append(new punchgs.TweenLite.fromTo(n,o,{force3D:"auto",rotation:s,transformOrigin:u},{rotation:i,ease:a,onComplete:function(){n.data("timeline").restart()}}))}});n.find(".rs-rotate").each(function(){var n=e(this);if(n.data("timeline")==t){n.data("timeline",new punchgs.TimelineLite);var i=n.data("startdeg")==t?0:n.data("startdeg"),s=n.data("enddeg")==t?360:n.data("enddeg");speed=n.data("speed")==t?2:n.data("speed"),origin=n.data("origin")==t?"50% 50%":n.data("origin"),easing=n.data("easing")==t?punchgs.Power2.easeInOut:n.data("easing");i=i*r;s=s*r;n.data("timeline").append(new punchgs.TweenLite.fromTo(n,speed,{force3D:"auto",rotation:i,transformOrigin:origin},{rotation:s,ease:easing,onComplete:function(){n.data("timeline").restart()}}))}});n.find(".rs-slideloop").each(function(){var n=e(this);if(n.data("timeline")==t){n.data("timeline",new punchgs.TimelineLite);var i=n.data("xs")==t?0:n.data("xs"),s=n.data("ys")==t?0:n.data("ys"),o=n.data("xe")==t?0:n.data("xe"),u=n.data("ye")==t?0:n.data("ye"),a=n.data("speed")==t?2:n.data("speed"),f=n.data("easing")==t?punchgs.Power2.easeInOut:n.data("easing");i=i*r;s=s*r;o=o*r;u=u*r;n.data("timeline").append(new punchgs.TweenLite.fromTo(n,a,{force3D:"auto",x:i,y:s},{x:o,y:u,ease:f}));n.data("timeline").append(new punchgs.TweenLite.fromTo(n,a,{force3D:"auto",x:o,y:u},{x:i,y:s,onComplete:function(){n.data("timeline").restart()}}))}});n.find(".rs-pulse").each(function(){var n=e(this);if(n.data("timeline")==t){n.data("timeline",new punchgs.TimelineLite);var r=n.data("zoomstart")==t?0:n.data("zoomstart"),i=n.data("zoomend")==t?0:n.data("zoomend"),s=n.data("speed")==t?2:n.data("speed"),o=n.data("easing")==t?punchgs.Power2.easeInOut:n.data("easing");n.data("timeline").append(new punchgs.TweenLite.fromTo(n,s,{force3D:"auto",scale:r},{scale:i,ease:o}));n.data("timeline").append(new punchgs.TweenLite.fromTo(n,s,{force3D:"auto",scale:i},{scale:r,onComplete:function(){n.data("timeline").restart()}}))}});n.find(".rs-wave").each(function(){var n=e(this);if(n.data("timeline")==t){n.data("timeline",new punchgs.TimelineLite);var i=n.data("angle")==t?10:n.data("angle"),s=n.data("radius")==t?10:n.data("radius"),o=n.data("speed")==t?-20:n.data("speed"),u=n.data("origin")==t?-20:n.data("origin");i=i*r;s=s*r;var a={a:0,ang:i,element:n,unit:s};n.data("timeline").append(new punchgs.TweenLite.fromTo(a,o,{a:360},{a:0,force3D:"auto",ease:punchgs.Linear.easeNone,onUpdate:function(){var e=a.a*(Math.PI/180);punchgs.TweenLite.to(a.element,.1,{force3D:"auto",x:Math.cos(e)*a.unit,y:a.unit*(1-Math.sin(e))})},onComplete:function(){n.data("timeline").restart()}}))}})};var U=function(n){n.find(".rs-pendulum, .rs-slideloop, .rs-pulse, .rs-wave").each(function(){var n=e(this);if(n.data("timeline")!=t){n.data("timeline").pause();n.data("timeline",null)}})};var z=function(n,r){var i=0;var s=n.find(".tp-caption"),o=r.container.find(".tp-static-layers").find(".tp-caption");e.each(o,function(e,t){s.push(t)});s.each(function(n){var s=-1;var o=e(this);if(o.hasClass("tp-static-layer")){if(o.data("startslide")==-1||o.data("startslide")=="-1")o.data("startslide",0);if(o.data("endslide")==-1||o.data("endslide")=="-1")o.data("endslide",r.slideamount);if(o.hasClass("tp-is-shown")){if(o.data("startslide")>r.next||o.data("endslide")0){punchgs.TweenLite.to(o.find("iframe"),.2,{autoAlpha:0});if(J())o.find("iframe").remove();try{var u=o.find("iframe");var a=u.attr("id");var f=$f(a);f.api("pause");clearTimeout(o.data("timerplay"))}catch(l){}try{var c=o.data("player");c.stopVideo();clearTimeout(o.data("timerplay"))}catch(l){}}if(o.find("video").length>0){try{o.find("video").each(function(t){var n=e(this).parent();var r=n.attr("id");clearTimeout(n.data("timerplay"));var i=this;i.pause()})}catch(l){}}try{var h=o.data("timeline");var p=h.getLabelTime("frame99");var d=h.time();if(p>d){var v=h.getTweensOf(o);e.each(v,function(e,t){if(e!=0)t.pause()});if(o.css("opacity")!=0){var m=o.data("endspeed")==t?o.data("speed"):o.data("endspeed");if(m>i)i=m;h.play("frame99")}else h.progress(1,false)}}catch(l){}}});return i};var W=function(e,n,r,i,s){var o=e.data("timeline");var u=new punchgs.TimelineLite;var a=e;if(r.typ=="chars")a=e.data("mySplitText").chars;else if(r.typ=="words")a=e.data("mySplitText").words;else if(r.typ=="lines")a=e.data("mySplitText").lines;r.animation.ease=r.ease;if(r.animation.rotationZ!=t)r.animation.rotation=r.animation.rotationZ;r.animation.data=new Object;r.animation.data.oldx=r.animation.x;r.animation.data.oldy=r.animation.y;r.animation.x=r.animation.x*s;r.animation.y=r.animation.y*s;o.add(u.staggerTo(a,r.speed,r.animation,r.elementdelay),r.start);o.addLabel(i,r.start);e.data("timeline",o)};var X=function(e,n,r,i,s,o){var u=e.data("timeline"),a=new punchgs.TimelineLite;var f=P(),l=e.data("endspeed")==t?e.data("speed"):e.data("endspeed"),c=e.attr("class");f.ease=e.data("endeasing")==t?punchgs.Power1.easeInOut:e.data("endeasing");l=l/1e3;if(c.match("ltr")||c.match("ltl")||c.match("str")||c.match("stl")||c.match("ltt")||c.match("ltb")||c.match("stt")||c.match("stb")||c.match("skewtoright")||c.match("skewtorightshort")||c.match("skewtoleft")||c.match("skewtoleftshort")||c.match("fadeout")||c.match("randomrotateout")){if(c.match("skewtoright")||c.match("skewtorightshort"))f.skewX=35;else if(c.match("skewtoleft")||c.match("skewtoleftshort"))f.skewX=-35;if(c.match("ltr")||c.match("skewtoright"))f.x=n.width+60;else if(c.match("ltl")||c.match("skewtoleft"))f.x=0-(n.width+60);else if(c.match("ltt"))f.y=0-(n.height+60);else if(c.match("ltb"))f.y=n.height+60;else if(c.match("str")||c.match("skewtorightshort")){f.x=50;f.opacity=0}else if(c.match("stl")||c.match("skewtoleftshort")){f.x=-50;f.opacity=0}else if(c.match("stt")){f.y=-50;f.opacity=0}else if(c.match("stb")){f.y=50;f.opacity=0}else if(c.match("randomrotateout")){f.x=Math.random()*n.width;f.y=Math.random()*n.height;f.scale=Math.random()*2+.3;f.rotation=Math.random()*360-180;f.opacity=0}else if(c.match("fadeout")){f.opacity=0}if(c.match("skewtorightshort"))f.x=270;else if(c.match("skewtoleftshort"))f.x=-270;f.data=new Object;f.data.oldx=f.x;f.data.oldy=f.y;f.x=f.x*o;f.y=f.y*o;f.overwrite="auto";var h=e;var h=e;if(e.data("splitout")=="chars")h=e.data("mySplitText").chars;else if(e.data("splitout")=="words")h=e.data("mySplitText").words;else if(e.data("splitout")=="lines")h=e.data("mySplitText").lines;var p=e.data("endelementdelay")==t?0:e.data("endelementdelay");u.add(a.staggerTo(h,l,f,p),r)}else if(e.hasClass("customout")){f=H(f,e.data("customout"));var h=e;if(e.data("splitout")=="chars")h=e.data("mySplitText").chars;else if(e.data("splitout")=="words")h=e.data("mySplitText").words;else if(e.data("splitout")=="lines")h=e.data("mySplitText").lines;var p=e.data("endelementdelay")==t?0:e.data("endelementdelay");f.onStart=function(){punchgs.TweenLite.set(e,{transformPerspective:f.transformPerspective,transformOrigin:f.transformOrigin,overwrite:"auto"})};f.data=new Object;f.data.oldx=f.x;f.data.oldy=f.y;f.x=f.x*o;f.y=f.y*o;u.add(a.staggerTo(h,l,f,p),r)}else{i.delay=0;u.add(punchgs.TweenLite.to(e,l,i),r)}u.addLabel(s,r);e.data("timeline",u)};var V=function(t,n){t.children().each(function(){try{e(this).die("click")}catch(t){}try{e(this).die("mouseenter")}catch(t){}try{e(this).die("mouseleave")}catch(t){}try{e(this).unbind("hover")}catch(t){}});try{t.die("click","mouseenter","mouseleave")}catch(r){}clearInterval(n.cdint);t=null};var $=function(n,r){r.cd=0;r.loop=0;if(r.stopAfterLoops!=t&&r.stopAfterLoops>-1)r.looptogo=r.stopAfterLoops;else r.looptogo=9999999;if(r.stopAtSlide!=t&&r.stopAtSlide>-1)r.lastslidetoshow=r.stopAtSlide;else r.lastslidetoshow=999;r.stopLoop="off";if(r.looptogo==0)r.stopLoop="on";if(r.slideamount>1&&!(r.stopAfterLoops==0&&r.stopAtSlide==1)){var i=n.find(".tp-bannertimer");n.on("stoptimer",function(){var t=e(this).find(".tp-bannertimer");t.data("tween").pause();if(r.hideTimerBar=="on")t.css({visibility:"hidden"})});n.on("starttimer",function(){if(r.conthover!=1&&r.videoplaying!=true&&r.width>r.hideSliderAtLimit&&r.bannertimeronpause!=true&&r.overnav!=true)if(r.stopLoop=="on"&&r.next==r.lastslidetoshow-1||r.noloopanymore==1)r.noloopanymore=1;else{i.css({visibility:"visible"});i.data("tween").resume()}if(r.hideTimerBar=="on")i.css({visibility:"hidden"})});n.on("restarttimer",function(){var t=e(this).find(".tp-bannertimer");if(r.stopLoop=="on"&&r.next==r.lastslidetoshow-1||r.noloopanymore==1)r.noloopanymore=1;else{t.css({visibility:"visible"});t.data("tween").kill();t.data("tween",punchgs.TweenLite.fromTo(t,r.delay/1e3,{width:"0%"},{force3D:"auto",width:"100%",ease:punchgs.Linear.easeNone,onComplete:s,delay:1}))}if(r.hideTimerBar=="on")t.css({visibility:"hidden"})});n.on("nulltimer",function(){i.data("tween").pause(0);if(r.hideTimerBar=="on")i.css({visibility:"hidden"})});var s=function(){if(e("body").find(n).length==0){V(n,r);clearInterval(r.cdint)}n.trigger("revolution.slide.slideatend");if(n.data("conthover-changed")==1){r.conthover=n.data("conthover");n.data("conthover-changed",0)}r.act=r.next;r.next=r.next+1;if(r.next>n.find(">ul >li").length-1){r.next=0;r.looptogo=r.looptogo-1;if(r.looptogo<=0){r.stopLoop="on"}}if(r.stopLoop=="on"&&r.next==r.lastslidetoshow-1){n.find(".tp-bannertimer").css({visibility:"hidden"});n.trigger("revolution.slide.onstop");r.noloopanymore=1}else{i.data("tween").restart()}N(n,r)};i.data("tween",punchgs.TweenLite.fromTo(i,r.delay/1e3,{width:"0%"},{force3D:"auto",width:"100%",ease:punchgs.Linear.easeNone,onComplete:s,delay:1}));i.data("opt",r);n.hover(function(){if(r.onHoverStop=="on"&&!J()){n.trigger("stoptimer");n.trigger("revolution.slide.onpause");var i=n.find(">ul >li:eq("+r.next+") .slotholder");i.find(".defaultimg").each(function(){var n=e(this);if(n.data("kenburn")!=t){n.data("kenburn").pause()}})}},function(){if(n.data("conthover")!=1){n.trigger("revolution.slide.onresume");n.trigger("starttimer");var i=n.find(">ul >li:eq("+r.next+") .slotholder");i.find(".defaultimg").each(function(){var n=e(this);if(n.data("kenburn")!=t){n.data("kenburn").play()}})}})}};var J=function(){var e=["android","webos","iphone","ipad","blackberry","Android","webos",,"iPod","iPhone","iPad","Blackberry","BlackBerry"];var t=false;for(var n in e){if(navigator.userAgent.split(e[n]).length>1){t=true}}return t};var K=function(e,t,n){var r=t.data("owidth");var i=t.data("oheight");if(r/i>n.width/n.height){var s=n.container.width()/r;var o=i*s;var u=o/n.container.height()*e;e=e*(100/u);u=100;e=e;return e+"% "+u+"%"+" 1"}else{var s=n.container.width()/r;var o=i*s;var u=o/n.container.height()*e;return e+"% "+u+"%"}};var Q=function(n,r,i,s){try{var o=n.find(">ul:first-child >li:eq("+r.act+")")}catch(u){var o=n.find(">ul:first-child >li:eq(1)")}r.lastslide=r.act;var f=n.find(">ul:first-child >li:eq("+r.next+")"),l=f.find(".slotholder"),c=l.data("bgposition"),h=l.data("bgpositionend"),p=l.data("zoomstart")/100,d=l.data("zoomend")/100,v=l.data("rotationstart"),m=l.data("rotationend"),g=l.data("bgfit"),y=l.data("bgfitend"),b=l.data("easeme"),w=l.data("duration")/1e3,E=100;if(g==t)g=100;if(y==t)y=100;var S=g,x=y;g=K(g,l,r);y=K(y,l,r);E=K(100,l,r);if(p==t)p=1;if(d==t)d=1;if(v==t)v=0;if(m==t)m=0;if(p<1)p=1;if(d<1)d=1;var T=new Object;T.w=parseInt(E.split(" ")[0],0),T.h=parseInt(E.split(" ")[1],0);var N=false;if(E.split(" ")[2]=="1"){N=true}l.find(".defaultimg").each(function(){var t=e(this);if(l.find(".kenburnimg").length==0)l.append(' ');else{l.find(".kenburnimg img").css({width:T.w+"%",height:T.h+"%"})}var n=l.find(".kenburnimg img");var i=G(r,c,g,n,N),o=G(r,h,y,n,N);if(N){i.w=S/100;o.w=x/100}if(s){punchgs.TweenLite.set(n,{autoAlpha:0,transformPerspective:1200,transformOrigin:"0% 0%",top:0,left:0,scale:i.w,x:i.x,y:i.y});var u=i.w,f=u*n.width()-r.width,p=u*n.height()-r.height,d=Math.abs(i.x/f*100),v=Math.abs(i.y/p*100);if(p==0)v=0;if(f==0)d=0;t.data("bgposition",d+"% "+v+"%");if(!a(8))t.data("currotate",Y(n));if(!a(8))t.data("curscale",T.w*u+"% "+(T.h*u+"%"));l.find(".kenburnimg").remove()}else t.data("kenburn",punchgs.TweenLite.fromTo(n,w,{autoAlpha:1,force3D:punchgs.force3d,transformOrigin:"0% 0%",top:0,left:0,scale:i.w,x:i.x,y:i.y},{autoAlpha:1,rotationZ:m,ease:b,x:o.x,y:o.y,scale:o.w,onUpdate:function(){var e=n[0]._gsTransform.scaleX;var i=e*n.width()-r.width,s=e*n.height()-r.height,o=Math.abs(n[0]._gsTransform.x/i*100),u=Math.abs(n[0]._gsTransform.y/s*100);if(s==0)u=0;if(i==0)o=0;t.data("bgposition",o+"% "+u+"%");if(!a(8))t.data("currotate",Y(n));if(!a(8))t.data("curscale",T.w*e+"% "+(T.h*e+"%"))}}))})};var G=function(e,t,n,r,i){var s=new Object;if(!i)s.w=parseInt(n.split(" ")[0],0)/100;else s.w=parseInt(n.split(" ")[1],0)/100;switch(t){case"left top":case"top left":s.x=0;s.y=0;break;case"center top":case"top center":s.x=((0-r.width())*s.w+parseInt(e.width,0))/2;s.y=0;break;case"top right":case"right top":s.x=(0-r.width())*s.w+parseInt(e.width,0);s.y=0;break;case"center left":case"left center":s.x=0;s.y=((0-r.height())*s.w+parseInt(e.height,0))/2;break;case"center center":s.x=((0-r.width())*s.w+parseInt(e.width,0))/2;s.y=((0-r.height())*s.w+parseInt(e.height,0))/2;break;case"center right":case"right center":s.x=(0-r.width())*s.w+parseInt(e.width,0);s.y=((0-r.height())*s.w+parseInt(e.height,0))/2;break;case"bottom left":case"left bottom":s.x=0;s.y=(0-r.height())*s.w+parseInt(e.height,0);break;case"bottom center":case"center bottom":s.x=((0-r.width())*s.w+parseInt(e.width,0))/2;s.y=(0-r.height())*s.w+parseInt(e.height,0);break;case"bottom right":case"right bottom":s.x=(0-r.width())*s.w+parseInt(e.width,0);s.y=(0-r.height())*s.w+parseInt(e.height,0);break}return s};var Y=function(e){var t=e.css("-webkit-transform")||e.css("-moz-transform")||e.css("-ms-transform")||e.css("-o-transform")||e.css("transform");if(t!=="none"){var n=t.split("(")[1].split(")")[0].split(",");var r=n[0];var i=n[1];var s=Math.round(Math.atan2(i,r)*(180/Math.PI))}else{var s=0}return s<0?s+=360:s};var Z=function(n,r){try{var i=n.find(">ul:first-child >li:eq("+r.act+")")}catch(s){var i=n.find(">ul:first-child >li:eq(1)")}r.lastslide=r.act;var o=n.find(">ul:first-child >li:eq("+r.next+")");var u=i.find(".slotholder");var a=o.find(".slotholder");n.find(".defaultimg").each(function(){var n=e(this);punchgs.TweenLite.killTweensOf(n,false);punchgs.TweenLite.set(n,{scale:1,rotationZ:0});punchgs.TweenLite.killTweensOf(n.data("kenburn img"),false);if(n.data("kenburn")!=t){n.data("kenburn").pause()}if(n.data("currotate")!=t&&n.data("bgposition")!=t&&n.data("curscale")!=t)punchgs.TweenLite.set(n,{rotation:n.data("currotate"),backgroundPosition:n.data("bgposition"),backgroundSize:n.data("curscale")});if(n!=t&&n.data("kenburn img")!=t&&n.data("kenburn img").length>0)punchgs.TweenLite.set(n.data("kenburn img"),{autoAlpha:0})})};var et=function(t,n){if(J()&&n.parallaxDisableOnMobile=="on")return false;t.find(">ul:first-child >li").each(function(){var t=e(this);for(var r=1;r<=10;r++)t.find(".rs-parallaxlevel-"+r).each(function(){var t=e(this);t.wrap('
')})});if(n.parallax=="mouse"||n.parallax=="scroll+mouse"||n.parallax=="mouse+scroll"){t.mouseenter(function(e){var n=t.find(".current-sr-slide-visible");var r=t.offset().top,i=t.offset().left,s=e.pageX-i,o=e.pageY-r;n.data("enterx",s);n.data("entery",o)});t.on("mousemove.hoverdir, mouseleave.hoverdir",function(r){var i=t.find(".current-sr-slide-visible");switch(r.type){case"mousemove":var s=t.offset().top,o=t.offset().left,u=i.data("enterx"),a=i.data("entery"),f=u-(r.pageX-o),l=a-(r.pageY-s);i.find(".tp-parallax-container").each(function(){var t=e(this),r=parseInt(t.data("parallaxlevel"),0)/100,i=f*r,s=l*r;if(n.parallax=="scroll+mouse"||n.parallax=="mouse+scroll")punchgs.TweenLite.to(t,.4,{force3D:"auto",x:i,ease:punchgs.Power3.easeOut,overwrite:"all"});else punchgs.TweenLite.to(t,.4,{force3D:"auto",x:i,y:s,ease:punchgs.Power3.easeOut,overwrite:"all"})});break;case"mouseleave":i.find(".tp-parallax-container").each(function(){var t=e(this);if(n.parallax=="scroll+mouse"||n.parallax=="mouse+scroll")punchgs.TweenLite.to(t,1.5,{force3D:"auto",x:0,ease:punchgs.Power3.easeOut});else punchgs.TweenLite.to(t,1.5,{force3D:"auto",x:0,y:0,ease:punchgs.Power3.easeOut})});break}});if(J())window.ondeviceorientation=function(n){var r=Math.round(n.beta||0),i=Math.round(n.gamma||0);var s=t.find(".current-sr-slide-visible");if(e(window).width()>e(window).height()){var o=i;i=r;r=o}var u=360/t.width()*i,a=180/t.height()*r;s.find(".tp-parallax-container").each(function(){var t=e(this),n=parseInt(t.data("parallaxlevel"),0)/100,r=u*n,i=a*n;punchgs.TweenLite.to(t,.2,{force3D:"auto",x:r,y:i,ease:punchgs.Power3.easeOut})})}}if(n.parallax=="scroll"||n.parallax=="scroll+mouse"||n.parallax=="mouse+scroll"){e(window).on("scroll",function(e){tt(t,n)})}};var tt=function(t,n){if(J()&&n.parallaxDisableOnMobile=="on")return false;var r=t.offset().top,i=e(window).scrollTop(),s=r+t.height()/2,o=r+t.height()/2-i,u=e(window).height()/2,a=u-o;if(s')}var s=i.find(".tp-bullets.tp-thumbs .tp-mask .tp-thumbcontainer");var o=s.parent();o.width(r.thumbWidth*r.thumbAmount);o.height(r.thumbHeight);o.parent().width(r.thumbWidth*r.thumbAmount);o.parent().height(r.thumbHeight);n.find(">ul:first >li").each(function(e){var i=n.find(">ul:first >li:eq("+e+")");var o=i.find(".defaultimg").css("backgroundColor");if(i.data("thumb")!=t)var u=i.data("thumb");else var u=i.find("img:first").attr("src");s.append('
');var a=s.find(".bullet:first")});var u=10;s.find(".bullet").each(function(t){var i=e(this);if(t==r.slideamount-1)i.addClass("last");if(t==0)i.addClass("first");i.width(r.thumbWidth);i.height(r.thumbHeight);if(uul:first >li").length;var l=s.parent().width();r.thumbWidth=u;if(lul:first >li").length,a=u-s+15,f=a/s;t.addClass("over");i=i-30;var l=0-i*f;if(l>0)l=0;if(l<0-u+s)l=0-u+s;it(t,l,200)});s.parent().mousemove(function(){var t=e(this),r=t.offset(),i=e("body").data("mousex")-r.left,s=t.width(),o=t.find(".bullet:first").outerWidth(true),u=o*n.find(">ul:first >li").length-1,a=u-s+15,f=a/s;i=i-3;if(i<6)i=0;if(i+3>s-6)i=s;var l=0-i*f;if(l>0)l=0;if(l<0-u+s)l=0-u+s;it(t,l,0)});s.parent().mouseleave(function(){var t=e(this);t.removeClass("over");rt(n)})}};var rt=function(e){var t=e.parent().find(".tp-bullets.tp-thumbs .tp-mask .tp-thumbcontainer"),n=t.parent(),r=n.offset(),i=n.find(".bullet:first").outerWidth(true),s=n.find(".bullet.selected").index()*i,o=n.width(),i=n.find(".bullet:first").outerWidth(true),u=i*e.find(">ul:first >li").length,a=u-o,f=a/o,l=0-s;if(l>0)l=0;if(l<0-u+o)l=0-u+o;if(!n.hasClass("over")){it(n,l,200)}};var it=function(e,t,n){punchgs.TweenLite.to(e.find(".tp-thumbcontainer"),.2,{force3D:"auto",left:t,ease:punchgs.Power3.easeOut,overwrite:"auto"})}})(jQuery)
\ No newline at end of file
diff --git a/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/js/jquery.themepunch.tools.min.js b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/js/jquery.themepunch.tools.min.js
new file mode 100644
index 00000000..2b13a235
--- /dev/null
+++ b/trunk/src/AppBundle/Resources/public/vendor/rs-plugin/js/jquery.themepunch.tools.min.js
@@ -0,0 +1,142 @@
+
+
+/********************************************
+ - THEMEPUNCH TOOLS Ver. 1.0 -
+ Last Update of Tools 17.11.2014
+*********************************************/
+
+
+/*
+* @fileOverview TouchSwipe - jQuery Plugin
+* @version 1.6.6
+*
+* @author Matt Bryson http://www.github.com/mattbryson
+* @see https://github.com/mattbryson/TouchSwipe-Jquery-Plugin
+* @see http://labs.skinkers.com/touchSwipe/
+* @see http://plugins.jquery.com/project/touchSwipe
+*
+* Copyright (c) 2010 Matt Bryson
+* Dual licensed under the MIT or GPL Version 2 licenses.
+*
+*/
+(function(a){if(typeof define==="function"&&define.amd&&define.amd.jQuery){define(["jquery"],a)}else{a(jQuery)}}(function(f){var p="left",o="right",e="up",x="down",c="in",z="out",m="none",s="auto",l="swipe",t="pinch",A="tap",j="doubletap",b="longtap",y="hold",D="horizontal",u="vertical",i="all",r=10,g="start",k="move",h="end",q="cancel",a="ontouchstart" in window,v=window.navigator.msPointerEnabled&&!window.navigator.pointerEnabled,d=window.navigator.pointerEnabled||window.navigator.msPointerEnabled,B="TouchSwipe";var n={fingers:1,threshold:75,cancelThreshold:null,pinchThreshold:20,maxTimeThreshold:null,fingerReleaseThreshold:250,longTapThreshold:500,doubleTapThreshold:200,swipe:null,swipeLeft:null,swipeRight:null,swipeUp:null,swipeDown:null,swipeStatus:null,pinchIn:null,pinchOut:null,pinchStatus:null,click:null,tap:null,doubleTap:null,longTap:null,hold:null,triggerOnTouchEnd:true,triggerOnTouchLeave:false,allowPageScroll:"auto",fallbackToMouseEvents:true,excludedElements:"label, button, input, select, textarea, a, .noSwipe"};f.fn.swipe=function(G){var F=f(this),E=F.data(B);if(E&&typeof G==="string"){if(E[G]){return E[G].apply(this,Array.prototype.slice.call(arguments,1))}else{f.error("Method "+G+" does not exist on jQuery.swipe")}}else{if(!E&&(typeof G==="object"||!G)){return w.apply(this,arguments)}}return F};f.fn.swipe.defaults=n;f.fn.swipe.phases={PHASE_START:g,PHASE_MOVE:k,PHASE_END:h,PHASE_CANCEL:q};f.fn.swipe.directions={LEFT:p,RIGHT:o,UP:e,DOWN:x,IN:c,OUT:z};f.fn.swipe.pageScroll={NONE:m,HORIZONTAL:D,VERTICAL:u,AUTO:s};f.fn.swipe.fingers={ONE:1,TWO:2,THREE:3,ALL:i};function w(E){if(E&&(E.allowPageScroll===undefined&&(E.swipe!==undefined||E.swipeStatus!==undefined))){E.allowPageScroll=m}if(E.click!==undefined&&E.tap===undefined){E.tap=E.click}if(!E){E={}}E=f.extend({},f.fn.swipe.defaults,E);return this.each(function(){var G=f(this);var F=G.data(B);if(!F){F=new C(this,E);G.data(B,F)}})}function C(a4,av){var az=(a||d||!av.fallbackToMouseEvents),J=az?(d?(v?"MSPointerDown":"pointerdown"):"touchstart"):"mousedown",ay=az?(d?(v?"MSPointerMove":"pointermove"):"touchmove"):"mousemove",U=az?(d?(v?"MSPointerUp":"pointerup"):"touchend"):"mouseup",S=az?null:"mouseleave",aD=(d?(v?"MSPointerCancel":"pointercancel"):"touchcancel");var ag=0,aP=null,ab=0,a1=0,aZ=0,G=1,aq=0,aJ=0,M=null;var aR=f(a4);var Z="start";var W=0;var aQ=null;var T=0,a2=0,a5=0,ad=0,N=0;var aW=null,af=null;try{aR.bind(J,aN);aR.bind(aD,a9)}catch(ak){f.error("events not supported "+J+","+aD+" on jQuery.swipe")}this.enable=function(){aR.bind(J,aN);aR.bind(aD,a9);return aR};this.disable=function(){aK();return aR};this.destroy=function(){aK();aR.data(B,null);return aR};this.option=function(bc,bb){if(av[bc]!==undefined){if(bb===undefined){return av[bc]}else{av[bc]=bb}}else{f.error("Option "+bc+" does not exist on jQuery.swipe.options")}return null};function aN(bd){if(aB()){return}if(f(bd.target).closest(av.excludedElements,aR).length>0){return}var be=bd.originalEvent?bd.originalEvent:bd;var bc,bb=a?be.touches[0]:be;Z=g;if(a){W=be.touches.length}else{bd.preventDefault()}ag=0;aP=null;aJ=null;ab=0;a1=0;aZ=0;G=1;aq=0;aQ=aj();M=aa();R();if(!a||(W===av.fingers||av.fingers===i)||aX()){ai(0,bb);T=at();if(W==2){ai(1,be.touches[1]);a1=aZ=au(aQ[0].start,aQ[1].start)}if(av.swipeStatus||av.pinchStatus){bc=O(be,Z)}}else{bc=false}if(bc===false){Z=q;O(be,Z);return bc}else{if(av.hold){af=setTimeout(f.proxy(function(){aR.trigger("hold",[be.target]);if(av.hold){bc=av.hold.call(aR,be,be.target)}},this),av.longTapThreshold)}ao(true)}return null}function a3(be){var bh=be.originalEvent?be.originalEvent:be;if(Z===h||Z===q||am()){return}var bd,bc=a?bh.touches[0]:bh;var bf=aH(bc);a2=at();if(a){W=bh.touches.length}if(av.hold){clearTimeout(af)}Z=k;if(W==2){if(a1==0){ai(1,bh.touches[1]);a1=aZ=au(aQ[0].start,aQ[1].start)}else{aH(bh.touches[1]);aZ=au(aQ[0].end,aQ[1].end);aJ=ar(aQ[0].end,aQ[1].end)}G=a7(a1,aZ);aq=Math.abs(a1-aZ)}if((W===av.fingers||av.fingers===i)||!a||aX()){aP=aL(bf.start,bf.end);al(be,aP);ag=aS(bf.start,bf.end);ab=aM();aI(aP,ag);if(av.swipeStatus||av.pinchStatus){bd=O(bh,Z)}if(!av.triggerOnTouchEnd||av.triggerOnTouchLeave){var bb=true;if(av.triggerOnTouchLeave){var bg=aY(this);bb=E(bf.end,bg)}if(!av.triggerOnTouchEnd&&bb){Z=aC(k)}else{if(av.triggerOnTouchLeave&&!bb){Z=aC(h)}}if(Z==q||Z==h){O(bh,Z)}}}else{Z=q;O(bh,Z)}if(bd===false){Z=q;O(bh,Z)}}function L(bb){var bc=bb.originalEvent;if(a){if(bc.touches.length>0){F();return true}}if(am()){W=ad}a2=at();ab=aM();if(ba()||!an()){Z=q;O(bc,Z)}else{if(av.triggerOnTouchEnd||(av.triggerOnTouchEnd==false&&Z===k)){bb.preventDefault();Z=h;O(bc,Z)}else{if(!av.triggerOnTouchEnd&&a6()){Z=h;aF(bc,Z,A)}else{if(Z===k){Z=q;O(bc,Z)}}}}ao(false);return null}function a9(){W=0;a2=0;T=0;a1=0;aZ=0;G=1;R();ao(false)}function K(bb){var bc=bb.originalEvent;if(av.triggerOnTouchLeave){Z=aC(h);O(bc,Z)}}function aK(){aR.unbind(J,aN);aR.unbind(aD,a9);aR.unbind(ay,a3);aR.unbind(U,L);if(S){aR.unbind(S,K)}ao(false)}function aC(bf){var be=bf;var bd=aA();var bc=an();var bb=ba();if(!bd||bb){be=q}else{if(bc&&bf==k&&(!av.triggerOnTouchEnd||av.triggerOnTouchLeave)){be=h}else{if(!bc&&bf==h&&av.triggerOnTouchLeave){be=q}}}return be}function O(bd,bb){var bc=undefined;if(I()||V()){bc=aF(bd,bb,l)}else{if((P()||aX())&&bc!==false){bc=aF(bd,bb,t)}}if(aG()&&bc!==false){bc=aF(bd,bb,j)}else{if(ap()&&bc!==false){bc=aF(bd,bb,b)}else{if(ah()&&bc!==false){bc=aF(bd,bb,A)}}}if(bb===q){a9(bd)}if(bb===h){if(a){if(bd.touches.length==0){a9(bd)}}else{a9(bd)}}return bc}function aF(be,bb,bd){var bc=undefined;if(bd==l){aR.trigger("swipeStatus",[bb,aP||null,ag||0,ab||0,W,aQ]);if(av.swipeStatus){bc=av.swipeStatus.call(aR,be,bb,aP||null,ag||0,ab||0,W,aQ);if(bc===false){return false}}if(bb==h&&aV()){aR.trigger("swipe",[aP,ag,ab,W,aQ]);if(av.swipe){bc=av.swipe.call(aR,be,aP,ag,ab,W,aQ);if(bc===false){return false}}switch(aP){case p:aR.trigger("swipeLeft",[aP,ag,ab,W,aQ]);if(av.swipeLeft){bc=av.swipeLeft.call(aR,be,aP,ag,ab,W,aQ)}break;case o:aR.trigger("swipeRight",[aP,ag,ab,W,aQ]);if(av.swipeRight){bc=av.swipeRight.call(aR,be,aP,ag,ab,W,aQ)}break;case e:aR.trigger("swipeUp",[aP,ag,ab,W,aQ]);if(av.swipeUp){bc=av.swipeUp.call(aR,be,aP,ag,ab,W,aQ)}break;case x:aR.trigger("swipeDown",[aP,ag,ab,W,aQ]);if(av.swipeDown){bc=av.swipeDown.call(aR,be,aP,ag,ab,W,aQ)}break}}}if(bd==t){aR.trigger("pinchStatus",[bb,aJ||null,aq||0,ab||0,W,G,aQ]);if(av.pinchStatus){bc=av.pinchStatus.call(aR,be,bb,aJ||null,aq||0,ab||0,W,G,aQ);if(bc===false){return false}}if(bb==h&&a8()){switch(aJ){case c:aR.trigger("pinchIn",[aJ||null,aq||0,ab||0,W,G,aQ]);if(av.pinchIn){bc=av.pinchIn.call(aR,be,aJ||null,aq||0,ab||0,W,G,aQ)}break;case z:aR.trigger("pinchOut",[aJ||null,aq||0,ab||0,W,G,aQ]);if(av.pinchOut){bc=av.pinchOut.call(aR,be,aJ||null,aq||0,ab||0,W,G,aQ)}break}}}if(bd==A){if(bb===q||bb===h){clearTimeout(aW);clearTimeout(af);if(Y()&&!H()){N=at();aW=setTimeout(f.proxy(function(){N=null;aR.trigger("tap",[be.target]);if(av.tap){bc=av.tap.call(aR,be,be.target)}},this),av.doubleTapThreshold)}else{N=null;aR.trigger("tap",[be.target]);if(av.tap){bc=av.tap.call(aR,be,be.target)}}}}else{if(bd==j){if(bb===q||bb===h){clearTimeout(aW);N=null;aR.trigger("doubletap",[be.target]);if(av.doubleTap){bc=av.doubleTap.call(aR,be,be.target)}}}else{if(bd==b){if(bb===q||bb===h){clearTimeout(aW);N=null;aR.trigger("longtap",[be.target]);if(av.longTap){bc=av.longTap.call(aR,be,be.target)}}}}}return bc}function an(){var bb=true;if(av.threshold!==null){bb=ag>=av.threshold}return bb}function ba(){var bb=false;if(av.cancelThreshold!==null&&aP!==null){bb=(aT(aP)-ag)>=av.cancelThreshold}return bb}function ae(){if(av.pinchThreshold!==null){return aq>=av.pinchThreshold}return true}function aA(){var bb;if(av.maxTimeThreshold){if(ab>=av.maxTimeThreshold){bb=false}else{bb=true}}else{bb=true}return bb}function al(bb,bc){if(av.allowPageScroll===m||aX()){bb.preventDefault()}else{var bd=av.allowPageScroll===s;switch(bc){case p:if((av.swipeLeft&&bd)||(!bd&&av.allowPageScroll!=D)){bb.preventDefault()}break;case o:if((av.swipeRight&&bd)||(!bd&&av.allowPageScroll!=D)){bb.preventDefault()}break;case e:if((av.swipeUp&&bd)||(!bd&&av.allowPageScroll!=u)){bb.preventDefault()}break;case x:if((av.swipeDown&&bd)||(!bd&&av.allowPageScroll!=u)){bb.preventDefault()}break}}}function a8(){var bc=aO();var bb=X();var bd=ae();return bc&&bb&&bd}function aX(){return !!(av.pinchStatus||av.pinchIn||av.pinchOut)}function P(){return !!(a8()&&aX())}function aV(){var be=aA();var bg=an();var bd=aO();var bb=X();var bc=ba();var bf=!bc&&bb&&bd&&bg&&be;return bf}function V(){return !!(av.swipe||av.swipeStatus||av.swipeLeft||av.swipeRight||av.swipeUp||av.swipeDown)}function I(){return !!(aV()&&V())}function aO(){return((W===av.fingers||av.fingers===i)||!a)}function X(){return aQ[0].end.x!==0}function a6(){return !!(av.tap)}function Y(){return !!(av.doubleTap)}function aU(){return !!(av.longTap)}function Q(){if(N==null){return false}var bb=at();return(Y()&&((bb-N)<=av.doubleTapThreshold))}function H(){return Q()}function ax(){return((W===1||!a)&&(isNaN(ag)||agav.longTapThreshold)&&(ag=0)){return p}else{if((bd<=360)&&(bd>=315)){return p}else{if((bd>=135)&&(bd<=225)){return o}else{if((bd>45)&&(bd<135)){return x}else{return e}}}}}function at(){var bb=new Date();return bb.getTime()}function aY(bb){bb=f(bb);var bd=bb.offset();var bc={left:bd.left,right:bd.left+bb.outerWidth(),top:bd.top,bottom:bd.top+bb.outerHeight()};return bc}function E(bb,bc){return(bb.x>bc.left&&bb.xbc.top&&bb.ye;e++)r[s[e]]=r=r[s[e]]||{};return r},h=l("com.greensock"),_=1e-10,u=function(t){var e,i=[],s=t.length;for(e=0;e!==s;i.push(t[e++]));return i},m=function(){},f=function(){var t=Object.prototype.toString,e=t.call([]);return function(i){return null!=i&&(i instanceof Array||"object"==typeof i&&!!i.push&&t.call(i)===e)}}(),c={},p=function(s,r,n,a){this.sc=c[s]?c[s].sc:[],c[s]=this,this.gsClass=null,this.func=n;var o=[];this.check=function(h){for(var _,u,m,f,d=r.length,v=d;--d>-1;)(_=c[r[d]]||new p(r[d],[])).gsClass?(o[d]=_.gsClass,v--):h&&_.sc.push(this);if(0===v&&n)for(u=("com.greensock."+s).split("."),m=u.pop(),f=l(u.join("."))[m]=this.gsClass=n.apply(n,o),a&&(i[m]=f,"function"==typeof define&&define.amd?define((t.GreenSockAMDPath?t.GreenSockAMDPath+"/":"")+s.split(".").pop(),[],function(){return f}):s===e&&"undefined"!=typeof module&&module.exports&&(module.exports=f)),d=0;this.sc.length>d;d++)this.sc[d].check()},this.check(!0)},d=t._gsDefine=function(t,e,i,s){return new p(t,e,i,s)},v=h._class=function(t,e,i){return e=e||function(){},d(t,[],function(){return e},i),e};d.globals=i;var g=[0,0,1,1],T=[],y=v("easing.Ease",function(t,e,i,s){this._func=t,this._type=i||0,this._power=s||0,this._params=e?g.concat(e):g},!0),w=y.map={},P=y.register=function(t,e,i,s){for(var r,n,a,o,l=e.split(","),_=l.length,u=(i||"easeIn,easeOut,easeInOut").split(",");--_>-1;)for(n=l[_],r=s?v("easing."+n,null,!0):h.easing[n]||{},a=u.length;--a>-1;)o=u[a],w[n+"."+o]=w[o+n]=r[o]=t.getRatio?t:t[o]||new t};for(n=y.prototype,n._calcEnd=!1,n.getRatio=function(t){if(this._func)return this._params[0]=t,this._func.apply(null,this._params);var e=this._type,i=this._power,s=1===e?1-t:2===e?t:.5>t?2*t:2*(1-t);return 1===i?s*=s:2===i?s*=s*s:3===i?s*=s*s*s:4===i&&(s*=s*s*s*s),1===e?1-s:2===e?s:.5>t?s/2:1-s/2},s=["Linear","Quad","Cubic","Quart","Quint,Strong"],r=s.length;--r>-1;)n=s[r]+",Power"+r,P(new y(null,null,1,r),n,"easeOut",!0),P(new y(null,null,2,r),n,"easeIn"+(0===r?",easeNone":"")),P(new y(null,null,3,r),n,"easeInOut");w.linear=h.easing.Linear.easeIn,w.swing=h.easing.Quad.easeInOut;var b=v("events.EventDispatcher",function(t){this._listeners={},this._eventTarget=t||this});n=b.prototype,n.addEventListener=function(t,e,i,s,r){r=r||0;var n,l,h=this._listeners[t],_=0;for(null==h&&(this._listeners[t]=h=[]),l=h.length;--l>-1;)n=h[l],n.c===e&&n.s===i?h.splice(l,1):0===_&&r>n.pr&&(_=l+1);h.splice(_,0,{c:e,s:i,up:s,pr:r}),this!==a||o||a.wake()},n.removeEventListener=function(t,e){var i,s=this._listeners[t];if(s)for(i=s.length;--i>-1;)if(s[i].c===e)return s.splice(i,1),void 0},n.dispatchEvent=function(t){var e,i,s,r=this._listeners[t];if(r)for(e=r.length,i=this._eventTarget;--e>-1;)s=r[e],s&&(s.up?s.c.call(s.s||i,{type:t,target:i}):s.c.call(s.s||i))};var k=t.requestAnimationFrame,A=t.cancelAnimationFrame,S=Date.now||function(){return(new Date).getTime()},x=S();for(s=["ms","moz","webkit","o"],r=s.length;--r>-1&&!k;)k=t[s[r]+"RequestAnimationFrame"],A=t[s[r]+"CancelAnimationFrame"]||t[s[r]+"CancelRequestAnimationFrame"];v("Ticker",function(t,e){var i,s,r,n,l,h=this,u=S(),f=e!==!1&&k,c=500,p=33,d=function(t){var e,a,o=S()-x;o>c&&(u+=o-p),x+=o,h.time=(x-u)/1e3,e=h.time-l,(!i||e>0||t===!0)&&(h.frame++,l+=e+(e>=n?.004:n-e),a=!0),t!==!0&&(r=s(d)),a&&h.dispatchEvent("tick")};b.call(h),h.time=h.frame=0,h.tick=function(){d(!0)},h.lagSmoothing=function(t,e){c=t||1/_,p=Math.min(e,c,0)},h.sleep=function(){null!=r&&(f&&A?A(r):clearTimeout(r),s=m,r=null,h===a&&(o=!1))},h.wake=function(){null!==r?h.sleep():h.frame>10&&(x=S()-c+5),s=0===i?m:f&&k?k:function(t){return setTimeout(t,0|1e3*(l-h.time)+1)},h===a&&(o=!0),d(2)},h.fps=function(t){return arguments.length?(i=t,n=1/(i||60),l=this.time+n,h.wake(),void 0):i},h.useRAF=function(t){return arguments.length?(h.sleep(),f=t,h.fps(i),void 0):f},h.fps(t),setTimeout(function(){f&&(!r||5>h.frame)&&h.useRAF(!1)},1500)}),n=h.Ticker.prototype=new h.events.EventDispatcher,n.constructor=h.Ticker;var R=v("core.Animation",function(t,e){if(this.vars=e=e||{},this._duration=this._totalDuration=t||0,this._delay=Number(e.delay)||0,this._timeScale=1,this._active=e.immediateRender===!0,this.data=e.data,this._reversed=e.reversed===!0,B){o||a.wake();var i=this.vars.useFrames?q:B;i.add(this,i._time),this.vars.paused&&this.paused(!0)}});a=R.ticker=new h.Ticker,n=R.prototype,n._dirty=n._gc=n._initted=n._paused=!1,n._totalTime=n._time=0,n._rawPrevTime=-1,n._next=n._last=n._onUpdate=n._timeline=n.timeline=null,n._paused=!1;var C=function(){o&&S()-x>2e3&&a.wake(),setTimeout(C,2e3)};C(),n.play=function(t,e){return null!=t&&this.seek(t,e),this.reversed(!1).paused(!1)},n.pause=function(t,e){return null!=t&&this.seek(t,e),this.paused(!0)},n.resume=function(t,e){return null!=t&&this.seek(t,e),this.paused(!1)},n.seek=function(t,e){return this.totalTime(Number(t),e!==!1)},n.restart=function(t,e){return this.reversed(!1).paused(!1).totalTime(t?-this._delay:0,e!==!1,!0)},n.reverse=function(t,e){return null!=t&&this.seek(t||this.totalDuration(),e),this.reversed(!0).paused(!1)},n.render=function(){},n.invalidate=function(){return this._time=this._totalTime=0,this._initted=this._gc=!1,this._rawPrevTime=-1,(this._gc||!this.timeline)&&this._enabled(!0),this},n.isActive=function(){var t,e=this._timeline,i=this._startTime;return!e||!this._gc&&!this._paused&&e.isActive()&&(t=e.rawTime())>=i&&i+this.totalDuration()/this._timeScale>t},n._enabled=function(t,e){return o||a.wake(),this._gc=!t,this._active=this.isActive(),e!==!0&&(t&&!this.timeline?this._timeline.add(this,this._startTime-this._delay):!t&&this.timeline&&this._timeline._remove(this,!0)),!1},n._kill=function(){return this._enabled(!1,!1)},n.kill=function(t,e){return this._kill(t,e),this},n._uncache=function(t){for(var e=t?this:this.timeline;e;)e._dirty=!0,e=e.timeline;return this},n._swapSelfInParams=function(t){for(var e=t.length,i=t.concat();--e>-1;)"{self}"===t[e]&&(i[e]=this);return i},n.eventCallback=function(t,e,i,s){if("on"===(t||"").substr(0,2)){var r=this.vars;if(1===arguments.length)return r[t];null==e?delete r[t]:(r[t]=e,r[t+"Params"]=f(i)&&-1!==i.join("").indexOf("{self}")?this._swapSelfInParams(i):i,r[t+"Scope"]=s),"onUpdate"===t&&(this._onUpdate=e)}return this},n.delay=function(t){return arguments.length?(this._timeline.smoothChildTiming&&this.startTime(this._startTime+t-this._delay),this._delay=t,this):this._delay},n.duration=function(t){return arguments.length?(this._duration=this._totalDuration=t,this._uncache(!0),this._timeline.smoothChildTiming&&this._time>0&&this._timethis._duration?this._duration:t,e)):this._time},n.totalTime=function(t,e,i){if(o||a.wake(),!arguments.length)return this._totalTime;if(this._timeline){if(0>t&&!i&&(t+=this.totalDuration()),this._timeline.smoothChildTiming){this._dirty&&this.totalDuration();var s=this._totalDuration,r=this._timeline;if(t>s&&!i&&(t=s),this._startTime=(this._paused?this._pauseTime:r._time)-(this._reversed?s-t:t)/this._timeScale,r._dirty||this._uncache(!1),r._timeline)for(;r._timeline;)r._timeline._time!==(r._startTime+r._totalTime)/r._timeScale&&r.totalTime(r._totalTime,!0),r=r._timeline}this._gc&&this._enabled(!0,!1),(this._totalTime!==t||0===this._duration)&&(this.render(t,e,!1),z.length&&M())}return this},n.progress=n.totalProgress=function(t,e){return arguments.length?this.totalTime(this.duration()*t,e):this._time/this.duration()},n.startTime=function(t){return arguments.length?(t!==this._startTime&&(this._startTime=t,this.timeline&&this.timeline._sortChildren&&this.timeline.add(this,t-this._delay)),this):this._startTime},n.endTime=function(t){return this._startTime+(0!=t?this.totalDuration():this.duration())/this._timeScale},n.timeScale=function(t){if(!arguments.length)return this._timeScale;if(t=t||_,this._timeline&&this._timeline.smoothChildTiming){var e=this._pauseTime,i=e||0===e?e:this._timeline.totalTime();this._startTime=i-(i-this._startTime)*this._timeScale/t}return this._timeScale=t,this._uncache(!1)},n.reversed=function(t){return arguments.length?(t!=this._reversed&&(this._reversed=t,this.totalTime(this._timeline&&!this._timeline.smoothChildTiming?this.totalDuration()-this._totalTime:this._totalTime,!0)),this):this._reversed},n.paused=function(t){if(!arguments.length)return this._paused;if(t!=this._paused&&this._timeline){o||t||a.wake();var e=this._timeline,i=e.rawTime(),s=i-this._pauseTime;!t&&e.smoothChildTiming&&(this._startTime+=s,this._uncache(!1)),this._pauseTime=t?i:null,this._paused=t,this._active=this.isActive(),!t&&0!==s&&this._initted&&this.duration()&&this.render(e.smoothChildTiming?this._totalTime:(i-this._startTime)/this._timeScale,!0,!0)}return this._gc&&!t&&this._enabled(!0,!1),this};var D=v("core.SimpleTimeline",function(t){R.call(this,0,t),this.autoRemoveChildren=this.smoothChildTiming=!0});n=D.prototype=new R,n.constructor=D,n.kill()._gc=!1,n._first=n._last=n._recent=null,n._sortChildren=!1,n.add=n.insert=function(t,e){var i,s;if(t._startTime=Number(e||0)+t._delay,t._paused&&this!==t._timeline&&(t._pauseTime=t._startTime+(this.rawTime()-t._startTime)/t._timeScale),t.timeline&&t.timeline._remove(t,!0),t.timeline=t._timeline=this,t._gc&&t._enabled(!0,!0),i=this._last,this._sortChildren)for(s=t._startTime;i&&i._startTime>s;)i=i._prev;return i?(t._next=i._next,i._next=t):(t._next=this._first,this._first=t),t._next?t._next._prev=t:this._last=t,t._prev=i,this._recent=t,this._timeline&&this._uncache(!0),this},n._remove=function(t,e){return t.timeline===this&&(e||t._enabled(!1,!0),t._prev?t._prev._next=t._next:this._first===t&&(this._first=t._next),t._next?t._next._prev=t._prev:this._last===t&&(this._last=t._prev),t._next=t._prev=t.timeline=null,t===this._recent&&(this._recent=this._last),this._timeline&&this._uncache(!0)),this},n.render=function(t,e,i){var s,r=this._first;for(this._totalTime=this._time=this._rawPrevTime=t;r;)s=r._next,(r._active||t>=r._startTime&&!r._paused)&&(r._reversed?r.render((r._dirty?r.totalDuration():r._totalDuration)-(t-r._startTime)*r._timeScale,e,i):r.render((t-r._startTime)*r._timeScale,e,i)),r=s},n.rawTime=function(){return o||a.wake(),this._totalTime};var I=v("TweenLite",function(e,i,s){if(R.call(this,i,s),this.render=I.prototype.render,null==e)throw"Cannot tween a null target.";this.target=e="string"!=typeof e?e:I.selector(e)||e;var r,n,a,o=e.jquery||e.length&&e!==t&&e[0]&&(e[0]===t||e[0].nodeType&&e[0].style&&!e.nodeType),l=this.vars.overwrite;if(this._overwrite=l=null==l?Q[I.defaultOverwrite]:"number"==typeof l?l>>0:Q[l],(o||e instanceof Array||e.push&&f(e))&&"number"!=typeof e[0])for(this._targets=a=u(e),this._propLookup=[],this._siblings=[],r=0;a.length>r;r++)n=a[r],n?"string"!=typeof n?n.length&&n!==t&&n[0]&&(n[0]===t||n[0].nodeType&&n[0].style&&!n.nodeType)?(a.splice(r--,1),this._targets=a=a.concat(u(n))):(this._siblings[r]=$(n,this,!1),1===l&&this._siblings[r].length>1&&H(n,this,null,1,this._siblings[r])):(n=a[r--]=I.selector(n),"string"==typeof n&&a.splice(r+1,1)):a.splice(r--,1);else this._propLookup={},this._siblings=$(e,this,!1),1===l&&this._siblings.length>1&&H(e,this,null,1,this._siblings);(this.vars.immediateRender||0===i&&0===this._delay&&this.vars.immediateRender!==!1)&&(this._time=-_,this.render(-this._delay))},!0),E=function(e){return e&&e.length&&e!==t&&e[0]&&(e[0]===t||e[0].nodeType&&e[0].style&&!e.nodeType)},O=function(t,e){var i,s={};for(i in t)G[i]||i in e&&"transform"!==i&&"x"!==i&&"y"!==i&&"width"!==i&&"height"!==i&&"className"!==i&&"border"!==i||!(!U[i]||U[i]&&U[i]._autoCSS)||(s[i]=t[i],delete t[i]);t.css=s};n=I.prototype=new R,n.constructor=I,n.kill()._gc=!1,n.ratio=0,n._firstPT=n._targets=n._overwrittenProps=n._startAt=null,n._notifyPluginsOfEnabled=n._lazy=!1,I.version="1.14.2",I.defaultEase=n._ease=new y(null,null,1,1),I.defaultOverwrite="auto",I.ticker=a,I.autoSleep=!0,I.lagSmoothing=function(t,e){a.lagSmoothing(t,e)},I.selector=t.$||t.jQuery||function(e){var i=t.$||t.jQuery;return i?(I.selector=i,i(e)):"undefined"==typeof document?e:document.querySelectorAll?document.querySelectorAll(e):document.getElementById("#"===e.charAt(0)?e.substr(1):e)};var z=[],L={},N=I._internals={isArray:f,isSelector:E,lazyTweens:z},U=I._plugins={},F=N.tweenLookup={},j=0,G=N.reservedProps={ease:1,delay:1,overwrite:1,onComplete:1,onCompleteParams:1,onCompleteScope:1,useFrames:1,runBackwards:1,startAt:1,onUpdate:1,onUpdateParams:1,onUpdateScope:1,onStart:1,onStartParams:1,onStartScope:1,onReverseComplete:1,onReverseCompleteParams:1,onReverseCompleteScope:1,onRepeat:1,onRepeatParams:1,onRepeatScope:1,easeParams:1,yoyo:1,immediateRender:1,repeat:1,repeatDelay:1,data:1,paused:1,reversed:1,autoCSS:1,lazy:1,onOverwrite:1},Q={none:0,all:1,auto:2,concurrent:3,allOnStart:4,preexisting:5,"true":1,"false":0},q=R._rootFramesTimeline=new D,B=R._rootTimeline=new D,M=N.lazyRender=function(){var t,e=z.length;for(L={};--e>-1;)t=z[e],t&&t._lazy!==!1&&(t.render(t._lazy[0],t._lazy[1],!0),t._lazy=!1);z.length=0};B._startTime=a.time,q._startTime=a.frame,B._active=q._active=!0,setTimeout(M,1),R._updateRoot=I.render=function(){var t,e,i;if(z.length&&M(),B.render((a.time-B._startTime)*B._timeScale,!1,!1),q.render((a.frame-q._startTime)*q._timeScale,!1,!1),z.length&&M(),!(a.frame%120)){for(i in F){for(e=F[i].tweens,t=e.length;--t>-1;)e[t]._gc&&e.splice(t,1);0===e.length&&delete F[i]}if(i=B._first,(!i||i._paused)&&I.autoSleep&&!q._first&&1===a._listeners.tick.length){for(;i&&i._paused;)i=i._next;i||a.sleep()}}},a.addEventListener("tick",R._updateRoot);var $=function(t,e,i){var s,r,n=t._gsTweenID;if(F[n||(t._gsTweenID=n="t"+j++)]||(F[n]={target:t,tweens:[]}),e&&(s=F[n].tweens,s[r=s.length]=e,i))for(;--r>-1;)s[r]===e&&s.splice(r,1);return F[n].tweens},K=function(t,e,i,s){var r,n,a=t.vars.onOverwrite;return a&&(r=a(t,e,i,s)),a=I.onOverwrite,a&&(n=a(t,e,i,s)),r!==!1&&n!==!1},H=function(t,e,i,s,r){var n,a,o,l;if(1===s||s>=4){for(l=r.length,n=0;l>n;n++)if((o=r[n])!==e)o._gc||K(o,e)&&o._enabled(!1,!1)&&(a=!0);else if(5===s)break;return a}var h,u=e._startTime+_,m=[],f=0,c=0===e._duration;for(n=r.length;--n>-1;)(o=r[n])===e||o._gc||o._paused||(o._timeline!==e._timeline?(h=h||J(e,0,c),0===J(o,h,c)&&(m[f++]=o)):u>=o._startTime&&o._startTime+o.totalDuration()/o._timeScale>u&&((c||!o._initted)&&2e-10>=u-o._startTime||(m[f++]=o)));for(n=f;--n>-1;)if(o=m[n],2===s&&o._kill(i,t,e)&&(a=!0),2!==s||!o._firstPT&&o._initted){if(2!==s&&!K(o,e))continue;o._enabled(!1,!1)&&(a=!0)}return a},J=function(t,e,i){for(var s=t._timeline,r=s._timeScale,n=t._startTime;s._timeline;){if(n+=s._startTime,r*=s._timeScale,s._paused)return-100;s=s._timeline}return n/=r,n>e?n-e:i&&n===e||!t._initted&&2*_>n-e?_:(n+=t.totalDuration()/t._timeScale/r)>e+_?0:n-e-_};n._init=function(){var t,e,i,s,r,n=this.vars,a=this._overwrittenProps,o=this._duration,l=!!n.immediateRender,h=n.ease;if(n.startAt){this._startAt&&(this._startAt.render(-1,!0),this._startAt.kill()),r={};for(s in n.startAt)r[s]=n.startAt[s];if(r.overwrite=!1,r.immediateRender=!0,r.lazy=l&&n.lazy!==!1,r.startAt=r.delay=null,this._startAt=I.to(this.target,0,r),l)if(this._time>0)this._startAt=null;else if(0!==o)return}else if(n.runBackwards&&0!==o)if(this._startAt)this._startAt.render(-1,!0),this._startAt.kill(),this._startAt=null;else{0!==this._time&&(l=!1),i={};for(s in n)G[s]&&"autoCSS"!==s||(i[s]=n[s]);if(i.overwrite=0,i.data="isFromStart",i.lazy=l&&n.lazy!==!1,i.immediateRender=l,this._startAt=I.to(this.target,0,i),l){if(0===this._time)return}else this._startAt._init(),this._startAt._enabled(!1),this.vars.immediateRender&&(this._startAt=null)}if(this._ease=h=h?h instanceof y?h:"function"==typeof h?new y(h,n.easeParams):w[h]||I.defaultEase:I.defaultEase,n.easeParams instanceof Array&&h.config&&(this._ease=h.config.apply(h,n.easeParams)),this._easeType=this._ease._type,this._easePower=this._ease._power,this._firstPT=null,this._targets)for(t=this._targets.length;--t>-1;)this._initProps(this._targets[t],this._propLookup[t]={},this._siblings[t],a?a[t]:null)&&(e=!0);else e=this._initProps(this.target,this._propLookup,this._siblings,a);if(e&&I._onPluginEvent("_onInitAllProps",this),a&&(this._firstPT||"function"!=typeof this.target&&this._enabled(!1,!1)),n.runBackwards)for(i=this._firstPT;i;)i.s+=i.c,i.c=-i.c,i=i._next;this._onUpdate=n.onUpdate,this._initted=!0},n._initProps=function(e,i,s,r){var n,a,o,l,h,_;if(null==e)return!1;L[e._gsTweenID]&&M(),this.vars.css||e.style&&e!==t&&e.nodeType&&U.css&&this.vars.autoCSS!==!1&&O(this.vars,e);for(n in this.vars){if(_=this.vars[n],G[n])_&&(_ instanceof Array||_.push&&f(_))&&-1!==_.join("").indexOf("{self}")&&(this.vars[n]=_=this._swapSelfInParams(_,this));else if(U[n]&&(l=new U[n])._onInitTween(e,this.vars[n],this)){for(this._firstPT=h={_next:this._firstPT,t:l,p:"setRatio",s:0,c:1,f:!0,n:n,pg:!0,pr:l._priority},a=l._overwriteProps.length;--a>-1;)i[l._overwriteProps[a]]=this._firstPT;(l._priority||l._onInitAllProps)&&(o=!0),(l._onDisable||l._onEnable)&&(this._notifyPluginsOfEnabled=!0)}else this._firstPT=i[n]=h={_next:this._firstPT,t:e,p:n,f:"function"==typeof e[n],n:n,pg:!1,pr:0},h.s=h.f?e[n.indexOf("set")||"function"!=typeof e["get"+n.substr(3)]?n:"get"+n.substr(3)]():parseFloat(e[n]),h.c="string"==typeof _&&"="===_.charAt(1)?parseInt(_.charAt(0)+"1",10)*Number(_.substr(2)):Number(_)-h.s||0;h&&h._next&&(h._next._prev=h)}return r&&this._kill(r,e)?this._initProps(e,i,s,r):this._overwrite>1&&this._firstPT&&s.length>1&&H(e,this,i,this._overwrite,s)?(this._kill(i,e),this._initProps(e,i,s,r)):(this._firstPT&&(this.vars.lazy!==!1&&this._duration||this.vars.lazy&&!this._duration)&&(L[e._gsTweenID]=!0),o)},n.render=function(t,e,i){var s,r,n,a,o=this._time,l=this._duration,h=this._rawPrevTime;if(t>=l)this._totalTime=this._time=l,this.ratio=this._ease._calcEnd?this._ease.getRatio(1):1,this._reversed||(s=!0,r="onComplete"),0===l&&(this._initted||!this.vars.lazy||i)&&(this._startTime===this._timeline._duration&&(t=0),(0===t||0>h||h===_)&&h!==t&&(i=!0,h>_&&(r="onReverseComplete")),this._rawPrevTime=a=!e||t||h===t?t:_);else if(1e-7>t)this._totalTime=this._time=0,this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0,(0!==o||0===l&&h>0&&h!==_)&&(r="onReverseComplete",s=this._reversed),0>t&&(this._active=!1,0===l&&(this._initted||!this.vars.lazy||i)&&(h>=0&&(i=!0),this._rawPrevTime=a=!e||t||h===t?t:_)),this._initted||(i=!0);else if(this._totalTime=this._time=t,this._easeType){var u=t/l,m=this._easeType,f=this._easePower;(1===m||3===m&&u>=.5)&&(u=1-u),3===m&&(u*=2),1===f?u*=u:2===f?u*=u*u:3===f?u*=u*u*u:4===f&&(u*=u*u*u*u),this.ratio=1===m?1-u:2===m?u:.5>t/l?u/2:1-u/2}else this.ratio=this._ease.getRatio(t/l);if(this._time!==o||i){if(!this._initted){if(this._init(),!this._initted||this._gc)return;if(!i&&this._firstPT&&(this.vars.lazy!==!1&&this._duration||this.vars.lazy&&!this._duration))return this._time=this._totalTime=o,this._rawPrevTime=h,z.push(this),this._lazy=[t,e],void 0;this._time&&!s?this.ratio=this._ease.getRatio(this._time/l):s&&this._ease._calcEnd&&(this.ratio=this._ease.getRatio(0===this._time?0:1))}for(this._lazy!==!1&&(this._lazy=!1),this._active||!this._paused&&this._time!==o&&t>=0&&(this._active=!0),0===o&&(this._startAt&&(t>=0?this._startAt.render(t,e,i):r||(r="_dummyGS")),this.vars.onStart&&(0!==this._time||0===l)&&(e||this.vars.onStart.apply(this.vars.onStartScope||this,this.vars.onStartParams||T))),n=this._firstPT;n;)n.f?n.t[n.p](n.c*this.ratio+n.s):n.t[n.p]=n.c*this.ratio+n.s,n=n._next;this._onUpdate&&(0>t&&this._startAt&&t!==-1e-4&&this._startAt.render(t,e,i),e||(this._time!==o||s)&&this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||T)),r&&(!this._gc||i)&&(0>t&&this._startAt&&!this._onUpdate&&t!==-1e-4&&this._startAt.render(t,e,i),s&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!e&&this.vars[r]&&this.vars[r].apply(this.vars[r+"Scope"]||this,this.vars[r+"Params"]||T),0===l&&this._rawPrevTime===_&&a!==_&&(this._rawPrevTime=0))}},n._kill=function(t,e,i){if("all"===t&&(t=null),null==t&&(null==e||e===this.target))return this._lazy=!1,this._enabled(!1,!1);e="string"!=typeof e?e||this._targets||this.target:I.selector(e)||e;var s,r,n,a,o,l,h,_,u;if((f(e)||E(e))&&"number"!=typeof e[0])for(s=e.length;--s>-1;)this._kill(t,e[s])&&(l=!0);else{if(this._targets){for(s=this._targets.length;--s>-1;)if(e===this._targets[s]){o=this._propLookup[s]||{},this._overwrittenProps=this._overwrittenProps||[],r=this._overwrittenProps[s]=t?this._overwrittenProps[s]||{}:"all";break}}else{if(e!==this.target)return!1;o=this._propLookup,r=this._overwrittenProps=t?this._overwrittenProps||{}:"all"}if(o){if(h=t||o,_=t!==r&&"all"!==r&&t!==o&&("object"!=typeof t||!t._tempKill),i&&(I.onOverwrite||this.vars.onOverwrite)){for(n in h)o[n]&&(u||(u=[]),u.push(n));if(!K(this,i,e,u))return!1}for(n in h)(a=o[n])&&(a.pg&&a.t._kill(h)&&(l=!0),a.pg&&0!==a.t._overwriteProps.length||(a._prev?a._prev._next=a._next:a===this._firstPT&&(this._firstPT=a._next),a._next&&(a._next._prev=a._prev),a._next=a._prev=null),delete o[n]),_&&(r[n]=1);!this._firstPT&&this._initted&&this._enabled(!1,!1)}}return l},n.invalidate=function(){return this._notifyPluginsOfEnabled&&I._onPluginEvent("_onDisable",this),this._firstPT=this._overwrittenProps=this._startAt=this._onUpdate=null,this._notifyPluginsOfEnabled=this._active=this._lazy=!1,this._propLookup=this._targets?{}:[],R.prototype.invalidate.call(this),this.vars.immediateRender&&(this._time=-_,this.render(-this._delay)),this},n._enabled=function(t,e){if(o||a.wake(),t&&this._gc){var i,s=this._targets;if(s)for(i=s.length;--i>-1;)this._siblings[i]=$(s[i],this,!0);else this._siblings=$(this.target,this,!0)}return R.prototype._enabled.call(this,t,e),this._notifyPluginsOfEnabled&&this._firstPT?I._onPluginEvent(t?"_onEnable":"_onDisable",this):!1},I.to=function(t,e,i){return new I(t,e,i)},I.from=function(t,e,i){return i.runBackwards=!0,i.immediateRender=0!=i.immediateRender,new I(t,e,i)},I.fromTo=function(t,e,i,s){return s.startAt=i,s.immediateRender=0!=s.immediateRender&&0!=i.immediateRender,new I(t,e,s)},I.delayedCall=function(t,e,i,s,r){return new I(e,0,{delay:t,onComplete:e,onCompleteParams:i,onCompleteScope:s,onReverseComplete:e,onReverseCompleteParams:i,onReverseCompleteScope:s,immediateRender:!1,useFrames:r,overwrite:0})},I.set=function(t,e){return new I(t,0,e)},I.getTweensOf=function(t,e){if(null==t)return[];t="string"!=typeof t?t:I.selector(t)||t;var i,s,r,n;if((f(t)||E(t))&&"number"!=typeof t[0]){for(i=t.length,s=[];--i>-1;)s=s.concat(I.getTweensOf(t[i],e));for(i=s.length;--i>-1;)for(n=s[i],r=i;--r>-1;)n===s[r]&&s.splice(i,1)}else for(s=$(t).concat(),i=s.length;--i>-1;)(s[i]._gc||e&&!s[i].isActive())&&s.splice(i,1);return s},I.killTweensOf=I.killDelayedCallsTo=function(t,e,i){"object"==typeof e&&(i=e,e=!1);for(var s=I.getTweensOf(t,e),r=s.length;--r>-1;)s[r]._kill(i,t)};var V=v("plugins.TweenPlugin",function(t,e){this._overwriteProps=(t||"").split(","),this._propName=this._overwriteProps[0],this._priority=e||0,this._super=V.prototype},!0);if(n=V.prototype,V.version="1.10.1",V.API=2,n._firstPT=null,n._addTween=function(t,e,i,s,r,n){var a,o;return null!=s&&(a="number"==typeof s||"="!==s.charAt(1)?Number(s)-i:parseInt(s.charAt(0)+"1",10)*Number(s.substr(2)))?(this._firstPT=o={_next:this._firstPT,t:t,p:e,s:i,c:a,f:"function"==typeof t[e],n:r||e,r:n},o._next&&(o._next._prev=o),o):void 0},n.setRatio=function(t){for(var e,i=this._firstPT,s=1e-6;i;)e=i.c*t+i.s,i.r?e=Math.round(e):s>e&&e>-s&&(e=0),i.f?i.t[i.p](e):i.t[i.p]=e,i=i._next},n._kill=function(t){var e,i=this._overwriteProps,s=this._firstPT;if(null!=t[this._propName])this._overwriteProps=[];else for(e=i.length;--e>-1;)null!=t[i[e]]&&i.splice(e,1);for(;s;)null!=t[s.n]&&(s._next&&(s._next._prev=s._prev),s._prev?(s._prev._next=s._next,s._prev=null):this._firstPT===s&&(this._firstPT=s._next)),s=s._next;return!1},n._roundProps=function(t,e){for(var i=this._firstPT;i;)(t[this._propName]||null!=i.n&&t[i.n.split(this._propName+"_").join("")])&&(i.r=e),i=i._next},I._onPluginEvent=function(t,e){var i,s,r,n,a,o=e._firstPT;if("_onInitAllProps"===t){for(;o;){for(a=o._next,s=r;s&&s.pr>o.pr;)s=s._next;(o._prev=s?s._prev:n)?o._prev._next=o:r=o,(o._next=s)?s._prev=o:n=o,o=a}o=e._firstPT=r}for(;o;)o.pg&&"function"==typeof o.t[t]&&o.t[t]()&&(i=!0),o=o._next;return i},V.activate=function(t){for(var e=t.length;--e>-1;)t[e].API===V.API&&(U[(new t[e])._propName]=t[e]);return!0},d.plugin=function(t){if(!(t&&t.propName&&t.init&&t.API))throw"illegal plugin definition.";var e,i=t.propName,s=t.priority||0,r=t.overwriteProps,n={init:"_onInitTween",set:"setRatio",kill:"_kill",round:"_roundProps",initAll:"_onInitAllProps"},a=v("plugins."+i.charAt(0).toUpperCase()+i.substr(1)+"Plugin",function(){V.call(this,i,s),this._overwriteProps=r||[]},t.global===!0),o=a.prototype=new V(i);o.constructor=a,a.API=t.API;for(e in n)"function"==typeof t[e]&&(o[n[e]]=t[e]);return a.version=t.version,V.activate([a]),a},s=t._gsQueue){for(r=0;s.length>r;r++)s[r]();for(n in c)c[n].func||t.console.log("GSAP encountered missing dependency: com.greensock."+n)}o=!1}})("undefined"!=typeof module&&module.exports&&"undefined"!=typeof global?global:this||window,"TweenLite");
+
+/*!
+ * VERSION: 1.14.2
+ * DATE: 2014-10-18
+ * UPDATES AND DOCS AT: http://www.greensock.com
+ *
+ * @license Copyright (c) 2008-2014, GreenSock. All rights reserved.
+ * This work is subject to the terms at http://www.greensock.com/terms_of_use.html or for
+ * Club GreenSock members, the software agreement that was issued with your membership.
+ *
+ * @author: Jack Doyle, jack@greensock.com
+ */
+var _gsScope="undefined"!=typeof module&&module.exports&&"undefined"!=typeof global?global:this||window;(_gsScope._gsQueue||(_gsScope._gsQueue=[])).push(function(){"use strict";_gsScope._gsDefine("TimelineLite",["core.Animation","core.SimpleTimeline","TweenLite"],function(t,e,i){var s=function(t){e.call(this,t),this._labels={},this.autoRemoveChildren=this.vars.autoRemoveChildren===!0,this.smoothChildTiming=this.vars.smoothChildTiming===!0,this._sortChildren=!0,this._onUpdate=this.vars.onUpdate;var i,s,r=this.vars;for(s in r)i=r[s],o(i)&&-1!==i.join("").indexOf("{self}")&&(r[s]=this._swapSelfInParams(i));o(r.tweens)&&this.add(r.tweens,0,r.align,r.stagger)},r=1e-10,n=i._internals,a=n.isSelector,o=n.isArray,h=n.lazyTweens,l=n.lazyRender,_=[],u=_gsScope._gsDefine.globals,c=function(t){var e,i={};for(e in t)i[e]=t[e];return i},p=function(t,e,i,s){var r=t._timeline._totalTime;(e||!this._forcingPlayhead)&&(t._timeline.pause(t._startTime),e&&e.apply(s||t._timeline,i||_),this._forcingPlayhead&&t._timeline.seek(r))},f=function(t){var e,i=[],s=t.length;for(e=0;e!==s;i.push(t[e++]));return i},m=s.prototype=new e;return s.version="1.14.2",m.constructor=s,m.kill()._gc=m._forcingPlayhead=!1,m.to=function(t,e,s,r){var n=s.repeat&&u.TweenMax||i;return e?this.add(new n(t,e,s),r):this.set(t,s,r)},m.from=function(t,e,s,r){return this.add((s.repeat&&u.TweenMax||i).from(t,e,s),r)},m.fromTo=function(t,e,s,r,n){var a=r.repeat&&u.TweenMax||i;return e?this.add(a.fromTo(t,e,s,r),n):this.set(t,r,n)},m.staggerTo=function(t,e,r,n,o,h,l,_){var u,p=new s({onComplete:h,onCompleteParams:l,onCompleteScope:_,smoothChildTiming:this.smoothChildTiming});for("string"==typeof t&&(t=i.selector(t)||t),t=t||[],a(t)&&(t=f(t)),n=n||0,0>n&&(t=f(t),t.reverse(),n*=-1),u=0;t.length>u;u++)r.startAt&&(r.startAt=c(r.startAt)),p.to(t[u],e,c(r),u*n);return this.add(p,o)},m.staggerFrom=function(t,e,i,s,r,n,a,o){return i.immediateRender=0!=i.immediateRender,i.runBackwards=!0,this.staggerTo(t,e,i,s,r,n,a,o)},m.staggerFromTo=function(t,e,i,s,r,n,a,o,h){return s.startAt=i,s.immediateRender=0!=s.immediateRender&&0!=i.immediateRender,this.staggerTo(t,e,s,r,n,a,o,h)},m.call=function(t,e,s,r){return this.add(i.delayedCall(0,t,e,s),r)},m.set=function(t,e,s){return s=this._parseTimeOrLabel(s,0,!0),null==e.immediateRender&&(e.immediateRender=s===this._time&&!this._paused),this.add(new i(t,0,e),s)},s.exportRoot=function(t,e){t=t||{},null==t.smoothChildTiming&&(t.smoothChildTiming=!0);var r,n,a=new s(t),o=a._timeline;for(null==e&&(e=!0),o._remove(a,!0),a._startTime=0,a._rawPrevTime=a._time=a._totalTime=o._time,r=o._first;r;)n=r._next,e&&r instanceof i&&r.target===r.vars.onComplete||a.add(r,r._startTime-r._delay),r=n;return o.add(a,0),a},m.add=function(r,n,a,h){var l,_,u,c,p,f;if("number"!=typeof n&&(n=this._parseTimeOrLabel(n,0,!0,r)),!(r instanceof t)){if(r instanceof Array||r&&r.push&&o(r)){for(a=a||"normal",h=h||0,l=n,_=r.length,u=0;_>u;u++)o(c=r[u])&&(c=new s({tweens:c})),this.add(c,l),"string"!=typeof c&&"function"!=typeof c&&("sequence"===a?l=c._startTime+c.totalDuration()/c._timeScale:"start"===a&&(c._startTime-=c.delay())),l+=h;return this._uncache(!0)}if("string"==typeof r)return this.addLabel(r,n);if("function"!=typeof r)throw"Cannot add "+r+" into the timeline; it is not a tween, timeline, function, or string.";r=i.delayedCall(0,r)}if(e.prototype.add.call(this,r,n),(this._gc||this._time===this._duration)&&!this._paused&&this._durationr._startTime;p._timeline;)f&&p._timeline.smoothChildTiming?p.totalTime(p._totalTime,!0):p._gc&&p._enabled(!0,!1),p=p._timeline;return this},m.remove=function(e){if(e instanceof t)return this._remove(e,!1);if(e instanceof Array||e&&e.push&&o(e)){for(var i=e.length;--i>-1;)this.remove(e[i]);return this}return"string"==typeof e?this.removeLabel(e):this.kill(null,e)},m._remove=function(t,i){e.prototype._remove.call(this,t,i);var s=this._last;return s?this._time>s._startTime+s._totalDuration/s._timeScale&&(this._time=this.duration(),this._totalTime=this._totalDuration):this._time=this._totalTime=this._duration=this._totalDuration=0,this},m.append=function(t,e){return this.add(t,this._parseTimeOrLabel(null,e,!0,t))},m.insert=m.insertMultiple=function(t,e,i,s){return this.add(t,e||0,i,s)},m.appendMultiple=function(t,e,i,s){return this.add(t,this._parseTimeOrLabel(null,e,!0,t),i,s)},m.addLabel=function(t,e){return this._labels[t]=this._parseTimeOrLabel(e),this},m.addPause=function(t,e,i,s){return this.call(p,["{self}",e,i,s],this,t)},m.removeLabel=function(t){return delete this._labels[t],this},m.getLabelTime=function(t){return null!=this._labels[t]?this._labels[t]:-1},m._parseTimeOrLabel=function(e,i,s,r){var n;if(r instanceof t&&r.timeline===this)this.remove(r);else if(r&&(r instanceof Array||r.push&&o(r)))for(n=r.length;--n>-1;)r[n]instanceof t&&r[n].timeline===this&&this.remove(r[n]);if("string"==typeof i)return this._parseTimeOrLabel(i,s&&"number"==typeof e&&null==this._labels[i]?e-this.duration():0,s);if(i=i||0,"string"!=typeof e||!isNaN(e)&&null==this._labels[e])null==e&&(e=this.duration());else{if(n=e.indexOf("="),-1===n)return null==this._labels[e]?s?this._labels[e]=this.duration()+i:i:this._labels[e]+i;i=parseInt(e.charAt(n-1)+"1",10)*Number(e.substr(n+1)),e=n>1?this._parseTimeOrLabel(e.substr(0,n-1),0,s):this.duration()}return Number(e)+i},m.seek=function(t,e){return this.totalTime("number"==typeof t?t:this._parseTimeOrLabel(t),e!==!1)},m.stop=function(){return this.paused(!0)},m.gotoAndPlay=function(t,e){return this.play(t,e)},m.gotoAndStop=function(t,e){return this.pause(t,e)},m.render=function(t,e,i){this._gc&&this._enabled(!0,!1);var s,n,a,o,u,c=this._dirty?this.totalDuration():this._totalDuration,p=this._time,f=this._startTime,m=this._timeScale,d=this._paused;if(t>=c?(this._totalTime=this._time=c,this._reversed||this._hasPausedChild()||(n=!0,o="onComplete",0===this._duration&&(0===t||0>this._rawPrevTime||this._rawPrevTime===r)&&this._rawPrevTime!==t&&this._first&&(u=!0,this._rawPrevTime>r&&(o="onReverseComplete"))),this._rawPrevTime=this._duration||!e||t||this._rawPrevTime===t?t:r,t=c+1e-4):1e-7>t?(this._totalTime=this._time=0,(0!==p||0===this._duration&&this._rawPrevTime!==r&&(this._rawPrevTime>0||0>t&&this._rawPrevTime>=0))&&(o="onReverseComplete",n=this._reversed),0>t?(this._active=!1,this._rawPrevTime>=0&&this._first&&(u=!0),this._rawPrevTime=t):(this._rawPrevTime=this._duration||!e||t||this._rawPrevTime===t?t:r,t=0,this._initted||(u=!0))):this._totalTime=this._time=this._rawPrevTime=t,this._time!==p&&this._first||i||u){if(this._initted||(this._initted=!0),this._active||!this._paused&&this._time!==p&&t>0&&(this._active=!0),0===p&&this.vars.onStart&&0!==this._time&&(e||this.vars.onStart.apply(this.vars.onStartScope||this,this.vars.onStartParams||_)),this._time>=p)for(s=this._first;s&&(a=s._next,!this._paused||d);)(s._active||s._startTime<=this._time&&!s._paused&&!s._gc)&&(s._reversed?s.render((s._dirty?s.totalDuration():s._totalDuration)-(t-s._startTime)*s._timeScale,e,i):s.render((t-s._startTime)*s._timeScale,e,i)),s=a;else for(s=this._last;s&&(a=s._prev,!this._paused||d);)(s._active||p>=s._startTime&&!s._paused&&!s._gc)&&(s._reversed?s.render((s._dirty?s.totalDuration():s._totalDuration)-(t-s._startTime)*s._timeScale,e,i):s.render((t-s._startTime)*s._timeScale,e,i)),s=a;this._onUpdate&&(e||(h.length&&l(),this._onUpdate.apply(this.vars.onUpdateScope||this,this.vars.onUpdateParams||_))),o&&(this._gc||(f===this._startTime||m!==this._timeScale)&&(0===this._time||c>=this.totalDuration())&&(n&&(h.length&&l(),this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!e&&this.vars[o]&&this.vars[o].apply(this.vars[o+"Scope"]||this,this.vars[o+"Params"]||_)))}},m._hasPausedChild=function(){for(var t=this._first;t;){if(t._paused||t instanceof s&&t._hasPausedChild())return!0;t=t._next}return!1},m.getChildren=function(t,e,s,r){r=r||-9999999999;for(var n=[],a=this._first,o=0;a;)r>a._startTime||(a instanceof i?e!==!1&&(n[o++]=a):(s!==!1&&(n[o++]=a),t!==!1&&(n=n.concat(a.getChildren(!0,e,s)),o=n.length))),a=a._next;return n},m.getTweensOf=function(t,e){var s,r,n=this._gc,a=[],o=0;for(n&&this._enabled(!0,!0),s=i.getTweensOf(t),r=s.length;--r>-1;)(s[r].timeline===this||e&&this._contains(s[r]))&&(a[o++]=s[r]);return n&&this._enabled(!1,!0),a},m.recent=function(){return this._recent},m._contains=function(t){for(var e=t.timeline;e;){if(e===this)return!0;e=e.timeline}return!1},m.shiftChildren=function(t,e,i){i=i||0;for(var s,r=this._first,n=this._labels;r;)r._startTime>=i&&(r._startTime+=t),r=r._next;if(e)for(s in n)n[s]>=i&&(n[s]+=t);return this._uncache(!0)},m._kill=function(t,e){if(!t&&!e)return this._enabled(!1,!1);for(var i=e?this.getTweensOf(e):this.getChildren(!0,!0,!1),s=i.length,r=!1;--s>-1;)i[s]._kill(t,e)&&(r=!0);return r},m.clear=function(t){var e=this.getChildren(!1,!0,!0),i=e.length;for(this._time=this._totalTime=0;--i>-1;)e[i]._enabled(!1,!1);return t!==!1&&(this._labels={}),this._uncache(!0)},m.invalidate=function(){for(var e=this._first;e;)e.invalidate(),e=e._next;return t.prototype.invalidate.call(this)},m._enabled=function(t,i){if(t===this._gc)for(var s=this._first;s;)s._enabled(t,!0),s=s._next;return e.prototype._enabled.call(this,t,i)},m.totalTime=function(){this._forcingPlayhead=!0;var e=t.prototype.totalTime.apply(this,arguments);return this._forcingPlayhead=!1,e},m.duration=function(t){return arguments.length?(0!==this.duration()&&0!==t&&this.timeScale(this._duration/t),this):(this._dirty&&this.totalDuration(),this._duration)},m.totalDuration=function(t){if(!arguments.length){if(this._dirty){for(var e,i,s=0,r=this._last,n=999999999999;r;)e=r._prev,r._dirty&&r.totalDuration(),r._startTime>n&&this._sortChildren&&!r._paused?this.add(r,r._startTime-r._delay):n=r._startTime,0>r._startTime&&!r._paused&&(s-=r._startTime,this._timeline.smoothChildTiming&&(this._startTime+=r._startTime/this._timeScale),this.shiftChildren(-r._startTime,!1,-9999999999),n=0),i=r._startTime+r._totalDuration/r._timeScale,i>s&&(s=i),r=e;this._duration=this._totalDuration=s,this._dirty=!1}return this._totalDuration}return 0!==this.totalDuration()&&0!==t&&this.timeScale(this._totalDuration/t),this},m.usesFrames=function(){for(var e=this._timeline;e._timeline;)e=e._timeline;return e===t._rootFramesTimeline},m.rawTime=function(){return this._paused?this._totalTime:(this._timeline.rawTime()-this._startTime)*this._timeScale},s},!0)}),_gsScope._gsDefine&&_gsScope._gsQueue.pop()(),function(t){"use strict";var e=function(){return(_gsScope.GreenSockGlobals||_gsScope)[t]};"function"==typeof define&&define.amd?define(["TweenLite"],e):"undefined"!=typeof module&&module.exports&&(require("./TweenLite.js"),module.exports=e())}("TimelineLite");
+
+/*!
+ * VERSION: beta 1.9.4
+ * DATE: 2014-07-17
+ * UPDATES AND DOCS AT: http://www.greensock.com
+ *
+ * @license Copyright (c) 2008-2014, GreenSock. All rights reserved.
+ * This work is subject to the terms at http://www.greensock.com/terms_of_use.html or for
+ * Club GreenSock members, the software agreement that was issued with your membership.
+ *
+ * @author: Jack Doyle, jack@greensock.com
+ **/
+var _gsScope="undefined"!=typeof module&&module.exports&&"undefined"!=typeof global?global:this||window;(_gsScope._gsQueue||(_gsScope._gsQueue=[])).push(function(){"use strict";_gsScope._gsDefine("easing.Back",["easing.Ease"],function(t){var e,i,s,r=_gsScope.GreenSockGlobals||_gsScope,n=r.com.greensock,a=2*Math.PI,o=Math.PI/2,h=n._class,l=function(e,i){var s=h("easing."+e,function(){},!0),r=s.prototype=new t;return r.constructor=s,r.getRatio=i,s},_=t.register||function(){},u=function(t,e,i,s){var r=h("easing."+t,{easeOut:new e,easeIn:new i,easeInOut:new s},!0);return _(r,t),r},c=function(t,e,i){this.t=t,this.v=e,i&&(this.next=i,i.prev=this,this.c=i.v-e,this.gap=i.t-t)},p=function(e,i){var s=h("easing."+e,function(t){this._p1=t||0===t?t:1.70158,this._p2=1.525*this._p1},!0),r=s.prototype=new t;return r.constructor=s,r.getRatio=i,r.config=function(t){return new s(t)},s},f=u("Back",p("BackOut",function(t){return(t-=1)*t*((this._p1+1)*t+this._p1)+1}),p("BackIn",function(t){return t*t*((this._p1+1)*t-this._p1)}),p("BackInOut",function(t){return 1>(t*=2)?.5*t*t*((this._p2+1)*t-this._p2):.5*((t-=2)*t*((this._p2+1)*t+this._p2)+2)})),m=h("easing.SlowMo",function(t,e,i){e=e||0===e?e:.7,null==t?t=.7:t>1&&(t=1),this._p=1!==t?e:0,this._p1=(1-t)/2,this._p2=t,this._p3=this._p1+this._p2,this._calcEnd=i===!0},!0),d=m.prototype=new t;return d.constructor=m,d.getRatio=function(t){var e=t+(.5-t)*this._p;return this._p1>t?this._calcEnd?1-(t=1-t/this._p1)*t:e-(t=1-t/this._p1)*t*t*t*e:t>this._p3?this._calcEnd?1-(t=(t-this._p3)/this._p1)*t:e+(t-e)*(t=(t-this._p3)/this._p1)*t*t*t:this._calcEnd?1:e},m.ease=new m(.7,.7),d.config=m.config=function(t,e,i){return new m(t,e,i)},e=h("easing.SteppedEase",function(t){t=t||1,this._p1=1/t,this._p2=t+1},!0),d=e.prototype=new t,d.constructor=e,d.getRatio=function(t){return 0>t?t=0:t>=1&&(t=.999999999),(this._p2*t>>0)*this._p1},d.config=e.config=function(t){return new e(t)},i=h("easing.RoughEase",function(e){e=e||{};for(var i,s,r,n,a,o,h=e.taper||"none",l=[],_=0,u=0|(e.points||20),p=u,f=e.randomize!==!1,m=e.clamp===!0,d=e.template instanceof t?e.template:null,g="number"==typeof e.strength?.4*e.strength:.4;--p>-1;)i=f?Math.random():1/u*p,s=d?d.getRatio(i):i,"none"===h?r=g:"out"===h?(n=1-i,r=n*n*g):"in"===h?r=i*i*g:.5>i?(n=2*i,r=.5*n*n*g):(n=2*(1-i),r=.5*n*n*g),f?s+=Math.random()*r-.5*r:p%2?s+=.5*r:s-=.5*r,m&&(s>1?s=1:0>s&&(s=0)),l[_++]={x:i,y:s};for(l.sort(function(t,e){return t.x-e.x}),o=new c(1,1,null),p=u;--p>-1;)a=l[p],o=new c(a.x,a.y,o);this._prev=new c(0,0,0!==o.t?o:o.next)},!0),d=i.prototype=new t,d.constructor=i,d.getRatio=function(t){var e=this._prev;if(t>e.t){for(;e.next&&t>=e.t;)e=e.next;e=e.prev}else for(;e.prev&&e.t>=t;)e=e.prev;return this._prev=e,e.v+(t-e.t)/e.gap*e.c},d.config=function(t){return new i(t)},i.ease=new i,u("Bounce",l("BounceOut",function(t){return 1/2.75>t?7.5625*t*t:2/2.75>t?7.5625*(t-=1.5/2.75)*t+.75:2.5/2.75>t?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}),l("BounceIn",function(t){return 1/2.75>(t=1-t)?1-7.5625*t*t:2/2.75>t?1-(7.5625*(t-=1.5/2.75)*t+.75):2.5/2.75>t?1-(7.5625*(t-=2.25/2.75)*t+.9375):1-(7.5625*(t-=2.625/2.75)*t+.984375)}),l("BounceInOut",function(t){var e=.5>t;return t=e?1-2*t:2*t-1,t=1/2.75>t?7.5625*t*t:2/2.75>t?7.5625*(t-=1.5/2.75)*t+.75:2.5/2.75>t?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375,e?.5*(1-t):.5*t+.5})),u("Circ",l("CircOut",function(t){return Math.sqrt(1-(t-=1)*t)}),l("CircIn",function(t){return-(Math.sqrt(1-t*t)-1)}),l("CircInOut",function(t){return 1>(t*=2)?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)})),s=function(e,i,s){var r=h("easing."+e,function(t,e){this._p1=t||1,this._p2=e||s,this._p3=this._p2/a*(Math.asin(1/this._p1)||0)},!0),n=r.prototype=new t;return n.constructor=r,n.getRatio=i,n.config=function(t,e){return new r(t,e)},r},u("Elastic",s("ElasticOut",function(t){return this._p1*Math.pow(2,-10*t)*Math.sin((t-this._p3)*a/this._p2)+1},.3),s("ElasticIn",function(t){return-(this._p1*Math.pow(2,10*(t-=1))*Math.sin((t-this._p3)*a/this._p2))},.3),s("ElasticInOut",function(t){return 1>(t*=2)?-.5*this._p1*Math.pow(2,10*(t-=1))*Math.sin((t-this._p3)*a/this._p2):.5*this._p1*Math.pow(2,-10*(t-=1))*Math.sin((t-this._p3)*a/this._p2)+1},.45)),u("Expo",l("ExpoOut",function(t){return 1-Math.pow(2,-10*t)}),l("ExpoIn",function(t){return Math.pow(2,10*(t-1))-.001}),l("ExpoInOut",function(t){return 1>(t*=2)?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*(t-1)))})),u("Sine",l("SineOut",function(t){return Math.sin(t*o)}),l("SineIn",function(t){return-Math.cos(t*o)+1}),l("SineInOut",function(t){return-.5*(Math.cos(Math.PI*t)-1)})),h("easing.EaseLookup",{find:function(e){return t.map[e]}},!0),_(r.SlowMo,"SlowMo","ease,"),_(i,"RoughEase","ease,"),_(e,"SteppedEase","ease,"),f},!0)}),_gsScope._gsDefine&&_gsScope._gsQueue.pop()();
+
+/*!
+ * VERSION: 1.14.2
+ * DATE: 2014-10-28
+ * UPDATES AND DOCS AT: http://www.greensock.com
+ *
+ * @license Copyright (c) 2008-2014, GreenSock. All rights reserved.
+ * This work is subject to the terms at http://www.greensock.com/terms_of_use.html or for
+ * Club GreenSock members, the software agreement that was issued with your membership.
+ *
+ * @author: Jack Doyle, jack@greensock.com
+ */
+var _gsScope="undefined"!=typeof module&&module.exports&&"undefined"!=typeof global?global:this||window;(_gsScope._gsQueue||(_gsScope._gsQueue=[])).push(function(){"use strict";_gsScope._gsDefine("plugins.CSSPlugin",["plugins.TweenPlugin","TweenLite"],function(t,e){var i,r,s,n,a=function(){t.call(this,"css"),this._overwriteProps.length=0,this.setRatio=a.prototype.setRatio},o={},l=a.prototype=new t("css");l.constructor=a,a.version="1.14.2",a.API=2,a.defaultTransformPerspective=0,a.defaultSkewType="compensated",l="px",a.suffixMap={top:l,right:l,bottom:l,left:l,width:l,height:l,fontSize:l,padding:l,margin:l,perspective:l,lineHeight:""};var h,u,f,p,_,c,d=/(?:\d|\-\d|\.\d|\-\.\d)+/g,m=/(?:\d|\-\d|\.\d|\-\.\d|\+=\d|\-=\d|\+=.\d|\-=\.\d)+/g,g=/(?:\+=|\-=|\-|\b)[\d\-\.]+[a-zA-Z0-9]*(?:%|\b)/gi,v=/(?![+-]?\d*\.?\d+|e[+-]\d+)[^0-9]/g,y=/(?:\d|\-|\+|=|#|\.)*/g,x=/opacity *= *([^)]*)/i,T=/opacity:([^;]*)/i,w=/alpha\(opacity *=.+?\)/i,b=/^(rgb|hsl)/,P=/([A-Z])/g,S=/-([a-z])/gi,R=/(^(?:url\(\"|url\())|(?:(\"\))$|\)$)/gi,C=function(t,e){return e.toUpperCase()},k=/(?:Left|Right|Width)/i,O=/(M11|M12|M21|M22)=[\d\-\.e]+/gi,A=/progid\:DXImageTransform\.Microsoft\.Matrix\(.+?\)/i,D=/,(?=[^\)]*(?:\(|$))/gi,M=Math.PI/180,L=180/Math.PI,N={},z=document,X=z.createElement("div"),I=z.createElement("img"),E=a._internals={_specialProps:o},F=navigator.userAgent,Y=function(){var t,e=F.indexOf("Android"),i=z.createElement("div");return f=-1!==F.indexOf("Safari")&&-1===F.indexOf("Chrome")&&(-1===e||Number(F.substr(e+8,1))>3),_=f&&6>Number(F.substr(F.indexOf("Version/")+8,1)),p=-1!==F.indexOf("Firefox"),(/MSIE ([0-9]{1,}[\.0-9]{0,})/.exec(F)||/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/.exec(F))&&(c=parseFloat(RegExp.$1)),i.innerHTML="a ",t=i.getElementsByTagName("a")[0],t?/^0.55/.test(t.style.opacity):!1}(),B=function(t){return x.test("string"==typeof t?t:(t.currentStyle?t.currentStyle.filter:t.style.filter)||"")?parseFloat(RegExp.$1)/100:1},U=function(t){window.console&&console.log(t)},j="",W="",V=function(t,e){e=e||X;var i,r,s=e.style;if(void 0!==s[t])return t;for(t=t.charAt(0).toUpperCase()+t.substr(1),i=["O","Moz","ms","Ms","Webkit"],r=5;--r>-1&&void 0===s[i[r]+t];);return r>=0?(W=3===r?"ms":i[r],j="-"+W.toLowerCase()+"-",W+t):null},q=z.defaultView?z.defaultView.getComputedStyle:function(){},H=a.getStyle=function(t,e,i,r,s){var n;return Y||"opacity"!==e?(!r&&t.style[e]?n=t.style[e]:(i=i||q(t))?n=i[e]||i.getPropertyValue(e)||i.getPropertyValue(e.replace(P,"-$1").toLowerCase()):t.currentStyle&&(n=t.currentStyle[e]),null==s||n&&"none"!==n&&"auto"!==n&&"auto auto"!==n?n:s):B(t)},G=E.convertToPixels=function(t,i,r,s,n){if("px"===s||!s)return r;if("auto"===s||!r)return 0;var o,l,h,u=k.test(i),f=t,p=X.style,_=0>r;if(_&&(r=-r),"%"===s&&-1!==i.indexOf("border"))o=r/100*(u?t.clientWidth:t.clientHeight);else{if(p.cssText="border:0 solid red;position:"+H(t,"position")+";line-height:0;","%"!==s&&f.appendChild)p[u?"borderLeftWidth":"borderTopWidth"]=r+s;else{if(f=t.parentNode||z.body,l=f._gsCache,h=e.ticker.frame,l&&u&&l.time===h)return l.width*r/100;p[u?"width":"height"]=r+s}f.appendChild(X),o=parseFloat(X[u?"offsetWidth":"offsetHeight"]),f.removeChild(X),u&&"%"===s&&a.cacheWidths!==!1&&(l=f._gsCache=f._gsCache||{},l.time=h,l.width=100*(o/r)),0!==o||n||(o=G(t,i,r,s,!0))}return _?-o:o},Q=E.calculateOffset=function(t,e,i){if("absolute"!==H(t,"position",i))return 0;var r="left"===e?"Left":"Top",s=H(t,"margin"+r,i);return t["offset"+r]-(G(t,e,parseFloat(s),s.replace(y,""))||0)},Z=function(t,e){var i,r,s={};if(e=e||q(t,null))if(i=e.length)for(;--i>-1;)s[e[i].replace(S,C)]=e.getPropertyValue(e[i]);else for(i in e)s[i]=e[i];else if(e=t.currentStyle||t.style)for(i in e)"string"==typeof i&&void 0===s[i]&&(s[i.replace(S,C)]=e[i]);return Y||(s.opacity=B(t)),r=Ae(t,e,!1),s.rotation=r.rotation,s.skewX=r.skewX,s.scaleX=r.scaleX,s.scaleY=r.scaleY,s.x=r.x,s.y=r.y,be&&(s.z=r.z,s.rotationX=r.rotationX,s.rotationY=r.rotationY,s.scaleZ=r.scaleZ),s.filters&&delete s.filters,s},$=function(t,e,i,r,s){var n,a,o,l={},h=t.style;for(a in i)"cssText"!==a&&"length"!==a&&isNaN(a)&&(e[a]!==(n=i[a])||s&&s[a])&&-1===a.indexOf("Origin")&&("number"==typeof n||"string"==typeof n)&&(l[a]="auto"!==n||"left"!==a&&"top"!==a?""!==n&&"auto"!==n&&"none"!==n||"string"!=typeof e[a]||""===e[a].replace(v,"")?n:0:Q(t,a),void 0!==h[a]&&(o=new fe(h,a,h[a],o)));if(r)for(a in r)"className"!==a&&(l[a]=r[a]);return{difs:l,firstMPT:o}},K={width:["Left","Right"],height:["Top","Bottom"]},J=["marginLeft","marginRight","marginTop","marginBottom"],te=function(t,e,i){var r=parseFloat("width"===e?t.offsetWidth:t.offsetHeight),s=K[e],n=s.length;for(i=i||q(t,null);--n>-1;)r-=parseFloat(H(t,"padding"+s[n],i,!0))||0,r-=parseFloat(H(t,"border"+s[n]+"Width",i,!0))||0;return r},ee=function(t,e){(null==t||""===t||"auto"===t||"auto auto"===t)&&(t="0 0");var i=t.split(" "),r=-1!==t.indexOf("left")?"0%":-1!==t.indexOf("right")?"100%":i[0],s=-1!==t.indexOf("top")?"0%":-1!==t.indexOf("bottom")?"100%":i[1];return null==s?s="0":"center"===s&&(s="50%"),("center"===r||isNaN(parseFloat(r))&&-1===(r+"").indexOf("="))&&(r="50%"),e&&(e.oxp=-1!==r.indexOf("%"),e.oyp=-1!==s.indexOf("%"),e.oxr="="===r.charAt(1),e.oyr="="===s.charAt(1),e.ox=parseFloat(r.replace(v,"")),e.oy=parseFloat(s.replace(v,""))),r+" "+s+(i.length>2?" "+i[2]:"")},ie=function(t,e){return"string"==typeof t&&"="===t.charAt(1)?parseInt(t.charAt(0)+"1",10)*parseFloat(t.substr(2)):parseFloat(t)-parseFloat(e)},re=function(t,e){return null==t?e:"string"==typeof t&&"="===t.charAt(1)?parseInt(t.charAt(0)+"1",10)*parseFloat(t.substr(2))+e:parseFloat(t)},se=function(t,e,i,r){var s,n,a,o,l=1e-6;return null==t?o=e:"number"==typeof t?o=t:(s=360,n=t.split("_"),a=Number(n[0].replace(v,""))*(-1===t.indexOf("rad")?1:L)-("="===t.charAt(1)?0:e),n.length&&(r&&(r[i]=e+a),-1!==t.indexOf("short")&&(a%=s,a!==a%(s/2)&&(a=0>a?a+s:a-s)),-1!==t.indexOf("_cw")&&0>a?a=(a+9999999999*s)%s-(0|a/s)*s:-1!==t.indexOf("ccw")&&a>0&&(a=(a-9999999999*s)%s-(0|a/s)*s)),o=e+a),l>o&&o>-l&&(o=0),o},ne={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],fuchsia:[255,0,255],olive:[128,128,0],yellow:[255,255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]},ae=function(t,e,i){return t=0>t?t+1:t>1?t-1:t,0|255*(1>6*t?e+6*(i-e)*t:.5>t?i:2>3*t?e+6*(i-e)*(2/3-t):e)+.5},oe=a.parseColor=function(t){var e,i,r,s,n,a;return t&&""!==t?"number"==typeof t?[t>>16,255&t>>8,255&t]:(","===t.charAt(t.length-1)&&(t=t.substr(0,t.length-1)),ne[t]?ne[t]:"#"===t.charAt(0)?(4===t.length&&(e=t.charAt(1),i=t.charAt(2),r=t.charAt(3),t="#"+e+e+i+i+r+r),t=parseInt(t.substr(1),16),[t>>16,255&t>>8,255&t]):"hsl"===t.substr(0,3)?(t=t.match(d),s=Number(t[0])%360/360,n=Number(t[1])/100,a=Number(t[2])/100,i=.5>=a?a*(n+1):a+n-a*n,e=2*a-i,t.length>3&&(t[3]=Number(t[3])),t[0]=ae(s+1/3,e,i),t[1]=ae(s,e,i),t[2]=ae(s-1/3,e,i),t):(t=t.match(d)||ne.transparent,t[0]=Number(t[0]),t[1]=Number(t[1]),t[2]=Number(t[2]),t.length>3&&(t[3]=Number(t[3])),t)):ne.black},le="(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#.+?\\b";for(l in ne)le+="|"+l+"\\b";le=RegExp(le+")","gi");var he=function(t,e,i,r){if(null==t)return function(t){return t};var s,n=e?(t.match(le)||[""])[0]:"",a=t.split(n).join("").match(g)||[],o=t.substr(0,t.indexOf(a[0])),l=")"===t.charAt(t.length-1)?")":"",h=-1!==t.indexOf(" ")?" ":",",u=a.length,f=u>0?a[0].replace(d,""):"";return u?s=e?function(t){var e,p,_,c;if("number"==typeof t)t+=f;else if(r&&D.test(t)){for(c=t.replace(D,"|").split("|"),_=0;c.length>_;_++)c[_]=s(c[_]);return c.join(",")}if(e=(t.match(le)||[n])[0],p=t.split(e).join("").match(g)||[],_=p.length,u>_--)for(;u>++_;)p[_]=i?p[0|(_-1)/2]:a[_];return o+p.join(h)+h+e+l+(-1!==t.indexOf("inset")?" inset":"")}:function(t){var e,n,p;if("number"==typeof t)t+=f;else if(r&&D.test(t)){for(n=t.replace(D,"|").split("|"),p=0;n.length>p;p++)n[p]=s(n[p]);return n.join(",")}if(e=t.match(g)||[],p=e.length,u>p--)for(;u>++p;)e[p]=i?e[0|(p-1)/2]:a[p];return o+e.join(h)+l}:function(t){return t}},ue=function(t){return t=t.split(","),function(e,i,r,s,n,a,o){var l,h=(i+"").split(" ");for(o={},l=0;4>l;l++)o[t[l]]=h[l]=h[l]||h[(l-1)/2>>0];return s.parse(e,o,n,a)}},fe=(E._setPluginRatio=function(t){this.plugin.setRatio(t);for(var e,i,r,s,n=this.data,a=n.proxy,o=n.firstMPT,l=1e-6;o;)e=a[o.v],o.r?e=Math.round(e):l>e&&e>-l&&(e=0),o.t[o.p]=e,o=o._next;if(n.autoRotate&&(n.autoRotate.rotation=a.rotation),1===t)for(o=n.firstMPT;o;){if(i=o.t,i.type){if(1===i.type){for(s=i.xs0+i.s+i.xs1,r=1;i.l>r;r++)s+=i["xn"+r]+i["xs"+(r+1)];i.e=s}}else i.e=i.s+i.xs0;o=o._next}},function(t,e,i,r,s){this.t=t,this.p=e,this.v=i,this.r=s,r&&(r._prev=this,this._next=r)}),pe=(E._parseToProxy=function(t,e,i,r,s,n){var a,o,l,h,u,f=r,p={},_={},c=i._transform,d=N;for(i._transform=null,N=e,r=u=i.parse(t,e,r,s),N=d,n&&(i._transform=c,f&&(f._prev=null,f._prev&&(f._prev._next=null)));r&&r!==f;){if(1>=r.type&&(o=r.p,_[o]=r.s+r.c,p[o]=r.s,n||(h=new fe(r,"s",o,h,r.r),r.c=0),1===r.type))for(a=r.l;--a>0;)l="xn"+a,o=r.p+"_"+l,_[o]=r.data[l],p[o]=r[l],n||(h=new fe(r,l,o,h,r.rxp[l]));r=r._next}return{proxy:p,end:_,firstMPT:h,pt:u}},E.CSSPropTween=function(t,e,r,s,a,o,l,h,u,f,p){this.t=t,this.p=e,this.s=r,this.c=s,this.n=l||e,t instanceof pe||n.push(this.n),this.r=h,this.type=o||0,u&&(this.pr=u,i=!0),this.b=void 0===f?r:f,this.e=void 0===p?r+s:p,a&&(this._next=a,a._prev=this)}),_e=a.parseComplex=function(t,e,i,r,s,n,a,o,l,u){i=i||n||"",a=new pe(t,e,0,0,a,u?2:1,null,!1,o,i,r),r+="";var f,p,_,c,g,v,y,x,T,w,P,S,R=i.split(", ").join(",").split(" "),C=r.split(", ").join(",").split(" "),k=R.length,O=h!==!1;for((-1!==r.indexOf(",")||-1!==i.indexOf(","))&&(R=R.join(" ").replace(D,", ").split(" "),C=C.join(" ").replace(D,", ").split(" "),k=R.length),k!==C.length&&(R=(n||"").split(" "),k=R.length),a.plugin=l,a.setRatio=u,f=0;k>f;f++)if(c=R[f],g=C[f],x=parseFloat(c),x||0===x)a.appendXtra("",x,ie(g,x),g.replace(m,""),O&&-1!==g.indexOf("px"),!0);else if(s&&("#"===c.charAt(0)||ne[c]||b.test(c)))S=","===g.charAt(g.length-1)?"),":")",c=oe(c),g=oe(g),T=c.length+g.length>6,T&&!Y&&0===g[3]?(a["xs"+a.l]+=a.l?" transparent":"transparent",a.e=a.e.split(C[f]).join("transparent")):(Y||(T=!1),a.appendXtra(T?"rgba(":"rgb(",c[0],g[0]-c[0],",",!0,!0).appendXtra("",c[1],g[1]-c[1],",",!0).appendXtra("",c[2],g[2]-c[2],T?",":S,!0),T&&(c=4>c.length?1:c[3],a.appendXtra("",c,(4>g.length?1:g[3])-c,S,!1)));else if(v=c.match(d)){if(y=g.match(m),!y||y.length!==v.length)return a;for(_=0,p=0;v.length>p;p++)P=v[p],w=c.indexOf(P,_),a.appendXtra(c.substr(_,w-_),Number(P),ie(y[p],P),"",O&&"px"===c.substr(w+P.length,2),0===p),_=w+P.length;a["xs"+a.l]+=c.substr(_)}else a["xs"+a.l]+=a.l?" "+c:c;if(-1!==r.indexOf("=")&&a.data){for(S=a.xs0+a.data.s,f=1;a.l>f;f++)S+=a["xs"+f]+a.data["xn"+f];a.e=S+a["xs"+f]}return a.l||(a.type=-1,a.xs0=a.e),a.xfirst||a},ce=9;for(l=pe.prototype,l.l=l.pr=0;--ce>0;)l["xn"+ce]=0,l["xs"+ce]="";l.xs0="",l._next=l._prev=l.xfirst=l.data=l.plugin=l.setRatio=l.rxp=null,l.appendXtra=function(t,e,i,r,s,n){var a=this,o=a.l;return a["xs"+o]+=n&&o?" "+t:t||"",i||0===o||a.plugin?(a.l++,a.type=a.setRatio?2:1,a["xs"+a.l]=r||"",o>0?(a.data["xn"+o]=e+i,a.rxp["xn"+o]=s,a["xn"+o]=e,a.plugin||(a.xfirst=new pe(a,"xn"+o,e,i,a.xfirst||a,0,a.n,s,a.pr),a.xfirst.xs0=0),a):(a.data={s:e+i},a.rxp={},a.s=e,a.c=i,a.r=s,a)):(a["xs"+o]+=e+(r||""),a)};var de=function(t,e){e=e||{},this.p=e.prefix?V(t)||t:t,o[t]=o[this.p]=this,this.format=e.formatter||he(e.defaultValue,e.color,e.collapsible,e.multi),e.parser&&(this.parse=e.parser),this.clrs=e.color,this.multi=e.multi,this.keyword=e.keyword,this.dflt=e.defaultValue,this.pr=e.priority||0},me=E._registerComplexSpecialProp=function(t,e,i){"object"!=typeof e&&(e={parser:i});var r,s,n=t.split(","),a=e.defaultValue;for(i=i||[a],r=0;n.length>r;r++)e.prefix=0===r&&e.prefix,e.defaultValue=i[r]||a,s=new de(n[r],e)},ge=function(t){if(!o[t]){var e=t.charAt(0).toUpperCase()+t.substr(1)+"Plugin";me(t,{parser:function(t,i,r,s,n,a,l){var h=(_gsScope.GreenSockGlobals||_gsScope).com.greensock.plugins[e];return h?(h._cssRegister(),o[r].parse(t,i,r,s,n,a,l)):(U("Error: "+e+" js file not loaded."),n)}})}};l=de.prototype,l.parseComplex=function(t,e,i,r,s,n){var a,o,l,h,u,f,p=this.keyword;if(this.multi&&(D.test(i)||D.test(e)?(o=e.replace(D,"|").split("|"),l=i.replace(D,"|").split("|")):p&&(o=[e],l=[i])),l){for(h=l.length>o.length?l.length:o.length,a=0;h>a;a++)e=o[a]=o[a]||this.dflt,i=l[a]=l[a]||this.dflt,p&&(u=e.indexOf(p),f=i.indexOf(p),u!==f&&(i=-1===f?l:o,i[a]+=" "+p));e=o.join(", "),i=l.join(", ")}return _e(t,this.p,e,i,this.clrs,this.dflt,r,this.pr,s,n)},l.parse=function(t,e,i,r,n,a){return this.parseComplex(t.style,this.format(H(t,this.p,s,!1,this.dflt)),this.format(e),n,a)},a.registerSpecialProp=function(t,e,i){me(t,{parser:function(t,r,s,n,a,o){var l=new pe(t,s,0,0,a,2,s,!1,i);return l.plugin=o,l.setRatio=e(t,r,n._tween,s),l},priority:i})};var ve,ye="scaleX,scaleY,scaleZ,x,y,z,skewX,skewY,rotation,rotationX,rotationY,perspective,xPercent,yPercent".split(","),xe=V("transform"),Te=j+"transform",we=V("transformOrigin"),be=null!==V("perspective"),Pe=E.Transform=function(){this.skewY=0},Se=window.SVGElement,Re=function(t,e,i){var r,s=z.createElementNS("http://www.w3.org/2000/svg",t),n=/([a-z])([A-Z])/g;for(r in i)s.setAttributeNS(null,r.replace(n,"$1-$2").toLowerCase(),i[r]);return e.appendChild(s),s},Ce=document.documentElement,ke=function(){var t,e,i,r=c||/Android/i.test(F)&&!window.chrome;return z.createElementNS&&!r&&(t=Re("svg",Ce),e=Re("rect",t,{width:100,height:50,x:100}),i=e.getBoundingClientRect().left,e.style[we]="50% 50%",e.style[xe]="scale(0.5,0.5)",r=i===e.getBoundingClientRect().left,Ce.removeChild(t)),r}(),Oe=function(t,e,i){var r=t.getBBox();e=ee(e).split(" "),i.xOrigin=(-1!==e[0].indexOf("%")?parseFloat(e[0])/100*r.width:parseFloat(e[0]))+r.x,i.yOrigin=(-1!==e[1].indexOf("%")?parseFloat(e[1])/100*r.height:parseFloat(e[1]))+r.y},Ae=E.getTransform=function(t,e,i,r){if(t._gsTransform&&i&&!r)return t._gsTransform;var n,o,l,h,u,f,p,_,c,d,m,g,v,y=i?t._gsTransform||new Pe:new Pe,x=0>y.scaleX,T=2e-5,w=1e5,b=179.99,P=b*M,S=be?parseFloat(H(t,we,e,!1,"0 0 0").split(" ")[2])||y.zOrigin||0:0,R=parseFloat(a.defaultTransformPerspective)||0;if(xe?n=H(t,Te,e,!0):t.currentStyle&&(n=t.currentStyle.filter.match(O),n=n&&4===n.length?[n[0].substr(4),Number(n[2].substr(4)),Number(n[1].substr(4)),n[3].substr(4),y.x||0,y.y||0].join(","):""),n&&"none"!==n&&"matrix(1, 0, 0, 1, 0, 0)"!==n){for(o=(n||"").match(/(?:\-|\b)[\d\-\.e]+\b/gi)||[],l=o.length;--l>-1;)h=Number(o[l]),o[l]=(u=h-(h|=0))?(0|u*w+(0>u?-.5:.5))/w+h:h;if(16===o.length){var C=o[8],k=o[9],A=o[10],D=o[12],N=o[13],z=o[14];if(y.zOrigin&&(z=-y.zOrigin,D=C*z-o[12],N=k*z-o[13],z=A*z+y.zOrigin-o[14]),!i||r||null==y.rotationX){var X,I,E,F,Y,B,U,j=o[0],W=o[1],V=o[2],q=o[3],G=o[4],Q=o[5],Z=o[6],$=o[7],K=o[11],J=Math.atan2(Z,A),te=-P>J||J>P;y.rotationX=J*L,J&&(F=Math.cos(-J),Y=Math.sin(-J),X=G*F+C*Y,I=Q*F+k*Y,E=Z*F+A*Y,C=G*-Y+C*F,k=Q*-Y+k*F,A=Z*-Y+A*F,K=$*-Y+K*F,G=X,Q=I,Z=E),J=Math.atan2(C,j),y.rotationY=J*L,J&&(B=-P>J||J>P,F=Math.cos(-J),Y=Math.sin(-J),X=j*F-C*Y,I=W*F-k*Y,E=V*F-A*Y,k=W*Y+k*F,A=V*Y+A*F,K=q*Y+K*F,j=X,W=I,V=E),J=Math.atan2(W,Q),y.rotation=J*L,J&&(U=-P>J||J>P,F=Math.cos(-J),Y=Math.sin(-J),j=j*F+G*Y,I=W*F+Q*Y,Q=W*-Y+Q*F,Z=V*-Y+Z*F,W=I),U&&te?y.rotation=y.rotationX=0:U&&B?y.rotation=y.rotationY=0:B&&te&&(y.rotationY=y.rotationX=0),y.scaleX=(0|Math.sqrt(j*j+W*W)*w+.5)/w,y.scaleY=(0|Math.sqrt(Q*Q+k*k)*w+.5)/w,y.scaleZ=(0|Math.sqrt(Z*Z+A*A)*w+.5)/w,y.skewX=0,y.perspective=K?1/(0>K?-K:K):0,y.x=D,y.y=N,y.z=z}}else if(!(be&&!r&&o.length&&y.x===o[4]&&y.y===o[5]&&(y.rotationX||y.rotationY)||void 0!==y.x&&"none"===H(t,"display",e))){var ee=o.length>=6,ie=ee?o[0]:1,re=o[1]||0,se=o[2]||0,ne=ee?o[3]:1;y.x=o[4]||0,y.y=o[5]||0,f=Math.sqrt(ie*ie+re*re),p=Math.sqrt(ne*ne+se*se),_=ie||re?Math.atan2(re,ie)*L:y.rotation||0,c=se||ne?Math.atan2(se,ne)*L+_:y.skewX||0,d=f-Math.abs(y.scaleX||0),m=p-Math.abs(y.scaleY||0),Math.abs(c)>90&&270>Math.abs(c)&&(x?(f*=-1,c+=0>=_?180:-180,_+=0>=_?180:-180):(p*=-1,c+=0>=c?180:-180)),g=(_-y.rotation)%180,v=(c-y.skewX)%180,(void 0===y.skewX||d>T||-T>d||m>T||-T>m||g>-b&&b>g&&false|g*w||v>-b&&b>v&&false|v*w)&&(y.scaleX=f,y.scaleY=p,y.rotation=_,y.skewX=c),be&&(y.rotationX=y.rotationY=y.z=0,y.perspective=R,y.scaleZ=1)}y.zOrigin=S;for(l in y)T>y[l]&&y[l]>-T&&(y[l]=0)}else y={x:0,y:0,z:0,scaleX:1,scaleY:1,scaleZ:1,skewX:0,skewY:0,perspective:R,rotation:0,rotationX:0,rotationY:0,zOrigin:0};return i&&(t._gsTransform=y),y.svg=Se&&t instanceof Se&&t.parentNode instanceof Se,y.svg&&(Oe(t,H(t,we,s,!1,"50% 50%")+"",y),ve=a.useSVGTransformAttr||ke),y.xPercent=y.yPercent=0,y},De=function(t){var e,i,r=this.data,s=-r.rotation*M,n=s+r.skewX*M,a=1e5,o=(0|Math.cos(s)*r.scaleX*a)/a,l=(0|Math.sin(s)*r.scaleX*a)/a,h=(0|Math.sin(n)*-r.scaleY*a)/a,u=(0|Math.cos(n)*r.scaleY*a)/a,f=this.t.style,p=this.t.currentStyle;if(p){i=l,l=-h,h=-i,e=p.filter,f.filter="";var _,d,m=this.t.offsetWidth,g=this.t.offsetHeight,v="absolute"!==p.position,T="progid:DXImageTransform.Microsoft.Matrix(M11="+o+", M12="+l+", M21="+h+", M22="+u,w=r.x+m*r.xPercent/100,b=r.y+g*r.yPercent/100;if(null!=r.ox&&(_=(r.oxp?.01*m*r.ox:r.ox)-m/2,d=(r.oyp?.01*g*r.oy:r.oy)-g/2,w+=_-(_*o+d*l),b+=d-(_*h+d*u)),v?(_=m/2,d=g/2,T+=", Dx="+(_-(_*o+d*l)+w)+", Dy="+(d-(_*h+d*u)+b)+")"):T+=", sizingMethod='auto expand')",f.filter=-1!==e.indexOf("DXImageTransform.Microsoft.Matrix(")?e.replace(A,T):T+" "+e,(0===t||1===t)&&1===o&&0===l&&0===h&&1===u&&(v&&-1===T.indexOf("Dx=0, Dy=0")||x.test(e)&&100!==parseFloat(RegExp.$1)||-1===e.indexOf("gradient("&&e.indexOf("Alpha"))&&f.removeAttribute("filter")),!v){var P,S,R,C=8>c?1:-1;for(_=r.ieOffsetX||0,d=r.ieOffsetY||0,r.ieOffsetX=Math.round((m-((0>o?-o:o)*m+(0>l?-l:l)*g))/2+w),r.ieOffsetY=Math.round((g-((0>u?-u:u)*g+(0>h?-h:h)*m))/2+b),ce=0;4>ce;ce++)S=J[ce],P=p[S],i=-1!==P.indexOf("px")?parseFloat(P):G(this.t,S,parseFloat(P),P.replace(y,""))||0,R=i!==r[S]?2>ce?-r.ieOffsetX:-r.ieOffsetY:2>ce?_-r.ieOffsetX:d-r.ieOffsetY,f[S]=(r[S]=Math.round(i-R*(0===ce||2===ce?1:C)))+"px"}}},Me=E.set3DTransformRatio=function(t){var e,i,r,s,n,a,o,l,h,u,f,_,c,d,m,g,v,y,x,T,w,b,P,S=this.data,R=this.t.style,C=S.rotation*M,k=S.scaleX,O=S.scaleY,A=S.scaleZ,D=S.x,L=S.y,N=S.z,z=S.perspective;if(!(1!==t&&0!==t||"auto"!==S.force3D||S.rotationY||S.rotationX||1!==A||z||N))return Le.call(this,t),void 0;if(p){var X=1e-4;X>k&&k>-X&&(k=A=2e-5),X>O&&O>-X&&(O=A=2e-5),!z||S.z||S.rotationX||S.rotationY||(z=0)}if(C||S.skewX)y=Math.cos(C),x=Math.sin(C),e=y,n=x,S.skewX&&(C-=S.skewX*M,y=Math.cos(C),x=Math.sin(C),"simple"===S.skewType&&(T=Math.tan(S.skewX*M),T=Math.sqrt(1+T*T),y*=T,x*=T)),i=-x,a=y;else{if(!(S.rotationY||S.rotationX||1!==A||z||S.svg))return R[xe]=(S.xPercent||S.yPercent?"translate("+S.xPercent+"%,"+S.yPercent+"%) translate3d(":"translate3d(")+D+"px,"+L+"px,"+N+"px)"+(1!==k||1!==O?" scale("+k+","+O+")":""),void 0;e=a=1,i=n=0}f=1,r=s=o=l=h=u=_=c=d=0,m=z?-1/z:0,g=S.zOrigin,v=1e5,C=S.rotationY*M,C&&(y=Math.cos(C),x=Math.sin(C),h=f*-x,c=m*-x,r=e*x,o=n*x,f*=y,m*=y,e*=y,n*=y),C=S.rotationX*M,C&&(y=Math.cos(C),x=Math.sin(C),T=i*y+r*x,w=a*y+o*x,b=u*y+f*x,P=d*y+m*x,r=i*-x+r*y,o=a*-x+o*y,f=u*-x+f*y,m=d*-x+m*y,i=T,a=w,u=b,d=P),1!==A&&(r*=A,o*=A,f*=A,m*=A),1!==O&&(i*=O,a*=O,u*=O,d*=O),1!==k&&(e*=k,n*=k,h*=k,c*=k),g&&(_-=g,s=r*_,l=o*_,_=f*_+g),S.svg&&(s+=S.xOrigin-(S.xOrigin*e+S.yOrigin*i),l+=S.yOrigin-(S.xOrigin*n+S.yOrigin*a)),s=(T=(s+=D)-(s|=0))?(0|T*v+(0>T?-.5:.5))/v+s:s,l=(T=(l+=L)-(l|=0))?(0|T*v+(0>T?-.5:.5))/v+l:l,_=(T=(_+=N)-(_|=0))?(0|T*v+(0>T?-.5:.5))/v+_:_,R[xe]=(S.xPercent||S.yPercent?"translate("+S.xPercent+"%,"+S.yPercent+"%) matrix3d(":"matrix3d(")+[(0|e*v)/v,(0|n*v)/v,(0|h*v)/v,(0|c*v)/v,(0|i*v)/v,(0|a*v)/v,(0|u*v)/v,(0|d*v)/v,(0|r*v)/v,(0|o*v)/v,(0|f*v)/v,(0|m*v)/v,s,l,_,z?1+-_/z:1].join(",")+")"},Le=E.set2DTransformRatio=function(t){var e,i,r,s,n,a,o,l,h,u,f,p=this.data,_=this.t,c=_.style,d=p.x,m=p.y;return!(p.rotationX||p.rotationY||p.z||p.force3D===!0||"auto"===p.force3D&&1!==t&&0!==t)||p.svg&&ve||!be?(s=p.scaleX,n=p.scaleY,p.rotation||p.skewX||p.svg?(e=p.rotation*M,i=e-p.skewX*M,r=1e5,a=Math.cos(e)*s,o=Math.sin(e)*s,l=Math.sin(i)*-n,h=Math.cos(i)*n,p.svg&&(d+=p.xOrigin-(p.xOrigin*a+p.yOrigin*l),m+=p.yOrigin-(p.xOrigin*o+p.yOrigin*h),f=1e-6,f>d&&d>-f&&(d=0),f>m&&m>-f&&(m=0)),u=(0|a*r)/r+","+(0|o*r)/r+","+(0|l*r)/r+","+(0|h*r)/r+","+d+","+m+")",p.svg&&ve?_.setAttribute("transform","matrix("+u):c[xe]=(p.xPercent||p.yPercent?"translate("+p.xPercent+"%,"+p.yPercent+"%) matrix(":"matrix(")+u):c[xe]=(p.xPercent||p.yPercent?"translate("+p.xPercent+"%,"+p.yPercent+"%) matrix(":"matrix(")+s+",0,0,"+n+","+d+","+m+")",void 0):(this.setRatio=Me,Me.call(this,t),void 0)};me("transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,transformPerspective,directionalRotation,parseTransform,force3D,skewType,xPercent,yPercent",{parser:function(t,e,i,r,n,o,l){if(r._transform)return n;var h,u,f,p,_,c,d,m=r._transform=Ae(t,s,!0,l.parseTransform),g=t.style,v=1e-6,y=ye.length,x=l,T={};if("string"==typeof x.transform&&xe)f=X.style,f[xe]=x.transform,f.display="block",f.position="absolute",z.body.appendChild(X),h=Ae(X,null,!1),z.body.removeChild(X);else if("object"==typeof x){if(h={scaleX:re(null!=x.scaleX?x.scaleX:x.scale,m.scaleX),scaleY:re(null!=x.scaleY?x.scaleY:x.scale,m.scaleY),scaleZ:re(x.scaleZ,m.scaleZ),x:re(x.x,m.x),y:re(x.y,m.y),z:re(x.z,m.z),xPercent:re(x.xPercent,m.xPercent),yPercent:re(x.yPercent,m.yPercent),perspective:re(x.transformPerspective,m.perspective)},d=x.directionalRotation,null!=d)if("object"==typeof d)for(f in d)x[f]=d[f];else x.rotation=d;"string"==typeof x.x&&-1!==x.x.indexOf("%")&&(h.x=0,h.xPercent=re(x.x,m.xPercent)),"string"==typeof x.y&&-1!==x.y.indexOf("%")&&(h.y=0,h.yPercent=re(x.y,m.yPercent)),h.rotation=se("rotation"in x?x.rotation:"shortRotation"in x?x.shortRotation+"_short":"rotationZ"in x?x.rotationZ:m.rotation,m.rotation,"rotation",T),be&&(h.rotationX=se("rotationX"in x?x.rotationX:"shortRotationX"in x?x.shortRotationX+"_short":m.rotationX||0,m.rotationX,"rotationX",T),h.rotationY=se("rotationY"in x?x.rotationY:"shortRotationY"in x?x.shortRotationY+"_short":m.rotationY||0,m.rotationY,"rotationY",T)),h.skewX=null==x.skewX?m.skewX:se(x.skewX,m.skewX),h.skewY=null==x.skewY?m.skewY:se(x.skewY,m.skewY),(u=h.skewY-m.skewY)&&(h.skewX+=u,h.rotation+=u)}for(be&&null!=x.force3D&&(m.force3D=x.force3D,c=!0),m.skewType=x.skewType||m.skewType||a.defaultSkewType,_=m.force3D||m.z||m.rotationX||m.rotationY||h.z||h.rotationX||h.rotationY||h.perspective,_||null==x.scale||(h.scaleZ=1);--y>-1;)i=ye[y],p=h[i]-m[i],(p>v||-v>p||null!=x[i]||null!=N[i])&&(c=!0,n=new pe(m,i,m[i],p,n),i in T&&(n.e=T[i]),n.xs0=0,n.plugin=o,r._overwriteProps.push(n.n));return p=x.transformOrigin,p&&m.svg&&(Oe(t,p,h),n=new pe(m,"xOrigin",m.xOrigin,h.xOrigin-m.xOrigin,n,-1,"transformOrigin"),n.b=m.xOrigin,n.e=n.xs0=h.xOrigin,n=new pe(m,"yOrigin",m.yOrigin,h.yOrigin-m.yOrigin,n,-1,"transformOrigin"),n.b=m.yOrigin,n.e=n.xs0=h.yOrigin,p="0px 0px"),(p||be&&_&&m.zOrigin)&&(xe?(c=!0,i=we,p=(p||H(t,i,s,!1,"50% 50%"))+"",n=new pe(g,i,0,0,n,-1,"transformOrigin"),n.b=g[i],n.plugin=o,be?(f=m.zOrigin,p=p.split(" "),m.zOrigin=(p.length>2&&(0===f||"0px"!==p[2])?parseFloat(p[2]):f)||0,n.xs0=n.e=p[0]+" "+(p[1]||"50%")+" 0px",n=new pe(m,"zOrigin",0,0,n,-1,n.n),n.b=f,n.xs0=n.e=m.zOrigin):n.xs0=n.e=p):ee(p+"",m)),c&&(r._transformType=m.svg&&ve||!_&&3!==this._transformType?2:3),n},prefix:!0}),me("boxShadow",{defaultValue:"0px 0px 0px 0px #999",prefix:!0,color:!0,multi:!0,keyword:"inset"}),me("borderRadius",{defaultValue:"0px",parser:function(t,e,i,n,a){e=this.format(e);var o,l,h,u,f,p,_,c,d,m,g,v,y,x,T,w,b=["borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius"],P=t.style;for(d=parseFloat(t.offsetWidth),m=parseFloat(t.offsetHeight),o=e.split(" "),l=0;b.length>l;l++)this.p.indexOf("border")&&(b[l]=V(b[l])),f=u=H(t,b[l],s,!1,"0px"),-1!==f.indexOf(" ")&&(u=f.split(" "),f=u[0],u=u[1]),p=h=o[l],_=parseFloat(f),v=f.substr((_+"").length),y="="===p.charAt(1),y?(c=parseInt(p.charAt(0)+"1",10),p=p.substr(2),c*=parseFloat(p),g=p.substr((c+"").length-(0>c?1:0))||""):(c=parseFloat(p),g=p.substr((c+"").length)),""===g&&(g=r[i]||v),g!==v&&(x=G(t,"borderLeft",_,v),T=G(t,"borderTop",_,v),"%"===g?(f=100*(x/d)+"%",u=100*(T/m)+"%"):"em"===g?(w=G(t,"borderLeft",1,"em"),f=x/w+"em",u=T/w+"em"):(f=x+"px",u=T+"px"),y&&(p=parseFloat(f)+c+g,h=parseFloat(u)+c+g)),a=_e(P,b[l],f+" "+u,p+" "+h,!1,"0px",a);return a},prefix:!0,formatter:he("0px 0px 0px 0px",!1,!0)}),me("backgroundPosition",{defaultValue:"0 0",parser:function(t,e,i,r,n,a){var o,l,h,u,f,p,_="background-position",d=s||q(t,null),m=this.format((d?c?d.getPropertyValue(_+"-x")+" "+d.getPropertyValue(_+"-y"):d.getPropertyValue(_):t.currentStyle.backgroundPositionX+" "+t.currentStyle.backgroundPositionY)||"0 0"),g=this.format(e);if(-1!==m.indexOf("%")!=(-1!==g.indexOf("%"))&&(p=H(t,"backgroundImage").replace(R,""),p&&"none"!==p)){for(o=m.split(" "),l=g.split(" "),I.setAttribute("src",p),h=2;--h>-1;)m=o[h],u=-1!==m.indexOf("%"),u!==(-1!==l[h].indexOf("%"))&&(f=0===h?t.offsetWidth-I.width:t.offsetHeight-I.height,o[h]=u?parseFloat(m)/100*f+"px":100*(parseFloat(m)/f)+"%");m=o.join(" ")}return this.parseComplex(t.style,m,g,n,a)},formatter:ee}),me("backgroundSize",{defaultValue:"0 0",formatter:ee}),me("perspective",{defaultValue:"0px",prefix:!0}),me("perspectiveOrigin",{defaultValue:"50% 50%",prefix:!0}),me("transformStyle",{prefix:!0}),me("backfaceVisibility",{prefix:!0}),me("userSelect",{prefix:!0}),me("margin",{parser:ue("marginTop,marginRight,marginBottom,marginLeft")}),me("padding",{parser:ue("paddingTop,paddingRight,paddingBottom,paddingLeft")}),me("clip",{defaultValue:"rect(0px,0px,0px,0px)",parser:function(t,e,i,r,n,a){var o,l,h;return 9>c?(l=t.currentStyle,h=8>c?" ":",",o="rect("+l.clipTop+h+l.clipRight+h+l.clipBottom+h+l.clipLeft+")",e=this.format(e).split(",").join(h)):(o=this.format(H(t,this.p,s,!1,this.dflt)),e=this.format(e)),this.parseComplex(t.style,o,e,n,a)}}),me("textShadow",{defaultValue:"0px 0px 0px #999",color:!0,multi:!0}),me("autoRound,strictUnits",{parser:function(t,e,i,r,s){return s}}),me("border",{defaultValue:"0px solid #000",parser:function(t,e,i,r,n,a){return this.parseComplex(t.style,this.format(H(t,"borderTopWidth",s,!1,"0px")+" "+H(t,"borderTopStyle",s,!1,"solid")+" "+H(t,"borderTopColor",s,!1,"#000")),this.format(e),n,a)},color:!0,formatter:function(t){var e=t.split(" ");return e[0]+" "+(e[1]||"solid")+" "+(t.match(le)||["#000"])[0]}}),me("borderWidth",{parser:ue("borderTopWidth,borderRightWidth,borderBottomWidth,borderLeftWidth")}),me("float,cssFloat,styleFloat",{parser:function(t,e,i,r,s){var n=t.style,a="cssFloat"in n?"cssFloat":"styleFloat";return new pe(n,a,0,0,s,-1,i,!1,0,n[a],e)}});var Ne=function(t){var e,i=this.t,r=i.filter||H(this.data,"filter")||"",s=0|this.s+this.c*t;100===s&&(-1===r.indexOf("atrix(")&&-1===r.indexOf("radient(")&&-1===r.indexOf("oader(")?(i.removeAttribute("filter"),e=!H(this.data,"filter")):(i.filter=r.replace(w,""),e=!0)),e||(this.xn1&&(i.filter=r=r||"alpha(opacity="+s+")"),-1===r.indexOf("pacity")?0===s&&this.xn1||(i.filter=r+" alpha(opacity="+s+")"):i.filter=r.replace(x,"opacity="+s))};me("opacity,alpha,autoAlpha",{defaultValue:"1",parser:function(t,e,i,r,n,a){var o=parseFloat(H(t,"opacity",s,!1,"1")),l=t.style,h="autoAlpha"===i;return"string"==typeof e&&"="===e.charAt(1)&&(e=("-"===e.charAt(0)?-1:1)*parseFloat(e.substr(2))+o),h&&1===o&&"hidden"===H(t,"visibility",s)&&0!==e&&(o=0),Y?n=new pe(l,"opacity",o,e-o,n):(n=new pe(l,"opacity",100*o,100*(e-o),n),n.xn1=h?1:0,l.zoom=1,n.type=2,n.b="alpha(opacity="+n.s+")",n.e="alpha(opacity="+(n.s+n.c)+")",n.data=t,n.plugin=a,n.setRatio=Ne),h&&(n=new pe(l,"visibility",0,0,n,-1,null,!1,0,0!==o?"inherit":"hidden",0===e?"hidden":"inherit"),n.xs0="inherit",r._overwriteProps.push(n.n),r._overwriteProps.push(i)),n}});var ze=function(t,e){e&&(t.removeProperty?("ms"===e.substr(0,2)&&(e="M"+e.substr(1)),t.removeProperty(e.replace(P,"-$1").toLowerCase())):t.removeAttribute(e))},Xe=function(t){if(this.t._gsClassPT=this,1===t||0===t){this.t.setAttribute("class",0===t?this.b:this.e);for(var e=this.data,i=this.t.style;e;)e.v?i[e.p]=e.v:ze(i,e.p),e=e._next;1===t&&this.t._gsClassPT===this&&(this.t._gsClassPT=null)}else this.t.getAttribute("class")!==this.e&&this.t.setAttribute("class",this.e)};me("className",{parser:function(t,e,r,n,a,o,l){var h,u,f,p,_,c=t.getAttribute("class")||"",d=t.style.cssText;if(a=n._classNamePT=new pe(t,r,0,0,a,2),a.setRatio=Xe,a.pr=-11,i=!0,a.b=c,u=Z(t,s),f=t._gsClassPT){for(p={},_=f.data;_;)p[_.p]=1,_=_._next;f.setRatio(1)}return t._gsClassPT=a,a.e="="!==e.charAt(1)?e:c.replace(RegExp("\\s*\\b"+e.substr(2)+"\\b"),"")+("+"===e.charAt(0)?" "+e.substr(2):""),n._tween._duration&&(t.setAttribute("class",a.e),h=$(t,u,Z(t),l,p),t.setAttribute("class",c),a.data=h.firstMPT,t.style.cssText=d,a=a.xfirst=n.parse(t,h.difs,a,o)),a}});var Ie=function(t){if((1===t||0===t)&&this.data._totalTime===this.data._totalDuration&&"isFromStart"!==this.data.data){var e,i,r,s,n=this.t.style,a=o.transform.parse;if("all"===this.e)n.cssText="",s=!0;else for(e=this.e.split(" ").join("").split(","),r=e.length;--r>-1;)i=e[r],o[i]&&(o[i].parse===a?s=!0:i="transformOrigin"===i?we:o[i].p),ze(n,i);s&&(ze(n,xe),this.t._gsTransform&&delete this.t._gsTransform)}};for(me("clearProps",{parser:function(t,e,r,s,n){return n=new pe(t,r,0,0,n,2),n.setRatio=Ie,n.e=e,n.pr=-10,n.data=s._tween,i=!0,n}}),l="bezier,throwProps,physicsProps,physics2D".split(","),ce=l.length;ce--;)ge(l[ce]);l=a.prototype,l._firstPT=null,l._onInitTween=function(t,e,o){if(!t.nodeType)return!1;this._target=t,this._tween=o,this._vars=e,h=e.autoRound,i=!1,r=e.suffixMap||a.suffixMap,s=q(t,""),n=this._overwriteProps;var l,p,c,d,m,g,v,y,x,w=t.style;if(u&&""===w.zIndex&&(l=H(t,"zIndex",s),("auto"===l||""===l)&&this._addLazySet(w,"zIndex",0)),"string"==typeof e&&(d=w.cssText,l=Z(t,s),w.cssText=d+";"+e,l=$(t,l,Z(t)).difs,!Y&&T.test(e)&&(l.opacity=parseFloat(RegExp.$1)),e=l,w.cssText=d),this._firstPT=p=this.parse(t,e,null),this._transformType){for(x=3===this._transformType,xe?f&&(u=!0,""===w.zIndex&&(v=H(t,"zIndex",s),("auto"===v||""===v)&&this._addLazySet(w,"zIndex",0)),_&&this._addLazySet(w,"WebkitBackfaceVisibility",this._vars.WebkitBackfaceVisibility||(x?"visible":"hidden"))):w.zoom=1,c=p;c&&c._next;)c=c._next;y=new pe(t,"transform",0,0,null,2),this._linkCSSP(y,null,c),y.setRatio=x&&be?Me:xe?Le:De,y.data=this._transform||Ae(t,s,!0),n.pop()}if(i){for(;p;){for(g=p._next,c=d;c&&c.pr>p.pr;)c=c._next;(p._prev=c?c._prev:m)?p._prev._next=p:d=p,(p._next=c)?c._prev=p:m=p,p=g}this._firstPT=d}return!0},l.parse=function(t,e,i,n){var a,l,u,f,p,_,c,d,m,g,v=t.style;for(a in e)_=e[a],l=o[a],l?i=l.parse(t,_,a,this,i,n,e):(p=H(t,a,s)+"",m="string"==typeof _,"color"===a||"fill"===a||"stroke"===a||-1!==a.indexOf("Color")||m&&b.test(_)?(m||(_=oe(_),_=(_.length>3?"rgba(":"rgb(")+_.join(",")+")"),i=_e(v,a,p,_,!0,"transparent",i,0,n)):!m||-1===_.indexOf(" ")&&-1===_.indexOf(",")?(u=parseFloat(p),c=u||0===u?p.substr((u+"").length):"",(""===p||"auto"===p)&&("width"===a||"height"===a?(u=te(t,a,s),c="px"):"left"===a||"top"===a?(u=Q(t,a,s),c="px"):(u="opacity"!==a?0:1,c="")),g=m&&"="===_.charAt(1),g?(f=parseInt(_.charAt(0)+"1",10),_=_.substr(2),f*=parseFloat(_),d=_.replace(y,"")):(f=parseFloat(_),d=m?_.substr((f+"").length)||"":""),""===d&&(d=a in r?r[a]:c),_=f||0===f?(g?f+u:f)+d:e[a],c!==d&&""!==d&&(f||0===f)&&u&&(u=G(t,a,u,c),"%"===d?(u/=G(t,a,100,"%")/100,e.strictUnits!==!0&&(p=u+"%")):"em"===d?u/=G(t,a,1,"em"):"px"!==d&&(f=G(t,a,f,d),d="px"),g&&(f||0===f)&&(_=f+u+d)),g&&(f+=u),!u&&0!==u||!f&&0!==f?void 0!==v[a]&&(_||"NaN"!=_+""&&null!=_)?(i=new pe(v,a,f||u||0,0,i,-1,a,!1,0,p,_),i.xs0="none"!==_||"display"!==a&&-1===a.indexOf("Style")?_:p):U("invalid "+a+" tween value: "+e[a]):(i=new pe(v,a,u,f-u,i,0,a,h!==!1&&("px"===d||"zIndex"===a),0,p,_),i.xs0=d)):i=_e(v,a,p,_,!0,null,i,0,n)),n&&i&&!i.plugin&&(i.plugin=n);
+return i},l.setRatio=function(t){var e,i,r,s=this._firstPT,n=1e-6;if(1!==t||this._tween._time!==this._tween._duration&&0!==this._tween._time)if(t||this._tween._time!==this._tween._duration&&0!==this._tween._time||this._tween._rawPrevTime===-1e-6)for(;s;){if(e=s.c*t+s.s,s.r?e=Math.round(e):n>e&&e>-n&&(e=0),s.type)if(1===s.type)if(r=s.l,2===r)s.t[s.p]=s.xs0+e+s.xs1+s.xn1+s.xs2;else if(3===r)s.t[s.p]=s.xs0+e+s.xs1+s.xn1+s.xs2+s.xn2+s.xs3;else if(4===r)s.t[s.p]=s.xs0+e+s.xs1+s.xn1+s.xs2+s.xn2+s.xs3+s.xn3+s.xs4;else if(5===r)s.t[s.p]=s.xs0+e+s.xs1+s.xn1+s.xs2+s.xn2+s.xs3+s.xn3+s.xs4+s.xn4+s.xs5;else{for(i=s.xs0+e+s.xs1,r=1;s.l>r;r++)i+=s["xn"+r]+s["xs"+(r+1)];s.t[s.p]=i}else-1===s.type?s.t[s.p]=s.xs0:s.setRatio&&s.setRatio(t);else s.t[s.p]=e+s.xs0;s=s._next}else for(;s;)2!==s.type?s.t[s.p]=s.b:s.setRatio(t),s=s._next;else for(;s;)2!==s.type?s.t[s.p]=s.e:s.setRatio(t),s=s._next},l._enableTransforms=function(t){this._transform=this._transform||Ae(this._target,s,!0),this._transformType=this._transform.svg&&ve||!t&&3!==this._transformType?2:3};var Ee=function(){this.t[this.p]=this.e,this.data._linkCSSP(this,this._next,null,!0)};l._addLazySet=function(t,e,i){var r=this._firstPT=new pe(t,e,0,0,this._firstPT,2);r.e=i,r.setRatio=Ee,r.data=this},l._linkCSSP=function(t,e,i,r){return t&&(e&&(e._prev=t),t._next&&(t._next._prev=t._prev),t._prev?t._prev._next=t._next:this._firstPT===t&&(this._firstPT=t._next,r=!0),i?i._next=t:r||null!==this._firstPT||(this._firstPT=t),t._next=e,t._prev=i),t},l._kill=function(e){var i,r,s,n=e;if(e.autoAlpha||e.alpha){n={};for(r in e)n[r]=e[r];n.opacity=1,n.autoAlpha&&(n.visibility=1)}return e.className&&(i=this._classNamePT)&&(s=i.xfirst,s&&s._prev?this._linkCSSP(s._prev,i._next,s._prev._prev):s===this._firstPT&&(this._firstPT=i._next),i._next&&this._linkCSSP(i._next,i._next._next,s._prev),this._classNamePT=null),t.prototype._kill.call(this,n)};var Fe=function(t,e,i){var r,s,n,a;if(t.slice)for(s=t.length;--s>-1;)Fe(t[s],e,i);else for(r=t.childNodes,s=r.length;--s>-1;)n=r[s],a=n.type,n.style&&(e.push(Z(n)),i&&i.push(n)),1!==a&&9!==a&&11!==a||!n.childNodes.length||Fe(n,e,i)};return a.cascadeTo=function(t,i,r){var s,n,a,o=e.to(t,i,r),l=[o],h=[],u=[],f=[],p=e._internals.reservedProps;for(t=o._targets||o.target,Fe(t,h,f),o.render(i,!0),Fe(t,u),o.render(0,!0),o._enabled(!0),s=f.length;--s>-1;)if(n=$(f[s],h[s],u[s]),n.firstMPT){n=n.difs;for(a in r)p[a]&&(n[a]=r[a]);l.push(e.to(f[s],i,n))}return l},t.activate([a]),a},!0)}),_gsScope._gsDefine&&_gsScope._gsQueue.pop()(),function(t){"use strict";var e=function(){return(_gsScope.GreenSockGlobals||_gsScope)[t]};"function"==typeof define&&define.amd?define(["TweenLite"],e):"undefined"!=typeof module&&module.exports&&(require("../TweenLite.js"),module.exports=e())}("CSSPlugin");
+
+/*!
+ * VERSION: beta 0.3.3
+ * DATE: 2014-10-29
+ * UPDATES AND DOCS AT: http://www.greensock.com
+ *
+ * @license Copyright (c) 2008-2014, GreenSock. All rights reserved.
+ * SplitText is a Club GreenSock membership benefit; You must have a valid membership to use
+ * this code without violating the terms of use. Visit http://www.greensock.com/club/ to sign up or get more details.
+ * This work is subject to the software agreement that was issued with your membership.
+ *
+ * @author: Jack Doyle, jack@greensock.com
+ */
+var _gsScope="undefined"!=typeof module&&module.exports&&"undefined"!=typeof global?global:this||window;(function(t){"use strict";var e=t.GreenSockGlobals||t,i=function(t){var i,s=t.split("."),r=e;for(i=0;s.length>i;i++)r[s[i]]=r=r[s[i]]||{};return r},s=i("com.greensock.utils"),r=function(t){var e=t.nodeType,i="";if(1===e||9===e||11===e){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)i+=r(t)}else if(3===e||4===e)return t.nodeValue;return i},n=document,a=n.defaultView?n.defaultView.getComputedStyle:function(){},o=/([A-Z])/g,h=function(t,e,i,s){var r;return(i=i||a(t,null))?(t=i.getPropertyValue(e.replace(o,"-$1").toLowerCase()),r=t||i.length?t:i[e]):t.currentStyle&&(i=t.currentStyle,r=i[e]),s?r:parseInt(r,10)||0},l=function(t){return t.length&&t[0]&&(t[0].nodeType&&t[0].style&&!t.nodeType||t[0].length&&t[0][0])?!0:!1},_=function(t){var e,i,s,r=[],n=t.length;for(e=0;n>e;e++)if(i=t[e],l(i))for(s=i.length,s=0;i.length>s;s++)r.push(i[s]);else r.push(i);return r},u=")eefec303079ad17405c",c=/(?: | | )/gi,p=n.all&&!n.addEventListener,f="":">")}},d=s.SplitText=e.SplitText=function(t,e){if("string"==typeof t&&(t=d.selector(t)),!t)throw"cannot split a null element.";this.elements=l(t)?_(t):[t],this.chars=[],this.words=[],this.lines=[],this._originals=[],this.vars=e||{},this.split(e)},g=function(t,e,i){var s=t.nodeType;if(1===s||9===s||11===s)for(t=t.firstChild;t;t=t.nextSibling)g(t,e,i);else(3===s||4===s)&&(t.nodeValue=t.nodeValue.split(e).join(i))},v=function(t,e){for(var i=e.length;--i>-1;)t.push(e[i])},y=function(t,e,i,s,o){c.test(t.innerHTML)&&(t.innerHTML=t.innerHTML.replace(c,u));var l,_,p,f,d,y,T,w,b,x,P,S,C,k,R=r(t),A=e.type||e.split||"chars,words,lines",O=-1!==A.indexOf("lines")?[]:null,D=-1!==A.indexOf("words"),M=-1!==A.indexOf("chars"),L="absolute"===e.position||e.absolute===!0,z=L?" ":" ",I=-999,E=a(t),N=h(t,"paddingLeft",E),F=h(t,"borderBottomWidth",E)+h(t,"borderTopWidth",E),X=h(t,"borderLeftWidth",E)+h(t,"borderRightWidth",E),U=h(t,"paddingTop",E)+h(t,"paddingBottom",E),B=h(t,"paddingLeft",E)+h(t,"paddingRight",E),j=h(t,"textAlign",E,!0),Y=t.clientHeight,q=t.clientWidth,G="
",V=m(e.wordsClass),Q=m(e.charsClass),W=-1!==(e.linesClass||"").indexOf("++"),H=e.linesClass,Z=-1!==R.indexOf("<"),$=!0,K=[],J=[],te=[];for(W&&(H=H.split("++").join("")),Z&&(R=R.split("<").join("{{LT}}")),l=R.length,f=V(),d=0;l>d;d++)if(T=R.charAt(d),")"===T&&R.substr(d,20)===u)f+=($?G:"")+" ",$=!1,d!==l-20&&R.substr(d+20,20)!==u&&(f+=" "+V(),$=!0),d+=19;else if(" "===T&&" "!==R.charAt(d-1)&&d!==l-1&&R.substr(d-20,20)!==u){for(f+=$?G:"",$=!1;" "===R.charAt(d+1);)f+=z,d++;(")"!==R.charAt(d+1)||R.substr(d+1,20)!==u)&&(f+=z+V(),$=!0)}else f+=M&&" "!==T?Q()+T+"":T;for(t.innerHTML=f+($?G:""),Z&&g(t,"{{LT}}","<"),y=t.getElementsByTagName("*"),l=y.length,w=[],d=0;l>d;d++)w[d]=y[d];if(O||L)for(d=0;l>d;d++)b=w[d],p=b.parentNode===t,(p||L||M&&!D)&&(x=b.offsetTop,O&&p&&x!==I&&"BR"!==b.nodeName&&(_=[],O.push(_),I=x),L&&(b._x=b.offsetLeft,b._y=x,b._w=b.offsetWidth,b._h=b.offsetHeight),O&&(D!==p&&M||(_.push(b),b._x-=N),p&&d&&(w[d-1]._wordEnd=!0),"BR"===b.nodeName&&b.nextSibling&&"BR"===b.nextSibling.nodeName&&O.push([])));for(d=0;l>d;d++)b=w[d],p=b.parentNode===t,"BR"!==b.nodeName?(L&&(S=b.style,D||p||(b._x+=b.parentNode._x,b._y+=b.parentNode._y),S.left=b._x+"px",S.top=b._y+"px",S.position="absolute",S.display="block",S.width=b._w+1+"px",S.height=b._h+"px"),D?p&&""!==b.innerHTML?J.push(b):M&&K.push(b):p?(t.removeChild(b),w.splice(d--,1),l--):!p&&M&&(x=!O&&!L&&b.nextSibling,t.appendChild(b),x||t.appendChild(n.createTextNode(" ")),K.push(b))):O||L?(t.removeChild(b),w.splice(d--,1),l--):D||t.appendChild(b);if(O){for(L&&(P=n.createElement("div"),t.appendChild(P),C=P.offsetWidth+"px",x=P.offsetParent===t?0:t.offsetLeft,t.removeChild(P)),S=t.style.cssText,t.style.cssText="display:none;";t.firstChild;)t.removeChild(t.firstChild);for(k=!L||!D&&!M,d=0;O.length>d;d++){for(_=O[d],P=n.createElement("div"),P.style.cssText="display:block;text-align:"+j+";position:"+(L?"absolute;":"relative;"),H&&(P.className=H+(W?d+1:"")),te.push(P),l=_.length,y=0;l>y;y++)"BR"!==_[y].nodeName&&(b=_[y],P.appendChild(b),k&&(b._wordEnd||D)&&P.appendChild(n.createTextNode(" ")),L&&(0===y&&(P.style.top=b._y+"px",P.style.left=N+x+"px"),b.style.top="0px",x&&(b.style.left=b._x-x+"px")));0===l&&(P.innerHTML=" "),D||M||(P.innerHTML=r(P).split(String.fromCharCode(160)).join(" ")),L&&(P.style.width=C,P.style.height=b._h+"px"),t.appendChild(P)}t.style.cssText=S}L&&(Y>t.clientHeight&&(t.style.height=Y-U+"px",Y>t.clientHeight&&(t.style.height=Y+F+"px")),q>t.clientWidth&&(t.style.width=q-B+"px",q>t.clientWidth&&(t.style.width=q+X+"px"))),v(i,K),v(s,J),v(o,te)},T=d.prototype;T.split=function(t){this.isSplit&&this.revert(),this.vars=t||this.vars,this._originals.length=this.chars.length=this.words.length=this.lines.length=0;for(var e=this.elements.length;--e>-1;)this._originals[e]=this.elements[e].innerHTML,y(this.elements[e],this.vars,this.chars,this.words,this.lines);return this.chars.reverse(),this.words.reverse(),this.lines.reverse(),this.isSplit=!0,this},T.revert=function(){if(!this._originals)throw"revert() call wasn't scoped properly.";for(var t=this._originals.length;--t>-1;)this.elements[t].innerHTML=this._originals[t];return this.chars=[],this.words=[],this.lines=[],this.isSplit=!1,this},d.selector=t.$||t.jQuery||function(e){var i=t.$||t.jQuery;return i?(d.selector=i,i(e)):"undefined"==typeof document?e:document.querySelectorAll?document.querySelectorAll(e):document.getElementById("#"===e.charAt(0)?e.substr(1):e)},d.version="0.3.3"})(_gsScope),function(t){"use strict";var e=function(){return(_gsScope.GreenSockGlobals||_gsScope)[t]};"function"==typeof define&&define.amd?define(["TweenLite"],e):"undefined"!=typeof module&&module.exports&&(module.exports=e())}("SplitText");
+
+
+try{
+ window.GreenSockGlobals = null;
+ window._gsQueue = null;
+ window._gsDefine = null;
+
+ delete(window.GreenSockGlobals);
+ delete(window._gsQueue);
+ delete(window._gsDefine);
+ } catch(e) {}
+
+try{
+ window.GreenSockGlobals = oldgs;
+ window._gsQueue = oldgs_queue;
+ } catch(e) {}
+
+if (window.tplogs==true)
+ try {
+ console.groupEnd();
+ } catch(e) {}
+
+
+
+
+
+(function(e,t){
+ e.waitForImages={hasImageProperties:["backgroundImage","listStyleImage","borderImage","borderCornerImage"]};e.expr[":"].uncached=function(t){var n=document.createElement("img");n.src=t.src;return e(t).is('img[src!=""]')&&!n.complete};e.fn.waitForImages=function(t,n,r){if(e.isPlainObject(arguments[0])){n=t.each;r=t.waitForAll;t=t.finished}t=t||e.noop;n=n||e.noop;r=!!r;if(!e.isFunction(t)||!e.isFunction(n)){throw new TypeError("An invalid callback was supplied.")}return this.each(function(){var i=e(this),s=[];if(r){var o=e.waitForImages.hasImageProperties||[],u=/url\((['"]?)(.*?)\1\)/g;i.find("*").each(function(){var t=e(this);if(t.is("img:uncached")){s.push({src:t.attr("src"),element:t[0]})}e.each(o,function(e,n){var r=t.css(n);if(!r){return true}var i;while(i=u.exec(r)){s.push({src:i[2],element:t[0]})}})})}else{i.find("img:uncached").each(function(){s.push({src:this.src,element:this})})}var f=s.length,l=0;if(f==0){t.call(i[0])}e.each(s,function(r,s){var o=new Image;e(o).bind("load error",function(e){l++;n.call(s.element,l,f,e.type=="load");if(l==f){t.call(i[0]);return false}});o.src=s.src})})};
+})(jQuery)
diff --git a/trunk/src/AppBundle/Util.php b/trunk/src/AppBundle/Util.php
new file mode 100644
index 00000000..1ecd4830
--- /dev/null
+++ b/trunk/src/AppBundle/Util.php
@@ -0,0 +1,218 @@
+
+ * @date 10/09/2016
+ */
+
+namespace AppBundle;
+
+
+use AppBundle\Entity\BreadcrumbEntry;
+use AppBundle\Entity\Page;
+
+class Util
+{
+ /**
+ * @param Page $page
+ *
+ * @return BreadcrumbEntry[]|array
+ */
+ public static function createBreadcrumb(Page $page)
+ {
+ $ret = [];
+ do {
+ $ret[] = new BreadcrumbEntry($page->getTitle(), $page->getUrlPath());
+ } while(($page = $page->getParent()) !== null);
+
+ return array_reverse($ret);
+ }
+
+ public static function reAttachRelatedCollection($entity, $field, $collection)
+ {
+ $cls = new \ReflectionClass(get_class($entity));
+ $prop = $cls->getProperty($field);
+ $prop->setAccessible(true);
+ $prop->setValue($entity, $collection);
+ }
+
+ /**
+ * Prints formatted back-trace. CLI-output is colorized as well.
+ *
+ * @param array $trace trace-content (e.g. from exception) [optional]
+ *
+ * @link http://www.php.net/manual/en/function.debug-print-backtrace.php#102609
+ */
+ public static function printBacktrace($trace = null)
+ {
+ if ($trace === null)
+ {
+ $trace = debug_backtrace();
+ }
+
+ if (Util::isCli())
+ {
+ $endl = "\r\n";
+ $begin = "";
+ $end = "";
+ $fnFormatterBegin = "\033[0;36m$";
+ $fnFormatterEnd = "\033[0m";
+ $stackPosFormatterBegin = "\033[1;33m\033[43m ";
+ $stackPosFormatterEnd = " \033[0m";
+ $argsFormatterBegin = "\033[0;33m";
+ $argsFormatterEnd = "\033[0m";
+ $fileFormatterBegin = "\033[1;30m";
+ $fileFormatterEnd = "\033[0m";
+ $lineFormatterBegin = "\033[1;35m";
+ $lineFormatterEnd = "\033[0m";
+ }
+ else
+ {
+ $endl = "\r\n";
+ $begin = "";
+ $end = " ";
+ $fnFormatterBegin = '';
+ $fnFormatterEnd = ' ';
+ $stackPosFormatterBegin = '';
+ $stackPosFormatterEnd = ' ';
+ $argsFormatterBegin = '';
+ $argsFormatterEnd = ' ';
+ $fileFormatterBegin = '';
+ $fileFormatterEnd = ' ';
+ $lineFormatterBegin = '';
+ $lineFormatterEnd = ' ';
+ }
+
+ $ret = $begin . $endl . $endl . '================= STACK TRACE =================' . $endl . $endl;
+
+ foreach($trace as $k=>$v){
+ if($v['function'] == "include" || $v['function'] == "include_once" || $v['function'] == "require_once" || $v['function'] == "require")
+ {
+ $args = $v['args'][0];
+ }
+ else
+ {
+ $args = '';
+ }
+ $ret .=
+ $stackPosFormatterBegin .'#'. $k . $stackPosFormatterEnd .' '.
+ $fnFormatterBegin .' '. $v['function'] . $fnFormatterEnd .'('.
+ $argsFormatterBegin . $args . $argsFormatterEnd .') called at ['.
+ $fileFormatterBegin . (isset($v['file']) ? $v['file'] : '?') . $fileFormatterEnd .':'.
+ $lineFormatterBegin . (isset($v['line']) ? $v['line'] : '?') . $lineFormatterEnd .']'.
+ $endl;
+ }
+ $ret .= $endl . $endl .'==============================================='. $endl . $endl;
+
+ echo $ret . $end;
+ }
+
+ /**
+ * Better GI than print_r or var_dump -- but, unlike var_dump, you can only dump one variable.
+ * Added htmlentities on the var content before echo, so you see what is really there, and not the mark-up.
+ *
+ * Also, now the output is encased within a div block that sets the background color, font style, and left-justifies it
+ * so it is not at the mercy of ambient styles.
+ *
+ * Inspired from: PHP.net Contributions
+ * Stolen from: [highstrike at gmail dot com]
+ * Modified by: stlawson *AT* JoyfulEarthTech *DOT* com
+ * Modified by: uli.hecht@gmail.com (colorized CLI support)
+ *
+ * @param mixed $var -- variable to dump
+ * @param string $var_name -- name of variable (optional) -- displayed in printout making it easier to sort out what variable is what in a complex output
+ * @param string $indent -- used by internal recursive call (no known external value)
+ * @param unknown_type $reference -- used by internal recursive call (no known external value)
+ *
+ * @todo support stdClass
+ */
+ public static function varDump(&$var, $var_name = NULL, $indent = NULL, $reference = NULL)
+ {
+ $isCli = Util::isCli();
+ $beginStdFmt = $isCli
+ ? "\033[1;30m"
+ : ""
+ ;
+ $endStdFmt = $isCli
+ ? "\033[0m"
+ : " "
+ ;
+ $spc = $isCli
+ ? " "
+ : " "
+ ;
+ $endl = $isCli ? "\r\n" : " ";
+
+ $do_dump_indent = "$beginStdFmt|$endStdFmt$spc$spc";
+
+ $reference = $reference.$var_name;
+ $keyvar = 'the_do_dump_recursion_protection_scheme'; $keyname = 'referenced_object_name';
+
+ // So this is always visible and always left justified and readable
+ echo $isCli
+ ? ""
+ : ""
+ ;
+
+ if (is_array($var) && isset($var[$keyvar]))
+ {
+ $real_var = &$var[$keyvar];
+ $real_name = &$var[$keyname];
+ $type = ucfirst(gettype($real_var));
+ echo $isCli
+ ? "$indent$var_name \033[1;30m$type\033[0m = \033[0;33m$real_name\033[0m\r\n"
+ : "$indent$var_name $type = &$real_name "
+ ;
+ }
+ else
+ {
+ $var = array($keyvar => $var, $keyname => $reference);
+ $avar = &$var[$keyvar];
+
+ $type = ucfirst(gettype($avar));
+ if($type == "String") $type_color = $isCli ? "\033[0;32m" : "";
+ elseif($type == "Integer") $type_color = $isCli ? "\033[0;31m" : "";
+ elseif($type == "Double"){ $type_color = $isCli ? "\033[0;36m" : ""; $type = "Float"; }
+ elseif($type == "Boolean") $type_color = $isCli ? "\033[0;35m" : "";
+ elseif($type == "NULL") $type_color = $isCli ? "\033[0;37m\033[40m" : "";
+
+ if(is_array($avar))
+ {
+ $count = count($avar);
+ echo "$indent" . ($var_name ? "$var_name => ":"") ."$beginStdFmt$type ($count)$endStdFmt$endl$indent($endl";
+ $keys = array_keys($avar);
+ foreach($keys as $name)
+ {
+ $value = &$avar[$name];
+ Util::varDump($value, "['$name']", $indent.$do_dump_indent, $reference);
+ }
+ echo "$indent)$endl";
+ }
+ elseif(is_object($avar))
+ {
+ $cls = get_class($avar);
+ echo "$indent$var_name $beginStdFmt$cls$endStdFmt$endl$indent($endl";
+ foreach($avar as $name=>$value) Util::varDump($value, "$name", $indent.$do_dump_indent, $reference);
+ echo "$indent)$endl";
+ }
+ elseif(is_int($avar)) echo "$indent$var_name = $beginStdFmt$type(".strlen($avar).")$endStdFmt $type_color".($isCli ? $avar : htmlentities($avar))."$endStdFmt$endl";
+ elseif(is_string($avar)) echo "$indent$var_name = $beginStdFmt$type(".strlen($avar).")$endStdFmt $type_color\"".($isCli ? $avar : htmlentities($avar))."\"$endStdFmt$endl";
+ elseif(is_float($avar)) echo "$indent$var_name = $beginStdFmt$type(".strlen($avar).")$endStdFmt $type_color".($isCli ? $avar : htmlentities($avar))."$endStdFmt$endl";
+ elseif(is_bool($avar)) echo "$indent$var_name = $beginStdFmt$type(".strlen($avar).")$endStdFmt $type_color".($avar == 1 ? "TRUE":"FALSE")."$endStdFmt$endl";
+ elseif(is_null($avar)) echo "$indent$var_name = $beginStdFmt$type(".strlen($avar).")$endStdFmt {$type_color}NULL$endStdFmt$endl";
+ else echo "$indent$var_name = $beginStdFmt$type(".strlen($avar).")$endStdFmt ".($isCli ? $avar : htmlentities($avar))."$endl";
+
+ $var = $var[$keyvar];
+ }
+
+ echo $isCli ? "" : "
";
+ }
+
+ /**
+ * @see http://www.codediesel.com/php/quick-way-to-determine-if-php-is-running-at-the-command-line/
+ * @return boolean
+ */
+ public static function isCli()
+ {
+ return php_sapi_name() == 'cli';
+ }
+}
\ No newline at end of file
diff --git a/trunk/src/AppBundle/Util/DepartureUtil.php b/trunk/src/AppBundle/Util/DepartureUtil.php
new file mode 100644
index 00000000..cdce316d
--- /dev/null
+++ b/trunk/src/AppBundle/Util/DepartureUtil.php
@@ -0,0 +1,199 @@
+
+ * @date 11/11/2016
+ */
+
+namespace AppBundle\Util;
+
+
+use AppBundle\Entity\TravelDeparturePoint;
+
+class DepartureUtil
+{
+ /**
+ * @param \Doctrine\Common\Collections\Collection|TravelDeparturePoint[] $departures
+ * @param \DateTime $startDate
+ * @param \DateTime $endDate
+ * @param $addEmptyEntries
+ *
+ * @return array|TravelDeparturePoint[]
+ */
+ public static function filterDeparturesByPeriod($departures, $startDate, $endDate, $addEmptyEntries)
+ {
+ $startWeekday = intval($startDate->format('w'));
+ $endWeekday = intval($endDate->format('w'));
+ return DepartureUtil::filterDeparturesByWeekdays($departures, $startWeekday, $endWeekday, $addEmptyEntries);
+ }
+
+ /**
+ * @param TravelDeparturePoint[] $departures
+ * @param int $startWeekday
+ * @param int $endWeekday
+ * @param bool $addEmptyEntries
+ *
+ * @return array|TravelDeparturePoint[]
+ */
+ public static function filterDeparturesByWeekdays($departures, $startWeekday, $endWeekday, $addEmptyEntries)
+ {
+ $ret = [];
+ foreach ($departures as $departure)
+ {
+ // #TODO Problems expected here
+ if ($departure->getTravelPeriod() != null)
+ {
+ $ret[] = $departure;
+ continue;
+ }
+ $foundDepartureForStartDate = false;
+ $foundDepartureForEndDate = false;
+ if (count($departure->getDays()) > 0)
+ {
+ foreach ($departure->getDays() as $depWeekday)
+ {
+ if ($startWeekday == $depWeekday)
+ {
+ $foundDepartureForStartDate = true;
+ }
+ if ($endWeekday == $depWeekday)
+ {
+ $foundDepartureForEndDate = true;
+ }
+ if ($foundDepartureForStartDate && $foundDepartureForEndDate)
+ {
+ $ret[] = $departure;
+ break;
+ }
+ }
+ }
+ if ($addEmptyEntries && !($foundDepartureForStartDate && $foundDepartureForEndDate))
+ {
+ $entry = new TravelDeparturePoint();
+ $entry->setName($departure->getName());
+ $entry->setThreeLetter($departure->getThreeLetter());
+ $entry->setExtraCharge('');
+ $entry->setDays('');
+ $entry->setDepartureType('');
+ if ($departure->getIsVirtual() !== null)
+ {
+ $entry->setIsVirtual($departure->getIsVirtual());
+ }
+ $ret[] = $entry;
+ }
+ }
+ return $ret;
+ }
+
+ /**
+ * @param TravelDeparturePoint[] $departures
+ * @param TravelDeparturePoint[] $defaultDepartures
+ * @param bool $removeIfEmptyExtraCharge
+ *
+ * @return \AppBundle\Entity\TravelDeparturePoint[]
+ */
+ public static function mergeDeparturesWithDefaults($departures, $defaultDepartures, $removeIfEmptyExtraCharge)
+ {
+ $departureKeyByName = [];
+ $isRemovedDepartureByName = [];
+ foreach ($departures as $departureKey => &$departure)
+ {
+ if ($removeIfEmptyExtraCharge && $departure->getIsEmpty())
+ {
+ $isRemovedDepartureByName[$departure->getName()] = true;
+ unset($departures[$departureKey]);
+ }
+ else
+ {
+ $departure->setIsVirtual(false);
+ $departureKeyByName[$departure->getName()] = $departureKey;
+ }
+ }
+ foreach ($defaultDepartures as $defaultDeparture)
+ {
+ $name = $defaultDeparture->getName();
+ if (!isset($departureKeyByName[$name]) && !($removeIfEmptyExtraCharge && (
+ isset($isRemovedDepartureByName[$name])) || $defaultDeparture->getIsEmpty()))
+ {
+ $defaultDeparture->setIsVirtual(true);
+ $departures[] = $defaultDeparture;
+ }
+ }
+ return DepartureUtil::sortDepartures($departures);
+ }
+
+ /**
+ * Limit discount for individual arrival to flight price - 30 €
+ *
+ * @param TravelDeparturePoint[] $departures
+ * @param $flightPrice
+ *
+ * @return mixed
+ */
+ public static function limitIndividualArrivalPriceInDepartures($departures, $flightPrice)
+ {
+ foreach ($departures as $k => $departure)
+ {
+ if(strtolower($departure->getName()) == 'eigenanreise')
+ {
+ $departures[$k] = DepartureUtil::limitIndividualArrivalPrice($departure, $flightPrice);
+ break;
+ }
+ }
+ return $departures;
+ }
+
+ /**
+ * Limit discount for individual arrival to flight price - 30 €
+ *
+ * @param TravelDeparturePoint $departure
+ * @param $flightPrice
+ *
+ * @return TravelDeparturePoint
+ */
+ public static function limitIndividualArrivalPrice(TravelDeparturePoint $departure, $flightPrice)
+ {
+ if(strtolower($departure->getName()) == 'eigenanreise')
+ {
+ $limit = -$flightPrice + 30;
+ if ($departure->getExtraCharge() < $limit)
+ {
+ $departure->setExtraCharge($limit);
+ }
+ }
+ return $departure;
+ }
+
+ /**
+ * Compare two departures by their name. However, individual arrival have topmost priority
+ *
+ * @param TravelDeparturePoint $a
+ * @param TravelDeparturePoint $b
+ *
+ * @return int
+ */
+ private static function compareDepartureName($a, $b)
+ {
+ $aName = strtolower($a->getName());
+ $bName = strtolower($b->getName());
+ if ($aName == 'eigenanreise')
+ {
+ return $bName == 'eigenanreise' ? 0 : -1;
+ }
+ elseif ($bName == 'eigenanreise')
+ {
+ return 1;
+ }
+ return strcmp($aName, $bName);
+ }
+
+ /**
+ * @param TravelDeparturePoint[] $departures
+ *
+ * @return TravelDeparturePoint[]
+ */
+ public static function sortDepartures($departures)
+ {
+ usort($departures, ['AppBundle\Util\DepartureUtil', 'compareDepartureName']);
+ return $departures;
+ }
+}
\ No newline at end of file
diff --git a/trunk/tests/AppBundle/Controller/DefaultControllerTest.php b/trunk/tests/AppBundle/Controller/DefaultControllerTest.php
new file mode 100644
index 00000000..594803cc
--- /dev/null
+++ b/trunk/tests/AppBundle/Controller/DefaultControllerTest.php
@@ -0,0 +1,18 @@
+request('GET', '/');
+
+ $this->assertEquals(200, $client->getResponse()->getStatusCode());
+ $this->assertContains('Welcome to Symfony', $crawler->filter('#container h1')->text());
+ }
+}
diff --git a/trunk/var/SymfonyRequirements.php b/trunk/var/SymfonyRequirements.php
new file mode 100644
index 00000000..7e7723af
--- /dev/null
+++ b/trunk/var/SymfonyRequirements.php
@@ -0,0 +1,819 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/*
+ * Users of PHP 5.2 should be able to run the requirements checks.
+ * This is why the file and all classes must be compatible with PHP 5.2+
+ * (e.g. not using namespaces and closures).
+ *
+ * ************** CAUTION **************
+ *
+ * DO NOT EDIT THIS FILE as it will be overridden by Composer as part of
+ * the installation/update process. The original file resides in the
+ * SensioDistributionBundle.
+ *
+ * ************** CAUTION **************
+ */
+
+/**
+ * Represents a single PHP requirement, e.g. an installed extension.
+ * It can be a mandatory requirement or an optional recommendation.
+ * There is a special subclass, named PhpIniRequirement, to check a php.ini configuration.
+ *
+ * @author Tobias Schultze
+ */
+class Requirement
+{
+ private $fulfilled;
+ private $testMessage;
+ private $helpText;
+ private $helpHtml;
+ private $optional;
+
+ /**
+ * Constructor that initializes the requirement.
+ *
+ * @param bool $fulfilled Whether the requirement is fulfilled
+ * @param string $testMessage The message for testing the requirement
+ * @param string $helpHtml The help text formatted in HTML for resolving the problem
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ * @param bool $optional Whether this is only an optional recommendation not a mandatory requirement
+ */
+ public function __construct($fulfilled, $testMessage, $helpHtml, $helpText = null, $optional = false)
+ {
+ $this->fulfilled = (bool) $fulfilled;
+ $this->testMessage = (string) $testMessage;
+ $this->helpHtml = (string) $helpHtml;
+ $this->helpText = null === $helpText ? strip_tags($this->helpHtml) : (string) $helpText;
+ $this->optional = (bool) $optional;
+ }
+
+ /**
+ * Returns whether the requirement is fulfilled.
+ *
+ * @return bool true if fulfilled, otherwise false
+ */
+ public function isFulfilled()
+ {
+ return $this->fulfilled;
+ }
+
+ /**
+ * Returns the message for testing the requirement.
+ *
+ * @return string The test message
+ */
+ public function getTestMessage()
+ {
+ return $this->testMessage;
+ }
+
+ /**
+ * Returns the help text for resolving the problem.
+ *
+ * @return string The help text
+ */
+ public function getHelpText()
+ {
+ return $this->helpText;
+ }
+
+ /**
+ * Returns the help text formatted in HTML.
+ *
+ * @return string The HTML help
+ */
+ public function getHelpHtml()
+ {
+ return $this->helpHtml;
+ }
+
+ /**
+ * Returns whether this is only an optional recommendation and not a mandatory requirement.
+ *
+ * @return bool true if optional, false if mandatory
+ */
+ public function isOptional()
+ {
+ return $this->optional;
+ }
+}
+
+/**
+ * Represents a PHP requirement in form of a php.ini configuration.
+ *
+ * @author Tobias Schultze
+ */
+class PhpIniRequirement extends Requirement
+{
+ /**
+ * Constructor that initializes the requirement.
+ *
+ * @param string $cfgName The configuration name used for ini_get()
+ * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false,
+ * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement
+ * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false.
+ * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin.
+ * Example: You require a config to be true but PHP later removes this config and defaults it to true internally.
+ * @param string|null $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived)
+ * @param string|null $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived)
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ * @param bool $optional Whether this is only an optional recommendation not a mandatory requirement
+ */
+ public function __construct($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null, $optional = false)
+ {
+ $cfgValue = ini_get($cfgName);
+
+ if (is_callable($evaluation)) {
+ if (null === $testMessage || null === $helpHtml) {
+ throw new InvalidArgumentException('You must provide the parameters testMessage and helpHtml for a callback evaluation.');
+ }
+
+ $fulfilled = call_user_func($evaluation, $cfgValue);
+ } else {
+ if (null === $testMessage) {
+ $testMessage = sprintf('%s %s be %s in php.ini',
+ $cfgName,
+ $optional ? 'should' : 'must',
+ $evaluation ? 'enabled' : 'disabled'
+ );
+ }
+
+ if (null === $helpHtml) {
+ $helpHtml = sprintf('Set %s to %s in php.ini* .',
+ $cfgName,
+ $evaluation ? 'on' : 'off'
+ );
+ }
+
+ $fulfilled = $evaluation == $cfgValue;
+ }
+
+ parent::__construct($fulfilled || ($approveCfgAbsence && false === $cfgValue), $testMessage, $helpHtml, $helpText, $optional);
+ }
+}
+
+/**
+ * A RequirementCollection represents a set of Requirement instances.
+ *
+ * @author Tobias Schultze
+ */
+class RequirementCollection implements IteratorAggregate
+{
+ /**
+ * @var Requirement[]
+ */
+ private $requirements = array();
+
+ /**
+ * Gets the current RequirementCollection as an Iterator.
+ *
+ * @return Traversable A Traversable interface
+ */
+ public function getIterator()
+ {
+ return new ArrayIterator($this->requirements);
+ }
+
+ /**
+ * Adds a Requirement.
+ *
+ * @param Requirement $requirement A Requirement instance
+ */
+ public function add(Requirement $requirement)
+ {
+ $this->requirements[] = $requirement;
+ }
+
+ /**
+ * Adds a mandatory requirement.
+ *
+ * @param bool $fulfilled Whether the requirement is fulfilled
+ * @param string $testMessage The message for testing the requirement
+ * @param string $helpHtml The help text formatted in HTML for resolving the problem
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ */
+ public function addRequirement($fulfilled, $testMessage, $helpHtml, $helpText = null)
+ {
+ $this->add(new Requirement($fulfilled, $testMessage, $helpHtml, $helpText, false));
+ }
+
+ /**
+ * Adds an optional recommendation.
+ *
+ * @param bool $fulfilled Whether the recommendation is fulfilled
+ * @param string $testMessage The message for testing the recommendation
+ * @param string $helpHtml The help text formatted in HTML for resolving the problem
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ */
+ public function addRecommendation($fulfilled, $testMessage, $helpHtml, $helpText = null)
+ {
+ $this->add(new Requirement($fulfilled, $testMessage, $helpHtml, $helpText, true));
+ }
+
+ /**
+ * Adds a mandatory requirement in form of a php.ini configuration.
+ *
+ * @param string $cfgName The configuration name used for ini_get()
+ * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false,
+ * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement
+ * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false.
+ * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin.
+ * Example: You require a config to be true but PHP later removes this config and defaults it to true internally.
+ * @param string $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived)
+ * @param string $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived)
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ */
+ public function addPhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null)
+ {
+ $this->add(new PhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence, $testMessage, $helpHtml, $helpText, false));
+ }
+
+ /**
+ * Adds an optional recommendation in form of a php.ini configuration.
+ *
+ * @param string $cfgName The configuration name used for ini_get()
+ * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false,
+ * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement
+ * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false.
+ * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin.
+ * Example: You require a config to be true but PHP later removes this config and defaults it to true internally.
+ * @param string $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived)
+ * @param string $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived)
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ */
+ public function addPhpIniRecommendation($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null)
+ {
+ $this->add(new PhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence, $testMessage, $helpHtml, $helpText, true));
+ }
+
+ /**
+ * Adds a requirement collection to the current set of requirements.
+ *
+ * @param RequirementCollection $collection A RequirementCollection instance
+ */
+ public function addCollection(RequirementCollection $collection)
+ {
+ $this->requirements = array_merge($this->requirements, $collection->all());
+ }
+
+ /**
+ * Returns both requirements and recommendations.
+ *
+ * @return Requirement[]
+ */
+ public function all()
+ {
+ return $this->requirements;
+ }
+
+ /**
+ * Returns all mandatory requirements.
+ *
+ * @return Requirement[]
+ */
+ public function getRequirements()
+ {
+ $array = array();
+ foreach ($this->requirements as $req) {
+ if (!$req->isOptional()) {
+ $array[] = $req;
+ }
+ }
+
+ return $array;
+ }
+
+ /**
+ * Returns the mandatory requirements that were not met.
+ *
+ * @return Requirement[]
+ */
+ public function getFailedRequirements()
+ {
+ $array = array();
+ foreach ($this->requirements as $req) {
+ if (!$req->isFulfilled() && !$req->isOptional()) {
+ $array[] = $req;
+ }
+ }
+
+ return $array;
+ }
+
+ /**
+ * Returns all optional recommendations.
+ *
+ * @return Requirement[]
+ */
+ public function getRecommendations()
+ {
+ $array = array();
+ foreach ($this->requirements as $req) {
+ if ($req->isOptional()) {
+ $array[] = $req;
+ }
+ }
+
+ return $array;
+ }
+
+ /**
+ * Returns the recommendations that were not met.
+ *
+ * @return Requirement[]
+ */
+ public function getFailedRecommendations()
+ {
+ $array = array();
+ foreach ($this->requirements as $req) {
+ if (!$req->isFulfilled() && $req->isOptional()) {
+ $array[] = $req;
+ }
+ }
+
+ return $array;
+ }
+
+ /**
+ * Returns whether a php.ini configuration is not correct.
+ *
+ * @return bool php.ini configuration problem?
+ */
+ public function hasPhpIniConfigIssue()
+ {
+ foreach ($this->requirements as $req) {
+ if (!$req->isFulfilled() && $req instanceof PhpIniRequirement) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns the PHP configuration file (php.ini) path.
+ *
+ * @return string|false php.ini file path
+ */
+ public function getPhpIniConfigPath()
+ {
+ return get_cfg_var('cfg_file_path');
+ }
+}
+
+/**
+ * This class specifies all requirements and optional recommendations that
+ * are necessary to run the Symfony Standard Edition.
+ *
+ * @author Tobias Schultze
+ * @author Fabien Potencier
+ */
+class SymfonyRequirements extends RequirementCollection
+{
+ const LEGACY_REQUIRED_PHP_VERSION = '5.3.3';
+ const REQUIRED_PHP_VERSION = '5.5.9';
+
+ /**
+ * Constructor that initializes the requirements.
+ */
+ public function __construct()
+ {
+ /* mandatory requirements follow */
+
+ $installedPhpVersion = phpversion();
+ $requiredPhpVersion = $this->getPhpRequiredVersion();
+
+ $this->addRecommendation(
+ $requiredPhpVersion,
+ 'Vendors should be installed in order to check all requirements.',
+ 'Run the composer install command.',
+ 'Run the "composer install" command.'
+ );
+
+ if (false !== $requiredPhpVersion) {
+ $this->addRequirement(
+ version_compare($installedPhpVersion, $requiredPhpVersion, '>='),
+ sprintf('PHP version must be at least %s (%s installed)', $requiredPhpVersion, $installedPhpVersion),
+ sprintf('You are running PHP version "%s ", but Symfony needs at least PHP "%s " to run.
+ Before using Symfony, upgrade your PHP installation, preferably to the latest version.',
+ $installedPhpVersion, $requiredPhpVersion),
+ sprintf('Install PHP %s or newer (installed version is %s)', $requiredPhpVersion, $installedPhpVersion)
+ );
+ }
+
+ $this->addRequirement(
+ version_compare($installedPhpVersion, '5.3.16', '!='),
+ 'PHP version must not be 5.3.16 as Symfony won\'t work properly with it',
+ 'Install PHP 5.3.17 or newer (or downgrade to an earlier PHP version)'
+ );
+
+ $this->addRequirement(
+ is_dir(__DIR__.'/../vendor/composer'),
+ 'Vendor libraries must be installed',
+ 'Vendor libraries are missing. Install composer following instructions from http://getcomposer.org/ . '.
+ 'Then run "php composer.phar install " to install them.'
+ );
+
+ $cacheDir = is_dir(__DIR__.'/../var/cache') ? __DIR__.'/../var/cache' : __DIR__.'/cache';
+
+ $this->addRequirement(
+ is_writable($cacheDir),
+ 'app/cache/ or var/cache/ directory must be writable',
+ 'Change the permissions of either "app/cache/ " or "var/cache/ " directory so that the web server can write into it.'
+ );
+
+ $logsDir = is_dir(__DIR__.'/../var/logs') ? __DIR__.'/../var/logs' : __DIR__.'/logs';
+
+ $this->addRequirement(
+ is_writable($logsDir),
+ 'app/logs/ or var/logs/ directory must be writable',
+ 'Change the permissions of either "app/logs/ " or "var/logs/ " directory so that the web server can write into it.'
+ );
+
+ if (version_compare($installedPhpVersion, '7.0.0', '<')) {
+ $this->addPhpIniRequirement(
+ 'date.timezone', true, false,
+ 'date.timezone setting must be set',
+ 'Set the "date.timezone " setting in php.ini* (like Europe/Paris).'
+ );
+ }
+
+ if (false !== $requiredPhpVersion && version_compare($installedPhpVersion, $requiredPhpVersion, '>=')) {
+ $timezones = array();
+ foreach (DateTimeZone::listAbbreviations() as $abbreviations) {
+ foreach ($abbreviations as $abbreviation) {
+ $timezones[$abbreviation['timezone_id']] = true;
+ }
+ }
+
+ $this->addRequirement(
+ isset($timezones[@date_default_timezone_get()]),
+ sprintf('Configured default timezone "%s" must be supported by your installation of PHP', @date_default_timezone_get()),
+ 'Your default timezone is not supported by PHP. Check for typos in your php.ini file and have a look at the list of deprecated timezones at http://php.net/manual/en/timezones.others.php .'
+ );
+ }
+
+ $this->addRequirement(
+ function_exists('iconv'),
+ 'iconv() must be available',
+ 'Install and enable the iconv extension.'
+ );
+
+ $this->addRequirement(
+ function_exists('json_encode'),
+ 'json_encode() must be available',
+ 'Install and enable the JSON extension.'
+ );
+
+ $this->addRequirement(
+ function_exists('session_start'),
+ 'session_start() must be available',
+ 'Install and enable the session extension.'
+ );
+
+ $this->addRequirement(
+ function_exists('ctype_alpha'),
+ 'ctype_alpha() must be available',
+ 'Install and enable the ctype extension.'
+ );
+
+ $this->addRequirement(
+ function_exists('token_get_all'),
+ 'token_get_all() must be available',
+ 'Install and enable the Tokenizer extension.'
+ );
+
+ $this->addRequirement(
+ function_exists('simplexml_import_dom'),
+ 'simplexml_import_dom() must be available',
+ 'Install and enable the SimpleXML extension.'
+ );
+
+ if (function_exists('apc_store') && ini_get('apc.enabled')) {
+ if (version_compare($installedPhpVersion, '5.4.0', '>=')) {
+ $this->addRequirement(
+ version_compare(phpversion('apc'), '3.1.13', '>='),
+ 'APC version must be at least 3.1.13 when using PHP 5.4',
+ 'Upgrade your APC extension (3.1.13+).'
+ );
+ } else {
+ $this->addRequirement(
+ version_compare(phpversion('apc'), '3.0.17', '>='),
+ 'APC version must be at least 3.0.17',
+ 'Upgrade your APC extension (3.0.17+).'
+ );
+ }
+ }
+
+ $this->addPhpIniRequirement('detect_unicode', false);
+
+ if (extension_loaded('suhosin')) {
+ $this->addPhpIniRequirement(
+ 'suhosin.executor.include.whitelist',
+ create_function('$cfgValue', 'return false !== stripos($cfgValue, "phar");'),
+ false,
+ 'suhosin.executor.include.whitelist must be configured correctly in php.ini',
+ 'Add "phar " to suhosin.executor.include.whitelist in php.ini* .'
+ );
+ }
+
+ if (extension_loaded('xdebug')) {
+ $this->addPhpIniRequirement(
+ 'xdebug.show_exception_trace', false, true
+ );
+
+ $this->addPhpIniRequirement(
+ 'xdebug.scream', false, true
+ );
+
+ $this->addPhpIniRecommendation(
+ 'xdebug.max_nesting_level',
+ create_function('$cfgValue', 'return $cfgValue > 100;'),
+ true,
+ 'xdebug.max_nesting_level should be above 100 in php.ini',
+ 'Set "xdebug.max_nesting_level " to e.g. "250 " in php.ini* to stop Xdebug\'s infinite recursion protection erroneously throwing a fatal error in your project.'
+ );
+ }
+
+ $pcreVersion = defined('PCRE_VERSION') ? (float) PCRE_VERSION : null;
+
+ $this->addRequirement(
+ null !== $pcreVersion,
+ 'PCRE extension must be available',
+ 'Install the PCRE extension (version 8.0+).'
+ );
+
+ if (extension_loaded('mbstring')) {
+ $this->addPhpIniRequirement(
+ 'mbstring.func_overload',
+ create_function('$cfgValue', 'return (int) $cfgValue === 0;'),
+ true,
+ 'string functions should not be overloaded',
+ 'Set "mbstring.func_overload " to 0 in php.ini* to disable function overloading by the mbstring extension.'
+ );
+ }
+
+ /* optional recommendations follow */
+
+ if (file_exists(__DIR__.'/../vendor/composer')) {
+ require_once __DIR__.'/../vendor/autoload.php';
+
+ try {
+ $r = new ReflectionClass('Sensio\Bundle\DistributionBundle\SensioDistributionBundle');
+
+ $contents = file_get_contents(dirname($r->getFileName()).'/Resources/skeleton/app/SymfonyRequirements.php');
+ } catch (ReflectionException $e) {
+ $contents = '';
+ }
+ $this->addRecommendation(
+ file_get_contents(__FILE__) === $contents,
+ 'Requirements file should be up-to-date',
+ 'Your requirements file is outdated. Run composer install and re-check your configuration.'
+ );
+ }
+
+ $this->addRecommendation(
+ version_compare($installedPhpVersion, '5.3.4', '>='),
+ 'You should use at least PHP 5.3.4 due to PHP bug #52083 in earlier versions',
+ 'Your project might malfunction randomly due to PHP bug #52083 ("Notice: Trying to get property of non-object"). Install PHP 5.3.4 or newer.'
+ );
+
+ $this->addRecommendation(
+ version_compare($installedPhpVersion, '5.3.8', '>='),
+ 'When using annotations you should have at least PHP 5.3.8 due to PHP bug #55156',
+ 'Install PHP 5.3.8 or newer if your project uses annotations.'
+ );
+
+ $this->addRecommendation(
+ version_compare($installedPhpVersion, '5.4.0', '!='),
+ 'You should not use PHP 5.4.0 due to the PHP bug #61453',
+ 'Your project might not work properly due to the PHP bug #61453 ("Cannot dump definitions which have method calls"). Install PHP 5.4.1 or newer.'
+ );
+
+ $this->addRecommendation(
+ version_compare($installedPhpVersion, '5.4.11', '>='),
+ 'When using the logout handler from the Symfony Security Component, you should have at least PHP 5.4.11 due to PHP bug #63379 (as a workaround, you can also set invalidate_session to false in the security logout handler configuration)',
+ 'Install PHP 5.4.11 or newer if your project uses the logout handler from the Symfony Security Component.'
+ );
+
+ $this->addRecommendation(
+ (version_compare($installedPhpVersion, '5.3.18', '>=') && version_compare($installedPhpVersion, '5.4.0', '<'))
+ ||
+ version_compare($installedPhpVersion, '5.4.8', '>='),
+ 'You should use PHP 5.3.18+ or PHP 5.4.8+ to always get nice error messages for fatal errors in the development environment due to PHP bug #61767/#60909',
+ 'Install PHP 5.3.18+ or PHP 5.4.8+ if you want nice error messages for all fatal errors in the development environment.'
+ );
+
+ if (null !== $pcreVersion) {
+ $this->addRecommendation(
+ $pcreVersion >= 8.0,
+ sprintf('PCRE extension should be at least version 8.0 (%s installed)', $pcreVersion),
+ 'PCRE 8.0+ is preconfigured in PHP since 5.3.2 but you are using an outdated version of it. Symfony probably works anyway but it is recommended to upgrade your PCRE extension.'
+ );
+ }
+
+ $this->addRecommendation(
+ class_exists('DomDocument'),
+ 'PHP-DOM and PHP-XML modules should be installed',
+ 'Install and enable the PHP-DOM and the PHP-XML modules.'
+ );
+
+ $this->addRecommendation(
+ function_exists('mb_strlen'),
+ 'mb_strlen() should be available',
+ 'Install and enable the mbstring extension.'
+ );
+
+ $this->addRecommendation(
+ function_exists('iconv'),
+ 'iconv() should be available',
+ 'Install and enable the iconv extension.'
+ );
+
+ $this->addRecommendation(
+ function_exists('utf8_decode'),
+ 'utf8_decode() should be available',
+ 'Install and enable the XML extension.'
+ );
+
+ $this->addRecommendation(
+ function_exists('filter_var'),
+ 'filter_var() should be available',
+ 'Install and enable the filter extension.'
+ );
+
+ if (!defined('PHP_WINDOWS_VERSION_BUILD')) {
+ $this->addRecommendation(
+ function_exists('posix_isatty'),
+ 'posix_isatty() should be available',
+ 'Install and enable the php_posix extension (used to colorize the CLI output).'
+ );
+ }
+
+ $this->addRecommendation(
+ extension_loaded('intl'),
+ 'intl extension should be available',
+ 'Install and enable the intl extension (used for validators).'
+ );
+
+ if (extension_loaded('intl')) {
+ // in some WAMP server installations, new Collator() returns null
+ $this->addRecommendation(
+ null !== new Collator('fr_FR'),
+ 'intl extension should be correctly configured',
+ 'The intl extension does not behave properly. This problem is typical on PHP 5.3.X x64 WIN builds.'
+ );
+
+ // check for compatible ICU versions (only done when you have the intl extension)
+ if (defined('INTL_ICU_VERSION')) {
+ $version = INTL_ICU_VERSION;
+ } else {
+ $reflector = new ReflectionExtension('intl');
+
+ ob_start();
+ $reflector->info();
+ $output = strip_tags(ob_get_clean());
+
+ preg_match('/^ICU version +(?:=> )?(.*)$/m', $output, $matches);
+ $version = $matches[1];
+ }
+
+ $this->addRecommendation(
+ version_compare($version, '4.0', '>='),
+ 'intl ICU version should be at least 4+',
+ 'Upgrade your intl extension with a newer ICU version (4+).'
+ );
+
+ if (class_exists('Symfony\Component\Intl\Intl')) {
+ $this->addRecommendation(
+ \Symfony\Component\Intl\Intl::getIcuDataVersion() <= \Symfony\Component\Intl\Intl::getIcuVersion(),
+ sprintf('intl ICU version installed on your system is outdated (%s) and does not match the ICU data bundled with Symfony (%s)', \Symfony\Component\Intl\Intl::getIcuVersion(), \Symfony\Component\Intl\Intl::getIcuDataVersion()),
+ 'To get the latest internationalization data upgrade the ICU system package and the intl PHP extension.'
+ );
+ if (\Symfony\Component\Intl\Intl::getIcuDataVersion() <= \Symfony\Component\Intl\Intl::getIcuVersion()) {
+ $this->addRecommendation(
+ \Symfony\Component\Intl\Intl::getIcuDataVersion() === \Symfony\Component\Intl\Intl::getIcuVersion(),
+ sprintf('intl ICU version installed on your system (%s) does not match the ICU data bundled with Symfony (%s)', \Symfony\Component\Intl\Intl::getIcuVersion(), \Symfony\Component\Intl\Intl::getIcuDataVersion()),
+ 'To avoid internationalization data inconsistencies upgrade the symfony/intl component.'
+ );
+ }
+ }
+
+ $this->addPhpIniRecommendation(
+ 'intl.error_level',
+ create_function('$cfgValue', 'return (int) $cfgValue === 0;'),
+ true,
+ 'intl.error_level should be 0 in php.ini',
+ 'Set "intl.error_level " to "0 " in php.ini* to inhibit the messages when an error occurs in ICU functions.'
+ );
+ }
+
+ $accelerator =
+ (extension_loaded('eaccelerator') && ini_get('eaccelerator.enable'))
+ ||
+ (extension_loaded('apc') && ini_get('apc.enabled'))
+ ||
+ (extension_loaded('Zend Optimizer+') && ini_get('zend_optimizerplus.enable'))
+ ||
+ (extension_loaded('Zend OPcache') && ini_get('opcache.enable'))
+ ||
+ (extension_loaded('xcache') && ini_get('xcache.cacher'))
+ ||
+ (extension_loaded('wincache') && ini_get('wincache.ocenabled'))
+ ;
+
+ $this->addRecommendation(
+ $accelerator,
+ 'a PHP accelerator should be installed',
+ 'Install and/or enable a PHP accelerator (highly recommended).'
+ );
+
+ if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
+ $this->addRecommendation(
+ $this->getRealpathCacheSize() >= 5 * 1024 * 1024,
+ 'realpath_cache_size should be at least 5M in php.ini',
+ 'Setting "realpath_cache_size " to e.g. "5242880 " or "5M " in php.ini* may improve performance on Windows significantly in some cases.'
+ );
+ }
+
+ $this->addPhpIniRecommendation('short_open_tag', false);
+
+ $this->addPhpIniRecommendation('magic_quotes_gpc', false, true);
+
+ $this->addPhpIniRecommendation('register_globals', false, true);
+
+ $this->addPhpIniRecommendation('session.auto_start', false);
+
+ $this->addRecommendation(
+ class_exists('PDO'),
+ 'PDO should be installed',
+ 'Install PDO (mandatory for Doctrine).'
+ );
+
+ if (class_exists('PDO')) {
+ $drivers = PDO::getAvailableDrivers();
+ $this->addRecommendation(
+ count($drivers) > 0,
+ sprintf('PDO should have some drivers installed (currently available: %s)', count($drivers) ? implode(', ', $drivers) : 'none'),
+ 'Install PDO drivers (mandatory for Doctrine).'
+ );
+ }
+ }
+
+ /**
+ * Loads realpath_cache_size from php.ini and converts it to int.
+ *
+ * (e.g. 16k is converted to 16384 int)
+ *
+ * @return int
+ */
+ protected function getRealpathCacheSize()
+ {
+ $size = ini_get('realpath_cache_size');
+ $size = trim($size);
+ $unit = strtolower(substr($size, -1, 1));
+ switch ($unit) {
+ case 'g':
+ return $size * 1024 * 1024 * 1024;
+ case 'm':
+ return $size * 1024 * 1024;
+ case 'k':
+ return $size * 1024;
+ default:
+ return (int) $size;
+ }
+ }
+
+ /**
+ * Defines PHP required version from Symfony version.
+ *
+ * @return string|false The PHP required version or false if it could not be guessed
+ */
+ protected function getPhpRequiredVersion()
+ {
+ if (!file_exists($path = __DIR__.'/../composer.lock')) {
+ return false;
+ }
+
+ $composerLock = json_decode(file_get_contents($path), true);
+ foreach ($composerLock['packages'] as $package) {
+ $name = $package['name'];
+ if ('symfony/symfony' !== $name && 'symfony/http-kernel' !== $name) {
+ continue;
+ }
+
+ return (int) $package['version'][1] > 2 ? self::REQUIRED_PHP_VERSION : self::LEGACY_REQUIRED_PHP_VERSION;
+ }
+
+ return false;
+ }
+}
diff --git a/trunk/web/app.php b/trunk/web/app.php
new file mode 100644
index 00000000..6bd0ea01
--- /dev/null
+++ b/trunk/web/app.php
@@ -0,0 +1,18 @@
+loadClassCache();
+//$kernel = new AppCache($kernel);
+
+// When using the HttpCache, you need to call the method in your front controller instead of relying on the configuration parameter
+//Request::enableHttpMethodParameterOverride();
+$request = Request::createFromGlobals();
+$response = $kernel->handle($request);
+$response->send();
+$kernel->terminate($request, $response);
diff --git a/trunk/web/app_dev.php b/trunk/web/app_dev.php
new file mode 100644
index 00000000..94f18864
--- /dev/null
+++ b/trunk/web/app_dev.php
@@ -0,0 +1,36 @@
+unregister();
+$redisLoader->register(true);
+
+Debug::enable();
+
+$kernel = new AppKernel('dev', true);
+$kernel->loadClassCache();
+$request = Request::createFromGlobals();
+$response = $kernel->handle($request);
+$response->send();
+$kernel->terminate($request, $response);
diff --git a/trunk/web/config.php b/trunk/web/config.php
new file mode 100644
index 00000000..1368c8a4
--- /dev/null
+++ b/trunk/web/config.php
@@ -0,0 +1,215 @@
+getFailedRequirements();
+$minorProblems = $symfonyRequirements->getFailedRecommendations();
+$hasMajorProblems = (bool) count($majorProblems);
+$hasMinorProblems = (bool) count($minorProblems);
+
+?>
+
+
+
+
+
+ Symfony Configuration Checker
+
+
+
+
+
+
+
+
+
+
+
+
Configuration Checker
+
+ This script analyzes your system to check whether is
+ ready to run Symfony applications.
+
+
+
+
Major problems
+
Major problems have been detected and must be fixed before continuing:
+
+
+ getTestMessage() ?>
+ getHelpHtml() ?>
+
+
+
+
+
+
+
Recommendations
+
+ Additionally, toTo enhance your Symfony experience,
+ it’s recommended that you fix the following:
+
+
+
+ getTestMessage() ?>
+ getHelpHtml() ?>
+
+
+
+
+
+ hasPhpIniConfigIssue()): ?>
+
*
+ getPhpIniConfigPath()): ?>
+ Changes to the php.ini file must be done in "getPhpIniConfigPath() ?> ".
+
+ To change settings, create a "php.ini ".
+
+
+
+
+
+
All checks passed successfully. Your system is ready to run Symfony applications.
+
+
+
+
+
+
+
Symfony Standard Edition
+
+
+
diff --git a/trunk/web/favicon.ico b/trunk/web/favicon.ico
new file mode 100644
index 00000000..479f7f50
Binary files /dev/null and b/trunk/web/favicon.ico differ
diff --git a/trunk/web/robots.txt b/trunk/web/robots.txt
new file mode 100644
index 00000000..4665fcae
--- /dev/null
+++ b/trunk/web/robots.txt
@@ -0,0 +1,5 @@
+# www.robotstxt.org/
+# www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156449
+
+User-agent: *
+Disallow: