diff --git a/trunk/.gitignore b/trunk/.gitignore new file mode 100644 index 00000000..93821ad1 --- /dev/null +++ b/trunk/.gitignore @@ -0,0 +1,16 @@ +/app/config/parameters.yml +/build/ +/phpunit.xml +/var/* +!/var/cache +/var/cache/* +!var/cache/.gitkeep +!/var/logs +/var/logs/* +!var/logs/.gitkeep +!/var/sessions +/var/sessions/* +!var/sessions/.gitkeep +!var/SymfonyRequirements.php +/vendor/ +/web/bundles/ diff --git a/trunk/app/.htaccess b/trunk/app/.htaccess new file mode 100644 index 00000000..fb1de45b --- /dev/null +++ b/trunk/app/.htaccess @@ -0,0 +1,7 @@ + + Require all denied + + + Order deny,allow + Deny from all + diff --git a/trunk/app/AppCache.php b/trunk/app/AppCache.php new file mode 100644 index 00000000..639ec2cd --- /dev/null +++ b/trunk/app/AppCache.php @@ -0,0 +1,7 @@ +getEnvironment(), ['dev', 'test'], true)) { + $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle(); + $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); + $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); + $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); + $bundles[] = new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(); + } + + return $bundles; + } + + public function getRootDir() + { + return __DIR__; + } + + public function getCacheDir() + { + return dirname(__DIR__).'/var/cache/'.$this->getEnvironment(); + } + + public function getLogDir() + { + return dirname(__DIR__).'/var/logs'; + } + + public function registerContainerConfiguration(LoaderInterface $loader) + { + $loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml'); + } +} diff --git a/trunk/app/Resources/views/base.html.twig b/trunk/app/Resources/views/base.html.twig new file mode 100644 index 00000000..9e386c51 --- /dev/null +++ b/trunk/app/Resources/views/base.html.twig @@ -0,0 +1,115 @@ + + + + + + + + + + + + STERNTOURS + + + + + + + + {% block stylesheets %} + {% stylesheets + 'bundles/app/css/bootstrap-3.3.7.css' + 'bundles/app/css/custom.css' + 'bundles/app/css/booking.css' + filter='cssrewrite' + %} + + {% endstylesheets %} + {% endblock stylesheets %} + + + + + + +
+ + {{ render(controller('AppBundle:Default:header')) }} + + {% block header2 %} +
+ +
+
+
+
+
+
+ eKomi - The Feedback Company: +
+
    +
  • Spezialist für Kulturreisen
  • +
  • Reiseexperte seit 1998
  • +
  • Beratung für individuelle Reisen
  • +
+
+
+
+
+
+
+ {% endblock %} + + {# #TODO additional section classes if not home #} +
+
+
+
+ + {% block breadcrumb %} + {{ render(controller('AppBundle:Default:breadcrumb', {'page': page})) }} + {% endblock %} + + +
+ + {% include 'default/components/sidebar.html.twig' %} + +
+ {% block body %}{% endblock %} +
+ +
+ + +
+
+
+
+ + {% include 'default/components/footer.html.twig' %} + +
+ +{% block javascripts %} + + {% javascripts + '@AppBundle/Resources/public/js/jquery-3.1.1.js' + '@AppBundle/Resources/public/js/jquery-ui-1.12.1.js' + '@AppBundle/Resources/public/js/bootstrap-3.3.7.js' + '@AppBundle/Resources/public/js/jquery.prettyPhoto-3.1.6.js' + '@AppBundle/Resources/public/js/parallax.js' + '@AppBundle/Resources/public/js/owl.carousel-2.2.0.js' + '@AppBundle/Resources/public/js/bootstrap-select-1.12.0.js' + '@AppBundle/Resources/public/js/custom.js' + %} + + {% endjavascripts %} +{% endblock javascripts %} + + + diff --git a/trunk/app/Resources/views/default/components/booking/insurance.html.twig b/trunk/app/Resources/views/default/components/booking/insurance.html.twig new file mode 100644 index 00000000..19003bac --- /dev/null +++ b/trunk/app/Resources/views/default/components/booking/insurance.html.twig @@ -0,0 +1,45 @@ +{# @var insurance \AppBundle\Entity\TravelInsurance #} +
+ {{ form_widget(form) }} + + + + {% embed 'default/components/embed/modal.html.twig' with { + id: 'insurance-' ~ insurance.id, + title: insurance.name + } %} + {% block body %} +

Leistungen & Preisliste

+ + + + + + + + + + {% for insurance_price in insurance.prices %} + + + + + {% endfor %} + +
Reisepreis bisje Person
{{ insurance_price.border|number_format(2) }} € + {% if insurance_price.price > 0 %} + {{ insurance_price.price|number_format(2) }} € + {% else %} + {{ insurance_price.percent|number_format }} % vom Reisepreis + {% endif %} +
+ {% endblock %} + {% endembed %} +
\ No newline at end of file diff --git a/trunk/app/Resources/views/default/components/booking/travelOption.html.twig b/trunk/app/Resources/views/default/components/booking/travelOption.html.twig new file mode 100644 index 00000000..f6a0ae1b --- /dev/null +++ b/trunk/app/Resources/views/default/components/booking/travelOption.html.twig @@ -0,0 +1,19 @@ +{# @var travelOption \AppBundle\Entity\TravelOption #} +
+ {{ form_widget(travelOptionForm) }} + + {% if travelOption.description is not empty %} + {% embed "default/components/embed/modal.html.twig" with { + 'title': travelOption.name, + 'id': 'booking-option-' ~ travelOption.id + } %} + {% block body %}{{ travelOption.description|raw }}{% endblock %} + {% endembed %} + {% endif %} +
\ No newline at end of file diff --git a/trunk/app/Resources/views/default/components/breadcrumb.html.twig b/trunk/app/Resources/views/default/components/breadcrumb.html.twig new file mode 100644 index 00000000..3c7b4d20 --- /dev/null +++ b/trunk/app/Resources/views/default/components/breadcrumb.html.twig @@ -0,0 +1,19 @@ +{% if breadcrumb_entries is not empty %} + +{% endif %} \ No newline at end of file diff --git a/trunk/app/Resources/views/default/components/departuresModal.html.twig b/trunk/app/Resources/views/default/components/departuresModal.html.twig new file mode 100644 index 00000000..6a6282f8 --- /dev/null +++ b/trunk/app/Resources/views/default/components/departuresModal.html.twig @@ -0,0 +1,41 @@ + \ No newline at end of file diff --git a/trunk/app/Resources/views/default/components/embed/modal.html.twig b/trunk/app/Resources/views/default/components/embed/modal.html.twig new file mode 100644 index 00000000..cb4d75cb --- /dev/null +++ b/trunk/app/Resources/views/default/components/embed/modal.html.twig @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/trunk/app/Resources/views/default/components/footer.html.twig b/trunk/app/Resources/views/default/components/footer.html.twig new file mode 100644 index 00000000..9fdae54b --- /dev/null +++ b/trunk/app/Resources/views/default/components/footer.html.twig @@ -0,0 +1,129 @@ + + + +
+
+
+
+

STERN TOURS © 2016

+
+ +
+ +
+
+
+
\ No newline at end of file diff --git a/trunk/app/Resources/views/default/components/header.html.twig b/trunk/app/Resources/views/default/components/header.html.twig new file mode 100644 index 00000000..414cb329 --- /dev/null +++ b/trunk/app/Resources/views/default/components/header.html.twig @@ -0,0 +1,104 @@ +
+
+
+
+ +
+
+
+ + +
\ No newline at end of file diff --git a/trunk/app/Resources/views/default/components/sidebar.html.twig b/trunk/app/Resources/views/default/components/sidebar.html.twig new file mode 100644 index 00000000..77c59fc3 --- /dev/null +++ b/trunk/app/Resources/views/default/components/sidebar.html.twig @@ -0,0 +1,108 @@ + \ No newline at end of file diff --git a/trunk/app/Resources/views/default/components/slider.html.twig b/trunk/app/Resources/views/default/components/slider.html.twig new file mode 100644 index 00000000..56f40042 --- /dev/null +++ b/trunk/app/Resources/views/default/components/slider.html.twig @@ -0,0 +1,192 @@ +
+
+
+
+
+
+
+
+ eKomi - The Feedback Company: +
+
    +
  • Spezialist für Kulturreisen
  • +
  • Reiseexperte seit 1998
  • +
  • Beratung für individuelle Reisen
  • +
+
+
+
+
+
+
+ +
+ + + +
+
+
+
+ + + +
+
+
+ +
+ +
+ +
+
+ +
+
+
+
+
+ +
+
+
+ +
+ +
+ +
+ +
+
+
+ +
+
+ +
+ +
+ +
+
+ + + + + + +
+ +
+
+ +
+
+ + + + + +
+ +
+ + + + + + + +
+ +
+ + + + + + + +
+ + +
+ +
+ +
+
+
+
+
+
+
\ No newline at end of file diff --git a/trunk/app/Resources/views/default/index.html.twig b/trunk/app/Resources/views/default/index.html.twig new file mode 100644 index 00000000..aff89b89 --- /dev/null +++ b/trunk/app/Resources/views/default/index.html.twig @@ -0,0 +1,5 @@ +{% extends 'base.html.twig' %} + +{% block body %} +
{{ content|raw }}
+{% endblock %} diff --git a/trunk/app/Resources/views/default/pages/booking.html.twig b/trunk/app/Resources/views/default/pages/booking.html.twig new file mode 100644 index 00000000..f4f5bba0 --- /dev/null +++ b/trunk/app/Resources/views/default/pages/booking.html.twig @@ -0,0 +1,377 @@ +{% extends 'base.html.twig' %} + +{% block breadcrumb %} + {{ include('default/components/breadcrumb.html.twig') }} +{% endblock %} + +{% block body %} +
+ +
+ +

Buchungsformular

+ + +
+ +

{{ travel_program.title }}

+ + +
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Reiseprogramm + {{ travel_program.title }} + {#
(Reisebeschreibung aufrufen)#} +
KategorieStandard {# #TODO #}
Reisezeitraum{{ travel_date.start|date }} - {{ travel_date.end|date }} ({{ travel_date.name }})
{{ form_label(form.departure, 'Abflugort') }} + +
{{ form_label(form.travelerCount, 'Reiseteilnehmer') }} +
Reiseversicherung +
+ + +
+ + {% for insuranceForm in form.insurance %} + {% include 'default/components/booking/insurance.html.twig' with { + 'form': insuranceForm, + 'insurance': form.insurance.vars.choices[insuranceForm.vars.value].data + } %} + {% endfor %} +
Zubuchbare Leistungen + {% if form.comfort is defined %} +
+ {{ form_widget(form.comfort) }} + + {% embed "default/components/embed/modal.html.twig" with { + 'title': 'Komfort-Kategorie (4 Sterne)', + 'id': 'comfort-booking-option' + } %} + {% block body %} +

Aufpreise für Kategorie

+
    + {% for price in travel_date.prices %} + {# @var price \AppBundle\Entity\TravelPeriodPrice #} +
  • + p.P. {{ price.priceComfort|number_format(2) }} € + {{ price_type_by_id[price.priceType.id].name }} +
  • + {% endfor %} +
+ {% endblock %} + {% endembed %} +
+ {% endif %} + + {% for travelOptionForm in form.travelOptions %} + {% include 'default/components/booking/travelOption.html.twig' with { + 'travelOptionForm': travelOptionForm, + 'travelOption': form.travelOptions.vars.choices[travelOptionForm.vars.value].data + } %} + {% endfor %} +
+
+ +
+
+
+

Ihr gewähltes Angebot

+ + + + + + + + + + + +
-700,00 € + Abzug für Abfahrts-/Abflugort "Eigenanreise" (2 x -350,00 €): + -700,00 € +
+ = 3.921,68 € + Gesamtpreis der Reise
+
+
+
+ +
+ +
+
+
+
Reiseleistungen
+
+ +
+
+
+ +

Reiseleistungen einblenden

+
+
+
+

Eingeschlossene Leistungen

+
    + {% for travel_program_service in travel_program.included|replace({'*': ''})|split('\n') %} +
  • {{ travel_program_service|raw }}
  • + {% endfor %} +
+

Nicht eingeschlossene / zubuchbare Leistungen

+
    + {% for travel_program_service in travel_program.excluded|split('\n') %} +
  • {{ travel_program_service|raw }}
  • + {% endfor %} +
+

Hinweise

+
    + {% for travel_program_service in travel_program.advices|split('\n') %} +
  • {{ travel_program_service|raw }}
  • + {% endfor %} +
+
+
+
+
+
+
+
+
+
+
+
Reiseanmelder
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+ +
+
+
+
Reiseteilnehmer
+

Bitte geben Sie Ihre Vornamen und Nachnamen in die beiden Felder "Vornamen" und "Nachnamen" ein, wie diese im maschinenlesbaren Teil in Ihrem Reisepass eingetragen sind.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Nr.GeschlechtVornameNachnameGeburtsdatum (TT.MM.JJJJ)
+ + + + + + + + + +
+ + + + + + + + + +
+
+
+
+
+ +
+
+
+
Mitteilungen / Sonstiges (optional)
+
+
+ +
+
+
+ +
+
+
+
Zahlung
+ +

Die gewünschte Zahlungsart (Rechnung, Überweisung, Sofortüberweisung, Kreditkarten, Barzahlung) stimmen wir mit Ihnen im Anschluss an Ihre Buchung ab.

+
+ + +
+
+ +
+
+
+
Allgemeine Geschäftsbedingungen
+
+ + +
+
+
+ +
+
+
+ +
+ +
+ +
+ +
+{% endblock body %} \ No newline at end of file diff --git a/trunk/app/Resources/views/default/pages/default.html.twig b/trunk/app/Resources/views/default/pages/default.html.twig new file mode 100644 index 00000000..16515b22 --- /dev/null +++ b/trunk/app/Resources/views/default/pages/default.html.twig @@ -0,0 +1,7 @@ +{% extends 'base.html.twig' %} + +{% block body %} +
+ {{ page.content|raw }} +
+{% endblock %} \ No newline at end of file diff --git a/trunk/app/Resources/views/default/pages/home.html.twig b/trunk/app/Resources/views/default/pages/home.html.twig new file mode 100644 index 00000000..d280e4fc --- /dev/null +++ b/trunk/app/Resources/views/default/pages/home.html.twig @@ -0,0 +1,296 @@ +{% extends 'base.html.twig' %} + +{% block header2 %} + {% include 'default/components/slider.html.twig' %} +{% endblock %} +{% block breadcrumb %}{% endblock %} + +{% block body %} +
+
Unsere beliebtesten Kulturreisen
+ +
+ +
+
Alle Reisekategorien auf einem Blick
+ +
+ +
+
+

STERN TOURS - Ihr Kulturreise-Spezialist aus Berlin für Ägypten, Israel, Jordanien, Jugendreisen und Usedom Ferienwohnungen

+

Herzlich willkommen bei STERN TOURS, Ihrem Reiseveranstalter für Reisen zu den interessantesten Zielen Vorderasiens. Gehen Sie mit uns auf große Reise in den Orient, entdecken Sie die historischen Schätze der Antike und erkunden Sie bisher wenig bekannte Länder. Als Spezialist für Kultur-Reisen in den Nahen Osten bieten wir Ihnen seit 1998 Rundreisen und Studienreisen an, bei denen Sie die Highlights eines jeden Landes kennenlernen. In unserem Büro in Berlin-Wilmersdorf beraten wir Sie gern persönlich oder telefonisch eingehend über Ihr gewünschtes Reiseziel. Unsere Mitarbeiter kennen die Länder, in die unsere Kultur-Reisen führen, aus eigener Erfahrung. Die Tipps unserer Experten sind praxisorientiert und sorgen für eine Reise mit unvergesslichen Eindrücken. Wir klären Sie auf über Einreisebestimmungen und Vorschriften, sodass Sie sich sicher in jedem Land bewegen können. Stimmen Sie sich auf unseren Seiten mit zauberhaften Videos und Bildern auf das von Ihnen gewählte Reiseziel ein. Profitieren Sie bei Ihrer Reiseplanung von unserem umfangreichen Wissen und unserer langjährigen Erfahrung mit Kultur-Reisen zu den schönsten Orten des Orients. Erleben Sie ein Märchen aus Tausendundeine Nacht bei einem Reiseveranstalter, für den Ihr persönliches Wohl an erster Stelle steht.

+ +

Ägypten – Land der Pyramiden und Pharaonen

+

Das Land am Nil gehört zu den interessantesten Ländern der Erde. Eine große Kultur hat hier einzigartige Baudenkmäler hinterlassen. Unsere Flussfahrten auf der großen Lebensader des Landes, dem Nil, führen Sie zu den bedeutendsten Sehenswürdigkeiten wie den Pyramiden, dem Tal der Könige und Luxor. Bewundern Sie bei einem Besuch im Ägyptischen Museum in Kairo die berühmte goldene Totenmaske des Tut-Ench-Amun und viele weitere Schätze, die von den Ausgräbern freigelegt wurden. Entdecken Sie auf Ihrer Rundreise den unglaublichen Reichtum dieses Landes, das einst die führende Kulturnation der alten Welt gewesen ist. Bestaunen Sie die Schätze der Pharaonen, wandeln Sie auf den Spuren der Archäologen und beschließen Sie Ihre Kultur-Reise durch Ägypten mit einem erholsamen Badeurlaub am Roten Meer. Hier finden Sie unsere Ägypten Rundreisen.

+ +

Israel – die Wiege der großen Religionen

+

Erleben Sie das biblische Land, auf dem die drei großen Religionen Judentum, Islam und Christentum fußen. Religiöse Stätten gibt es in Israel an allen Ecken. Besuchen Sie die Orte Nazareth, Bethlehem und Jericho mit ihren einzigartigen Bauwerken. Durchqueren Sie die Negev-Wüste und das Tal des Jordan und entdecken Sie Kibbuze mit ihren blühenden Landschaften auf Ihrem Weg. Besteigen Sie den Ölberg und besuchen Sie die Klagemauer in Jerusalem, der Stadt, die Mittelpunkt aller drei Religionen ist. Entdecken Sie das moderne Israel, das sich in der Hauptstadt in Tea Aviv präsentiert. Unternehmen Sie einen Abstecher in die israelischen Hafenstädte Haifa und das wunderschöne Akko mit seiner zum Weltkulturerbe gehörenden Altstadt. Entspannen Sie sich nach Ihren aufregenden Reiseerlebnissen bei einem Bad im salzreichen Toten Meer oder genießen Sie einen sonnigen Badeurlaub am Roten Meer in Eilat. Hier finden Sie unsere Israel Rundreisen.

+
+
+ + +
+

Weiterführende Links

+ +
+{% endblock body %} \ No newline at end of file diff --git a/trunk/app/Resources/views/default/pages/overview.html.twig b/trunk/app/Resources/views/default/pages/overview.html.twig new file mode 100644 index 00000000..dffe68cf --- /dev/null +++ b/trunk/app/Resources/views/default/pages/overview.html.twig @@ -0,0 +1,33 @@ +{% extends 'base.html.twig' %} + +{% block body %} +
+
{{ page.pagetitle ?? page.title }}
+ + {#{% for i in 0..page.children|length//3 %}#} +
+ {% for child_page in page.children if child_page.status == 1 %} +
+ +
+ {% endfor %} +
+
+ +
+ {{ page.content|raw }} +
+{% endblock %} \ No newline at end of file diff --git a/trunk/app/Resources/views/default/pages/search.html.twig b/trunk/app/Resources/views/default/pages/search.html.twig new file mode 100644 index 00000000..236053d0 --- /dev/null +++ b/trunk/app/Resources/views/default/pages/search.html.twig @@ -0,0 +1,114 @@ +{% extends 'base.html.twig' %} + +{% block body %} +
+
+ +

+ {% if travel_programs is empty %} + Für Ihre Auswahl wurden keine Reisetermine gefunden. + {% else %} + Reisen mit passendem Termin gefunden: {{ travel_programs|length }} + Reiseprogramm{% if travel_programs|length > 1 %}e{% endif %} + {% endif %} +

+ +
+ + {% for travel_program in travel_programs %} +
+
+
+ +
+
+ + + Druckversion + + +
{{ travel_program.title }}
+ +
{{ travel_program.subtitle }}
+
+ {{ travel_program.travelDates|length }} passende{% if travel_program.travelDates|length > 1 %} Termine{% else %}r Termin{% endif %} +
+
p.P. ab {{ travel_program.lowestPrice|number_format(2) }} €
+ +
+ {# #TODO #} + + Angebot aufrufen + +
+ +
+
+
+ +
+
+ + + + + + + + + + + + + + + {% set travel_program_loop = loop %} + {% for travel_date in travel_program.travelDates %} + {# @var travel_date \AppBundle\Entity\TravelDate #} + + + + + + + + + + + + + + {% endfor %} + +
Termin-Nr.BeginnEndePreis p.P im DoppelzimmerPreis p.P im Einzelzimmer
{{ travel_date.name }}{{ travel_date.start|date }}{{ travel_date.end|date }}ab {{ travel_date.prices[3].effectivePrice|number_format(2) }} €ab {{ travel_date.prices[1].effectivePrice|number_format(2) }} € + + Flughäfen + + + {% include 'default/components/departuresModal.html.twig' with { + 'departures': travel_date.departures, + 'id': travel_program_loop.index0 ~ '-' ~ loop.index0 + } %} + + Verfügbarkeit + buchen
+
+ + {% endfor %} + +
+
+ +
+ +{% endblock body %} \ No newline at end of file diff --git a/trunk/app/Resources/views/default/pages/travelProgram.html.twig b/trunk/app/Resources/views/default/pages/travelProgram.html.twig new file mode 100644 index 00000000..f307f095 --- /dev/null +++ b/trunk/app/Resources/views/default/pages/travelProgram.html.twig @@ -0,0 +1,213 @@ +{% extends 'base.html.twig' %} + +{% block body %} + +
+
+ +

{{ travel_program.title }}

+ +
+ +
+
+ +
+ +
+
+
+ +
+ +
+ +
+ + {{ travel_program.htmlDescription|raw }} + +
+ +
+
    + {% for travel_program_service in travel_program.included|replace({'*': ''})|split('\n') %} +
  • {{ travel_program_service|raw }}
  • + {% endfor %} +
+ {# +

Unser Video

+
+

Video Headline

+
+ + + + + + +
+
+ #} +
+ +
+ +

{{ travel_program.subtitle }}

+ +
+ + {% if travel_program.travelDates is not empty %} + {% set has_three_bed_room = (travel_program.travelDates|first).prices[5] is defined %} + + + + + + + + {% if has_three_bed_room %}{% endif %} + + + + + + + + {% for travel_date in travel_program.travelDates %} + {# @var travel_date \AppBundle\Entity\TravelDate #} + + + + + {% if has_three_bed_room %} + + {% endif %} + + + + + + {% endfor %} + +
Nr.BeginnEndePreis p.P im DreibettzimmerPreis p.P im DoppelzimmerPreis p.P im EinzelzimmerAbflugorte / ZuschlägeBuchung
{{ travel_date.name }}{{ travel_date.start|date }}{{ travel_date.end|date }} + {% 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 %} + + {% 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 + +
+ {% 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 ? + '
' + + '
' + + '' + + '' + + '
' + + '
' + : ''; + var donebutton = this.multiple && this.options.doneButton ? + '
' + + '
' + + '' + + '
' + + '
' + : ''; + var drop = + '
' + + '' + + '' + + '
'; + + 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 = /\s*$/g; + +function manipulationTarget( elem, content ) { + if ( jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return elem.getElementsByTagName( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rmargin = ( /^margin/ ); + +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + div.style.cssText = + "box-sizing:border-box;" + + "position:relative;display:block;" + + "margin:auto;border:1px;padding:1px;" + + "top:1%;width:50%"; + div.innerHTML = ""; + documentElement.appendChild( container ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = divStyle.marginLeft === "2px"; + boxSizingReliableVal = divStyle.width === "4px"; + + // Support: Android 4.0 - 4.3 only + // Some styles come back with percentage values, even though they shouldn't + div.style.marginRight = "50%"; + pixelMarginRightVal = divStyle.marginRight === "4px"; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + container.appendChild( div ); + + jQuery.extend( support, { + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelMarginRight: function() { + computeStyleTests(); + return pixelMarginRightVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + style = elem.style; + + computed = computed || getStyles( elem ); + + // Support: IE <=9 only + // getPropertyValue is only needed for .css('filter') (#12537) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i, + val = 0; + + // If we already have the right measurement, avoid augmentation + if ( extra === ( isBorderBox ? "border" : "content" ) ) { + i = 4; + + // Otherwise initialize for horizontal or vertical properties + } else { + i = name === "width" ? 1 : 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var val, + valueIsBorderBox = true, + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + if ( elem.getClientRects().length ) { + val = elem.getBoundingClientRect()[ name ]; + } + + // Some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test( val ) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || + ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + style[ name ] = value; + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || + ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + } ) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = extra && getStyles( elem ), + subtract = extra && augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ); + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ name ] = value; + value = jQuery.css( elem, name ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( jQuery.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, timerId, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function raf() { + if ( timerId ) { + window.requestAnimationFrame( raf ); + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = jQuery.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 13 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( jQuery.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + if ( percent < 1 && length ) { + return remaining; + } else { + deferred.resolveWith( elem, [ animation ] ); + return false; + } + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( jQuery.isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + jQuery.proxy( result.stop, result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + // attach callbacks from options + return animation.progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + // Go to the end state if fx are off or if document is hidden + if ( jQuery.fx.off || document.hidden ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Checks the timer has not already been removed + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + if ( timer() ) { + jQuery.fx.start(); + } else { + jQuery.timers.pop(); + } +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( !timerId ) { + timerId = window.requestAnimationFrame ? + window.requestAnimationFrame( raf ) : + window.setInterval( jQuery.fx.tick, jQuery.fx.interval ); + } +}; + +jQuery.fx.stop = function() { + if ( window.cancelAnimationFrame ) { + window.cancelAnimationFrame( timerId ); + } else { + window.clearInterval( timerId ); + } + + timerId = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + jQuery.nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( type === "string" ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = value.match( rnothtmlwhite ) || []; + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, isFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +} ); + +jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +} ); + + + + +support.focusin = "onfocusin" in window; + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = jQuery.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( jQuery.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = jQuery.isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( jQuery.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 13 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available, append data to url + if ( s.data ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( jQuery.isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "' /* 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 = ''; + 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('
    '+ + '
    '+ + '
    '+ + '
    '+ + '
    '+ + '
    '+ + '
    '); + } + + // 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='";h.append(I);if(L=="controls")h.append('
    '+'
    '+'
    '+'
    '+'
    '+'
    '+"
    ")}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:

    +
      + +
    1. getTestMessage() ?> +

      getHelpHtml() ?>

      +
    2. + +
    + + + +

    Recommendations

    +

    + Additionally, toTo enhance your Symfony experience, + it’s recommended that you fix the following: +

    +
      + +
    1. getTestMessage() ?> +

      getHelpHtml() ?>

      +
    2. + +
    + + + 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: