www.dematic.com
Open in
urlscan Pro
2a02:26f0:1700:5::5f65:1b49
Public Scan
Submitted URL: http://dematic.com/
Effective URL: https://www.dematic.com/en/
Submission Tags: tranco_l324
Submission: On November 20 via api from DE — Scanned from NL
Effective URL: https://www.dematic.com/en/
Submission Tags: tranco_l324
Submission: On November 20 via api from DE — Scanned from NL
Form analysis
1 forms found in the DOMPOST /en/
<form method="post" action="/en/" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="">
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="Qiz7t2skYW6ImRMypjgOZHQlROBxTaAAfSg09dLJXnWxBen2Rff2sOvAFYH8NWa5UXjk7BPQFUXR5eCJl0nTeGVq3UBiNT0SZShxA8PkVUmqXmvZdKciQUFkKlZ/u5qLNray/LjDA4k1tx5y07xN7ndD5yE=">
</div>
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
<script src="/WebResource.axd?d=pynGkmcFUV13He1Qd6_TZPZ5z0hUByY1h8iX7RYZZlh4Tk1Cto3KE5oULSFadgdWA0QBIA2&t=637692338768990787" type="text/javascript"></script>
<script src="/ScriptResource.axd?d=NJmAwtEo3Ipnlaxl6CMhvhgc0-tjro6gKxLH8FCbU4rLDuaowI80sTkKiqjW6Yh7PwAa99rpiTtOkWziFE8sLLbtXz_i0CJ6fYIUR2xXBrl5wd0VtO6irFM4m5tlY39l-ul8mChQ5HgaTabxnG1T-6UCCww1&t=127f3acd" type="text/javascript"></script>
<script src="/ScriptResource.axd?d=dwY9oWetJoJoVpgL6Zq8OPhCH5FvqK64L_AH5BGjcjCsTURC3ASj4mYgGJFGbkOnxU4p2AgpbJ2cSBG6zRw61YR9sWKxU5BdSlJdEC2fW7ZrOazNpcY0wNrvnAx2FZtpxoH0INNBylxHRRxzNUvPkDytUL01&t=127f3acd" type="text/javascript"></script>
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="FD97A3D4">
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="007zUAnHW1eRqoQAE4c+utsQSivpXajxFI0Ei6olmOxLGb50guepcfNxaDNelKSTTWmzPSpkc8o4s8tPm3ExfY1DAsskq43lBQKzciIi0yP3M/2iOnUW79picJ/lt77DNwMmVw==">
</div>
<script type="text/javascript">
//<![CDATA[
Sys.WebForms.PageRequestManager._initialize('sm', 'form1', [], [], [], 90, '');
//]]>
</script>
<!--modal-->
<!--navigation-->
<div class="navbar-fixed-top" style="background-color: #dedede!important; z-index: 100;">
<div class="container-fluid nopad">
<div style="border-top: #fff solid 1px">
<div class="mainbar">
<div class="navbar pull-right">
<ul class="navbar-nav">
<li class="nav-item hidden-xs ">
<a href="https://blog.dematic.com/en-gb/">Blog</a>
</li>
<li class="nav-item hidden-xs dropdown">
<a class="dropdown-toggle" href="#" id="dropdown1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Downloads & Resources</a>
<div class="dropdown-menu" aria-labelledby="dropdown1">
<a class="topdroplink " href="/en/downloads-and-resources/brochures">Brochures</a>
<a class="topdroplink " href="/en/downloads-and-resources/case-studies">Case Studies</a>
<a class="topdroplink " href="/en/downloads-and-resources/white-papers">eBooks & White Papers</a>
<a class="topdroplink " href="/en/downloads-and-resources/video">Video</a>
</div>
</li>
<li class="nav-item hidden-xs dropdown">
<a class="dropdown-toggle" href="#" id="dropdown2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">News & Events</a>
<div class="dropdown-menu" aria-labelledby="dropdown2">
<a class="topdroplink " href="/en/news-and-events/dematic in the news">Dematic in the News</a>
<a class="topdroplink " href="/en/news-and-events/events">Events</a>
<a class="topdroplink " href="/en/news-and-events/press-releases">Press Releases</a>
<a class="topdroplink " href="/en/news-and-events/events/webinars">Webinars</a>
</div>
</li>
<li class="nav-item hidden-xs ">
<a href="/en/about/careers">Careers</a>
</li>
<li class="nav-item hidden-xs ">
<a href="/en/contact">Contact Us</a>
</li>
</ul>
</div>
</div>
<div class="supportbar curse">
<a href="/en/services-and-support/customer-support/technical-support" target="" style="color: #fff; font-size: 12px">
<i class="ti-headphone-alt"> </i> Support
</a>
</div>
<div class="searchbar curse">
<a data-toggle="modal" data-target="#search" class="topitem" style="color: #fff">
<i class="ti-search"></i>
</a>
</div>
<div style="clear: both"></div>
</div>
<div class="nav-container nopad" style="min-height: 45px;">
<div class="whitespace hidden-xs hidden-sm">
</div>
<nav>
<div class="nav-bar">
<div class="module left">
<a href="/en">
<img alt="Dematic" class="logod" src="/Content/img/logo.svg">
</a>
<div class="tagspace hidden-xs hidden-sm">
<a href="/en" style="color: #000">
<span style="color:#fdba30">Power</span> the Future of Commerce
</a>
</div>
</div>
<div class="module widget-handle mobile-toggle right visible-sm visible-xs" style="z-index: 1!important">
<span style="font-size: 16px; vertical-align: 6px; padding-right: 12px; color: #666;">MENU</span><i class="ti-menu"></i>
</div>
<div class="module-group right">
<div class="module left modulepad">
<ul class="menu">
<li class="has-dropdown mainitempadding">
<a>Industries</a>
<ul class="mega-menu feature" style="padding-bottom: 0!important">
<li class="featureleft hidden-xs hidden-sm hidden-md" style="background-color: #7b9eb8;">
<div style="margin: 0; padding: 20px 20px 35px 25px; text-align: left">
<h4 class="mb8" style="color: #ffffff;">Solutions to Compete and Win in Your Market</h4>
<p class="mb8" style="color: #ffffff;">Dematic is optimising your supply chain with technologies that are transforming your industry.</p>
<div class="goto mb0 mt0" style="text-align: ">
<a class="gotolink gotowhite" href="/en/industries/industries-overview">
Learn <span class="lastword">More <i class="ti-arrow-circle-right"></i></span>
</a>
</div>
</div>
</li>
<li>
<ul>
<li><a href="/en/industries/industries-overview" class="title">Industries Overview</a></li>
<li><a href="/en/industries/industries-overview/apparel">Apparel</a></li>
<li><a href="/en/industries/industries-overview/durable-manufacturing">Durable Manufacturing</a></li>
<li><a href="/en/industries/industries-overview/e-commerce">E-Commerce</a></li>
<li><a href="/en/industries/industries-overview/food-and-beverage">Food & Beverage</a></li>
<li><a href="/en/industries/industries-overview/general-merchandise-retail">Retail Order Fulfillment - General Merchandise Solutions </a></li>
<li><a href="/en/industries/industries-overview/grocery">Grocery</a></li>
<li><a href="/en/industries/industries-overview/healthcare">Healthcare</a></li>
<li><a href="/en/industries/industries-overview/non-durable-manufacturing">Non-Durable Manufacturing</a></li>
<li><a href="/en/industries/industries-overview/parcel">Parcel</a></li>
<li><a href="/en/industries/industries-overview/3pl">Third-Party Logistics</a></li>
<li><a href="/en/industries/industries-overview/wholesales-b2b">Wholesales/B2B</a></li>
</ul>
</li>
</ul>
</li>
<li class="spacer hidden-xs hidden-sm"> </li>
<li class="has-dropdown mainitempadding">
<a>Solutions</a>
<ul class="mega-menu feature" style="padding-bottom: 0!important">
<li class="featureleft hidden-xs hidden-sm hidden-md" style="background-color: #7b9eb8;">
<div style="margin: 0; padding: 20px 20px 35px 25px; text-align: left">
<h4 class="mb8" style="color: #ffffff;">Solutions Designed for the Functional Areas of Your Facility</h4>
<p class="mb8" style="color: #ffffff;">Dematic solutions optimise material and information flow within factories, warehouses, and distribution centres to ensure operational success.</p>
<div class="goto mb0 mt0" style="text-align: ">
<a class="gotolink gotowhite" href="/en/solutions/solutions-by-function">
Learn <span class="lastword">More <i class="ti-arrow-circle-right"></i></span>
</a>
</div>
</div>
</li>
<li>
<ul>
<li><a href="/en/solutions/solutions-by-system" class="title">Solutions by System</a></li>
<li><a href="/en/solutions/solutions-by-system/microfulfillment">Micro-Fulfilment</a></li>
<li><a href="/en/solutions/solutions-by-system/merchandise-returns">Merchandise Returns</a></li>
<li><a href="/en/solutions/solutions-by-system/pouch">Pouch</a></li>
</ul>
<ul>
<li><a href="/en/solutions/solutions-by-function" class="title">Solutions Overview</a></li>
<li><a href="/en/solutions/solutions-by-function/inbound-handling">Inbound Handling</a></li>
<li><a href="/en/solutions/solutions-by-function/convey-and-transport">Convey and Transport</a></li>
<li><a href="/en/solutions/solutions-by-function/storage-and-buffering">Storage and Buffering</a></li>
<li><a href="/en/solutions/solutions-by-function/case-picking">Case Picking</a></li>
<li><a href="/en/solutions/solutions-by-function/piece-picking">Piece Picking</a></li>
<li><a href="/en/solutions/solutions-by-function/outbound-handling">Outbound Handling</a></li>
</ul>
</li>
</ul>
</li>
<li class="spacer hidden-xs hidden-sm"> </li>
<li class="has-dropdown mainitempadding">
<a>Products</a>
<ul class="mega-menu feature" style="padding-bottom: 0!important">
<li class="featureleft hidden-xs hidden-sm hidden-md" style="background-color: #7b9eb8;">
<div style="margin: 0; padding: 20px 20px 35px 25px; text-align: left">
<h4 class="mb8" style="color: #ffffff;">The Best Selection for the Best Solution</h4>
<p class="mb8" style="color: #ffffff;">Dematic has a robust selection of quality product options to deliver the ideal solution for your facility.</p>
<div class="goto mb0 mt0" style="text-align: ">
<a class="gotolink gotowhite" href="/en/products/products-overview">
Learn <span class="lastword">More <i class="ti-arrow-circle-right"></i></span>
</a>
</div>
</div>
</li>
<li>
<ul>
<li><a href="/en/products/products-overview" class="title">Products Overview</a></li>
<li><a href="/en/products/products-overview/agv-systems">AGV Systems</a></li>
<li><a href="/en/products/products-overview/conveyor-systems">Conveyor Systems</a></li>
<li><a href="/en/products/products-overview/overhead-systems">Overhead Systems</a></li>
<li><a href="/en/products/products-overview/palletising-systems">Palletising and Depalletising</a></li>
<li><a href="/en/products/products-overview/voice-and-lights">Voice and Lights</a></li>
<li><a href="/en/products/products-overview/robotic-systems">Robotic Systems</a></li>
<li><a href="/en/products/products-overview/sortation-systems">Sortation Systems</a></li>
<li><a href="/en/products/products-overview/storage-systems">Storage Systems</a></li>
<li><a href="/en/products/products-overview/workstation-systems">Workstation Systems</a></li>
</ul>
</li>
</ul>
</li>
<li class="spacer hidden-xs hidden-sm"> </li>
<li class="has-dropdown mainitempadding">
<a>Software</a>
<ul class="mega-menu feature" style="padding-bottom: 0!important">
<li class="featureleft hidden-xs hidden-sm hidden-md" style="background-color: #7b9eb8;">
<div style="margin: 0; padding: 20px 20px 35px 25px; text-align: left">
<h4 class="mb8" style="color: #ffffff;">Dematic iQ<sup>®<sup></sup></sup></h4>
<p class="mb8" style="color: #ffffff;">Dematic iQ software delivers intelligent adaptability by connecting warehouse operations, maintenance, and analytics systems into one comprehensive ecosystem. </p>
<div class="goto mb0 mt0" style="text-align: ">
<a class="gotolink gotowhite" href="/en/software/software-overview">
Learn <span class="lastword">More <i class="ti-arrow-circle-right"></i></span>
</a>
</div>
</div>
</li>
<li>
<ul>
<li><a href="/en/software/software-overview" class="title">Dematic iQ Overview</a></li>
<li><a href="/en/software/software-overview/dematic-insights">Dematic InSights</a></li>
<li><a href="/en/software/software-overview/dematic-iq-optimise">Dematic iQ Optimise</a></li>
<li><a href="/en/software/software-overview/dematic-iq-virtual">Dematic iQ Virtual</a></li>
<li><a href="/en/software/software-overview/dematic-iq-workflow">Dematic iQ Workflow</a></li>
<li><a href="/en/software/software-overview/dematic-sprocket">Dematic Sprocket</a></li>
<li><a href="/en/software/software-overview/matflo">Matflo</a></li>
</ul>
<ul>
<li><a href="/en/software/sap-solutions" class="title">SAP Solutions</a></li>
<li><a href="/en/software/sap-solutions/sap-ewm">SAP EWM</a></li>
<li><a href="/en/software/sap-solutions/sap-les">SAP LES</a></li>
<li><a href="/en/software/sap-solutions/dematic-subsuite">Dematic SubSuite 2.0</a></li>
<li><a href="/en/software/sap-solutions/sap-tm">SAP TM</a></li>
<li><a href="/en/software/sap-solutions/project-methodology">Project Methodology</a></li>
<li><a href="/en/software/sap-solutions/benefits">Your Benefit</a></li>
</ul>
<ul>
<li><a href="/en/software/legacy-systems" class="title">Legacy Systems</a></li>
<li><a href="/en/software/legacy-systems/ewms">E'wms® Warehouse Management System</a></li>
</ul>
</li>
</ul>
</li>
<li class="spacer hidden-xs hidden-sm"> </li>
<li class="has-dropdown mainitempadding">
<a>Services & Support</a>
<ul class="mega-menu feature" style="padding-bottom: 0!important">
<li class="featureleft hidden-xs hidden-sm hidden-md" style="background-color: #7b9eb8;">
<div style="margin: 0; padding: 20px 20px 35px 25px; text-align: left">
<h4 class="mb8" style="color: #ffffff;">Lifecycle Support</h4>
<p class="mb8" style="color: #ffffff;">Dematic works with you to ensure the best possible performance through the lifecycle of your system.</p>
<div class="goto mb0 mt0" style="text-align: ">
<a class="gotolink gotowhite" href="/en/services-and-support/services">
Learn <span class="lastword">More <i class="ti-arrow-circle-right"></i></span>
</a>
</div>
</div>
</li>
<li>
<ul>
<li><a href="/en/services-and-support/services" class="title">Services</a></li>
<li><a href="/en/services-and-support/services/training">Consultancy & Training</a></li>
<li><a href="/en/services-and-support/services/enterprise-asset-management">Enterprise Asset Management System</a></li>
<li><a href="/en/services-and-support/services/field-service-operations">Field Service Operations</a></li>
<li><a href="/en/services-and-support/services/modernization">Modernisations & Upgrades</a></li>
<li><a href="/en/services-and-support/services/remote-services">Remote Services</a></li>
<li><a href="/en/services-and-support/services/resident-services">Resident Services</a></li>
<li><a href="/en/services-and-support/services/warranty-management">Warranty Management for Europe/EMEA</a></li>
</ul>
<ul>
<li><a href="/en/services-and-support/customer-support" class="title">Customer Support</a></li>
<li><a href="/en/services-and-support/customer-support/spare-parts">Spare Parts</a></li>
<li><a href="/en/services-and-support/customer-support/technical-support">Technical Support</a></li>
</ul>
</li>
</ul>
</li>
<li class="spacer hidden-xs hidden-sm"> </li>
<li class="has-dropdown mainitempadding">
<a>About</a>
<ul class="mega-menu feature" style="padding-bottom: 0!important">
<li class="featureleft hidden-xs hidden-sm hidden-md" style="background-color: #7b9eb8;">
<div style="margin: 0; padding: 20px 20px 35px 25px; text-align: left">
<h4 class="mb8" style="color: #ffffff;">We Optimize Your Supply Chain</h4>
<p class="mb8" style="color: #ffffff;">Dematic is a leading supplier of integrated automated technology, software and services to optimise the supply chain.</p>
<div class="goto mb0 mt0" style="text-align: ">
<a class="gotolink gotowhite" href="/en/about/about-dematic">
Learn <span class="lastword">More <i class="ti-arrow-circle-right"></i></span>
</a>
</div>
</div>
</li>
<li>
<ul>
<li><a href="/en/about/about-dematic" class="title">About Dematic</a></li>
<li><a href="/en/about/about-dematic/200-years">Dematic Turns 200</a></li>
<li><a href="/en/about/about-dematic/innovation">Innovation</a></li>
<li><a href="/en/about/about-dematic/the-kion-group">The KION Group</a></li>
<li><a href="/en/about/about-dematic/solutions-expertise">Solutions Expertise</a></li>
<li><a href="/en/about/about-dematic/leadership">Leadership</a></li>
<li><a href="/en/about/about-dematic/iso-9001-certified">ISO 9001 Certified</a></li>
<li><a href="/en/about/about-dematic/compliance">Compliance</a></li>
<li><a href="/en/about/about-dematic/suppliers">Suppliers</a></li>
</ul>
<ul>
<li><a href="/en/about/careers" class="title">Careers at Dematic</a></li>
<li><a href="/en/about/careers/what-we-offer">Life at Dematic</a></li>
<li><a href="/en/about/careers/open-positions">Open Positions</a></li>
<li><a href="/en/about/careers/videos">Our Stories </a></li>
</ul>
</li>
</ul>
</li>
<li class="spacer hidden-xs hidden-sm"> </li>
<li class="nav-item top-nav-mobile ">
<a href="https://blog.dematic.com/en-gb/">Blog</a>
</li>
<li class="nav-item top-nav-mobile has-dropdown">
<a class="dropdown-toggle" href="#" id="dropdown-mobile-1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Downloads & Resources</a>
<ul class="mega-menu feature" aria-labelledby="dropdown-mobile-1" style="padding-bottom: 0!important">
<li>
<a class="topdroplink " href="/en/downloads-and-resources/brochures">Brochures</a>
</li>
<li>
<a class="topdroplink " href="/en/downloads-and-resources/case-studies">Case Studies</a>
</li>
<li>
<a class="topdroplink " href="/en/downloads-and-resources/white-papers">eBooks & White Papers</a>
</li>
<li>
<a class="topdroplink " href="/en/downloads-and-resources/video">Video</a>
</li>
</ul>
</li>
<li class="nav-item top-nav-mobile has-dropdown">
<a class="dropdown-toggle" href="#" id="dropdown-mobile-2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">News & Events</a>
<ul class="mega-menu feature" aria-labelledby="dropdown-mobile-2" style="padding-bottom: 0!important">
<li>
<a class="topdroplink " href="/en/news-and-events/dematic in the news">Dematic in the News</a>
</li>
<li>
<a class="topdroplink " href="/en/news-and-events/events">Events</a>
</li>
<li>
<a class="topdroplink " href="/en/news-and-events/press-releases">Press Releases</a>
</li>
<li>
<a class="topdroplink " href="/en/news-and-events/events/webinars">Webinars</a>
</li>
</ul>
</li>
<li class="nav-item top-nav-mobile ">
<a href="/en/about/careers">Careers</a>
</li>
<li class="nav-item top-nav-mobile ">
<a href="/en/contact">Contact Us</a>
</li>
</ul>
</div>
<div class="module worldwide right">
<ul class="menu">
<li class="has-dropdown mainitempadding">
<a href="#">
<i class="ti-world" style="font-weight: bold;"></i> Worldwide
</a>
<ul class="mega-menu feature mr-m-120">
<li>
<ul>
<li>
<span class="region">Asia Pacific</span>
</li>
<li>
<span class="country">Australia - </span>
<a href="/en-au" class="language">English</a>
</li>
<li>
<span class="country">India - </span>
<a href="/en-au" class="language">English</a>
</li>
<li>
<span class="country">Indonesia - </span>
<a href="/en-au" class="language">English</a>
</li>
<li>
<span class="country">Korea - </span>
<a href="/en-au" class="language">English</a>
</li>
<li>
<span class="country">Malaysia - </span>
<a href="/en-au" class="language">English</a>
</li>
<li>
<span class="country">New Zealand - </span>
<a href="/en-au" class="language">English</a>
</li>
<li>
<span class="country">Philipines - </span>
<a href="/en-au" class="language">English</a>
</li>
<li>
<span class="country">Singapore - </span>
<a href="/en-au" class="language">English</a>
</li>
<li>
<span class="country">Taiwan - </span>
<a href="/en-au" class="language">English</a>
</li>
<li>
<span class="country">Thailand - </span>
<a href="/en-au" class="language">English</a>
</li>
<li>
<span class="country">Vietnam - </span>
<a href="/en-au" class="language">English</a>
</li>
<li class="nav-padding">
<span class="region">China</span>
</li>
<li>
<span class="country">China - </span>
<a href="/zh-cn" class="language">中国版</a>
</li>
</ul>
</li>
<li>
<ul>
<li>
<span class="region">Europe/EMEA</span>
</li>
<li>
<span class="country">Austria - </span>
<a href="/de-at" class="language">Deutsch</a>
</li>
<li>
<span class="country">Belgium - </span>
<a href="/fr-be" class="language">Français</a>
<a href="/nl-be" class="language">Nederlands</a>
</li>
<li>
<span class="country">Denmark - </span>
<a href="/en" class="language">English</a>
</li>
<li>
<span class="country">Estonia - </span>
<a href="/en" class="language">English</a>
</li>
<li>
<span class="country">Finland - </span>
<a href="/en" class="language">English</a>
</li>
<li>
<span class="country">France - </span>
<a href="/fr-fr" class="language">Français</a>
</li>
<li>
<span class="country">Germany - </span>
<a href="/de-de" class="language">Deutsch</a>
</li>
<li>
<span class="country">Ireland - </span>
<a href="/en" class="language">English</a>
</li>
<li>
<span class="country">Italy - </span>
<a href="/it-it" class="language">Italiano</a>
</li>
<li>
<span class="country">Latvia - </span>
<a href="/en" class="language">English</a>
</li>
<li>
<span class="country">Lithuania - </span>
<a href="/en" class="language">English</a>
</li>
<li>
<span class="country">Netherlands - </span>
<a href="/nl" class="language">Nederlands</a>
</li>
<li>
<span class="country">Norway - </span>
<a href="/en" class="language">English</a>
</li>
<li>
<span class="country">Poland - </span>
<a href="/pl-pl" class="language">Polski</a>
</li>
<li>
<span class="country">Portugal - </span>
<a href="/pt-pt" class="language">Português</a>
</li>
<li>
<span class="country">Russia - </span>
<a href="/ru-ru" class="language">Русский</a>
</li>
<li>
<span class="country">South Africa - </span>
<a href="/en" class="language">English</a>
</li>
<li>
<span class="country">Spain - </span>
<a href="/es-es" class="language">Español</a>
</li>
<li>
<span class="country">Sweden - </span>
<a href="/en" class="language">English</a>
</li>
<li>
<span class="country">Switzerland - </span>
<a href="/de-de" class="language">Deutsch</a>
</li>
<li>
<span class="country">United Kingdom - </span>
<a href="/en-gb" class="language">English UK</a>
</li>
</ul>
</li>
<li>
<ul>
<li>
<span class="region">Latin America</span>
</li>
<li>
<span class="country">Argentina - </span>
<a href="/es-es" class="language">Español</a>
</li>
<li>
<span class="country">Bolivia - </span>
<a href="/es-es" class="language">Español</a>
</li>
<li>
<span class="country">Brazil - </span>
<a href="/pt-br" class="language">Português</a>
</li>
<li>
<span class="country">Chile - </span>
<a href="/es-es" class="language">Español</a>
</li>
<li>
<span class="country">Colombia - </span>
<a href="/es-es" class="language">Español</a>
</li>
<li>
<span class="country">Costa Rica - </span>
<a href="/es-es" class="language">Español</a>
</li>
<li>
<span class="country">Ecuador - </span>
<a href="/es-es" class="language">Español</a>
</li>
<li>
<span class="country">Panama - </span>
<a href="/es-es" class="language">Español</a>
</li>
<li>
<span class="country">Paraguay - </span>
<a href="/es-es" class="language">Español</a>
</li>
<li>
<span class="country">Peru - </span>
<a href="/es-es" class="language">Español</a>
</li>
<li>
<span class="country">Uruguay - </span>
<a href="/es-es" class="language">Español</a>
</li>
<li class="nav-padding">
<span class="region">North America</span>
</li>
<li>
<span class="country">Canada - </span>
<a href="/en-us" class="language">English</a>
<a href="/fr-ca" class="language">Français</a>
</li>
<li>
<span class="country">Mexico - </span>
<a href="/es-mx" class="language">Español</a>
</li>
<li>
<span class="country">United States - </span>
<a href="/en-us" class="language">English</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="spacer hidden-xs"> </li>
</ul>
</div>
</div>
</div>
</nav>
</div>
</div>
</div>
<style>
.featureleft {
z-index: 150 !important;
}
.menu>li>ul>li>ul {
z-index: 150 !important;
}
a:hover {
opacity: 0.9
}
.gotolink {
font-size: 12px !important;
line-height: 1.2em;
}
.icon-sm {
vertical-align: -2px;
padding-left: 8px
}
.learn {
margin-right: 8px;
border-color: #ffffff;
background-color: transparent !important;
}
#cf4a {
position: relative;
height: 300px;
}
.bigblock {
height: 300px;
padding-left: 1px;
padding-right: 1px;
margin-bottom: 2px;
}
.smallblock {
height: 150px;
padding-left: 1px;
padding-right: 1px;
margin-bottom: 2px;
position: relative
}
.smallblock img {
background-size: cover;
object-fit: cover;
width: 100%;
height: 100%;
}
.f3 {
background-size: cover;
object-fit: cover;
width: 100%;
height: 100%;
}
.bigblock::after {
display: block;
position: relative;
background: linear-gradient(to left, transparent 0%, rgba(0, 0, 0, 1));
margin-top: -300px;
height: 300px;
width: 100%;
content: '';
z-index: 0;
}
.smallblock::after {
display: block;
position: relative;
background: linear-gradient(to left, transparent 20%, rgba(0, 0, 0, 0.8));
margin-top: -150px;
height: 150px;
width: 100%;
content: '';
z-index: 0;
}
.tbox {
position: absolute;
left: 20px;
bottom: 15px;
z-index: 1;
max-width: 70%
}
.tbox h1,
.tbox h4 {
color: #fff;
margin-bottom: 6px
}
.tbox h4 {
font-size: 18px;
text-shadow: 2px 2px 7px #000000;
}
.bbox {
position: absolute;
left: 20px;
bottom: 25px;
z-index: 1;
max-width: 90%
}
.bbox h1,
.bbox h2,
.bbox h4,
.tbox h4 {
color: #fff
}
.bbox .lead {
font-size: 16px
}
.bbox h2 {
font-size: 22px;
margin-bottom: 0px
}
.supper {
font-size: 14px;
vertical-align: 4px
}
@media only screen and (min-width : 576px) {
.gotolink {
font-size: 15px !important;
line-height: 1.2em;
}
.tbox {
position: absolute;
left: 40px;
bottom: 30px;
max-width: 70%
}
.tbox h4 {
font-size: 24px
}
.bbox {
position: absolute;
left: 40px;
bottom: 40px;
max-width: 70%
}
#cf4a {
height: 408px;
}
.bbox h1 {
font-size: 50px
}
.bbox h2 {
font-size: 30px
}
.bigblock {
height: 408px
}
.bigblock::after {
margin-top: -408px;
height: 408px;
}
.smallblock {
height: 200px;
}
.smallblock::after {
margin-top: -200px;
height: 200px;
}
.bbox .lead {
font-size: 18px
}
.supper {
font-size: 18px;
vertical-align: 14px
}
}
@media only screen and (min-width : 768px) and (max-width : 992px) {
.bbox {
position: absolute;
left: 40px;
bottom: 40px;
max-width: 70%
}
.smallblock {
height: 170px;
}
.smallblock::after {
margin-top: -170px;
height: 170px;
}
}
@media only screen and (min-width : 993px) {
.bbox {
max-width: 70%
}
#cf4a {
height: 400px;
}
.bigblock {
height: 400px;
}
.bigblock::after {
margin-top: -400px;
height: 400px;
}
.bbox .lead {
font-size: 20px
}
}
@media only screen and (min-width : 1200px) {
.tbox {
max-width: 70%
}
.bbox {
position: absolute;
left: 40px;
bottom: 60px;
z-index: 2;
max-width: 70%
}
.bbox h1 {
font-size: 60px
}
#cf4a {
height: 444px;
}
.bigblock {
height: 444px;
}
.bigblock::after {
margin-top: -444px;
height: 444px;
}
.smallblock {
height: 240px;
}
.smallblock::after {
margin-top: -240px;
height: 240px;
}
}
@media only screen and (min-width : 1600px) {
.bbox {
position: absolute;
left: 80px;
bottom: 120px;
z-index: 2;
max-width: 70%
}
#cf4a {
height: 604px;
}
.bigblock {
height: 604px;
}
.bigblock::after {
margin-top: -604px;
height: 604px;
}
.smallblock {
height: 200px;
}
.smallblock::after {
margin-top: -200px;
height: 200px;
}
.bbox .lead {
font-size: 24px
}
}
@-webkit-keyframes cf4FadeInOut {
0% {
opacity: 1;
}
17% {
opacity: 1;
}
25% {
opacity: 0;
}
92% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@-moz-keyframes cf4FadeInOut {
0% {
opacity: 1;
}
17% {
opacity: 1;
}
25% {
opacity: 0;
}
92% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@-o-keyframes cf4FadeInOut {
0% {
opacity: 1;
}
17% {
opacity: 1;
}
25% {
opacity: 0;
}
92% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes cf4FadeInOut {
0% {
opacity: 1;
}
17% {
opacity: 1;
}
25% {
opacity: 0;
}
92% {
opacity: 0;
}
100% {
opacity: 1;
}
}
#cf4a img {
position: absolute;
left: 0;
object-fit: cover;
width: 100%;
height: 100%
}
#cf4a img {
-webkit-animation-name: cf4FadeInOut;
-webkit-animation-timing-function: ease-in-out;
-webkit-animation-iteration-count: infinite;
-webkit-animation-duration: 24s;
-moz-animation-name: cf4FadeInOut;
-moz-animation-timing-function: ease-in-out;
-moz-animation-iteration-count: infinite;
-moz-animation-duration: 24s;
-o-animation-name: cf4FadeInOut;
-o-animation-timing-function: ease-in-out;
-o-animation-iteration-count: infinite;
-o-animation-duration: 24s;
animation-name: cf4FadeInOut;
animation-timing-function: ease-in-out;
animation-iteration-count: infinite;
animation-duration: 24s;
}
#cf4a img:nth-of-type(1) {
-webkit-animation-delay: 21s;
-moz-animation-delay: 21s;
-o-animation-delay: 21s;
animation-delay: 21s;
}
#cf4a img:nth-of-type(2) {
-webkit-animation-delay: 18s;
-moz-animation-delay: 18s;
-o-animation-delay: 18s;
animation-delay: 18s;
}
#cf4a img:nth-of-type(3) {
-webkit-animation-delay: 15s;
-moz-animation-delay: 15s;
-o-animation-delay: 15s;
animation-delay: 15s;
}
#cf4a img:nth-of-type(4) {
-webkit-animation-delay: 12s;
-moz-animation-delay: 12s;
-o-animation-delay: 12s;
animation-delay: 12s;
}
#cf4a img:nth-of-type(5) {
-webkit-animation-delay: 9s;
-moz-animation-delay: 9s;
-o-animation-delay: 9s;
animation-delay: 9s;
}
#cf4a img:nth-of-type(6) {
-webkit-animation-delay: 6s;
-moz-animation-delay: 6s;
-o-animation-delay: 6s;
animation-delay: 6s;
}
#cf4a img:nth-of-type(7) {
-webkit-animation-delay: 3s;
-moz-animation-delay: 3s;
-o-animation-delay: 3s;
animation-delay: 3s;
}
#cf4a img:nth-of-type(8) {
-webkit-animation-delay: 0;
-moz-animation-delay: 0;
-o-animation-delay: 0;
animation-delay: 0;
}
@media (min-width: 1200px) and (max-width: 1599px) {
#hero .hidden-lg {
display: none !important;
}
}
#hero .visible-xl-block,
#hero .visible-xl-inline,
#hero .visible-xl-inline-block,
#hero .visible-xl {
display: none !important;
}
@media (min-width: 1600px) {
#hero.container {
width: 1570px;
}
#hero .col-xl-1,
#hero .col-xl-2,
#hero .col-xl-3,
#hero .col-xl-4,
#hero .col-xl-5,
#hero .col-xl-6,
#hero .col-xl-7,
#hero .col-xl-8,
#hero .col-xl-9,
#hero .col-xl-10,
#hero .col-xl-11,
#hero .col-xl-12 {
float: left;
}
#hero .col-xl-12 {
width: 100%;
}
#hero .col-xl-11 {
width: 91.66666667%;
}
#hero .col-xl-10 {
width: 83.33333333%;
}
#hero .col-xl-9 {
width: 75%;
}
#hero .col-xl-8 {
width: 66.66666667%;
}
#hero.col-xl-7 {
width: 58.33333333%;
}
#hero .col-xl-6 {
width: 50%;
}
#hero .col-xl-5 {
width: 41.66666667%;
}
#hero .col-xl-4 {
width: 33.33333333%;
}
#hero .col-xl-3 {
width: 25%;
}
#hero .col-xl-2 {
width: 16.66666667%;
}
#hero .col-xl-1 {
width: 8.33333333%;
}
#hero .col-xl-pull-12 {
right: 100%;
}
#hero .col-xl-pull-11 {
right: 91.66666667%;
}
.col-xl-pull-10 {
right: 83.33333333%;
}
#hero .col-xl-pull-9 {
right: 75%;
}
#hero .col-xl-pull-8 {
right: 66.66666667%;
}
#hero .col-xl-pull-7 {
right: 58.33333333%;
}
#hero .col-xl-pull-6 {
right: 50%;
}
#hero .col-xl-pull-5 {
right: 41.66666667%;
}
#hero .col-xl-pull-4 {
right: 33.33333333%;
}
#hero .col-xl-pull-3 {
right: 25%;
}
#hero .col-xl-pull-2 {
right: 16.66666667%;
}
#hero .col-xl-pull-1 {
right: 8.33333333%;
}
#hero .col-xl-pull-0 {
right: auto;
}
#hero .col-xl-push-12 {
left: 100%;
}
#hero .col-xl-push-11 {
left: 91.66666667%;
}
#hero .col-xl-push-10 {
left: 83.33333333%;
}
#hero .col-xl-push-9 {
left: 75%;
}
#hero .col-xl-push-8 {
left: 66.66666667%;
}
#hero .col-xl-push-7 {
left: 58.33333333%;
}
#hero .col-xl-push-6 {
left: 50%;
}
#hero .col-xl-push-5 {
left: 41.66666667%;
}
#hero .col-xl-push-4 {
left: 33.33333333%;
}
#hero .col-xl-push-3 {
left: 25%;
}
#hero .col-xl-push-2 {
left: 16.66666667%;
}
#hero .col-xl-push-1 {
left: 8.33333333%;
}
#hero .col-xl-push-0 {
left: auto;
}
#hero .col-xl-offset-12 {
margin-left: 100%;
}
#hero .col-xl-offset-11 {
margin-left: 91.66666667%;
}
#hero .col-xl-offset-10 {
margin-left: 83.33333333%;
}
#hero .col-xl-offset-9 {
margin-left: 75%;
}
#hero .col-xl-offset-8 {
margin-left: 66.66666667%;
}
#hero .col-xl-offset-7 {
margin-left: 58.33333333%;
}
#hero .col-xl-offset-6 {
margin-left: 50%;
}
#hero .col-xl-offset-5 {
margin-left: 41.66666667%;
}
#hero .col-xl-offset-4 {
margin-left: 33.33333333%;
}
#hero .col-xl-offset-3 {
margin-left: 25%;
}
#hero .col-xl-offset-2 {
margin-left: 16.66666667%;
}
#hero .col-xl-offset-1 {
margin-left: 8.33333333%;
}
#hero .col-xl-offset-0 {
margin-left: 0;
}
#hero .visible-xl {
display: block !important;
}
#hero table.visible-xl {
display: table;
}
#hero tr.visible-xl {
display: table-row !important;
}
#hero th.visible-xl,
td.visible-xl {
display: table-cell !important;
}
#hero .visible-xl-block {
display: block !important;
}
#hero .visible-xl-inline {
display: inline !important;
}
#hero .visible-xl-inline-block {
display: inline-block !important;
}
#hero .hidden-xl {
display: none !important;
}
}
</style>
<style>
.mhlc .mhlclogo {
max-width: 170px;
margin-bottom: 10px
}
.mhlc .mhlcbeyond {
max-width: 250px;
margin-bottom: 10px
}
.mhlc .lead {
color: #fdba32;
margin-top: 5px;
margin-bottom: 16px
}
.mhlc .tag {
color: #fdba32;
margin-bottom: 0px;
font-size: 12px
}
.f3 {
object-fit: cover;
width: auto;
height: 100%;
object-position: right center
}
@media only screen and (min-width : 576px) {
.mhlc .mhlclogo {
max-width: 200px;
margin-bottom: 10px
}
.mhlc .mhlcbeyond {
max-width: 290px;
margin-bottom: 10px
}
.mhlc h2 {
font-size: 22px
}
}
@media only screen and (min-width : 768px) and (max-width : 992px) {
.mhlc .mhlclogo {
max-width: 240px;
margin-bottom: 20px
}
.mhlc .mhlcbeyond {
max-width: 360px;
margin-bottom: 20px
}
.mhlc .lead {
color: #fdba32;
margin-top: 20px
}
.mhlc .tag {
color: #fdba32;
margin-bottom: 8px;
font-size: 12px
}
.mhlc h2 {
font-size: 22px
}
}
@media only screen and (min-width : 993px) {
.mhlc .mhlclogo {
max-width: 240px;
margin-bottom: 20px
}
.mhlc .mhlcbeyond {
max-width: 360px;
margin-bottom: 20px
}
.mhlc .lead {
color: #fdba32;
margin-top: 20px
}
.mhlc .tag {
color: #fdba32;
margin-bottom: 8px;
font-size: 16px
}
}
@media only screen and (min-width : 1200px) {
.mhlc .mhlclogo {
max-width: 280px;
margin-bottom: 20px
}
.mhlc .mhlcbeyond {
max-width: 400px;
margin-bottom: 20px
}
.mhlc .lead {
color: #fdba32;
margin-top: 20px
}
.mhlc .tag {
color: #fdba32;
margin-bottom: 16px;
font-size: 18px
}
}
@media only screen and (min-width : 1600px) {
.mhlc .mhlclogo {
max-width: 310px;
margin-bottom: 20px
}
.mhlc .mhlcbeyond {
max-width: 500px;
margin-bottom: 20px
}
.mhlc .lead {
color: #fdba32;
margin-top: 20px;
margin-bottom: 20px
}
}
</style>
<div id="hero" class="container-fluid hero2020 mhlc" style="padding: 0">
<div class="row" style="margin-left:2px; margin-right:2px">
<div class="col-xs-12 col-md-12 col-lg-12 col-xl-9">
<div class="row">
<!--block 1 static-->
<!--Block 1 rotating images-->
<a class="gotopage" href="https://www.dematic.com/industries/industries-overview/">
<div class="col-xs-12 bigblock">
<div id="cf4a">
<img id="cf4a" src="https://pages.dematic.com/dematiccom/hero/img/header_healthcare.jpg" alt="Healthcare industry">
<img id="cf4a" src="https://pages.dematic.com/dematiccom/hero/img/apparel_header.jpg" alt="Apparel industry">
<img id="cf4a" src="https://pages.dematic.com/dematiccom/hero/img/header_food_and_beverage_v2.jpg" alt="Food and beverage industry">
<img id="cf4a" src="https://pages.dematic.com/dematiccom/hero/img/header-gen-merch.jpg" alt="grocery industry">
<img id="cf4a" src="https://pages.dematic.com/dematiccom/hero/img/header_parcel.jpg" alt="Parcel industry">
<img id="cf4a" src="https://pages.dematic.com/dematiccom/hero/img/header_pureplay.jpg" alt="E-commerce industry">
<img id="cf4a" src="https://pages.dematic.com/dematiccom/hero/img/header-master.jpg?v=1" alt="Dematic logistics solutions">
</div>
<div class="bbox">
<h1>
Power the Future<br>of Commerce
</h1>
<p class="lead mb32" style="color:#fdba32">
Designed for your vertical market – Dematic builds and supports intelligent, automated solutions for manufacturing, warehouse, and distribution environments.
</p>
<p class="btn btn-filled btn-lg mb0 learn">
Learn More <i class="icon-sm ti-arrow-circle-right" style="color:#fff; font-size: 16px; vertical-align: -2px; padding-left: 8px"></i>
</p>
</div>
</div>
</a>
</div>
</div>
<div class="col-xs-12 col-md-12 col-lg-12 col-xl-3">
<div class="row">
<!--block 2-->
<a href="https://www.dematic.com/en/regions/nordics/">
<div class="col-xs-12 col-sm-4 col-md-4 col-lg-4 col-xl-12 smallblock">
<img src="/~/media/images/hero/nordics.ashx?la=en&hash=FFFDDD83E316BD17A7C1586A15027E897A19FB90" alt="Lifecycle Services">
<div class="tbox">
<h4>
Innovation In The Nordics
</h4>
<p class="gotolink mt0 mb0" style="color:#fdba32">
Learn more<i class="icon-sm ti-arrow-circle-right"></i>
</p>
</div>
</div>
</a>
<!--block 3-->
<a href="https://www.dematic.com/products/products-overview/storage-systems/autostore/">
<div class="col-xs-6 col-sm-4 col-md-4 col-lg-4 col-xl-12 smallblock">
<img src="https://dematicesource.com/dematiccom/hero/img/autostore.jpg" alt="AutoStore">
<div class="tbox">
<h4>
Big Impact<br>For Small Spaces
</h4>
<p class="gotolink mt0 mb0" style="color:#fdba32">
Learn more<br>about AutoStore<i class="icon-sm ti-arrow-circle-right"></i>
</p>
</div>
</div>
</a>
<!--block 4-->
<a href="https://www.dematic.com/solutions/solutions-by-system/microfulfillment/assessment/">
<div class="col-xs-6 col-sm-4 col-md-4 col-lg-4 col-xl-12 smallblock">
<img src="https://dematicesource.com/dematiccom/hero/img/assessment-tool.jpg" alt="Micro-Fulfillment Assessment Tool">
<div class="tbox">
<h4>
Customize Your<br>Micro-Fulfilment Solution
</h4>
<p class="gotolink mt0 mb0" style="color:#fdba32">
Assess your<br>business needs<i class="icon-sm ti-arrow-circle-right"></i>
</p>
</div>
</div>
</a>
</div>
</div>
</div>
</div>
<div class="container-fluid" style="background-color: #ededed;">
<section class="pb56 pb-xs-40 pt64 callto">
<div class="container">
<div class="row">
<div class="col-sm-4 text-center pb24">
<div class="text-center">
<div class="text-center">
<img src="/~/media/images/misc/banner list/industry icon.ashx?style=width:100px;" class="img-circle" style="width:100px;">
<h5 class="mb8 mt16" style="font-weight: 600">Industries</h5>
</div>
<p class="text mb16"> You know your market — Dematic delivers the solutions to meet your specific industry needs. </p>
</div>
<div class="goto mb0 mt0" style="text-align:center">
<a class="gotolink gotoblue " href="/en/industries/industries-overview"> <span class="lastword">Explore <i class="ti-arrow-circle-right"></i></span></a>
</div>
</div>
<div class="col-sm-4 text-center pb24">
<div class="text-center">
<div class="text-center">
<img src="/~/media/images/misc/banner list/function icon.ashx?style=width:100px;" class="img-circle" style="width:100px;">
<h5 class="mb8 mt16" style="font-weight: 600">Solutions By Industry</h5>
</div>
<p class="text mb16"> Understanding trends and providing solutions that meet your specific industry needs. </p>
</div>
<div class="goto mb0 mt0" style="text-align:center">
<a class="gotolink gotoblue " href="/en/solutions/solutions-by-function"> <span class="lastword">Explore <i class="ti-arrow-circle-right"></i></span></a>
</div>
</div>
<div class="col-sm-4 text-center pb24">
<div class="text-center">
<div class="text-center">
<img src="/~/media/images/misc/banner list/technology icon.ashx?style=width:100px;" class="img-circle" style="width:100px;">
<h5 class="mb8 mt16" style="font-weight: 600">Products</h5>
</div>
<p class="text mb16"> Products are the tools necessary to get a job <br> done — Dematic has the best selection for the<br> best solution. </p>
</div>
<div class="goto mb0 mt0" style="text-align:center">
<a class="gotolink gotoblue " href="/en/products/products-overview"> <span class="lastword">Explore <i class="ti-arrow-circle-right"></i></span></a>
</div>
</div>
</div>
</div>
</section>
</div>
<div class="container-fluid pb0 nopad" style="background-color: #fff">
<section class="mb0 pb80 pt80">
<div class="container">
<div id="carousel-7be436bff31340ee82e685bb342631ac" class="carousel slide" data-ride="carousel" data-interval="8000">
<!-- Indicators -->
<ol class="carousel-indicators">
<li data-target="carousel-7be436bff31340ee82e685bb342631ac" data-slide-to="0" class=""></li>
<li data-target="carousel-7be436bff31340ee82e685bb342631ac" data-slide-to="1" class=""></li>
<li data-target="carousel-7be436bff31340ee82e685bb342631ac" data-slide-to="2" class=""></li>
<li data-target="carousel-7be436bff31340ee82e685bb342631ac" data-slide-to="3" class=""></li>
<li data-target="carousel-7be436bff31340ee82e685bb342631ac" data-slide-to="4" class=""></li>
</ol>
<!-- Wrapper for slides -->
<div class="carousel-inner" role="listbox">
<div class="item active">
<div class="row v-align-children">
<div class="visible-xs text-right">
<img src="/~/media/images/solutions/systems/microfulfillment/sidebar-micro-1.ashx" alt="MicroFulfillment">
</div>
<div class="col-lg-6 col-md-6 col-sm-6 mb-xs-24" style="padding-left: 30px;">
<h6 class="mt16 mb8 uppercase"> Solutions for the <span style="color:#fdba30">Future</span> of Commerce: </h6>
<h3 class="mb0">Micro-Fulfilment</h3>
<h5>Rapid Order Fulfilment</h5>
<p>The Dematic Micro-Fulfilment solution is a powerful combination of intelligent automation hardware and proprietary software specifically designed to help retailers across industries address increased consumer demand for rapid
online order fulfilment.</p>
<p> </p>
<p class="mb0">
<a class="btn btn-filled btn-lg mb16 " href="/en/solutions/solutions-by-system/microfulfillment">Learn About <span class="lastword">Micro-Fulfilment <i class="icon-sm ti-arrow-circle-right" style="color:#fff; font-size: 16px; vertical-align: -2px; padding-left: 8px"></i></span></a>
<a></a>
</p>
</div>
<div class="col-lg-5 col-lg-offset-1 col-md-6 col-sm-6 text-right hidden-xs">
<img src="/~/media/images/solutions/systems/microfulfillment/sidebar-micro-1.ashx" alt="MicroFulfillment">
</div>
</div>
</div>
<div class="item ">
<div class="row v-align-children">
<div class="visible-xs text-right">
<img src="/~/media/images/assets/600-robotic-picking-2.ashx" alt="Leistungsoptimierende Software">
</div>
<div class="col-lg-6 col-md-6 col-sm-6 mb-xs-24" style="padding-left: 30px;">
<h6 class="mt16 mb8 uppercase"> Solutions That <span style="color:#fdba30">Optimise</span> Your Supply Chain: </h6>
<h3 class="mb0">Robotic Picking Systems</h3>
<h5>Lights-out Order Fulfillment</h5>
<p>As customers demand faster, more accurate order fulfilment, distribution centres that rely on manual labour are struggling to keep pace.</p>
<p>Dematic Robotic Systems replace scarce and expensive labour with automated solutions for key warehouse functions, including the last touch in the order fulfilment process. </p>
<p> </p>
<p class="mb0">
<a class="btn btn-filled btn-lg mb16 " href="/en/products/products-overview/robotic-systems">Learn <span class="lastword">More <i class="icon-sm ti-arrow-circle-right" style="color:#fff; font-size: 16px; vertical-align: -2px; padding-left: 8px"></i></span></a>
<a></a>
</p>
</div>
<div class="col-lg-5 col-lg-offset-1 col-md-6 col-sm-6 text-right hidden-xs">
<img src="/~/media/images/assets/600-robotic-picking-2.ashx" alt="Leistungsoptimierende Software">
</div>
</div>
</div>
<div class="item ">
<div class="row v-align-children">
<div class="visible-xs text-right">
<img src="/~/media/images/features/carousel/storage-systems-carousel.ashx" alt="Dematic Storage Systems">
</div>
<div class="col-lg-6 col-md-6 col-sm-6 mb-xs-24" style="padding-left: 30px;">
<h6 class="mt16 mb8 uppercase"> Solutions That <span style="color:#fdba30">Optimise</span> Your Supply Chain: </h6>
<h3 class="mb0">Dematic Storage Systems </h3>
<h5>Storage & Retrieval, Buffering, Racking & Shelving</h5>
<p>Whether it is for heavy unit loads like pallets, or smaller loads like totes and cases, storage is a fundamental requirement of every distribution centre. Storage systems provide process improvements that support gains in
productivity, space utilisation, inventory control, real-time load tracking, and reduced labour costs.</p>
<p> </p>
<p class="mb0">
<a class="btn btn-filled btn-lg mb16 " href="/en/products/products-overview/storage-systems">Learn <span class="lastword">More <i class="icon-sm ti-arrow-circle-right" style="color:#fff; font-size: 16px; vertical-align: -2px; padding-left: 8px"></i></span></a>
<a></a>
</p>
</div>
<div class="col-lg-5 col-lg-offset-1 col-md-6 col-sm-6 text-right hidden-xs">
<img src="/~/media/images/features/carousel/storage-systems-carousel.ashx" alt="Dematic Storage Systems">
</div>
</div>
</div>
<div class="item ">
<div class="row v-align-children">
<div class="visible-xs text-right">
<img src="/~/media/images/features/carousel/agvs-carousel.ashx" alt="Dematic AGVs">
</div>
<div class="col-lg-6 col-md-6 col-sm-6 mb-xs-24" style="padding-left: 30px;">
<h6 class="mt16 mb8 uppercase"> Solutions That <span style="color:#fdba30">Optimise</span> Your Supply Chain: </h6>
<h3 class="mb0">Dematic AGVs</h3>
<h5>Reliable, Autonomous Mobile Robotic Solutions</h5>
<p>Automated Guided Vehicles (AGVs) are used in a variety of industries to transport and store products and materials without human intervention. Equally at home in factories, warehouses, distribution centres, and shipping areas,
AGVs are a safe and secure way to increase process efficiency and improve business profitability. </p>
<p> </p>
<p class="mb0">
<a class="btn btn-filled btn-lg mb16 " href="/en/products/products-overview/agv-systems">Learn <span class="lastword">More <i class="icon-sm ti-arrow-circle-right" style="color:#fff; font-size: 16px; vertical-align: -2px; padding-left: 8px"></i></span></a>
<a></a>
</p>
</div>
<div class="col-lg-5 col-lg-offset-1 col-md-6 col-sm-6 text-right hidden-xs">
<img src="/~/media/images/features/carousel/agvs-carousel.ashx" alt="Dematic AGVs">
</div>
</div>
</div>
<div class="item ">
<div class="row v-align-children">
<div class="visible-xs text-right">
<img src="/~/media/images/features/carousel/voice-and-lights-carousel.ashx" alt="Dematic RapidPut Solution">
</div>
<div class="col-lg-6 col-md-6 col-sm-6 mb-xs-24" style="padding-left: 30px;">
<h6 class="mt16 mb8 uppercase"> Solutions That <span style="color:#fdba30">Optimise</span> Your Supply Chain: </h6>
<h3 class="mb0">Voice & Lights</h3>
<h5>Optimised pick and put operations</h5>
<p>Dematic voice, mobile display, and light technologies are ideal for a variety of system-directed applications, and can provide increased productivity, accuracy, and flexibility in warehousing operations.</p>
<p> </p>
<p class="mb0">
<a class="btn btn-filled btn-lg mb16 " href="/en/products/products-overview/voice-and-lights">Learn <span class="lastword">More <i class="icon-sm ti-arrow-circle-right" style="color:#fff; font-size: 16px; vertical-align: -2px; padding-left: 8px"></i></span></a>
<a></a>
</p>
</div>
<div class="col-lg-5 col-lg-offset-1 col-md-6 col-sm-6 text-right hidden-xs">
<img src="/~/media/images/features/carousel/voice-and-lights-carousel.ashx" alt="Dematic RapidPut Solution">
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="left carousel-control" href="#carousel-7be436bff31340ee82e685bb342631ac" role="button" data-slide="prev">
<span><img src="/Content/img/chev-left.png"></span>
</a>
<a class="right carousel-control" href="#carousel-7be436bff31340ee82e685bb342631ac" role="button" data-slide="next">
<span><img src="/Content/img/chev-right.png"></span>
</a>
</section>
</div>
<div class="festuredcasestudy container-fluid nopad">
<section class="pt0 pb0">
<div class="row visible-xs">
<div class="col-sm-2 col-lg-3 image2 b-lazy" data-src="/~/media/images/assets/featured case study/cs_toshiba_squarev2.ashx" style="height: 200px;">
</div>
</div>
<div class="row row-eq-height">
<!-- <div class="col-sm-2 col-lg-3 image2" style=""> -->
<div class="col-sm-2 col-lg-3 image2 b-lazy" data-src=" /~/media/images/assets/featured case study/cs_toshiba_squarev2.ashx">
</div>
<div class="col-sm-5 col-md-4 col-lg-3 pt64 pb64" style="background-color: #7b9eb8; padding-left: 40px; padding-right: 40px;">
<h6 class="mb8 uppercase" style="color: #fff;"> Featured Case Study: </h6>
<h2 class="mb8" style="color: #fff; line-height: 1.1em"> Toshiba </h2>
<h5 class="mb8" style="color: #fff;"> The Challenge </h5>
<p style="color: #fff;"> A key driver for the project was the optimization of space within Toshiba’s new distribution center in order to reduce the overall footprint and costs of the new facility. </p>
<div class="goto mb0 mt0" style="text-align:left">
<a class="gotolink gotowhite " href="https://pages.dematic.com/assets/view/?map=10&id=2051">Our <span class="lastword">Solution <i class="ti-arrow-circle-right"></i></span></a>
</div>
</div>
<!-- <div class="col-sm-7 col-md-6 image1" style=""> -->
<div class="col-sm-7 col-md-6 image1 b-lazy" data-src="/~/media/images/assets/featured case study/cs_toshiba_square.ashx">
</div>
</div>
</section>
</div>
<style>
.iframe {
height: 1200px;
width: 100%;
resize: both;
overflow: auto;
}
/* Custom, iPhone Retina */
@media only screen and (min-width : 320px) {}
/* Extra Small Devices, Phones */
@media only screen and (min-width : 480px) {
.iframe {
height: 1200px;
}
}
/* Extra Small Devices, Phones */
@media only screen and (min-width : 580px) {
.iframe {
height: 1400px;
}
}
/* Small Devices, Tablets */
@media only screen and (min-width : 768px) {
.iframe {
height: 1600px;
}
}
/* Medium Devices, Desktops */
@media only screen and (min-width : 992px) {
.iframe {
height: 750px;
}
}
/* Large Devices, Wide Screens */
@media only screen and (min-width : 1200px) {
.iframe {
height: 850px;
}
}
</style>
<div class="container-fluid" style="padding:0;padding-bottom: 0px">
<iframe src="https://pages.dematic.com/news-component?map=10" class="iframe" style="margin:0; display:block; padding:0;width:100%;" scrolling="no"></iframe>
</div>
<div class="pc-only" align="center">
<!-- Inline Script Include Widget - Begin -->
<script>
/*!
* jQuery JavaScript Library v1.5.2
* http://jquery.com/
*
* Copyright 2011, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* Includes Sizzle.js
* http://sizzlejs.com/
* Copyright 2011, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
* Date: Thu Mar 31 15:28:23 2011 -0400
*/
(function(a, b) {
function ci(a) {
return d.isWindow(a) ? a : a.nodeType === 9 ? a.defaultView || a.parentWindow : !1
}
function cf(a) {
if (!b_[a]) {
var b = d("<" + a + ">").appendTo("body"),
c = b.css("display");
b.remove();
if (c === "none" || c === "") c = "block";
b_[a] = c
}
return b_[a]
}
function ce(a, b) {
var c = {};
d.each(cd.concat.apply([], cd.slice(0, b)), function() {
c[this] = a
});
return c
}
function b$() {
try {
return new a.ActiveXObject("Microsoft.XMLHTTP")
} catch (b) {}
}
function bZ() {
try {
return new a.XMLHttpRequest
} catch (b) {}
}
function bY() {
d(a).unload(function() {
for (var a in bW) bW[a](0, 1)
})
}
function bS(a, c) {
a.dataFilter && (c = a.dataFilter(c, a.dataType));
var e = a.dataTypes,
f = {},
g, h, i = e.length,
j, k = e[0],
l, m, n, o, p;
for (g = 1; g < i; g++) {
if (g === 1)
for (h in a.converters) typeof h === "string" && (f[h.toLowerCase()] = a.converters[h]);
l = k, k = e[g];
if (k === "*") k = l;
else if (l !== "*" && l !== k) {
m = l + " " + k, n = f[m] || f["* " + k];
if (!n) {
p = b;
for (o in f) {
j = o.split(" ");
if (j[0] === l || j[0] === "*") {
p = f[j[1] + " " + k];
if (p) {
o = f[o], o === !0 ? n = p : p === !0 && (n = o);
break
}
}
}
}!n && !p && d.error("No conversion from " + m.replace(" ", " to ")), n !== !0 && (c = n ? n(c) : p(o(c)))
}
}
return c
}
function bR(a, c, d) {
var e = a.contents,
f = a.dataTypes,
g = a.responseFields,
h, i, j, k;
for (i in g) i in d && (c[g[i]] = d[i]);
while (f[0] === "*") f.shift(), h === b && (h = a.mimeType || c.getResponseHeader("content-type"));
if (h)
for (i in e)
if (e[i] && e[i].test(h)) {
f.unshift(i);
break
} if (f[0] in d) j = f[0];
else {
for (i in d) {
if (!f[0] || a.converters[i + " " + f[0]]) {
j = i;
break
}
k || (k = i)
}
j = j || k
}
if (j) {
j !== f[0] && f.unshift(j);
return d[j]
}
}
function bQ(a, b, c, e) {
if (d.isArray(b) && b.length) d.each(b, function(b, f) {
c || bs.test(a) ? e(a, f) : bQ(a + "[" + (typeof f === "object" || d.isArray(f) ? b : "") + "]", f, c, e)
});
else if (c || b == null || typeof b !== "object") e(a, b);
else if (d.isArray(b) || d.isEmptyObject(b)) e(a, "");
else
for (var f in b) bQ(a + "[" + f + "]", b[f], c, e)
}
function bP(a, c, d, e, f, g) {
f = f || c.dataTypes[0], g = g || {}, g[f] = !0;
var h = a[f],
i = 0,
j = h ? h.length : 0,
k = a === bJ,
l;
for (; i < j && (k || !l); i++) l = h[i](c, d, e), typeof l === "string" && (!k || g[l] ? l = b : (c.dataTypes.unshift(l), l = bP(a, c, d, e, l, g)));
(k || !l) && !g["*"] && (l = bP(a, c, d, e, "*", g));
return l
}
function bO(a) {
return function(b, c) {
typeof b !== "string" && (c = b, b = "*");
if (d.isFunction(c)) {
var e = b.toLowerCase().split(bD),
f = 0,
g = e.length,
h, i, j;
for (; f < g; f++) h = e[f], j = /^\+/.test(h), j && (h = h.substr(1) || "*"), i = a[h] = a[h] || [], i[j ? "unshift" : "push"](c)
}
}
}
function bq(a, b, c) {
var e = b === "width" ? bk : bl,
f = b === "width" ? a.offsetWidth : a.offsetHeight;
if (c === "border") return f;
d.each(e, function() {
c || (f -= parseFloat(d.css(a, "padding" + this)) || 0), c === "margin" ? f += parseFloat(d.css(a, "margin" + this)) || 0 : f -= parseFloat(d.css(a, "border" + this + "Width")) || 0
});
return f
}
function bc(a, b) {
b.src ? d.ajax({
url: b.src,
async: !1,
dataType: "script"
}) : d.globalEval(b.text || b.textContent || b.innerHTML || ""), b.parentNode && b.parentNode.removeChild(b)
}
function bb(a) {
return "getElementsByTagName" in a ? a.getElementsByTagName("*") : "querySelectorAll" in a ? a.querySelectorAll("*") : []
}
function ba(a, b) {
if (b.nodeType === 1) {
var c = b.nodeName.toLowerCase();
b.clearAttributes(), b.mergeAttributes(a);
if (c === "object") b.outerHTML = a.outerHTML;
else if (c !== "input" || a.type !== "checkbox" && a.type !== "radio") {
if (c === "option") b.selected = a.defaultSelected;
else if (c === "input" || c === "textarea") b.defaultValue = a.defaultValue
} else a.checked && (b.defaultChecked = b.checked = a.checked), b.value !== a.value && (b.value = a.value);
b.removeAttribute(d.expando)
}
}
function _(a, b) {
if (b.nodeType === 1 && d.hasData(a)) {
var c = d.expando,
e = d.data(a),
f = d.data(b, e);
if (e = e[c]) {
var g = e.events;
f = f[c] = d.extend({}, e);
if (g) {
delete f.handle, f.events = {};
for (var h in g)
for (var i = 0, j = g[h].length; i < j; i++) d.event.add(b, h + (g[h][i].namespace ? "." : "") + g[h][i].namespace, g[h][i], g[h][i].data)
}
}
}
}
function $(a, b) {
return d.nodeName(a, "table") ? a.getElementsByTagName("tbody")[0] || a.appendChild(a.ownerDocument.createElement("tbody")) : a
}
function Q(a, b, c) {
if (d.isFunction(b)) return d.grep(a, function(a, d) {
var e = !!b.call(a, d, a);
return e === c
});
if (b.nodeType) return d.grep(a, function(a, d) {
return a === b === c
});
if (typeof b === "string") {
var e = d.grep(a, function(a) {
return a.nodeType === 1
});
if (L.test(b)) return d.filter(b, e, !c);
b = d.filter(b, e)
}
return d.grep(a, function(a, e) {
return d.inArray(a, b) >= 0 === c
})
}
function P(a) {
return !a || !a.parentNode || a.parentNode.nodeType === 11
}
function H(a, b) {
return (a && a !== "*" ? a + "." : "") + b.replace(t, "`").replace(u, "&")
}
function G(a) {
var b, c, e, f, g, h, i, j, k, l, m, n, o, p = [],
q = [],
s = d._data(this, "events");
if (a.liveFired !== this && s && s.live && !a.target.disabled && (!a.button || a.type !== "click")) {
a.namespace && (n = new RegExp("(^|\\.)" + a.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)")), a.liveFired = this;
var t = s.live.slice(0);
for (i = 0; i < t.length; i++) g = t[i], g.origType.replace(r, "") === a.type ? q.push(g.selector) : t.splice(i--, 1);
f = d(a.target).closest(q, a.currentTarget);
for (j = 0, k = f.length; j < k; j++) {
m = f[j];
for (i = 0; i < t.length; i++) {
g = t[i];
if (m.selector === g.selector && (!n || n.test(g.namespace)) && !m.elem.disabled) {
h = m.elem, e = null;
if (g.preType === "mouseenter" || g.preType === "mouseleave") a.type = g.preType, e = d(a.relatedTarget).closest(g.selector)[0];
(!e || e !== h) && p.push({
elem: h,
handleObj: g,
level: m.level
})
}
}
}
for (j = 0, k = p.length; j < k; j++) {
f = p[j];
if (c && f.level > c) break;
a.currentTarget = f.elem, a.data = f.handleObj.data, a.handleObj = f.handleObj, o = f.handleObj.origHandler.apply(f.elem, arguments);
if (o === !1 || a.isPropagationStopped()) {
c = f.level, o === !1 && (b = !1);
if (a.isImmediatePropagationStopped()) break
}
}
return b
}
}
function E(a, c, e) {
var f = d.extend({}, e[0]);
f.type = a, f.originalEvent = {}, f.liveFired = b, d.event.handle.call(c, f), f.isDefaultPrevented() && e[0].preventDefault()
}
function y() {
return !0
}
function x() {
return !1
}
function i(a) {
for (var b in a)
if (b !== "toJSON") return !1;
return !0
}
function h(a, c, e) {
if (e === b && a.nodeType === 1) {
e = a.getAttribute("data-" + c);
if (typeof e === "string") {
try {
e = e === "true" ? !0 : e === "false" ? !1 : e === "null" ? null : d.isNaN(e) ? g.test(e) ? d.parseJSON(e) : e : parseFloat(e)
} catch (f) {}
d.data(a, c, e)
} else e = b
}
return e
}
var c = a.document,
d = function() {
function G() {
if (!d.isReady) {
try {
c.documentElement.doScroll("left")
} catch (a) {
setTimeout(G, 1);
return
}
d.ready()
}
}
var d = function(a, b) {
return new d.fn.init(a, b, g)
},
e = a.jQuery,
f = a.$,
g, h = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,
i = /\S/,
j = /^\s+/,
k = /\s+$/,
l = /\d/,
m = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
n = /^[\],:{}\s]*$/,
o = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
p = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
q = /(?:^|:|,)(?:\s*\[)+/g,
r = /(webkit)[ \/]([\w.]+)/,
s = /(opera)(?:.*version)?[ \/]([\w.]+)/,
t = /(msie) ([\w.]+)/,
u = /(mozilla)(?:.*? rv:([\w.]+))?/,
v = navigator.userAgent,
w, x, y, z = Object.prototype.toString,
A = Object.prototype.hasOwnProperty,
B = Array.prototype.push,
C = Array.prototype.slice,
D = String.prototype.trim,
E = Array.prototype.indexOf,
F = {};
d.fn = d.prototype = {
constructor: d,
init: function(a, e, f) {
var g, i, j, k;
if (!a) return this;
if (a.nodeType) {
this.context = this[0] = a, this.length = 1;
return this
}
if (a === "body" && !e && c.body) {
this.context = c, this[0] = c.body, this.selector = "body", this.length = 1;
return this
}
if (typeof a === "string") {
g = h.exec(a);
if (!g || !g[1] && e) return !e || e.jquery ? (e || f).find(a) : this.constructor(e).find(a);
if (g[1]) {
e = e instanceof d ? e[0] : e, k = e ? e.ownerDocument || e : c, j = m.exec(a), j ? d.isPlainObject(e) ? (a = [c.createElement(j[1])], d.fn.attr.call(a, e, !0)) : a = [k.createElement(j[1])] : (j = d.buildFragment([g[1]], [
k]), a = (j.cacheable ? d.clone(j.fragment) : j.fragment).childNodes);
return d.merge(this, a)
}
i = c.getElementById(g[2]);
if (i && i.parentNode) {
if (i.id !== g[2]) return f.find(a);
this.length = 1, this[0] = i
}
this.context = c, this.selector = a;
return this
}
if (d.isFunction(a)) return f.ready(a);
a.selector !== b && (this.selector = a.selector, this.context = a.context);
return d.makeArray(a, this)
},
selector: "",
jquery: "1.5.2",
length: 0,
size: function() {
return this.length
},
toArray: function() {
return C.call(this, 0)
},
get: function(a) {
return a == null ? this.toArray() : a < 0 ? this[this.length + a] : this[a]
},
pushStack: function(a, b, c) {
var e = this.constructor();
d.isArray(a) ? B.apply(e, a) : d.merge(e, a), e.prevObject = this, e.context = this.context, b === "find" ? e.selector = this.selector + (this.selector ? " " : "") + c : b && (e.selector = this.selector + "." + b + "(" + c +
")");
return e
},
each: function(a, b) {
return d.each(this, a, b)
},
ready: function(a) {
d.bindReady(), x.done(a);
return this
},
eq: function(a) {
return a === -1 ? this.slice(a) : this.slice(a, +a + 1)
},
first: function() {
return this.eq(0)
},
last: function() {
return this.eq(-1)
},
slice: function() {
return this.pushStack(C.apply(this, arguments), "slice", C.call(arguments).join(","))
},
map: function(a) {
return this.pushStack(d.map(this, function(b, c) {
return a.call(b, c, b)
}))
},
end: function() {
return this.prevObject || this.constructor(null)
},
push: B,
sort: [].sort,
splice: [].splice
}, d.fn.init.prototype = d.fn, d.extend = d.fn.extend = function() {
var a, c, e, f, g, h, i = arguments[0] || {},
j = 1,
k = arguments.length,
l = !1;
typeof i === "boolean" && (l = i, i = arguments[1] || {}, j = 2), typeof i !== "object" && !d.isFunction(i) && (i = {}), k === j && (i = this, --j);
for (; j < k; j++)
if ((a = arguments[j]) != null)
for (c in a) {
e = i[c], f = a[c];
if (i === f) continue;
l && f && (d.isPlainObject(f) || (g = d.isArray(f))) ? (g ? (g = !1, h = e && d.isArray(e) ? e : []) : h = e && d.isPlainObject(e) ? e : {}, i[c] = d.extend(l, h, f)) : f !== b && (i[c] = f)
}
return i
}, d.extend({
noConflict: function(b) {
a.$ = f, b && (a.jQuery = e);
return d
},
isReady: !1,
readyWait: 1,
ready: function(a) {
a === !0 && d.readyWait--;
if (!d.readyWait || a !== !0 && !d.isReady) {
if (!c.body) return setTimeout(d.ready, 1);
d.isReady = !0;
if (a !== !0 && --d.readyWait > 0) return;
x.resolveWith(c, [d]), d.fn.trigger && d(c).trigger("ready").unbind("ready")
}
},
bindReady: function() {
if (!x) {
x = d._Deferred();
if (c.readyState === "complete") return setTimeout(d.ready, 1);
if (c.addEventListener) c.addEventListener("DOMContentLoaded", y, !1), a.addEventListener("load", d.ready, !1);
else if (c.attachEvent) {
c.attachEvent("onreadystatechange", y), a.attachEvent("onload", d.ready);
var b = !1;
try {
b = a.frameElement == null
} catch (e) {}
c.documentElement.doScroll && b && G()
}
}
},
isFunction: function(a) {
return d.type(a) === "function"
},
isArray: Array.isArray || function(a) {
return d.type(a) === "array"
},
isWindow: function(a) {
return a && typeof a === "object" && "setInterval" in a
},
isNaN: function(a) {
return a == null || !l.test(a) || isNaN(a)
},
type: function(a) {
return a == null ? String(a) : F[z.call(a)] || "object"
},
isPlainObject: function(a) {
if (!a || d.type(a) !== "object" || a.nodeType || d.isWindow(a)) return !1;
if (a.constructor && !A.call(a, "constructor") && !A.call(a.constructor.prototype, "isPrototypeOf")) return !1;
var c;
for (c in a) {}
return c === b || A.call(a, c)
},
isEmptyObject: function(a) {
for (var b in a) return !1;
return !0
},
error: function(a) {
throw a
},
parseJSON: function(b) {
if (typeof b !== "string" || !b) return null;
b = d.trim(b);
if (n.test(b.replace(o, "@").replace(p, "]").replace(q, ""))) return a.JSON && a.JSON.parse ? a.JSON.parse(b) : (new Function("return " + b))();
d.error("Invalid JSON: " + b)
},
parseXML: function(b, c, e) {
a.DOMParser ? (e = new DOMParser, c = e.parseFromString(b, "text/xml")) : (c = new ActiveXObject("Microsoft.XMLDOM"), c.async = "false", c.loadXML(b)), e = c.documentElement, (!e || !e.nodeName || e.nodeName ===
"parsererror") && d.error("Invalid XML: " + b);
return c
},
noop: function() {},
globalEval: function(a) {
if (a && i.test(a)) {
var b = c.head || c.getElementsByTagName("head")[0] || c.documentElement,
e = c.createElement("script");
d.support.scriptEval() ? e.appendChild(c.createTextNode(a)) : e.text = a, b.insertBefore(e, b.firstChild), b.removeChild(e)
}
},
nodeName: function(a, b) {
return a.nodeName && a.nodeName.toUpperCase() === b.toUpperCase()
},
each: function(a, c, e) {
var f, g = 0,
h = a.length,
i = h === b || d.isFunction(a);
if (e) {
if (i) {
for (f in a)
if (c.apply(a[f], e) === !1) break
} else
for (; g < h;)
if (c.apply(a[g++], e) === !1) break
} else if (i) {
for (f in a)
if (c.call(a[f], f, a[f]) === !1) break
} else
for (var j = a[0]; g < h && c.call(j, g, j) !== !1; j = a[++g]) {}
return a
},
trim: D ? function(a) {
return a == null ? "" : D.call(a)
} : function(a) {
return a == null ? "" : (a + "").replace(j, "").replace(k, "")
},
makeArray: function(a, b) {
var c = b || [];
if (a != null) {
var e = d.type(a);
a.length == null || e === "string" || e === "function" || e === "regexp" || d.isWindow(a) ? B.call(c, a) : d.merge(c, a)
}
return c
},
inArray: function(a, b) {
if (b.indexOf) return b.indexOf(a);
for (var c = 0, d = b.length; c < d; c++)
if (b[c] === a) return c;
return -1
},
merge: function(a, c) {
var d = a.length,
e = 0;
if (typeof c.length === "number")
for (var f = c.length; e < f; e++) a[d++] = c[e];
else
while (c[e] !== b) a[d++] = c[e++];
a.length = d;
return a
},
grep: function(a, b, c) {
var d = [],
e;
c = !!c;
for (var f = 0, g = a.length; f < g; f++) e = !!b(a[f], f), c !== e && d.push(a[f]);
return d
},
map: function(a, b, c) {
var d = [],
e;
for (var f = 0, g = a.length; f < g; f++) e = b(a[f], f, c), e != null && (d[d.length] = e);
return d.concat.apply([], d)
},
guid: 1,
proxy: function(a, c, e) {
arguments.length === 2 && (typeof c === "string" ? (e = a, a = e[c], c = b) : c && !d.isFunction(c) && (e = c, c = b)), !c && a && (c = function() {
return a.apply(e || this, arguments)
}), a && (c.guid = a.guid = a.guid || c.guid || d.guid++);
return c
},
access: function(a, c, e, f, g, h) {
var i = a.length;
if (typeof c === "object") {
for (var j in c) d.access(a, j, c[j], f, g, e);
return a
}
if (e !== b) {
f = !h && f && d.isFunction(e);
for (var k = 0; k < i; k++) g(a[k], c, f ? e.call(a[k], k, g(a[k], c)) : e, h);
return a
}
return i ? g(a[0], c) : b
},
now: function() {
return (new Date).getTime()
},
uaMatch: function(a) {
a = a.toLowerCase();
var b = r.exec(a) || s.exec(a) || t.exec(a) || a.indexOf("compatible") < 0 && u.exec(a) || [];
return {
browser: b[1] || "",
version: b[2] || "0"
}
},
sub: function() {
function a(b, c) {
return new a.fn.init(b, c)
}
d.extend(!0, a, this), a.superclass = this, a.fn = a.prototype = this(), a.fn.constructor = a, a.subclass = this.subclass, a.fn.init = function b(b, c) {
c && c instanceof d && !(c instanceof a) && (c = a(c));
return d.fn.init.call(this, b, c, e)
}, a.fn.init.prototype = a.fn;
var e = a(c);
return a
},
browser: {}
}), d.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(a, b) {
F["[object " + b + "]"] = b.toLowerCase()
}), w = d.uaMatch(v), w.browser && (d.browser[w.browser] = !0, d.browser.version = w.version), d.browser.webkit && (d.browser.safari = !0), E && (d.inArray = function(a, b) {
return E.call(b, a)
}), i.test(" ") && (j = /^[\s\xA0]+/, k = /[\s\xA0]+$/), g = d(c), c.addEventListener ? y = function() {
c.removeEventListener("DOMContentLoaded", y, !1), d.ready()
} : c.attachEvent && (y = function() {
c.readyState === "complete" && (c.detachEvent("onreadystatechange", y), d.ready())
});
return d
}(),
e = "then done fail isResolved isRejected promise".split(" "),
f = [].slice;
d.extend({
_Deferred: function() {
var a = [],
b, c, e, f = {
done: function() {
if (!e) {
var c = arguments,
g, h, i, j, k;
b && (k = b, b = 0);
for (g = 0, h = c.length; g < h; g++) i = c[g], j = d.type(i), j === "array" ? f.done.apply(f, i) : j === "function" && a.push(i);
k && f.resolveWith(k[0], k[1])
}
return this
},
resolveWith: function(d, f) {
if (!e && !b && !c) {
f = f || [], c = 1;
try {
while (a[0]) a.shift().apply(d, f)
} finally {
b = [d, f], c = 0
}
}
return this
},
resolve: function() {
f.resolveWith(this, arguments);
return this
},
isResolved: function() {
return c || b
},
cancel: function() {
e = 1, a = [];
return this
}
};
return f
},
Deferred: function(a) {
var b = d._Deferred(),
c = d._Deferred(),
f;
d.extend(b, {
then: function(a, c) {
b.done(a).fail(c);
return this
},
fail: c.done,
rejectWith: c.resolveWith,
reject: c.resolve,
isRejected: c.isResolved,
promise: function(a) {
if (a == null) {
if (f) return f;
f = a = {}
}
var c = e.length;
while (c--) a[e[c]] = b[e[c]];
return a
}
}), b.done(c.cancel).fail(b.cancel), delete b.cancel, a && a.call(b, b);
return b
},
when: function(a) {
function i(a) {
return function(c) {
b[a] = arguments.length > 1 ? f.call(arguments, 0) : c, --g || h.resolveWith(h, f.call(b, 0))
}
}
var b = arguments,
c = 0,
e = b.length,
g = e,
h = e <= 1 && a && d.isFunction(a.promise) ? a : d.Deferred();
if (e > 1) {
for (; c < e; c++) b[c] && d.isFunction(b[c].promise) ? b[c].promise().then(i(c), h.reject) : --g;
g || h.resolveWith(h, b)
} else h !== a && h.resolveWith(h, e ? [a] : []);
return h.promise()
}
}),
function() {
d.support = {};
var b = c.createElement("div");
b.style.display = "none", b.innerHTML = " <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
var e = b.getElementsByTagName("*"),
f = b.getElementsByTagName("a")[0],
g = c.createElement("select"),
h = g.appendChild(c.createElement("option")),
i = b.getElementsByTagName("input")[0];
if (e && e.length && f) {
d.support = {
leadingWhitespace: b.firstChild.nodeType === 3,
tbody: !b.getElementsByTagName("tbody").length,
htmlSerialize: !!b.getElementsByTagName("link").length,
style: /red/.test(f.getAttribute("style")),
hrefNormalized: f.getAttribute("href") === "/a",
opacity: /^0.55$/.test(f.style.opacity),
cssFloat: !!f.style.cssFloat,
checkOn: i.value === "on",
optSelected: h.selected,
deleteExpando: !0,
optDisabled: !1,
checkClone: !1,
noCloneEvent: !0,
noCloneChecked: !0,
boxModel: null,
inlineBlockNeedsLayout: !1,
shrinkWrapBlocks: !1,
reliableHiddenOffsets: !0,
reliableMarginRight: !0
}, i.checked = !0, d.support.noCloneChecked = i.cloneNode(!0).checked, g.disabled = !0, d.support.optDisabled = !h.disabled;
var j = null;
d.support.scriptEval = function() {
if (j === null) {
var b = c.documentElement,
e = c.createElement("script"),
f = "script" + d.now();
try {
e.appendChild(c.createTextNode("window." + f + "=1;"))
} catch (g) {}
b.insertBefore(e, b.firstChild), a[f] ? (j = !0, delete a[f]) : j = !1, b.removeChild(e)
}
return j
};
try {
delete b.test
} catch (k) {
d.support.deleteExpando = !1
}!b.addEventListener && b.attachEvent && b.fireEvent && (b.attachEvent("onclick", function l() {
d.support.noCloneEvent = !1, b.detachEvent("onclick", l)
}), b.cloneNode(!0).fireEvent("onclick")), b = c.createElement("div"), b.innerHTML = "<input type='radio' name='radiotest' checked='checked'/>";
var m = c.createDocumentFragment();
m.appendChild(b.firstChild), d.support.checkClone = m.cloneNode(!0).cloneNode(!0).lastChild.checked, d(function() {
var a = c.createElement("div"),
b = c.getElementsByTagName("body")[0];
if (b) {
a.style.width = a.style.paddingLeft = "1px", b.appendChild(a), d.boxModel = d.support.boxModel = a.offsetWidth === 2, "zoom" in a.style && (a.style.display = "inline", a.style.zoom = 1, d.support.inlineBlockNeedsLayout = a
.offsetWidth === 2, a.style.display = "", a.innerHTML = "<div style='width:4px;'></div>", d.support.shrinkWrapBlocks = a.offsetWidth !== 2), a.innerHTML =
"<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
var e = a.getElementsByTagName("td");
d.support.reliableHiddenOffsets = e[0].offsetHeight === 0, e[0].style.display = "", e[1].style.display = "none", d.support.reliableHiddenOffsets = d.support.reliableHiddenOffsets && e[0].offsetHeight === 0, a.innerHTML = "", c
.defaultView && c.defaultView.getComputedStyle && (a.style.width = "1px", a.style.marginRight = "0", d.support.reliableMarginRight = (parseInt(c.defaultView.getComputedStyle(a, null).marginRight, 10) || 0) === 0), b
.removeChild(a).style.display = "none", a = e = null
}
});
var n = function(a) {
var b = c.createElement("div");
a = "on" + a;
if (!b.attachEvent) return !0;
var d = a in b;
d || (b.setAttribute(a, "return;"), d = typeof b[a] === "function");
return d
};
d.support.submitBubbles = n("submit"), d.support.changeBubbles = n("change"), b = e = f = null
}
}();
var g = /^(?:\{.*\}|\[.*\])$/;
d.extend({
cache: {},
uuid: 0,
expando: "jQuery" + (d.fn.jquery + Math.random()).replace(/\D/g, ""),
noData: {
embed: !0,
object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
applet: !0
},
hasData: function(a) {
a = a.nodeType ? d.cache[a[d.expando]] : a[d.expando];
return !!a && !i(a)
},
data: function(a, c, e, f) {
if (d.acceptData(a)) {
var g = d.expando,
h = typeof c === "string",
i, j = a.nodeType,
k = j ? d.cache : a,
l = j ? a[d.expando] : a[d.expando] && d.expando;
if ((!l || f && l && !k[l][g]) && h && e === b) return;
l || (j ? a[d.expando] = l = ++d.uuid : l = d.expando), k[l] || (k[l] = {}, j || (k[l].toJSON = d.noop));
if (typeof c === "object" || typeof c === "function") f ? k[l][g] = d.extend(k[l][g], c) : k[l] = d.extend(k[l], c);
i = k[l], f && (i[g] || (i[g] = {}), i = i[g]), e !== b && (i[c] = e);
if (c === "events" && !i[c]) return i[g] && i[g].events;
return h ? i[c] : i
}
},
removeData: function(b, c, e) {
if (d.acceptData(b)) {
var f = d.expando,
g = b.nodeType,
h = g ? d.cache : b,
j = g ? b[d.expando] : d.expando;
if (!h[j]) return;
if (c) {
var k = e ? h[j][f] : h[j];
if (k) {
delete k[c];
if (!i(k)) return
}
}
if (e) {
delete h[j][f];
if (!i(h[j])) return
}
var l = h[j][f];
d.support.deleteExpando || h != a ? delete h[j] : h[j] = null, l ? (h[j] = {}, g || (h[j].toJSON = d.noop), h[j][f] = l) : g && (d.support.deleteExpando ? delete b[d.expando] : b.removeAttribute ? b.removeAttribute(d.expando) :
b[d.expando] = null)
}
},
_data: function(a, b, c) {
return d.data(a, b, c, !0)
},
acceptData: function(a) {
if (a.nodeName) {
var b = d.noData[a.nodeName.toLowerCase()];
if (b) return b !== !0 && a.getAttribute("classid") === b
}
return !0
}
}), d.fn.extend({
data: function(a, c) {
var e = null;
if (typeof a === "undefined") {
if (this.length) {
e = d.data(this[0]);
if (this[0].nodeType === 1) {
var f = this[0].attributes,
g;
for (var i = 0, j = f.length; i < j; i++) g = f[i].name, g.indexOf("data-") === 0 && (g = g.substr(5), h(this[0], g, e[g]))
}
}
return e
}
if (typeof a === "object") return this.each(function() {
d.data(this, a)
});
var k = a.split(".");
k[1] = k[1] ? "." + k[1] : "";
if (c === b) {
e = this.triggerHandler("getData" + k[1] + "!", [k[0]]), e === b && this.length && (e = d.data(this[0], a), e = h(this[0], a, e));
return e === b && k[1] ? this.data(k[0]) : e
}
return this.each(function() {
var b = d(this),
e = [k[0], c];
b.triggerHandler("setData" + k[1] + "!", e), d.data(this, a, c), b.triggerHandler("changeData" + k[1] + "!", e)
})
},
removeData: function(a) {
return this.each(function() {
d.removeData(this, a)
})
}
}), d.extend({
queue: function(a, b, c) {
if (a) {
b = (b || "fx") + "queue";
var e = d._data(a, b);
if (!c) return e || [];
!e || d.isArray(c) ? e = d._data(a, b, d.makeArray(c)) : e.push(c);
return e
}
},
dequeue: function(a, b) {
b = b || "fx";
var c = d.queue(a, b),
e = c.shift();
e === "inprogress" && (e = c.shift()), e && (b === "fx" && c.unshift("inprogress"), e.call(a, function() {
d.dequeue(a, b)
})), c.length || d.removeData(a, b + "queue", !0)
}
}), d.fn.extend({
queue: function(a, c) {
typeof a !== "string" && (c = a, a = "fx");
if (c === b) return d.queue(this[0], a);
return this.each(function(b) {
var e = d.queue(this, a, c);
a === "fx" && e[0] !== "inprogress" && d.dequeue(this, a)
})
},
dequeue: function(a) {
return this.each(function() {
d.dequeue(this, a)
})
},
delay: function(a, b) {
a = d.fx ? d.fx.speeds[a] || a : a, b = b || "fx";
return this.queue(b, function() {
var c = this;
setTimeout(function() {
d.dequeue(c, b)
}, a)
})
},
clearQueue: function(a) {
return this.queue(a || "fx", [])
}
});
var j = /[\n\t\r]/g,
k = /\s+/,
l = /\r/g,
m = /^(?:href|src|style)$/,
n = /^(?:button|input)$/i,
o = /^(?:button|input|object|select|textarea)$/i,
p = /^a(?:rea)?$/i,
q = /^(?:radio|checkbox)$/i;
d.props = {
"for": "htmlFor",
"class": "className",
readonly: "readOnly",
maxlength: "maxLength",
cellspacing: "cellSpacing",
rowspan: "rowSpan",
colspan: "colSpan",
tabindex: "tabIndex",
usemap: "useMap",
frameborder: "frameBorder"
}, d.fn.extend({
attr: function(a, b) {
return d.access(this, a, b, !0, d.attr)
},
removeAttr: function(a, b) {
return this.each(function() {
d.attr(this, a, ""), this.nodeType === 1 && this.removeAttribute(a)
})
},
addClass: function(a) {
if (d.isFunction(a)) return this.each(function(b) {
var c = d(this);
c.addClass(a.call(this, b, c.attr("class")))
});
if (a && typeof a === "string") {
var b = (a || "").split(k);
for (var c = 0, e = this.length; c < e; c++) {
var f = this[c];
if (f.nodeType === 1)
if (f.className) {
var g = " " + f.className + " ",
h = f.className;
for (var i = 0, j = b.length; i < j; i++) g.indexOf(" " + b[i] + " ") < 0 && (h += " " + b[i]);
f.className = d.trim(h)
} else f.className = a
}
}
return this
},
removeClass: function(a) {
if (d.isFunction(a)) return this.each(function(b) {
var c = d(this);
c.removeClass(a.call(this, b, c.attr("class")))
});
if (a && typeof a === "string" || a === b) {
var c = (a || "").split(k);
for (var e = 0, f = this.length; e < f; e++) {
var g = this[e];
if (g.nodeType === 1 && g.className)
if (a) {
var h = (" " + g.className + " ").replace(j, " ");
for (var i = 0, l = c.length; i < l; i++) h = h.replace(" " + c[i] + " ", " ");
g.className = d.trim(h)
} else g.className = ""
}
}
return this
},
toggleClass: function(a, b) {
var c = typeof a,
e = typeof b === "boolean";
if (d.isFunction(a)) return this.each(function(c) {
var e = d(this);
e.toggleClass(a.call(this, c, e.attr("class"), b), b)
});
return this.each(function() {
if (c === "string") {
var f, g = 0,
h = d(this),
i = b,
j = a.split(k);
while (f = j[g++]) i = e ? i : !h.hasClass(f), h[i ? "addClass" : "removeClass"](f)
} else if (c === "undefined" || c === "boolean") this.className && d._data(this, "__className__", this.className), this.className = this.className || a === !1 ? "" : d._data(this, "__className__") || ""
})
},
hasClass: function(a) {
var b = " " + a + " ";
for (var c = 0, d = this.length; c < d; c++)
if ((" " + this[c].className + " ").replace(j, " ").indexOf(b) > -1) return !0;
return !1
},
val: function(a) {
if (!arguments.length) {
var c = this[0];
if (c) {
if (d.nodeName(c, "option")) {
var e = c.attributes.value;
return !e || e.specified ? c.value : c.text
}
if (d.nodeName(c, "select")) {
var f = c.selectedIndex,
g = [],
h = c.options,
i = c.type === "select-one";
if (f < 0) return null;
for (var j = i ? f : 0, k = i ? f + 1 : h.length; j < k; j++) {
var m = h[j];
if (m.selected && (d.support.optDisabled ? !m.disabled : m.getAttribute("disabled") === null) && (!m.parentNode.disabled || !d.nodeName(m.parentNode, "optgroup"))) {
a = d(m).val();
if (i) return a;
g.push(a)
}
}
if (i && !g.length && h.length) return d(h[f]).val();
return g
}
if (q.test(c.type) && !d.support.checkOn) return c.getAttribute("value") === null ? "on" : c.value;
return (c.value || "").replace(l, "")
}
return b
}
var n = d.isFunction(a);
return this.each(function(b) {
var c = d(this),
e = a;
if (this.nodeType === 1) {
n && (e = a.call(this, b, c.val())), e == null ? e = "" : typeof e === "number" ? e += "" : d.isArray(e) && (e = d.map(e, function(a) {
return a == null ? "" : a + ""
}));
if (d.isArray(e) && q.test(this.type)) this.checked = d.inArray(c.val(), e) >= 0;
else if (d.nodeName(this, "select")) {
var f = d.makeArray(e);
d("option", this).each(function() {
this.selected = d.inArray(d(this).val(), f) >= 0
}), f.length || (this.selectedIndex = -1)
} else this.value = e
}
})
}
}), d.extend({
attrFn: {
val: !0,
css: !0,
html: !0,
text: !0,
data: !0,
width: !0,
height: !0,
offset: !0
},
attr: function(a, c, e, f) {
if (!a || a.nodeType === 3 || a.nodeType === 8 || a.nodeType === 2) return b;
if (f && c in d.attrFn) return d(a)[c](e);
var g = a.nodeType !== 1 || !d.isXMLDoc(a),
h = e !== b;
c = g && d.props[c] || c;
if (a.nodeType === 1) {
var i = m.test(c);
if (c === "selected" && !d.support.optSelected) {
var j = a.parentNode;
j && (j.selectedIndex, j.parentNode && j.parentNode.selectedIndex)
}
if ((c in a || a[c] !== b) && g && !i) {
h && (c === "type" && n.test(a.nodeName) && a.parentNode && d.error("type property can't be changed"), e === null ? a.nodeType === 1 && a.removeAttribute(c) : a[c] = e);
if (d.nodeName(a, "form") && a.getAttributeNode(c)) return a.getAttributeNode(c).nodeValue;
if (c === "tabIndex") {
var k = a.getAttributeNode("tabIndex");
return k && k.specified ? k.value : o.test(a.nodeName) || p.test(a.nodeName) && a.href ? 0 : b
}
return a[c]
}
if (!d.support.style && g && c === "style") {
h && (a.style.cssText = "" + e);
return a.style.cssText
}
h && a.setAttribute(c, "" + e);
if (!a.attributes[c] && (a.hasAttribute && !a.hasAttribute(c))) return b;
var l = !d.support.hrefNormalized && g && i ? a.getAttribute(c, 2) : a.getAttribute(c);
return l === null ? b : l
}
h && (a[c] = e);
return a[c]
}
});
var r = /\.(.*)$/,
s = /^(?:textarea|input|select)$/i,
t = /\./g,
u = / /g,
v = /[^\w\s.|`]/g,
w = function(a) {
return a.replace(v, "\\$&")
};
d.event = {
add: function(c, e, f, g) {
if (c.nodeType !== 3 && c.nodeType !== 8) {
try {
d.isWindow(c) && (c !== a && !c.frameElement) && (c = a)
} catch (h) {}
if (f === !1) f = x;
else if (!f) return;
var i, j;
f.handler && (i = f, f = i.handler), f.guid || (f.guid = d.guid++);
var k = d._data(c);
if (!k) return;
var l = k.events,
m = k.handle;
l || (k.events = l = {}), m || (k.handle = m = function(a) {
return typeof d !== "undefined" && d.event.triggered !== a.type ? d.event.handle.apply(m.elem, arguments) : b
}), m.elem = c, e = e.split(" ");
var n, o = 0,
p;
while (n = e[o++]) {
j = i ? d.extend({}, i) : {
handler: f,
data: g
}, n.indexOf(".") > -1 ? (p = n.split("."), n = p.shift(), j.namespace = p.slice(0).sort().join(".")) : (p = [], j.namespace = ""), j.type = n, j.guid || (j.guid = f.guid);
var q = l[n],
r = d.event.special[n] || {};
if (!q) {
q = l[n] = [];
if (!r.setup || r.setup.call(c, g, p, m) === !1) c.addEventListener ? c.addEventListener(n, m, !1) : c.attachEvent && c.attachEvent("on" + n, m)
}
r.add && (r.add.call(c, j), j.handler.guid || (j.handler.guid = f.guid)), q.push(j), d.event.global[n] = !0
}
c = null
}
},
global: {},
remove: function(a, c, e, f) {
if (a.nodeType !== 3 && a.nodeType !== 8) {
e === !1 && (e = x);
var g, h, i, j, k = 0,
l, m, n, o, p, q, r, s = d.hasData(a) && d._data(a),
t = s && s.events;
if (!s || !t) return;
c && c.type && (e = c.handler, c = c.type);
if (!c || typeof c === "string" && c.charAt(0) === ".") {
c = c || "";
for (h in t) d.event.remove(a, h + c);
return
}
c = c.split(" ");
while (h = c[k++]) {
r = h, q = null, l = h.indexOf(".") < 0, m = [], l || (m = h.split("."), h = m.shift(), n = new RegExp("(^|\\.)" + d.map(m.slice(0).sort(), w).join("\\.(?:.*\\.)?") + "(\\.|$)")), p = t[h];
if (!p) continue;
if (!e) {
for (j = 0; j < p.length; j++) {
q = p[j];
if (l || n.test(q.namespace)) d.event.remove(a, r, q.handler, j), p.splice(j--, 1)
}
continue
}
o = d.event.special[h] || {};
for (j = f || 0; j < p.length; j++) {
q = p[j];
if (e.guid === q.guid) {
if (l || n.test(q.namespace)) f == null && p.splice(j--, 1), o.remove && o.remove.call(a, q);
if (f != null) break
}
}
if (p.length === 0 || f != null && p.length === 1)(!o.teardown || o.teardown.call(a, m) === !1) && d.removeEvent(a, h, s.handle), g = null, delete t[h]
}
if (d.isEmptyObject(t)) {
var u = s.handle;
u && (u.elem = null), delete s.events, delete s.handle, d.isEmptyObject(s) && d.removeData(a, b, !0)
}
}
},
trigger: function(a, c, e) {
var f = a.type || a,
g = arguments[3];
if (!g) {
a = typeof a === "object" ? a[d.expando] ? a : d.extend(d.Event(f), a) : d.Event(f), f.indexOf("!") >= 0 && (a.type = f = f.slice(0, -1), a.exclusive = !0), e || (a.stopPropagation(), d.event.global[f] && d.each(d.cache,
function() {
var b = d.expando,
e = this[b];
e && e.events && e.events[f] && d.event.trigger(a, c, e.handle.elem)
}));
if (!e || e.nodeType === 3 || e.nodeType === 8) return b;
a.result = b, a.target = e, c = d.makeArray(c), c.unshift(a)
}
a.currentTarget = e;
var h = d._data(e, "handle");
h && h.apply(e, c);
var i = e.parentNode || e.ownerDocument;
try {
e && e.nodeName && d.noData[e.nodeName.toLowerCase()] || e["on" + f] && e["on" + f].apply(e, c) === !1 && (a.result = !1, a.preventDefault())
} catch (j) {}
if (!a.isPropagationStopped() && i) d.event.trigger(a, c, i, !0);
else if (!a.isDefaultPrevented()) {
var k, l = a.target,
m = f.replace(r, ""),
n = d.nodeName(l, "a") && m === "click",
o = d.event.special[m] || {};
if ((!o._default || o._default.call(e, a) === !1) && !n && !(l && l.nodeName && d.noData[l.nodeName.toLowerCase()])) {
try {
l[m] && (k = l["on" + m], k && (l["on" + m] = null), d.event.triggered = a.type, l[m]())
} catch (p) {}
k && (l["on" + m] = k), d.event.triggered = b
}
}
},
handle: function(c) {
var e, f, g, h, i, j = [],
k = d.makeArray(arguments);
c = k[0] = d.event.fix(c || a.event), c.currentTarget = this, e = c.type.indexOf(".") < 0 && !c.exclusive, e || (g = c.type.split("."), c.type = g.shift(), j = g.slice(0).sort(), h = new RegExp("(^|\\.)" + j.join("\\.(?:.*\\.)?") +
"(\\.|$)")), c.namespace = c.namespace || j.join("."), i = d._data(this, "events"), f = (i || {})[c.type];
if (i && f) {
f = f.slice(0);
for (var l = 0, m = f.length; l < m; l++) {
var n = f[l];
if (e || h.test(n.namespace)) {
c.handler = n.handler, c.data = n.data, c.handleObj = n;
var o = n.handler.apply(this, k);
o !== b && (c.result = o, o === !1 && (c.preventDefault(), c.stopPropagation()));
if (c.isImmediatePropagationStopped()) break
}
}
}
return c.result
},
props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which"
.split(" "),
fix: function(a) {
if (a[d.expando]) return a;
var e = a;
a = d.Event(e);
for (var f = this.props.length, g; f;) g = this.props[--f], a[g] = e[g];
a.target || (a.target = a.srcElement || c), a.target.nodeType === 3 && (a.target = a.target.parentNode), !a.relatedTarget && a.fromElement && (a.relatedTarget = a.fromElement === a.target ? a.toElement : a.fromElement);
if (a.pageX == null && a.clientX != null) {
var h = c.documentElement,
i = c.body;
a.pageX = a.clientX + (h && h.scrollLeft || i && i.scrollLeft || 0) - (h && h.clientLeft || i && i.clientLeft || 0), a.pageY = a.clientY + (h && h.scrollTop || i && i.scrollTop || 0) - (h && h.clientTop || i && i.clientTop || 0)
}
a.which == null && (a.charCode != null || a.keyCode != null) && (a.which = a.charCode != null ? a.charCode : a.keyCode), !a.metaKey && a.ctrlKey && (a.metaKey = a.ctrlKey), !a.which && a.button !== b && (a.which = a.button & 1 ? 1 :
a.button & 2 ? 3 : a.button & 4 ? 2 : 0);
return a
},
guid: 1e8,
proxy: d.proxy,
special: {
ready: {
setup: d.bindReady,
teardown: d.noop
},
live: {
add: function(a) {
d.event.add(this, H(a.origType, a.selector), d.extend({}, a, {
handler: G,
guid: a.handler.guid
}))
},
remove: function(a) {
d.event.remove(this, H(a.origType, a.selector), a)
}
},
beforeunload: {
setup: function(a, b, c) {
d.isWindow(this) && (this.onbeforeunload = c)
},
teardown: function(a, b) {
this.onbeforeunload === b && (this.onbeforeunload = null)
}
}
}
}, d.removeEvent = c.removeEventListener ? function(a, b, c) {
a.removeEventListener && a.removeEventListener(b, c, !1)
} : function(a, b, c) {
a.detachEvent && a.detachEvent("on" + b, c)
}, d.Event = function(a) {
if (!this.preventDefault) return new d.Event(a);
a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || a.returnValue === !1 || a.getPreventDefault && a.getPreventDefault() ? y : x) : this.type = a, this.timeStamp = d.now(), this[d
.expando] = !0
}, d.Event.prototype = {
preventDefault: function() {
this.isDefaultPrevented = y;
var a = this.originalEvent;
a && (a.preventDefault ? a.preventDefault() : a.returnValue = !1)
},
stopPropagation: function() {
this.isPropagationStopped = y;
var a = this.originalEvent;
a && (a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0)
},
stopImmediatePropagation: function() {
this.isImmediatePropagationStopped = y, this.stopPropagation()
},
isDefaultPrevented: x,
isPropagationStopped: x,
isImmediatePropagationStopped: x
};
var z = function(a) {
var b = a.relatedTarget;
try {
if (b && b !== c && !b.parentNode) return;
while (b && b !== this) b = b.parentNode;
b !== this && (a.type = a.data, d.event.handle.apply(this, arguments))
} catch (e) {}
},
A = function(a) {
a.type = a.data, d.event.handle.apply(this, arguments)
};
d.each({
mouseenter: "mouseover",
mouseleave: "mouseout"
}, function(a, b) {
d.event.special[a] = {
setup: function(c) {
d.event.add(this, b, c && c.selector ? A : z, a)
},
teardown: function(a) {
d.event.remove(this, b, a && a.selector ? A : z)
}
}
}), d.support.submitBubbles || (d.event.special.submit = {
setup: function(a, b) {
if (this.nodeName && this.nodeName.toLowerCase() !== "form") d.event.add(this, "click.specialSubmit", function(a) {
var b = a.target,
c = b.type;
(c === "submit" || c === "image") && d(b).closest("form").length && E("submit", this, arguments)
}), d.event.add(this, "keypress.specialSubmit", function(a) {
var b = a.target,
c = b.type;
(c === "text" || c === "password") && d(b).closest("form").length && a.keyCode === 13 && E("submit", this, arguments)
});
else return !1
},
teardown: function(a) {
d.event.remove(this, ".specialSubmit")
}
});
if (!d.support.changeBubbles) {
var B, C = function(a) {
var b = a.type,
c = a.value;
b === "radio" || b === "checkbox" ? c = a.checked : b === "select-multiple" ? c = a.selectedIndex > -1 ? d.map(a.options, function(a) {
return a.selected
}).join("-") : "" : a.nodeName.toLowerCase() === "select" && (c = a.selectedIndex);
return c
},
D = function D(a) {
var c = a.target,
e, f;
if (s.test(c.nodeName) && !c.readOnly) {
e = d._data(c, "_change_data"), f = C(c), (a.type !== "focusout" || c.type !== "radio") && d._data(c, "_change_data", f);
if (e === b || f === e) return;
if (e != null || f) a.type = "change", a.liveFired = b, d.event.trigger(a, arguments[1], c)
}
};
d.event.special.change = {
filters: {
focusout: D,
beforedeactivate: D,
click: function(a) {
var b = a.target,
c = b.type;
(c === "radio" || c === "checkbox" || b.nodeName.toLowerCase() === "select") && D.call(this, a)
},
keydown: function(a) {
var b = a.target,
c = b.type;
(a.keyCode === 13 && b.nodeName.toLowerCase() !== "textarea" || a.keyCode === 32 && (c === "checkbox" || c === "radio") || c === "select-multiple") && D.call(this, a)
},
beforeactivate: function(a) {
var b = a.target;
d._data(b, "_change_data", C(b))
}
},
setup: function(a, b) {
if (this.type === "file") return !1;
for (var c in B) d.event.add(this, c + ".specialChange", B[c]);
return s.test(this.nodeName)
},
teardown: function(a) {
d.event.remove(this, ".specialChange");
return s.test(this.nodeName)
}
}, B = d.event.special.change.filters, B.focus = B.beforeactivate
}
c.addEventListener && d.each({
focus: "focusin",
blur: "focusout"
}, function(a, b) {
function f(a) {
var c = d.event.fix(a);
c.type = b, c.originalEvent = {}, d.event.trigger(c, null, c.target), c.isDefaultPrevented() && a.preventDefault()
}
var e = 0;
d.event.special[b] = {
setup: function() {
e++ === 0 && c.addEventListener(a, f, !0)
},
teardown: function() {
--e === 0 && c.removeEventListener(a, f, !0)
}
}
}), d.each(["bind", "one"], function(a, c) {
d.fn[c] = function(a, e, f) {
if (typeof a === "object") {
for (var g in a) this[c](g, e, a[g], f);
return this
}
if (d.isFunction(e) || e === !1) f = e, e = b;
var h = c === "one" ? d.proxy(f, function(a) {
d(this).unbind(a, h);
return f.apply(this, arguments)
}) : f;
if (a === "unload" && c !== "one") this.one(a, e, f);
else
for (var i = 0, j = this.length; i < j; i++) d.event.add(this[i], a, h, e);
return this
}
}), d.fn.extend({
unbind: function(a, b) {
if (typeof a !== "object" || a.preventDefault)
for (var e = 0, f = this.length; e < f; e++) d.event.remove(this[e], a, b);
else
for (var c in a) this.unbind(c, a[c]);
return this
},
delegate: function(a, b, c, d) {
return this.live(b, c, d, a)
},
undelegate: function(a, b, c) {
return arguments.length === 0 ? this.unbind("live") : this.die(b, null, c, a)
},
trigger: function(a, b) {
return this.each(function() {
d.event.trigger(a, b, this)
})
},
triggerHandler: function(a, b) {
if (this[0]) {
var c = d.Event(a);
c.preventDefault(), c.stopPropagation(), d.event.trigger(c, b, this[0]);
return c.result
}
},
toggle: function(a) {
var b = arguments,
c = 1;
while (c < b.length) d.proxy(a, b[c++]);
return this.click(d.proxy(a, function(e) {
var f = (d._data(this, "lastToggle" + a.guid) || 0) % c;
d._data(this, "lastToggle" + a.guid, f + 1), e.preventDefault();
return b[f].apply(this, arguments) || !1
}))
},
hover: function(a, b) {
return this.mouseenter(a).mouseleave(b || a)
}
});
var F = {
focus: "focusin",
blur: "focusout",
mouseenter: "mouseover",
mouseleave: "mouseout"
};
d.each(["live", "die"], function(a, c) {
d.fn[c] = function(a, e, f, g) {
var h, i = 0,
j, k, l, m = g || this.selector,
n = g ? this : d(this.context);
if (typeof a === "object" && !a.preventDefault) {
for (var o in a) n[c](o, e, a[o], m);
return this
}
d.isFunction(e) && (f = e, e = b), a = (a || "").split(" ");
while ((h = a[i++]) != null) {
j = r.exec(h), k = "", j && (k = j[0], h = h.replace(r, ""));
if (h === "hover") {
a.push("mouseenter" + k, "mouseleave" + k);
continue
}
l = h, h === "focus" || h === "blur" ? (a.push(F[h] + k), h = h + k) : h = (F[h] || h) + k;
if (c === "live")
for (var p = 0, q = n.length; p < q; p++) d.event.add(n[p], "live." + H(h, m), {
data: e,
selector: m,
handler: f,
origType: h,
origHandler: f,
preType: l
});
else n.unbind("live." + H(h, m), f)
}
return this
}
}), d.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "), function(a, b) {
d.fn[b] = function(a, c) {
c == null && (c = a, a = null);
return arguments.length > 0 ? this.bind(b, a, c) : this.trigger(b)
}, d.attrFn && (d.attrFn[b] = !0)
}),
function() {
function u(a, b, c, d, e, f) {
for (var g = 0, h = d.length; g < h; g++) {
var i = d[g];
if (i) {
var j = !1;
i = i[a];
while (i) {
if (i.sizcache === c) {
j = d[i.sizset];
break
}
if (i.nodeType === 1) {
f || (i.sizcache = c, i.sizset = g);
if (typeof b !== "string") {
if (i === b) {
j = !0;
break
}
} else if (k.filter(b, [i]).length > 0) {
j = i;
break
}
}
i = i[a]
}
d[g] = j
}
}
}
function t(a, b, c, d, e, f) {
for (var g = 0, h = d.length; g < h; g++) {
var i = d[g];
if (i) {
var j = !1;
i = i[a];
while (i) {
if (i.sizcache === c) {
j = d[i.sizset];
break
}
i.nodeType === 1 && !f && (i.sizcache = c, i.sizset = g);
if (i.nodeName.toLowerCase() === b) {
j = i;
break
}
i = i[a]
}
d[g] = j
}
}
}
var a = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
e = 0,
f = Object.prototype.toString,
g = !1,
h = !0,
i = /\\/g,
j = /\W/;
[0, 0].sort(function() {
h = !1;
return 0
});
var k = function(b, d, e, g) {
e = e || [], d = d || c;
var h = d;
if (d.nodeType !== 1 && d.nodeType !== 9) return [];
if (!b || typeof b !== "string") return e;
var i, j, n, o, q, r, s, t, u = !0,
w = k.isXML(d),
x = [],
y = b;
do {
a.exec(""), i = a.exec(y);
if (i) {
y = i[3], x.push(i[1]);
if (i[2]) {
o = i[3];
break
}
}
} while (i);
if (x.length > 1 && m.exec(b))
if (x.length === 2 && l.relative[x[0]]) j = v(x[0] + x[1], d);
else {
j = l.relative[x[0]] ? [d] : k(x.shift(), d);
while (x.length) b = x.shift(), l.relative[b] && (b += x.shift()), j = v(b, j)
}
else {
!g && x.length > 1 && d.nodeType === 9 && !w && l.match.ID.test(x[0]) && !l.match.ID.test(x[x.length - 1]) && (q = k.find(x.shift(), d, w), d = q.expr ? k.filter(q.expr, q.set)[0] : q.set[0]);
if (d) {
q = g ? {
expr: x.pop(),
set: p(g)
} : k.find(x.pop(), x.length === 1 && (x[0] === "~" || x[0] === "+") && d.parentNode ? d.parentNode : d, w), j = q.expr ? k.filter(q.expr, q.set) : q.set, x.length > 0 ? n = p(j) : u = !1;
while (x.length) r = x.pop(), s = r, l.relative[r] ? s = x.pop() : r = "", s == null && (s = d), l.relative[r](n, s, w)
} else n = x = []
}
n || (n = j), n || k.error(r || b);
if (f.call(n) === "[object Array]")
if (u)
if (d && d.nodeType === 1)
for (t = 0; n[t] != null; t++) n[t] && (n[t] === !0 || n[t].nodeType === 1 && k.contains(d, n[t])) && e.push(j[t]);
else
for (t = 0; n[t] != null; t++) n[t] && n[t].nodeType === 1 && e.push(j[t]);
else e.push.apply(e, n);
else p(n, e);
o && (k(o, h, e, g), k.uniqueSort(e));
return e
};
k.uniqueSort = function(a) {
if (r) {
g = h, a.sort(r);
if (g)
for (var b = 1; b < a.length; b++) a[b] === a[b - 1] && a.splice(b--, 1)
}
return a
}, k.matches = function(a, b) {
return k(a, null, null, b)
}, k.matchesSelector = function(a, b) {
return k(b, null, null, [a]).length > 0
}, k.find = function(a, b, c) {
var d;
if (!a) return [];
for (var e = 0, f = l.order.length; e < f; e++) {
var g, h = l.order[e];
if (g = l.leftMatch[h].exec(a)) {
var j = g[1];
g.splice(1, 1);
if (j.substr(j.length - 1) !== "\\") {
g[1] = (g[1] || "").replace(i, ""), d = l.find[h](g, b, c);
if (d != null) {
a = a.replace(l.match[h], "");
break
}
}
}
}
d || (d = typeof b.getElementsByTagName !== "undefined" ? b.getElementsByTagName("*") : []);
return {
set: d,
expr: a
}
}, k.filter = function(a, c, d, e) {
var f, g, h = a,
i = [],
j = c,
m = c && c[0] && k.isXML(c[0]);
while (a && c.length) {
for (var n in l.filter)
if ((f = l.leftMatch[n].exec(a)) != null && f[2]) {
var o, p, q = l.filter[n],
r = f[1];
g = !1, f.splice(1, 1);
if (r.substr(r.length - 1) === "\\") continue;
j === i && (i = []);
if (l.preFilter[n]) {
f = l.preFilter[n](f, j, d, i, e, m);
if (f) {
if (f === !0) continue
} else g = o = !0
}
if (f)
for (var s = 0;
(p = j[s]) != null; s++)
if (p) {
o = q(p, f, s, j);
var t = e ^ !!o;
d && o != null ? t ? g = !0 : j[s] = !1 : t && (i.push(p), g = !0)
} if (o !== b) {
d || (j = i), a = a.replace(l.match[n], "");
if (!g) return [];
break
}
} if (a === h)
if (g == null) k.error(a);
else break;
h = a
}
return j
}, k.error = function(a) {
throw "Syntax error, unrecognized expression: " + a
};
var l = k.selectors = {
order: ["ID", "NAME", "TAG"],
match: {
ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
},
leftMatch: {},
attrMap: {
"class": "className",
"for": "htmlFor"
},
attrHandle: {
href: function(a) {
return a.getAttribute("href")
},
type: function(a) {
return a.getAttribute("type")
}
},
relative: {
"+": function(a, b) {
var c = typeof b === "string",
d = c && !j.test(b),
e = c && !d;
d && (b = b.toLowerCase());
for (var f = 0, g = a.length, h; f < g; f++)
if (h = a[f]) {
while ((h = h.previousSibling) && h.nodeType !== 1) {}
a[f] = e || h && h.nodeName.toLowerCase() === b ? h || !1 : h === b
} e && k.filter(b, a, !0)
},
">": function(a, b) {
var c, d = typeof b === "string",
e = 0,
f = a.length;
if (d && !j.test(b)) {
b = b.toLowerCase();
for (; e < f; e++) {
c = a[e];
if (c) {
var g = c.parentNode;
a[e] = g.nodeName.toLowerCase() === b ? g : !1
}
}
} else {
for (; e < f; e++) c = a[e], c && (a[e] = d ? c.parentNode : c.parentNode === b);
d && k.filter(b, a, !0)
}
},
"": function(a, b, c) {
var d, f = e++,
g = u;
typeof b === "string" && !j.test(b) && (b = b.toLowerCase(), d = b, g = t), g("parentNode", b, f, a, d, c)
},
"~": function(a, b, c) {
var d, f = e++,
g = u;
typeof b === "string" && !j.test(b) && (b = b.toLowerCase(), d = b, g = t), g("previousSibling", b, f, a, d, c)
}
},
find: {
ID: function(a, b, c) {
if (typeof b.getElementById !== "undefined" && !c) {
var d = b.getElementById(a[1]);
return d && d.parentNode ? [d] : []
}
},
NAME: function(a, b) {
if (typeof b.getElementsByName !== "undefined") {
var c = [],
d = b.getElementsByName(a[1]);
for (var e = 0, f = d.length; e < f; e++) d[e].getAttribute("name") === a[1] && c.push(d[e]);
return c.length === 0 ? null : c
}
},
TAG: function(a, b) {
if (typeof b.getElementsByTagName !== "undefined") return b.getElementsByTagName(a[1])
}
},
preFilter: {
CLASS: function(a, b, c, d, e, f) {
a = " " + a[1].replace(i, "") + " ";
if (f) return a;
for (var g = 0, h;
(h = b[g]) != null; g++) h && (e ^ (h.className && (" " + h.className + " ").replace(/[\t\n\r]/g, " ").indexOf(a) >= 0) ? c || d.push(h) : c && (b[g] = !1));
return !1
},
ID: function(a) {
return a[1].replace(i, "")
},
TAG: function(a, b) {
return a[1].replace(i, "").toLowerCase()
},
CHILD: function(a) {
if (a[1] === "nth") {
a[2] || k.error(a[0]), a[2] = a[2].replace(/^\+|\s*/g, "");
var b = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2] === "even" && "2n" || a[2] === "odd" && "2n+1" || !/\D/.test(a[2]) && "0n+" + a[2] || a[2]);
a[2] = b[1] + (b[2] || 1) - 0, a[3] = b[3] - 0
} else a[2] && k.error(a[0]);
a[0] = e++;
return a
},
ATTR: function(a, b, c, d, e, f) {
var g = a[1] = a[1].replace(i, "");
!f && l.attrMap[g] && (a[1] = l.attrMap[g]), a[4] = (a[4] || a[5] || "").replace(i, ""), a[2] === "~=" && (a[4] = " " + a[4] + " ");
return a
},
PSEUDO: function(b, c, d, e, f) {
if (b[1] === "not")
if ((a.exec(b[3]) || "").length > 1 || /^\w/.test(b[3])) b[3] = k(b[3], null, null, c);
else {
var g = k.filter(b[3], c, d, !0 ^ f);
d || e.push.apply(e, g);
return !1
}
else if (l.match.POS.test(b[0]) || l.match.CHILD.test(b[0])) return !0;
return b
},
POS: function(a) {
a.unshift(!0);
return a
}
},
filters: {
enabled: function(a) {
return a.disabled === !1 && a.type !== "hidden"
},
disabled: function(a) {
return a.disabled === !0
},
checked: function(a) {
return a.checked === !0
},
selected: function(a) {
a.parentNode && a.parentNode.selectedIndex;
return a.selected === !0
},
parent: function(a) {
return !!a.firstChild
},
empty: function(a) {
return !a.firstChild
},
has: function(a, b, c) {
return !!k(c[3], a).length
},
header: function(a) {
return /h\d/i.test(a.nodeName)
},
text: function(a) {
var b = a.getAttribute("type"),
c = a.type;
return "text" === c && (b === c || b === null)
},
radio: function(a) {
return "radio" === a.type
},
checkbox: function(a) {
return "checkbox" === a.type
},
file: function(a) {
return "file" === a.type
},
password: function(a) {
return "password" === a.type
},
submit: function(a) {
return "submit" === a.type
},
image: function(a) {
return "image" === a.type
},
reset: function(a) {
return "reset" === a.type
},
button: function(a) {
return "button" === a.type || a.nodeName.toLowerCase() === "button"
},
input: function(a) {
return /input|select|textarea|button/i.test(a.nodeName)
}
},
setFilters: {
first: function(a, b) {
return b === 0
},
last: function(a, b, c, d) {
return b === d.length - 1
},
even: function(a, b) {
return b % 2 === 0
},
odd: function(a, b) {
return b % 2 === 1
},
lt: function(a, b, c) {
return b < c[3] - 0
},
gt: function(a, b, c) {
return b > c[3] - 0
},
nth: function(a, b, c) {
return c[3] - 0 === b
},
eq: function(a, b, c) {
return c[3] - 0 === b
}
},
filter: {
PSEUDO: function(a, b, c, d) {
var e = b[1],
f = l.filters[e];
if (f) return f(a, c, b, d);
if (e === "contains") return (a.textContent || a.innerText || k.getText([a]) || "").indexOf(b[3]) >= 0;
if (e === "not") {
var g = b[3];
for (var h = 0, i = g.length; h < i; h++)
if (g[h] === a) return !1;
return !0
}
k.error(e)
},
CHILD: function(a, b) {
var c = b[1],
d = a;
switch (c) {
case "only":
case "first":
while (d = d.previousSibling)
if (d.nodeType === 1) return !1;
if (c === "first") return !0;
d = a;
case "last":
while (d = d.nextSibling)
if (d.nodeType === 1) return !1;
return !0;
case "nth":
var e = b[2],
f = b[3];
if (e === 1 && f === 0) return !0;
var g = b[0],
h = a.parentNode;
if (h && (h.sizcache !== g || !a.nodeIndex)) {
var i = 0;
for (d = h.firstChild; d; d = d.nextSibling) d.nodeType === 1 && (d.nodeIndex = ++i);
h.sizcache = g
}
var j = a.nodeIndex - f;
return e === 0 ? j === 0 : j % e === 0 && j / e >= 0
}
},
ID: function(a, b) {
return a.nodeType === 1 && a.getAttribute("id") === b
},
TAG: function(a, b) {
return b === "*" && a.nodeType === 1 || a.nodeName.toLowerCase() === b
},
CLASS: function(a, b) {
return (" " + (a.className || a.getAttribute("class")) + " ").indexOf(b) > -1
},
ATTR: function(a, b) {
var c = b[1],
d = l.attrHandle[c] ? l.attrHandle[c](a) : a[c] != null ? a[c] : a.getAttribute(c),
e = d + "",
f = b[2],
g = b[4];
return d == null ? f === "!=" : f === "=" ? e === g : f === "*=" ? e.indexOf(g) >= 0 : f === "~=" ? (" " + e + " ").indexOf(g) >= 0 : g ? f === "!=" ? e !== g : f === "^=" ? e.indexOf(g) === 0 : f === "$=" ? e.substr(e
.length - g.length) === g : f === "|=" ? e === g || e.substr(0, g.length + 1) === g + "-" : !1 : e && d !== !1
},
POS: function(a, b, c, d) {
var e = b[2],
f = l.setFilters[e];
if (f) return f(a, c, b, d)
}
}
},
m = l.match.POS,
n = function(a, b) {
return "\\" + (b - 0 + 1)
};
for (var o in l.match) l.match[o] = new RegExp(l.match[o].source + /(?![^\[]*\])(?![^\(]*\))/.source), l.leftMatch[o] = new RegExp(/(^(?:.|\r|\n)*?)/.source + l.match[o].source.replace(/\\(\d+)/g, n));
var p = function(a, b) {
a = Array.prototype.slice.call(a, 0);
if (b) {
b.push.apply(b, a);
return b
}
return a
};
try {
Array.prototype.slice.call(c.documentElement.childNodes, 0)[0].nodeType
} catch (q) {
p = function(a, b) {
var c = 0,
d = b || [];
if (f.call(a) === "[object Array]") Array.prototype.push.apply(d, a);
else if (typeof a.length === "number")
for (var e = a.length; c < e; c++) d.push(a[c]);
else
for (; a[c]; c++) d.push(a[c]);
return d
}
}
var r, s;
c.documentElement.compareDocumentPosition ? r = function(a, b) {
if (a === b) {
g = !0;
return 0
}
if (!a.compareDocumentPosition || !b.compareDocumentPosition) return a.compareDocumentPosition ? -1 : 1;
return a.compareDocumentPosition(b) & 4 ? -1 : 1
} : (r = function(a, b) {
var c, d, e = [],
f = [],
h = a.parentNode,
i = b.parentNode,
j = h;
if (a === b) {
g = !0;
return 0
}
if (h === i) return s(a, b);
if (!h) return -1;
if (!i) return 1;
while (j) e.unshift(j), j = j.parentNode;
j = i;
while (j) f.unshift(j), j = j.parentNode;
c = e.length, d = f.length;
for (var k = 0; k < c && k < d; k++)
if (e[k] !== f[k]) return s(e[k], f[k]);
return k === c ? s(a, f[k], -1) : s(e[k], b, 1)
}, s = function(a, b, c) {
if (a === b) return c;
var d = a.nextSibling;
while (d) {
if (d === b) return -1;
d = d.nextSibling
}
return 1
}), k.getText = function(a) {
var b = "",
c;
for (var d = 0; a[d]; d++) c = a[d], c.nodeType === 3 || c.nodeType === 4 ? b += c.nodeValue : c.nodeType !== 8 && (b += k.getText(c.childNodes));
return b
},
function() {
var a = c.createElement("div"),
d = "script" + (new Date).getTime(),
e = c.documentElement;
a.innerHTML = "<a name='" + d + "'/>", e.insertBefore(a, e.firstChild), c.getElementById(d) && (l.find.ID = function(a, c, d) {
if (typeof c.getElementById !== "undefined" && !d) {
var e = c.getElementById(a[1]);
return e ? e.id === a[1] || typeof e.getAttributeNode !== "undefined" && e.getAttributeNode("id").nodeValue === a[1] ? [e] : b : []
}
}, l.filter.ID = function(a, b) {
var c = typeof a.getAttributeNode !== "undefined" && a.getAttributeNode("id");
return a.nodeType === 1 && c && c.nodeValue === b
}), e.removeChild(a), e = a = null
}(),
function() {
var a = c.createElement("div");
a.appendChild(c.createComment("")), a.getElementsByTagName("*").length > 0 && (l.find.TAG = function(a, b) {
var c = b.getElementsByTagName(a[1]);
if (a[1] === "*") {
var d = [];
for (var e = 0; c[e]; e++) c[e].nodeType === 1 && d.push(c[e]);
c = d
}
return c
}), a.innerHTML = "<a href='#'></a>", a.firstChild && typeof a.firstChild.getAttribute !== "undefined" && a.firstChild.getAttribute("href") !== "#" && (l.attrHandle.href = function(a) {
return a.getAttribute("href", 2)
}), a = null
}(), c.querySelectorAll && function() {
var a = k,
b = c.createElement("div"),
d = "__sizzle__";
b.innerHTML = "<p class='TEST'></p>";
if (!b.querySelectorAll || b.querySelectorAll(".TEST").length !== 0) {
k = function(b, e, f, g) {
e = e || c;
if (!g && !k.isXML(e)) {
var h = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);
if (h && (e.nodeType === 1 || e.nodeType === 9)) {
if (h[1]) return p(e.getElementsByTagName(b), f);
if (h[2] && l.find.CLASS && e.getElementsByClassName) return p(e.getElementsByClassName(h[2]), f)
}
if (e.nodeType === 9) {
if (b === "body" && e.body) return p([e.body], f);
if (h && h[3]) {
var i = e.getElementById(h[3]);
if (!i || !i.parentNode) return p([], f);
if (i.id === h[3]) return p([i], f)
}
try {
return p(e.querySelectorAll(b), f)
} catch (j) {}
} else if (e.nodeType === 1 && e.nodeName.toLowerCase() !== "object") {
var m = e,
n = e.getAttribute("id"),
o = n || d,
q = e.parentNode,
r = /^\s*[+~]/.test(b);
n ? o = o.replace(/'/g, "\\$&") : e.setAttribute("id", o), r && q && (e = e.parentNode);
try {
if (!r || q) return p(e.querySelectorAll("[id='" + o + "'] " + b), f)
} catch (s) {} finally {
n || m.removeAttribute("id")
}
}
}
return a(b, e, f, g)
};
for (var e in a) k[e] = a[e];
b = null
}
}(),
function() {
var a = c.documentElement,
b = a.matchesSelector || a.mozMatchesSelector || a.webkitMatchesSelector || a.msMatchesSelector;
if (b) {
var d = !b.call(c.createElement("div"), "div"),
e = !1;
try {
b.call(c.documentElement, "[test!='']:sizzle")
} catch (f) {
e = !0
}
k.matchesSelector = function(a, c) {
c = c.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
if (!k.isXML(a)) try {
if (e || !l.match.PSEUDO.test(c) && !/!=/.test(c)) {
var f = b.call(a, c);
if (f || !d || a.document && a.document.nodeType !== 11) return f
}
} catch (g) {}
return k(c, null, null, [a]).length > 0
}
}
}(),
function() {
var a = c.createElement("div");
a.innerHTML = "<div class='test e'></div><div class='test'></div>";
if (a.getElementsByClassName && a.getElementsByClassName("e").length !== 0) {
a.lastChild.className = "e";
if (a.getElementsByClassName("e").length === 1) return;
l.order.splice(1, 0, "CLASS"), l.find.CLASS = function(a, b, c) {
if (typeof b.getElementsByClassName !== "undefined" && !c) return b.getElementsByClassName(a[1])
}, a = null
}
}(), c.documentElement.contains ? k.contains = function(a, b) {
return a !== b && (a.contains ? a.contains(b) : !0)
} : c.documentElement.compareDocumentPosition ? k.contains = function(a, b) {
return !!(a.compareDocumentPosition(b) & 16)
} : k.contains = function() {
return !1
}, k.isXML = function(a) {
var b = (a ? a.ownerDocument || a : 0).documentElement;
return b ? b.nodeName !== "HTML" : !1
};
var v = function(a, b) {
var c, d = [],
e = "",
f = b.nodeType ? [b] : b;
while (c = l.match.PSEUDO.exec(a)) e += c[0], a = a.replace(l.match.PSEUDO, "");
a = l.relative[a] ? a + "*" : a;
for (var g = 0, h = f.length; g < h; g++) k(a, f[g], d);
return k.filter(e, d)
};
d.find = k, d.expr = k.selectors, d.expr[":"] = d.expr.filters, d.unique = k.uniqueSort, d.text = k.getText, d.isXMLDoc = k.isXML, d.contains = k.contains
}();
var I = /Until$/,
J = /^(?:parents|prevUntil|prevAll)/,
K = /,/,
L = /^.[^:#\[\.,]*$/,
M = Array.prototype.slice,
N = d.expr.match.POS,
O = {
children: !0,
contents: !0,
next: !0,
prev: !0
};
d.fn.extend({
find: function(a) {
var b = this.pushStack("", "find", a),
c = 0;
for (var e = 0, f = this.length; e < f; e++) {
c = b.length, d.find(a, this[e], b);
if (e > 0)
for (var g = c; g < b.length; g++)
for (var h = 0; h < c; h++)
if (b[h] === b[g]) {
b.splice(g--, 1);
break
}
}
return b
},
has: function(a) {
var b = d(a);
return this.filter(function() {
for (var a = 0, c = b.length; a < c; a++)
if (d.contains(this, b[a])) return !0
})
},
not: function(a) {
return this.pushStack(Q(this, a, !1), "not", a)
},
filter: function(a) {
return this.pushStack(Q(this, a, !0), "filter", a)
},
is: function(a) {
return !!a && d.filter(a, this).length > 0
},
closest: function(a, b) {
var c = [],
e, f, g = this[0];
if (d.isArray(a)) {
var h, i, j = {},
k = 1;
if (g && a.length) {
for (e = 0, f = a.length; e < f; e++) i = a[e], j[i] || (j[i] = d.expr.match.POS.test(i) ? d(i, b || this.context) : i);
while (g && g.ownerDocument && g !== b) {
for (i in j) h = j[i], (h.jquery ? h.index(g) > -1 : d(g).is(h)) && c.push({
selector: i,
elem: g,
level: k
});
g = g.parentNode, k++
}
}
return c
}
var l = N.test(a) ? d(a, b || this.context) : null;
for (e = 0, f = this.length; e < f; e++) {
g = this[e];
while (g) {
if (l ? l.index(g) > -1 : d.find.matchesSelector(g, a)) {
c.push(g);
break
}
g = g.parentNode;
if (!g || !g.ownerDocument || g === b) break
}
}
c = c.length > 1 ? d.unique(c) : c;
return this.pushStack(c, "closest", a)
},
index: function(a) {
if (!a || typeof a === "string") return d.inArray(this[0], a ? d(a) : this.parent().children());
return d.inArray(a.jquery ? a[0] : a, this)
},
add: function(a, b) {
var c = typeof a === "string" ? d(a, b) : d.makeArray(a),
e = d.merge(this.get(), c);
return this.pushStack(P(c[0]) || P(e[0]) ? e : d.unique(e))
},
andSelf: function() {
return this.add(this.prevObject)
}
}), d.each({
parent: function(a) {
var b = a.parentNode;
return b && b.nodeType !== 11 ? b : null
},
parents: function(a) {
return d.dir(a, "parentNode")
},
parentsUntil: function(a, b, c) {
return d.dir(a, "parentNode", c)
},
next: function(a) {
return d.nth(a, 2, "nextSibling")
},
prev: function(a) {
return d.nth(a, 2, "previousSibling")
},
nextAll: function(a) {
return d.dir(a, "nextSibling")
},
prevAll: function(a) {
return d.dir(a, "previousSibling")
},
nextUntil: function(a, b, c) {
return d.dir(a, "nextSibling", c)
},
prevUntil: function(a, b, c) {
return d.dir(a, "previousSibling", c)
},
siblings: function(a) {
return d.sibling(a.parentNode.firstChild, a)
},
children: function(a) {
return d.sibling(a.firstChild)
},
contents: function(a) {
return d.nodeName(a, "iframe") ? a.contentDocument || a.contentWindow.document : d.makeArray(a.childNodes)
}
}, function(a, b) {
d.fn[a] = function(c, e) {
var f = d.map(this, b, c),
g = M.call(arguments);
I.test(a) || (e = c), e && typeof e === "string" && (f = d.filter(e, f)), f = this.length > 1 && !O[a] ? d.unique(f) : f, (this.length > 1 || K.test(e)) && J.test(a) && (f = f.reverse());
return this.pushStack(f, a, g.join(","))
}
}), d.extend({
filter: function(a, b, c) {
c && (a = ":not(" + a + ")");
return b.length === 1 ? d.find.matchesSelector(b[0], a) ? [b[0]] : [] : d.find.matches(a, b)
},
dir: function(a, c, e) {
var f = [],
g = a[c];
while (g && g.nodeType !== 9 && (e === b || g.nodeType !== 1 || !d(g).is(e))) g.nodeType === 1 && f.push(g), g = g[c];
return f
},
nth: function(a, b, c, d) {
b = b || 1;
var e = 0;
for (; a; a = a[c])
if (a.nodeType === 1 && ++e === b) break;
return a
},
sibling: function(a, b) {
var c = [];
for (; a; a = a.nextSibling) a.nodeType === 1 && a !== b && c.push(a);
return c
}
});
var R = / jQuery\d+="(?:\d+|null)"/g,
S = /^\s+/,
T = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
U = /<([\w:]+)/,
V = /<tbody/i,
W = /<|&#?\w+;/,
X = /<(?:script|object|embed|option|style)/i,
Y = /checked\s*(?:[^=]|=\s*.checked.)/i,
Z = {
option: [1, "<select multiple='multiple'>", "</select>"],
legend: [1, "<fieldset>", "</fieldset>"],
thead: [1, "<table>", "</table>"],
tr: [2, "<table><tbody>", "</tbody></table>"],
td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
area: [1, "<map>", "</map>"],
_default: [0, "", ""]
};
Z.optgroup = Z.option, Z.tbody = Z.tfoot = Z.colgroup = Z.caption = Z.thead, Z.th = Z.td, d.support.htmlSerialize || (Z._default = [1, "div<div>", "</div>"]), d.fn.extend({
text: function(a) {
if (d.isFunction(a)) return this.each(function(b) {
var c = d(this);
c.text(a.call(this, b, c.text()))
});
if (typeof a !== "object" && a !== b) return this.empty().append((this[0] && this[0].ownerDocument || c).createTextNode(a));
return d.text(this)
},
wrapAll: function(a) {
if (d.isFunction(a)) return this.each(function(b) {
d(this).wrapAll(a.call(this, b))
});
if (this[0]) {
var b = d(a, this[0].ownerDocument).eq(0).clone(!0);
this[0].parentNode && b.insertBefore(this[0]), b.map(function() {
var a = this;
while (a.firstChild && a.firstChild.nodeType === 1) a = a.firstChild;
return a
}).append(this)
}
return this
},
wrapInner: function(a) {
if (d.isFunction(a)) return this.each(function(b) {
d(this).wrapInner(a.call(this, b))
});
return this.each(function() {
var b = d(this),
c = b.contents();
c.length ? c.wrapAll(a) : b.append(a)
})
},
wrap: function(a) {
return this.each(function() {
d(this).wrapAll(a)
})
},
unwrap: function() {
return this.parent().each(function() {
d.nodeName(this, "body") || d(this).replaceWith(this.childNodes)
}).end()
},
append: function() {
return this.domManip(arguments, !0, function(a) {
this.nodeType === 1 && this.appendChild(a)
})
},
prepend: function() {
return this.domManip(arguments, !0, function(a) {
this.nodeType === 1 && this.insertBefore(a, this.firstChild)
})
},
before: function() {
if (this[0] && this[0].parentNode) return this.domManip(arguments, !1, function(a) {
this.parentNode.insertBefore(a, this)
});
if (arguments.length) {
var a = d(arguments[0]);
a.push.apply(a, this.toArray());
return this.pushStack(a, "before", arguments)
}
},
after: function() {
if (this[0] && this[0].parentNode) return this.domManip(arguments, !1, function(a) {
this.parentNode.insertBefore(a, this.nextSibling)
});
if (arguments.length) {
var a = this.pushStack(this, "after", arguments);
a.push.apply(a, d(arguments[0]).toArray());
return a
}
},
remove: function(a, b) {
for (var c = 0, e;
(e = this[c]) != null; c++)
if (!a || d.filter(a, [e]).length) !b && e.nodeType === 1 && (d.cleanData(e.getElementsByTagName("*")), d.cleanData([e])), e.parentNode && e.parentNode.removeChild(e);
return this
},
empty: function() {
for (var a = 0, b;
(b = this[a]) != null; a++) {
b.nodeType === 1 && d.cleanData(b.getElementsByTagName("*"));
while (b.firstChild) b.removeChild(b.firstChild)
}
return this
},
clone: function(a, b) {
a = a == null ? !1 : a, b = b == null ? a : b;
return this.map(function() {
return d.clone(this, a, b)
})
},
html: function(a) {
if (a === b) return this[0] && this[0].nodeType === 1 ? this[0].innerHTML.replace(R, "") : null;
if (typeof a !== "string" || X.test(a) || !d.support.leadingWhitespace && S.test(a) || Z[(U.exec(a) || ["", ""])[1].toLowerCase()]) d.isFunction(a) ? this.each(function(b) {
var c = d(this);
c.html(a.call(this, b, c.html()))
}) : this.empty().append(a);
else {
a = a.replace(T, "<$1></$2>");
try {
for (var c = 0, e = this.length; c < e; c++) this[c].nodeType === 1 && (d.cleanData(this[c].getElementsByTagName("*")), this[c].innerHTML = a)
} catch (f) {
this.empty().append(a)
}
}
return this
},
replaceWith: function(a) {
if (this[0] && this[0].parentNode) {
if (d.isFunction(a)) return this.each(function(b) {
var c = d(this),
e = c.html();
c.replaceWith(a.call(this, b, e))
});
typeof a !== "string" && (a = d(a).detach());
return this.each(function() {
var b = this.nextSibling,
c = this.parentNode;
d(this).remove(), b ? d(b).before(a) : d(c).append(a)
})
}
return this.length ? this.pushStack(d(d.isFunction(a) ? a() : a), "replaceWith", a) : this
},
detach: function(a) {
return this.remove(a, !0)
},
domManip: function(a, c, e) {
var f, g, h, i, j = a[0],
k = [];
if (!d.support.checkClone && arguments.length === 3 && typeof j === "string" && Y.test(j)) return this.each(function() {
d(this).domManip(a, c, e, !0)
});
if (d.isFunction(j)) return this.each(function(f) {
var g = d(this);
a[0] = j.call(this, f, c ? g.html() : b), g.domManip(a, c, e)
});
if (this[0]) {
i = j && j.parentNode, d.support.parentNode && i && i.nodeType === 11 && i.childNodes.length === this.length ? f = {
fragment: i
} : f = d.buildFragment(a, this, k), h = f.fragment, h.childNodes.length === 1 ? g = h = h.firstChild : g = h.firstChild;
if (g) {
c = c && d.nodeName(g, "tr");
for (var l = 0, m = this.length, n = m - 1; l < m; l++) e.call(c ? $(this[l], g) : this[l], f.cacheable || m > 1 && l < n ? d.clone(h, !0, !0) : h)
}
k.length && d.each(k, bc)
}
return this
}
}), d.buildFragment = function(a, b, e) {
var f, g, h, i = b && b[0] ? b[0].ownerDocument || b[0] : c;
a.length === 1 && typeof a[0] === "string" && a[0].length < 512 && i === c && a[0].charAt(0) === "<" && !X.test(a[0]) && (d.support.checkClone || !Y.test(a[0])) && (g = !0, h = d.fragments[a[0]], h && (h !== 1 && (f = h))), f || (f = i
.createDocumentFragment(), d.clean(a, i, f, e)), g && (d.fragments[a[0]] = h ? f : 1);
return {
fragment: f,
cacheable: g
}
}, d.fragments = {}, d.each({
appendTo: "append",
prependTo: "prepend",
insertBefore: "before",
insertAfter: "after",
replaceAll: "replaceWith"
}, function(a, b) {
d.fn[a] = function(c) {
var e = [],
f = d(c),
g = this.length === 1 && this[0].parentNode;
if (g && g.nodeType === 11 && g.childNodes.length === 1 && f.length === 1) {
f[b](this[0]);
return this
}
for (var h = 0, i = f.length; h < i; h++) {
var j = (h > 0 ? this.clone(!0) : this).get();
d(f[h])[b](j), e = e.concat(j)
}
return this.pushStack(e, a, f.selector)
}
}), d.extend({
clone: function(a, b, c) {
var e = a.cloneNode(!0),
f, g, h;
if ((!d.support.noCloneEvent || !d.support.noCloneChecked) && (a.nodeType === 1 || a.nodeType === 11) && !d.isXMLDoc(a)) {
ba(a, e), f = bb(a), g = bb(e);
for (h = 0; f[h]; ++h) ba(f[h], g[h])
}
if (b) {
_(a, e);
if (c) {
f = bb(a), g = bb(e);
for (h = 0; f[h]; ++h) _(f[h], g[h])
}
}
return e
},
clean: function(a, b, e, f) {
b = b || c, typeof b.createElement === "undefined" && (b = b.ownerDocument || b[0] && b[0].ownerDocument || c);
var g = [];
for (var h = 0, i;
(i = a[h]) != null; h++) {
typeof i === "number" && (i += "");
if (!i) continue;
if (typeof i !== "string" || W.test(i)) {
if (typeof i === "string") {
i = i.replace(T, "<$1></$2>");
var j = (U.exec(i) || ["", ""])[1].toLowerCase(),
k = Z[j] || Z._default,
l = k[0],
m = b.createElement("div");
m.innerHTML = k[1] + i + k[2];
while (l--) m = m.lastChild;
if (!d.support.tbody) {
var n = V.test(i),
o = j === "table" && !n ? m.firstChild && m.firstChild.childNodes : k[1] === "<table>" && !n ? m.childNodes : [];
for (var p = o.length - 1; p >= 0; --p) d.nodeName(o[p], "tbody") && !o[p].childNodes.length && o[p].parentNode.removeChild(o[p])
}!d.support.leadingWhitespace && S.test(i) && m.insertBefore(b.createTextNode(S.exec(i)[0]), m.firstChild), i = m.childNodes
}
} else i = b.createTextNode(i);
i.nodeType ? g.push(i) : g = d.merge(g, i)
}
if (e)
for (h = 0; g[h]; h++) !f || !d.nodeName(g[h], "script") || g[h].type && g[h].type.toLowerCase() !== "text/javascript" ? (g[h].nodeType === 1 && g.splice.apply(g, [h + 1, 0].concat(d.makeArray(g[h].getElementsByTagName(
"script")))), e.appendChild(g[h])) : f.push(g[h].parentNode ? g[h].parentNode.removeChild(g[h]) : g[h]);
return g
},
cleanData: function(a) {
var b, c, e = d.cache,
f = d.expando,
g = d.event.special,
h = d.support.deleteExpando;
for (var i = 0, j;
(j = a[i]) != null; i++) {
if (j.nodeName && d.noData[j.nodeName.toLowerCase()]) continue;
c = j[d.expando];
if (c) {
b = e[c] && e[c][f];
if (b && b.events) {
for (var k in b.events) g[k] ? d.event.remove(j, k) : d.removeEvent(j, k, b.handle);
b.handle && (b.handle.elem = null)
}
h ? delete j[d.expando] : j.removeAttribute && j.removeAttribute(d.expando), delete e[c]
}
}
}
});
var bd = /alpha\([^)]*\)/i,
be = /opacity=([^)]*)/,
bf = /-([a-z])/ig,
bg = /([A-Z]|^ms)/g,
bh = /^-?\d+(?:px)?$/i,
bi = /^-?\d/,
bj = {
position: "absolute",
visibility: "hidden",
display: "block"
},
bk = ["Left", "Right"],
bl = ["Top", "Bottom"],
bm, bn, bo, bp = function(a, b) {
return b.toUpperCase()
};
d.fn.css = function(a, c) {
if (arguments.length === 2 && c === b) return this;
return d.access(this, a, c, !0, function(a, c, e) {
return e !== b ? d.style(a, c, e) : d.css(a, c)
})
}, d.extend({
cssHooks: {
opacity: {
get: function(a, b) {
if (b) {
var c = bm(a, "opacity", "opacity");
return c === "" ? "1" : c
}
return a.style.opacity
}
}
},
cssNumber: {
zIndex: !0,
fontWeight: !0,
opacity: !0,
zoom: !0,
lineHeight: !0
},
cssProps: {
"float": d.support.cssFloat ? "cssFloat" : "styleFloat"
},
style: function(a, c, e, f) {
if (a && a.nodeType !== 3 && a.nodeType !== 8 && a.style) {
var g, h = d.camelCase(c),
i = a.style,
j = d.cssHooks[h];
c = d.cssProps[h] || h;
if (e === b) {
if (j && "get" in j && (g = j.get(a, !1, f)) !== b) return g;
return i[c]
}
if (typeof e === "number" && isNaN(e) || e == null) return;
typeof e === "number" && !d.cssNumber[h] && (e += "px");
if (!j || !("set" in j) || (e = j.set(a, e)) !== b) try {
i[c] = e
} catch (k) {}
}
},
css: function(a, c, e) {
var f, g = d.camelCase(c),
h = d.cssHooks[g];
c = d.cssProps[g] || g;
if (h && "get" in h && (f = h.get(a, !0, e)) !== b) return f;
if (bm) return bm(a, c, g)
},
swap: function(a, b, c) {
var d = {};
for (var e in b) d[e] = a.style[e], a.style[e] = b[e];
c.call(a);
for (e in b) a.style[e] = d[e]
},
camelCase: function(a) {
return a.replace(bf, bp)
}
}), d.curCSS = d.css, d.each(["height", "width"], function(a, b) {
d.cssHooks[b] = {
get: function(a, c, e) {
var f;
if (c) {
a.offsetWidth !== 0 ? f = bq(a, b, e) : d.swap(a, bj, function() {
f = bq(a, b, e)
});
if (f <= 0) {
f = bm(a, b, b), f === "0px" && bo && (f = bo(a, b, b));
if (f != null) return f === "" || f === "auto" ? "0px" : f
}
if (f < 0 || f == null) {
f = a.style[b];
return f === "" || f === "auto" ? "0px" : f
}
return typeof f === "string" ? f : f + "px"
}
},
set: function(a, b) {
if (!bh.test(b)) return b;
b = parseFloat(b);
if (b >= 0) return b + "px"
}
}
}), d.support.opacity || (d.cssHooks.opacity = {
get: function(a, b) {
return be.test((b && a.currentStyle ? a.currentStyle.filter : a.style.filter) || "") ? parseFloat(RegExp.$1) / 100 + "" : b ? "1" : ""
},
set: function(a, b) {
var c = a.style;
c.zoom = 1;
var e = d.isNaN(b) ? "" : "alpha(opacity=" + b * 100 + ")",
f = c.filter || "";
c.filter = bd.test(f) ? f.replace(bd, e) : c.filter + " " + e
}
}), d(function() {
d.support.reliableMarginRight || (d.cssHooks.marginRight = {
get: function(a, b) {
var c;
d.swap(a, {
display: "inline-block"
}, function() {
b ? c = bm(a, "margin-right", "marginRight") : c = a.style.marginRight
});
return c
}
})
}), c.defaultView && c.defaultView.getComputedStyle && (bn = function(a, c, e) {
var f, g, h;
e = e.replace(bg, "-$1").toLowerCase();
if (!(g = a.ownerDocument.defaultView)) return b;
if (h = g.getComputedStyle(a, null)) f = h.getPropertyValue(e), f === "" && !d.contains(a.ownerDocument.documentElement, a) && (f = d.style(a, e));
return f
}), c.documentElement.currentStyle && (bo = function(a, b) {
var c, d = a.currentStyle && a.currentStyle[b],
e = a.runtimeStyle && a.runtimeStyle[b],
f = a.style;
!bh.test(d) && bi.test(d) && (c = f.left, e && (a.runtimeStyle.left = a.currentStyle.left), f.left = b === "fontSize" ? "1em" : d || 0, d = f.pixelLeft + "px", f.left = c, e && (a.runtimeStyle.left = e));
return d === "" ? "auto" : d
}), bm = bn || bo, d.expr && d.expr.filters && (d.expr.filters.hidden = function(a) {
var b = a.offsetWidth,
c = a.offsetHeight;
return b === 0 && c === 0 || !d.support.reliableHiddenOffsets && (a.style.display || d.css(a, "display")) === "none"
}, d.expr.filters.visible = function(a) {
return !d.expr.filters.hidden(a)
});
var br = /%20/g,
bs = /\[\]$/,
bt = /\r?\n/g,
bu = /#.*$/,
bv = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg,
bw = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
bx = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/,
by = /^(?:GET|HEAD)$/,
bz = /^\/\//,
bA = /\?/,
bB = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
bC = /^(?:select|textarea)/i,
bD = /\s+/,
bE = /([?&])_=[^&]*/,
bF = /(^|\-)([a-z])/g,
bG = function(a, b, c) {
return b + c.toUpperCase()
},
bH = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
bI = d.fn.load,
bJ = {},
bK = {},
bL, bM;
try {
bL = c.location.href
} catch (bN) {
bL = c.createElement("a"), bL.href = "", bL = bL.href
}
bM = bH.exec(bL.toLowerCase()) || [], d.fn.extend({
load: function(a, c, e) {
if (typeof a !== "string" && bI) return bI.apply(this, arguments);
if (!this.length) return this;
var f = a.indexOf(" ");
if (f >= 0) {
var g = a.slice(f, a.length);
a = a.slice(0, f)
}
var h = "GET";
c && (d.isFunction(c) ? (e = c, c = b) : typeof c === "object" && (c = d.param(c, d.ajaxSettings.traditional), h = "POST"));
var i = this;
d.ajax({
url: a,
type: h,
dataType: "html",
data: c,
complete: function(a, b, c) {
c = a.responseText, a.isResolved() && (a.done(function(a) {
c = a
}), i.html(g ? d("<div>").append(c.replace(bB, "")).find(g) : c)), e && i.each(e, [c, b, a])
}
});
return this
},
serialize: function() {
return d.param(this.serializeArray())
},
serializeArray: function() {
return this.map(function() {
return this.elements ? d.makeArray(this.elements) : this
}).filter(function() {
return this.name && !this.disabled && (this.checked || bC.test(this.nodeName) || bw.test(this.type))
}).map(function(a, b) {
var c = d(this).val();
return c == null ? null : d.isArray(c) ? d.map(c, function(a, c) {
return {
name: b.name,
value: a.replace(bt, "\r\n")
}
}) : {
name: b.name,
value: c.replace(bt, "\r\n")
}
}).get()
}
}), d.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function(a, b) {
d.fn[b] = function(a) {
return this.bind(b, a)
}
}), d.each(["get", "post"], function(a, c) {
d[c] = function(a, e, f, g) {
d.isFunction(e) && (g = g || f, f = e, e = b);
return d.ajax({
type: c,
url: a,
data: e,
success: f,
dataType: g
})
}
}), d.extend({
getScript: function(a, c) {
return d.get(a, b, c, "script")
},
getJSON: function(a, b, c) {
return d.get(a, b, c, "json")
},
ajaxSetup: function(a, b) {
b ? d.extend(!0, a, d.ajaxSettings, b) : (b = a, a = d.extend(!0, d.ajaxSettings, b));
for (var c in {
context: 1,
url: 1
}) c in b ? a[c] = b[c] : c in d.ajaxSettings && (a[c] = d.ajaxSettings[c]);
return a
},
ajaxSettings: {
url: bL,
isLocal: bx.test(bM[1]),
global: !0,
type: "GET",
contentType: "application/x-www-form-urlencoded",
processData: !0,
async: !0,
accepts: {
xml: "application/xml, text/xml",
html: "text/html",
text: "text/plain",
json: "application/json, text/javascript",
"*": "*/*"
},
contents: {
xml: /xml/,
html: /html/,
json: /json/
},
responseFields: {
xml: "responseXML",
text: "responseText"
},
converters: {
"* text": a.String,
"text html": !0,
"text json": d.parseJSON,
"text xml": d.parseXML
}
},
ajaxPrefilter: bO(bJ),
ajaxTransport: bO(bK),
ajax: function(a, c) {
function v(a, c, l, n) {
if (r !== 2) {
r = 2, p && clearTimeout(p), o = b, m = n || "", u.readyState = a ? 4 : 0;
var q, t, v, w = l ? bR(e, u, l) : b,
x, y;
if (a >= 200 && a < 300 || a === 304) {
if (e.ifModified) {
if (x = u.getResponseHeader("Last-Modified")) d.lastModified[k] = x;
if (y = u.getResponseHeader("Etag")) d.etag[k] = y
}
if (a === 304) c = "notmodified", q = !0;
else try {
t = bS(e, w), c = "success", q = !0
} catch (z) {
c = "parsererror", v = z
}
} else {
v = c;
if (!c || a) c = "error", a < 0 && (a = 0)
}
u.status = a, u.statusText = c, q ? h.resolveWith(f, [t, c, u]) : h.rejectWith(f, [u, c, v]), u.statusCode(j), j = b, s && g.trigger("ajax" + (q ? "Success" : "Error"), [u, e, q ? t : v]), i.resolveWith(f, [u, c]), s && (g
.trigger("ajaxComplete", [u, e]), --d.active || d.event.trigger("ajaxStop"))
}
}
typeof a === "object" && (c = a, a = b), c = c || {};
var e = d.ajaxSetup({}, c),
f = e.context || e,
g = f !== e && (f.nodeType || f instanceof d) ? d(f) : d.event,
h = d.Deferred(),
i = d._Deferred(),
j = e.statusCode || {},
k, l = {},
m, n, o, p, q, r = 0,
s, t, u = {
readyState: 0,
setRequestHeader: function(a, b) {
r || (l[a.toLowerCase().replace(bF, bG)] = b);
return this
},
getAllResponseHeaders: function() {
return r === 2 ? m : null
},
getResponseHeader: function(a) {
var c;
if (r === 2) {
if (!n) {
n = {};
while (c = bv.exec(m)) n[c[1].toLowerCase()] = c[2]
}
c = n[a.toLowerCase()]
}
return c === b ? null : c
},
overrideMimeType: function(a) {
r || (e.mimeType = a);
return this
},
abort: function(a) {
a = a || "abort", o && o.abort(a), v(0, a);
return this
}
};
h.promise(u), u.success = u.done, u.error = u.fail, u.complete = i.done, u.statusCode = function(a) {
if (a) {
var b;
if (r < 2)
for (b in a) j[b] = [j[b], a[b]];
else b = a[u.status], u.then(b, b)
}
return this
}, e.url = ((a || e.url) + "").replace(bu, "").replace(bz, bM[1] + "//"), e.dataTypes = d.trim(e.dataType || "*").toLowerCase().split(bD), e.crossDomain == null && (q = bH.exec(e.url.toLowerCase()), e.crossDomain = q && (q[1] !=
bM[1] || q[2] != bM[2] || (q[3] || (q[1] === "http:" ? 80 : 443)) != (bM[3] || (bM[1] === "http:" ? 80 : 443)))), e.data && e.processData && typeof e.data !== "string" && (e.data = d.param(e.data, e.traditional)), bP(bJ, e, c,
u);
if (r === 2) return !1;
s = e.global, e.type = e.type.toUpperCase(), e.hasContent = !by.test(e.type), s && d.active++ === 0 && d.event.trigger("ajaxStart");
if (!e.hasContent) {
e.data && (e.url += (bA.test(e.url) ? "&" : "?") + e.data), k = e.url;
if (e.cache === !1) {
var w = d.now(),
x = e.url.replace(bE, "$1_=" + w);
e.url = x + (x === e.url ? (bA.test(e.url) ? "&" : "?") + "_=" + w : "")
}
}
if (e.data && e.hasContent && e.contentType !== !1 || c.contentType) l["Content-Type"] = e.contentType;
e.ifModified && (k = k || e.url, d.lastModified[k] && (l["If-Modified-Since"] = d.lastModified[k]), d.etag[k] && (l["If-None-Match"] = d.etag[k])), l.Accept = e.dataTypes[0] && e.accepts[e.dataTypes[0]] ? e.accepts[e.dataTypes[
0]] + (e.dataTypes[0] !== "*" ? ", */*; q=0.01" : "") : e.accepts["*"];
for (t in e.headers) u.setRequestHeader(t, e.headers[t]);
if (e.beforeSend && (e.beforeSend.call(f, u, e) === !1 || r === 2)) {
u.abort();
return !1
}
for (t in {
success: 1,
error: 1,
complete: 1
}) u[t](e[t]);
o = bP(bK, e, c, u);
if (o) {
u.readyState = 1, s && g.trigger("ajaxSend", [u, e]), e.async && e.timeout > 0 && (p = setTimeout(function() {
u.abort("timeout")
}, e.timeout));
try {
r = 1, o.send(l, v)
} catch (y) {
status < 2 ? v(-1, y) : d.error(y)
}
} else v(-1, "No Transport");
return u
},
param: function(a, c) {
var e = [],
f = function(a, b) {
b = d.isFunction(b) ? b() : b, e[e.length] = encodeURIComponent(a) + "=" + encodeURIComponent(b)
};
c === b && (c = d.ajaxSettings.traditional);
if (d.isArray(a) || a.jquery && !d.isPlainObject(a)) d.each(a, function() {
f(this.name, this.value)
});
else
for (var g in a) bQ(g, a[g], c, f);
return e.join("&").replace(br, "+")
}
}), d.extend({
active: 0,
lastModified: {},
etag: {}
});
var bT = d.now(),
bU = /(\=)\?(&|$)|\?\?/i;
d.ajaxSetup({
jsonp: "callback",
jsonpCallback: function() {
return d.expando + "_" + bT++
}
}), d.ajaxPrefilter("json jsonp", function(b, c, e) {
var f = typeof b.data === "string";
if (b.dataTypes[0] === "jsonp" || c.jsonpCallback || c.jsonp != null || b.jsonp !== !1 && (bU.test(b.url) || f && bU.test(b.data))) {
var g, h = b.jsonpCallback = d.isFunction(b.jsonpCallback) ? b.jsonpCallback() : b.jsonpCallback,
i = a[h],
j = b.url,
k = b.data,
l = "$1" + h + "$2",
m = function() {
a[h] = i, g && d.isFunction(i) && a[h](g[0])
};
b.jsonp !== !1 && (j = j.replace(bU, l), b.url === j && (f && (k = k.replace(bU, l)), b.data === k && (j += (/\?/.test(j) ? "&" : "?") + b.jsonp + "=" + h))), b.url = j, b.data = k, a[h] = function(a) {
g = [a]
}, e.then(m, m), b.converters["script json"] = function() {
g || d.error(h + " was not called");
return g[0]
}, b.dataTypes[0] = "json";
return "script"
}
}), d.ajaxSetup({
accepts: {
script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
},
contents: {
script: /javascript|ecmascript/
},
converters: {
"text script": function(a) {
d.globalEval(a);
return a
}
}
}), d.ajaxPrefilter("script", function(a) {
a.cache === b && (a.cache = !1), a.crossDomain && (a.type = "GET", a.global = !1)
}), d.ajaxTransport("script", function(a) {
if (a.crossDomain) {
var d, e = c.head || c.getElementsByTagName("head")[0] || c.documentElement;
return {
send: function(f, g) {
d = c.createElement("script"), d.async = "async", a.scriptCharset && (d.charset = a.scriptCharset), d.src = a.url, d.onload = d.onreadystatechange = function(a, c) {
if (!d.readyState || /loaded|complete/.test(d.readyState)) d.onload = d.onreadystatechange = null, e && d.parentNode && e.removeChild(d), d = b, c || g(200, "success")
}, e.insertBefore(d, e.firstChild)
},
abort: function() {
d && d.onload(0, 1)
}
}
}
});
var bV = d.now(),
bW, bX;
d.ajaxSettings.xhr = a.ActiveXObject ? function() {
return !this.isLocal && bZ() || b$()
} : bZ, bX = d.ajaxSettings.xhr(), d.support.ajax = !!bX, d.support.cors = bX && "withCredentials" in bX, bX = b, d.support.ajax && d.ajaxTransport(function(a) {
if (!a.crossDomain || d.support.cors) {
var c;
return {
send: function(e, f) {
var g = a.xhr(),
h, i;
a.username ? g.open(a.type, a.url, a.async, a.username, a.password) : g.open(a.type, a.url, a.async);
if (a.xhrFields)
for (i in a.xhrFields) g[i] = a.xhrFields[i];
a.mimeType && g.overrideMimeType && g.overrideMimeType(a.mimeType), !a.crossDomain && !e["X-Requested-With"] && (e["X-Requested-With"] = "XMLHttpRequest");
try {
for (i in e) g.setRequestHeader(i, e[i])
} catch (j) {}
g.send(a.hasContent && a.data || null), c = function(e, i) {
var j, k, l, m, n;
try {
if (c && (i || g.readyState === 4)) {
c = b, h && (g.onreadystatechange = d.noop, delete bW[h]);
if (i) g.readyState !== 4 && g.abort();
else {
j = g.status, l = g.getAllResponseHeaders(), m = {}, n = g.responseXML, n && n.documentElement && (m.xml = n), m.text = g.responseText;
try {
k = g.statusText
} catch (o) {
k = ""
}
j || !a.isLocal || a.crossDomain ? j === 1223 && (j = 204) : j = m.text ? 200 : 404
}
}
} catch (p) {
i || f(-1, p)
}
m && f(j, k, m, l)
}, a.async && g.readyState !== 4 ? (bW || (bW = {}, bY()), h = bV++, g.onreadystatechange = bW[h] = c) : c()
},
abort: function() {
c && c(0, 1)
}
}
}
});
var b_ = {},
ca = /^(?:toggle|show|hide)$/,
cb = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
cc, cd = [
["height", "marginTop", "marginBottom", "paddingTop", "paddingBottom"],
["width", "marginLeft", "marginRight", "paddingLeft", "paddingRight"],
["opacity"]
];
d.fn.extend({
show: function(a, b, c) {
var e, f;
if (a || a === 0) return this.animate(ce("show", 3), a, b, c);
for (var g = 0, h = this.length; g < h; g++) e = this[g], f = e.style.display, !d._data(e, "olddisplay") && f === "none" && (f = e.style.display = ""), f === "" && d.css(e, "display") === "none" && d._data(e, "olddisplay", cf(e
.nodeName));
for (g = 0; g < h; g++) {
e = this[g], f = e.style.display;
if (f === "" || f === "none") e.style.display = d._data(e, "olddisplay") || ""
}
return this
},
hide: function(a, b, c) {
if (a || a === 0) return this.animate(ce("hide", 3), a, b, c);
for (var e = 0, f = this.length; e < f; e++) {
var g = d.css(this[e], "display");
g !== "none" && !d._data(this[e], "olddisplay") && d._data(this[e], "olddisplay", g)
}
for (e = 0; e < f; e++) this[e].style.display = "none";
return this
},
_toggle: d.fn.toggle,
toggle: function(a, b, c) {
var e = typeof a === "boolean";
d.isFunction(a) && d.isFunction(b) ? this._toggle.apply(this, arguments) : a == null || e ? this.each(function() {
var b = e ? a : d(this).is(":hidden");
d(this)[b ? "show" : "hide"]()
}) : this.animate(ce("toggle", 3), a, b, c);
return this
},
fadeTo: function(a, b, c, d) {
return this.filter(":hidden").css("opacity", 0).show().end().animate({
opacity: b
}, a, c, d)
},
animate: function(a, b, c, e) {
var f = d.speed(b, c, e);
if (d.isEmptyObject(a)) return this.each(f.complete);
return this[f.queue === !1 ? "each" : "queue"](function() {
var b = d.extend({}, f),
c, e = this.nodeType === 1,
g = e && d(this).is(":hidden"),
h = this;
for (c in a) {
var i = d.camelCase(c);
c !== i && (a[i] = a[c], delete a[c], c = i);
if (a[c] === "hide" && g || a[c] === "show" && !g) return b.complete.call(this);
if (e && (c === "height" || c === "width")) {
b.overflow = [this.style.overflow, this.style.overflowX, this.style.overflowY];
if (d.css(this, "display") === "inline" && d.css(this, "float") === "none")
if (d.support.inlineBlockNeedsLayout) {
var j = cf(this.nodeName);
j === "inline" ? this.style.display = "inline-block" : (this.style.display = "inline", this.style.zoom = 1)
} else this.style.display = "inline-block"
}
d.isArray(a[c]) && ((b.specialEasing = b.specialEasing || {})[c] = a[c][1], a[c] = a[c][0])
}
b.overflow != null && (this.style.overflow = "hidden"), b.curAnim = d.extend({}, a), d.each(a, function(c, e) {
var f = new d.fx(h, b, c);
if (ca.test(e)) f[e === "toggle" ? g ? "show" : "hide" : e](a);
else {
var i = cb.exec(e),
j = f.cur();
if (i) {
var k = parseFloat(i[2]),
l = i[3] || (d.cssNumber[c] ? "" : "px");
l !== "px" && (d.style(h, c, (k || 1) + l), j = (k || 1) / f.cur() * j, d.style(h, c, j + l)), i[1] && (k = (i[1] === "-=" ? -1 : 1) * k + j), f.custom(j, k, l)
} else f.custom(j, e, "")
}
});
return !0
})
},
stop: function(a, b) {
var c = d.timers;
a && this.queue([]), this.each(function() {
for (var a = c.length - 1; a >= 0; a--) c[a].elem === this && (b && c[a](!0), c.splice(a, 1))
}), b || this.dequeue();
return this
}
}), d.each({
slideDown: ce("show", 1),
slideUp: ce("hide", 1),
slideToggle: ce("toggle", 1),
fadeIn: {
opacity: "show"
},
fadeOut: {
opacity: "hide"
},
fadeToggle: {
opacity: "toggle"
}
}, function(a, b) {
d.fn[a] = function(a, c, d) {
return this.animate(b, a, c, d)
}
}), d.extend({
speed: function(a, b, c) {
var e = a && typeof a === "object" ? d.extend({}, a) : {
complete: c || !c && b || d.isFunction(a) && a,
duration: a,
easing: c && b || b && !d.isFunction(b) && b
};
e.duration = d.fx.off ? 0 : typeof e.duration === "number" ? e.duration : e.duration in d.fx.speeds ? d.fx.speeds[e.duration] : d.fx.speeds._default, e.old = e.complete, e.complete = function() {
e.queue !== !1 && d(this).dequeue(), d.isFunction(e.old) && e.old.call(this)
};
return e
},
easing: {
linear: function(a, b, c, d) {
return c + d * a
},
swing: function(a, b, c, d) {
return (-Math.cos(a * Math.PI) / 2 + .5) * d + c
}
},
timers: [],
fx: function(a, b, c) {
this.options = b, this.elem = a, this.prop = c, b.orig || (b.orig = {})
}
}), d.fx.prototype = {
update: function() {
this.options.step && this.options.step.call(this.elem, this.now, this), (d.fx.step[this.prop] || d.fx.step._default)(this)
},
cur: function() {
if (this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null)) return this.elem[this.prop];
var a, b = d.css(this.elem, this.prop);
return isNaN(a = parseFloat(b)) ? !b || b === "auto" ? 0 : b : a
},
custom: function(a, b, c) {
function g(a) {
return e.step(a)
}
var e = this,
f = d.fx;
this.startTime = d.now(), this.start = a, this.end = b, this.unit = c || this.unit || (d.cssNumber[this.prop] ? "" : "px"), this.now = this.start, this.pos = this.state = 0, g.elem = this.elem, g() && d.timers.push(g) && !cc && (
cc = setInterval(f.tick, f.interval))
},
show: function() {
this.options.orig[this.prop] = d.style(this.elem, this.prop), this.options.show = !0, this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur()), d(this.elem).show()
},
hide: function() {
this.options.orig[this.prop] = d.style(this.elem, this.prop), this.options.hide = !0, this.custom(this.cur(), 0)
},
step: function(a) {
var b = d.now(),
c = !0;
if (a || b >= this.options.duration + this.startTime) {
this.now = this.end, this.pos = this.state = 1, this.update(), this.options.curAnim[this.prop] = !0;
for (var e in this.options.curAnim) this.options.curAnim[e] !== !0 && (c = !1);
if (c) {
if (this.options.overflow != null && !d.support.shrinkWrapBlocks) {
var f = this.elem,
g = this.options;
d.each(["", "X", "Y"], function(a, b) {
f.style["overflow" + b] = g.overflow[a]
})
}
this.options.hide && d(this.elem).hide();
if (this.options.hide || this.options.show)
for (var h in this.options.curAnim) d.style(this.elem, h, this.options.orig[h]);
this.options.complete.call(this.elem)
}
return !1
}
var i = b - this.startTime;
this.state = i / this.options.duration;
var j = this.options.specialEasing && this.options.specialEasing[this.prop],
k = this.options.easing || (d.easing.swing ? "swing" : "linear");
this.pos = d.easing[j || k](this.state, i, 0, 1, this.options.duration), this.now = this.start + (this.end - this.start) * this.pos, this.update();
return !0
}
}, d.extend(d.fx, {
tick: function() {
var a = d.timers;
for (var b = 0; b < a.length; b++) a[b]() || a.splice(b--, 1);
a.length || d.fx.stop()
},
interval: 13,
stop: function() {
clearInterval(cc), cc = null
},
speeds: {
slow: 600,
fast: 200,
_default: 400
},
step: {
opacity: function(a) {
d.style(a.elem, "opacity", a.now)
},
_default: function(a) {
a.elem.style && a.elem.style[a.prop] != null ? a.elem.style[a.prop] = (a.prop === "width" || a.prop === "height" ? Math.max(0, a.now) : a.now) + a.unit : a.elem[a.prop] = a.now
}
}
}), d.expr && d.expr.filters && (d.expr.filters.animated = function(a) {
return d.grep(d.timers, function(b) {
return a === b.elem
}).length
});
var cg = /^t(?:able|d|h)$/i,
ch = /^(?:body|html)$/i;
"getBoundingClientRect" in c.documentElement ? d.fn.offset = function(a) {
var b = this[0],
c;
if (a) return this.each(function(b) {
d.offset.setOffset(this, a, b)
});
if (!b || !b.ownerDocument) return null;
if (b === b.ownerDocument.body) return d.offset.bodyOffset(b);
try {
c = b.getBoundingClientRect()
} catch (e) {}
var f = b.ownerDocument,
g = f.documentElement;
if (!c || !d.contains(g, b)) return c ? {
top: c.top,
left: c.left
} : {
top: 0,
left: 0
};
var h = f.body,
i = ci(f),
j = g.clientTop || h.clientTop || 0,
k = g.clientLeft || h.clientLeft || 0,
l = i.pageYOffset || d.support.boxModel && g.scrollTop || h.scrollTop,
m = i.pageXOffset || d.support.boxModel && g.scrollLeft || h.scrollLeft,
n = c.top + l - j,
o = c.left + m - k;
return {
top: n,
left: o
}
} : d.fn.offset = function(a) {
var b = this[0];
if (a) return this.each(function(b) {
d.offset.setOffset(this, a, b)
});
if (!b || !b.ownerDocument) return null;
if (b === b.ownerDocument.body) return d.offset.bodyOffset(b);
d.offset.initialize();
var c, e = b.offsetParent,
f = b,
g = b.ownerDocument,
h = g.documentElement,
i = g.body,
j = g.defaultView,
k = j ? j.getComputedStyle(b, null) : b.currentStyle,
l = b.offsetTop,
m = b.offsetLeft;
while ((b = b.parentNode) && b !== i && b !== h) {
if (d.offset.supportsFixedPosition && k.position === "fixed") break;
c = j ? j.getComputedStyle(b, null) : b.currentStyle, l -= b.scrollTop, m -= b.scrollLeft, b === e && (l += b.offsetTop, m += b.offsetLeft, d.offset.doesNotAddBorder && (!d.offset.doesAddBorderForTableAndCells || !cg.test(b
.nodeName)) && (l += parseFloat(c.borderTopWidth) || 0, m += parseFloat(c.borderLeftWidth) || 0), f = e, e = b.offsetParent), d.offset.subtractsBorderForOverflowNotVisible && c.overflow !== "visible" && (l += parseFloat(c
.borderTopWidth) || 0, m += parseFloat(c.borderLeftWidth) || 0), k = c
}
if (k.position === "relative" || k.position === "static") l += i.offsetTop, m += i.offsetLeft;
d.offset.supportsFixedPosition && k.position === "fixed" && (l += Math.max(h.scrollTop, i.scrollTop), m += Math.max(h.scrollLeft, i.scrollLeft));
return {
top: l,
left: m
}
}, d.offset = {
initialize: function() {
var a = c.body,
b = c.createElement("div"),
e, f, g, h, i = parseFloat(d.css(a, "marginTop")) || 0,
j =
"<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
d.extend(b.style, {
position: "absolute",
top: 0,
left: 0,
margin: 0,
border: 0,
width: "1px",
height: "1px",
visibility: "hidden"
}), b.innerHTML = j, a.insertBefore(b, a.firstChild), e = b.firstChild, f = e.firstChild, h = e.nextSibling.firstChild.firstChild, this.doesNotAddBorder = f.offsetTop !== 5, this.doesAddBorderForTableAndCells = h.offsetTop === 5,
f.style.position = "fixed", f.style.top = "20px", this.supportsFixedPosition = f.offsetTop === 20 || f.offsetTop === 15, f.style.position = f.style.top = "", e.style.overflow = "hidden", e.style.position = "relative", this
.subtractsBorderForOverflowNotVisible = f.offsetTop === -5, this.doesNotIncludeMarginInBodyOffset = a.offsetTop !== i, a.removeChild(b), d.offset.initialize = d.noop
},
bodyOffset: function(a) {
var b = a.offsetTop,
c = a.offsetLeft;
d.offset.initialize(), d.offset.doesNotIncludeMarginInBodyOffset && (b += parseFloat(d.css(a, "marginTop")) || 0, c += parseFloat(d.css(a, "marginLeft")) || 0);
return {
top: b,
left: c
}
},
setOffset: function(a, b, c) {
var e = d.css(a, "position");
e === "static" && (a.style.position = "relative");
var f = d(a),
g = f.offset(),
h = d.css(a, "top"),
i = d.css(a, "left"),
j = (e === "absolute" || e === "fixed") && d.inArray("auto", [h, i]) > -1,
k = {},
l = {},
m, n;
j && (l = f.position()), m = j ? l.top : parseInt(h, 10) || 0, n = j ? l.left : parseInt(i, 10) || 0, d.isFunction(b) && (b = b.call(a, c, g)), b.top != null && (k.top = b.top - g.top + m), b.left != null && (k.left = b.left - g
.left + n), "using" in b ? b.using.call(a, k) : f.css(k)
}
}, d.fn.extend({
position: function() {
if (!this[0]) return null;
var a = this[0],
b = this.offsetParent(),
c = this.offset(),
e = ch.test(b[0].nodeName) ? {
top: 0,
left: 0
} : b.offset();
c.top -= parseFloat(d.css(a, "marginTop")) || 0, c.left -= parseFloat(d.css(a, "marginLeft")) || 0, e.top += parseFloat(d.css(b[0], "borderTopWidth")) || 0, e.left += parseFloat(d.css(b[0], "borderLeftWidth")) || 0;
return {
top: c.top - e.top,
left: c.left - e.left
}
},
offsetParent: function() {
return this.map(function() {
var a = this.offsetParent || c.body;
while (a && (!ch.test(a.nodeName) && d.css(a, "position") === "static")) a = a.offsetParent;
return a
})
}
}), d.each(["Left", "Top"], function(a, c) {
var e = "scroll" + c;
d.fn[e] = function(c) {
var f = this[0],
g;
if (!f) return null;
if (c !== b) return this.each(function() {
g = ci(this), g ? g.scrollTo(a ? d(g).scrollLeft() : c, a ? c : d(g).scrollTop()) : this[e] = c
});
g = ci(f);
return g ? "pageXOffset" in g ? g[a ? "pageYOffset" : "pageXOffset"] : d.support.boxModel && g.document.documentElement[e] || g.document.body[e] : f[e]
}
}), d.each(["Height", "Width"], function(a, c) {
var e = c.toLowerCase();
d.fn["inner" + c] = function() {
return this[0] ? parseFloat(d.css(this[0], e, "padding")) : null
}, d.fn["outer" + c] = function(a) {
return this[0] ? parseFloat(d.css(this[0], e, a ? "margin" : "border")) : null
}, d.fn[e] = function(a) {
var f = this[0];
if (!f) return a == null ? null : this;
if (d.isFunction(a)) return this.each(function(b) {
var c = d(this);
c[e](a.call(this, b, c[e]()))
});
if (d.isWindow(f)) {
var g = f.document.documentElement["client" + c];
return f.document.compatMode === "CSS1Compat" && g || f.document.body["client" + c] || g
}
if (f.nodeType === 9) return Math.max(f.documentElement["client" + c], f.body["scroll" + c], f.documentElement["scroll" + c], f.body["offset" + c], f.documentElement["offset" + c]);
if (a === b) {
var h = d.css(f, e),
i = parseFloat(h);
return d.isNaN(i) ? h : i
}
return this.css(e, typeof a === "string" ? a : a + "px")
}
}), a.jQuery = a.$ = d
})(window);
/*!
* jQuery Cycle Plugin (with Transition Definitions)
* Examples and documentation at: http://jquery.malsup.com/cycle/
* Copyright (c) 2007-2013 M. Alsup
* Version: 3.0.3 (11-JUL-2013)
* Dual licensed under the MIT and GPL licenses.
* http://jquery.malsup.com/license.html
* Requires: jQuery v1.7.1 or later
*/
;
(function($, undefined) {
"use strict";
var ver = '3.0.3';
function debug(s) {
if ($.fn.cycle.debug) log(s);
}
function log() {
/*global console */
if (window.console && console.log) console.log('[cycle] ' + Array.prototype.join.call(arguments, ' '));
}
$.expr[':'].paused = function(el) {
return el.cyclePause;
};
// the options arg can be...
// a number - indicates an immediate transition should occur to the given slide index
// a string - 'pause', 'resume', 'toggle', 'next', 'prev', 'stop', 'destroy' or the name of a transition effect (ie, 'fade', 'zoom', etc)
// an object - properties to control the slideshow
//
// the arg2 arg can be...
// the name of an fx (only used in conjunction with a numeric value for 'options')
// the value true (only used in first arg == 'resume') and indicates
// that the resume should occur immediately (not wait for next timeout)
$.fn.cycle = function(options, arg2) {
var o = {
s: this.selector,
c: this.context
};
// in 1.3+ we can fix mistakes with the ready state
if (this.length === 0 && options != 'stop') {
if (!$.isReady && o.s) {
log('DOM not ready, queuing slideshow');
$(function() {
$(o.s, o.c).cycle(options, arg2);
});
return this;
}
// is your DOM ready? http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
return this;
}
// iterate the matched nodeset
return this.each(function() {
var opts = handleArguments(this, options, arg2);
if (opts === false) return;
opts.updateActivePagerLink = opts.updateActivePagerLink || $.fn.cycle.updateActivePagerLink;
// stop existing slideshow for this container (if there is one)
if (this.cycleTimeout) clearTimeout(this.cycleTimeout);
this.cycleTimeout = this.cyclePause = 0;
this.cycleStop = 0; // issue #108
var $cont = $(this);
var $slides = opts.slideExpr ? $(opts.slideExpr, this) : $cont.children();
var els = $slides.get();
if (els.length < 2) {
log('terminating; too few slides: ' + els.length);
return;
}
var opts2 = buildOptions($cont, $slides, els, opts, o);
if (opts2 === false) return;
var startTime = opts2.continuous ? 10 : getTimeout(els[opts2.currSlide], els[opts2.nextSlide], opts2, !opts2.backwards);
// if it's an auto slideshow, kick it off
if (startTime) {
startTime += (opts2.delay || 0);
if (startTime < 10) startTime = 10;
debug('first timeout: ' + startTime);
this.cycleTimeout = setTimeout(function() {
go(els, opts2, 0, !opts.backwards);
}, startTime);
}
});
};
function triggerPause(cont, byHover, onPager) {
var opts = $(cont).data('cycle.opts');
if (!opts) return;
var paused = !!cont.cyclePause;
if (paused && opts.paused) opts.paused(cont, opts, byHover, onPager);
else if (!paused && opts.resumed) opts.resumed(cont, opts, byHover, onPager);
}
// process the args that were passed to the plugin fn
function handleArguments(cont, options, arg2) {
if (cont.cycleStop === undefined) cont.cycleStop = 0;
if (options === undefined || options === null) options = {};
if (options.constructor == String) {
switch (options) {
case 'destroy':
case 'stop':
var opts = $(cont).data('cycle.opts');
if (!opts) return false;
cont.cycleStop++; // callbacks look for change
if (cont.cycleTimeout) clearTimeout(cont.cycleTimeout);
cont.cycleTimeout = 0;
if (opts.elements) $(opts.elements).stop();
$(cont).removeData('cycle.opts');
if (options == 'destroy') destroy(cont, opts);
return false;
case 'toggle':
cont.cyclePause = (cont.cyclePause === 1) ? 0 : 1;
checkInstantResume(cont.cyclePause, arg2, cont);
triggerPause(cont);
return false;
case 'pause':
cont.cyclePause = 1;
triggerPause(cont);
return false;
case 'resume':
cont.cyclePause = 0;
checkInstantResume(false, arg2, cont);
triggerPause(cont);
return false;
case 'prev':
case 'next':
opts = $(cont).data('cycle.opts');
if (!opts) {
log('options not found, "prev/next" ignored');
return false;
}
if (typeof arg2 == 'string') opts.oneTimeFx = arg2;
$.fn.cycle[options](opts);
return false;
default:
options = {
fx: options
};
}
return options;
} else if (options.constructor == Number) {
// go to the requested slide
var num = options;
options = $(cont).data('cycle.opts');
if (!options) {
log('options not found, can not advance slide');
return false;
}
if (num < 0 || num >= options.elements.length) {
log('invalid slide index: ' + num);
return false;
}
options.nextSlide = num;
if (cont.cycleTimeout) {
clearTimeout(cont.cycleTimeout);
cont.cycleTimeout = 0;
}
if (typeof arg2 == 'string') options.oneTimeFx = arg2;
go(options.elements, options, 1, num >= options.currSlide);
return false;
}
return options;
function checkInstantResume(isPaused, arg2, cont) {
if (!isPaused && arg2 === true) { // resume now!
var options = $(cont).data('cycle.opts');
if (!options) {
log('options not found, can not resume');
return false;
}
if (cont.cycleTimeout) {
clearTimeout(cont.cycleTimeout);
cont.cycleTimeout = 0;
}
go(options.elements, options, 1, !options.backwards);
}
}
}
function removeFilter(el, opts) {
if (!$.support.opacity && opts.cleartype && el.style.filter) {
try {
el.style.removeAttribute('filter');
} catch (smother) {} // handle old opera versions
}
}
// unbind event handlers
function destroy(cont, opts) {
if (opts.next) $(opts.next).unbind(opts.prevNextEvent);
if (opts.prev) $(opts.prev).unbind(opts.prevNextEvent);
if (opts.pager || opts.pagerAnchorBuilder) $.each(opts.pagerAnchors || [], function() {
this.unbind().remove();
});
opts.pagerAnchors = null;
$(cont).unbind('mouseenter.cycle mouseleave.cycle');
if (opts.destroy) // callback
opts.destroy(opts);
}
// one-time initialization
function buildOptions($cont, $slides, els, options, o) {
var startingSlideSpecified;
// support metadata plugin (v1.0 and v2.0)
var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {});
var meta = $.isFunction($cont.data) ? $cont.data(opts.metaAttr) : null;
if (meta) opts = $.extend(opts, meta);
if (opts.autostop) opts.countdown = opts.autostopCount || els.length;
var cont = $cont[0];
$cont.data('cycle.opts', opts);
opts.$cont = $cont;
opts.stopCount = cont.cycleStop;
opts.elements = els;
opts.before = opts.before ? [opts.before] : [];
opts.after = opts.after ? [opts.after] : [];
// push some after callbacks
if (!$.support.opacity && opts.cleartype) opts.after.push(function() {
removeFilter(this, opts);
});
if (opts.continuous) opts.after.push(function() {
go(els, opts, 0, !opts.backwards);
});
saveOriginalOpts(opts);
// clearType corrections
if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg) clearTypeFix($slides);
// container requires non-static position so that slides can be position within
if ($cont.css('position') == 'static') $cont.css('position', 'relative');
if (opts.width) $cont.width(opts.width);
if (opts.height && opts.height != 'auto') $cont.height(opts.height);
if (opts.startingSlide !== undefined) {
opts.startingSlide = parseInt(opts.startingSlide, 10);
if (opts.startingSlide >= els.length || opts.startSlide < 0) opts.startingSlide = 0; // catch bogus input
else startingSlideSpecified = true;
} else if (opts.backwards) opts.startingSlide = els.length - 1;
else opts.startingSlide = 0;
// if random, mix up the slide array
if (opts.random) {
opts.randomMap = [];
for (var i = 0; i < els.length; i++) opts.randomMap.push(i);
opts.randomMap.sort(function(a, b) {
return Math.random() - 0.5;
});
if (startingSlideSpecified) {
// try to find the specified starting slide and if found set start slide index in the map accordingly
for (var cnt = 0; cnt < els.length; cnt++) {
if (opts.startingSlide == opts.randomMap[cnt]) {
opts.randomIndex = cnt;
}
}
} else {
opts.randomIndex = 1;
opts.startingSlide = opts.randomMap[1];
}
} else if (opts.startingSlide >= els.length) opts.startingSlide = 0; // catch bogus input
opts.currSlide = opts.startingSlide || 0;
var first = opts.startingSlide;
// set position and zIndex on all the slides
$slides.css({
position: 'absolute',
top: 0,
left: 0
}).hide().each(function(i) {
var z;
if (opts.backwards) z = first ? i <= first ? els.length + (i - first) : first - i : els.length - i;
else z = first ? i >= first ? els.length - (i - first) : first - i : els.length - i;
$(this).css('z-index', z);
});
// make sure first slide is visible
$(els[first]).css('opacity', 1).show(); // opacity bit needed to handle restart use case
removeFilter(els[first], opts);
// stretch slides
if (opts.fit) {
if (!opts.aspect) {
if (opts.width) $slides.width(opts.width);
if (opts.height && opts.height != 'auto') $slides.height(opts.height);
} else {
$slides.each(function() {
var $slide = $(this);
var ratio = (opts.aspect === true) ? $slide.width() / $slide.height() : opts.aspect;
if (opts.width && $slide.width() != opts.width) {
$slide.width(opts.width);
$slide.height(opts.width / ratio);
}
if (opts.height && $slide.height() < opts.height) {
$slide.height(opts.height);
$slide.width(opts.height * ratio);
}
});
}
}
if (opts.center && ((!opts.fit) || opts.aspect)) {
$slides.each(function() {
var $slide = $(this);
$slide.css({
"margin-left": opts.width ? ((opts.width - $slide.width()) / 2) + "px" : 0,
"margin-top": opts.height ? ((opts.height - $slide.height()) / 2) + "px" : 0
});
});
}
if (opts.center && !opts.fit && !opts.slideResize) {
$slides.each(function() {
var $slide = $(this);
$slide.css({
"margin-left": opts.width ? ((opts.width - $slide.width()) / 2) + "px" : 0,
"margin-top": opts.height ? ((opts.height - $slide.height()) / 2) + "px" : 0
});
});
}
// stretch container
var reshape = (opts.containerResize || opts.containerResizeHeight) && $cont.innerHeight() < 1;
if (reshape) { // do this only if container has no size http://tinyurl.com/da2oa9
var maxw = 0,
maxh = 0;
for (var j = 0; j < els.length; j++) {
var $e = $(els[j]),
e = $e[0],
w = $e.outerWidth(),
h = $e.outerHeight();
if (!w) w = e.offsetWidth || e.width || $e.attr('width');
if (!h) h = e.offsetHeight || e.height || $e.attr('height');
maxw = w > maxw ? w : maxw;
maxh = h > maxh ? h : maxh;
}
if (opts.containerResize && maxw > 0 && maxh > 0) $cont.css({
width: maxw + 'px',
height: maxh + 'px'
});
if (opts.containerResizeHeight && maxh > 0) $cont.css({
height: maxh + 'px'
});
}
var pauseFlag = false; // https://github.com/malsup/cycle/issues/44
if (opts.pause) $cont.bind('mouseenter.cycle', function() {
pauseFlag = true;
this.cyclePause++;
triggerPause(cont, true);
}).bind('mouseleave.cycle', function() {
if (pauseFlag) this.cyclePause--;
triggerPause(cont, true);
});
if (supportMultiTransitions(opts) === false) return false;
// apparently a lot of people use image slideshows without height/width attributes on the images.
// Cycle 2.50+ requires the sizing info for every slide; this block tries to deal with that.
var requeue = false;
options.requeueAttempts = options.requeueAttempts || 0;
$slides.each(function() {
// try to get height/width of each slide
var $el = $(this);
this.cycleH = (opts.fit && opts.height) ? opts.height : ($el.height() || this.offsetHeight || this.height || $el.attr('height') || 0);
this.cycleW = (opts.fit && opts.width) ? opts.width : ($el.width() || this.offsetWidth || this.width || $el.attr('width') || 0);
if ($el.is('img')) {
var loading = (this.cycleH === 0 && this.cycleW === 0 && !this.complete);
// don't requeue for images that are still loading but have a valid size
if (loading) {
if (o.s && opts.requeueOnImageNotLoaded && ++options.requeueAttempts < 100) { // track retry count so we don't loop forever
log(options.requeueAttempts, ' - img slide not loaded, requeuing slideshow: ', this.src, this.cycleW, this.cycleH);
setTimeout(function() {
$(o.s, o.c).cycle(options);
}, opts.requeueTimeout);
requeue = true;
return false; // break each loop
} else {
log('could not determine size of image: ' + this.src, this.cycleW, this.cycleH);
}
}
}
return true;
});
if (requeue) return false;
opts.cssBefore = opts.cssBefore || {};
opts.cssAfter = opts.cssAfter || {};
opts.cssFirst = opts.cssFirst || {};
opts.animIn = opts.animIn || {};
opts.animOut = opts.animOut || {};
$slides.not(':eq(' + first + ')').css(opts.cssBefore);
$($slides[first]).css(opts.cssFirst);
if (opts.timeout) {
opts.timeout = parseInt(opts.timeout, 10);
// ensure that timeout and speed settings are sane
if (opts.speed.constructor == String) opts.speed = $.fx.speeds[opts.speed] || parseInt(opts.speed, 10);
if (!opts.sync) opts.speed = opts.speed / 2;
var buffer = opts.fx == 'none' ? 0 : opts.fx == 'shuffle' ? 500 : 250;
while ((opts.timeout - opts.speed) < buffer) // sanitize timeout
opts.timeout += opts.speed;
}
if (opts.easing) opts.easeIn = opts.easeOut = opts.easing;
if (!opts.speedIn) opts.speedIn = opts.speed;
if (!opts.speedOut) opts.speedOut = opts.speed;
opts.slideCount = els.length;
opts.currSlide = opts.lastSlide = first;
if (opts.random) {
if (++opts.randomIndex == els.length) opts.randomIndex = 0;
opts.nextSlide = opts.randomMap[opts.randomIndex];
} else if (opts.backwards) opts.nextSlide = opts.startingSlide === 0 ? (els.length - 1) : opts.startingSlide - 1;
else opts.nextSlide = opts.startingSlide >= (els.length - 1) ? 0 : opts.startingSlide + 1;
// run transition init fn
if (!opts.multiFx) {
var init = $.fn.cycle.transitions[opts.fx];
if ($.isFunction(init)) init($cont, $slides, opts);
else if (opts.fx != 'custom' && !opts.multiFx) {
log('unknown transition: ' + opts.fx, '; slideshow terminating');
return false;
}
}
// fire artificial events
var e0 = $slides[first];
if (!opts.skipInitializationCallbacks) {
if (opts.before.length) opts.before[0].apply(e0, [e0, e0, opts, true]);
if (opts.after.length) opts.after[0].apply(e0, [e0, e0, opts, true]);
}
if (opts.next) $(opts.next).bind(opts.prevNextEvent, function() {
return advance(opts, 1);
});
if (opts.prev) $(opts.prev).bind(opts.prevNextEvent, function() {
return advance(opts, 0);
});
if (opts.pager || opts.pagerAnchorBuilder) buildPager(els, opts);
exposeAddSlide(opts, els);
return opts;
}
// save off original opts so we can restore after clearing state
function saveOriginalOpts(opts) {
opts.original = {
before: [],
after: []
};
opts.original.cssBefore = $.extend({}, opts.cssBefore);
opts.original.cssAfter = $.extend({}, opts.cssAfter);
opts.original.animIn = $.extend({}, opts.animIn);
opts.original.animOut = $.extend({}, opts.animOut);
$.each(opts.before, function() {
opts.original.before.push(this);
});
$.each(opts.after, function() {
opts.original.after.push(this);
});
}
function supportMultiTransitions(opts) {
var i, tx, txs = $.fn.cycle.transitions;
// look for multiple effects
if (opts.fx.indexOf(',') > 0) {
opts.multiFx = true;
opts.fxs = opts.fx.replace(/\s*/g, '').split(',');
// discard any bogus effect names
for (i = 0; i < opts.fxs.length; i++) {
var fx = opts.fxs[i];
tx = txs[fx];
if (!tx || !txs.hasOwnProperty(fx) || !$.isFunction(tx)) {
log('discarding unknown transition: ', fx);
opts.fxs.splice(i, 1);
i--;
}
}
// if we have an empty list then we threw everything away!
if (!opts.fxs.length) {
log('No valid transitions named; slideshow terminating.');
return false;
}
} else if (opts.fx == 'all') { // auto-gen the list of transitions
opts.multiFx = true;
opts.fxs = [];
for (var p in txs) {
if (txs.hasOwnProperty(p)) {
tx = txs[p];
if (txs.hasOwnProperty(p) && $.isFunction(tx)) opts.fxs.push(p);
}
}
}
if (opts.multiFx && opts.randomizeEffects) {
// munge the fxs array to make effect selection random
var r1 = Math.floor(Math.random() * 20) + 30;
for (i = 0; i < r1; i++) {
var r2 = Math.floor(Math.random() * opts.fxs.length);
opts.fxs.push(opts.fxs.splice(r2, 1)[0]);
}
debug('randomized fx sequence: ', opts.fxs);
}
return true;
}
// provide a mechanism for adding slides after the slideshow has started
function exposeAddSlide(opts, els) {
opts.addSlide = function(newSlide, prepend) {
var $s = $(newSlide),
s = $s[0];
if (!opts.autostopCount) opts.countdown++;
els[prepend ? 'unshift' : 'push'](s);
if (opts.els) opts.els[prepend ? 'unshift' : 'push'](s); // shuffle needs this
opts.slideCount = els.length;
// add the slide to the random map and resort
if (opts.random) {
opts.randomMap.push(opts.slideCount - 1);
opts.randomMap.sort(function(a, b) {
return Math.random() - 0.5;
});
}
$s.css('position', 'absolute');
$s[prepend ? 'prependTo' : 'appendTo'](opts.$cont);
if (prepend) {
opts.currSlide++;
opts.nextSlide++;
}
if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg) clearTypeFix($s);
if (opts.fit && opts.width) $s.width(opts.width);
if (opts.fit && opts.height && opts.height != 'auto') $s.height(opts.height);
s.cycleH = (opts.fit && opts.height) ? opts.height : $s.height();
s.cycleW = (opts.fit && opts.width) ? opts.width : $s.width();
$s.css(opts.cssBefore);
if (opts.pager || opts.pagerAnchorBuilder) $.fn.cycle.createPagerAnchor(els.length - 1, s, $(opts.pager), els, opts);
if ($.isFunction(opts.onAddSlide)) opts.onAddSlide($s);
else $s.hide(); // default behavior
};
}
// reset internal state; we do this on every pass in order to support multiple effects
$.fn.cycle.resetState = function(opts, fx) {
fx = fx || opts.fx;
opts.before = [];
opts.after = [];
opts.cssBefore = $.extend({}, opts.original.cssBefore);
opts.cssAfter = $.extend({}, opts.original.cssAfter);
opts.animIn = $.extend({}, opts.original.animIn);
opts.animOut = $.extend({}, opts.original.animOut);
opts.fxFn = null;
$.each(opts.original.before, function() {
opts.before.push(this);
});
$.each(opts.original.after, function() {
opts.after.push(this);
});
// re-init
var init = $.fn.cycle.transitions[fx];
if ($.isFunction(init)) init(opts.$cont, $(opts.elements), opts);
};
// this is the main engine fn, it handles the timeouts, callbacks and slide index mgmt
function go(els, opts, manual, fwd) {
var p = opts.$cont[0],
curr = els[opts.currSlide],
next = els[opts.nextSlide];
// opts.busy is true if we're in the middle of an animation
if (manual && opts.busy && opts.manualTrump) {
// let manual transitions requests trump active ones
debug('manualTrump in go(), stopping active transition');
$(els).stop(true, true);
opts.busy = 0;
clearTimeout(p.cycleTimeout);
}
// don't begin another timeout-based transition if there is one active
if (opts.busy) {
debug('transition active, ignoring new tx request');
return;
}
// stop cycling if we have an outstanding stop request
if (p.cycleStop != opts.stopCount || p.cycleTimeout === 0 && !manual) return;
// check to see if we should stop cycling based on autostop options
if (!manual && !p.cyclePause && !opts.bounce && ((opts.autostop && (--opts.countdown <= 0)) || (opts.nowrap && !opts.random && opts.nextSlide < opts.currSlide))) {
if (opts.end) opts.end(opts);
return;
}
// if slideshow is paused, only transition on a manual trigger
var changed = false;
if ((manual || !p.cyclePause) && (opts.nextSlide != opts.currSlide)) {
changed = true;
var fx = opts.fx;
// keep trying to get the slide size if we don't have it yet
curr.cycleH = curr.cycleH || $(curr).height();
curr.cycleW = curr.cycleW || $(curr).width();
next.cycleH = next.cycleH || $(next).height();
next.cycleW = next.cycleW || $(next).width();
// support multiple transition types
if (opts.multiFx) {
if (fwd && (opts.lastFx === undefined || ++opts.lastFx >= opts.fxs.length)) opts.lastFx = 0;
else if (!fwd && (opts.lastFx === undefined || --opts.lastFx < 0)) opts.lastFx = opts.fxs.length - 1;
fx = opts.fxs[opts.lastFx];
}
// one-time fx overrides apply to: $('div').cycle(3,'zoom');
if (opts.oneTimeFx) {
fx = opts.oneTimeFx;
opts.oneTimeFx = null;
}
$.fn.cycle.resetState(opts, fx);
// run the before callbacks
if (opts.before.length) $.each(opts.before, function(i, o) {
if (p.cycleStop != opts.stopCount) return;
o.apply(next, [curr, next, opts, fwd]);
});
// stage the after callacks
var after = function() {
opts.busy = 0;
$.each(opts.after, function(i, o) {
if (p.cycleStop != opts.stopCount) return;
o.apply(next, [curr, next, opts, fwd]);
});
if (!p.cycleStop) {
// queue next transition
queueNext();
}
};
debug('tx firing(' + fx + '); currSlide: ' + opts.currSlide + '; nextSlide: ' + opts.nextSlide);
// get ready to perform the transition
opts.busy = 1;
if (opts.fxFn) // fx function provided?
opts.fxFn(curr, next, opts, after, fwd, manual && opts.fastOnEvent);
else if ($.isFunction($.fn.cycle[opts.fx])) // fx plugin ?
$.fn.cycle[opts.fx](curr, next, opts, after, fwd, manual && opts.fastOnEvent);
else $.fn.cycle.custom(curr, next, opts, after, fwd, manual && opts.fastOnEvent);
} else {
queueNext();
}
if (changed || opts.nextSlide == opts.currSlide) {
// calculate the next slide
var roll;
opts.lastSlide = opts.currSlide;
if (opts.random) {
opts.currSlide = opts.nextSlide;
if (++opts.randomIndex == els.length) {
opts.randomIndex = 0;
opts.randomMap.sort(function(a, b) {
return Math.random() - 0.5;
});
}
opts.nextSlide = opts.randomMap[opts.randomIndex];
if (opts.nextSlide == opts.currSlide) opts.nextSlide = (opts.currSlide == opts.slideCount - 1) ? 0 : opts.currSlide + 1;
} else if (opts.backwards) {
roll = (opts.nextSlide - 1) < 0;
if (roll && opts.bounce) {
opts.backwards = !opts.backwards;
opts.nextSlide = 1;
opts.currSlide = 0;
} else {
opts.nextSlide = roll ? (els.length - 1) : opts.nextSlide - 1;
opts.currSlide = roll ? 0 : opts.nextSlide + 1;
}
} else { // sequence
roll = (opts.nextSlide + 1) == els.length;
if (roll && opts.bounce) {
opts.backwards = !opts.backwards;
opts.nextSlide = els.length - 2;
opts.currSlide = els.length - 1;
} else {
opts.nextSlide = roll ? 0 : opts.nextSlide + 1;
opts.currSlide = roll ? els.length - 1 : opts.nextSlide - 1;
}
}
}
if (changed && opts.pager) opts.updateActivePagerLink(opts.pager, opts.currSlide, opts.activePagerClass);
function queueNext() {
// stage the next transition
var ms = 0,
timeout = opts.timeout;
if (opts.timeout && !opts.continuous) {
ms = getTimeout(els[opts.currSlide], els[opts.nextSlide], opts, fwd);
if (opts.fx == 'shuffle') ms -= opts.speedOut;
} else if (opts.continuous && p.cyclePause) // continuous shows work off an after callback, not this timer logic
ms = 10;
if (ms > 0) p.cycleTimeout = setTimeout(function() {
go(els, opts, 0, !opts.backwards);
}, ms);
}
}
// invoked after transition
$.fn.cycle.updateActivePagerLink = function(pager, currSlide, clsName) {
$(pager).each(function() {
$(this).children().removeClass(clsName).eq(currSlide).addClass(clsName);
});
};
// calculate timeout value for current transition
function getTimeout(curr, next, opts, fwd) {
if (opts.timeoutFn) {
// call user provided calc fn
var t = opts.timeoutFn.call(curr, curr, next, opts, fwd);
while (opts.fx != 'none' && (t - opts.speed) < 250) // sanitize timeout
t += opts.speed;
debug('calculated timeout: ' + t + '; speed: ' + opts.speed);
if (t !== false) return t;
}
return opts.timeout;
}
// expose next/prev function, caller must pass in state
$.fn.cycle.next = function(opts) {
advance(opts, 1);
};
$.fn.cycle.prev = function(opts) {
advance(opts, 0);
};
// advance slide forward or back
function advance(opts, moveForward) {
var val = moveForward ? 1 : -1;
var els = opts.elements;
var p = opts.$cont[0],
timeout = p.cycleTimeout;
if (timeout) {
clearTimeout(timeout);
p.cycleTimeout = 0;
}
if (opts.random && val < 0) {
// move back to the previously display slide
opts.randomIndex--;
if (--opts.randomIndex == -2) opts.randomIndex = els.length - 2;
else if (opts.randomIndex == -1) opts.randomIndex = els.length - 1;
opts.nextSlide = opts.randomMap[opts.randomIndex];
} else if (opts.random) {
opts.nextSlide = opts.randomMap[opts.randomIndex];
} else {
opts.nextSlide = opts.currSlide + val;
if (opts.nextSlide < 0) {
if (opts.nowrap) return false;
opts.nextSlide = els.length - 1;
} else if (opts.nextSlide >= els.length) {
if (opts.nowrap) return false;
opts.nextSlide = 0;
}
}
var cb = opts.onPrevNextEvent || opts.prevNextClick; // prevNextClick is deprecated
if ($.isFunction(cb)) cb(val > 0, opts.nextSlide, els[opts.nextSlide]);
go(els, opts, 1, moveForward);
return false;
}
function buildPager(els, opts) {
var $p = $(opts.pager);
$.each(els, function(i, o) {
$.fn.cycle.createPagerAnchor(i, o, $p, els, opts);
});
opts.updateActivePagerLink(opts.pager, opts.startingSlide, opts.activePagerClass);
}
$.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) {
var a;
if ($.isFunction(opts.pagerAnchorBuilder)) {
a = opts.pagerAnchorBuilder(i, el);
debug('pagerAnchorBuilder(' + i + ', el) returned: ' + a);
} else a = '<a href="#">' + (i + 1) + '</a>';
if (!a) return;
var $a = $(a);
// don't reparent if anchor is in the dom
if ($a.parents('body').length === 0) {
var arr = [];
if ($p.length > 1) {
$p.each(function() {
var $clone = $a.clone(true);
$(this).append($clone);
arr.push($clone[0]);
});
$a = $(arr);
} else {
$a.appendTo($p);
}
}
opts.pagerAnchors = opts.pagerAnchors || [];
opts.pagerAnchors.push($a);
var pagerFn = function(e) {
e.preventDefault();
opts.nextSlide = i;
var p = opts.$cont[0],
timeout = p.cycleTimeout;
if (timeout) {
clearTimeout(timeout);
p.cycleTimeout = 0;
}
var cb = opts.onPagerEvent || opts.pagerClick; // pagerClick is deprecated
if ($.isFunction(cb)) cb(opts.nextSlide, els[opts.nextSlide]);
go(els, opts, 1, opts.currSlide < i); // trigger the trans
// return false; // <== allow bubble
};
if (/mouseenter|mouseover/i.test(opts.pagerEvent)) {
$a.hover(pagerFn, function() {
/* no-op */ });
} else {
$a.bind(opts.pagerEvent, pagerFn);
}
if (!/^click/.test(opts.pagerEvent) && !opts.allowPagerClickBubble) $a.bind('click.cycle', function() {
return false;
}); // suppress click
var cont = opts.$cont[0];
var pauseFlag = false; // https://github.com/malsup/cycle/issues/44
if (opts.pauseOnPagerHover) {
$a.hover(function() {
pauseFlag = true;
cont.cyclePause++;
triggerPause(cont, true, true);
}, function() {
if (pauseFlag) cont.cyclePause--;
triggerPause(cont, true, true);
});
}
};
// helper fn to calculate the number of slides between the current and the next
$.fn.cycle.hopsFromLast = function(opts, fwd) {
var hops, l = opts.lastSlide,
c = opts.currSlide;
if (fwd) hops = c > l ? c - l : opts.slideCount - l;
else hops = c < l ? l - c : l + opts.slideCount - c;
return hops;
};
// fix clearType problems in ie6 by setting an explicit bg color
// (otherwise text slides look horrible during a fade transition)
function clearTypeFix($slides) {
debug('applying clearType background-color hack');
function hex(s) {
s = parseInt(s, 10).toString(16);
return s.length < 2 ? '0' + s : s;
}
function getBg(e) {
for (; e && e.nodeName.toLowerCase() != 'html'; e = e.parentNode) {
var v = $.css(e, 'background-color');
if (v && v.indexOf('rgb') >= 0) {
var rgb = v.match(/\d+/g);
return '#' + hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]);
}
if (v && v != 'transparent') return v;
}
return '#ffffff';
}
$slides.each(function() {
$(this).css('background-color', getBg(this));
});
}
// reset common props before the next transition
$.fn.cycle.commonReset = function(curr, next, opts, w, h, rev) {
$(opts.elements).not(curr).hide();
if (typeof opts.cssBefore.opacity == 'undefined') opts.cssBefore.opacity = 1;
opts.cssBefore.display = 'block';
if (opts.slideResize && w !== false && next.cycleW > 0) opts.cssBefore.width = next.cycleW;
if (opts.slideResize && h !== false && next.cycleH > 0) opts.cssBefore.height = next.cycleH;
opts.cssAfter = opts.cssAfter || {};
opts.cssAfter.display = 'none';
$(curr).css('zIndex', opts.slideCount + (rev === true ? 1 : 0));
$(next).css('zIndex', opts.slideCount + (rev === true ? 0 : 1));
};
// the actual fn for effecting a transition
$.fn.cycle.custom = function(curr, next, opts, cb, fwd, speedOverride) {
var $l = $(curr),
$n = $(next);
var speedIn = opts.speedIn,
speedOut = opts.speedOut,
easeIn = opts.easeIn,
easeOut = opts.easeOut,
animInDelay = opts.animInDelay,
animOutDelay = opts.animOutDelay;
$n.css(opts.cssBefore);
if (speedOverride) {
if (typeof speedOverride == 'number') speedIn = speedOut = speedOverride;
else speedIn = speedOut = 1;
easeIn = easeOut = null;
}
var fn = function() {
$n.delay(animInDelay).animate(opts.animIn, speedIn, easeIn, function() {
cb();
});
};
$l.delay(animOutDelay).animate(opts.animOut, speedOut, easeOut, function() {
$l.css(opts.cssAfter);
if (!opts.sync) fn();
});
if (opts.sync) fn();
};
// transition definitions - only fade is defined here, transition pack defines the rest
$.fn.cycle.transitions = {
fade: function($cont, $slides, opts) {
$slides.not(':eq(' + opts.currSlide + ')').css('opacity', 0);
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr, next, opts);
opts.cssBefore.opacity = 0;
});
opts.animIn = {
opacity: 1
};
opts.animOut = {
opacity: 0
};
opts.cssBefore = {
top: 0,
left: 0
};
}
};
$.fn.cycle.ver = function() {
return ver;
};
// override these globally if you like (they are all optional)
$.fn.cycle.defaults = {
activePagerClass: 'activeSlide', // class name used for the active pager link
after: null, // transition callback (scope set to element that was shown): function(currSlideElement, nextSlideElement, options, forwardFlag)
allowPagerClickBubble: false, // allows or prevents click event on pager anchors from bubbling
animIn: null, // properties that define how the slide animates in
animInDelay: 0, // allows delay before next slide transitions in
animOut: null, // properties that define how the slide animates out
animOutDelay: 0, // allows delay before current slide transitions out
aspect: false, // preserve aspect ratio during fit resizing, cropping if necessary (must be used with fit option)
autostop: 0, // true to end slideshow after X transitions (where X == slide count)
autostopCount: 0, // number of transitions (optionally used with autostop to define X)
backwards: false, // true to start slideshow at last slide and move backwards through the stack
before: null, // transition callback (scope set to element to be shown): function(currSlideElement, nextSlideElement, options, forwardFlag)
center: null, // set to true to have cycle add top/left margin to each slide (use with width and height options)
cleartype: !$.support.opacity, // true if clearType corrections should be applied (for IE)
cleartypeNoBg: false, // set to true to disable extra cleartype fixing (leave false to force background color setting on slides)
containerResize: 1, // resize container to fit largest slide
containerResizeHeight: 0, // resize containers height to fit the largest slide but leave the width dynamic
continuous: 0, // true to start next transition immediately after current one completes
cssAfter: null, // properties that defined the state of the slide after transitioning out
cssBefore: null, // properties that define the initial state of the slide before transitioning in
delay: 0, // additional delay (in ms) for first transition (hint: can be negative)
easeIn: null, // easing for "in" transition
easeOut: null, // easing for "out" transition
easing: null, // easing method for both in and out transitions
end: null, // callback invoked when the slideshow terminates (use with autostop or nowrap options): function(options)
fastOnEvent: 0, // force fast transitions when triggered manually (via pager or prev/next); value == time in ms
fit: 0, // force slides to fit container
fx: 'fade', // name of transition effect (or comma separated names, ex: 'fade,scrollUp,shuffle')
fxFn: null, // function used to control the transition: function(currSlideElement, nextSlideElement, options, afterCalback, forwardFlag)
height: 'auto', // container height (if the 'fit' option is true, the slides will be set to this height as well)
manualTrump: true, // causes manual transition to stop an active transition instead of being ignored
metaAttr: 'cycle', // data- attribute that holds the option data for the slideshow
next: null, // element, jQuery object, or jQuery selector string for the element to use as event trigger for next slide
nowrap: 0, // true to prevent slideshow from wrapping
onPagerEvent: null, // callback fn for pager events: function(zeroBasedSlideIndex, slideElement)
onPrevNextEvent: null, // callback fn for prev/next events: function(isNext, zeroBasedSlideIndex, slideElement)
pager: null, // element, jQuery object, or jQuery selector string for the element to use as pager container
pagerAnchorBuilder: null, // callback fn for building anchor links: function(index, DOMelement)
pagerEvent: 'click.cycle', // name of event which drives the pager navigation
pause: 0, // true to enable "pause on hover"
pauseOnPagerHover: 0, // true to pause when hovering over pager link
prev: null, // element, jQuery object, or jQuery selector string for the element to use as event trigger for previous slide
prevNextEvent: 'click.cycle', // event which drives the manual transition to the previous or next slide
random: 0, // true for random, false for sequence (not applicable to shuffle fx)
randomizeEffects: 1, // valid when multiple effects are used; true to make the effect sequence random
requeueOnImageNotLoaded: true, // requeue the slideshow if any image slides are not yet loaded
requeueTimeout: 250, // ms delay for requeue
rev: 0, // causes animations to transition in reverse (for effects that support it such as scrollHorz/scrollVert/shuffle)
shuffle: null, // coords for shuffle animation, ex: { top:15, left: 200 }
skipInitializationCallbacks: false, // set to true to disable the first before/after callback that occurs prior to any transition
slideExpr: null, // expression for selecting slides (if something other than all children is required)
slideResize: 1, // force slide width/height to fixed size before every transition
speed: 1000, // speed of the transition (any valid fx speed value)
speedIn: null, // speed of the 'in' transition
speedOut: null, // speed of the 'out' transition
startingSlide: undefined, // zero-based index of the first slide to be displayed
sync: 1, // true if in/out transitions should occur simultaneously
timeout: 4000, // milliseconds between slide transitions (0 to disable auto advance)
timeoutFn: null, // callback for determining per-slide timeout value: function(currSlideElement, nextSlideElement, options, forwardFlag)
updateActivePagerLink: null, // callback fn invoked to update the active pager link (adds/removes activePagerClass style)
width: null // container width (if the 'fit' option is true, the slides will be set to this width as well)
};
})(jQuery);
/*!
* jQuery Cycle Plugin Transition Definitions
* This script is a plugin for the jQuery Cycle Plugin
* Examples and documentation at: http://malsup.com/jquery/cycle/
* Copyright (c) 2007-2010 M. Alsup
* Version: 2.73
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*/
(function($) {
"use strict";
//
// These functions define slide initialization and properties for the named
// transitions. To save file size feel free to remove any of these that you
// don't need.
//
$.fn.cycle.transitions.none = function($cont, $slides, opts) {
opts.fxFn = function(curr, next, opts, after) {
$(next).show();
$(curr).hide();
after();
};
};
// not a cross-fade, fadeout only fades out the top slide
$.fn.cycle.transitions.fadeout = function($cont, $slides, opts) {
$slides.not(':eq(' + opts.currSlide + ')').css({
display: 'block',
'opacity': 1
});
opts.before.push(function(curr, next, opts, w, h, rev) {
$(curr).css('zIndex', opts.slideCount + (rev !== true ? 1 : 0));
$(next).css('zIndex', opts.slideCount + (rev !== true ? 0 : 1));
});
opts.animIn.opacity = 1;
opts.animOut.opacity = 0;
opts.cssBefore.opacity = 1;
opts.cssBefore.display = 'block';
opts.cssAfter.zIndex = 0;
};
// scrollUp/Down/Left/Right
$.fn.cycle.transitions.scrollUp = function($cont, $slides, opts) {
$cont.css('overflow', 'hidden');
opts.before.push($.fn.cycle.commonReset);
var h = $cont.height();
opts.cssBefore.top = h;
opts.cssBefore.left = 0;
opts.cssFirst.top = 0;
opts.animIn.top = 0;
opts.animOut.top = -h;
};
$.fn.cycle.transitions.scrollDown = function($cont, $slides, opts) {
$cont.css('overflow', 'hidden');
opts.before.push($.fn.cycle.commonReset);
var h = $cont.height();
opts.cssFirst.top = 0;
opts.cssBefore.top = -h;
opts.cssBefore.left = 0;
opts.animIn.top = 0;
opts.animOut.top = h;
};
$.fn.cycle.transitions.scrollLeft = function($cont, $slides, opts) {
$cont.css('overflow', 'hidden');
opts.before.push($.fn.cycle.commonReset);
var w = $cont.width();
opts.cssFirst.left = 0;
opts.cssBefore.left = w;
opts.cssBefore.top = 0;
opts.animIn.left = 0;
opts.animOut.left = 0 - w;
};
$.fn.cycle.transitions.scrollRight = function($cont, $slides, opts) {
$cont.css('overflow', 'hidden');
opts.before.push($.fn.cycle.commonReset);
var w = $cont.width();
opts.cssFirst.left = 0;
opts.cssBefore.left = -w;
opts.cssBefore.top = 0;
opts.animIn.left = 0;
opts.animOut.left = w;
};
$.fn.cycle.transitions.scrollHorz = function($cont, $slides, opts) {
$cont.css('overflow', 'hidden').width();
opts.before.push(function(curr, next, opts, fwd) {
if (opts.rev) fwd = !fwd;
$.fn.cycle.commonReset(curr, next, opts);
opts.cssBefore.left = fwd ? (next.cycleW - 1) : (1 - next.cycleW);
opts.animOut.left = fwd ? -curr.cycleW : curr.cycleW;
});
opts.cssFirst.left = 0;
opts.cssBefore.top = 0;
opts.animIn.left = 0;
opts.animOut.top = 0;
};
$.fn.cycle.transitions.scrollVert = function($cont, $slides, opts) {
$cont.css('overflow', 'hidden');
opts.before.push(function(curr, next, opts, fwd) {
if (opts.rev) fwd = !fwd;
$.fn.cycle.commonReset(curr, next, opts);
opts.cssBefore.top = fwd ? (1 - next.cycleH) : (next.cycleH - 1);
opts.animOut.top = fwd ? curr.cycleH : -curr.cycleH;
});
opts.cssFirst.top = 0;
opts.cssBefore.left = 0;
opts.animIn.top = 0;
opts.animOut.left = 0;
};
// slideX/slideY
$.fn.cycle.transitions.slideX = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$(opts.elements).not(curr).hide();
$.fn.cycle.commonReset(curr, next, opts, false, true);
opts.animIn.width = next.cycleW;
});
opts.cssBefore.left = 0;
opts.cssBefore.top = 0;
opts.cssBefore.width = 0;
opts.animIn.width = 'show';
opts.animOut.width = 0;
};
$.fn.cycle.transitions.slideY = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$(opts.elements).not(curr).hide();
$.fn.cycle.commonReset(curr, next, opts, true, false);
opts.animIn.height = next.cycleH;
});
opts.cssBefore.left = 0;
opts.cssBefore.top = 0;
opts.cssBefore.height = 0;
opts.animIn.height = 'show';
opts.animOut.height = 0;
};
// shuffle
$.fn.cycle.transitions.shuffle = function($cont, $slides, opts) {
var i, w = $cont.css('overflow', 'visible').width();
$slides.css({
left: 0,
top: 0
});
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr, next, opts, true, true, true);
});
// only adjust speed once!
if (!opts.speedAdjusted) {
opts.speed = opts.speed / 2; // shuffle has 2 transitions
opts.speedAdjusted = true;
}
opts.random = 0;
opts.shuffle = opts.shuffle || {
left: -w,
top: 15
};
opts.els = [];
for (i = 0; i < $slides.length; i++) opts.els.push($slides[i]);
for (i = 0; i < opts.currSlide; i++) opts.els.push(opts.els.shift());
// custom transition fn (hat tip to Benjamin Sterling for this bit of sweetness!)
opts.fxFn = function(curr, next, opts, cb, fwd) {
if (opts.rev) fwd = !fwd;
var $el = fwd ? $(curr) : $(next);
$(next).css(opts.cssBefore);
var count = opts.slideCount;
$el.animate(opts.shuffle, opts.speedIn, opts.easeIn, function() {
var hops = $.fn.cycle.hopsFromLast(opts, fwd);
for (var k = 0; k < hops; k++) {
if (fwd) opts.els.push(opts.els.shift());
else opts.els.unshift(opts.els.pop());
}
if (fwd) {
for (var i = 0, len = opts.els.length; i < len; i++) $(opts.els[i]).css('z-index', len - i + count);
} else {
var z = $(curr).css('z-index');
$el.css('z-index', parseInt(z, 10) + 1 + count);
}
$el.animate({
left: 0,
top: 0
}, opts.speedOut, opts.easeOut, function() {
$(fwd ? this : curr).hide();
if (cb) cb();
});
});
};
$.extend(opts.cssBefore, {
display: 'block',
opacity: 1,
top: 0,
left: 0
});
};
// turnUp/Down/Left/Right
$.fn.cycle.transitions.turnUp = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr, next, opts, true, false);
opts.cssBefore.top = next.cycleH;
opts.animIn.height = next.cycleH;
opts.animOut.width = next.cycleW;
});
opts.cssFirst.top = 0;
opts.cssBefore.left = 0;
opts.cssBefore.height = 0;
opts.animIn.top = 0;
opts.animOut.height = 0;
};
$.fn.cycle.transitions.turnDown = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr, next, opts, true, false);
opts.animIn.height = next.cycleH;
opts.animOut.top = curr.cycleH;
});
opts.cssFirst.top = 0;
opts.cssBefore.left = 0;
opts.cssBefore.top = 0;
opts.cssBefore.height = 0;
opts.animOut.height = 0;
};
$.fn.cycle.transitions.turnLeft = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr, next, opts, false, true);
opts.cssBefore.left = next.cycleW;
opts.animIn.width = next.cycleW;
});
opts.cssBefore.top = 0;
opts.cssBefore.width = 0;
opts.animIn.left = 0;
opts.animOut.width = 0;
};
$.fn.cycle.transitions.turnRight = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr, next, opts, false, true);
opts.animIn.width = next.cycleW;
opts.animOut.left = curr.cycleW;
});
$.extend(opts.cssBefore, {
top: 0,
left: 0,
width: 0
});
opts.animIn.left = 0;
opts.animOut.width = 0;
};
// zoom
$.fn.cycle.transitions.zoom = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr, next, opts, false, false, true);
opts.cssBefore.top = next.cycleH / 2;
opts.cssBefore.left = next.cycleW / 2;
$.extend(opts.animIn, {
top: 0,
left: 0,
width: next.cycleW,
height: next.cycleH
});
$.extend(opts.animOut, {
width: 0,
height: 0,
top: curr.cycleH / 2,
left: curr.cycleW / 2
});
});
opts.cssFirst.top = 0;
opts.cssFirst.left = 0;
opts.cssBefore.width = 0;
opts.cssBefore.height = 0;
};
// fadeZoom
$.fn.cycle.transitions.fadeZoom = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr, next, opts, false, false);
opts.cssBefore.left = next.cycleW / 2;
opts.cssBefore.top = next.cycleH / 2;
$.extend(opts.animIn, {
top: 0,
left: 0,
width: next.cycleW,
height: next.cycleH
});
});
opts.cssBefore.width = 0;
opts.cssBefore.height = 0;
opts.animOut.opacity = 0;
};
// blindX
$.fn.cycle.transitions.blindX = function($cont, $slides, opts) {
var w = $cont.css('overflow', 'hidden').width();
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr, next, opts);
opts.animIn.width = next.cycleW;
opts.animOut.left = curr.cycleW;
});
opts.cssBefore.left = w;
opts.cssBefore.top = 0;
opts.animIn.left = 0;
opts.animOut.left = w;
};
// blindY
$.fn.cycle.transitions.blindY = function($cont, $slides, opts) {
var h = $cont.css('overflow', 'hidden').height();
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr, next, opts);
opts.animIn.height = next.cycleH;
opts.animOut.top = curr.cycleH;
});
opts.cssBefore.top = h;
opts.cssBefore.left = 0;
opts.animIn.top = 0;
opts.animOut.top = h;
};
// blindZ
$.fn.cycle.transitions.blindZ = function($cont, $slides, opts) {
var h = $cont.css('overflow', 'hidden').height();
var w = $cont.width();
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr, next, opts);
opts.animIn.height = next.cycleH;
opts.animOut.top = curr.cycleH;
});
opts.cssBefore.top = h;
opts.cssBefore.left = w;
opts.animIn.top = 0;
opts.animIn.left = 0;
opts.animOut.top = h;
opts.animOut.left = w;
};
// growX - grow horizontally from centered 0 width
$.fn.cycle.transitions.growX = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr, next, opts, false, true);
opts.cssBefore.left = this.cycleW / 2;
opts.animIn.left = 0;
opts.animIn.width = this.cycleW;
opts.animOut.left = 0;
});
opts.cssBefore.top = 0;
opts.cssBefore.width = 0;
};
// growY - grow vertically from centered 0 height
$.fn.cycle.transitions.growY = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr, next, opts, true, false);
opts.cssBefore.top = this.cycleH / 2;
opts.animIn.top = 0;
opts.animIn.height = this.cycleH;
opts.animOut.top = 0;
});
opts.cssBefore.height = 0;
opts.cssBefore.left = 0;
};
// curtainX - squeeze in both edges horizontally
$.fn.cycle.transitions.curtainX = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr, next, opts, false, true, true);
opts.cssBefore.left = next.cycleW / 2;
opts.animIn.left = 0;
opts.animIn.width = this.cycleW;
opts.animOut.left = curr.cycleW / 2;
opts.animOut.width = 0;
});
opts.cssBefore.top = 0;
opts.cssBefore.width = 0;
};
// curtainY - squeeze in both edges vertically
$.fn.cycle.transitions.curtainY = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr, next, opts, true, false, true);
opts.cssBefore.top = next.cycleH / 2;
opts.animIn.top = 0;
opts.animIn.height = next.cycleH;
opts.animOut.top = curr.cycleH / 2;
opts.animOut.height = 0;
});
opts.cssBefore.height = 0;
opts.cssBefore.left = 0;
};
// cover - curr slide covered by next slide
$.fn.cycle.transitions.cover = function($cont, $slides, opts) {
var d = opts.direction || 'left';
var w = $cont.css('overflow', 'hidden').width();
var h = $cont.height();
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr, next, opts);
opts.cssAfter.display = '';
if (d == 'right') opts.cssBefore.left = -w;
else if (d == 'up') opts.cssBefore.top = h;
else if (d == 'down') opts.cssBefore.top = -h;
else opts.cssBefore.left = w;
});
opts.animIn.left = 0;
opts.animIn.top = 0;
opts.cssBefore.top = 0;
opts.cssBefore.left = 0;
};
// uncover - curr slide moves off next slide
$.fn.cycle.transitions.uncover = function($cont, $slides, opts) {
var d = opts.direction || 'left';
var w = $cont.css('overflow', 'hidden').width();
var h = $cont.height();
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr, next, opts, true, true, true);
if (d == 'right') opts.animOut.left = w;
else if (d == 'up') opts.animOut.top = -h;
else if (d == 'down') opts.animOut.top = h;
else opts.animOut.left = -w;
});
opts.animIn.left = 0;
opts.animIn.top = 0;
opts.cssBefore.top = 0;
opts.cssBefore.left = 0;
};
// toss - move top slide and fade away
$.fn.cycle.transitions.toss = function($cont, $slides, opts) {
var w = $cont.css('overflow', 'visible').width();
var h = $cont.height();
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr, next, opts, true, true, true);
// provide default toss settings if animOut not provided
if (!opts.animOut.left && !opts.animOut.top) $.extend(opts.animOut, {
left: w * 2,
top: -h / 2,
opacity: 0
});
else opts.animOut.opacity = 0;
});
opts.cssBefore.left = 0;
opts.cssBefore.top = 0;
opts.animIn.left = 0;
};
// wipe - clip animation
$.fn.cycle.transitions.wipe = function($cont, $slides, opts) {
var w = $cont.css('overflow', 'hidden').width();
var h = $cont.height();
opts.cssBefore = opts.cssBefore || {};
var clip;
if (opts.clip) {
if (/l2r/.test(opts.clip)) clip = 'rect(0px 0px ' + h + 'px 0px)';
else if (/r2l/.test(opts.clip)) clip = 'rect(0px ' + w + 'px ' + h + 'px ' + w + 'px)';
else if (/t2b/.test(opts.clip)) clip = 'rect(0px ' + w + 'px 0px 0px)';
else if (/b2t/.test(opts.clip)) clip = 'rect(' + h + 'px ' + w + 'px ' + h + 'px 0px)';
else if (/zoom/.test(opts.clip)) {
var top = parseInt(h / 2, 10);
var left = parseInt(w / 2, 10);
clip = 'rect(' + top + 'px ' + left + 'px ' + top + 'px ' + left + 'px)';
}
}
opts.cssBefore.clip = opts.cssBefore.clip || clip || 'rect(0px 0px 0px 0px)';
var d = opts.cssBefore.clip.match(/(\d+)/g);
var t = parseInt(d[0], 10),
r = parseInt(d[1], 10),
b = parseInt(d[2], 10),
l = parseInt(d[3], 10);
opts.before.push(function(curr, next, opts) {
if (curr == next) return;
var $curr = $(curr),
$next = $(next);
$.fn.cycle.commonReset(curr, next, opts, true, true, false);
opts.cssAfter.display = 'block';
var step = 1,
count = parseInt((opts.speedIn / 13), 10) - 1;
(function f() {
var tt = t ? t - parseInt(step * (t / count), 10) : 0;
var ll = l ? l - parseInt(step * (l / count), 10) : 0;
var bb = b < h ? b + parseInt(step * ((h - b) / count || 1), 10) : h;
var rr = r < w ? r + parseInt(step * ((w - r) / count || 1), 10) : w;
$next.css({
clip: 'rect(' + tt + 'px ' + rr + 'px ' + bb + 'px ' + ll + 'px)'
});
(step++ <= count) ? setTimeout(f, 13): $curr.css('display', 'none');
})();
});
$.extend(opts.cssBefore, {
display: 'block',
opacity: 1,
top: 0,
left: 0
});
opts.animIn = {
left: 0
};
opts.animOut = {
left: 0
};
};
})(jQuery);
</script>
<script type="text/javascript">
$(function() {
$('#slideshow img:first').fadeIn(800, function() {
$('#slideshow').cycle({
speed: 800,
timeout: 160
});
});
});
</script>
<!-- Inline Script Include Widget - End -->
</div>
<style>
.playbook {
background: url('/~/media/Images/Features/Event/Feature-Event-MF-c.ashx') left center;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
position: relative;
margin: 0px;
padding: 0px;
height: 540px;
}
.playbookpad {
padding-top: 60px;
padding-bottom: 60px
}
@media (min-width: 768px) {
.playbookpad {
padding-top: 80px;
padding-bottom: 80px
}
}
</style>
<div class="container-fluid nopad" style="background-color: #ededed;">
<section class="image-edge pt0 pb0 pt-xs-0 pb-xs-0">
<div class="row">
<div class="col-md-6 col-sm-4 p0 playbook"></div>
<div class="col-md-5 col-sm-7 playbookpad" style="padding-left: 40px;" title="Micro-Fulfilment Playbook">
<h6 class="mb8 uppercase">FUTURE-FORWARD FULFILMENT</h6>
<h2 class="mb8" style="line-height: 1.1em;">Why Micro-Fulfilment Is Retailers’ Answer to Modern Consumer Demand</h2>
<p class="mb24"> Consumers are 77% more likely to shop at a store if it offers same-day delivery. Download our playbook to see how micro-fulfilment can provide a scalable, profitable solution to rapid delivery demands. </p>
<p class="mb0">
<a class="btn btn-filled btn-lg mb16" href="/en/solutions/solutions-by-system/microfulfillment"> LEARN ABOUT MICRO-FULFILMENT <em class="icon-sm ti-arrow-circle-right" style="color: #ffffff; font-size: 16px; vertical-align: -2px; padding-left: 8px;"></em></a>
</p>
</div>
</div>
</section>
</div>
<!--footer-->
<div class="container-fluid nopad nextstep">
<section class="bg2-primary" style="padding-top: 30px; padding-bottom: 30px; background-color: #939597">
<div class="container">
<div class="row row-eq-height-footer">
<div class="col-xs-12 col-sm-12 col-md-6 col-lg-6 text-left">
<h3 class="mb0" style="color: #fff"> Start a Conversation </h3>
<p style="color: #fff"> Dematic modular solutions produce a strong return on investment. Connect with a Dematic representative and we will help you find the right solution for your business or answer any questions you may have. </p>
</div>
<div class="col-xs-6 col-sm-6 col-md-3 col-md-offset-1 col-lg-3 text-left borderleft">
<i class="ti ti-email" style="font-size: 50px; color: #fff"></i>
<h4 class="mb0" style="color: #fff">Get In Touch</h4>
<p style="color: #fff; margin-bottom: 8px"> Complete a brief form and we will get right back to you. </p>
<div class="goto mb0 mt0" style="text-align: left">
<a class="gotolink gotowhite " href="/en/contact">Provide Your <span class="lastword">Info <i class="ti-arrow-circle-right"></i></span></a>
</div>
</div>
<div class="col-xs-6 col-sm-6 col-md-3 col-lg-3 text-left borderleft">
<i class="ti ti-mobile" style="font-size: 50px; color: #fff"></i>
<h4 class="mb0" style="color: #fff">Phone</h4>
<p style="color: #fff; margin-bottom: 8px"> Give us a call, we would love to hear from you. </p>
<h5 class="mt0 mb0">
<a href="tel:+44 1295 274 600" class="whitelink">+44 1295 274 600</a>
</h5>
</div>
</div>
</div>
</section>
</div>
<div class="container-fluid nopad" style="border-top: 1px solid #dedede; background-color: #f5f5f5">
<footer class="footer-1 bg-light">
<div class="container">
<div class="row">
<div class="col-xs-6 col-sm-3 col-md-3 mb-xs-32">
<ul style="padding-left: 0">
<li class="mb16"><a href="/en/industries/industries-overview">Industries</a></li>
<li class="mb16"><a href="/en/solutions/solutions-by-function">Solutions</a></li>
<li class="mb16"><a href="/en/products/products-overview">Products</a></li>
<li class="mb16"><a href="/en/software/software-overview">Dematic iQ Software</a></li>
<li class="mb16"><a href="/en/services-and-support/services">Customer Services</a></li>
</ul>
</div>
<div class="col-xs-6 col-sm-3 col-md-3 mb-xs-32">
<ul style="padding-left: 0">
<li class="mb16"><a href="/en/services-and-support/customer-support">Customer Support</a></li>
<li class="mb16"><a href="/en/about/about-dematic">About Dematic</a></li>
<li class="mb16"><a href="/en/news-and-events">News & Events</a></li>
<li class="mb16"><a href="/en/about/careers">Careers at Dematic</a></li>
<li class="mb16"><a href="/en/contact">Contact Us</a></li>
</ul>
</div>
<div class="col-xs-12 col-sm-6 col-md-6">
<div class="widget">
<div>
<div class="col-xs-7 col-md-6 col-sm-6" style="padding-left: 0; margin-left: 0">
<h5 class="title mb0" style="padding-left: 0">Follow Dematic</h5>
</div>
<div class="col-xs-5 col-md-6 col-sm-6 text-right">
<ul class="list-inline social-list mb0">
<li>
<a href="https://twitter.com/dematicglobal" target="_blank">
<i class="ti-twitter-alt"></i>
</a>
</li>
<li>
<a href="https://www.linkedin.com/company/dematic/" target="_blank">
<i class="ti-linkedin"></i>
</a>
</li>
<li>
<a href="https://www.facebook.com/Dematicglobal" target="_blank">
<i class="ti-facebook"></i>
</a>
</li>
<li>
<a href="https://www.youtube.com/user/DematicEurope" target="_blank">
<i class="ti-youtube"></i>
</a>
</li>
</ul>
</div>
</div>
<div style="clear: both"></div>
<hr>
<div class="twitter-feed">
<div class="tweets-feed" data-feed-name="dematiceurope" id="tweets-0">
</div>
</div>
</div>
</div>
</div>
</div>
</footer>
</div>
<div class="container-fluid nopad" style="border-top: 1px solid #ededed; background-color: #4c4c4c; position: relative">
<div class="container uppercase" style="position: absolute; right: 0px; top: -30px; background-color: #939597; width: 80px; height: 30px; color: #fff; text-align: center; line-height: 30px; font-size: 12px">
<a href="#" class="back-to-top">
Top <i class="ti-angle-double-up" style="vertical-align: -1px"></i>
</a>
</div>
<footer class="footer-1 bg-light pb16 pt24">
<div class="container pt0 mt0">
<div class="row v-align-children">
<div class="col-xs-12 col-sm-9 col-md-10 col-lg-10">
<h5 style="margin-bottom: 0; font-weight: 400; color: #ededed">
<span style="color:#fdba30">Power</span> the Future of Commerce
</h5>
<div class="sub">
<a href="/en/legal/legal">Legal Notice</a>
<span class="lastword">| <a href="/en/legal/terms-of-use">Terms of Use</a>
</span>
<span class="lastword">| <a href="/en/legal/privacy-policy">Privacy Policy</a>
</span>
<span class="lastword">| <a href="/en/legal/cookies">Cookies</a>
</span>
<span class="lastword">| <a href="/en/legal/candidate">Candidate Privacy Notice</a>
</span>
<span class="lastword">| <a href="/en/contact">Contact Us</a>
</span>
</div>
</div>
<div class="col-xs-12 col-sm-3 col-md-2 col-lg-2 pt0">
<div class="logobottom">
<img alt="Logo" src="/Content/img/logo-white.png" class="img-responsive mb8">
<div class="sub"> © 2021 Dematic </div>
</div>
</div>
</div>
</div>
</footer>
</div>
<script src="/Content/js/dematic.bundle.min.js"></script>
<script src="/Content/js/blazy.min.js"></script>
<!-- Search Modal -->
<div class="modal fade" id="search" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-controls-modal="your_div_id" data-backdrop="static" data-keyboard="false">
<div class="modal-dialog search-dialog">
<div class="modal-content-2">
<div class="modal-body" align="left" style="margin-top: 0; padding-top: 100px; background-color: transparent !important">
<div class="row">
<div class="col-lg-12" style="margin: 0; padding: 0">
<div id="pnlSearch" class="input-group" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'btnSearch')">
<span class="input-group-btn">
<button class="btn-search" type="button">Search:</button>
</span>
<input name="txtSearch" type="text" id="txtSearch" class="form-control-2" style="width: 100%">
<span class="input-group-btn">
<input type="submit" name="btnSearch" value="Go!" id="btnSearch" class="btn-search" style="background-color: #fdba30; margin: 0; color: #fff; padding-left: 12px; padding-right: 12px">
</span>
<span class="input-group-btn">
<button class="btn-search close" type="button" style="background-color: #4c4c4c; margin: 0; width: 60px; color: #fff; opacity: 1.0" data-dismiss="modal" aria-label="Close">X</button>
</span>
</div>
<!-- /input-group -->
</div>
<!-- /.col-lg-6 -->
</div>
</div>
</div>
</div>
</div>
</form>
Text Content
* Blog * Downloads & Resources Brochures Case Studies eBooks & White Papers Video * News & Events Dematic in the News Events Press Releases Webinars * Careers * Contact Us Support Power the Future of Commerce MENU * Industries * SOLUTIONS TO COMPETE AND WIN IN YOUR MARKET Dematic is optimising your supply chain with technologies that are transforming your industry. Learn More * * Industries Overview * Apparel * Durable Manufacturing * E-Commerce * Food & Beverage * Retail Order Fulfillment - General Merchandise Solutions * Grocery * Healthcare * Non-Durable Manufacturing * Parcel * Third-Party Logistics * Wholesales/B2B * * Solutions * SOLUTIONS DESIGNED FOR THE FUNCTIONAL AREAS OF YOUR FACILITY Dematic solutions optimise material and information flow within factories, warehouses, and distribution centres to ensure operational success. Learn More * * Solutions by System * Micro-Fulfilment * Merchandise Returns * Pouch * Solutions Overview * Inbound Handling * Convey and Transport * Storage and Buffering * Case Picking * Piece Picking * Outbound Handling * * Products * THE BEST SELECTION FOR THE BEST SOLUTION Dematic has a robust selection of quality product options to deliver the ideal solution for your facility. Learn More * * Products Overview * AGV Systems * Conveyor Systems * Overhead Systems * Palletising and Depalletising * Voice and Lights * Robotic Systems * Sortation Systems * Storage Systems * Workstation Systems * * Software * DEMATIC IQ® Dematic iQ software delivers intelligent adaptability by connecting warehouse operations, maintenance, and analytics systems into one comprehensive ecosystem. Learn More * * Dematic iQ Overview * Dematic InSights * Dematic iQ Optimise * Dematic iQ Virtual * Dematic iQ Workflow * Dematic Sprocket * Matflo * SAP Solutions * SAP EWM * SAP LES * Dematic SubSuite 2.0 * SAP TM * Project Methodology * Your Benefit * Legacy Systems * E'wms® Warehouse Management System * * Services & Support * LIFECYCLE SUPPORT Dematic works with you to ensure the best possible performance through the lifecycle of your system. Learn More * * Services * Consultancy & Training * Enterprise Asset Management System * Field Service Operations * Modernisations & Upgrades * Remote Services * Resident Services * Warranty Management for Europe/EMEA * Customer Support * Spare Parts * Technical Support * * About * WE OPTIMIZE YOUR SUPPLY CHAIN Dematic is a leading supplier of integrated automated technology, software and services to optimise the supply chain. Learn More * * About Dematic * Dematic Turns 200 * Innovation * The KION Group * Solutions Expertise * Leadership * ISO 9001 Certified * Compliance * Suppliers * Careers at Dematic * Life at Dematic * Open Positions * Our Stories * * Blog * Downloads & Resources * Brochures * Case Studies * eBooks & White Papers * Video * News & Events * Dematic in the News * Events * Press Releases * Webinars * Careers * Contact Us * Worldwide * * Asia Pacific * Australia - English * India - English * Indonesia - English * Korea - English * Malaysia - English * New Zealand - English * Philipines - English * Singapore - English * Taiwan - English * Thailand - English * Vietnam - English * China * China - 中国版 * * Europe/EMEA * Austria - Deutsch * Belgium - Français Nederlands * Denmark - English * Estonia - English * Finland - English * France - Français * Germany - Deutsch * Ireland - English * Italy - Italiano * Latvia - English * Lithuania - English * Netherlands - Nederlands * Norway - English * Poland - Polski * Portugal - Português * Russia - Русский * South Africa - English * Spain - Español * Sweden - English * Switzerland - Deutsch * United Kingdom - English UK * * Latin America * Argentina - Español * Bolivia - Español * Brazil - Português * Chile - Español * Colombia - Español * Costa Rica - Español * Ecuador - Español * Panama - Español * Paraguay - Español * Peru - Español * Uruguay - Español * North America * Canada - English Français * Mexico - Español * United States - English * POWER THE FUTURE OF COMMERCE Designed for your vertical market – Dematic builds and supports intelligent, automated solutions for manufacturing, warehouse, and distribution environments. Learn More INNOVATION IN THE NORDICS Learn more BIG IMPACT FOR SMALL SPACES Learn more about AutoStore CUSTOMIZE YOUR MICRO-FULFILMENT SOLUTION Assess your business needs INDUSTRIES You know your market — Dematic delivers the solutions to meet your specific industry needs. Explore SOLUTIONS BY INDUSTRY Understanding trends and providing solutions that meet your specific industry needs. Explore PRODUCTS Products are the tools necessary to get a job done — Dematic has the best selection for the best solution. Explore 1. 2. 3. 4. 5. SOLUTIONS FOR THE FUTURE OF COMMERCE: MICRO-FULFILMENT RAPID ORDER FULFILMENT The Dematic Micro-Fulfilment solution is a powerful combination of intelligent automation hardware and proprietary software specifically designed to help retailers across industries address increased consumer demand for rapid online order fulfilment. Learn About Micro-Fulfilment SOLUTIONS THAT OPTIMISE YOUR SUPPLY CHAIN: ROBOTIC PICKING SYSTEMS LIGHTS-OUT ORDER FULFILLMENT As customers demand faster, more accurate order fulfilment, distribution centres that rely on manual labour are struggling to keep pace. Dematic Robotic Systems replace scarce and expensive labour with automated solutions for key warehouse functions, including the last touch in the order fulfilment process. Learn More SOLUTIONS THAT OPTIMISE YOUR SUPPLY CHAIN: DEMATIC STORAGE SYSTEMS STORAGE & RETRIEVAL, BUFFERING, RACKING & SHELVING Whether it is for heavy unit loads like pallets, or smaller loads like totes and cases, storage is a fundamental requirement of every distribution centre. Storage systems provide process improvements that support gains in productivity, space utilisation, inventory control, real-time load tracking, and reduced labour costs. Learn More SOLUTIONS THAT OPTIMISE YOUR SUPPLY CHAIN: DEMATIC AGVS RELIABLE, AUTONOMOUS MOBILE ROBOTIC SOLUTIONS Automated Guided Vehicles (AGVs) are used in a variety of industries to transport and store products and materials without human intervention. Equally at home in factories, warehouses, distribution centres, and shipping areas, AGVs are a safe and secure way to increase process efficiency and improve business profitability. Learn More SOLUTIONS THAT OPTIMISE YOUR SUPPLY CHAIN: VOICE & LIGHTS OPTIMISED PICK AND PUT OPERATIONS Dematic voice, mobile display, and light technologies are ideal for a variety of system-directed applications, and can provide increased productivity, accuracy, and flexibility in warehousing operations. Learn More FEATURED CASE STUDY: TOSHIBA THE CHALLENGE A key driver for the project was the optimization of space within Toshiba’s new distribution center in order to reduce the overall footprint and costs of the new facility. Our Solution FUTURE-FORWARD FULFILMENT WHY MICRO-FULFILMENT IS RETAILERS’ ANSWER TO MODERN CONSUMER DEMAND Consumers are 77% more likely to shop at a store if it offers same-day delivery. Download our playbook to see how micro-fulfilment can provide a scalable, profitable solution to rapid delivery demands. LEARN ABOUT MICRO-FULFILMENT START A CONVERSATION Dematic modular solutions produce a strong return on investment. Connect with a Dematic representative and we will help you find the right solution for your business or answer any questions you may have. GET IN TOUCH Complete a brief form and we will get right back to you. Provide Your Info PHONE Give us a call, we would love to hear from you. +44 1295 274 600 * Industries * Solutions * Products * Dematic iQ Software * Customer Services * Customer Support * About Dematic * News & Events * Careers at Dematic * Contact Us FOLLOW DEMATIC * * * * -------------------------------------------------------------------------------- Top POWER THE FUTURE OF COMMERCE Legal Notice | Terms of Use | Privacy Policy | Cookies | Candidate Privacy Notice | Contact Us © 2021 Dematic Search: X PRIVACY PREFERENCE CENTER When you visit any website, it may store or retrieve information on your browser, mostly in the form of cookies. This information might be about you, your preferences or your device and is mostly used to make the site work as you expect it to. The information does not usually directly identify you, but it can give you a more personalized web experience. Because we respect your right to privacy, you can choose not to allow some types of cookies. Click on the different category headings to find out more and change our default settings. However, blocking some types of cookies may impact your experience of the site and the services we are able to offer. More information Allow All MANAGE CONSENT PREFERENCES STRICTLY NECESSARY COOKIES Always Active These cookies are necessary for the website to function and cannot be switched off in our systems. They are usually only set in response to actions made by you which amount to a request for services, such as setting your privacy preferences, logging in or filling in forms. You can set your browser to block or alert you about these cookies, but some parts of the site will not then work. These cookies do not store any personally identifiable information. PERFORMANCE COOKIES Performance Cookies These cookies allow us to count visits and traffic sources so we can measure and improve the performance of our site. They help us to know which pages are the most and least popular and see how visitors move around the site. All information these cookies collect is aggregated and therefore anonymous. If you do not allow these cookies we will not know when you have visited our site, and will not be able to monitor its performance. FUNCTIONAL COOKIES Functional Cookies These cookies enable the website to provide enhanced functionality and personalisation. They may be set by us or by third party providers whose services we have added to our pages. If you do not allow these cookies then some or all of these services may not function properly. TARGETING COOKIES Targeting Cookies These cookies may be set through our site by our advertising partners. They may be used by those companies to build a profile of your interests and show you relevant adverts on other sites. They do not store directly personal information, but are based on uniquely identifying your browser and internet device. If you do not allow these cookies, you will experience less targeted advertising. BACK BUTTON PERFORMANCE COOKIES Vendor Search Search Icon Filter Icon Clear checkbox label label Apply Cancel Consent Leg.Interest checkbox label label checkbox label label checkbox label label Reject All Confirm My Choices We use cookies to improve your website experience, provide personalized content and enhanced social media features. You may modify your cookie settings any time in our Preference Center by clicking “Cookie Settings.” For more information, see our Privacy Policy. Accept All Cookies Cookies Settings