Commit e3f111e8 by cy

finish the about

parent 6e5e0590
menu:
Home: /
Archives: /archives
\ No newline at end of file
- id: home
link: /
icon: home
class: menu-home
- id: about
link: /about
icon: user
class: menu-about
- id: reading
link: /reading
icon: book
class: menu-reading
# 颜色配置
color:
header: indigo
footer: indigo
page_nav: indigo
side_nav: indigo darken-1
tag: green lighten-1
article_title_link: indigo
link: pink
pagination: pink
tab: pink
archive_item: grey
fab: pink
fab_2: green
fab_3: yellow darken-1
new: pink
about_header: indigo
about_title: indigo
google_code_prettify: prettify-tomorrow-night-eighties
\ No newline at end of file
<%- partial('plugin/noscript') %>
<script src="<%- config.root %>js/jquery.min.js"></script>
<script src="<%- config.root %>js/materialize.min.js"></script>
<%- partial('plugin/main_javascript') %>
<%- partial('plugin/google_code_prettify') %>
<%- partial('plugin/analytics') %>
<%- partial('plugin/mathjax') %>
<%- partial('pagenav', {nav_head: __('current_page') + __('page_name.categories'), partial_path: 'post/category', archive_html: null}) %>
<article>
<div class="card">
<div class="card-content">
......@@ -23,4 +27,3 @@
</div>
</article>
<%- partial('plugin/comment') %>
<footer class="page-footer <%= theme.color.footer %> darken-1">
<% if (site.data.link) { %>
<div class="footer-container container">
<div class="row">
<% if (site.data.link.social) { %>
<div class="social-group col m4 s12">
<h5 class="white-text"><%= __('social') %></h5>
<% for (var type in site.data.link.social) { %>
<a class="social-link" href="<%= site.data.link.social[type] %>" target="_blank">
<i class="fa fa-2x fa-<%= type %>"></i>
</a>
<% } %>
<%- partial('plugin/page_stat') %>
</div>
<% } %>
<% if (site.data.link && site.data.link.extern) { %>
<div class="col m8 s12">
<h5 class="white-text"><%= __('blogroll') %></h5>
<% for (var name in site.data.link.extern) { %>
<a class="social-link" href="<%= site.data.link.extern[name] %>" target="_blank"><%= name %></a>
<% } %>
</div>
<% } %>
</div>
</div>
<% } %>
<div class="container">
<div class="row center">
<a href="http://sgool.cn/">智能电网运行与优化实验室</a>
</div>
</div>
<div class="footer-copyright <%= theme.color.link %>-link-context">
<div class="container">
<%= theme.copyright %>
<p class="right" style="margin-top: 0;"> <%=__('powered.modified') %><a href="">CAI Yu</a></p>
<br/>
</div>
</div>
</footer>
\ No newline at end of file
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
<title><%= config.title %></title>
</head>
\ No newline at end of file
<nav class="page-nav hide-on-small-only">
<div class="nav-wrapper <%= theme.color.page_nav %>">
<span class="breadcrumb"><%= nav_head %></span>
<% if (partial_path) { %>
<%- partial(partial_path) %>
<% } %>
<% if (archive_html) { %>
<%- archive_html %>
<% } %>
</div>
</nav>
<% if (theme.google_analytics){ %>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', '<%= theme.google_analytics %>', 'auto');
ga('send', 'pageview');
</script>
<% } %>
<% if (theme.tencent_analytics){ %>
<script type="text/javascript" src="http://tajs.qq.com/stats?sId=<%= theme.tencent_analytics %>" charset="UTF-8"></script>
<% } %>
<%
var pageId = page.path;
var pageUrl = page.permalink;
var pageTitle = page.title;
%>
<% if (theme.disqus_shortname && page.comments){ %>
<section id="comment">
<div id="disqus_thread"></div>
<script>
var disqus_config = function() {
this.page.url = '<%= pageUrl %>';
this.page.identifier = '<%= pageId %>';
};
(function() {
var d = document,
s = d.createElement('script');
s.src = '//<%= theme.disqus_shortname %>.disqus.com/embed.js';
s.setAttribute('data-timestamp', + new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>Please enable JavaScript to view the
<a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a>
</noscript>
</section>
<% } else if (theme.duoshuo_shortname && page.comments){ %>
<section id="comment">
<div class="card">
<div class="card-content">
<!-- Duoshuo Comment BEGIN -->
<div class="ds-thread" data-thread-key="<%= pageId %>" data-title="<%= pageTitle %>" data-url="<%= pageUrl %>"></div>
<script type="text/javascript">
console.log(document.querySelector('.ds-thread'));
var duoshuoQuery = {
short_name: '<%= theme.duoshuo_shortname %>'
};
(function() {
var ds = document.createElement('script');
ds.type = 'text/javascript';
ds.async = true;
ds.src = (document.location.protocol == 'https:'
? 'https:'
: 'http:') + '//static.duoshuo.com/embed.js';
ds.charset = 'UTF-8';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ds);
})();
</script>
<!-- Duoshuo Comment END -->
</div>
</div>
</section>
<% } else if (theme.yungentie_product_key && page.comments){ %>
<div id="cloud-tie-wrapper" class="cloud-tie-wrapper"></div>
<script>
var cloudTieConfig = {
url: document.location.href,
sourceId: "",
productKey: "<%= theme.yungentie_product_key %>",
target: "cloud-tie-wrapper"
};
</script>
<script src="https://img1.cache.netease.com/f2e/tie/yun/sdk/loader.js"></script>
<% } %>
<script src="<%- config.root %>js/prettify.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("pre").addClass("prettyprint");
prettyPrint();
});
</script>
<script>
(function($) {
$(document).ready(function() {
// 隐藏禁用javascript(针对微信内置浏览器)的提示
$('.noscript').hide();
// 图片缩放效果
var $imgs = $('img').not('.slider-image').not('.avatar-image').not('.carousel-image').not('.card-cover-image').not('.qrcode');
// 给图片加上点击放大效果(materialbox插件)
$imgs.addClass('materialboxed').each(function(i, el) {
$(this).attr('data-caption', $(this).attr('alt') || ' ');
}).materialbox();
// 优化表格的显示
$('table').each(function() {
var $table = $(this);
// 除去多行代码的情况
if ($table.find('pre').length == 0) {
$table.addClass('responsive-table striped bordered');
}
});
// 首页幻灯片
$('.slider').slider({indicators: true, full_width: true, interval: 8000});
$(".button-collapse").sideNav();
$(".category-menu").sideNav();
// 针对gallery post
$('.carousel').carousel({full_width: true});
$('.carousel-control.prev').click(function() {
$('.carousel').carousel('prev');
});
$('.carousel-control.next').click(function() {
$('.carousel').carousel('next');
});
// 文章目录
$('article').not('.simple-article').find('h1').add('h2').add('h3').add('h4').add('h5').add('h6').scrollSpy();
// 目录随屏幕滚动(防止目录过长越过footer)
var $toc = $('.toc');
var scrollTargetTop = 0;
$(window).scroll(function() {
var $activeLink = $toc.find('a.active.section');
if ($(window).scrollTop() < 100) {
scrollTargetTop = 0;
} else {
if ($activeLink[0]) {
scrollTargetTop = $activeLink.offset().top - $toc.offset().top;
}
}
$toc.css('top', '-' + scrollTargetTop + 'px');
});
// 修正文章目录的left-border颜色
var color = $('.table-of-contents-text').css('color');
$('.table-of-contents-link').css('border-left-color', color);
// 针对移动端做的优化:FAB按钮点击一下收回
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
$('.fixed-action-btn').addClass('click-to-toggle');
}
// 回到顶部
$('.btn-return-top').click(function() {
$('body, html').animate({
scrollTop: 0
}, 500);
});
// 重置读书页面的Tab标签页的颜色
$('li.tab a').hover(function() {
$(this).toggleClass('text-lighten-4');
});
$('.indicator').addClass('<%= theme.color.tab %> lighten-2');
<% if (site.data.hint) { %>
// 添加new标签
$('<%= site.data.hint.new.selector.join(', ') %>').append('<span class="new badge <%= theme.color.new %>"></span>');
<% } %>
// 搜索功能
$('.modal-trigger').leanModal({
// 打开搜索框时自动聚焦
ready: function() {
if ($('#search').is(":visible")) {
$('#search-input').focus();
}
}
});
var searchXml = "<%= config.search ? config.search.path : '' %>";
if (searchXml.length == 0) {
searchXml = "search.xml";
}
var searchPath = "<%= config.root %>" + searchXml;
initSearch(searchPath, 'search-input', 'search-result');
});
// 初始化搜索与匹配函数
var initSearch = function(path, search_id, content_id) {
'use strict';
$.ajax({
url: path,
dataType: "xml",
success: function(xmlResponse) {
// get the contents from search data
var datas = $("entry", xmlResponse).map(function() {
return {
title: $("title", this).text(),
content: $("content", this).text(),
url: $("url", this).text()
};
}).get();
var $input = document.getElementById(search_id);
var $resultContent = document.getElementById(content_id);
$input.addEventListener('input', function() {
var str = '<ul class=\"search-result-list\">';
var keywords = this.value.trim().toLowerCase().split(/[\s\-]+/);
$resultContent.innerHTML = "";
if (this.value.trim().length <= 0) {
return;
}
// perform local searching
datas.forEach(function(data) {
var isMatch = true;
var content_index = [];
var data_title = data.title.trim().toLowerCase();
var data_content = data.content.trim().replace(/<[^>]+>/g, "").toLowerCase();
var data_url = data.url;
var index_title = -1;
var index_content = -1;
var first_occur = -1;
// only match artiles with not empty titles and contents
if (data_title != '' && data_content != '') {
keywords.forEach(function(keyword, i) {
index_title = data_title.indexOf(keyword);
index_content = data_content.indexOf(keyword);
if (index_title < 0 && index_content < 0) {
isMatch = false;
} else {
if (index_content < 0) {
index_content = 0;
}
if (i == 0) {
first_occur = index_content;
}
}
});
}
// show search results
if (isMatch) {
keywords.forEach(function(keyword) {
var regS = new RegExp(keyword, "gi");
data_title = data_title.replace(regS, "<span class=\"search-keyword <%= theme.color.link %> lighten-2\">" + keyword + "</span>");
});
str += "<li><a href='" + data_url + "' class='search-result-title'>" + data_title + "</a>";
var content = data.content.trim().replace(/<[^>]+>/g, "");
if (first_occur >= 0) {
// cut out 100 characters
var start = first_occur - 20;
var end = first_occur + 80;
if (start < 0) {
start = 0;
}
if (start == 0) {
end = 100;
}
if (end > content.length) {
end = content.length;
}
var match_content = content.substring(start, end);
// highlight all keywords
keywords.forEach(function(keyword) {
var regS = new RegExp(keyword, "gi");
match_content = match_content.replace(regS, "<span class=\"search-keyword <%= theme.color.link %> lighten-2\">" + keyword + "</span>");
});
str += "<p class=\"search-result\">..." + match_content + "...</p>"
}
str += "</li>";
}
});
str += "</ul>";
$resultContent.innerHTML = str;
});
}
});
}
})(jQuery);
</script>
<% if (theme.mathjax) { %>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}
});
</script>
<script type="text/javascript" async
src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-MML-AM_CHTML">
</script>
<% } %>
<noscript>
<div class="noscript">
<p class="center-align">当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器</p>
</div>
</noscript>
<div class="noscript">
<p class="center-align">当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器</p>
</div>
<% if (theme.page_stat) { %>
<script async src="//dn-lbstatics.qbox.me/busuanzi/2.3/busuanzi.pure.mini.js">
</script>
<div class="site-visitors-container white-text">
<span>
<i class="fa fa-user"></i>
<span class="busuanzi-value" id="busuanzi_value_site_uv"></span>
</span>
<span>&nbsp;|&nbsp;</span>
<span>
<i class="fa fa-eye"></i>
<span class="busuanzi-value" id="busuanzi_value_site_pv"></span>
</span>
</div>
<% } %>
<!-- Donate Module -->
<div id="donate_module">
<style type="text/css">
.hidden {
display: none;
}
.donate_bar a.btn_donate {
display: inline-block;
width: 82px;
height: 82px;
background: url("http://img.t.sinajs.cn/t5/style/images/apps_PRF/e_media/btn_reward.gif") no-repeat;
_background: url("http://img.t.sinajs.cn/t5/style/images/apps_PRF/e_media/btn_reward.gif") no-repeat;
-webkit-transition: background 0s;
-moz-transition: background 0s;
-o-transition: background 0s;
-ms-transition: background 0s;
transition: background 0s;
}
.donate_bar a.btn_donate:hover {
background-position: 0 -82px;
}
.donate_bar .donate_txt {
display: block;
color: #9d9d9d;
font: 14px/2 "Microsoft Yahei";
}
.bold {
font-weight: bold;
}
img.qrcode {
width: 90%;
margin-bottom: 10px;
}
@media only screen and (min-width: 1025px) {
img.qrcode {
width: 40%;
margin-right: 10px;
}
}
</style>
<!-- btn_donate & tips -->
<div id="donate_board" class="donate_bar center">
<a id="btn_donate" class="btn_donate" target="_self" href="javascript:;" title="Donate 打赏"></a>
<span class="donate_txt">能看到这的都是真爱,打个赏呗=。=</span>
</div>
<!-- /btn_donate & tips -->
<!-- donate guide -->
<div id="donate_guide" class="donate_bar center hidden">
<% for (var i in site.data.about.reward) { %>
<img class="qrcode" src="<%= site.data.about.reward[i] %>" title="打赏"/>
<% } %>
</div>
<!-- /donate guide -->
<!-- donate script -->
<script type="text/javascript">
document.getElementById('btn_donate').onclick = function() {
$('#donate_board').addClass('hidden');
$('#donate_guide').removeClass('hidden');
}
function donate_on_web() {
$('#donate').submit();
}
</script>
<!-- /donate script -->
</div>
<!-- /Donate Module -->
<div class="gallery carousel carousel-slider">
<% if (item.photos.length){ %>
<% item.photos.forEach(function(photo){ %>
<span class="carousel-item"><img class="carousel-image" src="<%- photo %>"></span>
<% }); %>
<% } else { %>
<img class="carousel-item" src="<%- item.photos %>">
<% } %>
<div class="control">
<div class="carousel-control prev">
<i class="fa fa-left"></i>
</div>
<div class="carousel-control next">
<i class="fa fa-right"></i>
</div>
</div>
</div>
<% if (item.prev) { %>
<p class="<%= theme.color.link %>-link-context">
<a href="<%= url_for(item.prev.path) %>" rel="next" title="<%= item.prev.title %>">
<%= __('prev', item.prev.title) %>
</a>
</p>
<% } %>
<% if (item.next) { %>
<p class="<%= theme.color.link %>-link-context">
<a href="<%= url_for(item.next.path) %>" rel="next" title="<%= item.next.title %>">
<%= __('next', item.next.title) %>
</a>
</p>
<% } %>
<span id="busuanzi_container_page_pv" class="read-times-container">
<i class="fa fa-eye"></i>
<span id="busuanzi_value_page_pv"></span>
</span>
<div class="toc <%= theme.color.link %>-link-context hide-on-med-and-down">
<%- toc(item.content, {class: 'section table-of-contents', list_number: false}) %>
</div>
<% if (item.tags && item.tags.length > 0){ %>
<div class="tags-row">
<% item.tags.forEach(function(tag) { %>
<a href="#" class="chip <%= theme.color.tag %>"><%= tag %></a>
<% }); %>
</div>
<% } %>
<time class="<%= theme.color.link %>-link-context" datetime="<%= item.date.toDate().toISOString() %>"><a href="<%- url_for(item.path) %>"><%= item.date.format(config.date_format) %></a></time>
<% if (item.link){ %>
<% if (item.title){ %>
<h1><a href="<%- item.link %>" target="_blank"><%= item.title || __('no_title') %></a></h1>
<% } else { %>
<h1><a href="<%- item.link %>" target="_blank"><%= item.link || __('no_title') %></a></h1>
<% } %>
<% } else { %>
<% if (index){ %>
<h1 class="<%= theme.color.article_title_link %>-link-context"><a href="<%- url_for(item.path) %>"><%= item.title || __('no_title') %></a></h1>
<% } else { %>
<h1><%= item.title || __('no_title') %></h1>
<% } %>
<% } %>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="favicon.ico">
<title>SGOOL计算平台</title>
<!-- Bootstrap core CSS -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="css/jumbotron.css" rel="stylesheet">
<link href="css/team.css" rel="stylesheet">
<style>
img {
width:100%;height:100%;
}
</style>
</head>
<body>
<div class="container selfContainer">
<div class="row">
<main class="col-md-3">
<div class="text-center selfContent">
<div class="subContent">
<img src="<%= page.pic %>" id="selfimg" style="width:195px; margin: 0 auto;" class="rounded-circle align-middle" alt="..." />
<h1 id="selfname" class='subContent-h1'><%= page.name %></h1>
<p id="selftitle" class="subContent-p">电气工程 | <%= page.degree %></p>
</div>
<div class="subFooter">
</div>
</div>
</main>
<main class="col-md-9">
<div class="selfSection">
<%- page.content %>
<div class="selfSection">
</main>
</div>
</div>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script>window.jQuery || document.write('<script src="../js/jquery-slim.min.js"><\/script>')</script>
<script src="../js/popper.min.js"></script>
<script src="../js/bootstrap.min.js"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>建电网</title>
<link rel="shortcut icon" href="/images/title-icon.png">
<link href='http://fonts.googleapis.com/css?family=Open+Sans:400,800italic,800,700italic,700,600italic,400italic,600,300italic,300|Oswald:400,300,700' rel='stylesheet' type='text/css'>
<!-- Bootstrap -->
<link href="/fonts/iconfont.css" rel="stylesheet">
<link href="/css/bootstrap.min.css" rel="stylesheet">
<link href="/css/font-awesome.css" rel="stylesheet">
<link href="/css/owl.carousel.css" rel="stylesheet">
<link href="/css/owl.theme.css" rel="stylesheet">
<link href="/css/owl.transitions.css" rel="stylesheet">
<link href="/css/about.style.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="js/html5shiv.min.js"></script>
<script src="js/respond.min.js"></script>
<![endif]-->
<!--
<script type="text/javascript" src="http://api.map.baidu.com/api?ak=3ZaYAG1rsoHLexYooG7XKnhavsysa3u7&type=lite&v=1.0"></script>
<script type="text/javascript">
var map = new BMap.Map('mapContainer');
// 创建地图实例
var point = new BMap.Point(120.129918,30.267315);
// 创建点坐标
map.centerAndZoom(point, 18);
// 初始化地图, 设置中心点坐标和地图级别
var marker = new BMap.Marker(point);
map.addOverlay(marker);
</script> -->
</head>
<body data-spy="scroll" data-target=".main-nav">
<header class="st-navbar">
<nav class="navbar navbar-default navbar-fixed-top clearfix" role="navigation">
<div class="container"><!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#sept-main-nav">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/"><img src="/images/logo3.png" alt="" class="img-responsive" style="float: left" ><p style="float: right;margin: auto 10px;font-size: 1.55em;height: 30px; padding-top:5px;color: #fff;">SGOOL</p></a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<!-- <div class="collapse navbar-collapse main-nav" id="sept-main-nav">
<ul class="nav navbar-nav navbar-right">
<li class="active"><a href="#home">主页</a></li>
<li><a href="#about">业务板块</a></li>
<li><a href="#liucheng">业务流程</a></li>
<li><a href="#contact">预约勘查</a></li>
<li><a href="#service">我们的优势</a></li>
<li><a href="#partner">合作伙伴</a></li>
<li><a href="#portfolio">我们的案例</a></li>
</ul>
</div> --><!-- /.navbar-collapse -->
</div>
</nav>
</header>
<section class="home" id="home" data-stellar-background-ratio="0.4">
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="st-home-unit">
<div class="hero-txt">
<!--<p class="hero-work">打造电力行业新生态</p>-->
<h2 class="hero-title">浙江大学电气学院</h2>
<p class="hero-sub-title">SGOOL实验室</p>
<!-- <a href="#" class="btn btn-default btn-lg left-btn">Purchase Now</a> -->
<!--<a href="#" class="btn btn-main btn-lg">Find Out More</a>-->
</div>
</div>
</div>
</div>
</div>
</section>
<section class="about" id="about" style="margin-bottom: 100px;">
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="section-title st-center">
<h3>关于实验室</h3>
<!-- <p>business unit</p> -->
</div>
<p style="font-size: 18px;"><strong>智能电网运行与优化实验室</strong>(SGOOL)于清华大学电机系(2009年)与浙江大学电气工程学院(2013年)分别成立,学术带头人为宋永华教授(英国皇家工程院院士、IEEE Fellow),宋永华院士现任澳门大学校长和讲座教授、清华大学和浙江大学客座教授。实验室自成立以来,致力于促进中国智能电网与可再生能源的发展,专注于电力系统优化运行与控制、智能电网、可再生能源、电力市场、能源互联网等研究领域,现已成为一支在国际上具有一定影响力的研究团队。实验室研究团队包括两名教授、一名研究员、四名副教授以及一批博士后与研究生。 实验室在国家/国际科研项目与人才培养等方面取得了突出成果,国际交流密切,已接收海外高校访问学者多名。实验室已承担约12项国家/国际科研项目,包括国家重点研发计划项目、国家高技术研究发展计划项目(863计划)、国家自然科学基金项目和国际科学技术合作项目,以及超过20项电力公司科研项目,相关研究成果已应用于蒙东风电基地、北京电网、华北电网、广东电网、贵州电网、辽宁电网等。2010年至今,实验室共申请专利15项,发表和录用期刊论文约140篇,其中SCI论文50余篇,40余篇发表在IEEE Transactions系列期刊上。研究成果获2017年教育部自然科学一等奖。 </p>
<!--<div class="row mb90">-->
<!--<div class="col-md-6">-->
<!--<p>Texit l, habere se indocti magnosque culpa gravioribus discedere eas indignae diogenem, praetermissum effugiendorum vult dicent, periculum dolere putat. Iucunditatem quid turbulenta patre eae depravatum talem elaborare plerisque repellere, o potiendi tuo aliter, militaris sint tranquillat liberalitati. Locus delicata divelli intemperantes audeam maximisque sitne pulcherrimum aegritudines studium. Habent inveniri fidelissimae aequi andriam laudabilis. Libido censet assiduitas quae probantur tantalo exquisitaque erunt laudatur optari. Late suapte veterum enim qui magna securi eaque proficiscuntur.</p>-->
<!--</div>-->
<!--<div class="col-md-6">-->
<!--<img src="photos/about.jpg" alt="" class="img-responsive">-->
<!--</div>-->
<!--</div>-->
<!-- <div class="row">
<div class="col-md-4">
<div class="st-member">
<div class="st-member-info">
<strong class="st-member-name">电力工程</strong>
<p class="st-member-pos">electric power project</p>
<div class="skills">
<div class="skill">
<strong>行业占有率</strong>
<span>33%</span>
<div class="progress">
<div class="progress-bar progress-bar-sept" role="progressbar" aria-valuenow="33" aria-valuemin="0" aria-valuemax="100" style="width: 33%;">
<span class="sr-only">60% Complete</span>
</div>
</div>
</div>
<div class="skill">
<strong>好评率</strong>
<span>94%</span>
<div class="progress">
<div class="progress-bar progress-bar-sept" role="progressbar" aria-valuenow="94" aria-valuemin="0" aria-valuemax="100" style="width: 94%;">
<span class="sr-only">94% Complete</span>
</div>
</div>
</div>
<div class="skill">
<strong>业内排行</strong>
<span>66%</span>
<div class="progress">
<div class="progress-bar progress-bar-sept" role="progressbar" aria-valuenow="66" aria-valuemin="0" aria-valuemax="100" style="width: 66%;">
<span class="sr-only">66% Complete</span>
</div>
</div>
</div>
</div>
<div class="st-member-social">
所有需要用电的用户都是我们的客户。我们除了为客户
完成施工任务外,还负责电力部门的手续办理、设计、验收等工作。我
们的涉猎到学校、医院、市政、住宅、工业、农业、旅游等各行各业以
及各种形式的存在的公司。
</div>
</div>
<div class="st-member-img">
<img src="photos/member1.jpg" alt="" class="img-responsive">
</div>
</div>
</div>
<div class="col-md-4">
<div class="st-member">
<div class="st-member-img">
<img src="photos/member2.jpg" alt="" class="img-responsive">
</div>
<div class="st-member-info">
<strong class="st-member-name">光伏电站</strong>
<p class="st-member-pos">photovoltaic power station</p>
<div class="skills">
<div class="skill">
<strong>行业占有率</strong>
<span>22%</span>
<div class="progress">
<div class="progress-bar progress-bar-sept" role="progressbar" aria-valuenow="22" aria-valuemin="0" aria-valuemax="100" style="width: 22%;">
<span class="sr-only">22% Complete</span>
</div>
</div>
</div>
<div class="skill">
<strong>好评率</strong>
<span>96%</span>
<div class="progress">
<div class="progress-bar progress-bar-sept" role="progressbar" aria-valuenow="96" aria-valuemin="0" aria-valuemax="100" style="width: 96%;">
<span class="sr-only">96% Complete</span>
</div>
</div>
</div>
<div class="skill">
<strong>业内排行</strong>
<span>35%</span>
<div class="progress">
<div class="progress-bar progress-bar-sept" role="progressbar" aria-valuenow="35" aria-valuemin="0" aria-valuemax="100" style="width: 35%;">
<span class="sr-only">35% Complete</span>
</div>
</div>
</div>
</div>
<div class="st-member-social">
2013年开始,国家开始实施光伏发电国家补贴政策,补贴期限20年,此后国家各部门相继出台有力政策,支持光伏并网国家补贴与地方补贴同步进行。
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="st-member">
<div class="st-member-img">
<img src="photos/member3.jpg" alt="" class="img-responsive">
</div>
<div class="st-member-info">
<strong class="st-member-name">电锅炉改造</strong>
<p class="st-member-pos">Electric boiler reforming</p>
<div class="skills">
<div class="skill">
<strong>行业占有率</strong>
<span>18%</span>
<div class="progress">
<div class="progress-bar progress-bar-sept" role="progressbar" aria-valuenow="18" aria-valuemin="0" aria-valuemax="100" style="width: 18%;">
<span class="sr-only">18% Complete</span>
</div>
</div>
</div>
<div class="skill">
<strong>好评率</strong>
<span>91%</span>
<div class="progress">
<div class="progress-bar progress-bar-sept" role="progressbar" aria-valuenow="91" aria-valuemin="0" aria-valuemax="100" style="width: 91%;">
<span class="sr-only">91% Complete</span>
</div>
</div>
</div>
<div class="skill">
<strong>业内排行</strong>
<span>42%</span>
<div class="progress">
<div class="progress-bar progress-bar-sept" role="progressbar" aria-valuenow="42" aria-valuemin="0" aria-valuemax="100" style="width: 42%;">
<span class="sr-only">42% Complete</span>
</div>
</div>
</div>
</div>
<div class="st-member-social">
新能源具有储量丰富、可以循环使用、没有污染或很少污染等特点。
新能源:又称非常规能源。是指传统能源之外的各种能源形式。指刚开始开发利用或正在积极研究、有待推广的能源,如太阳能、地热能、风能、海洋能、生物质能和核聚变能等。
</div>
</div>
</div>
</div> -->
</div>
</div>
</div>
</div>
</section>
<section class="clients" id="liucheng" style="background: #187cc2;">
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="section-title st-center">
<h3 style="color: #fff">创新实验室</h3>
<!-- <p style="color: #fff">business process</p> -->
</div>
<p style="color: #fff;font-size: 18px;">由现任浙江大学电气工程学院副院长郭创新教授带领的一支研究团队组成。实验室致力于促进中国智能电网与可再生能源的发展,着力开展电网智能调度控制与风险调度控制理论与应用、可再生能源接入与智能配电网技术、智能信息处理技术及在电力系统中的应用等方面的科学研究和学术创新,培养了一批高素质、高水平的创新型研究人才和技术骨干。实验室在科研项目与人才培养等方面取得了突出成果。近年来,实验室参与国家级及重大横向项目40余项,其中国家自然科学基金2项,国家863计划3项。自成立以来,实验室成员在《中国电机工程学报》、IEEE Trans on Power Systems等杂志上发表学术论文220篇,其中SCI收录38篇,EI收录158篇,论文引用次数1614次,其中他引次数1506次,SCI单篇最大引用次数335次。申请专利12项,已授权发明专利6项,实用新型专利1项,软件著作权4项。2005年“复杂电力系统的稳定控制与智能优化理论与方法的研究”项目获教育部自然科学一等奖,2006年“电力系统稳定与经济运行的理论与方法研究”项目获浙江省高校科研成果一等奖,2007年入选教育部“新世纪优秀人才支持计划”,2008年“电力信息集成中的若干关键技术研究与开发”项目获教育部科学进步一等奖。 </p>
<!-- <div class="row">
<img src="/images/liucheng.png" width="100%" />
</div> -->
</div>
</div>
</div>
</section>
<!-- <section class="contact" id="calc" style="background: #187cc2;">
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="section-title st-center">
<h3 style="color: #fff;">光伏计算器</h3>
<p style="color: #fff;">Photovoltaic calculator</p>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<p style="color: #fff;">请输入您的光伏可安装面积我们会为您估算出您一年的收益。</p>
</div>
<div class="col-md-6">
<form class="contact-form" role="form">
<input type="text" class="form-control" id="area" name="area" placeholder="请输入您的房屋占地面积(平方米)">
<button class="btn btn-main btn-lg" type="submit" id="clac_button" data-loading-text="<i class='fa fa-spinner fa-spin'></i> Sending...">
开始计算</button>
<div><label id="calc_l1"></label></div>
<div><label id="calc_l2"></label></div>
<div><label id="calc_l3"></label></div>
<div><label id="calc_l4"></label></div>
<div><label id="calc_l5"></label></div>
<div><label id="calc_l6"></label></div>
</form>
<div id="result-message" role="alert"></div>
</div>
</div>
</div>
</section> -->
<!--
<section class="portfolio" id="portfolio">
<div class="container-fluid ">
<div class="row">
<div class="col-md-12 no-padding ">
<div class="section-title st-center">
<h3>我们的案例</h3>
<p>our products</p>
</div>
<div class="filter mb40">
<form id="filter">
<fieldset class="group">
<label class="btn btn-default btn-main"><input type="radio" name="filter" value="all" checked="checked">全部</label>
<label class="btn btn-default"><input type="radio" name="filter" value="photography">电力工程</label>
<label class="btn btn-default"><input type="radio" name="filter" value="design">光伏电站</label>
<label class="btn btn-default"><input type="radio" name="filter" value="codding">电锅炉改造</label>
</fieldset>
</form>
</div>
<div class="grid">
<figure class="portfolio-item" data-groups='["photography"]'>
<img src="/images/dl1.jpg" alt=""/>
<figcaption>
<h2><span>沈阳亿丰时代广场</span></h2>
<p>沈阳亿丰时代广场Ⅲ期电力设备安装工程</p>
</figcaption>
</figure>
<figure class="portfolio-item" data-groups='["photography"]'>
<img src="/images/dl2.jpg" alt=""/>
<figcaption>
<h2><span>高科西部汽配</span></h2>
<p>高科西部汽配新城配电工程</p>
</figcaption>
</figure>
<figure class="portfolio-item" data-groups='["photography"]'>
<img src="/images/dl3.jpg" alt=""/>
<figcaption>
<h2><span>沈阳奥园会展广场</span></h2>
<p>沈阳奥园会展广场二期CD区自维电及二次返出工程
</p>
</figcaption>
</figure>
<figure class="portfolio-item" data-groups='["photography"]'>
<img src="/images/dl4.jpg" alt=""/>
<figcaption>
<h2><span>松下</span></h2>
<p>松下蓄电池10kV外线配套工程</p>
</figcaption>
</figure>
<figure class="portfolio-item" data-groups='["photography"]'>
<img src="/images/dl5.jpg" alt=""/>
<figcaption>
<h2><span>女人街商业广场</span></h2>
<p>女人街商业广场10kV备用电源进线工程</p>
</figcaption>
</figure>
<figure class="portfolio-item" data-groups='["photography"]'>
<img src="/images/dl6.jpg" alt=""/>
<figcaption>
<h2><span>华电乌套海风电场</span></h2>
<p>华电乌套海风电场300MW风电项目
35KV集电线路及机组变安装调式工程</p>
</figcaption>
</figure>
<figure class="portfolio-item" data-groups='["photography"]'>
<img src="/images/dl7.jpg" alt=""/>
<figcaption>
<h2><span>阳光100</span></h2>
<p>阳光100新城自维配电工程</p>
</figcaption>
</figure>
<figure class="portfolio-item" data-groups='["photography"]'>
<img src="/images/dl8.jpg" alt=""/>
<figcaption>
<h2><span>全运会保卫指挥中心</span></h2>
<p>10KV全运会保卫指挥中心变电所新建工程</p>
</figcaption>
</figure>
<figure class="portfolio-item" data-groups='["design"]'>
<img src="/images/gf1.jpg" alt=""/>
<figcaption>
<h2><span>葫芦岛南票区</span></h2>
<p>葫芦岛南票区台集屯镇人民政府 500KW光伏新建工程</p>
</figcaption>
</figure>
<figure class="portfolio-item" data-groups='["design"]'>
<img src="/images/gf2.jpg" alt=""/>
<figcaption>
<h2><span>铁岭农村用户</span></h2>
<p>铁岭农村用户光伏10KW项目</p>
</figcaption>
</figure>
<figure class="portfolio-item" data-groups='["codding"]'>
<img src="/images/gl2.jpg" alt=""/>
<figcaption>
<h2><span>胜利机械有限责任公司</span></h2>
<p>长春市胜利机械设备配套有限责任公司锅炉改造</p>
</figcaption>
</figure>
</div>
</div>
</div>
</div>
</section>
-->
<!-- <section class="service" id="service">
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="section-title st-center">
<h3>我们的团队</h3>
</div>
<div class="row">
<div class="col-md-3">
<div class="st-feature">
<div class="st-feature-icon"><i class="fa fa-cog"></i></div>
<strong class="st-feature-title">强大的电力平台</strong>
<p>一站式服务,为您解决所有的电力之忧...</p>
</div>
</div>
<div class="col-md-3">
<div class="st-feature">
<div class="st-feature-icon"><i class="fa fa-university"></i></div>
<strong class="st-feature-title">强大的人才库</strong>
<p>为您解决安装,维护,统计的琐碎工作...</p>
</div>
</div>
<div class="col-md-3">
<div class="st-feature">
<div class="st-feature-icon"><i class="fa fa-comments"></i></div>
<strong class="st-feature-title">高效率的团队</strong>
<p>第一时间响应并解决您的问题...</p>
</div>
</div>
<div class="col-md-3">
<div class="st-feature">
<div class="st-feature-icon"><i class="fa fa-life-ring"></i></div>
<strong class="st-feature-title">全新的商业模式</strong>
<p>线上线下让您的体验优质的电力服务...</p>
</div>
</div>
</div>
</div>
</div>
</div>
</section> -->
<section class="service" id="service">
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="section-title st-center">
<h3>我们的团队</h3>
</div>
<div class="row" style="width: 80%;margin: 0 auto;">
<div class="col-md-6">
<a href="#"><div class="st-feature">
<img src="/images/fr.jpg">
<strong class="st-feature-title">唐坤杰(博士生)</strong>
<p style="color: #000;">执行策划</p>
</div></a>
</div>
<div class="col-md-6">
<a href="#"><div class="st-feature">
<img src="/images/fr.jpg">
<strong class="st-feature-title">唐坤杰(博士生)</strong>
<p style="color: #000;">执行策划</p>
</div></a>
</div>
</div>
<br/><br/>
<div class="row student">
<div class="col-md-2">
<a href="#"><div class="st-feature">
<img src="/images/fr.jpg">
<strong class="st-feature-title">唐坤杰(博士生)</strong>
<p style="color: #000;">执行策划</p>
</div></a>
</div>
<div class="col-md-2">
<a href="#"><div class="st-feature">
<img src="/images/fr.jpg">
<strong class="st-feature-title">唐坤杰(博士生)</strong>
<p style="color: #000;">执行策划</p>
</div></a>
</div>
<div class="col-md-2">
<a href="#"><div class="st-feature">
<img src="/images/fr.jpg">
<strong class="st-feature-title">唐坤杰(博士生)</strong>
<p style="color: #000;">执行策划</p>
</div></a>
</div>
<div class="col-md-2">
<a href="#"><div class="st-feature">
<img src="/images/fr.jpg">
<strong class="st-feature-title">唐坤杰(博士生)</strong>
<p style="color: #000;">执行策划</p>
</div></a>
</div>
<div class="col-md-2">
<a href="#"><div class="st-feature">
<img src="/images/fr.jpg">
<strong class="st-feature-title">唐坤杰(博士生)</strong>
<p style="color: #000;">执行策划</p>
</div></a>
</div>
<div class="col-md-2">
<a href="#"><div class="st-feature">
<img src="/images/fr.jpg">
<strong class="st-feature-title">唐坤杰(博士生)</strong>
<p style="color: #000;">执行策划</p>
</div></a>
</div>
</div>
<div class="row student">
<div class="col-md-3">
<a href="#"><div class="st-feature">
<img src="/images/fr.jpg">
<strong class="st-feature-title">唐坤杰(博士生)</strong>
<p style="color: #000;">执行策划</p>
</div></a>
</div>
<div class="col-md-3">
<a href="#"><div class="st-feature">
<img src="/images/fr.jpg">
<strong class="st-feature-title">唐坤杰(博士生)</strong>
<p style="color: #000;">执行策划</p>
</div></a>
</div>
<div class="col-md-3">
<a href="#"><div class="st-feature">
<img src="/images/fr.jpg">
<strong class="st-feature-title">唐坤杰(博士生)</strong>
<p style="color: #000;">执行策划</p>
</div></a>
</div>
<div class="col-md-3">
<a href="#"><div class="st-feature">
<img src="/images/fr.jpg">
<strong class="st-feature-title">唐坤杰(博士生)</strong>
<p style="color: #000;">执行策划</p>
</div></a>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="funfacts" data-stellar-background-ratio="0.4">
<div class="container">
<div class="row">
<div class="col-md-3">
<div class="funfact">
<div class="st-funfact-icon"><i class="fa fa-tasks"></i></div>
<div class="st-funfact-counter" ><span class="st-ff-count" data-from="0" data-to="10" data-runit="1">0</span>+</div>
<strong class="funfact-title">科研课题</strong>
</div><!-- .funfact -->
</div>
<div class="col-md-3">
<div class="funfact">
<div class="st-funfact-icon"><i class="fa fa-coffee"></i></div>
<div class="st-funfact-counter" ><span class="st-ff-count" data-from="0" data-to="642" data-runit="1">0</span>+</div>
<strong class="funfact-title">杯咖啡</strong>
</div><!-- .funfact -->
</div>
<div class="col-md-3">
<div class="funfact">
<div class="st-funfact-icon"><i class="fa fa-code"></i></div>
<div class="st-funfact-counter" ><span class="st-ff-count" data-from="0" data-to="7000" data-runit="1">0</span>+</div>
<strong class="funfact-title">行代码</strong>
</div><!-- .funfact -->
</div>
<div class="col-md-3">
<div class="funfact">
<div class="st-funfact-icon"><i class="fa fa-graduation-cap"></i></div>
<div class="st-funfact-counter" ><span class="st-ff-count" data-from="0" data-to="20" data-runit="1">0</span>+</div>
<strong class="funfact-title">篇论文</strong>
</div><!-- .funfact -->
</div>
</div>
</div>
</section>
<!-- <section class="clients" id="partner">
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="section-title st-center">
<h3>合作伙伴</h3>
<p>cooperative partner</p>
</div>
<ul class="clients-carousel">
<li><img src="/images/hz1.jpg" class="img-responsive" alt=""></li>
<li><img src="/images/hz2.jpg" class="img-responsive" alt=""></li>
<li><img src="/images/hz7.jpg" class="img-responsive" alt=""></li>
<li><img src="/images/hz8.jpg" class="img-responsive" alt=""></li>
<li><img src="/images/hz3.jpg" class="img-responsive" alt=""></li>
<li><img src="/images/hz4.jpg" class="img-responsive" alt=""></li>
<li><img src="/images/hz5.jpg" class="img-responsive" alt=""></li>
<li><img src="/images/hz6.jpg" class="img-responsive" alt=""></li>
</ul>
</div>
</div>
</div>
</section>
-->
<section class="contact" id="contact">
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="section-title st-center">
<h3>联系我们</h3>
<!-- <p>Make an appointment to survey</p> -->
</div>
</div>
</div>
<div class="row" style="text-align: center">
<!-- <div class="col-md-8">
<div id="mapContainer"></div>
</div>
<div class="col-md-4"> -->
<address>
<strong>浙江大学电气学院</strong>
<br><br>地址:浙江省杭州市浙江大学玉泉校区电机工程楼
<br><br>邮箱:dongshufeng@zju.edu.cn <br><br>
</address>
</div>
</div>
</div>
</section>
<footer class="site-footer">
<div class="container">
<div class="row">
<div class="col-md-12">
Copyright &copy; 2018.SGOOL all rights reserved.
</div>
</div>
</div>
</footer>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="/js/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="/js/bootstrap.min.js"></script>
<script src="/js/jquery.easing.min.js"></script>
<script src="/js/jquery.stellar.js"></script>
<script src="/js/jquery.appear.js"></script>
<script src="/js/jquery.nicescroll.min.js"></script>
<script src="/js/jquery.countTo.js"></script>
<script src="/js/jquery.shuffle.modernizr.js"></script>
<script src="/js/jquery.shuffle.js"></script>
<script src="/js/owl.carousel.js"></script>
<script src="/js/jquery.ajaxchimp.min.js"></script>
<script src="/js/script.js"></script>
</body>
</html>
\ No newline at end of file
......@@ -129,7 +129,7 @@ $(document).ready(function() {
<li><a href="#service">计算服务</a></li>
<li><a href="#download">下载专区</a></li>
<li><a href="#introduction">平台简介</a></li>
<li><a href="#contact">联系我们</a></li>
<li><a href="about">关于我们</a></li>
</ul>
</div>
......@@ -280,8 +280,8 @@ $(document).ready(function() {
<% var count = 0 %>
<% site.pages.each(function (post) { %>
<% if (post.categories == "news") { %>
<% page.posts.each(function (post) { %>
<% if (post.categories.data[0].name == "news") { %>
<% count += 1%>
<div class="article" style="display:none">
<div class="article-title">
......@@ -293,6 +293,9 @@ $(document).ready(function() {
</div>
</div>
<% } else { %>
<p><%= post.categories.data[0].name %></p>
<% } }) %>
<nav aria-label="Page navigation">
......
<!DOCTYPE html>
<html>
<%- partial('_partial/head') %>
<body>
<%- partial('_partial/header') %>
<main class="main">
<%- body %>
</main>
</body>
</html>
\ No newline at end of file
<%- body %>
<div class="container main-container" relag="page">
<%- partial('_partial/article', {item: page, index: false, extra: false}) %>
</div>
<% if (page.categories == 'news') { %>
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<%
var title = [];
if (page.current > 1) title.push(__('page', page.current));
if (page.title) title.push(page.title);
if (page.category) title.push(page.category);
if (page.tag) title.push(page.tag);
if (page.archive){
if (page.year) title.push(__('archive_b', page.year + (page.month ? '/' + page.month : '')));
else title.push(__('archive_a'));
}
title.push(config.subtitle);
%>
<title><%= title.join(' | ') %></title>
<% if (config.author){ %><meta name="author" content="<%= config.author %>"><% } %>
<% if (page.description){ %>
<meta name="description" content="<%= page.description %>">
<% } else if (config.description){ %>
<meta name="description" content="<%= config.description %>">
<% } else if (page.excerpt){ %>
<meta name="description" content="<%= strip_html(page.excerpt).replace(/^\s*/, '').replace(/\s*$/, '') %>">
<% } else if (page.content){ %>
<meta name="description" content="<%= strip_html(page.content).replace(/^\s*/, '').replace(/\s*$/, '').substring(0, 150) %>">
<% } %>
<% if (page.keywords){ %><meta name="keywords" content="<%= page.keywords %>"><% } %>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<% if (page.title){ %><meta property="og:title" content="<%= page.title %>"/><% } %>
<meta property="og:site_name" content="<%= config.title %>"/>
<% if(page.cover) { %>
<meta property="og:image" content="<%= page.cover %>" />
<% } else { %>
<meta property="og:image" content="<%= config.cover %>"/>
<% } %>
<link rel="icon" type="image/png" href="<%- config.root %>favicon.png">
<link rel="alternate" href="<% if (theme.rss){ %><%- theme.rss %><% } else { %><%- config.root %>atom.xml<% } %>" title="<%= config.title %>" type="application/atom+xml">
<link rel="stylesheet" href="<%- config.root %>css/lib/materialize.min.css">
<link rel="stylesheet" href="<%- config.root %>css/lib/font-awesome.min.css">
<link rel="stylesheet" href="<%- config.root %>css/style.css" media="screen" type="text/css">
<% if (theme.google_code_prettify) { %>
<link rel="stylesheet" href="<%- config.root %>css/lib/<%= theme.google_code_prettify %>.css" type="text/css">
<% } else { %>
<link rel="stylesheet" href="<%- config.root %>css/lib/prettify_default.css" type="text/css">
<% } %>
<!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
</head>
<body>
<div class="container main-container">
<%- partial('_partial/article', {item: page, index: false}) %>
</div>
<%- partial('_partial/after_footer') %>
</body>
</html>
<% } else { %>
<p> <%= page.categories[0] %> </p>
<%- partial('_partial/teams/teamMember') %>
<% } %>
@font-face {
font-family: 'Material Icons';
font-style: normal;
font-weight: 400;
src: url(/css/fonts/MaterialIcons-Regular.eot); /* For IE6-8 */
src: local('Material Icons'),
local('MaterialIcons-Regular'),
url(/css/fonts/MaterialIcons-Regular.woff2) format('woff2'),
url(/css/fonts/MaterialIcons-Regular.woff) format('woff'),
url(/css/fonts/MaterialIcons-Regular.ttf) format('truetype');
}
.material-icons {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px; /* Preferred icon size */
display: inline-block;
width: 1em;
height: 1em;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: 'liga';
}
html, body
font-family "Roboto", "sans-serif", "微软雅黑", "Helvetica Neue"
body
background-color #f5f5f5
display: flex;
min-height: 100vh;
flex-direction: column;
main
flex: 1 0 auto;
html
color rgba(0, 0, 0, 0.8)
.container
width 1200px
@media (max-width: 767px)
width 90%
.row
margin-left auto
margin-right auto
.container.main-container
@media (max-width: 767px)
width 100%
// HTML标签样式
// 重置materialize中的各种列表样式
ul, ol
padding-left 20px
&.tabs
padding-left 0
ul, ul li
list-style-type disc
word-break break-word
nav, .fixed-action-btn
ul
padding-left 0
li
list-style-type none
ul.pagination, ul.collapsible, ul.indicators
padding-left 0
li
list-style-type none
img
max-width 100%
padding 4px
background-color #F5F5F5
border 1px solid #ddd
border-radius 4px
strong
font-weight bold
blockquote
background-color rgba(0, 0, 0, 0.03)
padding 0.6rem 0.6rem 0.6rem 1.2rem
// p
// margin 0 !important
table
margin-bottom 1.5em
nav ul
a:hover
background-color rgba(0, 0, 0, 0)
nav .brand-logo
font-size 1.6rem
// 侧滑栏样式
.side-nav
li, a
padding 0 15px
.card
margin-top 0
&.medium
height 440px
.card-content
padding 25px 25px 30px
@media (max-width: 767px)
padding-left 15px
padding-right 15px
.card-action
padding-left 25px
padding-right 25px
// .card-content p
// margin 0.5em 0
.chip
height initial
line-height 18px
padding 4px 14px
color white
.breadcrumb
font-size 1em
// 图片lightbox点击缩放效果
.materialboxed
display initial
margin-top 10px
max-width 100%
&.active
max-width initial
// 幻灯片的导航按钮位置
.slider .indicators
bottom 60px
z-index 10
.main-container
margin-top 30px
.mt-0
margin-top 0
.collection a.collection-item:not(.active):hover
background-color #f5f5f5
// 撤销card-action中链接会强制变大写的效果
.card .card-action a:not(.btn):not(.btn-large):not(.btn-floating)
text-transform initial
// 将默认的图标字体换为FontAwesome
.breadcrumb:before
content "\f105"
font-family: FontAwesome
// FontAwesome
.fa
margin-right 5px
// Footer
footer.page-footer
padding-top inherit
/* 字体大小 */
normal-font-size = 1em
simple-title-font-size = 1.4em
page-sub-title-font-size = 1.6em
/* 颜色 */
//头部背景颜色
color-header-background = #00529c
//头部按钮hover背景
color-header-button-hover = #3498db
//尾部背景颜色
color-footer-background = #2c3e50
//背景
color-body = #ecf8ff
//正文字体
color-font = #333333
//文章标题颜色
color-title = #1976d2
color-title-hover = #42a5f5
//文章子标题颜色(h3)
color-entry-subtitle = #333
//标签背景颜色
color-tag = #16a085
//链接颜色
color-a = #1976d2
color-a-hover = #42a5f5
//页面的子标题(如留言,当前所在位置等等)
color-page-sub-title = #9b59b6
//尾部文字颜色
color-footer-text = #fff
color-footer-a = #9fc9e9
color-footer-a-hover = #16a085
color-link = #069
color-strong = #333
// Font
font-default = "Helvetica Neue", "Helvetica", Arial, sans-serif
font-serif = "Georgia", serif
font-mono = Consolas, "微软雅黑", Monaco, Menlo, Courier New, monospace
font-title = "微软雅黑", "Droid Serif", Helvetica Neue, Helvetica, Arial, sans-serif
// 全局边距
header-footer-height-padding = 10px
page-padding = 200px
body-padding-top = 50px
// 读书
book-width = 150px
book-height = 200px
.about-page
.header
padding 40px 15px 30px
.avatar-wrapper
.avatar-image
width 160px
.info
padding 0 20px
p
line-height 24px
margin-top 25px
margin-bottom 0
color white
text-shadow 1px 1px 1px #444
.name
font-size 1.8em
.desc
margin-top 15px
font-size 1em
.social-group
margin-top 15px
section
margin-bottom 20px
h1
font-size 1.6rem
margin-top 10px
margin-bottom 15px
// 技能
ul.skill-list, ul.skill-list li
list-style-type none
ul.skill-list
padding-left 0
.skill-list li
margin-bottom 0
.split
margin-top 5px
.skills .fa
margin-right 0
// 项目
.project-item
display inline-block
// margin-right 20px
width 100%
img
padding 0
.card-title
font-weight 400
font-size 20px
text-shadow 1px 1px 1px black
line-height 30px
.card-tag
position absolute
top 15px
right 10px
// 重置
.about-page.row
margin-left 0
margin-right 0
.row
margin-left 0
margin-right 0
// .col
// padding-left 0
// padding-right 0
.archive-title
font-weight normal
font-size 20px
margin-bottom 10px
text-shadow 0 0 1px #fff
&:before
font-family font-icon
content '\f073'
padding-right 15px
&.tag
&:before
content '\f02b'
&.category
&:before
content '\f07b'
.archive-year
font-size 2.4em
font-family Candara,arial
font-style italic
color #069
text-shadow rgba(255,255,255,0.9) 0 1px 0
padding 0 30px
margin 0 0 10px 0
@media screen and (max-width:580px)
padding 0 20px
a:after
content '\f08e'
font 12px FontAwesome
padding-left 10px
vertical-align super
.sep
border-bottom 1px solid #aaa
box-shadow rgba(255,255,255,0.3) 0 1px 0
\ No newline at end of file
.simple-article
margin-bottom 30px
article
.entry
margin-top 20px
.article-title h1
font-family "微软雅黑", "sans-serif", "Helvetica Neue"
font-size 2em
font-weight bold
line-height 1.4
margin-top 0
margin-bottom 10px
color color-entry-subtitle
a:not(.chip)
color color-a
&:hover
color color-a-hover
.simple-article-title h1
font-size simple-title-font-size
padding 5px 0
.tags-row
margin-top 10px
.article-tag
display inline-block
height 32px
line-height 32px
padding 0 12px
border-radius 16px
color white
header
border-radius 0
background none
position relative
padding 0
border-bottom 0
margin-bottom 10px
time
font 0.9em font-title
margin-bottom 5px
display block
line-height 1
&:hover
color color-link
.card-content .entry
font-size 16px
line-height 1.7
@media (max-width: 480px)
line-height 1.5em
p
margin-top 0
margin-bottom 1em
text-align justify
text-justify inter-ideograph
word-break initial
word-break break-word
&:last-child
margin-bottom 0
ul, ol
margin-bottom 1em
ul, ol
margin-bottom 0
h1, h2, h3, h4, h5, h6
margin-top 0
margin-bottom 0.5em
h1
font-size 1.6em
color color-entry-subtitle
h2
font-size 1.4em
color color-entry-subtitle
h3, h4, h5, h6
font-size 1.2em
color color-entry-subtitle
&.nstyle
border-radius 0
padding 0
background none
box-shadow none
iframe
max-width 98%
.caption
display block
margin-top 5px
color #aaa
position relative
font-size 0.9em
padding-left 25px
&:before
content '\f040'
position absolute
font 1.3em font-icon
position absolute
left 0
top 3px
.toc-wrap
float right
-webkit-border-radius 4px
border-radius 4px
background #eee
border 1px solid #ddd
margin-left 1.5em
margin-bottom 2em
padding 15px 20px
line-height 1.6em
>ol
margin-left 0
ol, ul
list-style none
.toc-title
font-weight bold
font-size 1.2em
margin-bottom 0.6em
color #2c3e50
.toc-number
display none
.toc-link
color #0e83cd
text-decoration none
font-size 0.9em
.toc-link:hover
text-decoration underline
.toc-child
margin-left 1em
#comment
margin-top 40px
.title
font-size 40px
font-weight bold
color color-section-title
\ No newline at end of file
a.social-link
display inline-block
color #f5f5f5
margin-right 10px
&:hover
color #e0e0e0
.footer-container
padding-top 20px
.nav-wrapper
padding 0 25px
@media (max-width: 767px)
padding 0 10px
.jPanelMenu-panel
overflow-y hidden
.btn-loadmore
margin-top 20px
opacity 0.9
.feature-guide-container
display none
position absolute
left 0
top 0
z-index 100
.shadow
overflow-y hidden
position absolute
background-color rgba(0, 0, 0, 0.6)
.shadow-light
position absolute
background-color rgba(0, 0, 0, 0)
.feature-box
position relative
max-width 300px
background-color #ffebb5
padding 16px
color #ae2341
.btn-i-know
background-color #f4867b
transition background-color .5s
margin-bottom 0
.btn-i-know:hover
background-color #f5a69e
transition background-color .5s
.feature-description
font-size 1em
\ No newline at end of file
.red-link-context a
color #f44336 !important
&:hover
color #e57373 !important
.pink-link-context a
color #E91E63 !important
&:hover
color #F06292 !important
.purple-link-context a
color #9C27B0 !important
&:hover
color #BA68C8 !important
.deep-purple-link-context a
color #673AB7 !important
&:hover
color #9575CD !important
.indigo-link-context a
color #3F51B5 !important
&:hover
color #7986CB !important
.blue-link-context a
color #2196F3 !important
&:hover
color #64B5F6 !important
.light-blue-link-context a
color #03A9F4 !important
&:hover
color #4FC3F7 !important
.cyan-link-context a
color #00BCD4 !important
&:hover
color #4DD0E1 !important
.teal-link-context a
color #009688 !important
&:hover
color #4DB6AC !important
.green-link-context a
color #4CAF50 !important
&:hover
color #81C784 !important
.light-green-link-context a
color #8BC34A !important
&:hover
color #AED581 !important
.lime-link-context a
color #CDDC39 !important
&:hover
color #DCE775 !important
.yellow-link-context a
color #FFEB3B !important
&:hover
color #FFF176 !important
.amber-link-context a
color #FFC107 !important
&:hover
color #FFD54F !important
.orange-link-context a
color #FF9800 !important
&:hover
color #FFB74D !important
.deep-orange-link-context a
color #FF5722 !important
&:hover
color #FF8A65 !important
.brown-link-context a
color #795548 !important
&:hover
color #A1887F !important
.grey-link-context a
color #9E9E9E !important
&:hover
color #E0E0E0 !important
.blue-grey-link-context a
color #607D8B !important
&:hover
color #90A4AE !important
.page-nav
height 50px
line-height 50px
.float-sitemap
position fixed
right 45px
bottom 50px
@media only screen and (max-width: 600px)
right 10px
bottom 15px
.construction-container
display inline-block
margin-top 40px
.btn
margin-top 20px
// 重置多说评论框中的checkbox被materialize库修改的样式
.ds-sync input[type="checkbox"]
position initial
visibility initial
+label:before
display none
// gallery
article .gallery .control {
opacity: 0;
transition: 0.3s;
}
article .gallery:hover .control {
opacity: 1;
-ms-filter: none;
filter: none;
}
article .gallery .prev,
article .gallery .next {
position: absolute;
top: 0;
width: 50%;
height: 100%;
cursor: pointer;
}
article .gallery .prev:before,
article .gallery .next:before {
position: absolute;
font: 24px/1 FontAwesome;
text-align: center;
width: 24px;
text-shadow: 0 0 15px rgba(0,0,0,0.5);
color: #fff;
margin-top: -12px;
top: 50%;
}
article .gallery .prev {
left: 0;
}
article .gallery .prev:before {
content: '\f053';
left: 10px;
}
article .gallery .next {
right: 0;
}
article .gallery .next:before {
content: '\f054';
right: 10px;
}
// 无JS(一般是微信页)的样式
.noscript
background rgba(0, 0, 0, 0.5)
position fixed
left 0
top 0
width 100%
z-index 9999
animation-duration: 6s;
animation-name: noscript-slide;
p
margin 0
padding 0 30px
color white
@keyframes noscript-slide {
0% {
top: -100px;
}
50% {
top: -100px;
}
100% {
top: 0;
}
}
// 阅读计数与站点访客
.read-times-container
margin-left 15px
.fa
margin-right 0
.site-visitors-container
margin-top 10px
.post {
margin: 1em auto;
padding: 30px 50px;
background-color: #fff;
border: 1px solid #ddd;
box-shadow: 0 0 2px #ddd;
}
.posts {
.post:first-child {
margin-top: 0;
}
.post-title {
font-size: 1.5em;
.post-title-link {
color: #368CCB;
text-decoration: none;
}
}
.post-content {
a {
color: #368CCB;
text-decoration: none;
}
}
.post-meta {
color: #BABABA;
}
}
\ No newline at end of file
.book-item
display inline-block
position relative
img
padding 0
transition all 0.3s ease-out
&:hover img
transform scale(1.05)
.card-content
padding 15px
.card-title
line-height initial
font-size 1.4em
.card.small
.card-image
min-height 70%
max-height 70%
.card-content
max-height 30%
.external-link
font-size 1.2em
.search-modal
padding 30px 20px
max-height 80%
input[type=text]
&:focus
border-bottom-color #757575
box-shadow 0 1px 0 0 #757575
&+label
color #212121
.search-result
margin-top 5px
margin-bottom 15px
user-height = 100px
item-height = 48px
.side-nav
.row
margin-bottom 0
.col
line-height user-height
a
height item-height
line-height item-height
color white
i
height item-height
line-height item-height
width 1.5rem
li
line-height item-height
&:hover, &:active
background-color rgba(0, 0, 0, 0.2)
&.side-user
background-color transparent
.avatar-image
width 50px
padding 0
vertical-align middle
.info
height user-height
p
line-height 24px
margin-top 5px
margin-bottom 0
text-shadow: 1px 1px 1px #444;
.name
font-size 1.2em
.desc
font-size 0.9em
li.side-user
height user-height
// background: url(images/side-user-cover.jpg) no-repeat center center;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
// margin-bottom: 10px;
// 分类目录
collapse-base-padding = 15px
collapse-step-padding = 15px
.collapse-level-0
padding-left collapse-base-padding
.collapse-level-1
padding-left collapse-base-padding + collapse-step-padding * 1
.collapse-level-2
padding-left collapse-base-padding + collapse-step-padding * 2
.collapse-space
margin-bottom 10px
#category-menu.side-nav
a
height item-height * 0.75
line-height item-height * 0.75
i
height item-height * 0.75
line-height item-height * 0.75
li
line-height item-height * 0.75
padding-right 15px
.slider-image
border none
border-radius 0
background-color transparent
padding 0
color-code-background = #042029
color-simple-code-background = #93AAAC
article
pre
padding 10px 16px
.line:after
content: ''
display: inline-block;
code, pre
font-family font-mono
color #333
font-size 1em
// white-space pre-wrap
// word-wrap break-word
p code, li code
margin 0 3px
padding: 0 5px;
border-radius: 5px;
border: 1px solid #e0e0e0
color: #212121;
background-color #eeeeee
pre .keyword
color #859900
pre .tag
color #f8f8f2
pre
// Theme: Monokai plus Solarized(Dark) from Sublime Text theme
.comment
.template_comment
.diff .header
.doctype
.pi
.lisp .string
.javadoc
color #75715c
font-style italic
.doctype
color #268bd2
.keyword
.winutils
.method
.addition
.css .tag
.request
.status
.nginx .title
color #66d9ef
.number
.command
.phpdoc
.tex .formula
.regexp
.hexcolor
color #ae81fc
.string
.tag .value
color #e6db6e
.title
.localvars
.chunk
.decorator
.built_in
.identifier
.vhdl
.literal
.id
color #f22672
.attribute
.variable
.lisp .body
.smalltalk .number
.constant
.class .title
.parent
.haskell .type
color #a6e22e
.preprocessor
.preprocessor .keyword
.shebang
.symbol
.symbol .string
.diff .change
.special
.attr_selector
.important
.subst
.cdata
.clojure .title
color #cb4b16
.deletion
color #dc322f
// 调整hexo默认的代码段(table)样式
figure.highlight
margin-left 0
margin-right 0
overflow auto
td
padding 0
pre
margin 0
overflow auto
figcaption a
position absolute
right 25px
.gutter
width 5%
.toc
position fixed
top 0px
margin-top 15%
left calc(50% + 600px)
ol
list-style-type none
padding-left 1em
.section
margin 2px 0
padding-top 0
padding-bottom 0
.table-of-contents
a.active
border-left-color #2196f3
font-weight bold
a:hover
border-left-color #2196f3
/*
* Sept - Free Bootstrap 3 Theme/Landing page
* Author: CantoThemes
* License: Attribution-NonCommercial CC BY-NC
* License URL: https://creativecommons.org/licenses/by-nc/4.0/
*
* -------------------------------------------------------------------
* This theme under "Attribution-NonCommercial CC BY-NC". You can't remove footer credit link.
*/
body {
font-family: "Open Sans";
color: #808080;
font-weight: 400;
font-size: 14px;
line-height: 26px;
word-spacing: 2px;
-webkit-font-smoothing: antialiased;
}
p {
margin-bottom: 26px;
}
a {
color: #187cc2;
text-decoration: none !important;
-webkit-transition: color 0.3s;
transition: color 0.3s;
}
a:hover {
color: #4c4c4c;
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: "Oswald";
color: #4c4c4c;
letter-spacing: 1px;
font-weight: 400;
}
.form-control {
border-radius: 2px !important;
padding: 15px 20px !important;
height: auto;
border-color: #e5e5e5 !important;
box-shadow: none !important;
}
.form-control:focus {
border-color: #187cc2 !important;
}
.mb250 {
margin-bottom: 250px !important;
}
.mb245 {
margin-bottom: 245px !important;
}
.mb240 {
margin-bottom: 240px !important;
}
.mb235 {
margin-bottom: 235px !important;
}
.mb230 {
margin-bottom: 230px !important;
}
.mb225 {
margin-bottom: 225px !important;
}
.mb220 {
margin-bottom: 220px !important;
}
.mb215 {
margin-bottom: 215px !important;
}
.mb210 {
margin-bottom: 210px !important;
}
.mb205 {
margin-bottom: 205px !important;
}
.mb200 {
margin-bottom: 200px !important;
}
.mb195 {
margin-bottom: 195px !important;
}
.mb190 {
margin-bottom: 190px !important;
}
.mb185 {
margin-bottom: 185px !important;
}
.mb180 {
margin-bottom: 180px !important;
}
.mb175 {
margin-bottom: 175px !important;
}
.mb170 {
margin-bottom: 170px !important;
}
.mb165 {
margin-bottom: 165px !important;
}
.mb160 {
margin-bottom: 160px !important;
}
.mb155 {
margin-bottom: 155px !important;
}
.mb150 {
margin-bottom: 150px !important;
}
.mb145 {
margin-bottom: 145px !important;
}
.mb140 {
margin-bottom: 140px !important;
}
.mb135 {
margin-bottom: 135px !important;
}
.mb130 {
margin-bottom: 130px !important;
}
.mb125 {
margin-bottom: 125px !important;
}
.mb120 {
margin-bottom: 120px !important;
}
.mb115 {
margin-bottom: 115px !important;
}
.mb110 {
margin-bottom: 110px !important;
}
.mb105 {
margin-bottom: 105px !important;
}
.mb100 {
margin-bottom: 100px !important;
}
.mb95 {
margin-bottom: 95px !important;
}
.mb90 {
margin-bottom: 90px !important;
}
.mb85 {
margin-bottom: 85px !important;
}
.mb80 {
margin-bottom: 80px !important;
}
.mb75 {
margin-bottom: 75px !important;
}
.mb70 {
margin-bottom: 70px !important;
}
.mb65 {
margin-bottom: 65px !important;
}
.mb60 {
margin-bottom: 60px !important;
}
.mb55 {
margin-bottom: 55px !important;
}
.mb50 {
margin-bottom: 50px !important;
}
.mb45 {
margin-bottom: 45px !important;
}
.mb40 {
margin-bottom: 40px !important;
}
.mb35 {
margin-bottom: 35px !important;
}
.mb30 {
margin-bottom: 30px !important;
}
.mb25 {
margin-bottom: 25px !important;
}
.mb20 {
margin-bottom: 20px !important;
}
.mb15 {
margin-bottom: 15px !important;
}
.mb10 {
margin-bottom: 10px !important;
}
.mb5 {
margin-bottom: 5px !important;
}
.no-padding {
padding: 0 !important;
}
.float-nan {
float: none;
}
.copyrights{
text-indent:-9999px;
height:0;
line-height:0;
font-size:0;
overflow:hidden;
}
.img-responsive {
margin: 0 auto;
display: inline-block;
*display: inline;
*zoom: 1;
}
.btn {
font-family: "Oswald";
font-size: 16px;
letter-spacing: 1px;
border-radius: 40px;
padding: 8px 30px;
margin-bottom: 5px;
-webkit-transition: color 0.3s, background-color 0.3s, border-color 0.3s;
transition: color 0.3s, background-color 0.3s, border-color 0.3s;
}
.btn.btn-lg {
padding: 10px 35px;
letter-spacing: 2px;
font-size: 21px;
}
.btn.btn-sm {
padding: 7px 20px;
font-size: 14px;
}
.btn.btn-xs {
padding: 5px 15px;
font-size: 12px;
}
.btn-default {
color: #676767;
border-color: #e5e5e5;
}
.btn-default:hover {
color: #fff;
background-color: #187cc2;
border-color: #187cc2;
}
.btn-default-o {
color: #f2f2f2;
border-color: #f2f2f2;
background-color: transparent;
}
.btn-default-o:hover {
color: #187cc2;
background-color: #fff;
border-color: #fff;
}
.btn-main-o {
color: #187cc2;
border-color: #187cc2;
background-color: transparent;
}
.btn-main-o:hover {
color: #fff;
background-color: #187cc2;
border-color: #187cc2;
}
.btn-dark-o {
color: #4c4c4c;
border-color: #4c4c4c;
background-color: transparent;
}
.btn-dark-o:hover {
color: #fff;
background-color: #4c4c4c;
border-color: #4c4c4c;
}
.btn-dark {
color: #fff;
background-color: #4c4c4c;
border-color: #4c4c4c;
}
.btn-dark:hover,
.btn-dark:focus,
.btn-dark:active {
background-color: #333333;
border-color: #333333;
color: #fff;
}
.btn-main {
color: #fff;
background-color: #187cc2;
border-color: #187cc2;
}
.btn-main:hover,
.btn-main:focus,
.btn-main:active {
background-color: #33b5ac;
border-color: #33b5ac;
color: #fff;
}
.btn-link {
font-weight: 400;
color: #187cc2;
}
.btn-link:hover,
.btn-link:focus,
.btn-link:active {
color: #4c4c4c;
text-decoration: none;
}
.section-title {
margin-bottom: 70px;
}
.section-title h3 {
font-family: "Oswald";
text-transform: uppercase;
color: #4c4c4c;
font-weight: 400;
letter-spacing: 2px;
font-size: 28px;
line-height: 48px;
display: inline-block;
*display: inline;
*zoom: 1;
clear: both;
position: relative;
padding: 0 10px;
}
.section-title p {
font-family: "Oswald";
text-transform: uppercase;
color: #187cc2;
font-size: 38px;
line-height: 58px;
font-weight: 700;
letter-spacing: 3px;
}
.section-title.st-center {
text-align: center;
}
.section-title.st-center:before {
margin: auto;
}
.section-title:before {
/*content: "";*/
/*display: block;*/
/*width: 150px;*/
/*height: 150px;*/
/*background-image: url(../images/title-top.png);*/
/*background-repeat: no-repeat;*/
/*background-size: cover;*/
}
.bottom-line {
margin-bottom: 20px;
}
.bottom-line:after {
content: "";
display: block;
width: 50px;
height: 2px;
background-color: #187cc2;
margin-top: 5px;
}
.tooltip.top .tooltip-arrow {
bottom: 1px;
}
.tac {
text-align: center;
}
.nicescroll-rails {
background: rgba(0, 0, 0, 0.1);
width: 5px;
z-index: 9999 !important;
}
.nicescroll-rails:hover {
opacity: 1 !important;
}
.nicescroll-rails > div {
background: #187cc2 !important;
}
/* ---------------------------------------------- /*
* Mouse animate icon
/* ---------------------------------------------- */
.mouse-icon {
position: absolute;
left: 50%;
bottom: 40px;
border: 2px solid #fff;
border-radius: 16px;
height: 40px;
width: 24px;
margin-left: -15px;
display: block;
z-index: 10;
opacity: 0.7;
}
.mouse-icon .wheel {
-webkit-animation-name: drop;
-webkit-animation-duration: 1s;
-webkit-animation-timing-function: linear;
-webkit-animation-delay: 0s;
-webkit-animation-iteration-count: infinite;
-webkit-animation-play-state: running;
-webkit-animation-name: drop;
animation-name: drop;
-webkit-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-timing-function: linear;
animation-timing-function: linear;
-webkit-animation-delay: 0s;
animation-delay: 0s;
-webkit-animation-iteration-count: infinite;
animation-iteration-count: infinite;
-webkit-animation-play-state: running;
animation-play-state: running;
}
.mouse-icon .wheel {
position: relative;
border-radius: 10px;
background: #fff;
width: 2px;
height: 6px;
top: 4px;
margin-left: auto;
margin-right: auto;
}
@-webkit-keyframes drop {
0% {
top: 5px;
opacity: 0;
}
30% {
top: 10px;
opacity: 1;
}
100% {
top: 25px;
opacity: 0;
}
}
@keyframes drop {
0% {
top: 5px;
opacity: 0;
}
30% {
top: 10px;
opacity: 1;
}
100% {
top: 25px;
opacity: 0;
}
}
.home {
background-image: url(../images/big2.jpg);
background-position: top center;
background-attachment: fixed;
background-repeat: no-repeat;
background-size: cover;
background-color: #000;
padding: 100px 0;
position: relative
/* Temp CSS */
/* Temp CSS End */
}
.home .st-brand {
text-align: center;
margin-bottom: 50px;
}
.home .st-home-unit {
position: relative;
}
.home .hero-txt {
color: #fff;
text-align: center;
}
.home .hero-txt .hero-title {
font-family: "Oswald";
color: #fff;
text-transform: uppercase;
font-size: 70px;
line-height: 85px;
font-weight: 400;
letter-spacing: 8px;
word-spacing: 4px;
margin-bottom: 15px;
margin-top: 5px;
padding: 20px 10px;
}
.home .hero-txt .hero-work {
font-family: "Oswald";
font-weight: 300;
letter-spacing: 2px;
margin-bottom: 0;
}
.home .hero-txt .hero-work:after {
content: "";
display: block;
width: 200px;
height: 4px;
margin: 20px auto 0;
background-color: transparent;
border-width: 1px 0;
border-style: solid;
border-color: rgba(255, 255, 255, 0.3);
}
.home .hero-txt a.btn {
text-transform: uppercase;
}
.home .hero-txt a.btn.left-btn {
margin-right: 20px !important;
}
.home .hero-txt .hero-sub-title {
font-family: "Oswald";
font-size: 30px;
letter-spacing: 5px;
font-weight: 300;
margin-bottom: 70px;
}
.home .hero-txt .hero-img {
margin-top: 80px;
}
.st-highlight {
color: #187cc2;
}
.navbar-default {
background-color: transparent;
border-width: 0;
margin-bottom: 0 !important;
height: 102px;
-webkit-transition: background-color 0.3s, height 0.3s;
transition: background-color 0.3s, height 0.3s;
}
.st-navbar-mini .navbar-default {
background-color: rgba(40, 40, 40, 0.95);
height: 60px;
}
/*我写的*/
.st-navbar p{
display: none;
}
.st-navbar-mini p{
display: block;
}
/*.st-navbar-mini .navbar-default{
top:0px;
}
.st-navbar .navbar-default{
top:400px;
-webkit-transition: top 0.3s;
transition: top 0.3s;
}*/
/*我写的*/
.st-navbar-mini .navbar-default .navbar-brand {
padding: 15px 15px;
}
.st-navbar-mini .navbar-default .navbar-brand img {
opacity: 1;
height: 30px;
}
.st-navbar-mini .navbar-default .navbar-nav > li.active > a,
.st-navbar-mini .navbar-default .navbar-nav > li.active a:hover,
.st-navbar-mini .navbar-default .navbar-nav > li.active a:focus,
.st-navbar-mini .navbar-default .navbar-nav > li.active a:active {
background-color: rgba(0, 0, 0, 0.5);
}
.navbar-brand {
height: auto;
padding: 27px 15px;
-webkit-transition: padding 0.3s;
transition: padding 0.3s;
}
.navbar-brand img {
opacity: 0;
height: 0;
-webkit-transition: opacity 0.3s;
transition: opacity 0.3s;
}
.navbar-nav > li > a {
font-family: "Oswald";
font-size: 18px;
font-weight: 300;
letter-spacing: 1px;
padding-left: 20px;
padding-right: 20px;
color: #fff;
-webkit-transition: color 0.3s, background-color 0.3s, padding 0.3s;
transition: color 0.3s, background-color 0.3s, padding 0.3s;
}
.navbar-nav > li > a:hover,
.navbar-nav > li > a:focus,
.navbar-nav > li > a:active {
color: #187cc2;
outline-width: 0;
}
.navbar-nav > li.active > a,
.navbar-nav > li.active a:hover,
.navbar-nav > li.active a:focus,
.navbar-nav > li.active a:active {
color: #187cc2;
}
.navbar-default .navbar-nav > li > a {
color: #fff;
}
.navbar-default .navbar-nav > li.active > a,
.navbar-default .navbar-nav > li.active a:hover,
.navbar-default .navbar-nav > li.active a:focus,
.navbar-default .navbar-nav > li.active a:active {
color: #187cc2;
background-color: rgba(0, 0, 0, 0);
}
.navbar-default .navbar-nav > li > a:hover,
.navbar-default .navbar-nav > li > a:focus {
color: #187cc2;
}
.page-header {
background-image: url(../images/hero-img14.png);
background-position: top center;
background-attachment: fixed;
background-repeat: no-repeat;
background-size: cover;
background-color: #000;
padding: 150px 0 100px;
margin: 0;
border-width: 0;
}
.page-header .page-title {
color: #fff;
text-transform: uppercase;
font-size: 35px;
line-height: 55px;
letter-spacing: 5px;
word-spacing: 4px;
}
.page-breadcrumb {
background-color: #f7f7f7;
background-color: #187cc2;
color: #fff;
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.01);
border-botom: 1px solid #f2f2f2;
padding: 20px 0;
}
.page-breadcrumb .breadcrumb {
background-color: transparent;
border-width: 0;
border-radius: 0;
margin-bottom: 0;
color: #fff;
}
.page-breadcrumb .breadcrumb .active,
.page-breadcrumb .breadcrumb > li + li:before {
color: #fff;
}
.page-breadcrumb .breadcrumb a {
color: #fff;
}
.page-content {
padding: 120px 0;
}
.about {
padding: 100px 0 0;
}
.st-member {
position: relative;
overflow: hidden;
}
.st-member .st-member-info {
width: 100%;
height: 100%;
padding: 70px 35px;
position: absolute;
top: 0;
left: 0;
text-align: center;
background-color: rgba(254, 254, 254, 0.95);
opacity: 1;
-webkit-transform: scale(1);
-ms-transform: scale(1);
transform: scale(1);
-webkit-transition: opacity 0.5s, -webkit-transform 0.5s;
transition: opacity 0.5s, transform 0.5s;
}
.st-member .st-member-info:hover{
opacity: 0 !important;
}
/*.st-member .st-member-info .progress-bar {*/
/*-webkit-transform-origin: left;*/
/*-ms-transform-origin: left;*/
/*transform-origin: left;*/
/*-webkit-transform: scaleX(0);*/
/*-ms-transform: scaleX(0);*/
/*transform: scaleX(0);*/
/*-webkit-transition: -webkit-transform 0.5s ease 0.2s;*/
/*transition: transform 0.5s ease 0.2s;*/
/*}*/
.st-member .st-member-info .st-member-name {
font-family: "Oswald";
display: block;
color: #4c4c4c;
font-size: 30px;
line-height: 50px;
font-weight: 400;
letter-spacing: 3px;
margin-bottom: 20px;
}
.st-member .st-member-info .st-member-name:after {
content: '';
display: block;
height: 2px;
width: 35px;
background-color: #187cc2;
margin: 0 auto;
}
.st-member .st-member-info .st-member-pos {
display: block;
font-family: "Oswald";
font-size: 20px;
line-height: 18px;
font-weight: 300;
letter-spacing: 3px;
font-style: italic;
margin-bottom: 40px;
}
.st-member .st-member-info .st-member-social {
position: absolute;
width: 100%;
left: 0;
bottom: 70px;
}
.st-member .st-member-info .st-member-social ul {
margin: 0;
padding: 0;
}
.st-member .st-member-info .st-member-social ul li {
display: inline-block;
*display: inline;
*zoom: 1;
margin: 0;
padding: 0;
}
.st-member .st-member-info .st-member-social ul li a {
display: block;
width: 70px;
line-height: 40px;
text-align: center;
font-size: 20px;
color: #fff;
border-radius: 30px;
background-color: rgba(0, 0, 0, 0.7);
opacity: 0;
-webkit-transform: translateY(100px);
-ms-transform: translateY(100px);
transform: translateY(100px);
-webkit-transition: background-color 0.3s, opacity 0.3s ease, -webkit-transform 0.5s ease;
transition: background-color 0.3s, opacity 0.3s ease, transform 0.5s ease;
}
.st-member .st-member-info .st-member-social ul li a.facebook:hover {
background-color: #3c5b9b;
}
.st-member .st-member-info .st-member-social ul li a.twitter:hover {
background-color: #2daae1;
}
.st-member .st-member-info .st-member-social ul li a.dribbble:hover {
background-color: #ea4c88;
}
.st-member:hover {
cursor: pointer;
}
.st-member:hover .st-member-info {
opacity: 1;
-webkit-transform: scale(1);
-ms-transform: scale(1);
transform: scale(1);
}
.st-member:hover .st-member-info .st-member-social ul li a {
opacity: 1;
-webkit-transform: translateY(0);
-ms-transform: translateY(0);
transform: translateY(0);
}
.st-member:hover .st-member-info .st-member-social ul li a.facebook {
-webkit-transition: background-color 0.3s, opacity 0.3s ease 0.2s, -webkit-transform 0.5s ease 0.2s;
transition: background-color 0.3s, opacity 0.3s ease 0.2s, transform 0.5s ease 0.2s;
}
.st-member:hover .st-member-info .st-member-social ul li a.facebook:hover {
background-color: #3c5b9b;
}
.st-member:hover .st-member-info .st-member-social ul li a.twitter {
-webkit-transition: background-color 0.3s, opacity 0.3s ease 0.3s, -webkit-transform 0.5s ease 0.3s;
transition: background-color 0.3s, opacity 0.3s ease 0.3s, transform 0.5s ease 0.3s;
}
.st-member:hover .st-member-info .st-member-social ul li a.twitter:hover {
background-color: #2daae1;
}
.st-member:hover .st-member-info .st-member-social ul li a.dribbble {
-webkit-transition: background-color 0.3s, opacity 0.3s ease 0.4s, -webkit-transform 0.5s ease 0.4s;
transition: background-color 0.3s, opacity 0.3s ease 0.4s, transform 0.5s ease 0.4s;
}
.st-member:hover .st-member-info .st-member-social ul li a.dribbble:hover {
background-color: #ea4c88;
}
.st-member:hover .st-member-info .skills .skill:nth-child(2) .progress-bar {
-webkit-transition-delay: 0.3s;
transition-delay: 0.3s;
}
.st-member:hover .st-member-info .skills .skill:nth-child(3) .progress-bar {
-webkit-transition-delay: 0.4s;
transition-delay: 0.4s;
}
.st-member:hover .st-member-info .skills .skill:nth-child(4) .progress-bar {
-webkit-transition-delay: 0.5s;
transition-delay: 0.5s;
}
.st-member:hover .st-member-info .skills .skill:nth-child(5) .progress-bar {
-webkit-transition-delay: 0.6s;
transition-delay: 0.6s;
}
.st-member:hover .progress-bar {
-webkit-transform: scaleX(1);
-ms-transform: scaleX(1);
transform: scaleX(1);
}
.skill {
text-align: left;
}
.skill strong {
font-weight: 400;
}
.skill span {
float: right;
}
.progress {
height: 11px;
padding: 0 3px;
background-color: transparent;
border: 1px solid #ededed;
border-radius: 6px;
box-shadow: none;
}
.progress-bar {
height: 3px;
margin-top: 3px;
border-radius: 2px;
position: relative;
box-shadow: none;
-webkit-transform-origin: left;
-ms-transform-origin: left;
transform-origin: left;
-webkit-animation-name: process;
animation-name: process;
-webkit-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-timing-function: linear;
animation-timing-function: linear;
-webkit-animation-delay: 0.2s;
animation-delay: 0.2s;
}
.progress-bar-sept {
background-color: #187cc2;
}
@-webkit-keyframes process {
0% {
-webkit-transform: scaleX(0);
transform: scaleX(0);
}
100% {
-webkit-transform: scaleX(1);
transform: scaleX(1);
}
}
@keyframes process {
0% {
-webkit-transform: scaleX(0);
transform: scaleX(0);
}
100% {
-webkit-transform: scaleX(1);
transform: scaleX(1);
}
}
.funfacts {
/*background-image: url(../images/funfact4.png);*/
background-color: #187cc2;
background-position: center center;
background-attachment: fixed;
background-size: cover;
padding: 100px 0;
}
.funfacts .funfact {
font-family: "Oswald";
text-align: center;
color: #fff;
}
.funfacts .funfact .st-funfact-icon {
font-size: 42px;
line-height: 90px;
}
.funfacts .funfact .st-funfact-counter {
font-size: 48px;
line-height: 68px;
letter-spacing: 3px;
}
.funfacts .funfact .funfact-title {
font-size: 20px;
line-height: 40px;
letter-spacing: 1px;
font-weight: 300;
}
.funfacts .funfact:after {
content: '';
display: block;
width: 35px;
height: 2px;
background-color: #187cc2;
margin: 0 auto;
}
.service {
padding: 100px 0;
}
.st-feature {
text-align: center;
}
.st-feature .st-feature-icon {
width: 102px;
line-height: 100px;
font-size: 42px;
color: #fff;
margin: 0 auto 20px;
background-color: #187cc2;
border-radius: 50%;
position: relative;
-webkit-transform: rotate(0) scale(1);
-ms-transform: rotate(0) scale(1);
transform: rotate(0) scale(1);
-webkit-transition: color 0.3s, border-color 0.3s, background-color 0.3s, -webkit-transform 0.3s;
transition: color 0.3s, border-color 0.3s, background-color 0.3s, transform 0.3s;
}
.st-feature .st-feature-title {
display: block;
font-family: "Oswald";
/*font-size: 25px;*/
/*line-height: 45px;*/
letter-spacing: 1px;
font-weight: 400;
color: #4c4c4c;
/*margin-bottom: 5px;*/
}
.st-feature:hover .st-feature-icon {
color: #187cc2;
border-color: #187cc2;
background-color: transparent;
-webkit-transform: rotate(360deg) scale(1.8);
-ms-transform: rotate(360deg) scale(1.8);
transform: rotate(360deg) scale(1.8);
}
/*caiyu*/
.st-feature img{
width: 150px;
border: 5px solid #187cc2;
}
.student img{
width: 150px;
border-radius:100px;
}
.st-feature strong{
font-size: 18px;
margin-bottom: 0;
margin-top: 10px;
}
/*caiyu*/
.features-desc {
padding: 100px 0;
background-color: #fcfcfc;
}
ul.styled-list li {
list-style: none;
padding-left: 0;
}
ul.styled-list li:before {
content: '\f00c';
font-family: 'FontAwesome';
display: inline-block;
margin-left: -1.5em;
width: 1.5em;
color: #187cc2;
}
ul.styled-list.list-caret li:before {
content: '\f0da';
}
ul.styled-list.list-hand li:before {
content: '\f0a4';
}
ul.styled-list.list-chevron li:before {
content: '\f054';
}
ul.styled-list.list-times li:before {
content: '\f00d';
}
ul.styled-list.list-star li:before {
content: '\f006';
}
.call-2-acction {
padding: 100px 0;
background-image: url(../images/c2a.png);
background-attachment: fixed;
background-color: #000;
}
.c2a {
max-width: 700px;
margin: 0 auto;
text-align: center;
color: #fff !important;
}
.c2a h2 {
color: #fff;
font-size: 35px;
font-weight: 400;
text-transform: uppercase;
letter-spacing: 3px;
}
.c2a h2:after {
content: '';
display: block;
width: 80px;
height: 1px;
background-color: #187cc2;
margin: 15px auto 20px;
}
.c2a p {
margin-bottom: 40px;
}
.portfolio {
padding: 100px 0 0;
}
.filter {
text-align: center;
}
.filter .btn {
font-weight: 400;
}
.filter input[type="radio"] {
display: none;
}
.grid {
width: 100%;
padding: 0;
}
.grid figure {
position: relative;
float: left;
overflow: hidden;
background: #000;
text-align: center;
cursor: pointer;
width: 33.33333333%;
box-sizing: border-box;
}
.grid figure img {
position: relative;
display: block;
min-height: 100%;
max-width: 100%;
opacity: 1;
-webkit-transition: opacity 0.3s, -webkit-transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
transition: opacity 0.3s, transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
}
.grid figure figcaption {
color: #fff;
text-transform: uppercase;
font-size: 1.25em;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
}
.grid figure figcaption > a {
z-index: 1000;
position: absolute;
right: 50%;
bottom: 50px;
margin-right: -67px;
opacity: 0;
-webkit-transform: translate3d(0, 60px, 0);
transform: translate3d(0, 60px, 0);
-webkit-transition: -webkit-transform 0.35s, opacity 0.35s;
transition: transform 0.35s, opacity 0.35s;
}
.grid figure h2 {
color: #fff;
font-weight: 300;
margin: 0;
position: absolute;
right: 30px;
left: 30px;
padding: 10px 0;
top: 30px;
opacity: 0;
-webkit-transition: -webkit-transform 0.35s, opacity 0.35s;
transition: transform 0.35s, opacity 0.35s;
-webkit-transform: translate3d(0, 20px, 0);
transform: translate3d(0, 20px, 0);
}
.grid figure h2::after {
position: absolute;
top: 100%;
left: 50%;
width: 80px;
margin-left: -40px;
height: 1px;
background: #187cc2;
content: '';
-webkit-transform: translate3d(0, 40px, 0);
transform: translate3d(0, 40px, 0);
opacity: 0;
-webkit-transition: opacity 0.35s, -webkit-transform 0.35s;
transition: opacity 0.35s, transform 0.35s;
}
.grid figure h2 span {
font-weight: 800;
}
.grid figure p {
letter-spacing: 1px;
font-size: 68.5%;
margin: 0;
position: absolute;
right: 30px;
left: 30px;
padding: 10px 0;
top: 100px;
line-height: 1.5;
-webkit-transform: translate3d(0, 50px, 0);
transform: translate3d(0, 50px, 0);
opacity: 0;
-webkit-transition: opacity 0.35s, -webkit-transform 0.35s;
transition: opacity 0.35s, transform 0.35s;
}
.grid figure:hover h2 {
opacity: 1;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
.grid figure:hover h2::after {
opacity: 1;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
.grid figure:hover img {
opacity: 0.3;
-webkit-transform: scale(1.2);
-ms-transform: scale(1.2);
transform: scale(1.2);
}
.grid figure:hover p {
opacity: 1;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
.grid figure:hover figcaption > a {
opacity: 1;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
.clients {
padding: 100px 0;
}
.clients-carousel {
margin: 0;
padding: 0;
list-style: none;
}
.clients-carousel li {
padding: 0 20px;
opacity: 0.8;
display: flex;
-webkit-transition: opacity 0.3s;
transition: opacity 0.3s;
}
.clients-carousel li:hover {
opacity: 1;
}
.testimonials {
padding: 100px 0;
background-image: url(../images/testimonials.png);
background-size: cover;
background-attachment: fixed;
background-color: #000;
color: #fff;
}
.testimonial .testimonial-img {
float: left;
margin-right: 30px;
position: relative;
}
.testimonial .testimonial-img:after {
content: '';
display: block;
width: 40px;
height: 40px;
border-radius: 40px;
background-color: #187cc2;
position: absolute;
bottom: 5%;
left: 5%;
}
.testimonial .testimonial-img:before {
font-family: "Oswald";
content: '\201C';
font-size: 40px;
position: absolute;
bottom: 1%;
left: 12%;
z-index: 99;
}
.testimonial .testimonial-img img {
border-radius: 50%;
}
.testimonial blockquote {
border-width: 0;
}
.testimonial blockquote p {
font-style: italic;
font-weight: 300;
}
.testimonial blockquote footer,
.testimonial blockquote small,
.testimonial blockquote .small {
color: #fff;
}
.testimonials-carousel {
max-width: 800px;
margin: 0 auto;
}
.testimonials-carousel ul {
margin: 0;
padding: 0;
list-style: none;
}
.testimonials-carousel ul li {
margin: 0;
padding: 0;
display: block;
}
.pricing {
padding: 100px 0;
}
.pricing-table {
border: 1px solid #f2f2f2;
border-radius: 5px;
background-color: #fff;
}
.pricing-table .pricing-header .pt-price {
font-family: "Oswald";
color: #4c4c4c;
font-size: 40px;
line-height: 70px;
font-weight: 400;
text-align: center;
padding: 10px 40px;
}
.pricing-table .pricing-header .pt-price small {
font-size: 13px;
color: #9a9a9a;
font-weight: 300;
}
.pricing-table .pricing-header .pt-name {
font-family: "Oswald";
padding: 10px 40px;
text-align: center;
font-weight: 300;
font-size: 24px;
line-height: 40px;
color: #4c4c4c;
border-top: 1px solid #f2f2f2;
border-bottom: 1px solid #f2f2f2;
}
.pricing-table .pricing-body ul {
margin: 0;
padding: 0;
list-style: none;
}
.pricing-table .pricing-body ul li {
padding: 8px 25px;
margin: 0;
}
.pricing-table .pricing-body ul li:nth-child(even) {
background-color: #fafafa;
}
.pricing-table .pricing-body ul li .fa-times {
color: #ff6666;
}
.pricing-table .pricing-body ul li .fa-check {
color: #187cc2;
}
.pricing-table .pricing-footer {
text-align: center;
padding: 15px 40px;
border-top: 1px solid #f2f2f2;
}
.pricing-table.featured .pricing-header {
position: relative;
overflow: hidden;
}
.pricing-table.featured .pricing-header .pt-price {
color: #187cc2;
}
.pricing-table.featured .pricing-header .pt-price small {
color: #187cc2;
}
.pricing-table.featured .pricing-header .pt-name {
color: #187cc2;
}
.pricing-table.featured .pricing-header .featured-text {
font-family: "Oswald";
font-size: 13px;
line-height: 15px;
letter-spacing: 1px;
font-weight: 300;
text-transform: uppercase;
text-align: center;
background-color: #187cc2;
color: #fff;
position: absolute;
top: 22px;
left: -28px;
padding: 5px 0;
width: 126px;
-webkit-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
transform: rotate(-45deg);
}
.faq-sec {
padding: 100px 0 50px;
background-color: #fcfcfc;
}
.faq {
margin-bottom: 50px;
}
.faq h3 {
margin-bottom: 15px;
}
.faq h3 i {
color: #187cc2;
}
.call-us {
padding: 50px 0;
background-color: #187cc2;
text-align: center;
}
.call-us h3 {
display: inline-block;
*display: inline;
*zoom: 1;
color: #fff;
text-transform: uppercase;
font-size: 30px;
line-height: 45px;
vertical-align: middle;
margin: 0 30px 0 0;
letter-spacing: 2px;
word-spacing: 5px;
}
.blog {
padding: 100px 0;
}
.blog-post {
border-bottom: 1px dotted #f2f2f2;
margin-bottom: 60px;
}
.blog-post .author img {
border-radius: 50%;
}
.blog-post .post-meta {
margin-bottom: 10px;
font-size: 13px;
}
.blog-post .post-meta a {
font-weight: bold;
color: #4c4c4c;
}
.blog-post .post-meta a:hover {
color: #187cc2;
}
.blog-post .post-meta strong {
color: #4c4c4c;
}
.blog-post .post-title {
margin-top: 0;
margin-bottom: 20px;
}
.blog-post .post-thumb {
margin-bottom: 40px;
}
.blog-post .post-thumb img {
border-radius: 10px;
}
.widgets {
padding-left: 50px;
}
.widget {
margin-bottom: 60px;
}
.widget ul {
margin: 0;
padding: 0;
list-style: none;
}
.widget ul li {
border-bottom: 1px solid #f2f2f2;
}
.widget ul li a {
display: block;
-webkit-transition: text-indent 0.3s, color 0.3s;
transition: text-indent 0.3s, color 0.3s;
padding: 5px 0;
}
.widget ul li a:hover {
text-indent: 20px;
}
.widget ul li a:hover .badge {
text-indent: 0;
background-color: #4c4c4c;
}
.widget ul li .recent-post {
padding: 10px 0;
}
.widget ul li .recent-post .post-thumb {
display: block;
float: left;
margin-right: 15px;
}
.widget ul li .recent-post .post-thumb img {
border-radius: 10px;
}
.widget ul li .recent-post .post-title {
font-family: "Open Sans";
font-weight: 600;
letter-spacing: 0;
font-size: 15px;
margin: 0 0 5px;
}
.widget ul li .recent-post .post-title a {
display: inline;
}
.widget ul li .recent-post .post-meta {
font-size: 12px;
}
.widget ul li .recent-post .post-meta a {
font-weight: bold;
color: #4c4c4c;
}
.widget ul li .recent-post .post-meta a:hover {
color: #187cc2;
}
.widget ul li .recent-post a {
display: inline-block;
*display: inline;
*zoom: 1;
padding: 0;
}
.widget ul li .recent-post a:hover {
text-indent: 0;
}
.widget ul li .badge {
font-size: 10px;
font-weight: 300;
vertical-align: middle;
margin-top: 5px;
text-indent: 0;
background-color: #187cc2;
-webkit-transition: background-color 0.3s;
transition: background-color 0.3s;
}
.widget .widget-title {
font-weight: 300;
font-size: 28px;
letter-spacing: 2px;
text-transform: uppercase;
margin-bottom: 20px;
}
.widget .tagcloud a {
font-size: 13px;
border-radius: 40px;
color: #737373;
display: inline-block;
*display: inline;
*zoom: 1;
padding: 3px 20px;
border-color: #e5e5e5;
border-width: 1px;
border-style: solid;
margin-bottom: 6px;
-webkit-transition: color 0.3s, background-color 0.3s, border-color 0.3s;
transition: color 0.3s, background-color 0.3s, border-color 0.3s;
}
.widget .tagcloud a:hover {
border-color: #187cc2;
background-color: #187cc2;
color: #fff;
}
.subscribe {
padding: 120px 0;
background-image: url(../images/subscribe2.png);
background-size: cover;
background-attachment: fixed;
background-repeat: no-repeat;
background-position: top center;
background-color: #000;
}
.subscribe .subscribe-title {
text-align: center;
color: #fff;
margin-bottom: 50px;
font-size: 32px;
text-transform: uppercase;
font-weight: 300;
}
.subscribe .subscribe-or {
font-family: "Oswald";
color: #fff;
text-align: center;
font-size: 20px;
padding: 30px 0;
margin: 0;
text-transform: uppercase;
}
.subscribe .subscribe-social {
padding: 0;
margin: 0;
list-style: none;
text-align: center;
}
.subscribe .subscribe-social li {
padding: 0;
margin: 0;
margin-right: 5px;
display: inline-block;
*display: inline;
*zoom: 1;
}
.subscribe-form {
max-width: 500px;
margin: 0 auto;
}
.subscribe-form .form-control {
border-radius: 30px 2px 2px 30px !important;
padding: 14px 20px 14px 30px !important;
}
.input-group .form-control {
border-radius: 30px 2px 2px 30px !important;
padding: 14px 20px 14px 30px !important;
}
a.social {
font-family: "Oswald";
letter-spacing: 1px;
display: inline-block;
background-color: #187cc2;
color: #fff;
padding: 8px 20px 8px 65px;
border-radius: 50px;
position: relative;
overflow: hidden;
-webkit-transition: background-color 0.3s, text-indent 0.3s, padding 0.3s;
transition: background-color 0.3s, text-indent 0.3s, padding 0.3s;
}
a.social i {
display: block;
background-color: #31ada4;
width: 50px;
height: 42px;
line-height: 42px;
font-size: 17px;
border-radius: 50px 0 0 50px;
position: absolute;
left: 0;
top: 0;
text-indent: 10px;
-webkit-transition: text-indent 0.3s;
transition: text-indent 0.3s;
}
a.social:hover {
background-color: #31ada4;
text-indent: -10px;
padding: 8px 30px 8px 65px;
}
a.social:hover i {
text-indent: 29px;
}
a.social.twitter {
background-color: #2daae1;
}
a.social.twitter i {
background-color: #1a87b7;
}
a.social.twitter:hover {
background-color: #1a87b7;
}
a.social.facebook {
background-color: #3c5b9b;
}
a.social.facebook i {
background-color: #2b416f;
}
a.social.facebook:hover {
background-color: #2b416f;
}
a.social.rss {
background-color: #fca73a;
}
a.social.rss i {
background-color: #f58b04;
}
a.social.rss:hover {
background-color: #f58b04;
}
@media screen and (-webkit-min-device-pixel-ratio: 0) {
a.social:hover {
padding: 8px 20px 8px 65px;
}
}
.contact {
padding: 120px 0;
}
.contact form input,
.contact form textarea {
margin-bottom: 30px;
}
input[type="text"].formFieldError,
input[type="email"].formFieldError,
textarea.formFieldError {
border-color: #e34444 !important;
}
footer.site-footer {
background-color: #fcfcfc;
padding: 10px 0;
color: #9f9f9f;
font-size: 13px;
text-align: center;
}
footer.site-footer a {
color: #808080;
}
footer.site-footer a:hover {
color: #187cc2;
}
@media (max-width:768px) {
#sept-main-nav{background: rgb(0, 0, 0); opacity: 0.7;}
}
@media (min-width: 768px) {
.navbar-nav > li > a {
padding-top: 41px;
padding-bottom: 41px;
}
.st-navbar-mini .navbar-default .navbar-nav > li > a {
padding-top: 20px;
padding-bottom: 20px;
}
}
@media (min-width: 1440px) {
.grid {
width: 100%;
padding: 0;
}
.grid figure {
position: relative;
float: left;
overflow: hidden;
background: #000;
text-align: center;
cursor: pointer;
width: 25%;
}
}
#calc label{ font-size: 22px; color: #fff; margin: 10px 0;}
/*悬浮样式*/
#xuanfu{position: fixed; display: flex; flex-direction: column; justify-content: center;right: 0;top: 40%; background: #187cc2; z-index: 100;padding: 20px 4px 4px;}
#xuanfu *{color: #fff;}
#xuanfu *:hover{cursor: pointer;}
.code{width: 120px; position: fixed; right: -40px; background: #eb2929; transition: all 1s;padding: 0.6%; z-index: 100;}
.code_parent .youyi{ right: 68px;}
#xuanfu a{padding: 10px 0; display: block; background: none;}
/*#xuanfu .youyi i, #xuanfu .youyi p,#xuanfu .youyi a{color: #eb2929 !important;}*/
#xuanfu i{font-size: 34px;text-align: center; margin: 0 auto; display: block; color: #fff;}
#xuanfu p{font-size: 12px;color: #fff;text-align: center;display: block;margin-bottom: 10px;}
/*悬浮二维码样式*/
.code {
width: 120px;
position: fixed;
right: -52px;
background: #187cc2;
transition: all 1s;
padding: 0.6%;
z-index: 100;
}
.code img{width: 100%;}
#mapContainer{height: 100%}
address{
font-size:18px;
}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
/*!
* Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
*/@font-face{font-family:'FontAwesome';src:url('../font/font-awesome/fontawesome-webfont.eot?v=4.5.0');src:url('../font/font-awesome/fontawesome-webfont.eot?#iefix&v=4.5.0') format('embedded-opentype'),url('../font/font-awesome/fontawesome-webfont.woff2?v=4.5.0') format('woff2'),url('../font/font-awesome/fontawesome-webfont.woff?v=4.5.0') format('woff'),url('../font/font-awesome/fontawesome-webfont.ttf?v=4.5.0') format('truetype'),url('../font/font-awesome/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}
This source diff could not be displayed because it is too large. You can view the blob instead.
/* Tomorrow Night Eighties Theme */
/* Original theme - https://github.com/chriskempson/tomorrow-theme */
.prettyprint {
background: #1D1F21;
font-family: Menlo, 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', Monaco, Consolas, monospace;
font-size: 13px;
line-height: 1.5;
border: 1px solid #ccc;
padding: 10px;
}
.pln {
color: #cccccc;
}
@media screen {
.str {
color: #99cc99;
}
.kwd {
color: #cc99cc;
}
.com {
color: #999999;
}
.typ {
color: #6699cc;
}
.lit {
color: #f99157;
}
.pun {
color: #cccccc;
}
.opn {
color: #cccccc;
}
.clo {
color: #cccccc;
}
.tag {
color: #f2777a;
}
.atn {
color: #f99157;
}
.atv {
color: #66cccc;
}
.dec {
color: #f99157;
}
.var {
color: #f2777a;
}
.fun {
color: #6699cc;
}
}
@media print, projection {
.str {
color: #006600;
}
.kwd {
color: #006;
font-weight: bold;
}
.com {
color: #600;
font-style: italic;
}
.typ {
color: #404;
font-weight: bold;
}
.lit {
color: #004444;
}
.pun, .opn, .clo {
color: #444400;
}
.tag {
color: #006;
font-weight: bold;
}
.atn {
color: #440044;
}
.atv {
color: #006600;
}
}
/* Specify class=linenums on a pre to get line numbering */
ol.linenums {
margin-top: 0;
margin-bottom: 0;
}
/* IE indents via margin-left */
li.L0,
li.L1,
li.L2,
li.L3,
li.L4,
li.L5,
li.L6,
li.L7,
li.L8,
li.L9 {
/* */
}
/* Alternate shading for lines */
li.L1,
li.L3,
li.L5,
li.L7,
li.L9 {
/* */
}
/*
* Core Owl Carousel CSS File
* v1.3.2
*/
/* clearfix */
.owl-carousel .owl-wrapper:after {
content: ".";
display: block;
clear: both;
visibility: hidden;
line-height: 0;
height: 0;
}
/* display none until init */
.owl-carousel{
display: none;
position: relative;
width: 100%;
-ms-touch-action: pan-y;
}
.owl-carousel .owl-wrapper{
display: none;
position: relative;
-webkit-transform: translate3d(0px, 0px, 0px);
}
.owl-carousel .owl-wrapper-outer{
overflow: hidden;
position: relative;
width: 100%;
}
.owl-carousel .owl-wrapper-outer.autoHeight{
-webkit-transition: height 500ms ease-in-out;
-moz-transition: height 500ms ease-in-out;
-ms-transition: height 500ms ease-in-out;
-o-transition: height 500ms ease-in-out;
transition: height 500ms ease-in-out;
}
.owl-carousel .owl-item{
float: left;
}
.owl-controls .owl-page,
.owl-controls .owl-buttons div{
cursor: pointer;
}
.owl-controls {
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
/* mouse grab icon */
.grabbing {
cursor:url(grabbing.png) 8 8, move;
}
/* fix */
.owl-carousel .owl-wrapper,
.owl-carousel .owl-item{
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-ms-backface-visibility: hidden;
-webkit-transform: translate3d(0,0,0);
-moz-transform: translate3d(0,0,0);
-ms-transform: translate3d(0,0,0);
}
/*
* Owl Carousel Owl Demo Theme
* v1.3.2
*/
.owl-theme .owl-controls{
margin-top: 10px;
text-align: center;
}
/* Styling Next and Prev buttons */
.owl-theme .owl-controls .owl-buttons div{
color: #FFF;
display: inline-block;
zoom: 1;
*display: inline;/*IE7 life-saver */
margin: 5px;
padding: 3px 10px;
font-size: 12px;
-webkit-border-radius: 30px;
-moz-border-radius: 30px;
border-radius: 30px;
background: #869791;
filter: Alpha(Opacity=50);/*IE7 fix*/
opacity: 0.5;
}
/* Clickable class fix problem with hover on touch devices */
/* Use it for non-touch hover action */
.owl-theme .owl-controls.clickable .owl-buttons div:hover{
filter: Alpha(Opacity=100);/*IE7 fix*/
opacity: 1;
text-decoration: none;
}
/* Styling Pagination*/
.owl-theme .owl-controls .owl-page{
display: inline-block;
zoom: 1;
*display: inline;/*IE7 life-saver */
}
.owl-theme .owl-controls .owl-page span{
display: block;
width: 12px;
height: 12px;
margin: 5px 7px;
filter: Alpha(Opacity=50);/*IE7 fix*/
opacity: 0.5;
-webkit-border-radius: 20px;
-moz-border-radius: 20px;
border-radius: 20px;
background: #869791;
}
.owl-theme .owl-controls .owl-page.active span,
.owl-theme .owl-controls.clickable .owl-page:hover span{
filter: Alpha(Opacity=100);/*IE7 fix*/
opacity: 1;
}
/* If PaginationNumbers is true */
.owl-theme .owl-controls .owl-page span.owl-numbers{
height: auto;
width: auto;
color: #FFF;
padding: 2px 10px;
font-size: 12px;
-webkit-border-radius: 30px;
-moz-border-radius: 30px;
border-radius: 30px;
}
/* preloading images */
.owl-item.loading{
min-height: 150px;
background: url(AjaxLoader.gif) no-repeat center center
}
\ No newline at end of file
/*
* Owl Carousel CSS3 Transitions
* v1.3.2
*/
.owl-origin {
-webkit-perspective: 1200px;
-webkit-perspective-origin-x : 50%;
-webkit-perspective-origin-y : 50%;
-moz-perspective : 1200px;
-moz-perspective-origin-x : 50%;
-moz-perspective-origin-y : 50%;
perspective : 1200px;
}
/* fade */
.owl-fade-out {
z-index: 10;
-webkit-animation: fadeOut .7s both ease;
-moz-animation: fadeOut .7s both ease;
animation: fadeOut .7s both ease;
}
.owl-fade-in {
-webkit-animation: fadeIn .7s both ease;
-moz-animation: fadeIn .7s both ease;
animation: fadeIn .7s both ease;
}
/* backSlide */
.owl-backSlide-out {
-webkit-animation: backSlideOut 1s both ease;
-moz-animation: backSlideOut 1s both ease;
animation: backSlideOut 1s both ease;
}
.owl-backSlide-in {
-webkit-animation: backSlideIn 1s both ease;
-moz-animation: backSlideIn 1s both ease;
animation: backSlideIn 1s both ease;
}
/* goDown */
.owl-goDown-out {
-webkit-animation: scaleToFade .7s ease both;
-moz-animation: scaleToFade .7s ease both;
animation: scaleToFade .7s ease both;
}
.owl-goDown-in {
-webkit-animation: goDown .6s ease both;
-moz-animation: goDown .6s ease both;
animation: goDown .6s ease both;
}
/* scaleUp */
.owl-fadeUp-in {
-webkit-animation: scaleUpFrom .5s ease both;
-moz-animation: scaleUpFrom .5s ease both;
animation: scaleUpFrom .5s ease both;
}
.owl-fadeUp-out {
-webkit-animation: scaleUpTo .5s ease both;
-moz-animation: scaleUpTo .5s ease both;
animation: scaleUpTo .5s ease both;
}
/* Keyframes */
/*empty*/
@-webkit-keyframes empty {
0% {opacity: 1}
}
@-moz-keyframes empty {
0% {opacity: 1}
}
@keyframes empty {
0% {opacity: 1}
}
@-webkit-keyframes fadeIn {
0% { opacity:0; }
100% { opacity:1; }
}
@-moz-keyframes fadeIn {
0% { opacity:0; }
100% { opacity:1; }
}
@keyframes fadeIn {
0% { opacity:0; }
100% { opacity:1; }
}
@-webkit-keyframes fadeOut {
0% { opacity:1; }
100% { opacity:0; }
}
@-moz-keyframes fadeOut {
0% { opacity:1; }
100% { opacity:0; }
}
@keyframes fadeOut {
0% { opacity:1; }
100% { opacity:0; }
}
@-webkit-keyframes backSlideOut {
25% { opacity: .5; -webkit-transform: translateZ(-500px); }
75% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(-200%); }
100% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(-200%); }
}
@-moz-keyframes backSlideOut {
25% { opacity: .5; -moz-transform: translateZ(-500px); }
75% { opacity: .5; -moz-transform: translateZ(-500px) translateX(-200%); }
100% { opacity: .5; -moz-transform: translateZ(-500px) translateX(-200%); }
}
@keyframes backSlideOut {
25% { opacity: .5; transform: translateZ(-500px); }
75% { opacity: .5; transform: translateZ(-500px) translateX(-200%); }
100% { opacity: .5; transform: translateZ(-500px) translateX(-200%); }
}
@-webkit-keyframes backSlideIn {
0%, 25% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(200%); }
75% { opacity: .5; -webkit-transform: translateZ(-500px); }
100% { opacity: 1; -webkit-transform: translateZ(0) translateX(0); }
}
@-moz-keyframes backSlideIn {
0%, 25% { opacity: .5; -moz-transform: translateZ(-500px) translateX(200%); }
75% { opacity: .5; -moz-transform: translateZ(-500px); }
100% { opacity: 1; -moz-transform: translateZ(0) translateX(0); }
}
@keyframes backSlideIn {
0%, 25% { opacity: .5; transform: translateZ(-500px) translateX(200%); }
75% { opacity: .5; transform: translateZ(-500px); }
100% { opacity: 1; transform: translateZ(0) translateX(0); }
}
@-webkit-keyframes scaleToFade {
to { opacity: 0; -webkit-transform: scale(.8); }
}
@-moz-keyframes scaleToFade {
to { opacity: 0; -moz-transform: scale(.8); }
}
@keyframes scaleToFade {
to { opacity: 0; transform: scale(.8); }
}
@-webkit-keyframes goDown {
from { -webkit-transform: translateY(-100%); }
}
@-moz-keyframes goDown {
from { -moz-transform: translateY(-100%); }
}
@keyframes goDown {
from { transform: translateY(-100%); }
}
@-webkit-keyframes scaleUpFrom {
from { opacity: 0; -webkit-transform: scale(1.5); }
}
@-moz-keyframes scaleUpFrom {
from { opacity: 0; -moz-transform: scale(1.5); }
}
@keyframes scaleUpFrom {
from { opacity: 0; transform: scale(1.5); }
}
@-webkit-keyframes scaleUpTo {
to { opacity: 0; -webkit-transform: scale(1.5); }
}
@-moz-keyframes scaleUpTo {
to { opacity: 0; -moz-transform: scale(1.5); }
}
@keyframes scaleUpTo {
to { opacity: 0; transform: scale(1.5); }
}
\ No newline at end of file
@font-face {font-family: "iconfont";
src: url('iconfont.eot?t=1514454512057'); /* IE9*/
src: url('iconfont.eot?t=1514454512057#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAkoAAsAAAAADTAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFZW7kiMY21hcAAAAYAAAAB3AAAByJqPzUhnbHlmAAAB+AAABRcAAAasHaQ6OmhlYWQAAAcQAAAALwAAADYP9gHgaGhlYQAAB0AAAAAgAAAAJAfgA4ZobXR4AAAHYAAAABMAAAAYF+kAAGxvY2EAAAd0AAAADgAAAA4FigQQbWF4cAAAB4QAAAAfAAAAIAEeANhuYW1lAAAHpAAAAUUAAAJtPlT+fXBvc3QAAAjsAAAAOwAAAE+ZFqG2eJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2Bk/sM4gYGVgYOpk+kMAwNDP4RmfM1gxMjBwMDEwMrMgBUEpLmmMDgwVDybx9zwv4EhhrmBoQEozAiSAwAwYg0OeJzFkdEJhDAQRN8mKnKKlVwlh/WIH9Zid24b3myiH1bghBcyQ5YEBmiBLL6iAdswQotSK3nmU/KGn/xIT9J5PQZPPvl+nkqf7pbp9r3CtZrLmsY6XpO99/RTY9nny0UP64W+eAyVyD1Voh+fKtGZ7xXSH7VPGisAeJyNVEuMFEUYrr+qu6p7pl/Tz+me6Z5H707vg52ZnScwuzsYVqOEwCIJsoGLkpjMuhCjEBRIQCPEBBM5eSAqPkjQi4kHExNJSNwDidxcrx5U4p2TxmRHq0c4a/efqvq//1HdX3/VSETo71/IXZJHFppBi2gVrSEEdB6qGg6hknTqeB6ciuh4tkaSOKmwuFony+BVqe22ep2aRxnVQYMI2pVWL6njBLqdFTyAlhsC+IXgqDldNMkNyOST6Or4AP4MnFJc1FcWxs/tGtqtsiWdV0zTN833JCqKEsaCrsFpz5VFOUPHt0U9cO6WZnEJFD8JDq6r5YL54rudM+G0JwNcuQJWoazdGeaCHLdLgWuZPjNUKR+o8ZQN5x9m85YS1n5D/Erf9XvyAXkKzaN1dAqdRmf4u3a6vVpSS+qQaMAo08CzHT5E4LltPqxAv93r87uWLE5zP+JPYndtnsfqEKcstFuTOL85FvM+y9DnVZ4G1Vqn13K9tk3/XTmL5Cy024ur7Phw33G2uthuY01jtGjZ+eDTs+c+CUjJjTKSpY8xPna0fuJIiIXaG4eoo9lBYJs+WVwYNiQWXn8JLt/EeP8KHICoHnGDv6KFiBscUtUXbnRbQXMIMGwGre77xw1dnS06EVM3rwC89QqYubg0r37BTk0ZRmkKEwiDpQOyJJuBqWep6Tcl6dgpIB+9bZiF8KT0wEs3iDyX9w9DDyFpwuM9MkQF1EEr6Fn0PDqJXkavIjRd5WrhioirDajUoZvr9PoVzlqOU9PPcW4qGjg5zlnFLUE35ZaTx7lP2bEp6z5RVcz+J0YuApwAmQhU/HF8LKzNhPhRlACeDqfAMXZ0w3EM+IqJ34FMNw0HdqIkWUqSiONlHrodzswMHruua3zOo4OZmdBw3TR6835WAGEbkhAHvCkk0c7DYg2ewT7vlLb/nc/C3a+pzJ37kHYazMBmWlt2N//DR0hIRSkAfoS+RN+iH9ADzl8toRNjNKmTVHS1XtJ3J2p07MmcGvH4Ek9EyTmtNaDfShGYKJm7HndLkPoNmAD9Ho+nGf1empHKnNG0eKLbeIW3TzXbaz3eIU1llJdMMieW1NJjntYCxxmhvFE3ra6knXkinWyeIm3YMu25WKjOU11iSqAAK0khBVDcgFlyQ9cUV6SmkTENTTYdltMNATPRqPKJqEzcu0cLvIy+NBAJb0Cf3q+reZtqtzIMA5ZFQVHW1vRID6beuVYcZOWkrBSy/BtIiqSsY88plfINNzlYCzo+04TlASZYFWXZL6oakWZ9fX6WUlUvKkFZG/8URYF6XStUq3NzMwn+Jqet7MvKdiNyBksytXxf0f2C6TYVsy8QIBkrkkq7i9TPkqjIskB26SoRrKyuE2LkTMngG3GlCbqo+arAFCDJbEYoBZm5BVEysNBoZiUo5DNnKRPELMYgyrv3KoIRlc+97ppxeV4iokBM1mwWKp6FCSES0zI0S3GGXrwkaoJdc/y6LOhq0YJZWwFMWQ4zy8S/5gwlGP9c1E3LWjty+LDvX75s5+V8tnnhzVxeVg2ENH5u75EtsooIYiiLdP7P9/gZLqEYJWiB//27aA9CViVX8dpODLlKjsTdttjuxuQJFjtt4H7faXc9vu7yeDeu8EWKDuHOeH1jextegzt82rk2Gt16DOGLGxvjPzb4NRpt83G8tTFeH43gwzQTlsfrPG9r++PRTjEF8IXRzlVetb29kSZvjP8cIfQPvhMKgwB4nGNgZGBgAOJDMfNy4/ltvjJwszCAwLWsex8Q9P/9LIzMLkAuBwMTSBQAV6UMCgB4nGNgZGBgbvjfwBDDwsDA8P8/CyMDUAQFsAEAcfQEbnicY2FgYGB+ycDAwoCKARKfAQEAAAAAAAB2ARoBvgL2A1YAAHicY2BkYGBgYzjDwMcAAkxAzAWEDAz/wXwGAB4aAfcAeJxlj01OwzAQhV/6B6QSqqhgh+QFYgEo/RGrblhUavdddN+mTpsqiSPHrdQDcB6OwAk4AtyAO/BIJ5s2lsffvHljTwDc4Acejt8t95E9XDI7cg0XuBeuU38QbpBfhJto41W4Rf1N2MczpsJtdGF5g9e4YvaEd2EPHXwI13CNT+E69S/hBvlbuIk7/Aq30PHqwj7mXle4jUcv9sdWL5xeqeVBxaHJIpM5v4KZXu+Sha3S6pxrW8QmU4OgX0lTnWlb3VPs10PnIhVZk6oJqzpJjMqt2erQBRvn8lGvF4kehCblWGP+tsYCjnEFhSUOjDFCGGSIyujoO1Vm9K+xQ8Jee1Y9zed0WxTU/3OFAQL0z1xTurLSeTpPgT1fG1J1dCtuy56UNJFezUkSskJe1rZUQuoBNmVXjhF6XNGJPyhnSP8ACVpuyAAAAHicY2BigAAuBuyAjZGJkZmRhZGVkY2RnYGxgrUqs6I0jw1MGrKV5xdn5JeypxaVp2bmJjIwAAC+pwsBAA==') format('woff'),
url('iconfont.ttf?t=1514454512057') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
url('iconfont.svg?t=1514454512057#iconfont') format('svg'); /* iOS 4.1- */
}
.iconfont {
font-family:"iconfont" !important;
font-size:16px;
font-style:normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-zixun:before { content: "\e69e"; }
.icon-zixun1:before { content: "\e60e"; }
.icon-woshou:before { content: "\e602"; }
.icon-erweima:before { content: "\e50b"; }
(function($){"use strict";$.ajaxChimp={responses:{"We have sent you a confirmation email":0,"Please enter a value":1,"An email address must contain a single @":2,"The domain portion of the email address is invalid (the portion after the @: )":3,"The username portion of the email address is invalid (the portion before the @: )":4,"This email address looks fake or invalid. Please enter a real email address":5},translations:{en:null},init:function(selector,options){$(selector).ajaxChimp(options)}};$.fn.ajaxChimp=function(options){$(this).each(function(i,elem){var form=$(elem);var email=form.find("input[type=email]");var label=form.find("label[for="+email.attr("id")+"]");var settings=$.extend({url:form.attr("action"),language:"en"},options);var url=settings.url.replace("/post?","/post-json?").concat("&c=?");form.attr("novalidate","true");email.attr("name","EMAIL");form.submit(function(){var msg;function successCallback(resp){if(resp.result==="success"){msg="We have sent you a confirmation email";label.removeClass("error").addClass("valid");email.removeClass("error").addClass("valid")}else{email.removeClass("valid").addClass("error");label.removeClass("valid").addClass("error");var index=-1;try{var parts=resp.msg.split(" - ",2);if(parts[1]===undefined){msg=resp.msg}else{var i=parseInt(parts[0],10);if(i.toString()===parts[0]){index=parts[0];msg=parts[1]}else{index=-1;msg=resp.msg}}}catch(e){index=-1;msg=resp.msg}}if(settings.language!=="en"&&$.ajaxChimp.responses[msg]!==undefined&&$.ajaxChimp.translations&&$.ajaxChimp.translations[settings.language]&&$.ajaxChimp.translations[settings.language][$.ajaxChimp.responses[msg]]){msg=$.ajaxChimp.translations[settings.language][$.ajaxChimp.responses[msg]]}label.html(msg);label.show(2e3);if(settings.callback){settings.callback(resp)}}var data={};var dataArray=form.serializeArray();$.each(dataArray,function(index,item){data[item.name]=item.value});$.ajax({url:url,data:data,success:successCallback,dataType:"jsonp",error:function(resp,text){console.log("mailchimp ajax submit error: "+text)}});var submitMsg="Submitting...";if(settings.language!=="en"&&$.ajaxChimp.translations&&$.ajaxChimp.translations[settings.language]&&$.ajaxChimp.translations[settings.language]["submit"]){submitMsg=$.ajaxChimp.translations[settings.language]["submit"]}label.html(submitMsg).show(2e3);return false})});return this}})(jQuery);
\ No newline at end of file
/*
* jQuery appear plugin
*
* Copyright (c) 2012 Andrey Sidorov
* licensed under MIT license.
*
* https://github.com/morr/jquery.appear/
*
* Version: 0.3.3
*/
(function($) {
var selectors = [];
var check_binded = false;
var check_lock = false;
var defaults = {
interval: 250,
force_process: false
}
var $window = $(window);
var $prior_appeared;
function process() {
check_lock = false;
for (var index = 0; index < selectors.length; index++) {
var $appeared = $(selectors[index]).filter(function() {
return $(this).is(':appeared');
});
$appeared.trigger('appear', [$appeared]);
if ($prior_appeared) {
var $disappeared = $prior_appeared.not($appeared);
$disappeared.trigger('disappear', [$disappeared]);
}
$prior_appeared = $appeared;
}
}
// "appeared" custom filter
$.expr[':']['appeared'] = function(element) {
var $element = $(element);
if (!$element.is(':visible')) {
return false;
}
var window_left = $window.scrollLeft();
var window_top = $window.scrollTop();
var offset = $element.offset();
var left = offset.left;
var top = offset.top;
if (top + $element.height() >= window_top &&
top - ($element.data('appear-top-offset') || 0) <= window_top + $window.height() &&
left + $element.width() >= window_left &&
left - ($element.data('appear-left-offset') || 0) <= window_left + $window.width()) {
return true;
} else {
return false;
}
}
$.fn.extend({
// watching for element's appearance in browser viewport
appear: function(options) {
var opts = $.extend({}, defaults, options || {});
var selector = this.selector || this;
if (!check_binded) {
var on_check = function() {
if (check_lock) {
return;
}
check_lock = true;
setTimeout(process, opts.interval);
};
$(window).scroll(on_check).resize(on_check);
check_binded = true;
}
if (opts.force_process) {
setTimeout(process, opts.interval);
}
selectors.push(selector);
return $(selector);
}
});
$.extend({
// force elements's appearance check
force_appear: function() {
if (check_binded) {
process();
return true;
};
return false;
}
});
})(jQuery);
(function ($) {
$.fn.countTo = function (options) {
options = options || {};
return $(this).each(function () {
// set options for current element
var settings = $.extend({}, $.fn.countTo.defaults, {
from: $(this).data('from'),
to: $(this).data('to'),
speed: $(this).data('speed'),
refreshInterval: $(this).data('refresh-interval'),
decimals: $(this).data('decimals')
}, options);
// how many times to update the value, and how much to increment the value on each update
var loops = Math.ceil(settings.speed / settings.refreshInterval),
increment = (settings.to - settings.from) / loops;
// references & variables that will change with each update
var self = this,
$self = $(this),
loopCount = 0,
value = settings.from,
data = $self.data('countTo') || {};
$self.data('countTo', data);
// if an existing interval can be found, clear it first
if (data.interval) {
clearInterval(data.interval);
}
data.interval = setInterval(updateTimer, settings.refreshInterval);
// initialize the element with the starting value
render(value);
function updateTimer() {
value += increment;
loopCount++;
render(value);
if (typeof(settings.onUpdate) == 'function') {
settings.onUpdate.call(self, value);
}
if (loopCount >= loops) {
// remove the interval
$self.removeData('countTo');
clearInterval(data.interval);
value = settings.to;
if (typeof(settings.onComplete) == 'function') {
settings.onComplete.call(self, value);
}
}
}
function render(value) {
var formattedValue = settings.formatter.call(self, value, settings);
$self.text(formattedValue);
}
});
};
$.fn.countTo.defaults = {
from: 0, // the number the element should start at
to: 0, // the number the element should end at
speed: 1000, // how long it should take to count between the target numbers
refreshInterval: 100, // how often the element should be updated
decimals: 0, // the number of decimal places to show
formatter: formatter, // handler for formatting the value before rendering
onUpdate: null, // callback method for every time the element is updated
onComplete: null // callback method for when the element finishes updating
};
function formatter(value, settings) {
return value.toFixed(settings.decimals);
}
}(jQuery));
/*
* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
*
* Uses the built in easing capabilities added In jQuery 1.1
* to offer multiple easing options
*
* TERMS OF USE - EASING EQUATIONS
*
* Open source under the BSD License.
*
* Copyright © 2001 Robert Penner
* All rights reserved.
*
* TERMS OF USE - jQuery Easing
*
* Open source under the BSD License.
*
* Copyright © 2008 George McGinley Smith
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* Neither the name of the author nor the names of contributors may be used to endorse
* or promote products derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
jQuery.easing.jswing=jQuery.easing.swing;jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(e,f,a,h,g){return jQuery.easing[jQuery.easing.def](e,f,a,h,g)},easeInQuad:function(e,f,a,h,g){return h*(f/=g)*f+a},easeOutQuad:function(e,f,a,h,g){return -h*(f/=g)*(f-2)+a},easeInOutQuad:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f+a}return -h/2*((--f)*(f-2)-1)+a},easeInCubic:function(e,f,a,h,g){return h*(f/=g)*f*f+a},easeOutCubic:function(e,f,a,h,g){return h*((f=f/g-1)*f*f+1)+a},easeInOutCubic:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f+a}return h/2*((f-=2)*f*f+2)+a},easeInQuart:function(e,f,a,h,g){return h*(f/=g)*f*f*f+a},easeOutQuart:function(e,f,a,h,g){return -h*((f=f/g-1)*f*f*f-1)+a},easeInOutQuart:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f+a}return -h/2*((f-=2)*f*f*f-2)+a},easeInQuint:function(e,f,a,h,g){return h*(f/=g)*f*f*f*f+a},easeOutQuint:function(e,f,a,h,g){return h*((f=f/g-1)*f*f*f*f+1)+a},easeInOutQuint:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f*f+a}return h/2*((f-=2)*f*f*f*f+2)+a},easeInSine:function(e,f,a,h,g){return -h*Math.cos(f/g*(Math.PI/2))+h+a},easeOutSine:function(e,f,a,h,g){return h*Math.sin(f/g*(Math.PI/2))+a},easeInOutSine:function(e,f,a,h,g){return -h/2*(Math.cos(Math.PI*f/g)-1)+a},easeInExpo:function(e,f,a,h,g){return(f==0)?a:h*Math.pow(2,10*(f/g-1))+a},easeOutExpo:function(e,f,a,h,g){return(f==g)?a+h:h*(-Math.pow(2,-10*f/g)+1)+a},easeInOutExpo:function(e,f,a,h,g){if(f==0){return a}if(f==g){return a+h}if((f/=g/2)<1){return h/2*Math.pow(2,10*(f-1))+a}return h/2*(-Math.pow(2,-10*--f)+2)+a},easeInCirc:function(e,f,a,h,g){return -h*(Math.sqrt(1-(f/=g)*f)-1)+a},easeOutCirc:function(e,f,a,h,g){return h*Math.sqrt(1-(f=f/g-1)*f)+a},easeInOutCirc:function(e,f,a,h,g){if((f/=g/2)<1){return -h/2*(Math.sqrt(1-f*f)-1)+a}return h/2*(Math.sqrt(1-(f-=2)*f)+1)+a},easeInElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return -(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e},easeOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return g*Math.pow(2,-10*h)*Math.sin((h*k-i)*(2*Math.PI)/j)+l+e},easeInOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k/2)==2){return e+l}if(!j){j=k*(0.3*1.5)}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}if(h<1){return -0.5*(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e}return g*Math.pow(2,-10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j)*0.5+l+e},easeInBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*(f/=h)*f*((g+1)*f-g)+a},easeOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*((f=f/h-1)*f*((g+1)*f+g)+1)+a},easeInOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}if((f/=h/2)<1){return i/2*(f*f*(((g*=(1.525))+1)*f-g))+a}return i/2*((f-=2)*f*(((g*=(1.525))+1)*f+g)+2)+a},easeInBounce:function(e,f,a,h,g){return h-jQuery.easing.easeOutBounce(e,g-f,0,h,g)+a},easeOutBounce:function(e,f,a,h,g){if((f/=g)<(1/2.75)){return h*(7.5625*f*f)+a}else{if(f<(2/2.75)){return h*(7.5625*(f-=(1.5/2.75))*f+0.75)+a}else{if(f<(2.5/2.75)){return h*(7.5625*(f-=(2.25/2.75))*f+0.9375)+a}else{return h*(7.5625*(f-=(2.625/2.75))*f+0.984375)+a}}}},easeInOutBounce:function(e,f,a,h,g){if(f<g/2){return jQuery.easing.easeInBounce(e,f*2,0,h,g)*0.5+a}return jQuery.easing.easeOutBounce(e,f*2-g,0,h,g)*0.5+h*0.5+a}});
\ No newline at end of file
/*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m="1.11.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(l.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:k&&!k.call("\ufeff\xa0")?function(a){return null==a?"":k.call(a)}:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||n.guid++,e):void 0},now:function(){return+new Date},support:l}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="<select t=''><option selected=''></option></select>",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=jb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=kb(b);function nb(){}nb.prototype=d.filters=d.pseudos,d.setFilters=new nb;function ob(a,b){var c,e,f,g,h,i,j,k=x[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=Q.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?db.error(a):x(a,i).slice(0)}function pb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=a.document,A=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,B=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:A.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=z.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return y.find(a);this.length=1,this[0]=d}return this.context=z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};B.prototype=n.fn,y=n(z);var C=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!n(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function E(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return E(a,"nextSibling")},prev:function(a){return E(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(D[a]||(e=n.unique(e)),C.test(a)&&(e=e.reverse())),this.pushStack(e)}});var F=/\S+/g,G={};function H(a){var b=G[a]={};return n.each(a.match(F)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?G[a]||H(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&n.each(arguments,function(a,c){var d;while((d=n.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){if(a===!0?!--n.readyWait:!n.isReady){if(!z.body)return setTimeout(n.ready);n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(z,[n]),n.fn.trigger&&n(z).trigger("ready").off("ready"))}}});function J(){z.addEventListener?(z.removeEventListener("DOMContentLoaded",K,!1),a.removeEventListener("load",K,!1)):(z.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(z.addEventListener||"load"===event.type||"complete"===z.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===z.readyState)setTimeout(n.ready);else if(z.addEventListener)z.addEventListener("DOMContentLoaded",K,!1),a.addEventListener("load",K,!1);else{z.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&z.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!n.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}J(),n.ready()}}()}return I.promise(b)};var L="undefined",M;for(M in n(l))break;l.ownLast="0"!==M,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c=z.getElementsByTagName("body")[0];c&&(a=z.createElement("div"),a.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",b=z.createElement("div"),c.appendChild(a).appendChild(b),typeof b.style.zoom!==L&&(b.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1",(l.inlineBlockNeedsLayout=3===b.offsetWidth)&&(c.style.zoom=1)),c.removeChild(a),a=b=null)}),function(){var a=z.createElement("div");if(null==l.deleteExpando){l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}}a=null}(),n.acceptData=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(n.acceptData(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f
}}function S(a,b,c){if(n.acceptData(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d]));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=["Top","Right","Bottom","Left"],V=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},W=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},X=/^(?:checkbox|radio)$/i;!function(){var a=z.createDocumentFragment(),b=z.createElement("div"),c=z.createElement("input");if(b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a>",l.leadingWhitespace=3===b.firstChild.nodeType,l.tbody=!b.getElementsByTagName("tbody").length,l.htmlSerialize=!!b.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==z.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,a.appendChild(c),l.appendChecked=c.checked,b.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,a.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){l.noCloneEvent=!1}),b.cloneNode(!0).click()),null==l.deleteExpando){l.deleteExpando=!0;try{delete b.test}catch(d){l.deleteExpando=!1}}a=b=c=null}(),function(){var b,c,d=z.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),l[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var Y=/^(?:input|select|textarea)$/i,Z=/^key/,$=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,ab=/^([^.]*)(?:\.(.+)|)$/;function bb(){return!0}function cb(){return!1}function db(){try{return z.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof n===L||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(F)||[""],h=b.length;while(h--)f=ab.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(F)||[""],j=b.length;while(j--)if(h=ab.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,m,o=[d||z],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||z,3!==d.nodeType&&8!==d.nodeType&&!_.test(p+n.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[n.expando]?b:new n.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),k=n.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!n.isWindow(d)){for(i=k.delegateType||p,_.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||z)&&o.push(l.defaultView||l.parentWindow||a)}m=0;while((h=o[m++])&&!b.isPropagationStopped())b.type=m>1?i:k.bindType||p,f=(n._data(h,"events")||{})[b.type]&&n._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&n.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&n.acceptData(d)&&g&&d[p]&&!n.isWindow(d)){l=d[g],l&&(d[g]=null),n.event.triggered=p;try{d[p]()}catch(r){}n.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((n.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?n(c,this).index(i)>=0:n.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=$.test(e)?this.mouseHooks:Z.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||z),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||z,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==db()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===db()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=z.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===L&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&(a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault())?bb:cb):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:cb,isPropagationStopped:cb,isImmediatePropagationStopped:cb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=bb,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=bb,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submitBubbles||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?b.form:void 0;c&&!n._data(c,"submitBubbles")&&(n.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),n._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.changeBubbles||(n.event.special.change={setup:function(){return Y.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),n.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),n.event.simulate("change",this,a,!0)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;Y.test(b.nodeName)&&!n._data(b,"changeBubbles")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a,!0)}),n._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!Y.test(this.nodeName)}}),l.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=cb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return n().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=cb),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});function eb(a){var b=fb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var fb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gb=/ jQuery\d+="(?:null|\d+)"/g,hb=new RegExp("<(?:"+fb+")[\\s/>]","i"),ib=/^\s+/,jb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,kb=/<([\w:]+)/,lb=/<tbody/i,mb=/<|&#?\w+;/,nb=/<(?:script|style|link)/i,ob=/checked\s*(?:[^=]|=\s*.checked.)/i,pb=/^$|\/(?:java|ecma)script/i,qb=/^true\/(.*)/,rb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,sb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},tb=eb(z),ub=tb.appendChild(z.createElement("div"));sb.optgroup=sb.option,sb.tbody=sb.tfoot=sb.colgroup=sb.caption=sb.thead,sb.th=sb.td;function vb(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==L?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==L?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,vb(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function wb(a){X.test(a.type)&&(a.defaultChecked=a.checked)}function xb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function yb(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function zb(a){var b=qb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ab(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}function Bb(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Cb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(yb(b).text=a.text,zb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&X.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}n.extend({clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!hb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ub.innerHTML=a.outerHTML,ub.removeChild(f=ub.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=vb(f),h=vb(a),g=0;null!=(e=h[g]);++g)d[g]&&Cb(e,d[g]);if(b)if(c)for(h=h||vb(a),d=d||vb(f),g=0;null!=(e=h[g]);g++)Bb(e,d[g]);else Bb(a,f);return d=vb(f,"script"),d.length>0&&Ab(d,!i&&vb(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,m=a.length,o=eb(b),p=[],q=0;m>q;q++)if(f=a[q],f||0===f)if("object"===n.type(f))n.merge(p,f.nodeType?[f]:f);else if(mb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(kb.exec(f)||["",""])[1].toLowerCase(),k=sb[i]||sb._default,h.innerHTML=k[1]+f.replace(jb,"<$1></$2>")+k[2],e=k[0];while(e--)h=h.lastChild;if(!l.leadingWhitespace&&ib.test(f)&&p.push(b.createTextNode(ib.exec(f)[0])),!l.tbody){f="table"!==i||lb.test(f)?"<table>"!==k[1]||lb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)n.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}n.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),l.appendChecked||n.grep(vb(p,"input"),wb),q=0;while(f=p[q++])if((!d||-1===n.inArray(f,d))&&(g=n.contains(f.ownerDocument,f),h=vb(o.appendChild(f),"script"),g&&Ab(h),c)){e=0;while(f=h[e++])pb.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.deleteExpando,m=n.event.special;null!=(d=a[h]);h++)if((b||n.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k?delete d[i]:typeof d.removeAttribute!==L?d.removeAttribute(i):d[i]=null,c.push(f))}}}),n.fn.extend({text:function(a){return W(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(vb(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&Ab(vb(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(vb(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return W(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(gb,""):void 0;if(!("string"!=typeof a||nb.test(a)||!l.htmlSerialize&&hb.test(a)||!l.leadingWhitespace&&ib.test(a)||sb[(kb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(jb,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(vb(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(vb(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,o=k-1,p=a[0],q=n.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&ob.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(i=n.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=n.map(vb(i,"script"),yb),f=g.length;k>j;j++)d=i,j!==o&&(d=n.clone(d,!0,!0),f&&n.merge(g,vb(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,n.map(g,zb),j=0;f>j;j++)d=g[j],pb.test(d.type||"")&&!n._data(d,"globalEval")&&n.contains(h,d)&&(d.src?n._evalUrl&&n._evalUrl(d.src):n.globalEval((d.text||d.textContent||d.innerHTML||"").replace(rb,"")));i=c=null}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],g=n(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Db,Eb={};function Fb(b,c){var d=n(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:n.css(d[0],"display");return d.detach(),e}function Gb(a){var b=z,c=Eb[a];return c||(c=Fb(a,b),"none"!==c&&c||(Db=(Db||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Db[0].contentWindow||Db[0].contentDocument).document,b.write(),b.close(),c=Fb(a,b),Db.detach()),Eb[a]=c),c}!function(){var a,b,c=z.createElement("div"),d="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";c.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],a.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(a.style.opacity),l.cssFloat=!!a.style.cssFloat,c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===c.style.backgroundClip,a=c=null,l.shrinkWrapBlocks=function(){var a,c,e,f;if(null==b){if(a=z.getElementsByTagName("body")[0],!a)return;f="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",c=z.createElement("div"),e=z.createElement("div"),a.appendChild(c).appendChild(e),b=!1,typeof e.style.zoom!==L&&(e.style.cssText=d+";width:1px;padding:1px;zoom:1",e.innerHTML="<div></div>",e.firstChild.style.width="5px",b=3!==e.offsetWidth),a.removeChild(c),a=c=e=null}return b}}();var Hb=/^margin/,Ib=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Jb,Kb,Lb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Jb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),Ib.test(g)&&Hb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):z.documentElement.currentStyle&&(Jb=function(a){return a.currentStyle},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ib.test(g)&&!Lb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Mb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h=z.createElement("div"),i="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",j="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";h.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",b=h.getElementsByTagName("a")[0],b.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(b.style.opacity),l.cssFloat=!!b.style.cssFloat,h.style.backgroundClip="content-box",h.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===h.style.backgroundClip,b=h=null,n.extend(l,{reliableHiddenOffsets:function(){if(null!=c)return c;var a,b,d,e=z.createElement("div"),f=z.getElementsByTagName("body")[0];if(f)return e.setAttribute("className","t"),e.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=z.createElement("div"),a.style.cssText=i,f.appendChild(a).appendChild(e),e.innerHTML="<table><tr><td></td><td>t</td></tr></table>",b=e.getElementsByTagName("td"),b[0].style.cssText="padding:0;margin:0;border:0;display:none",d=0===b[0].offsetHeight,b[0].style.display="",b[1].style.display="none",c=d&&0===b[0].offsetHeight,f.removeChild(a),e=f=null,c},boxSizing:function(){return null==d&&k(),d},boxSizingReliable:function(){return null==e&&k(),e},pixelPosition:function(){return null==f&&k(),f},reliableMarginRight:function(){var b,c,d,e;if(null==g&&a.getComputedStyle){if(b=z.getElementsByTagName("body")[0],!b)return;c=z.createElement("div"),d=z.createElement("div"),c.style.cssText=i,b.appendChild(c).appendChild(d),e=d.appendChild(z.createElement("div")),e.style.cssText=d.style.cssText=j,e.style.marginRight=e.style.width="0",d.style.width="1px",g=!parseFloat((a.getComputedStyle(e,null)||{}).marginRight),b.removeChild(c)}return g}});function k(){var b,c,h=z.getElementsByTagName("body")[0];h&&(b=z.createElement("div"),c=z.createElement("div"),b.style.cssText=i,h.appendChild(b).appendChild(c),c.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;display:block;padding:1px;border:1px;width:4px;margin-top:1%;top:1%",n.swap(h,null!=h.style.zoom?{zoom:1}:{},function(){d=4===c.offsetWidth}),e=!0,f=!1,g=!0,a.getComputedStyle&&(f="1%"!==(a.getComputedStyle(c,null)||{}).top,e="4px"===(a.getComputedStyle(c,null)||{width:"4px"}).width),h.removeChild(b),c=h=null)}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Nb=/alpha\([^)]*\)/i,Ob=/opacity\s*=\s*([^)]*)/,Pb=/^(none|table(?!-c[ea]).+)/,Qb=new RegExp("^("+T+")(.*)$","i"),Rb=new RegExp("^([+-])=("+T+")","i"),Sb={position:"absolute",visibility:"hidden",display:"block"},Tb={letterSpacing:0,fontWeight:400},Ub=["Webkit","O","Moz","ms"];function Vb(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ub.length;while(e--)if(b=Ub[e]+c,b in a)return b;return d}function Wb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&V(d)&&(f[g]=n._data(d,"olddisplay",Gb(d.nodeName)))):f[g]||(e=V(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Xb(a,b,c){var d=Qb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Yb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+U[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+U[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+U[f]+"Width",!0,e))):(g+=n.css(a,"padding"+U[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+U[f]+"Width",!0,e)));return g}function Zb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Jb(a),g=l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Kb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ib.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Yb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Kb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=Vb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Rb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]="",i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Vb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Kb(a,b,d)),"normal"===f&&b in Tb&&(f=Tb[b]),""===c||c?(e=parseFloat(f),c===!0||n.isNumeric(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?0===a.offsetWidth&&Pb.test(n.css(a,"display"))?n.swap(a,Sb,function(){return Zb(a,b,d)}):Zb(a,b,d):void 0},set:function(a,c,d){var e=d&&Jb(a);return Xb(a,c,d?Yb(a,b,d,l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Ob.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Nb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Nb.test(f)?f.replace(Nb,e):f+" "+e)}}),n.cssHooks.marginRight=Mb(l.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},Kb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+U[d]+b]=f[d]||f[d-2]||f[0];return e}},Hb.test(a)||(n.cssHooks[a+b].set=Xb)}),n.fn.extend({css:function(a,b){return W(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Jb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)
},a,b,arguments.length>1)},show:function(){return Wb(this,!0)},hide:function(){return Wb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){V(this)?n(this).show():n(this).hide()})}});function $b(a,b,c,d,e){return new $b.prototype.init(a,b,c,d,e)}n.Tween=$b,$b.prototype={constructor:$b,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=$b.propHooks[this.prop];return a&&a.get?a.get(this):$b.propHooks._default.get(this)},run:function(a){var b,c=$b.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):$b.propHooks._default.set(this),this}},$b.prototype.init.prototype=$b.prototype,$b.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},$b.propHooks.scrollTop=$b.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=$b.prototype.init,n.fx.step={};var _b,ac,bc=/^(?:toggle|show|hide)$/,cc=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),dc=/queueHooks$/,ec=[jc],fc={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=cc.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&cc.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function gc(){return setTimeout(function(){_b=void 0}),_b=n.now()}function hc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=U[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function ic(a,b,c){for(var d,e=(fc[b]||[]).concat(fc["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function jc(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&V(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k=Gb(a.nodeName),"none"===j&&(j=k),"inline"===j&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==k?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],bc.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}if(!n.isEmptyObject(o)){r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=ic(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function kc(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function lc(a,b,c){var d,e,f=0,g=ec.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=_b||gc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:_b||gc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(kc(k,j.opts.specialEasing);g>f;f++)if(d=ec[f].call(j,a,k,j.opts))return d;return n.map(k,ic,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(lc,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],fc[c]=fc[c]||[],fc[c].unshift(b)},prefilter:function(a,b){b?ec.unshift(a):ec.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(V).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=lc(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&dc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(hc(b,!0),a,d,e)}}),n.each({slideDown:hc("show"),slideUp:hc("hide"),slideToggle:hc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(_b=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),_b=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ac||(ac=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(ac),ac=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e=z.createElement("div");e.setAttribute("className","t"),e.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=e.getElementsByTagName("a")[0],c=z.createElement("select"),d=c.appendChild(z.createElement("option")),b=e.getElementsByTagName("input")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==e.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=d.selected,l.enctype=!!z.createElement("form").enctype,c.disabled=!0,l.optDisabled=!d.disabled,b=z.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value,a=b=c=d=e=null}();var mc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(mc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.text(a)}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(l.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var nc,oc,pc=n.expr.attrHandle,qc=/^(?:checked|selected)$/i,rc=l.getSetAttribute,sc=l.input;n.fn.extend({attr:function(a,b){return W(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===L?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?oc:nc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(F);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?sc&&rc||!qc.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(rc?c:d)},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),oc={set:function(a,b,c){return b===!1?n.removeAttr(a,c):sc&&rc||!qc.test(c)?a.setAttribute(!rc&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=pc[b]||n.find.attr;pc[b]=sc&&rc||!qc.test(b)?function(a,b,d){var e,f;return d||(f=pc[b],pc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,pc[b]=f),e}:function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),sc&&rc||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):nc&&nc.set(a,b,c)}}),rc||(nc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},pc.id=pc.name=pc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:nc.set},n.attrHooks.contenteditable={set:function(a,b,c){nc.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var tc=/^(?:input|select|textarea|button|object)$/i,uc=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return W(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):tc.test(a.nodeName)||uc.test(a.nodeName)&&a.href?0:-1}}}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var vc=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(F)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===L||"boolean"===c)&&(this.className&&n._data(this,"__className__",this.className),this.className=this.className||a===!1?"":n._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(vc," ").indexOf(b)>=0)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var wc=n.now(),xc=/\?/,yc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(yc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var zc,Ac,Bc=/#.*$/,Cc=/([?&])_=[^&]*/,Dc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Ec=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Fc=/^(?:GET|HEAD)$/,Gc=/^\/\//,Hc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ic={},Jc={},Kc="*/".concat("*");try{Ac=location.href}catch(Lc){Ac=z.createElement("a"),Ac.href="",Ac=Ac.href}zc=Hc.exec(Ac.toLowerCase())||[];function Mc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(F)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nc(a,b,c,d){var e={},f=a===Jc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Oc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Pc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Qc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ac,type:"GET",isLocal:Ec.test(zc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Oc(Oc(a,n.ajaxSettings),b):Oc(n.ajaxSettings,a)},ajaxPrefilter:Mc(Ic),ajaxTransport:Mc(Jc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Dc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||Ac)+"").replace(Bc,"").replace(Gc,zc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(F)||[""],null==k.crossDomain&&(c=Hc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===zc[1]&&c[2]===zc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(zc[3]||("http:"===zc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),Nc(Ic,k,b,v),2===t)return v;h=k.global,h&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Fc.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(xc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Cc.test(e)?e.replace(Cc,"$1_="+wc++):e+(xc.test(e)?"&":"?")+"_="+wc++)),k.ifModified&&(n.lastModified[e]&&v.setRequestHeader("If-Modified-Since",n.lastModified[e]),n.etag[e]&&v.setRequestHeader("If-None-Match",n.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Kc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Nc(Jc,k,b,v)){v.readyState=1,h&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Pc(k,v,c)),u=Qc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(n.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!l.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||n.css(a,"display"))},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var Rc=/%20/g,Sc=/\[\]$/,Tc=/\r?\n/g,Uc=/^(?:submit|button|image|reset|file)$/i,Vc=/^(?:input|select|textarea|keygen)/i;function Wc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||Sc.test(a)?d(a,e):Wc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Wc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Wc(c,a[c],b,e);return d.join("&").replace(Rc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Vc.test(this.nodeName)&&!Uc.test(a)&&(this.checked||!X.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(Tc,"\r\n")}}):{name:b.name,value:c.replace(Tc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&$c()||_c()}:$c;var Xc=0,Yc={},Zc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Yc)Yc[a](void 0,!0)}),l.cors=!!Zc&&"withCredentials"in Zc,Zc=l.ajax=!!Zc,Zc&&n.ajaxTransport(function(a){if(!a.crossDomain||l.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Xc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Yc[g],b=void 0,f.onreadystatechange=n.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Yc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function $c(){try{return new a.XMLHttpRequest}catch(b){}}function _c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=z.head||n("head")[0]||z.documentElement;return{send:function(d,e){b=z.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var ad=[],bd=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=ad.pop()||n.expando+"_"+wc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(bd.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&bd.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(bd,"$1"+e):b.jsonp!==!1&&(b.url+=(xc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,ad.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||z;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var cd=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&cd)return cd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=a.slice(h,a.length),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&n.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var dd=a.document.documentElement;function ed(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?(typeof e.getBoundingClientRect!==L&&(d=e.getBoundingClientRect()),c=ed(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||dd;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||dd})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return W(this,function(a,d,e){var f=ed(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Mb(l.pixelPosition,function(a,c){return c?(c=Kb(a,b),Ib.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return W(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var fd=a.jQuery,gd=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=gd),b&&a.jQuery===n&&(a.jQuery=fd),n},typeof b===L&&(a.jQuery=a.$=n),n});
/* jquery.nicescroll 3.5.6 InuYaksa*2014 MIT http://nicescroll.areaaperta.com */!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)}(function(e){function o(){var e=document.getElementsByTagName("script"),o=e[e.length-1].src.split("?")[0]
return o.split("/").length>0?o.split("/").slice(0,-1).join("/")+"/":""}function t(e,o,t){for(var r=0;r<o.length;r++)t(e,o[r])}var r=!1,i=!1,n=0,s=2e3,l=0,a=e,c=["ms","moz","webkit","o"],d=window.requestAnimationFrame||!1,u=window.cancelAnimationFrame||!1
if(!d)for(var h in c){var p=c[h]
d||(d=window[p+"RequestAnimationFrame"]),u||(u=window[p+"CancelAnimationFrame"]||window[p+"CancelRequestAnimationFrame"])}var m=window.MutationObserver||window.WebKitMutationObserver||!1,f={zindex:"auto",cursoropacitymin:0,cursoropacitymax:1,cursorcolor:"#424242",cursorwidth:"5px",cursorborder:"1px solid #fff",cursorborderradius:"5px",scrollspeed:60,mousescrollstep:24,touchbehavior:!1,hwacceleration:!0,usetransition:!0,boxzoom:!1,dblclickzoom:!0,gesturezoom:!0,grabcursorenabled:!0,autohidemode:!0,background:"",iframeautoresize:!0,cursorminheight:32,preservenativescrolling:!0,railoffset:!1,railhoffset:!1,bouncescroll:!0,spacebarenabled:!0,railpadding:{top:0,right:0,left:0,bottom:0},disableoutline:!0,horizrailenabled:!0,railalign:"right",railvalign:"bottom",enabletranslate3d:!0,enablemousewheel:!0,enablekeyboard:!0,smoothscroll:!0,sensitiverail:!0,enablemouselockapi:!0,cursorfixedheight:!1,directionlockdeadzone:6,hidecursordelay:400,nativeparentscrolling:!0,enablescrollonselection:!0,overflowx:!0,overflowy:!0,cursordragspeed:.3,rtlmode:"auto",cursordragontouch:!1,oneaxismousemode:"auto",scriptpath:o()},g=!1,w=function(){function e(){var e=["-moz-grab","-webkit-grab","grab"];(t.ischrome&&!t.ischrome22||t.isie)&&(e=[])
for(var r=0;r<e.length;r++){var i=e[r]
if(o.style.cursor=i,o.style.cursor==i)return i}return"url(//mail.google.com/mail/images/2/openhand.cur),n-resize"}if(g)return g
var o=document.createElement("DIV"),t={}
t.haspointerlock="pointerLockElement"in document||"mozPointerLockElement"in document||"webkitPointerLockElement"in document,t.isopera="opera"in window,t.isopera12=t.isopera&&"getUserMedia"in navigator,t.isoperamini="[object OperaMini]"===Object.prototype.toString.call(window.operamini),t.isie="all"in document&&"attachEvent"in o&&!t.isopera,t.isieold=t.isie&&!("msInterpolationMode"in o.style),t.isie7=!(!t.isie||t.isieold||"documentMode"in document&&7!=document.documentMode),t.isie8=t.isie&&"documentMode"in document&&8==document.documentMode,t.isie9=t.isie&&"performance"in window&&document.documentMode>=9,t.isie10=t.isie&&"performance"in window&&document.documentMode>=10,t.isie9mobile=/iemobile.9/i.test(navigator.userAgent),t.isie9mobile&&(t.isie9=!1),t.isie7mobile=!t.isie9mobile&&t.isie7&&/iemobile/i.test(navigator.userAgent),t.ismozilla="MozAppearance"in o.style,t.iswebkit="WebkitAppearance"in o.style,t.ischrome="chrome"in window,t.ischrome22=t.ischrome&&t.haspointerlock,t.ischrome26=t.ischrome&&"transition"in o.style,t.cantouch="ontouchstart"in document.documentElement||"ontouchstart"in window,t.hasmstouch=window.navigator.msPointerEnabled||!1,t.ismac=/^mac$/i.test(navigator.platform),t.isios=t.cantouch&&/iphone|ipad|ipod/i.test(navigator.platform),t.isios4=t.isios&&!("seal"in Object),t.isandroid=/android/i.test(navigator.userAgent),t.trstyle=!1,t.hastransform=!1,t.hastranslate3d=!1,t.transitionstyle=!1,t.hastransition=!1,t.transitionend=!1
for(var r=["transform","msTransform","webkitTransform","MozTransform","OTransform"],i=0;i<r.length;i++)if(void 0!==o.style[r[i]]){t.trstyle=r[i]
break}t.hastransform=0!=t.trstyle,t.hastransform&&(o.style[t.trstyle]="translate3d(1px,2px,3px)",t.hastranslate3d=/translate3d/.test(o.style[t.trstyle])),t.transitionstyle=!1,t.prefixstyle="",t.transitionend=!1
for(var r=["transition","webkitTransition","MozTransition","OTransition","OTransition","msTransition","KhtmlTransition"],n=["","-webkit-","-moz-","-o-","-o","-ms-","-khtml-"],s=["transitionend","webkitTransitionEnd","transitionend","otransitionend","oTransitionEnd","msTransitionEnd","KhtmlTransitionEnd"],i=0;i<r.length;i++)if(r[i]in o.style){t.transitionstyle=r[i],t.prefixstyle=n[i],t.transitionend=s[i]
break}return t.ischrome26&&(t.prefixstyle=n[1]),t.hastransition=t.transitionstyle,t.cursorgrabvalue=e(),t.hasmousecapture="setCapture"in o,t.hasMutationObserver=m!==!1,o=null,g=t,t},v=function(e,o){function t(){var e=v.doc.css(x.trstyle)
return e&&"matrix"==e.substr(0,6)?e.replace(/^.*\((.*)\)$/g,"$1").replace(/px/g,"").split(/, +/):!1}function c(){var e=v.win
if("zIndex"in e)return e.zIndex()
for(;e.length>0;){if(9==e[0].nodeType)return!1
var o=e.css("zIndex")
if(!isNaN(o)&&0!=o)return parseInt(o)
e=e.parent()}return!1}function h(e,o,t){var r=e.css(o),i=parseFloat(r)
if(isNaN(i)){i=T[r]||0
var n=3==i?t?v.win.outerHeight()-v.win.innerHeight():v.win.outerWidth()-v.win.innerWidth():1
return v.isie8&&i&&(i+=1),n?i:0}return i}function p(e,o,t,r){v._bind(e,o,function(r){var r=r?r:window.event,i={original:r,target:r.target||r.srcElement,type:"wheel",deltaMode:"MozMousePixelScroll"==r.type?0:1,deltaX:0,deltaZ:0,preventDefault:function(){return r.preventDefault?r.preventDefault():r.returnValue=!1,!1},stopImmediatePropagation:function(){r.stopImmediatePropagation?r.stopImmediatePropagation():r.cancelBubble=!0}}
return"mousewheel"==o?(i.deltaY=-1/40*r.wheelDelta,r.wheelDeltaX&&(i.deltaX=-1/40*r.wheelDeltaX)):i.deltaY=r.detail,t.call(e,i)},r)}function g(e,o,t){var r,i
if(0==e.deltaMode?(r=-Math.floor(e.deltaX*(v.opt.mousescrollstep/54)),i=-Math.floor(e.deltaY*(v.opt.mousescrollstep/54))):1==e.deltaMode&&(r=-Math.floor(e.deltaX*v.opt.mousescrollstep),i=-Math.floor(e.deltaY*v.opt.mousescrollstep)),o&&v.opt.oneaxismousemode&&0==r&&i&&(r=i,i=0),r&&(v.scrollmom&&v.scrollmom.stop(),v.lastdeltax+=r,v.debounced("mousewheelx",function(){var e=v.lastdeltax
v.lastdeltax=0,v.rail.drag||v.doScrollLeftBy(e)},15)),i){if(v.opt.nativeparentscrolling&&t&&!v.ispage&&!v.zoomactive)if(0>i){if(v.getScrollTop()>=v.page.maxh)return!0}else if(v.getScrollTop()<=0)return!0
v.scrollmom&&v.scrollmom.stop(),v.lastdeltay+=i,v.debounced("mousewheely",function(){var e=v.lastdeltay
v.lastdeltay=0,v.rail.drag||v.doScrollBy(e)},15)}return e.stopImmediatePropagation(),e.preventDefault()}var v=this
if(this.version="3.5.6",this.name="nicescroll",this.me=o,this.opt={doc:a("body"),win:!1},a.extend(this.opt,f),this.opt.snapbackspeed=80,e)for(var y in v.opt)void 0!==e[y]&&(v.opt[y]=e[y])
this.doc=v.opt.doc,this.iddoc=this.doc&&this.doc[0]?this.doc[0].id||"":"",this.ispage=/^BODY|HTML/.test(v.opt.win?v.opt.win[0].nodeName:this.doc[0].nodeName),this.haswrapper=v.opt.win!==!1,this.win=v.opt.win||(this.ispage?a(window):this.doc),this.docscroll=this.ispage&&!this.haswrapper?a(window):this.win,this.body=a("body"),this.viewport=!1,this.isfixed=!1,this.iframe=!1,this.isiframe="IFRAME"==this.doc[0].nodeName&&"IFRAME"==this.win[0].nodeName,this.istextarea="TEXTAREA"==this.win[0].nodeName,this.forcescreen=!1,this.canshowonmouseevent="scroll"!=v.opt.autohidemode,this.onmousedown=!1,this.onmouseup=!1,this.onmousemove=!1,this.onmousewheel=!1,this.onkeypress=!1,this.ongesturezoom=!1,this.onclick=!1,this.onscrollstart=!1,this.onscrollend=!1,this.onscrollcancel=!1,this.onzoomin=!1,this.onzoomout=!1,this.view=!1,this.page=!1,this.scroll={x:0,y:0},this.scrollratio={x:0,y:0},this.cursorheight=20,this.scrollvaluemax=0,this.isrtlmode="auto"==this.opt.rtlmode?"rtl"==(this.win[0]==window?this.body:this.win).css("direction"):this.opt.rtlmode===!0,this.scrollrunning=!1,this.scrollmom=!1,this.observer=!1,this.observerremover=!1
do this.id="ascrail"+s++
while(document.getElementById(this.id))
this.rail=!1,this.cursor=!1,this.cursorfreezed=!1,this.selectiondrag=!1,this.zoom=!1,this.zoomactive=!1,this.hasfocus=!1,this.hasmousefocus=!1,this.visibility=!0,this.locked=!1,this.hidden=!1,this.cursoractive=!0,this.wheelprevented=!1,this.overflowx=v.opt.overflowx,this.overflowy=v.opt.overflowy,this.nativescrollingarea=!1,this.checkarea=0,this.events=[],this.saved={},this.delaylist={},this.synclist={},this.lastdeltax=0,this.lastdeltay=0,this.detected=w()
var x=a.extend({},this.detected)
this.canhwscroll=x.hastransform&&v.opt.hwacceleration,this.ishwscroll=this.canhwscroll&&v.haswrapper,this.istouchcapable=!1,x.cantouch&&x.iswebkit&&!x.isios&&!x.isandroid&&(this.istouchcapable=!0,x.cantouch=!1),x.cantouch&&x.ismozilla&&!x.isios&&!x.isandroid&&(this.istouchcapable=!0,x.cantouch=!1),v.opt.enablemouselockapi||(x.hasmousecapture=!1,x.haspointerlock=!1),this.delayed=function(e,o,t,r){var i=v.delaylist[e],n=(new Date).getTime()
return!r&&i&&i.tt?!1:(i&&i.tt&&clearTimeout(i.tt),void(i&&i.last+t>n&&!i.tt?v.delaylist[e]={last:n+t,tt:setTimeout(function(){v&&(v.delaylist[e].tt=0,o.call())},t)}:i&&i.tt||(v.delaylist[e]={last:n,tt:0},setTimeout(function(){o.call()},0))))},this.debounced=function(e,o,t){{var r=v.delaylist[e];(new Date).getTime()}v.delaylist[e]=o,r||setTimeout(function(){var o=v.delaylist[e]
v.delaylist[e]=!1,o.call()},t)}
var S=!1
if(this.synched=function(e,o){function t(){S||(d(function(){S=!1
for(e in v.synclist){var o=v.synclist[e]
o&&o.call(v),v.synclist[e]=!1}}),S=!0)}return v.synclist[e]=o,t(),e},this.unsynched=function(e){v.synclist[e]&&(v.synclist[e]=!1)},this.css=function(e,o){for(var t in o)v.saved.css.push([e,t,e.css(t)]),e.css(t,o[t])},this.scrollTop=function(e){return void 0===e?v.getScrollTop():v.setScrollTop(e)},this.scrollLeft=function(e){return void 0===e?v.getScrollLeft():v.setScrollLeft(e)},BezierClass=function(e,o,t,r,i,n,s){this.st=e,this.ed=o,this.spd=t,this.p1=r||0,this.p2=i||1,this.p3=n||0,this.p4=s||1,this.ts=(new Date).getTime(),this.df=this.ed-this.st},BezierClass.prototype={B2:function(e){return 3*e*e*(1-e)},B3:function(e){return 3*e*(1-e)*(1-e)},B4:function(e){return(1-e)*(1-e)*(1-e)},getNow:function(){var e=(new Date).getTime(),o=1-(e-this.ts)/this.spd,t=this.B2(o)+this.B3(o)+this.B4(o)
return 0>o?this.ed:this.st+Math.round(this.df*t)},update:function(e,o){return this.st=this.getNow(),this.ed=e,this.spd=o,this.ts=(new Date).getTime(),this.df=this.ed-this.st,this}},this.ishwscroll){this.doc.translate={x:0,y:0,tx:"0px",ty:"0px"},x.hastranslate3d&&x.isios&&this.doc.css("-webkit-backface-visibility","hidden"),this.getScrollTop=function(e){if(!e){var o=t()
if(o)return 16==o.length?-o[13]:-o[5]
if(v.timerscroll&&v.timerscroll.bz)return v.timerscroll.bz.getNow()}return v.doc.translate.y},this.getScrollLeft=function(e){if(!e){var o=t()
if(o)return 16==o.length?-o[12]:-o[4]
if(v.timerscroll&&v.timerscroll.bh)return v.timerscroll.bh.getNow()}return v.doc.translate.x},this.notifyScrollEvent=document.createEvent?function(e){var o=document.createEvent("UIEvents")
o.initUIEvent("scroll",!1,!0,window,1),e.dispatchEvent(o)}:document.fireEvent?function(e){var o=document.createEventObject()
e.fireEvent("onscroll"),o.cancelBubble=!0}:function(){}
var z=this.isrtlmode?1:-1
x.hastranslate3d&&v.opt.enabletranslate3d?(this.setScrollTop=function(e,o){v.doc.translate.y=e,v.doc.translate.ty=-1*e+"px",v.doc.css(x.trstyle,"translate3d("+v.doc.translate.tx+","+v.doc.translate.ty+",0px)"),o||v.notifyScrollEvent(v.win[0])},this.setScrollLeft=function(e,o){v.doc.translate.x=e,v.doc.translate.tx=e*z+"px",v.doc.css(x.trstyle,"translate3d("+v.doc.translate.tx+","+v.doc.translate.ty+",0px)"),o||v.notifyScrollEvent(v.win[0])}):(this.setScrollTop=function(e,o){v.doc.translate.y=e,v.doc.translate.ty=-1*e+"px",v.doc.css(x.trstyle,"translate("+v.doc.translate.tx+","+v.doc.translate.ty+")"),o||v.notifyScrollEvent(v.win[0])},this.setScrollLeft=function(e,o){v.doc.translate.x=e,v.doc.translate.tx=e*z+"px",v.doc.css(x.trstyle,"translate("+v.doc.translate.tx+","+v.doc.translate.ty+")"),o||v.notifyScrollEvent(v.win[0])})}else this.getScrollTop=function(){return v.docscroll.scrollTop()},this.setScrollTop=function(e){return v.docscroll.scrollTop(e)},this.getScrollLeft=function(){return v.detected.ismozilla&&v.isrtlmode?Math.abs(v.docscroll.scrollLeft()):v.docscroll.scrollLeft()},this.setScrollLeft=function(e){return v.docscroll.scrollLeft(v.detected.ismozilla&&v.isrtlmode?-e:e)}
this.getTarget=function(e){return e?e.target?e.target:e.srcElement?e.srcElement:!1:!1},this.hasParent=function(e,o){if(!e)return!1
for(var t=e.target||e.srcElement||e||!1;t&&t.id!=o;)t=t.parentNode||!1
return t!==!1}
var T={thin:1,medium:3,thick:5}
this.getOffset=function(){if(v.isfixed)return{top:parseFloat(v.win.css("top")),left:parseFloat(v.win.css("left"))}
if(!v.viewport)return v.win.offset()
var e=v.win.offset(),o=v.viewport.offset()
return{top:e.top-o.top+v.viewport.scrollTop(),left:e.left-o.left+v.viewport.scrollLeft()}},this.updateScrollBar=function(e){if(v.ishwscroll)v.rail.css({height:v.win.innerHeight()}),v.railh&&v.railh.css({width:v.win.innerWidth()})
else{var o=v.getOffset(),t={top:o.top,left:o.left}
t.top+=h(v.win,"border-top-width",!0)
{(v.win.outerWidth()-v.win.innerWidth())/2}t.left+=v.rail.align?v.win.outerWidth()-h(v.win,"border-right-width")-v.rail.width:h(v.win,"border-left-width")
var r=v.opt.railoffset
if(r&&(r.top&&(t.top+=r.top),v.rail.align&&r.left&&(t.left+=r.left)),v.locked||v.rail.css({top:t.top,left:t.left,height:e?e.h:v.win.innerHeight()}),v.zoom&&v.zoom.css({top:t.top+1,left:1==v.rail.align?t.left-20:t.left+v.rail.width+4}),v.railh&&!v.locked){var t={top:o.top,left:o.left},r=v.opt.railhoffset
r&&(r.top&&(t.top+=r.top),r.left&&(t.left+=r.left))
var i=v.railh.align?t.top+h(v.win,"border-top-width",!0)+v.win.innerHeight()-v.railh.height:t.top+h(v.win,"border-top-width",!0),n=t.left+h(v.win,"border-left-width")
v.railh.css({top:i,left:n,width:v.railh.width})}}},this.doRailClick=function(e,o,t){var r,i,n,s
v.locked||(v.cancelEvent(e),o?(r=t?v.doScrollLeft:v.doScrollTop,n=t?(e.pageX-v.railh.offset().left-v.cursorwidth/2)*v.scrollratio.x:(e.pageY-v.rail.offset().top-v.cursorheight/2)*v.scrollratio.y,r(n)):(r=t?v.doScrollLeftBy:v.doScrollBy,n=t?v.scroll.x:v.scroll.y,s=t?e.pageX-v.railh.offset().left:e.pageY-v.rail.offset().top,i=t?v.view.w:v.view.h,r(n>=s?i:-i)))},v.hasanimationframe=d,v.hascancelanimationframe=u,v.hasanimationframe?v.hascancelanimationframe||(u=function(){v.cancelAnimationFrame=!0}):(d=function(e){return setTimeout(e,15-Math.floor(+new Date/1e3)%16)},u=clearInterval),this.init=function(){function e(o){if(v.selectiondrag){if(o){var t=v.win.outerHeight(),r=o.pageY-v.selectiondrag.top
r>0&&t>r&&(r=0),r>=t&&(r-=t),v.selectiondrag.df=r}if(0!=v.selectiondrag.df){var i=2*-Math.floor(v.selectiondrag.df/6)
v.doScrollBy(i),v.debounced("doselectionscroll",function(){e()},50)}}}function o(){v.iframexd=!1
try{{var e="contentDocument"in this?this.contentDocument:this.contentWindow.document
e.domain}}catch(o){v.iframexd=!0,e=!1}if(v.iframexd)return"console"in window&&console.log("NiceScroll error: policy restriced iframe"),!0
if(v.forcescreen=!0,v.isiframe&&(v.iframe={doc:a(e),html:v.doc.contents().find("html")[0],body:v.doc.contents().find("body")[0]},v.getContentSize=function(){return{w:Math.max(v.iframe.html.scrollWidth,v.iframe.body.scrollWidth),h:Math.max(v.iframe.html.scrollHeight,v.iframe.body.scrollHeight)}},v.docscroll=a(v.iframe.body)),!x.isios&&v.opt.iframeautoresize&&!v.isiframe){v.win.scrollTop(0),v.doc.height("")
var t=Math.max(e.getElementsByTagName("html")[0].scrollHeight,e.body.scrollHeight)
v.doc.height(t)}v.lazyResize(30),x.isie7&&v.css(a(v.iframe.html),{"overflow-y":"hidden"}),v.css(a(v.iframe.body),{"overflow-y":"hidden"}),x.isios&&v.haswrapper&&v.css(a(e.body),{"-webkit-transform":"translate3d(0,0,0)"}),"contentWindow"in this?v.bind(this.contentWindow,"scroll",v.onscroll):v.bind(e,"scroll",v.onscroll),v.opt.enablemousewheel&&v.bind(e,"mousewheel",v.onmousewheel),v.opt.enablekeyboard&&v.bind(e,x.isopera?"keypress":"keydown",v.onkeypress),(x.cantouch||v.opt.touchbehavior)&&(v.bind(e,"mousedown",v.ontouchstart),v.bind(e,"mousemove",function(e){v.ontouchmove(e,!0)}),v.opt.grabcursorenabled&&x.cursorgrabvalue&&v.css(a(e.body),{cursor:x.cursorgrabvalue})),v.bind(e,"mouseup",v.ontouchend),v.zoom&&(v.opt.dblclickzoom&&v.bind(e,"dblclick",v.doZoom),v.ongesturezoom&&v.bind(e,"gestureend",v.ongesturezoom))}if(v.saved.css=[],x.isie7mobile)return!0
if(x.isoperamini)return!0
if(x.hasmstouch&&v.css(v.ispage?a("html"):v.win,{"-ms-touch-action":"none"}),v.zindex="auto",v.zindex=v.ispage||"auto"!=v.opt.zindex?v.opt.zindex:c()||"auto",v.ispage||"auto"==v.zindex||v.zindex>l&&(l=v.zindex),v.isie&&0==v.zindex&&"auto"==v.opt.zindex&&(v.zindex="auto"),!v.ispage||!x.cantouch&&!x.isieold&&!x.isie9mobile){var t=v.docscroll
v.ispage&&(t=v.haswrapper?v.win:v.doc),x.isie9mobile||v.css(t,{"overflow-y":"hidden"}),v.ispage&&x.isie7&&("BODY"==v.doc[0].nodeName?v.css(a("html"),{"overflow-y":"hidden"}):"HTML"==v.doc[0].nodeName&&v.css(a("body"),{"overflow-y":"hidden"})),!x.isios||v.ispage||v.haswrapper||v.css(a("body"),{"-webkit-overflow-scrolling":"touch"})
var s=a(document.createElement("div"))
s.css({position:"relative",top:0,"float":"right",width:v.opt.cursorwidth,height:"0px","background-color":v.opt.cursorcolor,border:v.opt.cursorborder,"background-clip":"padding-box","-webkit-border-radius":v.opt.cursorborderradius,"-moz-border-radius":v.opt.cursorborderradius,"border-radius":v.opt.cursorborderradius}),s.hborder=parseFloat(s.outerHeight()-s.innerHeight()),v.cursor=s
var d=a(document.createElement("div"))
d.attr("id",v.id),d.addClass("nicescroll-rails")
var u,h,p=["left","right"]
for(var f in p)h=p[f],u=v.opt.railpadding[h],u?d.css("padding-"+h,u+"px"):v.opt.railpadding[h]=0
d.append(s),d.width=Math.max(parseFloat(v.opt.cursorwidth),s.outerWidth())+v.opt.railpadding.left+v.opt.railpadding.right,d.css({width:d.width+"px",zIndex:v.zindex,background:v.opt.background,cursor:"default"}),d.visibility=!0,d.scrollable=!0,d.align="left"==v.opt.railalign?0:1,v.rail=d,v.rail.drag=!1
var g=!1
if(!v.opt.boxzoom||v.ispage||x.isieold||(g=document.createElement("div"),v.bind(g,"click",v.doZoom),v.zoom=a(g),v.zoom.css({cursor:"pointer","z-index":v.zindex,backgroundImage:"url("+v.opt.scriptpath+"zoomico.png)",height:18,width:18,backgroundPosition:"0px 0px"}),v.opt.dblclickzoom&&v.bind(v.win,"dblclick",v.doZoom),x.cantouch&&v.opt.gesturezoom&&(v.ongesturezoom=function(e){return e.scale>1.5&&v.doZoomIn(e),e.scale<.8&&v.doZoomOut(e),v.cancelEvent(e)},v.bind(v.win,"gestureend",v.ongesturezoom))),v.railh=!1,v.opt.horizrailenabled){v.css(t,{"overflow-x":"hidden"})
var s=a(document.createElement("div"))
s.css({position:"absolute",top:0,height:v.opt.cursorwidth,width:"0px","background-color":v.opt.cursorcolor,border:v.opt.cursorborder,"background-clip":"padding-box","-webkit-border-radius":v.opt.cursorborderradius,"-moz-border-radius":v.opt.cursorborderradius,"border-radius":v.opt.cursorborderradius}),s.wborder=parseFloat(s.outerWidth()-s.innerWidth()),v.cursorh=s
var w=a(document.createElement("div"))
w.attr("id",v.id+"-hr"),w.addClass("nicescroll-rails"),w.height=Math.max(parseFloat(v.opt.cursorwidth),s.outerHeight()),w.css({height:w.height+"px",zIndex:v.zindex,background:v.opt.background}),w.append(s),w.visibility=!0,w.scrollable=!0,w.align="top"==v.opt.railvalign?0:1,v.railh=w,v.railh.drag=!1}if(v.ispage)d.css({position:"fixed",top:"0px",height:"100%"}),d.css(d.align?{right:"0px"}:{left:"0px"}),v.body.append(d),v.railh&&(w.css({position:"fixed",left:"0px",width:"100%"}),w.css(w.align?{bottom:"0px"}:{top:"0px"}),v.body.append(w))
else{if(v.ishwscroll){"static"==v.win.css("position")&&v.css(v.win,{position:"relative"})
var y="HTML"==v.win[0].nodeName?v.body:v.win
v.zoom&&(v.zoom.css({position:"absolute",top:1,right:0,"margin-right":d.width+4}),y.append(v.zoom)),d.css({position:"absolute",top:0}),d.css(d.align?{right:0}:{left:0}),y.append(d),w&&(w.css({position:"absolute",left:0,bottom:0}),w.css(w.align?{bottom:0}:{top:0}),y.append(w))}else{v.isfixed="fixed"==v.win.css("position")
var S=v.isfixed?"fixed":"absolute"
v.isfixed||(v.viewport=v.getViewport(v.win[0])),v.viewport&&(v.body=v.viewport,0==/fixed|relative|absolute/.test(v.viewport.css("position"))&&v.css(v.viewport,{position:"relative"})),d.css({position:S}),v.zoom&&v.zoom.css({position:S}),v.updateScrollBar(),v.body.append(d),v.zoom&&v.body.append(v.zoom),v.railh&&(w.css({position:S}),v.body.append(w))}x.isios&&v.css(v.win,{"-webkit-tap-highlight-color":"rgba(0,0,0,0)","-webkit-touch-callout":"none"}),x.isie&&v.opt.disableoutline&&v.win.attr("hideFocus","true"),x.iswebkit&&v.opt.disableoutline&&v.win.css({outline:"none"})}if(v.opt.autohidemode===!1?(v.autohidedom=!1,v.rail.css({opacity:v.opt.cursoropacitymax}),v.railh&&v.railh.css({opacity:v.opt.cursoropacitymax})):v.opt.autohidemode===!0||"leave"===v.opt.autohidemode?(v.autohidedom=a().add(v.rail),x.isie8&&(v.autohidedom=v.autohidedom.add(v.cursor)),v.railh&&(v.autohidedom=v.autohidedom.add(v.railh)),v.railh&&x.isie8&&(v.autohidedom=v.autohidedom.add(v.cursorh))):"scroll"==v.opt.autohidemode?(v.autohidedom=a().add(v.rail),v.railh&&(v.autohidedom=v.autohidedom.add(v.railh))):"cursor"==v.opt.autohidemode?(v.autohidedom=a().add(v.cursor),v.railh&&(v.autohidedom=v.autohidedom.add(v.cursorh))):"hidden"==v.opt.autohidemode&&(v.autohidedom=!1,v.hide(),v.locked=!1),x.isie9mobile){v.scrollmom=new b(v),v.onmangotouch=function(){var e=v.getScrollTop(),o=v.getScrollLeft()
if(e==v.scrollmom.lastscrolly&&o==v.scrollmom.lastscrollx)return!0
var t=e-v.mangotouch.sy,r=o-v.mangotouch.sx,i=Math.round(Math.sqrt(Math.pow(r,2)+Math.pow(t,2)))
if(0!=i){var n=0>t?-1:1,s=0>r?-1:1,l=+new Date
if(v.mangotouch.lazy&&clearTimeout(v.mangotouch.lazy),l-v.mangotouch.tm>80||v.mangotouch.dry!=n||v.mangotouch.drx!=s)v.scrollmom.stop(),v.scrollmom.reset(o,e),v.mangotouch.sy=e,v.mangotouch.ly=e,v.mangotouch.sx=o,v.mangotouch.lx=o,v.mangotouch.dry=n,v.mangotouch.drx=s,v.mangotouch.tm=l
else{v.scrollmom.stop(),v.scrollmom.update(v.mangotouch.sx-r,v.mangotouch.sy-t)
{l-v.mangotouch.tm}v.mangotouch.tm=l
var a=Math.max(Math.abs(v.mangotouch.ly-e),Math.abs(v.mangotouch.lx-o))
v.mangotouch.ly=e,v.mangotouch.lx=o,a>2&&(v.mangotouch.lazy=setTimeout(function(){v.mangotouch.lazy=!1,v.mangotouch.dry=0,v.mangotouch.drx=0,v.mangotouch.tm=0,v.scrollmom.doMomentum(30)},100))}}}
var z=v.getScrollTop(),T=v.getScrollLeft()
v.mangotouch={sy:z,ly:z,dry:0,sx:T,lx:T,drx:0,lazy:!1,tm:0},v.bind(v.docscroll,"scroll",v.onmangotouch)}else{if(x.cantouch||v.istouchcapable||v.opt.touchbehavior||x.hasmstouch){v.scrollmom=new b(v),v.ontouchstart=function(e){if(e.pointerType&&2!=e.pointerType&&"touch"!=e.pointerType)return!1
if(v.hasmoving=!1,!v.locked){if(x.hasmstouch)for(var o=e.target?e.target:!1;o;){var t=a(o).getNiceScroll()
if(t.length>0&&t[0].me==v.me)break
if(t.length>0)return!1
if("DIV"==o.nodeName&&o.id==v.id)break
o=o.parentNode?o.parentNode:!1}v.cancelScroll()
var o=v.getTarget(e)
if(o){var r=/INPUT/i.test(o.nodeName)&&/range/i.test(o.type)
if(r)return v.stopPropagation(e)}if(!("clientX"in e)&&"changedTouches"in e&&(e.clientX=e.changedTouches[0].clientX,e.clientY=e.changedTouches[0].clientY),v.forcescreen){var i=e,e={original:e.original?e.original:e}
e.clientX=i.screenX,e.clientY=i.screenY}if(v.rail.drag={x:e.clientX,y:e.clientY,sx:v.scroll.x,sy:v.scroll.y,st:v.getScrollTop(),sl:v.getScrollLeft(),pt:2,dl:!1},v.ispage||!v.opt.directionlockdeadzone)v.rail.drag.dl="f"
else{var n={w:a(window).width(),h:a(window).height()},s={w:Math.max(document.body.scrollWidth,document.documentElement.scrollWidth),h:Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},l=Math.max(0,s.h-n.h),c=Math.max(0,s.w-n.w)
v.rail.drag.ck=!v.rail.scrollable&&v.railh.scrollable?l>0?"v":!1:v.rail.scrollable&&!v.railh.scrollable&&c>0?"h":!1,v.rail.drag.ck||(v.rail.drag.dl="f")}if(v.opt.touchbehavior&&v.isiframe&&x.isie){var d=v.win.position()
v.rail.drag.x+=d.left,v.rail.drag.y+=d.top}if(v.hasmoving=!1,v.lastmouseup=!1,v.scrollmom.reset(e.clientX,e.clientY),!x.cantouch&&!this.istouchcapable&&!x.hasmstouch){var u=o?/INPUT|SELECT|TEXTAREA/i.test(o.nodeName):!1
if(!u)return!v.ispage&&x.hasmousecapture&&o.setCapture(),v.opt.touchbehavior?(o.onclick&&!o._onclick&&(o._onclick=o.onclick,o.onclick=function(e){return v.hasmoving?!1:void o._onclick.call(this,e)}),v.cancelEvent(e)):v.stopPropagation(e);/SUBMIT|CANCEL|BUTTON/i.test(a(o).attr("type"))&&(pc={tg:o,click:!1},v.preventclick=pc)}}},v.ontouchend=function(e){return e.pointerType&&2!=e.pointerType&&"touch"!=e.pointerType?!1:v.rail.drag&&2==v.rail.drag.pt&&(v.scrollmom.doMomentum(),v.rail.drag=!1,v.hasmoving&&(v.lastmouseup=!0,v.hideCursor(),x.hasmousecapture&&document.releaseCapture(),!x.cantouch))?v.cancelEvent(e):void 0}
var k=v.opt.touchbehavior&&v.isiframe&&!x.hasmousecapture
v.ontouchmove=function(e,o){if(e.pointerType&&2!=e.pointerType&&"touch"!=e.pointerType)return!1
if(v.rail.drag&&2==v.rail.drag.pt){if(x.cantouch&&void 0===e.original)return!0
v.hasmoving=!0,v.preventclick&&!v.preventclick.click&&(v.preventclick.click=v.preventclick.tg.onclick||!1,v.preventclick.tg.onclick=v.onpreventclick)
var t=a.extend({original:e},e)
if(e=t,"changedTouches"in e&&(e.clientX=e.changedTouches[0].clientX,e.clientY=e.changedTouches[0].clientY),v.forcescreen){var r=e,e={original:e.original?e.original:e}
e.clientX=r.screenX,e.clientY=r.screenY}var i=ofy=0
if(k&&!o){var n=v.win.position()
i=-n.left,ofy=-n.top}var s=e.clientY+ofy,l=s-v.rail.drag.y,c=e.clientX+i,d=c-v.rail.drag.x,u=v.rail.drag.st-l
if(v.ishwscroll&&v.opt.bouncescroll?0>u?u=Math.round(u/2):u>v.page.maxh&&(u=v.page.maxh+Math.round((u-v.page.maxh)/2)):(0>u&&(u=0,s=0),u>v.page.maxh&&(u=v.page.maxh,s=0)),v.railh&&v.railh.scrollable){var h=v.isrtlmode?d-v.rail.drag.sl:v.rail.drag.sl-d
v.ishwscroll&&v.opt.bouncescroll?0>h?h=Math.round(h/2):h>v.page.maxw&&(h=v.page.maxw+Math.round((h-v.page.maxw)/2)):(0>h&&(h=0,c=0),h>v.page.maxw&&(h=v.page.maxw,c=0))}var p=!1
if(v.rail.drag.dl)p=!0,"v"==v.rail.drag.dl?h=v.rail.drag.sl:"h"==v.rail.drag.dl&&(u=v.rail.drag.st)
else{var m=Math.abs(l),f=Math.abs(d),g=v.opt.directionlockdeadzone
if("v"==v.rail.drag.ck){if(m>g&&.3*m>=f)return v.rail.drag=!1,!0
f>g&&(v.rail.drag.dl="f",a("body").scrollTop(a("body").scrollTop()))}else if("h"==v.rail.drag.ck){if(f>g&&.3*f>=m)return v.rail.drag=!1,!0
m>g&&(v.rail.drag.dl="f",a("body").scrollLeft(a("body").scrollLeft()))}}if(v.synched("touchmove",function(){v.rail.drag&&2==v.rail.drag.pt&&(v.prepareTransition&&v.prepareTransition(0),v.rail.scrollable&&v.setScrollTop(u),v.scrollmom.update(c,s),v.railh&&v.railh.scrollable?(v.setScrollLeft(h),v.showCursor(u,h)):v.showCursor(u),x.isie10&&document.selection.clear())}),x.ischrome&&v.istouchcapable&&(p=!1),p)return v.cancelEvent(e)}}}v.onmousedown=function(e,o){if(!v.rail.drag||1==v.rail.drag.pt){if(v.locked)return v.cancelEvent(e)
v.cancelScroll(),v.rail.drag={x:e.clientX,y:e.clientY,sx:v.scroll.x,sy:v.scroll.y,pt:1,hr:!!o}
var t=v.getTarget(e)
return!v.ispage&&x.hasmousecapture&&t.setCapture(),v.isiframe&&!x.hasmousecapture&&(v.saved.csspointerevents=v.doc.css("pointer-events"),v.css(v.doc,{"pointer-events":"none"})),v.hasmoving=!1,v.cancelEvent(e)}},v.onmouseup=function(e){if(v.rail.drag){if(x.hasmousecapture&&document.releaseCapture(),v.isiframe&&!x.hasmousecapture&&v.doc.css("pointer-events",v.saved.csspointerevents),1!=v.rail.drag.pt)return
return v.rail.drag=!1,v.hasmoving&&v.triggerScrollEnd(),v.cancelEvent(e)}},v.onmousemove=function(e){if(v.rail.drag){if(1!=v.rail.drag.pt)return
if(x.ischrome&&0==e.which)return v.onmouseup(e)
if(v.cursorfreezed=!0,v.hasmoving=!0,v.rail.drag.hr){v.scroll.x=v.rail.drag.sx+(e.clientX-v.rail.drag.x),v.scroll.x<0&&(v.scroll.x=0)
var o=v.scrollvaluemaxw
v.scroll.x>o&&(v.scroll.x=o)}else{v.scroll.y=v.rail.drag.sy+(e.clientY-v.rail.drag.y),v.scroll.y<0&&(v.scroll.y=0)
var t=v.scrollvaluemax
v.scroll.y>t&&(v.scroll.y=t)}return v.synched("mousemove",function(){v.rail.drag&&1==v.rail.drag.pt&&(v.showCursor(),v.rail.drag.hr?v.doScrollLeft(Math.round(v.scroll.x*v.scrollratio.x),v.opt.cursordragspeed):v.doScrollTop(Math.round(v.scroll.y*v.scrollratio.y),v.opt.cursordragspeed))}),v.cancelEvent(e)}},x.cantouch||v.opt.touchbehavior?(v.onpreventclick=function(e){return v.preventclick?(v.preventclick.tg.onclick=v.preventclick.click,v.preventclick=!1,v.cancelEvent(e)):void 0},v.bind(v.win,"mousedown",v.ontouchstart),v.onclick=x.isios?!1:function(e){return v.lastmouseup?(v.lastmouseup=!1,v.cancelEvent(e)):!0},v.opt.grabcursorenabled&&x.cursorgrabvalue&&(v.css(v.ispage?v.doc:v.win,{cursor:x.cursorgrabvalue}),v.css(v.rail,{cursor:x.cursorgrabvalue}))):(v.hasTextSelected="getSelection"in document?function(){return document.getSelection().rangeCount>0}:"selection"in document?function(){return"None"!=document.selection.type}:function(){return!1},v.onselectionstart=function(){v.ispage||(v.selectiondrag=v.win.offset())},v.onselectionend=function(){v.selectiondrag=!1},v.onselectiondrag=function(o){v.selectiondrag&&v.hasTextSelected()&&v.debounced("selectionscroll",function(){e(o)},250)}),x.hasmstouch&&(v.css(v.rail,{"-ms-touch-action":"none"}),v.css(v.cursor,{"-ms-touch-action":"none"}),v.bind(v.win,"MSPointerDown",v.ontouchstart),v.bind(document,"MSPointerUp",v.ontouchend),v.bind(document,"MSPointerMove",v.ontouchmove),v.bind(v.cursor,"MSGestureHold",function(e){e.preventDefault()}),v.bind(v.cursor,"contextmenu",function(e){e.preventDefault()})),this.istouchcapable&&(v.bind(v.win,"touchstart",v.ontouchstart),v.bind(document,"touchend",v.ontouchend),v.bind(document,"touchcancel",v.ontouchend),v.bind(document,"touchmove",v.ontouchmove)),v.bind(v.cursor,"mousedown",v.onmousedown),v.bind(v.cursor,"mouseup",v.onmouseup),v.railh&&(v.bind(v.cursorh,"mousedown",function(e){v.onmousedown(e,!0)}),v.bind(v.cursorh,"mouseup",v.onmouseup)),(v.opt.cursordragontouch||!x.cantouch&&!v.opt.touchbehavior)&&(v.rail.css({cursor:"default"}),v.railh&&v.railh.css({cursor:"default"}),v.jqbind(v.rail,"mouseenter",function(){return v.win.is(":visible")?(v.canshowonmouseevent&&v.showCursor(),void(v.rail.active=!0)):!1}),v.jqbind(v.rail,"mouseleave",function(){v.rail.active=!1,v.rail.drag||v.hideCursor()}),v.opt.sensitiverail&&(v.bind(v.rail,"click",function(e){v.doRailClick(e,!1,!1)}),v.bind(v.rail,"dblclick",function(e){v.doRailClick(e,!0,!1)}),v.bind(v.cursor,"click",function(e){v.cancelEvent(e)}),v.bind(v.cursor,"dblclick",function(e){v.cancelEvent(e)})),v.railh&&(v.jqbind(v.railh,"mouseenter",function(){return v.win.is(":visible")?(v.canshowonmouseevent&&v.showCursor(),void(v.rail.active=!0)):!1}),v.jqbind(v.railh,"mouseleave",function(){v.rail.active=!1,v.rail.drag||v.hideCursor()}),v.opt.sensitiverail&&(v.bind(v.railh,"click",function(e){v.doRailClick(e,!1,!0)}),v.bind(v.railh,"dblclick",function(e){v.doRailClick(e,!0,!0)}),v.bind(v.cursorh,"click",function(e){v.cancelEvent(e)}),v.bind(v.cursorh,"dblclick",function(e){v.cancelEvent(e)})))),x.cantouch||v.opt.touchbehavior?(v.bind(x.hasmousecapture?v.win:document,"mouseup",v.ontouchend),v.bind(document,"mousemove",v.ontouchmove),v.onclick&&v.bind(document,"click",v.onclick),v.opt.cursordragontouch&&(v.bind(v.cursor,"mousedown",v.onmousedown),v.bind(v.cursor,"mousemove",v.onmousemove),v.cursorh&&v.bind(v.cursorh,"mousedown",function(e){v.onmousedown(e,!0)}),v.cursorh&&v.bind(v.cursorh,"mousemove",v.onmousemove))):(v.bind(x.hasmousecapture?v.win:document,"mouseup",v.onmouseup),v.bind(document,"mousemove",v.onmousemove),v.onclick&&v.bind(document,"click",v.onclick),!v.ispage&&v.opt.enablescrollonselection&&(v.bind(v.win[0],"mousedown",v.onselectionstart),v.bind(document,"mouseup",v.onselectionend),v.bind(v.cursor,"mouseup",v.onselectionend),v.cursorh&&v.bind(v.cursorh,"mouseup",v.onselectionend),v.bind(document,"mousemove",v.onselectiondrag)),v.zoom&&(v.jqbind(v.zoom,"mouseenter",function(){v.canshowonmouseevent&&v.showCursor(),v.rail.active=!0}),v.jqbind(v.zoom,"mouseleave",function(){v.rail.active=!1,v.rail.drag||v.hideCursor()}))),v.opt.enablemousewheel&&(v.isiframe||v.bind(x.isie&&v.ispage?document:v.win,"mousewheel",v.onmousewheel),v.bind(v.rail,"mousewheel",v.onmousewheel),v.railh&&v.bind(v.railh,"mousewheel",v.onmousewheelhr)),v.ispage||x.cantouch||/HTML|^BODY/.test(v.win[0].nodeName)||(v.win.attr("tabindex")||v.win.attr({tabindex:n++}),v.jqbind(v.win,"focus",function(e){r=v.getTarget(e).id||!0,v.hasfocus=!0,v.canshowonmouseevent&&v.noticeCursor()}),v.jqbind(v.win,"blur",function(){r=!1,v.hasfocus=!1}),v.jqbind(v.win,"mouseenter",function(e){i=v.getTarget(e).id||!0,v.hasmousefocus=!0,v.canshowonmouseevent&&v.noticeCursor()}),v.jqbind(v.win,"mouseleave",function(){i=!1,v.hasmousefocus=!1,v.rail.drag||v.hideCursor()}))}if(v.onkeypress=function(e){if(v.locked&&0==v.page.maxh)return!0
e=e?e:window.e
var o=v.getTarget(e)
if(o&&/INPUT|TEXTAREA|SELECT|OPTION/.test(o.nodeName)){var t=o.getAttribute("type")||o.type||!1
if(!t||!/submit|button|cancel/i.tp)return!0}if(a(o).attr("contenteditable"))return!0
if(v.hasfocus||v.hasmousefocus&&!r||v.ispage&&!r&&!i){var n=e.keyCode
if(v.locked&&27!=n)return v.cancelEvent(e)
var s=e.ctrlKey||!1,l=e.shiftKey||!1,c=!1
switch(n){case 38:case 63233:v.doScrollBy(72),c=!0
break
case 40:case 63235:v.doScrollBy(-72),c=!0
break
case 37:case 63232:v.railh&&(s?v.doScrollLeft(0):v.doScrollLeftBy(72),c=!0)
break
case 39:case 63234:v.railh&&(s?v.doScrollLeft(v.page.maxw):v.doScrollLeftBy(-72),c=!0)
break
case 33:case 63276:v.doScrollBy(v.view.h),c=!0
break
case 34:case 63277:v.doScrollBy(-v.view.h),c=!0
break
case 36:case 63273:v.railh&&s?v.doScrollPos(0,0):v.doScrollTo(0),c=!0
break
case 35:case 63275:v.railh&&s?v.doScrollPos(v.page.maxw,v.page.maxh):v.doScrollTo(v.page.maxh),c=!0
break
case 32:v.opt.spacebarenabled&&(v.doScrollBy(l?v.view.h:-v.view.h),c=!0)
break
case 27:v.zoomactive&&(v.doZoom(),c=!0)}if(c)return v.cancelEvent(e)}},v.opt.enablekeyboard&&v.bind(document,x.isopera&&!x.isopera12?"keypress":"keydown",v.onkeypress),v.bind(document,"keydown",function(e){var o=e.ctrlKey||!1
o&&(v.wheelprevented=!0)}),v.bind(document,"keyup",function(e){var o=e.ctrlKey||!1
o||(v.wheelprevented=!1)}),v.bind(window,"resize",v.lazyResize),v.bind(window,"orientationchange",v.lazyResize),v.bind(window,"load",v.lazyResize),x.ischrome&&!v.ispage&&!v.haswrapper){var M=v.win.attr("style"),E=parseFloat(v.win.css("width"))+1
v.win.css("width",E),v.synched("chromefix",function(){v.win.attr("style",M)})}v.onAttributeChange=function(){v.lazyResize(250)},v.ispage||v.haswrapper||(m!==!1?(v.observer=new m(function(e){e.forEach(v.onAttributeChange)}),v.observer.observe(v.win[0],{childList:!0,characterData:!1,attributes:!0,subtree:!1}),v.observerremover=new m(function(e){e.forEach(function(e){if(e.removedNodes.length>0)for(var o in e.removedNodes)if(e.removedNodes[o]==v.win[0])return v.remove()})}),v.observerremover.observe(v.win[0].parentNode,{childList:!0,characterData:!1,attributes:!1,subtree:!1})):(v.bind(v.win,x.isie&&!x.isie9?"propertychange":"DOMAttrModified",v.onAttributeChange),x.isie9&&v.win[0].attachEvent("onpropertychange",v.onAttributeChange),v.bind(v.win,"DOMNodeRemoved",function(e){e.target==v.win[0]&&v.remove()}))),!v.ispage&&v.opt.boxzoom&&v.bind(window,"resize",v.resizeZoom),v.istextarea&&v.bind(v.win,"mouseup",v.lazyResize),v.lazyResize(30)}"IFRAME"==this.doc[0].nodeName&&(this.doc[0].readyState&&"complete"==this.doc[0].readyState&&setTimeout(function(){o.call(v.doc[0],!1)},500),v.bind(this.doc,"load",o))},this.showCursor=function(e,o){v.cursortimeout&&(clearTimeout(v.cursortimeout),v.cursortimeout=0),v.rail&&(v.autohidedom&&(v.autohidedom.stop().css({opacity:v.opt.cursoropacitymax}),v.cursoractive=!0),v.rail.drag&&1==v.rail.drag.pt||(void 0!==e&&e!==!1&&(v.scroll.y=Math.round(1*e/v.scrollratio.y)),void 0!==o&&(v.scroll.x=Math.round(1*o/v.scrollratio.x))),v.cursor.css({height:v.cursorheight,top:v.scroll.y}),v.cursorh&&(v.cursorh.css(!v.rail.align&&v.rail.visibility?{width:v.cursorwidth,left:v.scroll.x+v.rail.width}:{width:v.cursorwidth,left:v.scroll.x}),v.cursoractive=!0),v.zoom&&v.zoom.stop().css({opacity:v.opt.cursoropacitymax}))},this.hideCursor=function(e){v.cursortimeout||v.rail&&v.autohidedom&&(v.hasmousefocus&&"leave"==v.opt.autohidemode||(v.cursortimeout=setTimeout(function(){v.rail.active&&v.showonmouseevent||(v.autohidedom.stop().animate({opacity:v.opt.cursoropacitymin}),v.zoom&&v.zoom.stop().animate({opacity:v.opt.cursoropacitymin}),v.cursoractive=!1),v.cursortimeout=0},e||v.opt.hidecursordelay)))},this.noticeCursor=function(e,o,t){v.showCursor(o,t),v.rail.active||v.hideCursor(e)},this.getContentSize=v.ispage?function(){return{w:Math.max(document.body.scrollWidth,document.documentElement.scrollWidth),h:Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}}:v.haswrapper?function(){return{w:v.doc.outerWidth()+parseInt(v.win.css("paddingLeft"))+parseInt(v.win.css("paddingRight")),h:v.doc.outerHeight()+parseInt(v.win.css("paddingTop"))+parseInt(v.win.css("paddingBottom"))}}:function(){return{w:v.docscroll[0].scrollWidth,h:v.docscroll[0].scrollHeight}},this.onResize=function(e,o){if(!v||!v.win)return!1
if(!v.haswrapper&&!v.ispage){if("none"==v.win.css("display"))return v.visibility&&v.hideRail().hideRailHr(),!1
v.hidden||v.visibility||v.showRail().showRailHr()}var t=v.page.maxh,r=v.page.maxw,i={h:v.view.h,w:v.view.w}
if(v.view={w:v.ispage?v.win.width():parseInt(v.win[0].clientWidth),h:v.ispage?v.win.height():parseInt(v.win[0].clientHeight)},v.page=o?o:v.getContentSize(),v.page.maxh=Math.max(0,v.page.h-v.view.h),v.page.maxw=Math.max(0,v.page.w-v.view.w),v.page.maxh==t&&v.page.maxw==r&&v.view.w==i.w){if(v.ispage)return v
var n=v.win.offset()
if(v.lastposition){var s=v.lastposition
if(s.top==n.top&&s.left==n.left)return v}v.lastposition=n}if(0==v.page.maxh?(v.hideRail(),v.scrollvaluemax=0,v.scroll.y=0,v.scrollratio.y=0,v.cursorheight=0,v.setScrollTop(0),v.rail.scrollable=!1):v.rail.scrollable=!0,0==v.page.maxw?(v.hideRailHr(),v.scrollvaluemaxw=0,v.scroll.x=0,v.scrollratio.x=0,v.cursorwidth=0,v.setScrollLeft(0),v.railh.scrollable=!1):v.railh.scrollable=!0,v.locked=0==v.page.maxh&&0==v.page.maxw,v.locked)return v.ispage||v.updateScrollBar(v.view),!1
v.hidden||v.visibility?v.hidden||v.railh.visibility||v.showRailHr():v.showRail().showRailHr(),v.istextarea&&v.win.css("resize")&&"none"!=v.win.css("resize")&&(v.view.h-=20),v.cursorheight=Math.min(v.view.h,Math.round(v.view.h*(v.view.h/v.page.h))),v.cursorheight=v.opt.cursorfixedheight?v.opt.cursorfixedheight:Math.max(v.opt.cursorminheight,v.cursorheight),v.cursorwidth=Math.min(v.view.w,Math.round(v.view.w*(v.view.w/v.page.w))),v.cursorwidth=v.opt.cursorfixedheight?v.opt.cursorfixedheight:Math.max(v.opt.cursorminheight,v.cursorwidth),v.scrollvaluemax=v.view.h-v.cursorheight-v.cursor.hborder,v.railh&&(v.railh.width=v.page.maxh>0?v.view.w-v.rail.width:v.view.w,v.scrollvaluemaxw=v.railh.width-v.cursorwidth-v.cursorh.wborder),v.ispage||v.updateScrollBar(v.view),v.scrollratio={x:v.page.maxw/v.scrollvaluemaxw,y:v.page.maxh/v.scrollvaluemax}
var l=v.getScrollTop()
return l>v.page.maxh?v.doScrollTop(v.page.maxh):(v.scroll.y=Math.round(v.getScrollTop()*(1/v.scrollratio.y)),v.scroll.x=Math.round(v.getScrollLeft()*(1/v.scrollratio.x)),v.cursoractive&&v.noticeCursor()),v.scroll.y&&0==v.getScrollTop()&&v.doScrollTo(Math.floor(v.scroll.y*v.scrollratio.y)),v},this.resize=v.onResize,this.lazyResize=function(e){return e=isNaN(e)?30:e,v.delayed("resize",v.resize,e),v},this._bind=function(e,o,t,r){v.events.push({e:e,n:o,f:t,b:r,q:!1}),e.addEventListener?e.addEventListener(o,t,r||!1):e.attachEvent?e.attachEvent("on"+o,t):e["on"+o]=t},this.jqbind=function(e,o,t){v.events.push({e:e,n:o,f:t,q:!0}),a(e).bind(o,t)},this.bind=function(e,o,t,r){var i="jquery"in e?e[0]:e
if("mousewheel"==o)if("onwheel"in document||document.documentMode>=9)v._bind(i,"wheel",t,r||!1)
else{var n=void 0!==document.onmousewheel?"mousewheel":"DOMMouseScroll"
p(i,n,t,r||!1),"DOMMouseScroll"==n&&p(i,"MozMousePixelScroll",t,r||!1)}else if(i.addEventListener){if(x.cantouch&&/mouseup|mousedown|mousemove/.test(o)){var s="mousedown"==o?"touchstart":"mouseup"==o?"touchend":"touchmove"
v._bind(i,s,function(e){if(e.touches){if(e.touches.length<2){var o=e.touches.length?e.touches[0]:e
o.original=e,t.call(this,o)}}else if(e.changedTouches){var o=e.changedTouches[0]
o.original=e,t.call(this,o)}},r||!1)}v._bind(i,o,t,r||!1),x.cantouch&&"mouseup"==o&&v._bind(i,"touchcancel",t,r||!1)}else v._bind(i,o,function(e){return e=e||window.event||!1,e&&e.srcElement&&(e.target=e.srcElement),"pageY"in e||(e.pageX=e.clientX+document.documentElement.scrollLeft,e.pageY=e.clientY+document.documentElement.scrollTop),t.call(i,e)===!1||r===!1?v.cancelEvent(e):!0})},this._unbind=function(e,o,t,r){e.removeEventListener?e.removeEventListener(o,t,r):e.detachEvent?e.detachEvent("on"+o,t):e["on"+o]=!1},this.unbindAll=function(){for(var e=0;e<v.events.length;e++){var o=v.events[e]
o.q?o.e.unbind(o.n,o.f):v._unbind(o.e,o.n,o.f,o.b)}},this.cancelEvent=function(e){var e=e.original?e.original:e?e:window.event||!1
return e?(e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),e.preventManipulation&&e.preventManipulation(),e.cancelBubble=!0,e.cancel=!0,e.returnValue=!1,!1):!1},this.stopPropagation=function(e){var e=e.original?e.original:e?e:window.event||!1
return e?e.stopPropagation?e.stopPropagation():(e.cancelBubble&&(e.cancelBubble=!0),!1):!1},this.showRail=function(){return 0==v.page.maxh||!v.ispage&&"none"==v.win.css("display")||(v.visibility=!0,v.rail.visibility=!0,v.rail.css("display","block")),v},this.showRailHr=function(){return v.railh?(0==v.page.maxw||!v.ispage&&"none"==v.win.css("display")||(v.railh.visibility=!0,v.railh.css("display","block")),v):v},this.hideRail=function(){return v.visibility=!1,v.rail.visibility=!1,v.rail.css("display","none"),v},this.hideRailHr=function(){return v.railh?(v.railh.visibility=!1,v.railh.css("display","none"),v):v},this.show=function(){return v.hidden=!1,v.locked=!1,v.showRail().showRailHr()},this.hide=function(){return v.hidden=!0,v.locked=!0,v.hideRail().hideRailHr()},this.toggle=function(){return v.hidden?v.show():v.hide()},this.remove=function(){v.stop(),v.cursortimeout&&clearTimeout(v.cursortimeout),v.doZoomOut(),v.unbindAll(),x.isie9&&v.win[0].detachEvent("onpropertychange",v.onAttributeChange),v.observer!==!1&&v.observer.disconnect(),v.observerremover!==!1&&v.observerremover.disconnect(),v.events=null,v.cursor&&v.cursor.remove(),v.cursorh&&v.cursorh.remove(),v.rail&&v.rail.remove(),v.railh&&v.railh.remove(),v.zoom&&v.zoom.remove()
for(var e=0;e<v.saved.css.length;e++){var o=v.saved.css[e]
o[0].css(o[1],void 0===o[2]?"":o[2])}v.saved=!1,v.me.data("__nicescroll","")
var t=a.nicescroll
t.each(function(e){if(this&&this.id===v.id){delete t[e]
for(var o=++e;o<t.length;o++,e++)t[e]=t[o]
t.length--,t.length&&delete t[t.length]}})
for(var r in v)v[r]=null,delete v[r]
v=null},this.scrollstart=function(e){return this.onscrollstart=e,v},this.scrollend=function(e){return this.onscrollend=e,v},this.scrollcancel=function(e){return this.onscrollcancel=e,v},this.zoomin=function(e){return this.onzoomin=e,v},this.zoomout=function(e){return this.onzoomout=e,v},this.isScrollable=function(e){var o=e.target?e.target:e
if("OPTION"==o.nodeName)return!0
for(;o&&1==o.nodeType&&!/^BODY|HTML/.test(o.nodeName);){var t=a(o),r=t.css("overflowY")||t.css("overflowX")||t.css("overflow")||""
if(/scroll|auto/.test(r))return o.clientHeight!=o.scrollHeight
o=o.parentNode?o.parentNode:!1}return!1},this.getViewport=function(e){for(var o=e&&e.parentNode?e.parentNode:!1;o&&1==o.nodeType&&!/^BODY|HTML/.test(o.nodeName);){var t=a(o)
if(/fixed|absolute/.test(t.css("position")))return t
var r=t.css("overflowY")||t.css("overflowX")||t.css("overflow")||""
if(/scroll|auto/.test(r)&&o.clientHeight!=o.scrollHeight)return t
if(t.getNiceScroll().length>0)return t
o=o.parentNode?o.parentNode:!1}return o?a(o):!1},this.triggerScrollEnd=function(){if(v.onscrollend){var e=v.getScrollLeft(),o=v.getScrollTop(),t={type:"scrollend",current:{x:e,y:o},end:{x:e,y:o}}
v.onscrollend.call(v,t)}},this.onmousewheel=function(e){if(!v.wheelprevented){if(v.locked)return v.debounced("checkunlock",v.resize,250),!0
if(v.rail.drag)return v.cancelEvent(e)
if("auto"==v.opt.oneaxismousemode&&0!=e.deltaX&&(v.opt.oneaxismousemode=!1),v.opt.oneaxismousemode&&0==e.deltaX&&!v.rail.scrollable)return v.railh&&v.railh.scrollable?v.onmousewheelhr(e):!0
var o=+new Date,t=!1
if(v.opt.preservenativescrolling&&v.checkarea+600<o&&(v.nativescrollingarea=v.isScrollable(e),t=!0),v.checkarea=o,v.nativescrollingarea)return!0
var r=g(e,!1,t)
return r&&(v.checkarea=0),r}},this.onmousewheelhr=function(e){if(!v.wheelprevented){if(v.locked||!v.railh.scrollable)return!0
if(v.rail.drag)return v.cancelEvent(e)
var o=+new Date,t=!1
return v.opt.preservenativescrolling&&v.checkarea+600<o&&(v.nativescrollingarea=v.isScrollable(e),t=!0),v.checkarea=o,v.nativescrollingarea?!0:v.locked?v.cancelEvent(e):g(e,!0,t)}},this.stop=function(){return v.cancelScroll(),v.scrollmon&&v.scrollmon.stop(),v.cursorfreezed=!1,v.scroll.y=Math.round(v.getScrollTop()*(1/v.scrollratio.y)),v.noticeCursor(),v},this.getTransitionSpeed=function(e){var o=Math.round(10*v.opt.scrollspeed),t=Math.min(o,Math.round(e/20*v.opt.scrollspeed))
return t>20?t:0},v.opt.smoothscroll?v.ishwscroll&&x.hastransition&&v.opt.usetransition?(this.prepareTransition=function(e,o){var t=o?e>20?e:0:v.getTransitionSpeed(e),r=t?x.prefixstyle+"transform "+t+"ms ease-out":""
return v.lasttransitionstyle&&v.lasttransitionstyle==r||(v.lasttransitionstyle=r,v.doc.css(x.transitionstyle,r)),t},this.doScrollLeft=function(e,o){var t=v.scrollrunning?v.newscrolly:v.getScrollTop()
v.doScrollPos(e,t,o)},this.doScrollTop=function(e,o){var t=v.scrollrunning?v.newscrollx:v.getScrollLeft()
v.doScrollPos(t,e,o)},this.doScrollPos=function(e,o,t){var r=v.getScrollTop(),i=v.getScrollLeft()
return((v.newscrolly-r)*(o-r)<0||(v.newscrollx-i)*(e-i)<0)&&v.cancelScroll(),0==v.opt.bouncescroll&&(0>o?o=0:o>v.page.maxh&&(o=v.page.maxh),0>e?e=0:e>v.page.maxw&&(e=v.page.maxw)),v.scrollrunning&&e==v.newscrollx&&o==v.newscrolly?!1:(v.newscrolly=o,v.newscrollx=e,v.newscrollspeed=t||!1,v.timer?!1:void(v.timer=setTimeout(function(){var t=v.getScrollTop(),r=v.getScrollLeft(),i={}
i.x=e-r,i.y=o-t,i.px=r,i.py=t
var n=Math.round(Math.sqrt(Math.pow(i.x,2)+Math.pow(i.y,2))),s=v.newscrollspeed&&v.newscrollspeed>1?v.newscrollspeed:v.getTransitionSpeed(n)
if(v.newscrollspeed&&v.newscrollspeed<=1&&(s*=v.newscrollspeed),v.prepareTransition(s,!0),v.timerscroll&&v.timerscroll.tm&&clearInterval(v.timerscroll.tm),s>0){if(!v.scrollrunning&&v.onscrollstart){var l={type:"scrollstart",current:{x:r,y:t},request:{x:e,y:o},end:{x:v.newscrollx,y:v.newscrolly},speed:s}
v.onscrollstart.call(v,l)}x.transitionend?v.scrollendtrapped||(v.scrollendtrapped=!0,v.bind(v.doc,x.transitionend,v.onScrollTransitionEnd,!1)):(v.scrollendtrapped&&clearTimeout(v.scrollendtrapped),v.scrollendtrapped=setTimeout(v.onScrollTransitionEnd,s))
var a=t,c=r
v.timerscroll={bz:new BezierClass(a,v.newscrolly,s,0,0,.58,1),bh:new BezierClass(c,v.newscrollx,s,0,0,.58,1)},v.cursorfreezed||(v.timerscroll.tm=setInterval(function(){v.showCursor(v.getScrollTop(),v.getScrollLeft())},60))}v.synched("doScroll-set",function(){v.timer=0,v.scrollendtrapped&&(v.scrollrunning=!0),v.setScrollTop(v.newscrolly),v.setScrollLeft(v.newscrollx),v.scrollendtrapped||v.onScrollTransitionEnd()})},50)))},this.cancelScroll=function(){if(!v.scrollendtrapped)return!0
var e=v.getScrollTop(),o=v.getScrollLeft()
return v.scrollrunning=!1,x.transitionend||clearTimeout(x.transitionend),v.scrollendtrapped=!1,v._unbind(v.doc,x.transitionend,v.onScrollTransitionEnd),v.prepareTransition(0),v.setScrollTop(e),v.railh&&v.setScrollLeft(o),v.timerscroll&&v.timerscroll.tm&&clearInterval(v.timerscroll.tm),v.timerscroll=!1,v.cursorfreezed=!1,v.showCursor(e,o),v},this.onScrollTransitionEnd=function(){v.scrollendtrapped&&v._unbind(v.doc,x.transitionend,v.onScrollTransitionEnd),v.scrollendtrapped=!1,v.prepareTransition(0),v.timerscroll&&v.timerscroll.tm&&clearInterval(v.timerscroll.tm),v.timerscroll=!1
var e=v.getScrollTop(),o=v.getScrollLeft()
return v.setScrollTop(e),v.railh&&v.setScrollLeft(o),v.noticeCursor(!1,e,o),v.cursorfreezed=!1,0>e?e=0:e>v.page.maxh&&(e=v.page.maxh),0>o?o=0:o>v.page.maxw&&(o=v.page.maxw),e!=v.newscrolly||o!=v.newscrollx?v.doScrollPos(o,e,v.opt.snapbackspeed):(v.onscrollend&&v.scrollrunning&&v.triggerScrollEnd(),void(v.scrollrunning=!1))}):(this.doScrollLeft=function(e,o){var t=v.scrollrunning?v.newscrolly:v.getScrollTop()
v.doScrollPos(e,t,o)},this.doScrollTop=function(e,o){var t=v.scrollrunning?v.newscrollx:v.getScrollLeft()
v.doScrollPos(t,e,o)},this.doScrollPos=function(e,o,t){function r(){if(v.cancelAnimationFrame)return!0
if(v.scrollrunning=!0,h=1-h)return v.timer=d(r)||1
var e=0,o=sy=v.getScrollTop()
if(v.dst.ay){o=v.bzscroll?v.dst.py+v.bzscroll.getNow()*v.dst.ay:v.newscrolly
var t=o-sy;(0>t&&o<v.newscrolly||t>0&&o>v.newscrolly)&&(o=v.newscrolly),v.setScrollTop(o),o==v.newscrolly&&(e=1)}else e=1
var i=sx=v.getScrollLeft()
if(v.dst.ax){i=v.bzscroll?v.dst.px+v.bzscroll.getNow()*v.dst.ax:v.newscrollx
var t=i-sx;(0>t&&i<v.newscrollx||t>0&&i>v.newscrollx)&&(i=v.newscrollx),v.setScrollLeft(i),i==v.newscrollx&&(e+=1)}else e+=1
2==e?(v.timer=0,v.cursorfreezed=!1,v.bzscroll=!1,v.scrollrunning=!1,0>o?o=0:o>v.page.maxh&&(o=v.page.maxh),0>i?i=0:i>v.page.maxw&&(i=v.page.maxw),i!=v.newscrollx||o!=v.newscrolly?v.doScrollPos(i,o):v.onscrollend&&v.triggerScrollEnd()):v.timer=d(r)||1}var o=void 0===o||o===!1?v.getScrollTop(!0):o
if(v.timer&&v.newscrolly==o&&v.newscrollx==e)return!0
v.timer&&u(v.timer),v.timer=0
var i=v.getScrollTop(),n=v.getScrollLeft();((v.newscrolly-i)*(o-i)<0||(v.newscrollx-n)*(e-n)<0)&&v.cancelScroll(),v.newscrolly=o,v.newscrollx=e,v.bouncescroll&&v.rail.visibility||(v.newscrolly<0?v.newscrolly=0:v.newscrolly>v.page.maxh&&(v.newscrolly=v.page.maxh)),v.bouncescroll&&v.railh.visibility||(v.newscrollx<0?v.newscrollx=0:v.newscrollx>v.page.maxw&&(v.newscrollx=v.page.maxw)),v.dst={},v.dst.x=e-n,v.dst.y=o-i,v.dst.px=n,v.dst.py=i
var s=Math.round(Math.sqrt(Math.pow(v.dst.x,2)+Math.pow(v.dst.y,2)))
v.dst.ax=v.dst.x/s,v.dst.ay=v.dst.y/s
var l=0,a=s
0==v.dst.x?(l=i,a=o,v.dst.ay=1,v.dst.py=0):0==v.dst.y&&(l=n,a=e,v.dst.ax=1,v.dst.px=0)
var c=v.getTransitionSpeed(s)
if(t&&1>=t&&(c*=t),v.bzscroll=c>0?v.bzscroll?v.bzscroll.update(a,c):new BezierClass(l,a,c,0,1,0,1):!1,!v.timer){(i==v.page.maxh&&o>=v.page.maxh||n==v.page.maxw&&e>=v.page.maxw)&&v.checkContentSize()
var h=1
if(v.cancelAnimationFrame=!1,v.timer=1,v.onscrollstart&&!v.scrollrunning){var p={type:"scrollstart",current:{x:n,y:i},request:{x:e,y:o},end:{x:v.newscrollx,y:v.newscrolly},speed:c}
v.onscrollstart.call(v,p)}r(),(i==v.page.maxh&&o>=i||n==v.page.maxw&&e>=n)&&v.checkContentSize(),v.noticeCursor()}},this.cancelScroll=function(){return v.timer&&u(v.timer),v.timer=0,v.bzscroll=!1,v.scrollrunning=!1,v}):(this.doScrollLeft=function(e,o){var t=v.getScrollTop()
v.doScrollPos(e,t,o)},this.doScrollTop=function(e,o){var t=v.getScrollLeft()
v.doScrollPos(t,e,o)},this.doScrollPos=function(e,o){var t=e>v.page.maxw?v.page.maxw:e
0>t&&(t=0)
var r=o>v.page.maxh?v.page.maxh:o
0>r&&(r=0),v.synched("scroll",function(){v.setScrollTop(r),v.setScrollLeft(t)})},this.cancelScroll=function(){}),this.doScrollBy=function(e,o){var t=0
if(o)t=Math.floor((v.scroll.y-e)*v.scrollratio.y)
else{var r=v.timer?v.newscrolly:v.getScrollTop(!0)
t=r-e}if(v.bouncescroll){var i=Math.round(v.view.h/2);-i>t?t=-i:t>v.page.maxh+i&&(t=v.page.maxh+i)}return v.cursorfreezed=!1,py=v.getScrollTop(!0),0>t&&0>=py?v.noticeCursor():t>v.page.maxh&&py>=v.page.maxh?(v.checkContentSize(),v.noticeCursor()):void v.doScrollTop(t)},this.doScrollLeftBy=function(e,o){var t=0
if(o)t=Math.floor((v.scroll.x-e)*v.scrollratio.x)
else{var r=v.timer?v.newscrollx:v.getScrollLeft(!0)
t=r-e}if(v.bouncescroll){var i=Math.round(v.view.w/2);-i>t?t=-i:t>v.page.maxw+i&&(t=v.page.maxw+i)}return v.cursorfreezed=!1,px=v.getScrollLeft(!0),0>t&&0>=px?v.noticeCursor():t>v.page.maxw&&px>=v.page.maxw?v.noticeCursor():void v.doScrollLeft(t)},this.doScrollTo=function(e,o){var t=o?Math.round(e*v.scrollratio.y):e
0>t?t=0:t>v.page.maxh&&(t=v.page.maxh),v.cursorfreezed=!1,v.doScrollTop(e)},this.checkContentSize=function(){var e=v.getContentSize();(e.h!=v.page.h||e.w!=v.page.w)&&v.resize(!1,e)},v.onscroll=function(){v.rail.drag||v.cursorfreezed||v.synched("scroll",function(){v.scroll.y=Math.round(v.getScrollTop()*(1/v.scrollratio.y)),v.railh&&(v.scroll.x=Math.round(v.getScrollLeft()*(1/v.scrollratio.x))),v.noticeCursor()})},v.bind(v.docscroll,"scroll",v.onscroll),this.doZoomIn=function(e){if(!v.zoomactive){v.zoomactive=!0,v.zoomrestore={style:{}}
var o=["position","top","left","zIndex","backgroundColor","marginTop","marginBottom","marginLeft","marginRight"],t=v.win[0].style
for(var r in o){var i=o[r]
v.zoomrestore.style[i]=void 0!==t[i]?t[i]:""}v.zoomrestore.style.width=v.win.css("width"),v.zoomrestore.style.height=v.win.css("height"),v.zoomrestore.padding={w:v.win.outerWidth()-v.win.width(),h:v.win.outerHeight()-v.win.height()},x.isios4&&(v.zoomrestore.scrollTop=a(window).scrollTop(),a(window).scrollTop(0)),v.win.css({position:x.isios4?"absolute":"fixed",top:0,left:0,"z-index":l+100,margin:"0px"})
var n=v.win.css("backgroundColor")
return(""==n||/transparent|rgba\(0, 0, 0, 0\)|rgba\(0,0,0,0\)/.test(n))&&v.win.css("backgroundColor","#fff"),v.rail.css({"z-index":l+101}),v.zoom.css({"z-index":l+102}),v.zoom.css("backgroundPosition","0px -18px"),v.resizeZoom(),v.onzoomin&&v.onzoomin.call(v),v.cancelEvent(e)}},this.doZoomOut=function(e){return v.zoomactive?(v.zoomactive=!1,v.win.css("margin",""),v.win.css(v.zoomrestore.style),x.isios4&&a(window).scrollTop(v.zoomrestore.scrollTop),v.rail.css({"z-index":v.zindex}),v.zoom.css({"z-index":v.zindex}),v.zoomrestore=!1,v.zoom.css("backgroundPosition","0px 0px"),v.onResize(),v.onzoomout&&v.onzoomout.call(v),v.cancelEvent(e)):void 0},this.doZoom=function(e){return v.zoomactive?v.doZoomOut(e):v.doZoomIn(e)},this.resizeZoom=function(){if(v.zoomactive){var e=v.getScrollTop()
v.win.css({width:a(window).width()-v.zoomrestore.padding.w+"px",height:a(window).height()-v.zoomrestore.padding.h+"px"}),v.onResize(),v.setScrollTop(Math.min(v.page.maxh,e))}},this.init(),a.nicescroll.push(this)},b=function(e){var o=this
this.nc=e,this.lastx=0,this.lasty=0,this.speedx=0,this.speedy=0,this.lasttime=0,this.steptime=0,this.snapx=!1,this.snapy=!1,this.demulx=0,this.demuly=0,this.lastscrollx=-1,this.lastscrolly=-1,this.chkx=0,this.chky=0,this.timer=0,this.time=function(){return+new Date},this.reset=function(e,t){o.stop()
var r=o.time()
o.steptime=0,o.lasttime=r,o.speedx=0,o.speedy=0,o.lastx=e,o.lasty=t,o.lastscrollx=-1,o.lastscrolly=-1},this.update=function(e,t){var r=o.time()
o.steptime=r-o.lasttime,o.lasttime=r
var i=t-o.lasty,n=e-o.lastx,s=o.nc.getScrollTop(),l=o.nc.getScrollLeft(),a=s+i,c=l+n
o.snapx=0>c||c>o.nc.page.maxw,o.snapy=0>a||a>o.nc.page.maxh,o.speedx=n,o.speedy=i,o.lastx=e,o.lasty=t},this.stop=function(){o.nc.unsynched("domomentum2d"),o.timer&&clearTimeout(o.timer),o.timer=0,o.lastscrollx=-1,o.lastscrolly=-1},this.doSnapy=function(e,t){var r=!1
0>t?(t=0,r=!0):t>o.nc.page.maxh&&(t=o.nc.page.maxh,r=!0),0>e?(e=0,r=!0):e>o.nc.page.maxw&&(e=o.nc.page.maxw,r=!0),r?o.nc.doScrollPos(e,t,o.nc.opt.snapbackspeed):o.nc.triggerScrollEnd()},this.doMomentum=function(e){var t=o.time(),r=e?t+e:o.lasttime,i=o.nc.getScrollLeft(),n=o.nc.getScrollTop(),s=o.nc.page.maxh,l=o.nc.page.maxw
o.speedx=l>0?Math.min(60,o.speedx):0,o.speedy=s>0?Math.min(60,o.speedy):0
var a=r&&60>=t-r;(0>n||n>s||0>i||i>l)&&(a=!1)
var c=o.speedy&&a?o.speedy:!1,d=o.speedx&&a?o.speedx:!1
if(c||d){var u=Math.max(16,o.steptime)
if(u>50){var h=u/50
o.speedx*=h,o.speedy*=h,u=50}o.demulxy=0,o.lastscrollx=o.nc.getScrollLeft(),o.chkx=o.lastscrollx,o.lastscrolly=o.nc.getScrollTop(),o.chky=o.lastscrolly
var p=o.lastscrollx,m=o.lastscrolly,f=function(){var e=o.time()-t>600?.04:.02
o.speedx&&(p=Math.floor(o.lastscrollx-o.speedx*(1-o.demulxy)),o.lastscrollx=p,(0>p||p>l)&&(e=.1)),o.speedy&&(m=Math.floor(o.lastscrolly-o.speedy*(1-o.demulxy)),o.lastscrolly=m,(0>m||m>s)&&(e=.1)),o.demulxy=Math.min(1,o.demulxy+e),o.nc.synched("domomentum2d",function(){if(o.speedx){var e=o.nc.getScrollLeft()
e!=o.chkx&&o.stop(),o.chkx=p,o.nc.setScrollLeft(p)}if(o.speedy){var t=o.nc.getScrollTop()
t!=o.chky&&o.stop(),o.chky=m,o.nc.setScrollTop(m)}o.timer||(o.nc.hideCursor(),o.doSnapy(p,m))}),o.demulxy<1?o.timer=setTimeout(f,u):(o.stop(),o.nc.hideCursor(),o.doSnapy(p,m))}
f()}else o.doSnapy(o.nc.getScrollLeft(),o.nc.getScrollTop())}},y=e.fn.scrollTop
e.cssHooks.pageYOffset={get:function(e){var o=a.data(e,"__nicescroll")||!1
return o&&o.ishwscroll?o.getScrollTop():y.call(e)},set:function(e,o){var t=a.data(e,"__nicescroll")||!1
return t&&t.ishwscroll?t.setScrollTop(parseInt(o)):y.call(e,o),this}},e.fn.scrollTop=function(e){if(void 0===e){var o=this[0]?a.data(this[0],"__nicescroll")||!1:!1
return o&&o.ishwscroll?o.getScrollTop():y.call(this)}return this.each(function(){var o=a.data(this,"__nicescroll")||!1
o&&o.ishwscroll?o.setScrollTop(parseInt(e)):y.call(a(this),e)})}
var x=e.fn.scrollLeft
a.cssHooks.pageXOffset={get:function(e){var o=a.data(e,"__nicescroll")||!1
return o&&o.ishwscroll?o.getScrollLeft():x.call(e)},set:function(e,o){var t=a.data(e,"__nicescroll")||!1
return t&&t.ishwscroll?t.setScrollLeft(parseInt(o)):x.call(e,o),this}},e.fn.scrollLeft=function(e){if(void 0===e){var o=this[0]?a.data(this[0],"__nicescroll")||!1:!1
return o&&o.ishwscroll?o.getScrollLeft():x.call(this)}return this.each(function(){var o=a.data(this,"__nicescroll")||!1
o&&o.ishwscroll?o.setScrollLeft(parseInt(e)):x.call(a(this),e)})}
var S=function(e){var o=this
if(this.length=0,this.name="nicescrollarray",this.each=function(e){for(var t=0,r=0;t<o.length;t++)e.call(o[t],r++)
return o},this.push=function(e){o[o.length]=e,o.length++},this.eq=function(e){return o[e]},e)for(var t=0;t<e.length;t++){var r=a.data(e[t],"__nicescroll")||!1
r&&(this[this.length]=r,this.length++)}return this}
t(S.prototype,["show","hide","toggle","onResize","resize","remove","stop","doScrollPos"],function(e,o){e[o]=function(){var e=arguments
return this.each(function(){this[o].apply(this,e)})}}),e.fn.getNiceScroll=function(e){if(void 0===e)return new S(this)
var o=this[e]&&a.data(this[e],"__nicescroll")||!1
return o},e.extend(e.expr[":"],{nicescroll:function(e){return a.data(e,"__nicescroll")?!0:!1}}),a.fn.niceScroll=function(e,o){void 0===o&&("object"!=typeof e||"jquery"in e||(o=e,e=!1))
var t=new S
void 0===o&&(o={}),e&&(o.doc=a(e),o.win=a(this))
var r=!("doc"in o)
return r||"win"in o||(o.win=a(this)),this.each(function(){var e=a(this).data("__nicescroll")||!1
e||(o.doc=r?a(this):o.doc,e=new v(o,a(this)),a(this).data("__nicescroll",e)),t.push(e)}),1==t.length?t[0]:t},window.NiceScroll={getjQuery:function(){return e}},a.nicescroll||(a.nicescroll=new S,a.nicescroll.options=f)})
\ No newline at end of file
/*!
* Shuffle.js by @Vestride
* Categorize, sort, and filter a responsive grid of items.
* Dependencies: jQuery 1.9+, Modernizr 2.6.2+
* @license MIT license
* @version 3.0.0
*/
(function (factory) {
if (typeof define === 'function' && define.amd) {
define(['jquery', 'modernizr'], factory);
} else {
window.Shuffle = factory(window.jQuery, window.Modernizr);
}
})(function($, Modernizr, undefined) {
'use strict';
// Validate Modernizr exists.
// Shuffle requires `csstransitions`, `csstransforms`, `csstransforms3d`,
// and `prefixed` to exist on the Modernizr object.
if (typeof Modernizr !== 'object') {
throw new Error('Shuffle.js requires Modernizr.\n' +
'http://vestride.github.io/Shuffle/#dependencies');
}
/**
* Returns css prefixed properties like `-webkit-transition` or `box-sizing`
* from `transition` or `boxSizing`, respectively.
* @param {(string|boolean)} prop Property to be prefixed.
* @return {string} The prefixed css property.
*/
function dashify( prop ) {
if (!prop) {
return '';
}
// Replace upper case with dash-lowercase,
// then fix ms- prefixes because they're not capitalized.
return prop.replace(/([A-Z])/g, function( str, m1 ) {
return '-' + m1.toLowerCase();
}).replace(/^ms-/,'-ms-');
}
// Constant, prefixed variables.
var TRANSITION = Modernizr.prefixed('transition');
var TRANSITION_DELAY = Modernizr.prefixed('transitionDelay');
var TRANSITION_DURATION = Modernizr.prefixed('transitionDuration');
// Note(glen): Stock Android 4.1.x browser will fail here because it wrongly
// says it supports non-prefixed transitions.
// https://github.com/Modernizr/Modernizr/issues/897
var TRANSITIONEND = {
'WebkitTransition' : 'webkitTransitionEnd',
'transition' : 'transitionend'
}[ TRANSITION ];
var TRANSFORM = Modernizr.prefixed('transform');
var CSS_TRANSFORM = dashify(TRANSFORM);
// Constants
var CAN_TRANSITION_TRANSFORMS = Modernizr.csstransforms && Modernizr.csstransitions;
var HAS_TRANSFORMS_3D = Modernizr.csstransforms3d;
var SHUFFLE = 'shuffle';
var COLUMN_THRESHOLD = 0.3;
// Configurable. You can change these constants to fit your application.
// The default scale and concealed scale, however, have to be different values.
var ALL_ITEMS = 'all';
var FILTER_ATTRIBUTE_KEY = 'groups';
var DEFAULT_SCALE = 1;
var CONCEALED_SCALE = 0.001;
// Underscore's throttle function.
function throttle(func, wait, options) {
var context, args, result;
var timeout = null;
var previous = 0;
options = options || {};
var later = function() {
previous = options.leading === false ? 0 : $.now();
timeout = null;
result = func.apply(context, args);
context = args = null;
};
return function() {
var now = $.now();
if (!previous && options.leading === false) {
previous = now;
}
var remaining = wait - (now - previous);
context = this;
args = arguments;
if (remaining <= 0 || remaining > wait) {
clearTimeout(timeout);
timeout = null;
previous = now;
result = func.apply(context, args);
context = args = null;
} else if (!timeout && options.trailing !== false) {
timeout = setTimeout(later, remaining);
}
return result;
};
}
function each(obj, iterator, context) {
for (var i = 0, length = obj.length; i < length; i++) {
if (iterator.call(context, obj[i], i, obj) === {}) {
return;
}
}
}
function defer(fn, context, wait) {
return setTimeout( $.proxy( fn, context ), wait );
}
function arrayMax( array ) {
return Math.max.apply( Math, array );
}
function arrayMin( array ) {
return Math.min.apply( Math, array );
}
/**
* Always returns a numeric value, given a value.
* @param {*} value Possibly numeric value.
* @return {number} `value` or zero if `value` isn't numeric.
* @private
*/
function getNumber(value) {
return $.isNumeric(value) ? value : 0;
}
/**
* Represents a coordinate pair.
* @param {number} [x=0] X.
* @param {number} [y=0] Y.
*/
var Point = function(x, y) {
this.x = getNumber( x );
this.y = getNumber( y );
};
/**
* Whether two points are equal.
* @param {Point} a Point A.
* @param {Point} b Point B.
* @return {boolean}
*/
Point.equals = function(a, b) {
return a.x === b.x && a.y === b.y;
};
// Used for unique instance variables
var id = 0;
var $window = $( window );
/**
* Categorize, sort, and filter a responsive grid of items.
*
* @param {Element} element An element which is the parent container for the grid items.
* @param {Object} [options=Shuffle.options] Options object.
* @constructor
*/
var Shuffle = function( element, options ) {
options = options || {};
$.extend( this, Shuffle.options, options, Shuffle.settings );
this.$el = $(element);
this.element = element;
this.unique = 'shuffle_' + id++;
this._fire( Shuffle.EventType.LOADING );
this._init();
// Dispatch the done event asynchronously so that people can bind to it after
// Shuffle has been initialized.
defer(function() {
this.initialized = true;
this._fire( Shuffle.EventType.DONE );
}, this, 16);
};
/**
* Events the container element emits with the .shuffle namespace.
* For example, "done.shuffle".
* @enum {string}
*/
Shuffle.EventType = {
LOADING: 'loading',
DONE: 'done',
LAYOUT: 'layout',
REMOVED: 'removed'
};
/** @enum {string} */
Shuffle.ClassName = {
BASE: SHUFFLE,
SHUFFLE_ITEM: 'shuffle-item',
FILTERED: 'filtered',
CONCEALED: 'concealed'
};
// Overrideable options
Shuffle.options = {
group: ALL_ITEMS, // Initial filter group.
speed: 250, // Transition/animation speed (milliseconds).
easing: 'ease-out', // CSS easing function to use.
itemSelector: '', // e.g. '.picture-item'.
sizer: null, // Sizer element. Use an element to determine the size of columns and gutters.
gutterWidth: 0, // A static number or function that tells the plugin how wide the gutters between columns are (in pixels).
columnWidth: 0, // A static number or function that returns a number which tells the plugin how wide the columns are (in pixels).
delimeter: null, // If your group is not json, and is comma delimeted, you could set delimeter to ','.
buffer: 0, // Useful for percentage based heights when they might not always be exactly the same (in pixels).
initialSort: null, // Shuffle can be initialized with a sort object. It is the same object given to the sort method.
throttle: throttle, // By default, shuffle will throttle resize events. This can be changed or removed.
throttleTime: 300, // How often shuffle can be called on resize (in milliseconds).
sequentialFadeDelay: 150, // Delay between each item that fades in when adding items.
supported: CAN_TRANSITION_TRANSFORMS // Whether to use transforms or absolute positioning.
};
// Not overrideable
Shuffle.settings = {
useSizer: false,
itemCss : { // default CSS for each item
position: 'absolute',
top: 0,
left: 0,
visibility: 'visible'
},
revealAppendedDelay: 300,
lastSort: {},
lastFilter: ALL_ITEMS,
enabled: true,
destroyed: false,
initialized: false,
_animations: [],
styleQueue: []
};
// Expose for testing.
Shuffle.Point = Point;
/**
* Static methods.
*/
/**
* If the browser has 3d transforms available, build a string with those,
* otherwise use 2d transforms.
* @param {Point} point X and Y positions.
* @param {number} scale Scale amount.
* @return {string} A normalized string which can be used with the transform style.
* @private
*/
Shuffle._getItemTransformString = function(point, scale) {
if ( HAS_TRANSFORMS_3D ) {
return 'translate3d(' + point.x + 'px, ' + point.y + 'px, 0) scale3d(' + scale + ', ' + scale + ', 1)';
} else {
return 'translate(' + point.x + 'px, ' + point.y + 'px) scale(' + scale + ')';
}
};
/**
* Retrieve the computed style for an element, parsed as a float. This should
* not be used for width or height values because jQuery mangles them and they
* are not precise enough.
* @param {Element} element Element to get style for.
* @param {string} style Style property.
* @return {number} The parsed computed value or zero if that fails because IE
* will return 'auto' when the element doesn't have margins instead of
* the computed style.
* @private
*/
Shuffle._getNumberStyle = function( element, style ) {
return Shuffle._getFloat( $( element ).css( style ) );
};
/**
* Parse a string as an integer.
* @param {string} value String integer.
* @return {number} The string as an integer or zero.
* @private
*/
Shuffle._getInt = function(value) {
return getNumber( parseInt( value, 10 ) );
};
/**
* Parse a string as an float.
* @param {string} value String float.
* @return {number} The string as an float or zero.
* @private
*/
Shuffle._getFloat = function(value) {
return getNumber( parseFloat( value ) );
};
/**
* Returns the outer width of an element, optionally including its margins.
* The `offsetWidth` property must be used because having a scale transform
* on the element affects the bounding box. Sadly, Firefox doesn't return an
* integer value for offsetWidth (yet).
* @param {Element} element The element.
* @param {boolean} [includeMargins] Whether to include margins. Default is false.
* @return {number} The width.
*/
Shuffle._getOuterWidth = function( element, includeMargins ) {
var width = element.offsetWidth;
// Use jQuery here because it uses getComputedStyle internally and is
// cross-browser. Using the style property of the element will only work
// if there are inline styles.
if ( includeMargins ) {
var marginLeft = Shuffle._getNumberStyle( element, 'marginLeft');
var marginRight = Shuffle._getNumberStyle( element, 'marginRight');
width += marginLeft + marginRight;
}
return width;
};
/**
* Returns the outer height of an element, optionally including its margins.
* @param {Element} element The element.
* @param {boolean} [includeMargins] Whether to include margins. Default is false.
* @return {number} The height.
*/
Shuffle._getOuterHeight = function( element, includeMargins ) {
var height = element.offsetHeight;
if ( includeMargins ) {
var marginTop = Shuffle._getNumberStyle( element, 'marginTop');
var marginBottom = Shuffle._getNumberStyle( element, 'marginBottom');
height += marginTop + marginBottom;
}
return height;
};
/**
* Change a property or execute a function which will not have a transition
* @param {Element} element DOM element that won't be transitioned
* @param {Function} callback A function which will be called while transition
* is set to 0ms.
* @param {Object} [context] Optional context for the callback function.
* @private
*/
Shuffle._skipTransition = function( element, callback, context ) {
var duration = element.style[ TRANSITION_DURATION ];
// Set the duration to zero so it happens immediately
element.style[ TRANSITION_DURATION ] = '0ms'; // ms needed for firefox!
callback.call( context );
// Force reflow
var reflow = element.offsetWidth;
// Avoid jshint warnings: unused variables and expressions.
reflow = null;
// Put the duration back
element.style[ TRANSITION_DURATION ] = duration;
};
/**
* Instance methods.
*/
Shuffle.prototype._init = function() {
this.$items = this._getItems();
this.sizer = this._getElementOption( this.sizer );
if ( this.sizer ) {
this.useSizer = true;
}
// Add class and invalidate styles
this.$el.addClass( Shuffle.ClassName.BASE );
// Set initial css for each item
this._initItems();
// Bind resize events
// http://stackoverflow.com/questions/1852751/window-resize-event-firing-in-internet-explorer
$window.on('resize.' + SHUFFLE + '.' + this.unique, this._getResizeFunction());
// Get container css all in one request. Causes reflow
var containerCSS = this.$el.css(['position', 'overflow']);
var containerWidth = Shuffle._getOuterWidth( this.element );
// Add styles to the container if it doesn't have them.
this._validateStyles( containerCSS );
// We already got the container's width above, no need to cause another reflow getting it again...
// Calculate the number of columns there will be
this._setColumns( containerWidth );
// Kick off!
this.shuffle( this.group, this.initialSort );
// The shuffle items haven't had transitions set on them yet
// so the user doesn't see the first layout. Set them now that the first layout is done.
if ( this.supported ) {
defer(function() {
this._setTransitions();
this.element.style[ TRANSITION ] = 'height ' + this.speed + 'ms ' + this.easing;
}, this);
}
};
/**
* Returns a throttled and proxied function for the resize handler.
* @return {Function}
* @private
*/
Shuffle.prototype._getResizeFunction = function() {
var resizeFunction = $.proxy( this._onResize, this );
return this.throttle ?
this.throttle( resizeFunction, this.throttleTime ) :
resizeFunction;
};
/**
* Retrieve an element from an option.
* @param {string|jQuery|Element} option The option to check.
* @return {?Element} The plain element or null.
* @private
*/
Shuffle.prototype._getElementOption = function( option ) {
// If column width is a string, treat is as a selector and search for the
// sizer element within the outermost container
if ( typeof option === 'string' ) {
return this.$el.find( option )[0] || null;
// Check for an element
} else if ( option && option.nodeType && option.nodeType === 1 ) {
return option;
// Check for jQuery object
} else if ( option && option.jquery ) {
return option[0];
}
return null;
};
/**
* Ensures the shuffle container has the css styles it needs applied to it.
* @param {Object} styles Key value pairs for position and overflow.
* @private
*/
Shuffle.prototype._validateStyles = function(styles) {
// Position cannot be static.
if ( styles.position === 'static' ) {
this.element.style.position = 'relative';
}
// Overflow has to be hidden
if ( styles.overflow !== 'hidden' ) {
this.element.style.overflow = 'hidden';
}
};
/**
* Filter the elements by a category.
* @param {string} [category] Category to filter by. If it's given, the last
* category will be used to filter the items.
* @param {ArrayLike} [$collection] Optionally filter a collection. Defaults to
* all the items.
* @return {jQuery} Filtered items.
* @private
*/
Shuffle.prototype._filter = function( category, $collection ) {
category = category || this.lastFilter;
$collection = $collection || this.$items;
var set = this._getFilteredSets( category, $collection );
// Individually add/remove concealed/filtered classes
this._toggleFilterClasses( set.filtered, set.concealed );
// Save the last filter in case elements are appended.
this.lastFilter = category;
// This is saved mainly because providing a filter function (like searching)
// will overwrite the `lastFilter` property every time its called.
if ( typeof category === 'string' ) {
this.group = category;
}
return set.filtered;
};
/**
* Returns an object containing the filtered and concealed elements.
* @param {string|Function} category Category or function to filter by.
* @param {ArrayLike.<Element>} $items A collection of items to filter.
* @return {!{filtered: jQuery, concealed: jQuery}}
* @private
*/
Shuffle.prototype._getFilteredSets = function( category, $items ) {
var $filtered = $();
var $concealed = $();
// category === 'all', add filtered class to everything
if ( category === ALL_ITEMS ) {
$filtered = $items;
// Loop through each item and use provided function to determine
// whether to hide it or not.
} else {
each($items, function( el ) {
var $item = $(el);
if ( this._doesPassFilter( category, $item ) ) {
$filtered = $filtered.add( $item );
} else {
$concealed = $concealed.add( $item );
}
}, this);
}
return {
filtered: $filtered,
concealed: $concealed
};
};
/**
* Test an item to see if it passes a category.
* @param {string|Function} category Category or function to filter by.
* @param {jQuery} $item A single item, wrapped with jQuery.
* @return {boolean} Whether it passes the category/filter.
* @private
*/
Shuffle.prototype._doesPassFilter = function( category, $item ) {
if ( $.isFunction( category ) ) {
return category.call( $item[0], $item, this );
// Check each element's data-groups attribute against the given category.
} else {
var groups = $item.data( FILTER_ATTRIBUTE_KEY );
var keys = this.delimeter && !$.isArray( groups ) ?
groups.split( this.delimeter ) :
groups;
return $.inArray(category, keys) > -1;
}
};
/**
* Toggles the filtered and concealed class names.
* @param {jQuery} $filtered Filtered set.
* @param {jQuery} $concealed Concealed set.
* @private
*/
Shuffle.prototype._toggleFilterClasses = function( $filtered, $concealed ) {
$filtered
.removeClass( Shuffle.ClassName.CONCEALED )
.addClass( Shuffle.ClassName.FILTERED );
$concealed
.removeClass( Shuffle.ClassName.FILTERED )
.addClass( Shuffle.ClassName.CONCEALED );
};
/**
* Set the initial css for each item
* @param {jQuery} [$items] Optionally specifiy at set to initialize
*/
Shuffle.prototype._initItems = function( $items ) {
$items = $items || this.$items;
$items.addClass([
Shuffle.ClassName.SHUFFLE_ITEM,
Shuffle.ClassName.FILTERED
].join(' '));
$items.css( this.itemCss ).data('point', new Point()).data('scale', DEFAULT_SCALE);
};
/**
* Updates the filtered item count.
* @private
*/
Shuffle.prototype._updateItemCount = function() {
this.visibleItems = this._getFilteredItems().length;
};
/**
* Sets css transform transition on a an element.
* @param {Element} element Element to set transition on.
* @private
*/
Shuffle.prototype._setTransition = function( element ) {
element.style[ TRANSITION ] = CSS_TRANSFORM + ' ' + this.speed + 'ms ' +
this.easing + ', opacity ' + this.speed + 'ms ' + this.easing;
};
/**
* Sets css transform transition on a group of elements.
* @param {ArrayLike.<Element>} $items Elements to set transitions on.
* @private
*/
Shuffle.prototype._setTransitions = function( $items ) {
$items = $items || this.$items;
each($items, function( el ) {
this._setTransition( el );
}, this);
};
/**
* Sets a transition delay on a collection of elements, making each delay
* greater than the last.
* @param {ArrayLike.<Element>} $collection Array to iterate over.
*/
Shuffle.prototype._setSequentialDelay = function( $collection ) {
if ( !this.supported ) {
return;
}
// $collection can be an array of dom elements or jquery object
each($collection, function( el, i ) {
// This works because the transition-property: transform, opacity;
el.style[ TRANSITION_DELAY ] = '0ms,' + ((i + 1) * this.sequentialFadeDelay) + 'ms';
}, this);
};
Shuffle.prototype._getItems = function() {
return this.$el.children( this.itemSelector );
};
Shuffle.prototype._getFilteredItems = function() {
return this.$items.filter('.' + Shuffle.ClassName.FILTERED);
};
Shuffle.prototype._getConcealedItems = function() {
return this.$items.filter('.' + Shuffle.ClassName.CONCEALED);
};
/**
* Returns the column size, based on column width and sizer options.
* @param {number} containerWidth Size of the parent container.
* @param {number} gutterSize Size of the gutters.
* @return {number}
* @private
*/
Shuffle.prototype._getColumnSize = function( containerWidth, gutterSize ) {
var size;
// If the columnWidth property is a function, then the grid is fluid
if ( $.isFunction( this.columnWidth ) ) {
size = this.columnWidth(containerWidth);
// columnWidth option isn't a function, are they using a sizing element?
} else if ( this.useSizer ) {
size = Shuffle._getOuterWidth(this.sizer);
// if not, how about the explicitly set option?
} else if ( this.columnWidth ) {
size = this.columnWidth;
// or use the size of the first item
} else if ( this.$items.length > 0 ) {
size = Shuffle._getOuterWidth(this.$items[0], true);
// if there's no items, use size of container
} else {
size = containerWidth;
}
// Don't let them set a column width of zero.
if ( size === 0 ) {
size = containerWidth;
}
return size + gutterSize;
};
/**
* Returns the gutter size, based on gutter width and sizer options.
* @param {number} containerWidth Size of the parent container.
* @return {number}
* @private
*/
Shuffle.prototype._getGutterSize = function( containerWidth ) {
var size;
if ( $.isFunction( this.gutterWidth ) ) {
size = this.gutterWidth(containerWidth);
} else if ( this.useSizer ) {
size = Shuffle._getNumberStyle(this.sizer, 'marginLeft');
} else {
size = this.gutterWidth;
}
return size;
};
/**
* Calculate the number of columns to be used. Gets css if using sizer element.
* @param {number} [theContainerWidth] Optionally specify a container width if it's already available.
*/
Shuffle.prototype._setColumns = function( theContainerWidth ) {
var containerWidth = theContainerWidth || Shuffle._getOuterWidth( this.element );
var gutter = this._getGutterSize( containerWidth );
var columnWidth = this._getColumnSize( containerWidth, gutter );
var calculatedColumns = (containerWidth + gutter) / columnWidth;
// Widths given from getComputedStyle are not precise enough...
if ( Math.abs(Math.round(calculatedColumns) - calculatedColumns) < COLUMN_THRESHOLD ) {
// e.g. calculatedColumns = 11.998876
calculatedColumns = Math.round( calculatedColumns );
}
this.cols = Math.max( Math.floor(calculatedColumns), 1 );
this.containerWidth = containerWidth;
this.colWidth = columnWidth;
};
/**
* Adjust the height of the grid
*/
Shuffle.prototype._setContainerSize = function() {
this.$el.css( 'height', this._getContainerSize() );
};
/**
* Based on the column heights, it returns the biggest one.
* @return {number}
* @private
*/
Shuffle.prototype._getContainerSize = function() {
return arrayMax( this.positions );
};
/**
* Fire events with .shuffle namespace
*/
Shuffle.prototype._fire = function( name, args ) {
this.$el.trigger( name + '.' + SHUFFLE, args && args.length ? args : [ this ] );
};
/**
* Zeros out the y columns array, which is used to determine item placement.
* @private
*/
Shuffle.prototype._resetCols = function() {
var i = this.cols;
this.positions = [];
while (i--) {
this.positions.push( 0 );
}
};
/**
* Loops through each item that should be shown and calculates the x, y position.
* @param {Array.<Element>} items Array of items that will be shown/layed out in order in their array.
* Because jQuery collection are always ordered in DOM order, we can't pass a jq collection.
* @param {boolean} [isOnlyPosition=false] If true this will position the items with zero opacity.
*/
Shuffle.prototype._layout = function( items, isOnlyPosition ) {
each(items, function( item ) {
this._layoutItem( item, !!isOnlyPosition );
}, this);
// `_layout` always happens after `_shrink`, so it's safe to process the style
// queue here with styles from the shrink method.
this._processStyleQueue();
// Adjust the height of the container.
this._setContainerSize();
};
/**
* Calculates the position of the item and pushes it onto the style queue.
* @param {Element} item Element which is being positioned.
* @param {boolean} isOnlyPosition Whether to position the item, but with zero
* opacity so that it can fade in later.
* @private
*/
Shuffle.prototype._layoutItem = function( item, isOnlyPosition ) {
var $item = $(item);
var itemData = $item.data();
var currPos = itemData.point;
var currScale = itemData.scale;
var itemSize = {
width: Shuffle._getOuterWidth( item, true ),
height: Shuffle._getOuterHeight( item, true )
};
var pos = this._getItemPosition( itemSize );
// If the item will not change its position, do not add it to the render
// queue. Transitions don't fire when setting a property to the same value.
if ( Point.equals(currPos, pos) && currScale === DEFAULT_SCALE ) {
return;
}
// Save data for shrink
itemData.point = pos;
itemData.scale = DEFAULT_SCALE;
this.styleQueue.push({
$item: $item,
point: pos,
scale: DEFAULT_SCALE,
opacity: isOnlyPosition ? 0 : 1,
skipTransition: isOnlyPosition,
callfront: function() {
if ( !isOnlyPosition ) {
$item.css( 'visibility', 'visible' );
}
},
callback: function() {
if ( isOnlyPosition ) {
$item.css( 'visibility', 'hidden' );
}
}
});
};
/**
* Determine the location of the next item, based on its size.
* @param {{width: number, height: number}} itemSize Object with width and height.
* @return {Point}
* @private
*/
Shuffle.prototype._getItemPosition = function( itemSize ) {
var columnSpan = this._getColumnSpan( itemSize.width, this.colWidth, this.cols );
var setY = this._getColumnSet( columnSpan, this.cols );
// Finds the index of the smallest number in the set.
var shortColumnIndex = this._getShortColumn( setY, this.buffer );
// Position the item
var point = new Point(
Math.round( this.colWidth * shortColumnIndex ),
Math.round( setY[shortColumnIndex] ));
// Update the columns array with the new values for each column.
// e.g. before the update the columns could be [250, 0, 0, 0] for an item
// which spans 2 columns. After it would be [250, itemHeight, itemHeight, 0].
var setHeight = setY[shortColumnIndex] + itemSize.height;
var setSpan = this.cols + 1 - setY.length;
for ( var i = 0; i < setSpan; i++ ) {
this.positions[ shortColumnIndex + i ] = setHeight;
}
return point;
};
/**
* Determine the number of columns an items spans.
* @param {number} itemWidth Width of the item.
* @param {number} columnWidth Width of the column (includes gutter).
* @param {number} columns Total number of columns
* @return {number}
* @private
*/
Shuffle.prototype._getColumnSpan = function( itemWidth, columnWidth, columns ) {
var columnSpan = itemWidth / columnWidth;
// If the difference between the rounded column span number and the
// calculated column span number is really small, round the number to
// make it fit.
if ( Math.abs(Math.round( columnSpan ) - columnSpan ) < COLUMN_THRESHOLD ) {
// e.g. columnSpan = 4.0089945390298745
columnSpan = Math.round( columnSpan );
}
// Ensure the column span is not more than the amount of columns in the whole layout.
return Math.min( Math.ceil( columnSpan ), columns );
};
/**
* Retrieves the column set to use for placement.
* @param {number} columnSpan The number of columns this current item spans.
* @param {number} columns The total columns in the grid.
* @return {Array.<number>} An array of numbers represeting the column set.
* @private
*/
Shuffle.prototype._getColumnSet = function( columnSpan, columns ) {
// The item spans only one column.
if ( columnSpan === 1 ) {
return this.positions;
// The item spans more than one column, figure out how many different
// places it could fit horizontally.
// The group count is the number of places within the positions this block
// could fit, ignoring the current positions of items.
// Imagine a 2 column brick as the second item in a 4 column grid with
// 10px height each. Find the places it would fit:
// [10, 0, 0, 0]
// | | |
// * * *
//
// Then take the places which fit and get the bigger of the two:
// max([10, 0]), max([0, 0]), max([0, 0]) = [10, 0, 0]
//
// Next, find the first smallest number (the short column).
// [10, 0, 0]
// |
// *
//
// And that's where it should be placed!
} else {
var groupCount = columns + 1 - columnSpan;
var groupY = [];
// For how many possible positions for this item there are.
for ( var i = 0; i < groupCount; i++ ) {
// Find the bigger value for each place it could fit.
groupY[i] = arrayMax( this.positions.slice( i, i + columnSpan ) );
}
return groupY;
}
};
/**
* Find index of short column, the first from the left where this item will go.
*
* @param {Array.<number>} positions The array to search for the smallest number.
* @param {number} buffer Optional buffer which is very useful when the height
* is a percentage of the width.
* @return {number} Index of the short column.
* @private
*/
Shuffle.prototype._getShortColumn = function( positions, buffer ) {
var minPosition = arrayMin( positions );
for (var i = 0, len = positions.length; i < len; i++) {
if ( positions[i] >= minPosition - buffer && positions[i] <= minPosition + buffer ) {
return i;
}
}
return 0;
};
/**
* Hides the elements that don't match our filter.
* @param {jQuery} $collection jQuery collection to shrink.
* @private
*/
Shuffle.prototype._shrink = function( $collection ) {
var $concealed = $collection || this._getConcealedItems();
each($concealed, function( item ) {
var $item = $(item);
var itemData = $item.data();
// Continuing would add a transitionend event listener to the element, but
// that listener would not execute because the transform and opacity would
// stay the same.
if ( itemData.scale === CONCEALED_SCALE ) {
return;
}
itemData.scale = CONCEALED_SCALE;
this.styleQueue.push({
$item: $item,
point: itemData.point,
scale : CONCEALED_SCALE,
opacity: 0,
callback: function() {
$item.css( 'visibility', 'hidden' );
}
});
}, this);
};
/**
* Resize handler.
* @private
*/
Shuffle.prototype._onResize = function() {
// If shuffle is disabled, destroyed, don't do anything
if ( !this.enabled || this.destroyed || this.isTransitioning ) {
return;
}
// Will need to check height in the future if it's layed out horizontaly
var containerWidth = Shuffle._getOuterWidth( this.element );
// containerWidth hasn't changed, don't do anything
if ( containerWidth === this.containerWidth ) {
return;
}
this.update();
};
/**
* Returns styles for either jQuery animate or transition.
* @param {Object} opts Transition options.
* @return {!Object} Transforms for transitions, left/top for animate.
* @private
*/
Shuffle.prototype._getStylesForTransition = function( opts ) {
var styles = {
opacity: opts.opacity
};
if ( this.supported ) {
styles[ TRANSFORM ] = Shuffle._getItemTransformString( opts.point, opts.scale );
} else {
styles.left = opts.point.x;
styles.top = opts.point.y;
}
return styles;
};
/**
* Transitions an item in the grid
*
* @param {Object} opts options.
* @param {jQuery} opts.$item jQuery object representing the current item.
* @param {Point} opts.point A point object with the x and y coordinates.
* @param {number} opts.scale Amount to scale the item.
* @param {number} opts.opacity Opacity of the item.
* @param {Function} opts.callback Complete function for the animation.
* @param {Function} opts.callfront Function to call before transitioning.
* @private
*/
Shuffle.prototype._transition = function( opts ) {
var styles = this._getStylesForTransition( opts );
this._startItemAnimation( opts.$item, styles, opts.callfront || $.noop, opts.callback || $.noop );
};
Shuffle.prototype._startItemAnimation = function( $item, styles, callfront, callback ) {
// Transition end handler removes its listener.
function handleTransitionEnd( evt ) {
// Make sure this event handler has not bubbled up from a child.
if ( evt.target === evt.currentTarget ) {
$( evt.target ).off( TRANSITIONEND, handleTransitionEnd );
callback();
}
}
callfront();
// Transitions are not set until shuffle has loaded to avoid the initial transition.
if ( !this.initialized ) {
$item.css( styles );
callback();
return;
}
// Use CSS Transforms if we have them
if ( this.supported ) {
$item.css( styles );
$item.on( TRANSITIONEND, handleTransitionEnd );
// Use jQuery to animate left/top
} else {
// Save the deferred object which jQuery returns.
var anim = $item.stop( true ).animate( styles, this.speed, 'swing', callback );
// Push the animation to the list of pending animations.
this._animations.push( anim.promise() );
}
};
/**
* Execute the styles gathered in the style queue. This applies styles to elements,
* triggering transitions.
* @param {boolean} noLayout Whether to trigger a layout event.
* @private
*/
Shuffle.prototype._processStyleQueue = function( noLayout ) {
var $transitions = $();
// Iterate over the queue and keep track of ones that use transitions.
each(this.styleQueue, function( transitionObj ) {
if ( transitionObj.skipTransition ) {
this._styleImmediately( transitionObj );
} else {
$transitions = $transitions.add( transitionObj.$item );
this._transition( transitionObj );
}
}, this);
if ( $transitions.length > 0 && this.initialized ) {
// Set flag that shuffle is currently in motion.
this.isTransitioning = true;
if ( this.supported ) {
this._whenCollectionDone( $transitions, TRANSITIONEND, this._movementFinished );
// The _transition function appends a promise to the animations array.
// When they're all complete, do things.
} else {
this._whenAnimationsDone( this._movementFinished );
}
// A call to layout happened, but none of the newly filtered items will
// change position. Asynchronously fire the callback here.
} else if ( !noLayout ) {
defer( this._layoutEnd, this );
}
// Remove everything in the style queue
this.styleQueue.length = 0;
};
/**
* Apply styles without a transition.
* @param {Object} opts Transitions options object.
* @private
*/
Shuffle.prototype._styleImmediately = function( opts ) {
Shuffle._skipTransition(opts.$item[0], function() {
opts.$item.css( this._getStylesForTransition( opts ) );
}, this);
};
Shuffle.prototype._movementFinished = function() {
this.isTransitioning = false;
this._layoutEnd();
};
Shuffle.prototype._layoutEnd = function() {
this._fire( Shuffle.EventType.LAYOUT );
};
Shuffle.prototype._addItems = function( $newItems, addToEnd, isSequential ) {
// Add classes and set initial positions.
this._initItems( $newItems );
// Add transition to each item.
this._setTransitions( $newItems );
// Update the list of
this.$items = this._getItems();
// Shrink all items (without transitions).
this._shrink( $newItems );
each(this.styleQueue, function( transitionObj ) {
transitionObj.skipTransition = true;
});
// Apply shrink positions, but do not cause a layout event.
this._processStyleQueue( true );
if ( addToEnd ) {
this._addItemsToEnd( $newItems, isSequential );
} else {
this.shuffle( this.lastFilter );
}
};
Shuffle.prototype._addItemsToEnd = function( $newItems, isSequential ) {
// Get ones that passed the current filter
var $passed = this._filter( null, $newItems );
var passed = $passed.get();
// How many filtered elements?
this._updateItemCount();
this._layout( passed, true );
if ( isSequential && this.supported ) {
this._setSequentialDelay( passed );
}
this._revealAppended( passed );
};
/**
* Triggers appended elements to fade in.
* @param {ArrayLike.<Element>} $newFilteredItems Collection of elements.
* @private
*/
Shuffle.prototype._revealAppended = function( newFilteredItems ) {
defer(function() {
each(newFilteredItems, function( el ) {
var $item = $( el );
this._transition({
$item: $item,
opacity: 1,
point: $item.data('point'),
scale: DEFAULT_SCALE
});
}, this);
this._whenCollectionDone($(newFilteredItems), TRANSITIONEND, function() {
$(newFilteredItems).css( TRANSITION_DELAY, '0ms' );
this._movementFinished();
});
}, this, this.revealAppendedDelay);
};
/**
* Execute a function when an event has been triggered for every item in a collection.
* @param {jQuery} $collection Collection of elements.
* @param {string} eventName Event to listen for.
* @param {Function} callback Callback to execute when they're done.
* @private
*/
Shuffle.prototype._whenCollectionDone = function( $collection, eventName, callback ) {
var done = 0;
var items = $collection.length;
var self = this;
function handleEventName( evt ) {
if ( evt.target === evt.currentTarget ) {
$( evt.target ).off( eventName, handleEventName );
done++;
// Execute callback if all items have emitted the correct event.
if ( done === items ) {
callback.call( self );
}
}
}
// Bind the event to all items.
$collection.on( eventName, handleEventName );
};
/**
* Execute a callback after jQuery `animate` for a collection has finished.
* @param {Function} callback Callback to execute when they're done.
* @private
*/
Shuffle.prototype._whenAnimationsDone = function( callback ) {
$.when.apply( null, this._animations ).always( $.proxy( function() {
this._animations.length = 0;
callback.call( this );
}, this ));
};
/**
* Public Methods
*/
/**
* The magic. This is what makes the plugin 'shuffle'
* @param {string|Function} [category] Category to filter by. Can be a function
* @param {Object} [sortObj] A sort object which can sort the filtered set
*/
Shuffle.prototype.shuffle = function( category, sortObj ) {
if ( !this.enabled || this.isTransitioning ) {
return;
}
if ( !category ) {
category = ALL_ITEMS;
}
this._filter( category );
// How many filtered elements?
this._updateItemCount();
// Shrink each concealed item
this._shrink();
// Update transforms on .filtered elements so they will animate to their new positions
this.sort( sortObj );
};
/**
* Gets the .filtered elements, sorts them, and passes them to layout.
* @param {Object} opts the options object for the sorted plugin
*/
Shuffle.prototype.sort = function( opts ) {
if ( this.enabled && !this.isTransitioning ) {
this._resetCols();
var sortOptions = opts || this.lastSort;
var items = this._getFilteredItems().sorted( sortOptions );
this._layout( items );
this.lastSort = sortOptions;
}
};
/**
* Reposition everything.
* @param {boolean} isOnlyLayout If true, column and gutter widths won't be
* recalculated.
*/
Shuffle.prototype.update = function( isOnlyLayout ) {
if ( this.enabled && !this.isTransitioning ) {
if ( !isOnlyLayout ) {
// Get updated colCount
this._setColumns();
}
// Layout items
this.sort();
}
};
/**
* Use this instead of `update()` if you don't need the columns and gutters updated
* Maybe an image inside `shuffle` loaded (and now has a height), which means calculations
* could be off.
*/
Shuffle.prototype.layout = function() {
this.update( true );
};
/**
* New items have been appended to shuffle. Fade them in sequentially
* @param {jQuery} $newItems jQuery collection of new items
* @param {boolean} [addToEnd=false] If true, new items will be added to the end / bottom
* of the items. If not true, items will be mixed in with the current sort order.
* @param {boolean} [isSequential=true] If false, new items won't sequentially fade in
*/
Shuffle.prototype.appended = function( $newItems, addToEnd, isSequential ) {
this._addItems( $newItems, addToEnd === true, isSequential !== false );
};
/**
* Disables shuffle from updating dimensions and layout on resize
*/
Shuffle.prototype.disable = function() {
this.enabled = false;
};
/**
* Enables shuffle again
* @param {boolean} [isUpdateLayout=true] if undefined, shuffle will update columns and gutters
*/
Shuffle.prototype.enable = function( isUpdateLayout ) {
this.enabled = true;
if ( isUpdateLayout !== false ) {
this.update();
}
};
/**
* Remove 1 or more shuffle items
* @param {jQuery} $collection A jQuery object containing one or more element in shuffle
* @return {Shuffle} The shuffle object
*/
Shuffle.prototype.remove = function( $collection ) {
// If this isn't a jquery object, exit
if ( !$collection.length || !$collection.jquery ) {
return;
}
function handleRemoved() {
// Remove the collection in the callback
$collection.remove();
// Update things now that elements have been removed.
this.$items = this._getItems();
this._updateItemCount();
this._fire( Shuffle.EventType.REMOVED, [ $collection, this ] );
// Let it get garbage collected
$collection = null;
}
// Hide collection first.
this._toggleFilterClasses( $(), $collection );
this._shrink( $collection );
this.sort();
this.$el.one( Shuffle.EventType.LAYOUT + '.' + SHUFFLE, $.proxy( handleRemoved, this ) );
};
/**
* Destroys shuffle, removes events, styles, and classes
*/
Shuffle.prototype.destroy = function() {
// If there is more than one shuffle instance on the page,
// removing the resize handler from the window would remove them
// all. This is why a unique value is needed.
$window.off('.' + this.unique);
// Reset container styles
this.$el
.removeClass( SHUFFLE )
.removeAttr('style')
.removeData( SHUFFLE );
// Reset individual item styles
this.$items
.removeAttr('style')
.removeData('point')
.removeData('scale')
.removeClass([
Shuffle.ClassName.CONCEALED,
Shuffle.ClassName.FILTERED,
Shuffle.ClassName.SHUFFLE_ITEM
].join(' '));
// Null DOM references
this.$items = null;
this.$el = null;
this.sizer = null;
this.element = null;
// Set a flag so if a debounced resize has been triggered,
// it can first check if it is actually destroyed and not doing anything
this.destroyed = true;
};
// Plugin definition
$.fn.shuffle = function( opts ) {
var args = Array.prototype.slice.call( arguments, 1 );
return this.each(function() {
var $this = $( this );
var shuffle = $this.data( SHUFFLE );
// If we don't have a stored shuffle, make a new one and save it
if ( !shuffle ) {
shuffle = new Shuffle( this, opts );
$this.data( SHUFFLE, shuffle );
} else if ( typeof opts === 'string' && shuffle[ opts ] ) {
shuffle[ opts ].apply( shuffle, args );
}
});
};
// http://stackoverflow.com/a/962890/373422
function randomize( array ) {
var tmp, current;
var top = array.length;
if ( !top ) {
return array;
}
while ( --top ) {
current = Math.floor( Math.random() * (top + 1) );
tmp = array[ current ];
array[ current ] = array[ top ];
array[ top ] = tmp;
}
return array;
}
// You can return `undefined` from the `by` function to revert to DOM order
// This plugin does NOT return a jQuery object. It returns a plain array because
// jQuery sorts everything in DOM order.
$.fn.sorted = function(options) {
var opts = $.extend({}, $.fn.sorted.defaults, options);
var arr = this.get();
var revert = false;
if ( !arr.length ) {
return [];
}
if ( opts.randomize ) {
return randomize( arr );
}
// Sort the elements by the opts.by function.
// If we don't have opts.by, default to DOM order
if ( $.isFunction( opts.by ) ) {
arr.sort(function(a, b) {
// Exit early if we already know we want to revert
if ( revert ) {
return 0;
}
var valA = opts.by($(a));
var valB = opts.by($(b));
// If both values are undefined, use the DOM order
if ( valA === undefined && valB === undefined ) {
revert = true;
return 0;
}
if ( valA < valB || valA === 'sortFirst' || valB === 'sortLast' ) {
return -1;
}
if ( valA > valB || valA === 'sortLast' || valB === 'sortFirst' ) {
return 1;
}
return 0;
});
}
// Revert to the original array if necessary
if ( revert ) {
return this.get();
}
if ( opts.reverse ) {
arr.reverse();
}
return arr;
};
$.fn.sorted.defaults = {
reverse: false, // Use array.reverse() to reverse the results
by: null, // Sorting function
randomize: false // If true, this will skip the sorting and return a randomized order in the array
};
return Shuffle;
});
/*!
* Shuffle.js by @Vestride
* Categorize, sort, and filter a responsive grid of items.
* Dependencies: jQuery 1.9+, Modernizr 2.6.2+
* @license MIT license
* @version 3.0.0
*/
/* Modernizr 2.6.2 (Custom Build) | MIT & BSD
* Build: http://modernizr.com/download/#-csstransforms-csstransforms3d-csstransitions-cssclasses-prefixed-teststyles-testprop-testallprops-prefixes-domprefixes
*/
window.Modernizr=function(a,b,c){function z(a){j.cssText=a}function A(a,b){return z(m.join(a+";")+(b||""))}function B(a,b){return typeof a===b}function C(a,b){return!!~(""+a).indexOf(b)}function D(a,b){for(var d in a){var e=a[d];if(!C(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function E(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:B(f,"function")?f.bind(d||b):f}return!1}function F(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+o.join(d+" ")+d).split(" ");return B(b,"string")||B(b,"undefined")?D(e,b):(e=(a+" "+p.join(d+" ")+d).split(" "),E(e,b,c))}var d="2.6.2",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m=" -webkit- -moz- -o- -ms- ".split(" "),n="Webkit Moz O ms",o=n.split(" "),p=n.toLowerCase().split(" "),q={},r={},s={},t=[],u=t.slice,v,w=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["&#173;",'<style id="s',h,'">',a,"</style>"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},x={}.hasOwnProperty,y;!B(x,"undefined")&&!B(x.call,"undefined")?y=function(a,b){return x.call(a,b)}:y=function(a,b){return b in a&&B(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=u.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(u.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(u.call(arguments)))};return e}),q.csstransforms=function(){return!!F("transform")},q.csstransforms3d=function(){var a=!!F("perspective");return a&&"webkitPerspective"in g.style&&w("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},q.csstransitions=function(){return F("transition")};for(var G in q)y(q,G)&&(v=G.toLowerCase(),e[v]=q[G](),t.push((e[v]?"":"no-")+v));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)y(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},z(""),i=k=null,e._version=d,e._prefixes=m,e._domPrefixes=p,e._cssomPrefixes=o,e.testProp=function(a){return D([a])},e.testAllProps=F,e.testStyles=w,e.prefixed=function(a,b,c){return b?F(a,b,c):F(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+t.join(" "):""),e}(this,this.document);
(function (factory) {
if (typeof define === 'function' && define.amd) {
define(['jquery', 'modernizr'], factory);
} else {
window.Shuffle = factory(window.jQuery, window.Modernizr);
}
})(function($, Modernizr, undefined) {
'use strict';
// Validate Modernizr exists.
// Shuffle requires `csstransitions`, `csstransforms`, `csstransforms3d`,
// and `prefixed` to exist on the Modernizr object.
if (typeof Modernizr !== 'object') {
throw new Error('Shuffle.js requires Modernizr.\n' +
'http://vestride.github.io/Shuffle/#dependencies');
}
/**
* Returns css prefixed properties like `-webkit-transition` or `box-sizing`
* from `transition` or `boxSizing`, respectively.
* @param {(string|boolean)} prop Property to be prefixed.
* @return {string} The prefixed css property.
*/
function dashify( prop ) {
if (!prop) {
return '';
}
// Replace upper case with dash-lowercase,
// then fix ms- prefixes because they're not capitalized.
return prop.replace(/([A-Z])/g, function( str, m1 ) {
return '-' + m1.toLowerCase();
}).replace(/^ms-/,'-ms-');
}
// Constant, prefixed variables.
var TRANSITION = Modernizr.prefixed('transition');
var TRANSITION_DELAY = Modernizr.prefixed('transitionDelay');
var TRANSITION_DURATION = Modernizr.prefixed('transitionDuration');
// Note(glen): Stock Android 4.1.x browser will fail here because it wrongly
// says it supports non-prefixed transitions.
// https://github.com/Modernizr/Modernizr/issues/897
var TRANSITIONEND = {
'WebkitTransition' : 'webkitTransitionEnd',
'transition' : 'transitionend'
}[ TRANSITION ];
var TRANSFORM = Modernizr.prefixed('transform');
var CSS_TRANSFORM = dashify(TRANSFORM);
// Constants
var CAN_TRANSITION_TRANSFORMS = Modernizr.csstransforms && Modernizr.csstransitions;
var HAS_TRANSFORMS_3D = Modernizr.csstransforms3d;
var SHUFFLE = 'shuffle';
var COLUMN_THRESHOLD = 0.3;
// Configurable. You can change these constants to fit your application.
// The default scale and concealed scale, however, have to be different values.
var ALL_ITEMS = 'all';
var FILTER_ATTRIBUTE_KEY = 'groups';
var DEFAULT_SCALE = 1;
var CONCEALED_SCALE = 0.001;
// Underscore's throttle function.
function throttle(func, wait, options) {
var context, args, result;
var timeout = null;
var previous = 0;
options = options || {};
var later = function() {
previous = options.leading === false ? 0 : $.now();
timeout = null;
result = func.apply(context, args);
context = args = null;
};
return function() {
var now = $.now();
if (!previous && options.leading === false) {
previous = now;
}
var remaining = wait - (now - previous);
context = this;
args = arguments;
if (remaining <= 0 || remaining > wait) {
clearTimeout(timeout);
timeout = null;
previous = now;
result = func.apply(context, args);
context = args = null;
} else if (!timeout && options.trailing !== false) {
timeout = setTimeout(later, remaining);
}
return result;
};
}
function each(obj, iterator, context) {
for (var i = 0, length = obj.length; i < length; i++) {
if (iterator.call(context, obj[i], i, obj) === {}) {
return;
}
}
}
function defer(fn, context, wait) {
return setTimeout( $.proxy( fn, context ), wait );
}
function arrayMax( array ) {
return Math.max.apply( Math, array );
}
function arrayMin( array ) {
return Math.min.apply( Math, array );
}
/**
* Always returns a numeric value, given a value.
* @param {*} value Possibly numeric value.
* @return {number} `value` or zero if `value` isn't numeric.
* @private
*/
function getNumber(value) {
return $.isNumeric(value) ? value : 0;
}
/**
* Represents a coordinate pair.
* @param {number} [x=0] X.
* @param {number} [y=0] Y.
*/
var Point = function(x, y) {
this.x = getNumber( x );
this.y = getNumber( y );
};
/**
* Whether two points are equal.
* @param {Point} a Point A.
* @param {Point} b Point B.
* @return {boolean}
*/
Point.equals = function(a, b) {
return a.x === b.x && a.y === b.y;
};
// Used for unique instance variables
var id = 0;
var $window = $( window );
/**
* Categorize, sort, and filter a responsive grid of items.
*
* @param {Element} element An element which is the parent container for the grid items.
* @param {Object} [options=Shuffle.options] Options object.
* @constructor
*/
var Shuffle = function( element, options ) {
options = options || {};
$.extend( this, Shuffle.options, options, Shuffle.settings );
this.$el = $(element);
this.element = element;
this.unique = 'shuffle_' + id++;
this._fire( Shuffle.EventType.LOADING );
this._init();
// Dispatch the done event asynchronously so that people can bind to it after
// Shuffle has been initialized.
defer(function() {
this.initialized = true;
this._fire( Shuffle.EventType.DONE );
}, this, 16);
};
/**
* Events the container element emits with the .shuffle namespace.
* For example, "done.shuffle".
* @enum {string}
*/
Shuffle.EventType = {
LOADING: 'loading',
DONE: 'done',
LAYOUT: 'layout',
REMOVED: 'removed'
};
/** @enum {string} */
Shuffle.ClassName = {
BASE: SHUFFLE,
SHUFFLE_ITEM: 'shuffle-item',
FILTERED: 'filtered',
CONCEALED: 'concealed'
};
// Overrideable options
Shuffle.options = {
group: ALL_ITEMS, // Initial filter group.
speed: 250, // Transition/animation speed (milliseconds).
easing: 'ease-out', // CSS easing function to use.
itemSelector: '', // e.g. '.picture-item'.
sizer: null, // Sizer element. Use an element to determine the size of columns and gutters.
gutterWidth: 0, // A static number or function that tells the plugin how wide the gutters between columns are (in pixels).
columnWidth: 0, // A static number or function that returns a number which tells the plugin how wide the columns are (in pixels).
delimeter: null, // If your group is not json, and is comma delimeted, you could set delimeter to ','.
buffer: 0, // Useful for percentage based heights when they might not always be exactly the same (in pixels).
initialSort: null, // Shuffle can be initialized with a sort object. It is the same object given to the sort method.
throttle: throttle, // By default, shuffle will throttle resize events. This can be changed or removed.
throttleTime: 300, // How often shuffle can be called on resize (in milliseconds).
sequentialFadeDelay: 150, // Delay between each item that fades in when adding items.
supported: CAN_TRANSITION_TRANSFORMS // Whether to use transforms or absolute positioning.
};
// Not overrideable
Shuffle.settings = {
useSizer: false,
itemCss : { // default CSS for each item
position: 'absolute',
top: 0,
left: 0,
visibility: 'visible'
},
revealAppendedDelay: 300,
lastSort: {},
lastFilter: ALL_ITEMS,
enabled: true,
destroyed: false,
initialized: false,
_animations: [],
styleQueue: []
};
// Expose for testing.
Shuffle.Point = Point;
/**
* Static methods.
*/
/**
* If the browser has 3d transforms available, build a string with those,
* otherwise use 2d transforms.
* @param {Point} point X and Y positions.
* @param {number} scale Scale amount.
* @return {string} A normalized string which can be used with the transform style.
* @private
*/
Shuffle._getItemTransformString = function(point, scale) {
if ( HAS_TRANSFORMS_3D ) {
return 'translate3d(' + point.x + 'px, ' + point.y + 'px, 0) scale3d(' + scale + ', ' + scale + ', 1)';
} else {
return 'translate(' + point.x + 'px, ' + point.y + 'px) scale(' + scale + ')';
}
};
/**
* Retrieve the computed style for an element, parsed as a float. This should
* not be used for width or height values because jQuery mangles them and they
* are not precise enough.
* @param {Element} element Element to get style for.
* @param {string} style Style property.
* @return {number} The parsed computed value or zero if that fails because IE
* will return 'auto' when the element doesn't have margins instead of
* the computed style.
* @private
*/
Shuffle._getNumberStyle = function( element, style ) {
return Shuffle._getFloat( $( element ).css( style ) );
};
/**
* Parse a string as an integer.
* @param {string} value String integer.
* @return {number} The string as an integer or zero.
* @private
*/
Shuffle._getInt = function(value) {
return getNumber( parseInt( value, 10 ) );
};
/**
* Parse a string as an float.
* @param {string} value String float.
* @return {number} The string as an float or zero.
* @private
*/
Shuffle._getFloat = function(value) {
return getNumber( parseFloat( value ) );
};
/**
* Returns the outer width of an element, optionally including its margins.
* The `offsetWidth` property must be used because having a scale transform
* on the element affects the bounding box. Sadly, Firefox doesn't return an
* integer value for offsetWidth (yet).
* @param {Element} element The element.
* @param {boolean} [includeMargins] Whether to include margins. Default is false.
* @return {number} The width.
*/
Shuffle._getOuterWidth = function( element, includeMargins ) {
var width = element.offsetWidth;
// Use jQuery here because it uses getComputedStyle internally and is
// cross-browser. Using the style property of the element will only work
// if there are inline styles.
if ( includeMargins ) {
var marginLeft = Shuffle._getNumberStyle( element, 'marginLeft');
var marginRight = Shuffle._getNumberStyle( element, 'marginRight');
width += marginLeft + marginRight;
}
return width;
};
/**
* Returns the outer height of an element, optionally including its margins.
* @param {Element} element The element.
* @param {boolean} [includeMargins] Whether to include margins. Default is false.
* @return {number} The height.
*/
Shuffle._getOuterHeight = function( element, includeMargins ) {
var height = element.offsetHeight;
if ( includeMargins ) {
var marginTop = Shuffle._getNumberStyle( element, 'marginTop');
var marginBottom = Shuffle._getNumberStyle( element, 'marginBottom');
height += marginTop + marginBottom;
}
return height;
};
/**
* Change a property or execute a function which will not have a transition
* @param {Element} element DOM element that won't be transitioned
* @param {Function} callback A function which will be called while transition
* is set to 0ms.
* @param {Object} [context] Optional context for the callback function.
* @private
*/
Shuffle._skipTransition = function( element, callback, context ) {
var duration = element.style[ TRANSITION_DURATION ];
// Set the duration to zero so it happens immediately
element.style[ TRANSITION_DURATION ] = '0ms'; // ms needed for firefox!
callback.call( context );
// Force reflow
var reflow = element.offsetWidth;
// Avoid jshint warnings: unused variables and expressions.
reflow = null;
// Put the duration back
element.style[ TRANSITION_DURATION ] = duration;
};
/**
* Instance methods.
*/
Shuffle.prototype._init = function() {
this.$items = this._getItems();
this.sizer = this._getElementOption( this.sizer );
if ( this.sizer ) {
this.useSizer = true;
}
// Add class and invalidate styles
this.$el.addClass( Shuffle.ClassName.BASE );
// Set initial css for each item
this._initItems();
// Bind resize events
// http://stackoverflow.com/questions/1852751/window-resize-event-firing-in-internet-explorer
$window.on('resize.' + SHUFFLE + '.' + this.unique, this._getResizeFunction());
// Get container css all in one request. Causes reflow
var containerCSS = this.$el.css(['position', 'overflow']);
var containerWidth = Shuffle._getOuterWidth( this.element );
// Add styles to the container if it doesn't have them.
this._validateStyles( containerCSS );
// We already got the container's width above, no need to cause another reflow getting it again...
// Calculate the number of columns there will be
this._setColumns( containerWidth );
// Kick off!
this.shuffle( this.group, this.initialSort );
// The shuffle items haven't had transitions set on them yet
// so the user doesn't see the first layout. Set them now that the first layout is done.
if ( this.supported ) {
defer(function() {
this._setTransitions();
this.element.style[ TRANSITION ] = 'height ' + this.speed + 'ms ' + this.easing;
}, this);
}
};
/**
* Returns a throttled and proxied function for the resize handler.
* @return {Function}
* @private
*/
Shuffle.prototype._getResizeFunction = function() {
var resizeFunction = $.proxy( this._onResize, this );
return this.throttle ?
this.throttle( resizeFunction, this.throttleTime ) :
resizeFunction;
};
/**
* Retrieve an element from an option.
* @param {string|jQuery|Element} option The option to check.
* @return {?Element} The plain element or null.
* @private
*/
Shuffle.prototype._getElementOption = function( option ) {
// If column width is a string, treat is as a selector and search for the
// sizer element within the outermost container
if ( typeof option === 'string' ) {
return this.$el.find( option )[0] || null;
// Check for an element
} else if ( option && option.nodeType && option.nodeType === 1 ) {
return option;
// Check for jQuery object
} else if ( option && option.jquery ) {
return option[0];
}
return null;
};
/**
* Ensures the shuffle container has the css styles it needs applied to it.
* @param {Object} styles Key value pairs for position and overflow.
* @private
*/
Shuffle.prototype._validateStyles = function(styles) {
// Position cannot be static.
if ( styles.position === 'static' ) {
this.element.style.position = 'relative';
}
// Overflow has to be hidden
if ( styles.overflow !== 'hidden' ) {
this.element.style.overflow = 'hidden';
}
};
/**
* Filter the elements by a category.
* @param {string} [category] Category to filter by. If it's given, the last
* category will be used to filter the items.
* @param {ArrayLike} [$collection] Optionally filter a collection. Defaults to
* all the items.
* @return {jQuery} Filtered items.
* @private
*/
Shuffle.prototype._filter = function( category, $collection ) {
category = category || this.lastFilter;
$collection = $collection || this.$items;
var set = this._getFilteredSets( category, $collection );
// Individually add/remove concealed/filtered classes
this._toggleFilterClasses( set.filtered, set.concealed );
// Save the last filter in case elements are appended.
this.lastFilter = category;
// This is saved mainly because providing a filter function (like searching)
// will overwrite the `lastFilter` property every time its called.
if ( typeof category === 'string' ) {
this.group = category;
}
return set.filtered;
};
/**
* Returns an object containing the filtered and concealed elements.
* @param {string|Function} category Category or function to filter by.
* @param {ArrayLike.<Element>} $items A collection of items to filter.
* @return {!{filtered: jQuery, concealed: jQuery}}
* @private
*/
Shuffle.prototype._getFilteredSets = function( category, $items ) {
var $filtered = $();
var $concealed = $();
// category === 'all', add filtered class to everything
if ( category === ALL_ITEMS ) {
$filtered = $items;
// Loop through each item and use provided function to determine
// whether to hide it or not.
} else {
each($items, function( el ) {
var $item = $(el);
if ( this._doesPassFilter( category, $item ) ) {
$filtered = $filtered.add( $item );
} else {
$concealed = $concealed.add( $item );
}
}, this);
}
return {
filtered: $filtered,
concealed: $concealed
};
};
/**
* Test an item to see if it passes a category.
* @param {string|Function} category Category or function to filter by.
* @param {jQuery} $item A single item, wrapped with jQuery.
* @return {boolean} Whether it passes the category/filter.
* @private
*/
Shuffle.prototype._doesPassFilter = function( category, $item ) {
if ( $.isFunction( category ) ) {
return category.call( $item[0], $item, this );
// Check each element's data-groups attribute against the given category.
} else {
var groups = $item.data( FILTER_ATTRIBUTE_KEY );
var keys = this.delimeter && !$.isArray( groups ) ?
groups.split( this.delimeter ) :
groups;
return $.inArray(category, keys) > -1;
}
};
/**
* Toggles the filtered and concealed class names.
* @param {jQuery} $filtered Filtered set.
* @param {jQuery} $concealed Concealed set.
* @private
*/
Shuffle.prototype._toggleFilterClasses = function( $filtered, $concealed ) {
$filtered
.removeClass( Shuffle.ClassName.CONCEALED )
.addClass( Shuffle.ClassName.FILTERED );
$concealed
.removeClass( Shuffle.ClassName.FILTERED )
.addClass( Shuffle.ClassName.CONCEALED );
};
/**
* Set the initial css for each item
* @param {jQuery} [$items] Optionally specifiy at set to initialize
*/
Shuffle.prototype._initItems = function( $items ) {
$items = $items || this.$items;
$items.addClass([
Shuffle.ClassName.SHUFFLE_ITEM,
Shuffle.ClassName.FILTERED
].join(' '));
$items.css( this.itemCss ).data('point', new Point()).data('scale', DEFAULT_SCALE);
};
/**
* Updates the filtered item count.
* @private
*/
Shuffle.prototype._updateItemCount = function() {
this.visibleItems = this._getFilteredItems().length;
};
/**
* Sets css transform transition on a an element.
* @param {Element} element Element to set transition on.
* @private
*/
Shuffle.prototype._setTransition = function( element ) {
element.style[ TRANSITION ] = CSS_TRANSFORM + ' ' + this.speed + 'ms ' +
this.easing + ', opacity ' + this.speed + 'ms ' + this.easing;
};
/**
* Sets css transform transition on a group of elements.
* @param {ArrayLike.<Element>} $items Elements to set transitions on.
* @private
*/
Shuffle.prototype._setTransitions = function( $items ) {
$items = $items || this.$items;
each($items, function( el ) {
this._setTransition( el );
}, this);
};
/**
* Sets a transition delay on a collection of elements, making each delay
* greater than the last.
* @param {ArrayLike.<Element>} $collection Array to iterate over.
*/
Shuffle.prototype._setSequentialDelay = function( $collection ) {
if ( !this.supported ) {
return;
}
// $collection can be an array of dom elements or jquery object
each($collection, function( el, i ) {
// This works because the transition-property: transform, opacity;
el.style[ TRANSITION_DELAY ] = '0ms,' + ((i + 1) * this.sequentialFadeDelay) + 'ms';
}, this);
};
Shuffle.prototype._getItems = function() {
return this.$el.children( this.itemSelector );
};
Shuffle.prototype._getFilteredItems = function() {
return this.$items.filter('.' + Shuffle.ClassName.FILTERED);
};
Shuffle.prototype._getConcealedItems = function() {
return this.$items.filter('.' + Shuffle.ClassName.CONCEALED);
};
/**
* Returns the column size, based on column width and sizer options.
* @param {number} containerWidth Size of the parent container.
* @param {number} gutterSize Size of the gutters.
* @return {number}
* @private
*/
Shuffle.prototype._getColumnSize = function( containerWidth, gutterSize ) {
var size;
// If the columnWidth property is a function, then the grid is fluid
if ( $.isFunction( this.columnWidth ) ) {
size = this.columnWidth(containerWidth);
// columnWidth option isn't a function, are they using a sizing element?
} else if ( this.useSizer ) {
size = Shuffle._getOuterWidth(this.sizer);
// if not, how about the explicitly set option?
} else if ( this.columnWidth ) {
size = this.columnWidth;
// or use the size of the first item
} else if ( this.$items.length > 0 ) {
size = Shuffle._getOuterWidth(this.$items[0], true);
// if there's no items, use size of container
} else {
size = containerWidth;
}
// Don't let them set a column width of zero.
if ( size === 0 ) {
size = containerWidth;
}
return size + gutterSize;
};
/**
* Returns the gutter size, based on gutter width and sizer options.
* @param {number} containerWidth Size of the parent container.
* @return {number}
* @private
*/
Shuffle.prototype._getGutterSize = function( containerWidth ) {
var size;
if ( $.isFunction( this.gutterWidth ) ) {
size = this.gutterWidth(containerWidth);
} else if ( this.useSizer ) {
size = Shuffle._getNumberStyle(this.sizer, 'marginLeft');
} else {
size = this.gutterWidth;
}
return size;
};
/**
* Calculate the number of columns to be used. Gets css if using sizer element.
* @param {number} [theContainerWidth] Optionally specify a container width if it's already available.
*/
Shuffle.prototype._setColumns = function( theContainerWidth ) {
var containerWidth = theContainerWidth || Shuffle._getOuterWidth( this.element );
var gutter = this._getGutterSize( containerWidth );
var columnWidth = this._getColumnSize( containerWidth, gutter );
var calculatedColumns = (containerWidth + gutter) / columnWidth;
// Widths given from getComputedStyle are not precise enough...
if ( Math.abs(Math.round(calculatedColumns) - calculatedColumns) < COLUMN_THRESHOLD ) {
// e.g. calculatedColumns = 11.998876
calculatedColumns = Math.round( calculatedColumns );
}
this.cols = Math.max( Math.floor(calculatedColumns), 1 );
this.containerWidth = containerWidth;
this.colWidth = columnWidth;
};
/**
* Adjust the height of the grid
*/
Shuffle.prototype._setContainerSize = function() {
this.$el.css( 'height', this._getContainerSize() );
};
/**
* Based on the column heights, it returns the biggest one.
* @return {number}
* @private
*/
Shuffle.prototype._getContainerSize = function() {
return arrayMax( this.positions );
};
/**
* Fire events with .shuffle namespace
*/
Shuffle.prototype._fire = function( name, args ) {
this.$el.trigger( name + '.' + SHUFFLE, args && args.length ? args : [ this ] );
};
/**
* Zeros out the y columns array, which is used to determine item placement.
* @private
*/
Shuffle.prototype._resetCols = function() {
var i = this.cols;
this.positions = [];
while (i--) {
this.positions.push( 0 );
}
};
/**
* Loops through each item that should be shown and calculates the x, y position.
* @param {Array.<Element>} items Array of items that will be shown/layed out in order in their array.
* Because jQuery collection are always ordered in DOM order, we can't pass a jq collection.
* @param {boolean} [isOnlyPosition=false] If true this will position the items with zero opacity.
*/
Shuffle.prototype._layout = function( items, isOnlyPosition ) {
each(items, function( item ) {
this._layoutItem( item, !!isOnlyPosition );
}, this);
// `_layout` always happens after `_shrink`, so it's safe to process the style
// queue here with styles from the shrink method.
this._processStyleQueue();
// Adjust the height of the container.
this._setContainerSize();
};
/**
* Calculates the position of the item and pushes it onto the style queue.
* @param {Element} item Element which is being positioned.
* @param {boolean} isOnlyPosition Whether to position the item, but with zero
* opacity so that it can fade in later.
* @private
*/
Shuffle.prototype._layoutItem = function( item, isOnlyPosition ) {
var $item = $(item);
var itemData = $item.data();
var currPos = itemData.point;
var currScale = itemData.scale;
var itemSize = {
width: Shuffle._getOuterWidth( item, true ),
height: Shuffle._getOuterHeight( item, true )
};
var pos = this._getItemPosition( itemSize );
// If the item will not change its position, do not add it to the render
// queue. Transitions don't fire when setting a property to the same value.
if ( Point.equals(currPos, pos) && currScale === DEFAULT_SCALE ) {
return;
}
// Save data for shrink
itemData.point = pos;
itemData.scale = DEFAULT_SCALE;
this.styleQueue.push({
$item: $item,
point: pos,
scale: DEFAULT_SCALE,
opacity: isOnlyPosition ? 0 : 1,
skipTransition: isOnlyPosition,
callfront: function() {
if ( !isOnlyPosition ) {
$item.css( 'visibility', 'visible' );
}
},
callback: function() {
if ( isOnlyPosition ) {
$item.css( 'visibility', 'hidden' );
}
}
});
};
/**
* Determine the location of the next item, based on its size.
* @param {{width: number, height: number}} itemSize Object with width and height.
* @return {Point}
* @private
*/
Shuffle.prototype._getItemPosition = function( itemSize ) {
var columnSpan = this._getColumnSpan( itemSize.width, this.colWidth, this.cols );
var setY = this._getColumnSet( columnSpan, this.cols );
// Finds the index of the smallest number in the set.
var shortColumnIndex = this._getShortColumn( setY, this.buffer );
// Position the item
var point = new Point(
Math.round( this.colWidth * shortColumnIndex ),
Math.round( setY[shortColumnIndex] ));
// Update the columns array with the new values for each column.
// e.g. before the update the columns could be [250, 0, 0, 0] for an item
// which spans 2 columns. After it would be [250, itemHeight, itemHeight, 0].
var setHeight = setY[shortColumnIndex] + itemSize.height;
var setSpan = this.cols + 1 - setY.length;
for ( var i = 0; i < setSpan; i++ ) {
this.positions[ shortColumnIndex + i ] = setHeight;
}
return point;
};
/**
* Determine the number of columns an items spans.
* @param {number} itemWidth Width of the item.
* @param {number} columnWidth Width of the column (includes gutter).
* @param {number} columns Total number of columns
* @return {number}
* @private
*/
Shuffle.prototype._getColumnSpan = function( itemWidth, columnWidth, columns ) {
var columnSpan = itemWidth / columnWidth;
// If the difference between the rounded column span number and the
// calculated column span number is really small, round the number to
// make it fit.
if ( Math.abs(Math.round( columnSpan ) - columnSpan ) < COLUMN_THRESHOLD ) {
// e.g. columnSpan = 4.0089945390298745
columnSpan = Math.round( columnSpan );
}
// Ensure the column span is not more than the amount of columns in the whole layout.
return Math.min( Math.ceil( columnSpan ), columns );
};
/**
* Retrieves the column set to use for placement.
* @param {number} columnSpan The number of columns this current item spans.
* @param {number} columns The total columns in the grid.
* @return {Array.<number>} An array of numbers represeting the column set.
* @private
*/
Shuffle.prototype._getColumnSet = function( columnSpan, columns ) {
// The item spans only one column.
if ( columnSpan === 1 ) {
return this.positions;
// The item spans more than one column, figure out how many different
// places it could fit horizontally.
// The group count is the number of places within the positions this block
// could fit, ignoring the current positions of items.
// Imagine a 2 column brick as the second item in a 4 column grid with
// 10px height each. Find the places it would fit:
// [10, 0, 0, 0]
// | | |
// * * *
//
// Then take the places which fit and get the bigger of the two:
// max([10, 0]), max([0, 0]), max([0, 0]) = [10, 0, 0]
//
// Next, find the first smallest number (the short column).
// [10, 0, 0]
// |
// *
//
// And that's where it should be placed!
} else {
var groupCount = columns + 1 - columnSpan;
var groupY = [];
// For how many possible positions for this item there are.
for ( var i = 0; i < groupCount; i++ ) {
// Find the bigger value for each place it could fit.
groupY[i] = arrayMax( this.positions.slice( i, i + columnSpan ) );
}
return groupY;
}
};
/**
* Find index of short column, the first from the left where this item will go.
*
* @param {Array.<number>} positions The array to search for the smallest number.
* @param {number} buffer Optional buffer which is very useful when the height
* is a percentage of the width.
* @return {number} Index of the short column.
* @private
*/
Shuffle.prototype._getShortColumn = function( positions, buffer ) {
var minPosition = arrayMin( positions );
for (var i = 0, len = positions.length; i < len; i++) {
if ( positions[i] >= minPosition - buffer && positions[i] <= minPosition + buffer ) {
return i;
}
}
return 0;
};
/**
* Hides the elements that don't match our filter.
* @param {jQuery} $collection jQuery collection to shrink.
* @private
*/
Shuffle.prototype._shrink = function( $collection ) {
var $concealed = $collection || this._getConcealedItems();
each($concealed, function( item ) {
var $item = $(item);
var itemData = $item.data();
// Continuing would add a transitionend event listener to the element, but
// that listener would not execute because the transform and opacity would
// stay the same.
if ( itemData.scale === CONCEALED_SCALE ) {
return;
}
itemData.scale = CONCEALED_SCALE;
this.styleQueue.push({
$item: $item,
point: itemData.point,
scale : CONCEALED_SCALE,
opacity: 0,
callback: function() {
$item.css( 'visibility', 'hidden' );
}
});
}, this);
};
/**
* Resize handler.
* @private
*/
Shuffle.prototype._onResize = function() {
// If shuffle is disabled, destroyed, don't do anything
if ( !this.enabled || this.destroyed || this.isTransitioning ) {
return;
}
// Will need to check height in the future if it's layed out horizontaly
var containerWidth = Shuffle._getOuterWidth( this.element );
// containerWidth hasn't changed, don't do anything
if ( containerWidth === this.containerWidth ) {
return;
}
this.update();
};
/**
* Returns styles for either jQuery animate or transition.
* @param {Object} opts Transition options.
* @return {!Object} Transforms for transitions, left/top for animate.
* @private
*/
Shuffle.prototype._getStylesForTransition = function( opts ) {
var styles = {
opacity: opts.opacity
};
if ( this.supported ) {
styles[ TRANSFORM ] = Shuffle._getItemTransformString( opts.point, opts.scale );
} else {
styles.left = opts.point.x;
styles.top = opts.point.y;
}
return styles;
};
/**
* Transitions an item in the grid
*
* @param {Object} opts options.
* @param {jQuery} opts.$item jQuery object representing the current item.
* @param {Point} opts.point A point object with the x and y coordinates.
* @param {number} opts.scale Amount to scale the item.
* @param {number} opts.opacity Opacity of the item.
* @param {Function} opts.callback Complete function for the animation.
* @param {Function} opts.callfront Function to call before transitioning.
* @private
*/
Shuffle.prototype._transition = function( opts ) {
var styles = this._getStylesForTransition( opts );
this._startItemAnimation( opts.$item, styles, opts.callfront || $.noop, opts.callback || $.noop );
};
Shuffle.prototype._startItemAnimation = function( $item, styles, callfront, callback ) {
// Transition end handler removes its listener.
function handleTransitionEnd( evt ) {
// Make sure this event handler has not bubbled up from a child.
if ( evt.target === evt.currentTarget ) {
$( evt.target ).off( TRANSITIONEND, handleTransitionEnd );
callback();
}
}
callfront();
// Transitions are not set until shuffle has loaded to avoid the initial transition.
if ( !this.initialized ) {
$item.css( styles );
callback();
return;
}
// Use CSS Transforms if we have them
if ( this.supported ) {
$item.css( styles );
$item.on( TRANSITIONEND, handleTransitionEnd );
// Use jQuery to animate left/top
} else {
// Save the deferred object which jQuery returns.
var anim = $item.stop( true ).animate( styles, this.speed, 'swing', callback );
// Push the animation to the list of pending animations.
this._animations.push( anim.promise() );
}
};
/**
* Execute the styles gathered in the style queue. This applies styles to elements,
* triggering transitions.
* @param {boolean} noLayout Whether to trigger a layout event.
* @private
*/
Shuffle.prototype._processStyleQueue = function( noLayout ) {
var $transitions = $();
// Iterate over the queue and keep track of ones that use transitions.
each(this.styleQueue, function( transitionObj ) {
if ( transitionObj.skipTransition ) {
this._styleImmediately( transitionObj );
} else {
$transitions = $transitions.add( transitionObj.$item );
this._transition( transitionObj );
}
}, this);
if ( $transitions.length > 0 && this.initialized ) {
// Set flag that shuffle is currently in motion.
this.isTransitioning = true;
if ( this.supported ) {
this._whenCollectionDone( $transitions, TRANSITIONEND, this._movementFinished );
// The _transition function appends a promise to the animations array.
// When they're all complete, do things.
} else {
this._whenAnimationsDone( this._movementFinished );
}
// A call to layout happened, but none of the newly filtered items will
// change position. Asynchronously fire the callback here.
} else if ( !noLayout ) {
defer( this._layoutEnd, this );
}
// Remove everything in the style queue
this.styleQueue.length = 0;
};
/**
* Apply styles without a transition.
* @param {Object} opts Transitions options object.
* @private
*/
Shuffle.prototype._styleImmediately = function( opts ) {
Shuffle._skipTransition(opts.$item[0], function() {
opts.$item.css( this._getStylesForTransition( opts ) );
}, this);
};
Shuffle.prototype._movementFinished = function() {
this.isTransitioning = false;
this._layoutEnd();
};
Shuffle.prototype._layoutEnd = function() {
this._fire( Shuffle.EventType.LAYOUT );
};
Shuffle.prototype._addItems = function( $newItems, addToEnd, isSequential ) {
// Add classes and set initial positions.
this._initItems( $newItems );
// Add transition to each item.
this._setTransitions( $newItems );
// Update the list of
this.$items = this._getItems();
// Shrink all items (without transitions).
this._shrink( $newItems );
each(this.styleQueue, function( transitionObj ) {
transitionObj.skipTransition = true;
});
// Apply shrink positions, but do not cause a layout event.
this._processStyleQueue( true );
if ( addToEnd ) {
this._addItemsToEnd( $newItems, isSequential );
} else {
this.shuffle( this.lastFilter );
}
};
Shuffle.prototype._addItemsToEnd = function( $newItems, isSequential ) {
// Get ones that passed the current filter
var $passed = this._filter( null, $newItems );
var passed = $passed.get();
// How many filtered elements?
this._updateItemCount();
this._layout( passed, true );
if ( isSequential && this.supported ) {
this._setSequentialDelay( passed );
}
this._revealAppended( passed );
};
/**
* Triggers appended elements to fade in.
* @param {ArrayLike.<Element>} $newFilteredItems Collection of elements.
* @private
*/
Shuffle.prototype._revealAppended = function( newFilteredItems ) {
defer(function() {
each(newFilteredItems, function( el ) {
var $item = $( el );
this._transition({
$item: $item,
opacity: 1,
point: $item.data('point'),
scale: DEFAULT_SCALE
});
}, this);
this._whenCollectionDone($(newFilteredItems), TRANSITIONEND, function() {
$(newFilteredItems).css( TRANSITION_DELAY, '0ms' );
this._movementFinished();
});
}, this, this.revealAppendedDelay);
};
/**
* Execute a function when an event has been triggered for every item in a collection.
* @param {jQuery} $collection Collection of elements.
* @param {string} eventName Event to listen for.
* @param {Function} callback Callback to execute when they're done.
* @private
*/
Shuffle.prototype._whenCollectionDone = function( $collection, eventName, callback ) {
var done = 0;
var items = $collection.length;
var self = this;
function handleEventName( evt ) {
if ( evt.target === evt.currentTarget ) {
$( evt.target ).off( eventName, handleEventName );
done++;
// Execute callback if all items have emitted the correct event.
if ( done === items ) {
callback.call( self );
}
}
}
// Bind the event to all items.
$collection.on( eventName, handleEventName );
};
/**
* Execute a callback after jQuery `animate` for a collection has finished.
* @param {Function} callback Callback to execute when they're done.
* @private
*/
Shuffle.prototype._whenAnimationsDone = function( callback ) {
$.when.apply( null, this._animations ).always( $.proxy( function() {
this._animations.length = 0;
callback.call( this );
}, this ));
};
/**
* Public Methods
*/
/**
* The magic. This is what makes the plugin 'shuffle'
* @param {string|Function} [category] Category to filter by. Can be a function
* @param {Object} [sortObj] A sort object which can sort the filtered set
*/
Shuffle.prototype.shuffle = function( category, sortObj ) {
if ( !this.enabled || this.isTransitioning ) {
return;
}
if ( !category ) {
category = ALL_ITEMS;
}
this._filter( category );
// How many filtered elements?
this._updateItemCount();
// Shrink each concealed item
this._shrink();
// Update transforms on .filtered elements so they will animate to their new positions
this.sort( sortObj );
};
/**
* Gets the .filtered elements, sorts them, and passes them to layout.
* @param {Object} opts the options object for the sorted plugin
*/
Shuffle.prototype.sort = function( opts ) {
if ( this.enabled && !this.isTransitioning ) {
this._resetCols();
var sortOptions = opts || this.lastSort;
var items = this._getFilteredItems().sorted( sortOptions );
this._layout( items );
this.lastSort = sortOptions;
}
};
/**
* Reposition everything.
* @param {boolean} isOnlyLayout If true, column and gutter widths won't be
* recalculated.
*/
Shuffle.prototype.update = function( isOnlyLayout ) {
if ( this.enabled && !this.isTransitioning ) {
if ( !isOnlyLayout ) {
// Get updated colCount
this._setColumns();
}
// Layout items
this.sort();
}
};
/**
* Use this instead of `update()` if you don't need the columns and gutters updated
* Maybe an image inside `shuffle` loaded (and now has a height), which means calculations
* could be off.
*/
Shuffle.prototype.layout = function() {
this.update( true );
};
/**
* New items have been appended to shuffle. Fade them in sequentially
* @param {jQuery} $newItems jQuery collection of new items
* @param {boolean} [addToEnd=false] If true, new items will be added to the end / bottom
* of the items. If not true, items will be mixed in with the current sort order.
* @param {boolean} [isSequential=true] If false, new items won't sequentially fade in
*/
Shuffle.prototype.appended = function( $newItems, addToEnd, isSequential ) {
this._addItems( $newItems, addToEnd === true, isSequential !== false );
};
/**
* Disables shuffle from updating dimensions and layout on resize
*/
Shuffle.prototype.disable = function() {
this.enabled = false;
};
/**
* Enables shuffle again
* @param {boolean} [isUpdateLayout=true] if undefined, shuffle will update columns and gutters
*/
Shuffle.prototype.enable = function( isUpdateLayout ) {
this.enabled = true;
if ( isUpdateLayout !== false ) {
this.update();
}
};
/**
* Remove 1 or more shuffle items
* @param {jQuery} $collection A jQuery object containing one or more element in shuffle
* @return {Shuffle} The shuffle object
*/
Shuffle.prototype.remove = function( $collection ) {
// If this isn't a jquery object, exit
if ( !$collection.length || !$collection.jquery ) {
return;
}
function handleRemoved() {
// Remove the collection in the callback
$collection.remove();
// Update things now that elements have been removed.
this.$items = this._getItems();
this._updateItemCount();
this._fire( Shuffle.EventType.REMOVED, [ $collection, this ] );
// Let it get garbage collected
$collection = null;
}
// Hide collection first.
this._toggleFilterClasses( $(), $collection );
this._shrink( $collection );
this.sort();
this.$el.one( Shuffle.EventType.LAYOUT + '.' + SHUFFLE, $.proxy( handleRemoved, this ) );
};
/**
* Destroys shuffle, removes events, styles, and classes
*/
Shuffle.prototype.destroy = function() {
// If there is more than one shuffle instance on the page,
// removing the resize handler from the window would remove them
// all. This is why a unique value is needed.
$window.off('.' + this.unique);
// Reset container styles
this.$el
.removeClass( SHUFFLE )
.removeAttr('style')
.removeData( SHUFFLE );
// Reset individual item styles
this.$items
.removeAttr('style')
.removeData('point')
.removeData('scale')
.removeClass([
Shuffle.ClassName.CONCEALED,
Shuffle.ClassName.FILTERED,
Shuffle.ClassName.SHUFFLE_ITEM
].join(' '));
// Null DOM references
this.$items = null;
this.$el = null;
this.sizer = null;
this.element = null;
// Set a flag so if a debounced resize has been triggered,
// it can first check if it is actually destroyed and not doing anything
this.destroyed = true;
};
// Plugin definition
$.fn.shuffle = function( opts ) {
var args = Array.prototype.slice.call( arguments, 1 );
return this.each(function() {
var $this = $( this );
var shuffle = $this.data( SHUFFLE );
// If we don't have a stored shuffle, make a new one and save it
if ( !shuffle ) {
shuffle = new Shuffle( this, opts );
$this.data( SHUFFLE, shuffle );
} else if ( typeof opts === 'string' && shuffle[ opts ] ) {
shuffle[ opts ].apply( shuffle, args );
}
});
};
// http://stackoverflow.com/a/962890/373422
function randomize( array ) {
var tmp, current;
var top = array.length;
if ( !top ) {
return array;
}
while ( --top ) {
current = Math.floor( Math.random() * (top + 1) );
tmp = array[ current ];
array[ current ] = array[ top ];
array[ top ] = tmp;
}
return array;
}
// You can return `undefined` from the `by` function to revert to DOM order
// This plugin does NOT return a jQuery object. It returns a plain array because
// jQuery sorts everything in DOM order.
$.fn.sorted = function(options) {
var opts = $.extend({}, $.fn.sorted.defaults, options);
var arr = this.get();
var revert = false;
if ( !arr.length ) {
return [];
}
if ( opts.randomize ) {
return randomize( arr );
}
// Sort the elements by the opts.by function.
// If we don't have opts.by, default to DOM order
if ( $.isFunction( opts.by ) ) {
arr.sort(function(a, b) {
// Exit early if we already know we want to revert
if ( revert ) {
return 0;
}
var valA = opts.by($(a));
var valB = opts.by($(b));
// If both values are undefined, use the DOM order
if ( valA === undefined && valB === undefined ) {
revert = true;
return 0;
}
if ( valA < valB || valA === 'sortFirst' || valB === 'sortLast' ) {
return -1;
}
if ( valA > valB || valA === 'sortLast' || valB === 'sortFirst' ) {
return 1;
}
return 0;
});
}
// Revert to the original array if necessary
if ( revert ) {
return this.get();
}
if ( opts.reverse ) {
arr.reverse();
}
return arr;
};
$.fn.sorted.defaults = {
reverse: false, // Use array.reverse() to reverse the results
by: null, // Sorting function
randomize: false // If true, this will skip the sorting and return a randomized order in the array
};
return Shuffle;
});
/*!
* Stellar.js v0.6.2
* http://markdalgleish.com/projects/stellar.js
*
* Copyright 2013, Mark Dalgleish
* This content is released under the MIT license
* http://markdalgleish.mit-license.org
*/
;(function($, window, document, undefined) {
var pluginName = 'stellar',
defaults = {
scrollProperty: 'scroll',
positionProperty: 'position',
horizontalScrolling: true,
verticalScrolling: true,
horizontalOffset: 0,
verticalOffset: 0,
responsive: false,
parallaxBackgrounds: true,
parallaxElements: true,
hideDistantElements: true,
hideElement: function($elem) { $elem.hide(); },
showElement: function($elem) { $elem.show(); }
},
scrollProperty = {
scroll: {
getLeft: function($elem) { return $elem.scrollLeft(); },
setLeft: function($elem, val) { $elem.scrollLeft(val); },
getTop: function($elem) { return $elem.scrollTop(); },
setTop: function($elem, val) { $elem.scrollTop(val); }
},
position: {
getLeft: function($elem) { return parseInt($elem.css('left'), 10) * -1; },
getTop: function($elem) { return parseInt($elem.css('top'), 10) * -1; }
},
margin: {
getLeft: function($elem) { return parseInt($elem.css('margin-left'), 10) * -1; },
getTop: function($elem) { return parseInt($elem.css('margin-top'), 10) * -1; }
},
transform: {
getLeft: function($elem) {
var computedTransform = getComputedStyle($elem[0])[prefixedTransform];
return (computedTransform !== 'none' ? parseInt(computedTransform.match(/(-?[0-9]+)/g)[4], 10) * -1 : 0);
},
getTop: function($elem) {
var computedTransform = getComputedStyle($elem[0])[prefixedTransform];
return (computedTransform !== 'none' ? parseInt(computedTransform.match(/(-?[0-9]+)/g)[5], 10) * -1 : 0);
}
}
},
positionProperty = {
position: {
setLeft: function($elem, left) { $elem.css('left', left); },
setTop: function($elem, top) { $elem.css('top', top); }
},
transform: {
setPosition: function($elem, left, startingLeft, top, startingTop) {
$elem[0].style[prefixedTransform] = 'translate3d(' + (left - startingLeft) + 'px, ' + (top - startingTop) + 'px, 0)';
}
}
},
// Returns a function which adds a vendor prefix to any CSS property name
vendorPrefix = (function() {
var prefixes = /^(Moz|Webkit|Khtml|O|ms|Icab)(?=[A-Z])/,
style = $('script')[0].style,
prefix = '',
prop;
for (prop in style) {
if (prefixes.test(prop)) {
prefix = prop.match(prefixes)[0];
break;
}
}
if ('WebkitOpacity' in style) { prefix = 'Webkit'; }
if ('KhtmlOpacity' in style) { prefix = 'Khtml'; }
return function(property) {
return prefix + (prefix.length > 0 ? property.charAt(0).toUpperCase() + property.slice(1) : property);
};
}()),
prefixedTransform = vendorPrefix('transform'),
supportsBackgroundPositionXY = $('<div />', { style: 'background:#fff' }).css('background-position-x') !== undefined,
setBackgroundPosition = (supportsBackgroundPositionXY ?
function($elem, x, y) {
$elem.css({
'background-position-x': x,
'background-position-y': y
});
} :
function($elem, x, y) {
$elem.css('background-position', x + ' ' + y);
}
),
getBackgroundPosition = (supportsBackgroundPositionXY ?
function($elem) {
return [
$elem.css('background-position-x'),
$elem.css('background-position-y')
];
} :
function($elem) {
return $elem.css('background-position').split(' ');
}
),
requestAnimFrame = (
window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback) {
setTimeout(callback, 1000 / 60);
}
);
function Plugin(element, options) {
this.element = element;
this.options = $.extend({}, defaults, options);
this._defaults = defaults;
this._name = pluginName;
this.init();
}
Plugin.prototype = {
init: function() {
this.options.name = pluginName + '_' + Math.floor(Math.random() * 1e9);
this._defineElements();
this._defineGetters();
this._defineSetters();
this._handleWindowLoadAndResize();
this._detectViewport();
this.refresh({ firstLoad: true });
if (this.options.scrollProperty === 'scroll') {
this._handleScrollEvent();
} else {
this._startAnimationLoop();
}
},
_defineElements: function() {
if (this.element === document.body) this.element = window;
this.$scrollElement = $(this.element);
this.$element = (this.element === window ? $('body') : this.$scrollElement);
this.$viewportElement = (this.options.viewportElement !== undefined ? $(this.options.viewportElement) : (this.$scrollElement[0] === window || this.options.scrollProperty === 'scroll' ? this.$scrollElement : this.$scrollElement.parent()) );
},
_defineGetters: function() {
var self = this,
scrollPropertyAdapter = scrollProperty[self.options.scrollProperty];
this._getScrollLeft = function() {
return scrollPropertyAdapter.getLeft(self.$scrollElement);
};
this._getScrollTop = function() {
return scrollPropertyAdapter.getTop(self.$scrollElement);
};
},
_defineSetters: function() {
var self = this,
scrollPropertyAdapter = scrollProperty[self.options.scrollProperty],
positionPropertyAdapter = positionProperty[self.options.positionProperty],
setScrollLeft = scrollPropertyAdapter.setLeft,
setScrollTop = scrollPropertyAdapter.setTop;
this._setScrollLeft = (typeof setScrollLeft === 'function' ? function(val) {
setScrollLeft(self.$scrollElement, val);
} : $.noop);
this._setScrollTop = (typeof setScrollTop === 'function' ? function(val) {
setScrollTop(self.$scrollElement, val);
} : $.noop);
this._setPosition = positionPropertyAdapter.setPosition ||
function($elem, left, startingLeft, top, startingTop) {
if (self.options.horizontalScrolling) {
positionPropertyAdapter.setLeft($elem, left, startingLeft);
}
if (self.options.verticalScrolling) {
positionPropertyAdapter.setTop($elem, top, startingTop);
}
};
},
_handleWindowLoadAndResize: function() {
var self = this,
$window = $(window);
if (self.options.responsive) {
$window.bind('load.' + this.name, function() {
self.refresh();
});
}
$window.bind('resize.' + this.name, function() {
self._detectViewport();
if (self.options.responsive) {
self.refresh();
}
});
},
refresh: function(options) {
var self = this,
oldLeft = self._getScrollLeft(),
oldTop = self._getScrollTop();
if (!options || !options.firstLoad) {
this._reset();
}
this._setScrollLeft(0);
this._setScrollTop(0);
this._setOffsets();
this._findParticles();
this._findBackgrounds();
// Fix for WebKit background rendering bug
if (options && options.firstLoad && /WebKit/.test(navigator.userAgent)) {
$(window).load(function() {
var oldLeft = self._getScrollLeft(),
oldTop = self._getScrollTop();
self._setScrollLeft(oldLeft + 1);
self._setScrollTop(oldTop + 1);
self._setScrollLeft(oldLeft);
self._setScrollTop(oldTop);
});
}
this._setScrollLeft(oldLeft);
this._setScrollTop(oldTop);
},
_detectViewport: function() {
var viewportOffsets = this.$viewportElement.offset(),
hasOffsets = viewportOffsets !== null && viewportOffsets !== undefined;
this.viewportWidth = this.$viewportElement.width();
this.viewportHeight = this.$viewportElement.height();
this.viewportOffsetTop = (hasOffsets ? viewportOffsets.top : 0);
this.viewportOffsetLeft = (hasOffsets ? viewportOffsets.left : 0);
},
_findParticles: function() {
var self = this,
scrollLeft = this._getScrollLeft(),
scrollTop = this._getScrollTop();
if (this.particles !== undefined) {
for (var i = this.particles.length - 1; i >= 0; i--) {
this.particles[i].$element.data('stellar-elementIsActive', undefined);
}
}
this.particles = [];
if (!this.options.parallaxElements) return;
this.$element.find('[data-stellar-ratio]').each(function(i) {
var $this = $(this),
horizontalOffset,
verticalOffset,
positionLeft,
positionTop,
marginLeft,
marginTop,
$offsetParent,
offsetLeft,
offsetTop,
parentOffsetLeft = 0,
parentOffsetTop = 0,
tempParentOffsetLeft = 0,
tempParentOffsetTop = 0;
// Ensure this element isn't already part of another scrolling element
if (!$this.data('stellar-elementIsActive')) {
$this.data('stellar-elementIsActive', this);
} else if ($this.data('stellar-elementIsActive') !== this) {
return;
}
self.options.showElement($this);
// Save/restore the original top and left CSS values in case we refresh the particles or destroy the instance
if (!$this.data('stellar-startingLeft')) {
$this.data('stellar-startingLeft', $this.css('left'));
$this.data('stellar-startingTop', $this.css('top'));
} else {
$this.css('left', $this.data('stellar-startingLeft'));
$this.css('top', $this.data('stellar-startingTop'));
}
positionLeft = $this.position().left;
positionTop = $this.position().top;
// Catch-all for margin top/left properties (these evaluate to 'auto' in IE7 and IE8)
marginLeft = ($this.css('margin-left') === 'auto') ? 0 : parseInt($this.css('margin-left'), 10);
marginTop = ($this.css('margin-top') === 'auto') ? 0 : parseInt($this.css('margin-top'), 10);
offsetLeft = $this.offset().left - marginLeft;
offsetTop = $this.offset().top - marginTop;
// Calculate the offset parent
$this.parents().each(function() {
var $this = $(this);
if ($this.data('stellar-offset-parent') === true) {
parentOffsetLeft = tempParentOffsetLeft;
parentOffsetTop = tempParentOffsetTop;
$offsetParent = $this;
return false;
} else {
tempParentOffsetLeft += $this.position().left;
tempParentOffsetTop += $this.position().top;
}
});
// Detect the offsets
horizontalOffset = ($this.data('stellar-horizontal-offset') !== undefined ? $this.data('stellar-horizontal-offset') : ($offsetParent !== undefined && $offsetParent.data('stellar-horizontal-offset') !== undefined ? $offsetParent.data('stellar-horizontal-offset') : self.horizontalOffset));
verticalOffset = ($this.data('stellar-vertical-offset') !== undefined ? $this.data('stellar-vertical-offset') : ($offsetParent !== undefined && $offsetParent.data('stellar-vertical-offset') !== undefined ? $offsetParent.data('stellar-vertical-offset') : self.verticalOffset));
// Add our object to the particles collection
self.particles.push({
$element: $this,
$offsetParent: $offsetParent,
isFixed: $this.css('position') === 'fixed',
horizontalOffset: horizontalOffset,
verticalOffset: verticalOffset,
startingPositionLeft: positionLeft,
startingPositionTop: positionTop,
startingOffsetLeft: offsetLeft,
startingOffsetTop: offsetTop,
parentOffsetLeft: parentOffsetLeft,
parentOffsetTop: parentOffsetTop,
stellarRatio: ($this.data('stellar-ratio') !== undefined ? $this.data('stellar-ratio') : 1),
width: $this.outerWidth(true),
height: $this.outerHeight(true),
isHidden: false
});
});
},
_findBackgrounds: function() {
var self = this,
scrollLeft = this._getScrollLeft(),
scrollTop = this._getScrollTop(),
$backgroundElements;
this.backgrounds = [];
if (!this.options.parallaxBackgrounds) return;
$backgroundElements = this.$element.find('[data-stellar-background-ratio]');
if (this.$element.data('stellar-background-ratio')) {
$backgroundElements = $backgroundElements.add(this.$element);
}
$backgroundElements.each(function() {
var $this = $(this),
backgroundPosition = getBackgroundPosition($this),
horizontalOffset,
verticalOffset,
positionLeft,
positionTop,
marginLeft,
marginTop,
offsetLeft,
offsetTop,
$offsetParent,
parentOffsetLeft = 0,
parentOffsetTop = 0,
tempParentOffsetLeft = 0,
tempParentOffsetTop = 0;
// Ensure this element isn't already part of another scrolling element
if (!$this.data('stellar-backgroundIsActive')) {
$this.data('stellar-backgroundIsActive', this);
} else if ($this.data('stellar-backgroundIsActive') !== this) {
return;
}
// Save/restore the original top and left CSS values in case we destroy the instance
if (!$this.data('stellar-backgroundStartingLeft')) {
$this.data('stellar-backgroundStartingLeft', backgroundPosition[0]);
$this.data('stellar-backgroundStartingTop', backgroundPosition[1]);
} else {
setBackgroundPosition($this, $this.data('stellar-backgroundStartingLeft'), $this.data('stellar-backgroundStartingTop'));
}
// Catch-all for margin top/left properties (these evaluate to 'auto' in IE7 and IE8)
marginLeft = ($this.css('margin-left') === 'auto') ? 0 : parseInt($this.css('margin-left'), 10);
marginTop = ($this.css('margin-top') === 'auto') ? 0 : parseInt($this.css('margin-top'), 10);
offsetLeft = $this.offset().left - marginLeft - scrollLeft;
offsetTop = $this.offset().top - marginTop - scrollTop;
// Calculate the offset parent
$this.parents().each(function() {
var $this = $(this);
if ($this.data('stellar-offset-parent') === true) {
parentOffsetLeft = tempParentOffsetLeft;
parentOffsetTop = tempParentOffsetTop;
$offsetParent = $this;
return false;
} else {
tempParentOffsetLeft += $this.position().left;
tempParentOffsetTop += $this.position().top;
}
});
// Detect the offsets
horizontalOffset = ($this.data('stellar-horizontal-offset') !== undefined ? $this.data('stellar-horizontal-offset') : ($offsetParent !== undefined && $offsetParent.data('stellar-horizontal-offset') !== undefined ? $offsetParent.data('stellar-horizontal-offset') : self.horizontalOffset));
verticalOffset = ($this.data('stellar-vertical-offset') !== undefined ? $this.data('stellar-vertical-offset') : ($offsetParent !== undefined && $offsetParent.data('stellar-vertical-offset') !== undefined ? $offsetParent.data('stellar-vertical-offset') : self.verticalOffset));
self.backgrounds.push({
$element: $this,
$offsetParent: $offsetParent,
isFixed: $this.css('background-attachment') === 'fixed',
horizontalOffset: horizontalOffset,
verticalOffset: verticalOffset,
startingValueLeft: backgroundPosition[0],
startingValueTop: backgroundPosition[1],
startingBackgroundPositionLeft: (isNaN(parseInt(backgroundPosition[0], 10)) ? 0 : parseInt(backgroundPosition[0], 10)),
startingBackgroundPositionTop: (isNaN(parseInt(backgroundPosition[1], 10)) ? 0 : parseInt(backgroundPosition[1], 10)),
startingPositionLeft: $this.position().left,
startingPositionTop: $this.position().top,
startingOffsetLeft: offsetLeft,
startingOffsetTop: offsetTop,
parentOffsetLeft: parentOffsetLeft,
parentOffsetTop: parentOffsetTop,
stellarRatio: ($this.data('stellar-background-ratio') === undefined ? 1 : $this.data('stellar-background-ratio'))
});
});
},
_reset: function() {
var particle,
startingPositionLeft,
startingPositionTop,
background,
i;
for (i = this.particles.length - 1; i >= 0; i--) {
particle = this.particles[i];
startingPositionLeft = particle.$element.data('stellar-startingLeft');
startingPositionTop = particle.$element.data('stellar-startingTop');
this._setPosition(particle.$element, startingPositionLeft, startingPositionLeft, startingPositionTop, startingPositionTop);
this.options.showElement(particle.$element);
particle.$element.data('stellar-startingLeft', null).data('stellar-elementIsActive', null).data('stellar-backgroundIsActive', null);
}
for (i = this.backgrounds.length - 1; i >= 0; i--) {
background = this.backgrounds[i];
background.$element.data('stellar-backgroundStartingLeft', null).data('stellar-backgroundStartingTop', null);
setBackgroundPosition(background.$element, background.startingValueLeft, background.startingValueTop);
}
},
destroy: function() {
this._reset();
this.$scrollElement.unbind('resize.' + this.name).unbind('scroll.' + this.name);
this._animationLoop = $.noop;
$(window).unbind('load.' + this.name).unbind('resize.' + this.name);
},
_setOffsets: function() {
var self = this,
$window = $(window);
$window.unbind('resize.horizontal-' + this.name).unbind('resize.vertical-' + this.name);
if (typeof this.options.horizontalOffset === 'function') {
this.horizontalOffset = this.options.horizontalOffset();
$window.bind('resize.horizontal-' + this.name, function() {
self.horizontalOffset = self.options.horizontalOffset();
});
} else {
this.horizontalOffset = this.options.horizontalOffset;
}
if (typeof this.options.verticalOffset === 'function') {
this.verticalOffset = this.options.verticalOffset();
$window.bind('resize.vertical-' + this.name, function() {
self.verticalOffset = self.options.verticalOffset();
});
} else {
this.verticalOffset = this.options.verticalOffset;
}
},
_repositionElements: function() {
var scrollLeft = this._getScrollLeft(),
scrollTop = this._getScrollTop(),
horizontalOffset,
verticalOffset,
particle,
fixedRatioOffset,
background,
bgLeft,
bgTop,
isVisibleVertical = true,
isVisibleHorizontal = true,
newPositionLeft,
newPositionTop,
newOffsetLeft,
newOffsetTop,
i;
// First check that the scroll position or container size has changed
if (this.currentScrollLeft === scrollLeft && this.currentScrollTop === scrollTop && this.currentWidth === this.viewportWidth && this.currentHeight === this.viewportHeight) {
return;
} else {
this.currentScrollLeft = scrollLeft;
this.currentScrollTop = scrollTop;
this.currentWidth = this.viewportWidth;
this.currentHeight = this.viewportHeight;
}
// Reposition elements
for (i = this.particles.length - 1; i >= 0; i--) {
particle = this.particles[i];
fixedRatioOffset = (particle.isFixed ? 1 : 0);
// Calculate position, then calculate what the particle's new offset will be (for visibility check)
if (this.options.horizontalScrolling) {
newPositionLeft = (scrollLeft + particle.horizontalOffset + this.viewportOffsetLeft + particle.startingPositionLeft - particle.startingOffsetLeft + particle.parentOffsetLeft) * -(particle.stellarRatio + fixedRatioOffset - 1) + particle.startingPositionLeft;
newOffsetLeft = newPositionLeft - particle.startingPositionLeft + particle.startingOffsetLeft;
} else {
newPositionLeft = particle.startingPositionLeft;
newOffsetLeft = particle.startingOffsetLeft;
}
if (this.options.verticalScrolling) {
newPositionTop = (scrollTop + particle.verticalOffset + this.viewportOffsetTop + particle.startingPositionTop - particle.startingOffsetTop + particle.parentOffsetTop) * -(particle.stellarRatio + fixedRatioOffset - 1) + particle.startingPositionTop;
newOffsetTop = newPositionTop - particle.startingPositionTop + particle.startingOffsetTop;
} else {
newPositionTop = particle.startingPositionTop;
newOffsetTop = particle.startingOffsetTop;
}
// Check visibility
if (this.options.hideDistantElements) {
isVisibleHorizontal = !this.options.horizontalScrolling || newOffsetLeft + particle.width > (particle.isFixed ? 0 : scrollLeft) && newOffsetLeft < (particle.isFixed ? 0 : scrollLeft) + this.viewportWidth + this.viewportOffsetLeft;
isVisibleVertical = !this.options.verticalScrolling || newOffsetTop + particle.height > (particle.isFixed ? 0 : scrollTop) && newOffsetTop < (particle.isFixed ? 0 : scrollTop) + this.viewportHeight + this.viewportOffsetTop;
}
if (isVisibleHorizontal && isVisibleVertical) {
if (particle.isHidden) {
this.options.showElement(particle.$element);
particle.isHidden = false;
}
this._setPosition(particle.$element, newPositionLeft, particle.startingPositionLeft, newPositionTop, particle.startingPositionTop);
} else {
if (!particle.isHidden) {
this.options.hideElement(particle.$element);
particle.isHidden = true;
}
}
}
// Reposition backgrounds
for (i = this.backgrounds.length - 1; i >= 0; i--) {
background = this.backgrounds[i];
fixedRatioOffset = (background.isFixed ? 0 : 1);
bgLeft = (this.options.horizontalScrolling ? (scrollLeft + background.horizontalOffset - this.viewportOffsetLeft - background.startingOffsetLeft + background.parentOffsetLeft - background.startingBackgroundPositionLeft) * (fixedRatioOffset - background.stellarRatio) + 'px' : background.startingValueLeft);
bgTop = (this.options.verticalScrolling ? (scrollTop + background.verticalOffset - this.viewportOffsetTop - background.startingOffsetTop + background.parentOffsetTop - background.startingBackgroundPositionTop) * (fixedRatioOffset - background.stellarRatio) + 'px' : background.startingValueTop);
setBackgroundPosition(background.$element, bgLeft, bgTop);
}
},
_handleScrollEvent: function() {
var self = this,
ticking = false;
var update = function() {
self._repositionElements();
ticking = false;
};
var requestTick = function() {
if (!ticking) {
requestAnimFrame(update);
ticking = true;
}
};
this.$scrollElement.bind('scroll.' + this.name, requestTick);
requestTick();
},
_startAnimationLoop: function() {
var self = this;
this._animationLoop = function() {
requestAnimFrame(self._animationLoop);
self._repositionElements();
};
this._animationLoop();
}
};
$.fn[pluginName] = function (options) {
var args = arguments;
if (options === undefined || typeof options === 'object') {
return this.each(function () {
if (!$.data(this, 'plugin_' + pluginName)) {
$.data(this, 'plugin_' + pluginName, new Plugin(this, options));
}
});
} else if (typeof options === 'string' && options[0] !== '_' && options !== 'init') {
return this.each(function () {
var instance = $.data(this, 'plugin_' + pluginName);
if (instance instanceof Plugin && typeof instance[options] === 'function') {
instance[options].apply(instance, Array.prototype.slice.call(args, 1));
}
if (options === 'destroy') {
$.data(this, 'plugin_' + pluginName, null);
}
});
}
};
$[pluginName] = function(options) {
var $window = $(window);
return $window.stellar.apply($window, Array.prototype.slice.call(arguments, 0));
};
// Expose the scroll and position property function hashes so they can be extended
$[pluginName].scrollProperty = scrollProperty;
$[pluginName].positionProperty = positionProperty;
// Expose the plugin class so it can be modified
window.Stellar = Plugin;
}(jQuery, this, document));
\ No newline at end of file
/*
* jQuery OwlCarousel v1.3.2
*
* Copyright (c) 2013 Bartosz Wojciechowski
* http://www.owlgraphic.com/owlcarousel/
*
* Licensed under MIT
*
*/
/*JS Lint helpers: */
/*global dragMove: false, dragEnd: false, $, jQuery, alert, window, document */
/*jslint nomen: true, continue:true */
if (typeof Object.create !== "function") {
Object.create = function (obj) {
function F() {}
F.prototype = obj;
return new F();
};
}
(function ($, window, document) {
var Carousel = {
init : function (options, el) {
var base = this;
base.$elem = $(el);
base.options = $.extend({}, $.fn.owlCarousel.options, base.$elem.data(), options);
base.userOptions = options;
base.loadContent();
},
loadContent : function () {
var base = this, url;
function getData(data) {
var i, content = "";
if (typeof base.options.jsonSuccess === "function") {
base.options.jsonSuccess.apply(this, [data]);
} else {
for (i in data.owl) {
if (data.owl.hasOwnProperty(i)) {
content += data.owl[i].item;
}
}
base.$elem.html(content);
}
base.logIn();
}
if (typeof base.options.beforeInit === "function") {
base.options.beforeInit.apply(this, [base.$elem]);
}
if (typeof base.options.jsonPath === "string") {
url = base.options.jsonPath;
$.getJSON(url, getData);
} else {
base.logIn();
}
},
logIn : function () {
var base = this;
base.$elem.data("owl-originalStyles", base.$elem.attr("style"))
.data("owl-originalClasses", base.$elem.attr("class"));
base.$elem.css({opacity: 0});
base.orignalItems = base.options.items;
base.checkBrowser();
base.wrapperWidth = 0;
base.checkVisible = null;
base.setVars();
},
setVars : function () {
var base = this;
if (base.$elem.children().length === 0) {return false; }
base.baseClass();
base.eventTypes();
base.$userItems = base.$elem.children();
base.itemsAmount = base.$userItems.length;
base.wrapItems();
base.$owlItems = base.$elem.find(".owl-item");
base.$owlWrapper = base.$elem.find(".owl-wrapper");
base.playDirection = "next";
base.prevItem = 0;
base.prevArr = [0];
base.currentItem = 0;
base.customEvents();
base.onStartup();
},
onStartup : function () {
var base = this;
base.updateItems();
base.calculateAll();
base.buildControls();
base.updateControls();
base.response();
base.moveEvents();
base.stopOnHover();
base.owlStatus();
if (base.options.transitionStyle !== false) {
base.transitionTypes(base.options.transitionStyle);
}
if (base.options.autoPlay === true) {
base.options.autoPlay = 5000;
}
base.play();
base.$elem.find(".owl-wrapper").css("display", "block");
if (!base.$elem.is(":visible")) {
base.watchVisibility();
} else {
base.$elem.css("opacity", 1);
}
base.onstartup = false;
base.eachMoveUpdate();
if (typeof base.options.afterInit === "function") {
base.options.afterInit.apply(this, [base.$elem]);
}
},
eachMoveUpdate : function () {
var base = this;
if (base.options.lazyLoad === true) {
base.lazyLoad();
}
if (base.options.autoHeight === true) {
base.autoHeight();
}
base.onVisibleItems();
if (typeof base.options.afterAction === "function") {
base.options.afterAction.apply(this, [base.$elem]);
}
},
updateVars : function () {
var base = this;
if (typeof base.options.beforeUpdate === "function") {
base.options.beforeUpdate.apply(this, [base.$elem]);
}
base.watchVisibility();
base.updateItems();
base.calculateAll();
base.updatePosition();
base.updateControls();
base.eachMoveUpdate();
if (typeof base.options.afterUpdate === "function") {
base.options.afterUpdate.apply(this, [base.$elem]);
}
},
reload : function () {
var base = this;
window.setTimeout(function () {
base.updateVars();
}, 0);
},
watchVisibility : function () {
var base = this;
if (base.$elem.is(":visible") === false) {
base.$elem.css({opacity: 0});
window.clearInterval(base.autoPlayInterval);
window.clearInterval(base.checkVisible);
} else {
return false;
}
base.checkVisible = window.setInterval(function () {
if (base.$elem.is(":visible")) {
base.reload();
base.$elem.animate({opacity: 1}, 200);
window.clearInterval(base.checkVisible);
}
}, 500);
},
wrapItems : function () {
var base = this;
base.$userItems.wrapAll("<div class=\"owl-wrapper\">").wrap("<div class=\"owl-item\"></div>");
base.$elem.find(".owl-wrapper").wrap("<div class=\"owl-wrapper-outer\">");
base.wrapperOuter = base.$elem.find(".owl-wrapper-outer");
base.$elem.css("display", "block");
},
baseClass : function () {
var base = this,
hasBaseClass = base.$elem.hasClass(base.options.baseClass),
hasThemeClass = base.$elem.hasClass(base.options.theme);
if (!hasBaseClass) {
base.$elem.addClass(base.options.baseClass);
}
if (!hasThemeClass) {
base.$elem.addClass(base.options.theme);
}
},
updateItems : function () {
var base = this, width, i;
if (base.options.responsive === false) {
return false;
}
if (base.options.singleItem === true) {
base.options.items = base.orignalItems = 1;
base.options.itemsCustom = false;
base.options.itemsDesktop = false;
base.options.itemsDesktopSmall = false;
base.options.itemsTablet = false;
base.options.itemsTabletSmall = false;
base.options.itemsMobile = false;
return false;
}
width = $(base.options.responsiveBaseWidth).width();
if (width > (base.options.itemsDesktop[0] || base.orignalItems)) {
base.options.items = base.orignalItems;
}
if (base.options.itemsCustom !== false) {
//Reorder array by screen size
base.options.itemsCustom.sort(function (a, b) {return a[0] - b[0]; });
for (i = 0; i < base.options.itemsCustom.length; i += 1) {
if (base.options.itemsCustom[i][0] <= width) {
base.options.items = base.options.itemsCustom[i][1];
}
}
} else {
if (width <= base.options.itemsDesktop[0] && base.options.itemsDesktop !== false) {
base.options.items = base.options.itemsDesktop[1];
}
if (width <= base.options.itemsDesktopSmall[0] && base.options.itemsDesktopSmall !== false) {
base.options.items = base.options.itemsDesktopSmall[1];
}
if (width <= base.options.itemsTablet[0] && base.options.itemsTablet !== false) {
base.options.items = base.options.itemsTablet[1];
}
if (width <= base.options.itemsTabletSmall[0] && base.options.itemsTabletSmall !== false) {
base.options.items = base.options.itemsTabletSmall[1];
}
if (width <= base.options.itemsMobile[0] && base.options.itemsMobile !== false) {
base.options.items = base.options.itemsMobile[1];
}
}
//if number of items is less than declared
if (base.options.items > base.itemsAmount && base.options.itemsScaleUp === true) {
base.options.items = base.itemsAmount;
}
},
response : function () {
var base = this,
smallDelay,
lastWindowWidth;
if (base.options.responsive !== true) {
return false;
}
lastWindowWidth = $(window).width();
base.resizer = function () {
if ($(window).width() !== lastWindowWidth) {
if (base.options.autoPlay !== false) {
window.clearInterval(base.autoPlayInterval);
}
window.clearTimeout(smallDelay);
smallDelay = window.setTimeout(function () {
lastWindowWidth = $(window).width();
base.updateVars();
}, base.options.responsiveRefreshRate);
}
};
$(window).resize(base.resizer);
},
updatePosition : function () {
var base = this;
base.jumpTo(base.currentItem);
if (base.options.autoPlay !== false) {
base.checkAp();
}
},
appendItemsSizes : function () {
var base = this,
roundPages = 0,
lastItem = base.itemsAmount - base.options.items;
base.$owlItems.each(function (index) {
var $this = $(this);
$this
.css({"width": base.itemWidth})
.data("owl-item", Number(index));
if (index % base.options.items === 0 || index === lastItem) {
if (!(index > lastItem)) {
roundPages += 1;
}
}
$this.data("owl-roundPages", roundPages);
});
},
appendWrapperSizes : function () {
var base = this,
width = base.$owlItems.length * base.itemWidth;
base.$owlWrapper.css({
"width": width * 2,
"left": 0
});
base.appendItemsSizes();
},
calculateAll : function () {
var base = this;
base.calculateWidth();
base.appendWrapperSizes();
base.loops();
base.max();
},
calculateWidth : function () {
var base = this;
base.itemWidth = Math.round(base.$elem.width() / base.options.items);
},
max : function () {
var base = this,
maximum = ((base.itemsAmount * base.itemWidth) - base.options.items * base.itemWidth) * -1;
if (base.options.items > base.itemsAmount) {
base.maximumItem = 0;
maximum = 0;
base.maximumPixels = 0;
} else {
base.maximumItem = base.itemsAmount - base.options.items;
base.maximumPixels = maximum;
}
return maximum;
},
min : function () {
return 0;
},
loops : function () {
var base = this,
prev = 0,
elWidth = 0,
i,
item,
roundPageNum;
base.positionsInArray = [0];
base.pagesInArray = [];
for (i = 0; i < base.itemsAmount; i += 1) {
elWidth += base.itemWidth;
base.positionsInArray.push(-elWidth);
if (base.options.scrollPerPage === true) {
item = $(base.$owlItems[i]);
roundPageNum = item.data("owl-roundPages");
if (roundPageNum !== prev) {
base.pagesInArray[prev] = base.positionsInArray[i];
prev = roundPageNum;
}
}
}
},
buildControls : function () {
var base = this;
if (base.options.navigation === true || base.options.pagination === true) {
base.owlControls = $("<div class=\"owl-controls\"/>").toggleClass("clickable", !base.browser.isTouch).appendTo(base.$elem);
}
if (base.options.pagination === true) {
base.buildPagination();
}
if (base.options.navigation === true) {
base.buildButtons();
}
},
buildButtons : function () {
var base = this,
buttonsWrapper = $("<div class=\"owl-buttons\"/>");
base.owlControls.append(buttonsWrapper);
base.buttonPrev = $("<div/>", {
"class" : "owl-prev",
"html" : base.options.navigationText[0] || ""
});
base.buttonNext = $("<div/>", {
"class" : "owl-next",
"html" : base.options.navigationText[1] || ""
});
buttonsWrapper
.append(base.buttonPrev)
.append(base.buttonNext);
buttonsWrapper.on("touchstart.owlControls mousedown.owlControls", "div[class^=\"owl\"]", function (event) {
event.preventDefault();
});
buttonsWrapper.on("touchend.owlControls mouseup.owlControls", "div[class^=\"owl\"]", function (event) {
event.preventDefault();
if ($(this).hasClass("owl-next")) {
base.next();
} else {
base.prev();
}
});
},
buildPagination : function () {
var base = this;
base.paginationWrapper = $("<div class=\"owl-pagination\"/>");
base.owlControls.append(base.paginationWrapper);
base.paginationWrapper.on("touchend.owlControls mouseup.owlControls", ".owl-page", function (event) {
event.preventDefault();
if (Number($(this).data("owl-page")) !== base.currentItem) {
base.goTo(Number($(this).data("owl-page")), true);
}
});
},
updatePagination : function () {
var base = this,
counter,
lastPage,
lastItem,
i,
paginationButton,
paginationButtonInner;
if (base.options.pagination === false) {
return false;
}
base.paginationWrapper.html("");
counter = 0;
lastPage = base.itemsAmount - base.itemsAmount % base.options.items;
for (i = 0; i < base.itemsAmount; i += 1) {
if (i % base.options.items === 0) {
counter += 1;
if (lastPage === i) {
lastItem = base.itemsAmount - base.options.items;
}
paginationButton = $("<div/>", {
"class" : "owl-page"
});
paginationButtonInner = $("<span></span>", {
"text": base.options.paginationNumbers === true ? counter : "",
"class": base.options.paginationNumbers === true ? "owl-numbers" : ""
});
paginationButton.append(paginationButtonInner);
paginationButton.data("owl-page", lastPage === i ? lastItem : i);
paginationButton.data("owl-roundPages", counter);
base.paginationWrapper.append(paginationButton);
}
}
base.checkPagination();
},
checkPagination : function () {
var base = this;
if (base.options.pagination === false) {
return false;
}
base.paginationWrapper.find(".owl-page").each(function () {
if ($(this).data("owl-roundPages") === $(base.$owlItems[base.currentItem]).data("owl-roundPages")) {
base.paginationWrapper
.find(".owl-page")
.removeClass("active");
$(this).addClass("active");
}
});
},
checkNavigation : function () {
var base = this;
if (base.options.navigation === false) {
return false;
}
if (base.options.rewindNav === false) {
if (base.currentItem === 0 && base.maximumItem === 0) {
base.buttonPrev.addClass("disabled");
base.buttonNext.addClass("disabled");
} else if (base.currentItem === 0 && base.maximumItem !== 0) {
base.buttonPrev.addClass("disabled");
base.buttonNext.removeClass("disabled");
} else if (base.currentItem === base.maximumItem) {
base.buttonPrev.removeClass("disabled");
base.buttonNext.addClass("disabled");
} else if (base.currentItem !== 0 && base.currentItem !== base.maximumItem) {
base.buttonPrev.removeClass("disabled");
base.buttonNext.removeClass("disabled");
}
}
},
updateControls : function () {
var base = this;
base.updatePagination();
base.checkNavigation();
if (base.owlControls) {
if (base.options.items >= base.itemsAmount) {
base.owlControls.hide();
} else {
base.owlControls.show();
}
}
},
destroyControls : function () {
var base = this;
if (base.owlControls) {
base.owlControls.remove();
}
},
next : function (speed) {
var base = this;
if (base.isTransition) {
return false;
}
base.currentItem += base.options.scrollPerPage === true ? base.options.items : 1;
if (base.currentItem > base.maximumItem + (base.options.scrollPerPage === true ? (base.options.items - 1) : 0)) {
if (base.options.rewindNav === true) {
base.currentItem = 0;
speed = "rewind";
} else {
base.currentItem = base.maximumItem;
return false;
}
}
base.goTo(base.currentItem, speed);
},
prev : function (speed) {
var base = this;
if (base.isTransition) {
return false;
}
if (base.options.scrollPerPage === true && base.currentItem > 0 && base.currentItem < base.options.items) {
base.currentItem = 0;
} else {
base.currentItem -= base.options.scrollPerPage === true ? base.options.items : 1;
}
if (base.currentItem < 0) {
if (base.options.rewindNav === true) {
base.currentItem = base.maximumItem;
speed = "rewind";
} else {
base.currentItem = 0;
return false;
}
}
base.goTo(base.currentItem, speed);
},
goTo : function (position, speed, drag) {
var base = this,
goToPixel;
if (base.isTransition) {
return false;
}
if (typeof base.options.beforeMove === "function") {
base.options.beforeMove.apply(this, [base.$elem]);
}
if (position >= base.maximumItem) {
position = base.maximumItem;
} else if (position <= 0) {
position = 0;
}
base.currentItem = base.owl.currentItem = position;
if (base.options.transitionStyle !== false && drag !== "drag" && base.options.items === 1 && base.browser.support3d === true) {
base.swapSpeed(0);
if (base.browser.support3d === true) {
base.transition3d(base.positionsInArray[position]);
} else {
base.css2slide(base.positionsInArray[position], 1);
}
base.afterGo();
base.singleItemTransition();
return false;
}
goToPixel = base.positionsInArray[position];
if (base.browser.support3d === true) {
base.isCss3Finish = false;
if (speed === true) {
base.swapSpeed("paginationSpeed");
window.setTimeout(function () {
base.isCss3Finish = true;
}, base.options.paginationSpeed);
} else if (speed === "rewind") {
base.swapSpeed(base.options.rewindSpeed);
window.setTimeout(function () {
base.isCss3Finish = true;
}, base.options.rewindSpeed);
} else {
base.swapSpeed("slideSpeed");
window.setTimeout(function () {
base.isCss3Finish = true;
}, base.options.slideSpeed);
}
base.transition3d(goToPixel);
} else {
if (speed === true) {
base.css2slide(goToPixel, base.options.paginationSpeed);
} else if (speed === "rewind") {
base.css2slide(goToPixel, base.options.rewindSpeed);
} else {
base.css2slide(goToPixel, base.options.slideSpeed);
}
}
base.afterGo();
},
jumpTo : function (position) {
var base = this;
if (typeof base.options.beforeMove === "function") {
base.options.beforeMove.apply(this, [base.$elem]);
}
if (position >= base.maximumItem || position === -1) {
position = base.maximumItem;
} else if (position <= 0) {
position = 0;
}
base.swapSpeed(0);
if (base.browser.support3d === true) {
base.transition3d(base.positionsInArray[position]);
} else {
base.css2slide(base.positionsInArray[position], 1);
}
base.currentItem = base.owl.currentItem = position;
base.afterGo();
},
afterGo : function () {
var base = this;
base.prevArr.push(base.currentItem);
base.prevItem = base.owl.prevItem = base.prevArr[base.prevArr.length - 2];
base.prevArr.shift(0);
if (base.prevItem !== base.currentItem) {
base.checkPagination();
base.checkNavigation();
base.eachMoveUpdate();
if (base.options.autoPlay !== false) {
base.checkAp();
}
}
if (typeof base.options.afterMove === "function" && base.prevItem !== base.currentItem) {
base.options.afterMove.apply(this, [base.$elem]);
}
},
stop : function () {
var base = this;
base.apStatus = "stop";
window.clearInterval(base.autoPlayInterval);
},
checkAp : function () {
var base = this;
if (base.apStatus !== "stop") {
base.play();
}
},
play : function () {
var base = this;
base.apStatus = "play";
if (base.options.autoPlay === false) {
return false;
}
window.clearInterval(base.autoPlayInterval);
base.autoPlayInterval = window.setInterval(function () {
base.next(true);
}, base.options.autoPlay);
},
swapSpeed : function (action) {
var base = this;
if (action === "slideSpeed") {
base.$owlWrapper.css(base.addCssSpeed(base.options.slideSpeed));
} else if (action === "paginationSpeed") {
base.$owlWrapper.css(base.addCssSpeed(base.options.paginationSpeed));
} else if (typeof action !== "string") {
base.$owlWrapper.css(base.addCssSpeed(action));
}
},
addCssSpeed : function (speed) {
return {
"-webkit-transition": "all " + speed + "ms ease",
"-moz-transition": "all " + speed + "ms ease",
"-o-transition": "all " + speed + "ms ease",
"transition": "all " + speed + "ms ease"
};
},
removeTransition : function () {
return {
"-webkit-transition": "",
"-moz-transition": "",
"-o-transition": "",
"transition": ""
};
},
doTranslate : function (pixels) {
return {
"-webkit-transform": "translate3d(" + pixels + "px, 0px, 0px)",
"-moz-transform": "translate3d(" + pixels + "px, 0px, 0px)",
"-o-transform": "translate3d(" + pixels + "px, 0px, 0px)",
"-ms-transform": "translate3d(" + pixels + "px, 0px, 0px)",
"transform": "translate3d(" + pixels + "px, 0px,0px)"
};
},
transition3d : function (value) {
var base = this;
base.$owlWrapper.css(base.doTranslate(value));
},
css2move : function (value) {
var base = this;
base.$owlWrapper.css({"left" : value});
},
css2slide : function (value, speed) {
var base = this;
base.isCssFinish = false;
base.$owlWrapper.stop(true, true).animate({
"left" : value
}, {
duration : speed || base.options.slideSpeed,
complete : function () {
base.isCssFinish = true;
}
});
},
checkBrowser : function () {
var base = this,
translate3D = "translate3d(0px, 0px, 0px)",
tempElem = document.createElement("div"),
regex,
asSupport,
support3d,
isTouch;
tempElem.style.cssText = " -moz-transform:" + translate3D +
"; -ms-transform:" + translate3D +
"; -o-transform:" + translate3D +
"; -webkit-transform:" + translate3D +
"; transform:" + translate3D;
regex = /translate3d\(0px, 0px, 0px\)/g;
asSupport = tempElem.style.cssText.match(regex);
support3d = (asSupport !== null && ( asSupport.length === 1 || asSupport.length === 2 ));
isTouch = "ontouchstart" in window || window.navigator.msMaxTouchPoints;
base.browser = {
"support3d" : support3d,
"isTouch" : isTouch
};
},
moveEvents : function () {
var base = this;
if (base.options.mouseDrag !== false || base.options.touchDrag !== false) {
base.gestures();
base.disabledEvents();
}
},
eventTypes : function () {
var base = this,
types = ["s", "e", "x"];
base.ev_types = {};
if (base.options.mouseDrag === true && base.options.touchDrag === true) {
types = [
"touchstart.owl mousedown.owl",
"touchmove.owl mousemove.owl",
"touchend.owl touchcancel.owl mouseup.owl"
];
} else if (base.options.mouseDrag === false && base.options.touchDrag === true) {
types = [
"touchstart.owl",
"touchmove.owl",
"touchend.owl touchcancel.owl"
];
} else if (base.options.mouseDrag === true && base.options.touchDrag === false) {
types = [
"mousedown.owl",
"mousemove.owl",
"mouseup.owl"
];
}
base.ev_types.start = types[0];
base.ev_types.move = types[1];
base.ev_types.end = types[2];
},
disabledEvents : function () {
var base = this;
base.$elem.on("dragstart.owl", function (event) { event.preventDefault(); });
base.$elem.on("mousedown.disableTextSelect", function (e) {
return $(e.target).is('input, textarea, select, option');
});
},
gestures : function () {
/*jslint unparam: true*/
var base = this,
locals = {
offsetX : 0,
offsetY : 0,
baseElWidth : 0,
relativePos : 0,
position: null,
minSwipe : null,
maxSwipe: null,
sliding : null,
dargging: null,
targetElement : null
};
base.isCssFinish = true;
function getTouches(event) {
if (event.touches !== undefined) {
return {
x : event.touches[0].pageX,
y : event.touches[0].pageY
};
}
if (event.touches === undefined) {
if (event.pageX !== undefined) {
return {
x : event.pageX,
y : event.pageY
};
}
if (event.pageX === undefined) {
return {
x : event.clientX,
y : event.clientY
};
}
}
}
function swapEvents(type) {
if (type === "on") {
$(document).on(base.ev_types.move, dragMove);
$(document).on(base.ev_types.end, dragEnd);
} else if (type === "off") {
$(document).off(base.ev_types.move);
$(document).off(base.ev_types.end);
}
}
function dragStart(event) {
var ev = event.originalEvent || event || window.event,
position;
if (ev.which === 3) {
return false;
}
if (base.itemsAmount <= base.options.items) {
return;
}
if (base.isCssFinish === false && !base.options.dragBeforeAnimFinish) {
return false;
}
if (base.isCss3Finish === false && !base.options.dragBeforeAnimFinish) {
return false;
}
if (base.options.autoPlay !== false) {
window.clearInterval(base.autoPlayInterval);
}
if (base.browser.isTouch !== true && !base.$owlWrapper.hasClass("grabbing")) {
base.$owlWrapper.addClass("grabbing");
}
base.newPosX = 0;
base.newRelativeX = 0;
$(this).css(base.removeTransition());
position = $(this).position();
locals.relativePos = position.left;
locals.offsetX = getTouches(ev).x - position.left;
locals.offsetY = getTouches(ev).y - position.top;
swapEvents("on");
locals.sliding = false;
locals.targetElement = ev.target || ev.srcElement;
}
function dragMove(event) {
var ev = event.originalEvent || event || window.event,
minSwipe,
maxSwipe;
base.newPosX = getTouches(ev).x - locals.offsetX;
base.newPosY = getTouches(ev).y - locals.offsetY;
base.newRelativeX = base.newPosX - locals.relativePos;
if (typeof base.options.startDragging === "function" && locals.dragging !== true && base.newRelativeX !== 0) {
locals.dragging = true;
base.options.startDragging.apply(base, [base.$elem]);
}
if ((base.newRelativeX > 8 || base.newRelativeX < -8) && (base.browser.isTouch === true)) {
if (ev.preventDefault !== undefined) {
ev.preventDefault();
} else {
ev.returnValue = false;
}
locals.sliding = true;
}
if ((base.newPosY > 10 || base.newPosY < -10) && locals.sliding === false) {
$(document).off("touchmove.owl");
}
minSwipe = function () {
return base.newRelativeX / 5;
};
maxSwipe = function () {
return base.maximumPixels + base.newRelativeX / 5;
};
base.newPosX = Math.max(Math.min(base.newPosX, minSwipe()), maxSwipe());
if (base.browser.support3d === true) {
base.transition3d(base.newPosX);
} else {
base.css2move(base.newPosX);
}
}
function dragEnd(event) {
var ev = event.originalEvent || event || window.event,
newPosition,
handlers,
owlStopEvent;
ev.target = ev.target || ev.srcElement;
locals.dragging = false;
if (base.browser.isTouch !== true) {
base.$owlWrapper.removeClass("grabbing");
}
if (base.newRelativeX < 0) {
base.dragDirection = base.owl.dragDirection = "left";
} else {
base.dragDirection = base.owl.dragDirection = "right";
}
if (base.newRelativeX !== 0) {
newPosition = base.getNewPosition();
base.goTo(newPosition, false, "drag");
if (locals.targetElement === ev.target && base.browser.isTouch !== true) {
$(ev.target).on("click.disable", function (ev) {
ev.stopImmediatePropagation();
ev.stopPropagation();
ev.preventDefault();
$(ev.target).off("click.disable");
});
handlers = $._data(ev.target, "events").click;
owlStopEvent = handlers.pop();
handlers.splice(0, 0, owlStopEvent);
}
}
swapEvents("off");
}
base.$elem.on(base.ev_types.start, ".owl-wrapper", dragStart);
},
getNewPosition : function () {
var base = this,
newPosition = base.closestItem();
if (newPosition > base.maximumItem) {
base.currentItem = base.maximumItem;
newPosition = base.maximumItem;
} else if (base.newPosX >= 0) {
newPosition = 0;
base.currentItem = 0;
}
return newPosition;
},
closestItem : function () {
var base = this,
array = base.options.scrollPerPage === true ? base.pagesInArray : base.positionsInArray,
goal = base.newPosX,
closest = null;
$.each(array, function (i, v) {
if (goal - (base.itemWidth / 20) > array[i + 1] && goal - (base.itemWidth / 20) < v && base.moveDirection() === "left") {
closest = v;
if (base.options.scrollPerPage === true) {
base.currentItem = $.inArray(closest, base.positionsInArray);
} else {
base.currentItem = i;
}
} else if (goal + (base.itemWidth / 20) < v && goal + (base.itemWidth / 20) > (array[i + 1] || array[i] - base.itemWidth) && base.moveDirection() === "right") {
if (base.options.scrollPerPage === true) {
closest = array[i + 1] || array[array.length - 1];
base.currentItem = $.inArray(closest, base.positionsInArray);
} else {
closest = array[i + 1];
base.currentItem = i + 1;
}
}
});
return base.currentItem;
},
moveDirection : function () {
var base = this,
direction;
if (base.newRelativeX < 0) {
direction = "right";
base.playDirection = "next";
} else {
direction = "left";
base.playDirection = "prev";
}
return direction;
},
customEvents : function () {
/*jslint unparam: true*/
var base = this;
base.$elem.on("owl.next", function () {
base.next();
});
base.$elem.on("owl.prev", function () {
base.prev();
});
base.$elem.on("owl.play", function (event, speed) {
base.options.autoPlay = speed;
base.play();
base.hoverStatus = "play";
});
base.$elem.on("owl.stop", function () {
base.stop();
base.hoverStatus = "stop";
});
base.$elem.on("owl.goTo", function (event, item) {
base.goTo(item);
});
base.$elem.on("owl.jumpTo", function (event, item) {
base.jumpTo(item);
});
},
stopOnHover : function () {
var base = this;
if (base.options.stopOnHover === true && base.browser.isTouch !== true && base.options.autoPlay !== false) {
base.$elem.on("mouseover", function () {
base.stop();
});
base.$elem.on("mouseout", function () {
if (base.hoverStatus !== "stop") {
base.play();
}
});
}
},
lazyLoad : function () {
var base = this,
i,
$item,
itemNumber,
$lazyImg,
follow;
if (base.options.lazyLoad === false) {
return false;
}
for (i = 0; i < base.itemsAmount; i += 1) {
$item = $(base.$owlItems[i]);
if ($item.data("owl-loaded") === "loaded") {
continue;
}
itemNumber = $item.data("owl-item");
$lazyImg = $item.find(".lazyOwl");
if (typeof $lazyImg.data("src") !== "string") {
$item.data("owl-loaded", "loaded");
continue;
}
if ($item.data("owl-loaded") === undefined) {
$lazyImg.hide();
$item.addClass("loading").data("owl-loaded", "checked");
}
if (base.options.lazyFollow === true) {
follow = itemNumber >= base.currentItem;
} else {
follow = true;
}
if (follow && itemNumber < base.currentItem + base.options.items && $lazyImg.length) {
base.lazyPreload($item, $lazyImg);
}
}
},
lazyPreload : function ($item, $lazyImg) {
var base = this,
iterations = 0,
isBackgroundImg;
if ($lazyImg.prop("tagName") === "DIV") {
$lazyImg.css("background-image", "url(" + $lazyImg.data("src") + ")");
isBackgroundImg = true;
} else {
$lazyImg[0].src = $lazyImg.data("src");
}
function showImage() {
$item.data("owl-loaded", "loaded").removeClass("loading");
$lazyImg.removeAttr("data-src");
if (base.options.lazyEffect === "fade") {
$lazyImg.fadeIn(400);
} else {
$lazyImg.show();
}
if (typeof base.options.afterLazyLoad === "function") {
base.options.afterLazyLoad.apply(this, [base.$elem]);
}
}
function checkLazyImage() {
iterations += 1;
if (base.completeImg($lazyImg.get(0)) || isBackgroundImg === true) {
showImage();
} else if (iterations <= 100) {//if image loads in less than 10 seconds
window.setTimeout(checkLazyImage, 100);
} else {
showImage();
}
}
checkLazyImage();
},
autoHeight : function () {
var base = this,
$currentimg = $(base.$owlItems[base.currentItem]).find("img"),
iterations;
function addHeight() {
var $currentItem = $(base.$owlItems[base.currentItem]).height();
base.wrapperOuter.css("height", $currentItem + "px");
if (!base.wrapperOuter.hasClass("autoHeight")) {
window.setTimeout(function () {
base.wrapperOuter.addClass("autoHeight");
}, 0);
}
}
function checkImage() {
iterations += 1;
if (base.completeImg($currentimg.get(0))) {
addHeight();
} else if (iterations <= 100) { //if image loads in less than 10 seconds
window.setTimeout(checkImage, 100);
} else {
base.wrapperOuter.css("height", ""); //Else remove height attribute
}
}
if ($currentimg.get(0) !== undefined) {
iterations = 0;
checkImage();
} else {
addHeight();
}
},
completeImg : function (img) {
var naturalWidthType;
if (!img.complete) {
return false;
}
naturalWidthType = typeof img.naturalWidth;
if (naturalWidthType !== "undefined" && img.naturalWidth === 0) {
return false;
}
return true;
},
onVisibleItems : function () {
var base = this,
i;
if (base.options.addClassActive === true) {
base.$owlItems.removeClass("active");
}
base.visibleItems = [];
for (i = base.currentItem; i < base.currentItem + base.options.items; i += 1) {
base.visibleItems.push(i);
if (base.options.addClassActive === true) {
$(base.$owlItems[i]).addClass("active");
}
}
base.owl.visibleItems = base.visibleItems;
},
transitionTypes : function (className) {
var base = this;
//Currently available: "fade", "backSlide", "goDown", "fadeUp"
base.outClass = "owl-" + className + "-out";
base.inClass = "owl-" + className + "-in";
},
singleItemTransition : function () {
var base = this,
outClass = base.outClass,
inClass = base.inClass,
$currentItem = base.$owlItems.eq(base.currentItem),
$prevItem = base.$owlItems.eq(base.prevItem),
prevPos = Math.abs(base.positionsInArray[base.currentItem]) + base.positionsInArray[base.prevItem],
origin = Math.abs(base.positionsInArray[base.currentItem]) + base.itemWidth / 2,
animEnd = 'webkitAnimationEnd oAnimationEnd MSAnimationEnd animationend';
base.isTransition = true;
base.$owlWrapper
.addClass('owl-origin')
.css({
"-webkit-transform-origin" : origin + "px",
"-moz-perspective-origin" : origin + "px",
"perspective-origin" : origin + "px"
});
function transStyles(prevPos) {
return {
"position" : "relative",
"left" : prevPos + "px"
};
}
$prevItem
.css(transStyles(prevPos, 10))
.addClass(outClass)
.on(animEnd, function () {
base.endPrev = true;
$prevItem.off(animEnd);
base.clearTransStyle($prevItem, outClass);
});
$currentItem
.addClass(inClass)
.on(animEnd, function () {
base.endCurrent = true;
$currentItem.off(animEnd);
base.clearTransStyle($currentItem, inClass);
});
},
clearTransStyle : function (item, classToRemove) {
var base = this;
item.css({
"position" : "",
"left" : ""
}).removeClass(classToRemove);
if (base.endPrev && base.endCurrent) {
base.$owlWrapper.removeClass('owl-origin');
base.endPrev = false;
base.endCurrent = false;
base.isTransition = false;
}
},
owlStatus : function () {
var base = this;
base.owl = {
"userOptions" : base.userOptions,
"baseElement" : base.$elem,
"userItems" : base.$userItems,
"owlItems" : base.$owlItems,
"currentItem" : base.currentItem,
"prevItem" : base.prevItem,
"visibleItems" : base.visibleItems,
"isTouch" : base.browser.isTouch,
"browser" : base.browser,
"dragDirection" : base.dragDirection
};
},
clearEvents : function () {
var base = this;
base.$elem.off(".owl owl mousedown.disableTextSelect");
$(document).off(".owl owl");
$(window).off("resize", base.resizer);
},
unWrap : function () {
var base = this;
if (base.$elem.children().length !== 0) {
base.$owlWrapper.unwrap();
base.$userItems.unwrap().unwrap();
if (base.owlControls) {
base.owlControls.remove();
}
}
base.clearEvents();
base.$elem
.attr("style", base.$elem.data("owl-originalStyles") || "")
.attr("class", base.$elem.data("owl-originalClasses"));
},
destroy : function () {
var base = this;
base.stop();
window.clearInterval(base.checkVisible);
base.unWrap();
base.$elem.removeData();
},
reinit : function (newOptions) {
var base = this,
options = $.extend({}, base.userOptions, newOptions);
base.unWrap();
base.init(options, base.$elem);
},
addItem : function (htmlString, targetPosition) {
var base = this,
position;
if (!htmlString) {return false; }
if (base.$elem.children().length === 0) {
base.$elem.append(htmlString);
base.setVars();
return false;
}
base.unWrap();
if (targetPosition === undefined || targetPosition === -1) {
position = -1;
} else {
position = targetPosition;
}
if (position >= base.$userItems.length || position === -1) {
base.$userItems.eq(-1).after(htmlString);
} else {
base.$userItems.eq(position).before(htmlString);
}
base.setVars();
},
removeItem : function (targetPosition) {
var base = this,
position;
if (base.$elem.children().length === 0) {
return false;
}
if (targetPosition === undefined || targetPosition === -1) {
position = -1;
} else {
position = targetPosition;
}
base.unWrap();
base.$userItems.eq(position).remove();
base.setVars();
}
};
$.fn.owlCarousel = function (options) {
return this.each(function () {
if ($(this).data("owl-init") === true) {
return false;
}
$(this).data("owl-init", true);
var carousel = Object.create(Carousel);
carousel.init(options, this);
$.data(this, "owlCarousel", carousel);
});
};
$.fn.owlCarousel.options = {
items : 5,
itemsCustom : false,
itemsDesktop : [1199, 4],
itemsDesktopSmall : [979, 3],
itemsTablet : [768, 2],
itemsTabletSmall : false,
itemsMobile : [479, 1],
singleItem : false,
itemsScaleUp : false,
slideSpeed : 200,
paginationSpeed : 800,
rewindSpeed : 1000,
autoPlay : false,
stopOnHover : false,
navigation : false,
navigationText : ["prev", "next"],
rewindNav : true,
scrollPerPage : false,
pagination : true,
paginationNumbers : false,
responsive : true,
responsiveRefreshRate : 200,
responsiveBaseWidth : window,
baseClass : "owl-carousel",
theme : "owl-theme",
lazyLoad : false,
lazyFollow : true,
lazyEffect : "fade",
autoHeight : false,
jsonPath : false,
jsonSuccess : false,
dragBeforeAnimFinish : true,
mouseDrag : true,
touchDrag : true,
addClassActive : false,
transitionStyle : false,
beforeUpdate : false,
afterUpdate : false,
beforeInit : false,
afterInit : false,
beforeMove : false,
afterMove : false,
afterAction : false,
startDragging : false,
afterLazyLoad: false
};
}(jQuery, window, document));
\ No newline at end of file
$(function () {
$(window).stellar({
horizontalScrolling: false
});
// Custom Scrollbar
var nice = $("html").niceScroll({
cursorwidth: 8,
cursorborder: "0px solid #fff",
cursorborderradius: '0'
});
$('.main-nav a:not(.dropdown-toggle)').bind('click', function(event) {
var $anchor = $(this);
$('html, body').stop().animate({
scrollTop: $($anchor.attr('href')).offset().top
}, 1500, 'easeInOutExpo');
event.preventDefault();
});
/*
* Fun Fact with Count Animation
*/
$('.st-ff-count').appear();
$(document.body).on('appear', '.st-ff-count', function(e, $affected) {
$affected.each(function(i) {
if (parseInt($(this).data('runit'))) {
$(this).countTo({
speed: 3000,
refreshInterval: 50
});
$(this).data('runit', "0");
};
});
});
$('[data-toggle="tooltip"]').tooltip();
function home_height () {
var element = $('.st-home-unit'),
elemHeight = element.height(),
winHeight = $(window).height()
padding = (winHeight - elemHeight - 200) /2;
if (padding < 1 ) {
padding = 0;
};
element.css('padding', padding+'px 0');
}
home_height ();
$(window).resize(function () {
home_height ();
});
var fadeStart=$(window).height()/3 // 100px scroll or less will equiv to 1 opacity
,fadeUntil=$(window).height() // 200px scroll or more will equiv to 0 opacity
,fading = $('.st-home-unit')
,fading2 = $('.hero-overlayer')
;
$(window).bind('scroll', function(){
var offset = $(document).scrollTop()
,opacity=0
,opacity2=1
;
if( offset<=fadeStart ){
opacity=1;
opacity2=0;
}else if( offset<=fadeUntil ){
opacity=1-offset/fadeUntil;
opacity2=offset/fadeUntil;
}
fading.css({'opacity': opacity});
if (offset >= 120) {
$('.st-navbar').addClass("st-navbar-mini");
} else if (offset <= 119) {
$('.st-navbar').removeClass("st-navbar-mini");
}
});
$(".testimonials-carousel ul").owlCarousel({
items: 1,
navigation: false,
pagination: true,
singleItem:true,
autoPlay: true,
navigationText: ['<i class="ct-etp etp-arrow-left7"></i>', '<i class="ct-etp etp-arrow-right8"></i>'],
transitionStyle: "backSlide"
});
$('.clients-carousel').owlCarousel({
items: 5,
autoPlay: true,
pagination: false
});
////// mailchimp //////
$(".subscribe-form").ajaxChimp({
callback: mcCallback,
url: "http://cantothemes.us8.list-manage2.com/subscribe/post?u=37a0cb83e98c8633253ad0acd&id=03d8ef0996" // Replace your mailchimp post url inside double quote "".
});
function mcCallback (res) {
if(res.result === 'success') {
$('.subscribe-result').html('<i class="pe-7s-check"></i>' + res.msg).delay(500).slideDown(1000).delay(10000).slideUp(1000);
}else if(res.result === 'error'){
$('.subscribe-result').html('<i class="pe-7s-close-circle"></i>' + res.msg).delay(500).slideDown(1000).delay(10000).slideUp(1000);
}
}
/*
* Contact Form Validation Code
*/
function checkEmpty(selector) {
if (selector.val()=="" || selector.val()==selector.prop("placeholder")) {
selector.addClass('formFieldError',500);
return false;
} else {
selector.removeClass('formFieldError',500);
return true;
}
}
function validateEmail(email) {
var regex = /^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
if (!regex.test(email.val())) {
email.addClass('formFieldError',500);
return false;
} else {
email.removeClass('formFieldError',500);
return true;
}
}
$('.contact-form').submit(function () {
var $this = $(this),
result = true;
if(!checkEmpty($this.find('#fname'))){
result=false;
}
if(!validateEmail($this.find('#email'))) {
result=false;
}
if(!checkEmpty($this.find('#mssg'))) {
result=false;
}
if(result==false) {
return false;
}
var $btn = $("#send").button('loading');
var data = $this.serialize();
$.ajax({
url: "sender.php",
type: "POST",
data: data,
cache: false,
success: function (html) {
console.log(html);
if (html==1) {
$('#result-message').addClass('alert alert-success').html('<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button><strong>Success!</strong> Message Send. We will contact with you soon.').delay(500).slideDown(500).delay(10000).slideUp('slow');
$btn.button('reset');
} else {
$('#result-message').addClass('alert alert-danger').html('<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button><strong>Error!</strong> Message Sending Error! Please try again').delay(500).slideDown(500).delay(10000).slideUp('slow');
$btn.button('reset');
}
},
error: function (a, b) {
if (b == 'error') {
$('#result-message').addClass('alert alert-danger').html('<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button><strong>Error!</strong> Message Sending Error! Please try again').delay(500).slideDown(500).delay(10000).slideUp('slow');
};
$btn.button('reset');
}
});
return false;
});
});
$(window).load(function () {
var $grid = $('.grid'),
$sizer = $grid.find('.shuffle__sizer'),
$filterType = $('#filter input[name="filter"]');
$grid.shuffle({
itemSelector: '.portfolio-item',
sizer: $sizer
});
$filterType.change(function(e) {
var group = $('#filter input[name="filter"]:checked').val();
$grid.shuffle('shuffle', group);
$('label.btn-main').removeClass('btn-main');
$('input[name="filter"]:checked').parent().addClass('btn-main');
});
// 悬浮窗脚本
$("#xuanfu a").hover(function(){
$(this).children().css('color','#828384');
$(".code_parent").children('div').eq($(this).index()).addClass('youyi');
},function () {
$(this).children().css('color','#fff');
$(".code_parent").children('div').eq($(this).index()).removeClass('youyi');
})
// 光伏计算器计算方法
$("#clac_button").click(function(){
var num =$("#area").val();
if (num=='') {
alert('输入面积不能为空~!');
return false;
}
if (!(/(^[1-9]\d*$)/.test(num))) {
alert('请您输入正整数');
return false;
}
var int_num = parseInt(num)*0.7;
$("#calc_l1").html('安装光伏组件面积'+Math.round(int_num)+'平方米');
$("#calc_l2").html('预计装机容量'+Math.round(int_num*0.1)+'KW');
$("#calc_l3").html('参照发电量'+Math.round(int_num*120*0.92)+'KW/h');
$("#calc_l4").html('预计年收入'+Math.round(int_num*120)+'元');
$("#calc_l5").html('预计投入'+'****'+'元');
})
});
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论