unsakini 0.0.3.1 → 0.0.4.pre.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (290) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +37 -6
  3. data/angular/angular-cli.json +5 -3
  4. data/angular/npm-debug.log +54 -0
  5. data/angular/package.json +4 -1
  6. data/angular/src/app/app.component.html +1 -4
  7. data/angular/src/app/app.module.ts +8 -7
  8. data/angular/src/app/app.routes.module.ts +12 -2
  9. data/angular/src/app/confirm-account/confirm-account.component.ts +27 -0
  10. data/angular/src/app/confirm-account/confirm-account.html +41 -0
  11. data/angular/src/app/confirm-account/confirm-account.module.ts +24 -0
  12. data/angular/src/app/confirm-account/confirm-account.scss +3 -0
  13. data/angular/src/app/confirm-account/confirm-account.service.ts +27 -0
  14. data/angular/src/app/confirm-account/index.ts +3 -0
  15. data/angular/src/app/index.ts +2 -0
  16. data/angular/src/app/login/index.ts +3 -0
  17. data/angular/src/app/login/login.component.ts +40 -0
  18. data/angular/src/app/login/login.html +43 -0
  19. data/angular/src/app/login/login.module.ts +27 -0
  20. data/angular/src/app/login/login.service.ts +48 -0
  21. data/angular/src/app/registration/index.ts +3 -0
  22. data/angular/src/app/registration/registration.component.html +70 -12
  23. data/angular/src/app/registration/registration.component.spec.ts +8 -11
  24. data/angular/src/app/registration/registration.component.ts +10 -8
  25. data/angular/src/app/registration/registration.module.ts +23 -0
  26. data/angular/src/app/registration/registration.service.ts +46 -0
  27. data/angular/src/app/registration/registration.services.spec.ts +71 -0
  28. data/angular/src/app/services/auth-http/auth.http.service.ts +35 -0
  29. data/angular/src/app/services/auth-http/index.ts +1 -0
  30. data/angular/src/app/services/http/http.service.spec.ts +205 -0
  31. data/angular/src/app/services/http/http.service.ts +40 -0
  32. data/angular/src/app/services/http/index.ts +1 -0
  33. data/angular/src/app/services/index.ts +3 -0
  34. data/angular/src/app/services/services.module.ts +33 -0
  35. data/angular/src/assets/global.scss +3 -0
  36. data/angular/src/environments/custom.ts +4 -0
  37. data/angular/src/environments/environment.prod.ts +2 -1
  38. data/angular/src/environments/environment.ts +2 -1
  39. data/angular/src/index.html +1 -1
  40. data/app/controllers/application_controller.rb +2 -2
  41. data/app/controllers/concerns/unsakini/board_owner_controller_concern.rb +42 -0
  42. data/app/controllers/concerns/unsakini/comment_owner_controller_concern.rb +36 -0
  43. data/app/controllers/concerns/unsakini/logged_in_controller_concern.rb +23 -0
  44. data/app/controllers/concerns/unsakini/post_owner_controller_concern.rb +38 -0
  45. data/app/controllers/concerns/unsakini/serializer_controller_concern.rb +13 -0
  46. data/app/controllers/unsakini/base_controller.rb +6 -0
  47. data/app/controllers/unsakini/boards_controller.rb +76 -0
  48. data/app/controllers/unsakini/comments_controller.rb +54 -0
  49. data/app/controllers/unsakini/posts_controller.rb +61 -0
  50. data/app/controllers/unsakini/share_board_controller.rb +122 -0
  51. data/app/controllers/unsakini/user_token_controller.rb +17 -0
  52. data/app/controllers/unsakini/users_controller.rb +69 -0
  53. data/app/controllers/unsakini/web_controller.rb +27 -0
  54. data/app/mailers/unsakini/user_mailer.rb +13 -0
  55. data/app/models/concerns/unsakini/encryptable_model_concern.rb +97 -0
  56. data/app/models/unsakini/application_record.rb +7 -0
  57. data/app/models/unsakini/board.rb +16 -0
  58. data/app/models/unsakini/comment.rb +12 -0
  59. data/app/models/unsakini/post.rb +15 -0
  60. data/app/models/unsakini/user.rb +43 -0
  61. data/app/models/unsakini/user_board.rb +84 -0
  62. data/app/models/unsakini.rb +5 -0
  63. data/app/serializers/unsakini/board_serializer.rb +7 -0
  64. data/app/serializers/{comment_serializer.rb → unsakini/comment_serializer.rb} +6 -3
  65. data/app/serializers/unsakini/post_serializer.rb +26 -0
  66. data/app/serializers/unsakini/user_board_serializer.rb +14 -0
  67. data/app/serializers/{user_serializer.rb → unsakini/user_serializer.rb} +5 -2
  68. data/app/views/unsakini/user_mailer/confirm_account.html.erb +3 -0
  69. data/app/views/unsakini/web/index.html.erb +343 -0
  70. data/config/routes.rb +10 -10
  71. data/db/migrate/20161116114222_create_unsakini_boards.rb +10 -0
  72. data/db/migrate/{20161116200034_create_user_boards.rb → 20161116200034_create_unsakini_user_boards.rb} +3 -2
  73. data/db/migrate/{20161118031023_create_posts.rb → 20161118031023_create_unsakini_posts.rb} +2 -2
  74. data/db/migrate/{20161118100454_create_comments.rb → 20161118100454_create_unsakini_comments.rb} +2 -2
  75. data/db/migrate/20161126145352_create_unsakini_users.rb +15 -0
  76. data/lib/generators/unsakini/config/config_generator.rb +3 -1
  77. data/lib/generators/unsakini/dependencies/USAGE +5 -0
  78. data/lib/generators/unsakini/dependencies/dependencies_generator.rb +19 -0
  79. data/lib/tasks/unsakini_tasks.rake +6 -37
  80. data/lib/unsakini/engine.rb +6 -0
  81. data/lib/unsakini/version.rb +1 -1
  82. data/public/css/all.css +1204 -0
  83. data/public/css/all.css.map +7 -0
  84. data/public/css/bootstrap.css +5622 -0
  85. data/public/css/bootstrap.css.map +7 -0
  86. data/public/css/custom.css +15 -0
  87. data/public/favicons/android-chrome-144x144.png +0 -0
  88. data/public/favicons/android-chrome-192x192.png +0 -0
  89. data/public/favicons/android-chrome-36x36.png +0 -0
  90. data/public/favicons/android-chrome-48x48.png +0 -0
  91. data/public/favicons/android-chrome-72x72.png +0 -0
  92. data/public/favicons/android-chrome-96x96.png +0 -0
  93. data/public/favicons/apple-touch-icon-114x114.png +0 -0
  94. data/public/favicons/apple-touch-icon-120x120.png +0 -0
  95. data/public/favicons/apple-touch-icon-144x144.png +0 -0
  96. data/public/favicons/apple-touch-icon-152x152.png +0 -0
  97. data/public/favicons/apple-touch-icon-180x180.png +0 -0
  98. data/public/favicons/apple-touch-icon-57x57.png +0 -0
  99. data/public/favicons/apple-touch-icon-60x60.png +0 -0
  100. data/public/favicons/apple-touch-icon-72x72.png +0 -0
  101. data/public/favicons/apple-touch-icon-76x76.png +0 -0
  102. data/public/favicons/apple-touch-icon-precomposed.png +0 -0
  103. data/public/favicons/apple-touch-icon.png +0 -0
  104. data/public/favicons/favicon-16x16.png +0 -0
  105. data/public/favicons/favicon-194x194.png +0 -0
  106. data/public/favicons/favicon-32x32.png +0 -0
  107. data/public/favicons/favicon-96x96.png +0 -0
  108. data/public/favicons/favicon.ico +0 -0
  109. data/public/favicons/mstile-144x144.png +0 -0
  110. data/public/favicons/mstile-150x150.png +0 -0
  111. data/public/favicons/mstile-310x150.png +0 -0
  112. data/public/favicons/mstile-310x310.png +0 -0
  113. data/public/favicons/mstile-70x70.png +0 -0
  114. data/public/fonts/bootstrap/glyphicons-halflings-regular.eot +0 -0
  115. data/public/fonts/bootstrap/glyphicons-halflings-regular.svg +288 -0
  116. data/public/fonts/bootstrap/glyphicons-halflings-regular.ttf +0 -0
  117. data/public/fonts/bootstrap/glyphicons-halflings-regular.woff +0 -0
  118. data/public/fonts/bootstrap/glyphicons-halflings-regular.woff2 +0 -0
  119. data/public/fonts/font-awesome-4.3.0/css/font-awesome.css +1801 -0
  120. data/public/fonts/font-awesome-4.3.0/css/font-awesome.min.css +4 -0
  121. data/public/fonts/font-awesome-4.3.0/fonts/FontAwesome.otf +0 -0
  122. data/public/fonts/font-awesome-4.3.0/fonts/fontawesome-webfont.eot +0 -0
  123. data/public/fonts/font-awesome-4.3.0/fonts/fontawesome-webfont.svg +565 -0
  124. data/public/fonts/font-awesome-4.3.0/fonts/fontawesome-webfont.ttf +0 -0
  125. data/public/fonts/font-awesome-4.3.0/fonts/fontawesome-webfont.woff +0 -0
  126. data/public/fonts/font-awesome-4.3.0/fonts/fontawesome-webfont.woff2 +0 -0
  127. data/public/images/graph-01.svg +425 -0
  128. data/public/images/graph-02.svg +435 -0
  129. data/public/images/graph-03.svg +576 -0
  130. data/public/images/graph-04.svg +70 -0
  131. data/public/images/img-01.png +0 -0
  132. data/public/images/img-decor-01.jpg +0 -0
  133. data/public/images/img-decor-02.jpg +0 -0
  134. data/public/images/img-decor-03.jpg +0 -0
  135. data/public/images/img-social-placeholder-01.png +0 -0
  136. data/public/images/logo-cb.png +0 -0
  137. data/public/images/logo-codrops.png +0 -0
  138. data/public/images/logo-pixel.png +0 -0
  139. data/public/images/logo-smashing.png +0 -0
  140. data/public/images/logo-tnw.png +0 -0
  141. data/public/images/logo-w.png +0 -0
  142. data/public/images/unsakini.svg +56 -0
  143. data/public/images/user-01.jpg +0 -0
  144. data/public/images/user-02.jpg +0 -0
  145. data/public/images/user-03.jpg +0 -0
  146. data/public/js/bootstrap.js +2306 -0
  147. data/public/js/jquery-1.11.2.min.js +4 -0
  148. data/public/js/jquery.main.js +603 -0
  149. data/public/manifest.json +41 -0
  150. data/public/unsakini/app/448c34a56d699c29117adc64c43affeb.woff2 +0 -0
  151. data/public/unsakini/app/89889688147bd7575d6327160d64e760.svg +288 -0
  152. data/public/unsakini/app/assets/global.scss +3 -0
  153. data/public/unsakini/app/e18bbf611f2a2e43afc071aa2f4e1512.ttf +0 -0
  154. data/public/unsakini/app/f4769f9bdb7466be65088239c12046d1.eot +0 -0
  155. data/public/unsakini/app/fa2772327f55d8198301fdb8bcfc8158.woff +0 -0
  156. data/{angular/dist → public/unsakini/app}/favicon.ico +0 -0
  157. data/public/unsakini/app/index.html +14 -0
  158. data/public/unsakini/app/inline.d41d8cd98f00b204e980.bundle.js +2 -0
  159. data/public/unsakini/app/inline.d41d8cd98f00b204e980.bundle.map +1 -0
  160. data/public/unsakini/app/main.54f49c65d3d20650a5d5.bundle.js +2152 -0
  161. data/public/unsakini/app/main.54f49c65d3d20650a5d5.bundle.js.gz +0 -0
  162. data/public/unsakini/app/main.54f49c65d3d20650a5d5.bundle.map +1 -0
  163. data/public/unsakini/app/styles.58e065928ed8ebd0b582.bundle.js +2 -0
  164. data/public/unsakini/app/styles.58e065928ed8ebd0b582.bundle.map +1 -0
  165. data/public/unsakini/app/styles.5dac0e986fce6f8738b300cb558b56a0.bundle.css +8 -0
  166. data/spec/concerns/models/encryptable_concern.rb +3 -2
  167. data/spec/controllers/{web_base_controller_spec.rb → web_controller_spec.rb} +5 -4
  168. data/spec/dummy/config/application.rb +3 -1
  169. data/spec/dummy/config/environments/development.rb +2 -0
  170. data/spec/dummy/config/initializers/knock.rb +59 -0
  171. data/spec/dummy/db/schema.rb +16 -14
  172. data/spec/dummy/db/test.sqlite3 +0 -0
  173. data/spec/factories/boards.rb +1 -1
  174. data/spec/factories/comments.rb +1 -1
  175. data/spec/factories/posts.rb +1 -1
  176. data/spec/factories/user_boards.rb +1 -1
  177. data/spec/factories/users.rb +1 -1
  178. data/spec/models/board_spec.rb +2 -2
  179. data/spec/models/comment_spec.rb +2 -2
  180. data/spec/models/post_spec.rb +2 -2
  181. data/spec/models/user_board_spec.rb +19 -19
  182. data/spec/models/user_spec.rb +1 -1
  183. data/spec/requests/{api/boards/api_boards_crud_spec.rb → boards/boards_crud_spec.rb} +26 -26
  184. data/spec/requests/{api/boards/api_boards_pagination_spec.rb → boards/boards_pagination_spec.rb} +7 -7
  185. data/spec/requests/{api/boards/api_private_board_spec.rb → boards/private_board_spec.rb} +26 -26
  186. data/spec/requests/{api/boards/api_shared_board_spec.rb → boards/shared_board_spec.rb} +9 -9
  187. data/spec/requests/{api/boards/api_sharing_board_spec.rb → boards/sharing_board_spec.rb} +13 -13
  188. data/spec/requests/{api/comments/api_comments_pagination_spec.rb → comments/comments_pagination_spec.rb} +3 -3
  189. data/spec/requests/{api/comments/api_comments_private_board_spec.rb → comments/comments_private_board_spec.rb} +20 -20
  190. data/spec/requests/{api/comments/api_comments_shared_board_spec.rb → comments/comments_shared_board_spec.rb} +17 -17
  191. data/spec/requests/{api/posts/api_posts_pagination_spec.rb → posts/posts_pagination_spec.rb} +3 -3
  192. data/spec/requests/{api/posts/api_posts_private_board_spec.rb → posts/posts_private_board_spec.rb} +22 -22
  193. data/spec/requests/{api/posts/api_posts_shared_board_spec.rb → posts/posts_shared_board_spec.rb} +24 -24
  194. data/spec/requests/user/user_create_spec.rb +104 -0
  195. data/spec/requests/{api/api_users_spec.rb → user/user_search_spec.rb} +9 -9
  196. data/spec/schema/jwt.json +9 -0
  197. data/spec/schema/validation_message.json +4 -0
  198. data/spec/spec_helper.rb +2 -0
  199. data/spec/support/auth_helper.rb +0 -2
  200. metadata +204 -199
  201. data/angular/dist/index.html +0 -14
  202. data/angular/dist/inline.bundle.js +0 -139
  203. data/angular/dist/inline.map +0 -1
  204. data/angular/dist/main.bundle.js +0 -64689
  205. data/angular/dist/main.map +0 -1
  206. data/angular/dist/styles.bundle.js +0 -364
  207. data/angular/dist/styles.map +0 -1
  208. data/angular/src/styles.css +0 -1
  209. data/app/controllers/api/boards_controller.rb +0 -73
  210. data/app/controllers/api/comments_controller.rb +0 -51
  211. data/app/controllers/api/posts_controller.rb +0 -58
  212. data/app/controllers/api/share_board_controller.rb +0 -118
  213. data/app/controllers/api/users_controller.rb +0 -27
  214. data/app/controllers/concerns/board_owner_controller_concern.rb +0 -38
  215. data/app/controllers/concerns/comment_owner_controller_concern.rb +0 -33
  216. data/app/controllers/concerns/logged_in_controller_concern.rb +0 -21
  217. data/app/controllers/concerns/post_owner_controller_concern.rb +0 -36
  218. data/app/controllers/concerns/serializer_controller_concern.rb +0 -11
  219. data/app/controllers/user_token_controller.rb +0 -2
  220. data/app/controllers/web_base_controller.rb +0 -15
  221. data/app/models/application_record.rb +0 -5
  222. data/app/models/board.rb +0 -14
  223. data/app/models/comment.rb +0 -9
  224. data/app/models/concerns/encryptable_model_concern.rb +0 -96
  225. data/app/models/post.rb +0 -12
  226. data/app/models/user.rb +0 -6
  227. data/app/models/user_board.rb +0 -82
  228. data/app/serializers/board_serializer.rb +0 -5
  229. data/app/serializers/post_serializer.rb +0 -23
  230. data/app/serializers/user_board_serializer.rb +0 -11
  231. data/app/views/web_base/index.html +0 -16
  232. data/db/migrate/20161116114222_create_boards.rb +0 -9
  233. data/db/migrate/20161118221508_add_encrypted_password_to_user_board.rb +0 -5
  234. data/db/migrate/20161122211105_create_users.rb +0 -12
  235. data/db/migrate/20161124102633_add_is_shared_to_boards.rb +0 -5
  236. data/lib/generators/unsakini/angular/USAGE +0 -8
  237. data/lib/generators/unsakini/angular/angular_generator.rb +0 -7
  238. data/spec/dummy/config/initializers/assets.rb +0 -11
  239. data/spec/dummy/config/initializers/cookies_serializer.rb +0 -5
  240. data/spec/dummy/config/initializers/session_store.rb +0 -3
  241. data/spec/dummy/db/development.sqlite3 +0 -0
  242. data/spec/dummy/db/migrate/20161124210219_create_boards.unsakini_engine.rb +0 -10
  243. data/spec/dummy/db/migrate/20161124210220_create_user_boards.unsakini_engine.rb +0 -12
  244. data/spec/dummy/db/migrate/20161124210221_create_posts.unsakini_engine.rb +0 -13
  245. data/spec/dummy/db/migrate/20161124210222_create_comments.unsakini_engine.rb +0 -12
  246. data/spec/dummy/db/migrate/20161124210223_add_encrypted_password_to_user_board.unsakini_engine.rb +0 -6
  247. data/spec/dummy/db/migrate/20161124210224_create_users.unsakini_engine.rb +0 -13
  248. data/spec/dummy/db/migrate/20161124210225_add_is_shared_to_boards.unsakini_engine.rb +0 -6
  249. data/spec/dummy/public/app/favicon.ico +0 -0
  250. data/spec/dummy/public/app/index.html +0 -14
  251. data/spec/dummy/public/app/inline.bundle.js +0 -139
  252. data/spec/dummy/public/app/inline.map +0 -1
  253. data/spec/dummy/public/app/main.bundle.js +0 -64689
  254. data/spec/dummy/public/app/main.map +0 -1
  255. data/spec/dummy/public/app/styles.bundle.js +0 -364
  256. data/spec/dummy/public/app/styles.map +0 -1
  257. data/spec/dummy/tmp/unsakini-ng2/LICENSE +0 -21
  258. data/spec/dummy/tmp/unsakini-ng2/README.md +0 -1
  259. data/spec/dummy/tmp/unsakini-ng2/angular-cli.json +0 -59
  260. data/spec/dummy/tmp/unsakini-ng2/e2e/app.e2e-spec.ts +0 -14
  261. data/spec/dummy/tmp/unsakini-ng2/e2e/app.po.ts +0 -11
  262. data/spec/dummy/tmp/unsakini-ng2/e2e/signup.e2e-spec.ts +0 -28
  263. data/spec/dummy/tmp/unsakini-ng2/e2e/signup.po.ts +0 -31
  264. data/spec/dummy/tmp/unsakini-ng2/e2e/tsconfig.json +0 -16
  265. data/spec/dummy/tmp/unsakini-ng2/karma.conf.js +0 -45
  266. data/spec/dummy/tmp/unsakini-ng2/package.json +0 -49
  267. data/spec/dummy/tmp/unsakini-ng2/protractor.conf.js +0 -32
  268. data/spec/dummy/tmp/unsakini-ng2/src/app/app.component.css +0 -0
  269. data/spec/dummy/tmp/unsakini-ng2/src/app/app.component.html +0 -4
  270. data/spec/dummy/tmp/unsakini-ng2/src/app/app.component.spec.ts +0 -47
  271. data/spec/dummy/tmp/unsakini-ng2/src/app/app.component.ts +0 -10
  272. data/spec/dummy/tmp/unsakini-ng2/src/app/app.module.ts +0 -29
  273. data/spec/dummy/tmp/unsakini-ng2/src/app/app.routes.module.ts +0 -29
  274. data/spec/dummy/tmp/unsakini-ng2/src/app/index.ts +0 -2
  275. data/spec/dummy/tmp/unsakini-ng2/src/app/registration/registration.component.css +0 -0
  276. data/spec/dummy/tmp/unsakini-ng2/src/app/registration/registration.component.html +0 -14
  277. data/spec/dummy/tmp/unsakini-ng2/src/app/registration/registration.component.spec.ts +0 -157
  278. data/spec/dummy/tmp/unsakini-ng2/src/app/registration/registration.component.ts +0 -42
  279. data/spec/dummy/tmp/unsakini-ng2/src/environments/environment.prod.ts +0 -3
  280. data/spec/dummy/tmp/unsakini-ng2/src/environments/environment.ts +0 -8
  281. data/spec/dummy/tmp/unsakini-ng2/src/favicon.ico +0 -0
  282. data/spec/dummy/tmp/unsakini-ng2/src/index.html +0 -14
  283. data/spec/dummy/tmp/unsakini-ng2/src/main.ts +0 -12
  284. data/spec/dummy/tmp/unsakini-ng2/src/polyfills.ts +0 -19
  285. data/spec/dummy/tmp/unsakini-ng2/src/styles.css +0 -1
  286. data/spec/dummy/tmp/unsakini-ng2/src/test.ts +0 -31
  287. data/spec/dummy/tmp/unsakini-ng2/src/tsconfig.json +0 -18
  288. data/spec/dummy/tmp/unsakini-ng2/src/typings.d.ts +0 -2
  289. data/spec/dummy/tmp/unsakini-ng2/tslint.json +0 -114
  290. data/spec/dummy/tmp/unsakini-ng2/typings.json +0 -4
@@ -0,0 +1,603 @@
1
+ // page init
2
+ jQuery(function() {
3
+ initCycleCarousel();
4
+ initBackgroundResize();
5
+ // menu
6
+ menu.init();
7
+ // scroller
8
+ scroller.init();
9
+ });
10
+
11
+ // cycle scroll gallery init
12
+ function initCycleCarousel() {
13
+ jQuery('.cycle-gallery').scrollAbsoluteGallery({
14
+ mask: '.mask',
15
+ slider: '.slideset',
16
+ slides: '.slide',
17
+ btnPrev: 'a.btn-prev',
18
+ btnNext: 'a.btn-next',
19
+ pagerLinks: '.pagination li',
20
+ stretchSlideToMask: true,
21
+ pauseOnHover: true,
22
+ maskAutoSize: true,
23
+ autoRotation: false,
24
+ switchTime: 3000,
25
+ animSpeed: 500
26
+ });
27
+ }
28
+
29
+ // stretch background to fill blocks
30
+ function initBackgroundResize() {
31
+ jQuery('.visual-area').each(function() {
32
+ ImageStretcher.add({
33
+ container: this,
34
+ image: 'img.bg-stretch'
35
+ });
36
+ });
37
+ }
38
+
39
+ var body = $('body'),
40
+ // menu for mobile view
41
+ menu = {
42
+ config : {
43
+ trigger : jQuery('.nav-opener'),
44
+ open : false
45
+ },
46
+ init : function() {
47
+ this.config.trigger.click(this.toggle.bind(this));
48
+ },
49
+ toggle : function() {
50
+ if(this.config.open) {
51
+ body.removeClass('nav-active');
52
+ }
53
+ else {
54
+ body.addClass('nav-active');
55
+ }
56
+ this.config.open = !this.config.open;
57
+ }
58
+ };
59
+
60
+ // move some elements on scroll
61
+ var scroller = {
62
+ config : {
63
+ docElem : window.document.documentElement,
64
+ // The viewportFactor defines how much of the appearing item has to be visible in order to trigger the animation
65
+ // if we'd use a value of 0, this would mean that it would add the animation class as soon as the item is in the viewport.
66
+ // If we were to use the value of 1, the animation would only be triggered when we see all of the item in the viewport (100% of it)
67
+ viewportFactor : 0,
68
+ elems : '.slide-holder'
69
+ },
70
+ getViewportH : function() {
71
+ var client = this.config.docElem['clientHeight'],
72
+ inner = window['innerHeight'];
73
+
74
+ if( client < inner )
75
+ return inner;
76
+ else
77
+ return client;
78
+ },
79
+ scrollY : function() {
80
+ return window.pageYOffset || this.config.docElem.scrollTop;
81
+ },
82
+ getOffset : function(el) {
83
+ var offsetTop = 0, offsetLeft = 0;
84
+ do {
85
+ if ( !isNaN( el.offsetTop ) ) {
86
+ offsetTop += el.offsetTop;
87
+ }
88
+ if ( !isNaN( el.offsetLeft ) ) {
89
+ offsetLeft += el.offsetLeft;
90
+ }
91
+ } while( el = el.offsetParent )
92
+
93
+ return {
94
+ top : offsetTop,
95
+ left : offsetLeft
96
+ }
97
+ },
98
+ inViewport : function(el, h) {
99
+ var elH = el.offsetHeight,
100
+ scrolled = this.scrollY(),
101
+ viewed = scrolled + this.getViewportH(),
102
+ elTop = this.getOffset(el).top,
103
+ elBottom = elTop + elH,
104
+ // if 0, the element is considered in the viewport as soon as it enters.
105
+ // if 1, the element is considered in the viewport only when it's fully inside
106
+ // value in percentage (1 >= h >= 0)
107
+ h = h || 0;
108
+
109
+ return (elTop + elH * h) <= viewed && (elBottom) >= scrolled;
110
+ },
111
+ init : function() {
112
+ this.sections = jQuery(this.config.elems);
113
+ this.didScroll = false;
114
+
115
+ var self = this,
116
+ scrollHandler = function() {
117
+ if( !self.didScroll ) {
118
+ self.didScroll = true;
119
+ setTimeout( function() { self.scrollPage(); }, 60 );
120
+ }
121
+ },
122
+ resizeHandler = function() {
123
+ function delayed() {
124
+ self.scrollPage();
125
+ self.resizeTimeout = null;
126
+ }
127
+ if ( self.resizeTimeout ) {
128
+ clearTimeout( self.resizeTimeout );
129
+ }
130
+ self.resizeTimeout = setTimeout( delayed, 200 );
131
+ };
132
+
133
+ window.addEventListener( 'scroll', scrollHandler, false );
134
+ window.addEventListener( 'resize', resizeHandler, false );
135
+ },
136
+ scrollPage : function() {
137
+ var self = this;
138
+
139
+ this.sections.each(function() {
140
+ if( self.inViewport( this, self.config.viewportFactor ) ) {
141
+ jQuery(this).addClass('scroll-effect-animate');
142
+ }
143
+ else {
144
+ // this add class init if it doesn't have it. This will ensure that the items initially in the viewport will also animate on scroll
145
+ jQuery(this).addClass('scroll-effect-init');
146
+ jQuery(this).removeClass('scroll-effect-animate');
147
+ }
148
+ });
149
+ this.didScroll = false;
150
+ }
151
+ }
152
+
153
+ /*
154
+ * jQuery Cycle Carousel plugin
155
+ */
156
+ ;(function($){
157
+ function ScrollAbsoluteGallery(options) {
158
+ this.options = $.extend({
159
+ activeClass: 'active',
160
+ mask: 'div.slides-mask',
161
+ slider: '>ul',
162
+ slides: '>li',
163
+ btnPrev: '.btn-prev',
164
+ btnNext: '.btn-next',
165
+ pagerLinks: 'ul.pager > li',
166
+ generatePagination: false,
167
+ pagerList: '<ul>',
168
+ pagerListItem: '<li><a href="#"></a></li>',
169
+ pagerListItemText: 'a',
170
+ galleryReadyClass: 'gallery-js-ready',
171
+ currentNumber: 'span.current-num',
172
+ totalNumber: 'span.total-num',
173
+ maskAutoSize: false,
174
+ autoRotation: false,
175
+ pauseOnHover: false,
176
+ stretchSlideToMask: false,
177
+ switchTime: 3000,
178
+ animSpeed: 500,
179
+ handleTouch: true,
180
+ swipeThreshold: 15,
181
+ vertical: false
182
+ }, options);
183
+ this.init();
184
+ }
185
+ ScrollAbsoluteGallery.prototype = {
186
+ init: function() {
187
+ if(this.options.holder) {
188
+ this.findElements();
189
+ this.attachEvents();
190
+ this.makeCallback('onInit', this);
191
+ }
192
+ },
193
+ findElements: function() {
194
+ // find structure elements
195
+ this.holder = $(this.options.holder).addClass(this.options.galleryReadyClass);
196
+ this.mask = this.holder.find(this.options.mask);
197
+ this.slider = this.mask.find(this.options.slider);
198
+ this.slides = this.slider.find(this.options.slides);
199
+ this.btnPrev = this.holder.find(this.options.btnPrev);
200
+ this.btnNext = this.holder.find(this.options.btnNext);
201
+
202
+ // slide count display
203
+ this.currentNumber = this.holder.find(this.options.currentNumber);
204
+ this.totalNumber = this.holder.find(this.options.totalNumber);
205
+
206
+ // create gallery pagination
207
+ if(typeof this.options.generatePagination === 'string') {
208
+ this.pagerLinks = this.buildPagination();
209
+ } else {
210
+ this.pagerLinks = this.holder.find(this.options.pagerLinks);
211
+ }
212
+
213
+ // define index variables
214
+ this.sizeProperty = this.options.vertical ? 'height' : 'width';
215
+ this.positionProperty = this.options.vertical ? 'top' : 'left';
216
+ this.animProperty = this.options.vertical ? 'marginTop' : 'marginLeft';
217
+
218
+ this.slideSize = this.slides[this.sizeProperty]();
219
+ this.currentIndex = 0;
220
+ this.prevIndex = 0;
221
+
222
+ // reposition elements
223
+ this.options.maskAutoSize = this.options.vertical ? false : this.options.maskAutoSize;
224
+ if(this.options.vertical) {
225
+ this.mask.css({
226
+ height: this.slides.innerHeight()
227
+ });
228
+ }
229
+ if(this.options.maskAutoSize){
230
+ this.mask.css({
231
+ height: this.slider.height()
232
+ });
233
+ }
234
+ this.slider.css({
235
+ position: 'relative',
236
+ height: this.options.vertical ? this.slideSize * this.slides.length : '100%'
237
+ });
238
+ this.slides.css({
239
+ position: 'absolute'
240
+ }).css(this.positionProperty, -9999).eq(this.currentIndex).css(this.positionProperty, 0);
241
+ this.refreshState();
242
+ },
243
+ buildPagination: function() {
244
+ var pagerLinks = $();
245
+ if(!this.pagerHolder) {
246
+ this.pagerHolder = this.holder.find(this.options.generatePagination);
247
+ }
248
+ if(this.pagerHolder.length) {
249
+ this.pagerHolder.empty();
250
+ this.pagerList = $(this.options.pagerList).appendTo(this.pagerHolder);
251
+ for(var i = 0; i < this.slides.length; i++) {
252
+ $(this.options.pagerListItem).appendTo(this.pagerList).find(this.options.pagerListItemText).text(i+1);
253
+ }
254
+ pagerLinks = this.pagerList.children();
255
+ }
256
+ return pagerLinks;
257
+ },
258
+ attachEvents: function() {
259
+ // attach handlers
260
+ var self = this;
261
+ if(this.btnPrev.length) {
262
+ this.btnPrevHandler = function(e) {
263
+ e.preventDefault();
264
+ self.prevSlide();
265
+ };
266
+ this.btnPrev.click(this.btnPrevHandler);
267
+ }
268
+ if(this.btnNext.length) {
269
+ this.btnNextHandler = function(e) {
270
+ e.preventDefault();
271
+ self.nextSlide();
272
+ };
273
+ this.btnNext.click(this.btnNextHandler);
274
+ }
275
+ if(this.pagerLinks.length) {
276
+ this.pagerLinksHandler = function(e) {
277
+ e.preventDefault();
278
+ self.numSlide(self.pagerLinks.index(e.currentTarget));
279
+ };
280
+ this.pagerLinks.click(this.pagerLinksHandler);
281
+ }
282
+
283
+ // handle autorotation pause on hover
284
+ if(this.options.pauseOnHover) {
285
+ this.hoverHandler = function() {
286
+ clearTimeout(self.timer);
287
+ };
288
+ this.leaveHandler = function() {
289
+ self.autoRotate();
290
+ };
291
+ this.holder.bind({mouseenter: this.hoverHandler, mouseleave: this.leaveHandler});
292
+ }
293
+
294
+ // handle holder and slides dimensions
295
+ this.resizeHandler = function() {
296
+ if(!self.animating) {
297
+ if(self.options.stretchSlideToMask) {
298
+ self.resizeSlides();
299
+ }
300
+ self.resizeHolder();
301
+ self.setSlidesPosition(self.currentIndex);
302
+ }
303
+ };
304
+ $(window).bind('load resize orientationchange', this.resizeHandler);
305
+ if(self.options.stretchSlideToMask) {
306
+ self.resizeSlides();
307
+ }
308
+
309
+ // handle swipe on mobile devices
310
+ if(this.options.handleTouch && window.Hammer && this.mask.length && this.slides.length > 1 && isTouchDevice) {
311
+ this.swipeHandler = new Hammer.Manager(this.mask[0]);
312
+ this.swipeHandler.add(new Hammer.Pan({
313
+ direction: self.options.vertical ? Hammer.DIRECTION_VERTICAL : Hammer.DIRECTION_HORIZONTAL,
314
+ threshold: self.options.swipeThreshold
315
+ }));
316
+
317
+ this.swipeHandler.on('panstart', function() {
318
+ if(self.animating) {
319
+ self.swipeHandler.stop();
320
+ } else {
321
+ clearTimeout(self.timer);
322
+ }
323
+ }).on('panmove', function(e) {
324
+ self.swipeOffset = -self.slideSize + e[self.options.vertical ? 'deltaY' : 'deltaX'];
325
+ self.slider.css(self.animProperty, self.swipeOffset);
326
+ clearTimeout(self.timer);
327
+ }).on('panend', function(e) {
328
+ if(e.distance > self.options.swipeThreshold) {
329
+ if(e.offsetDirection === Hammer.DIRECTION_RIGHT || e.offsetDirection === Hammer.DIRECTION_DOWN) {
330
+ self.nextSlide();
331
+ } else {
332
+ self.prevSlide();
333
+ }
334
+ } else {
335
+ var tmpObj = {};
336
+ tmpObj[self.animProperty] = -self.slideSize;
337
+ self.slider.animate(tmpObj, {duration: self.options.animSpeed});
338
+ self.autoRotate();
339
+ }
340
+ self.swipeOffset = 0;
341
+ });
342
+ }
343
+
344
+ // start autorotation
345
+ this.autoRotate();
346
+ this.resizeHolder();
347
+ this.setSlidesPosition(this.currentIndex);
348
+ },
349
+ resizeSlides: function() {
350
+ this.slideSize = this.mask[this.options.vertical ? 'height' : 'width']();
351
+ this.slides.css(this.sizeProperty, this.slideSize);
352
+ },
353
+ resizeHolder: function() {
354
+ if(this.options.maskAutoSize) {
355
+ this.mask.css({
356
+ height: this.slides.eq(this.currentIndex).outerHeight(true)
357
+ });
358
+ }
359
+ },
360
+ prevSlide: function() {
361
+ if(!this.animating && this.slides.length > 1) {
362
+ this.direction = -1;
363
+ this.prevIndex = this.currentIndex;
364
+ if(this.currentIndex > 0) this.currentIndex--;
365
+ else this.currentIndex = this.slides.length - 1;
366
+ this.switchSlide();
367
+ }
368
+ },
369
+ nextSlide: function(fromAutoRotation) {
370
+ if(!this.animating && this.slides.length > 1) {
371
+ this.direction = 1;
372
+ this.prevIndex = this.currentIndex;
373
+ if(this.currentIndex < this.slides.length - 1) this.currentIndex++;
374
+ else this.currentIndex = 0;
375
+ this.switchSlide();
376
+ }
377
+ },
378
+ numSlide: function(c) {
379
+ if(!this.animating && this.currentIndex !== c && this.slides.length > 1) {
380
+ this.direction = c > this.currentIndex ? 1 : -1;
381
+ this.prevIndex = this.currentIndex;
382
+ this.currentIndex = c;
383
+ this.switchSlide();
384
+ }
385
+ },
386
+ preparePosition: function() {
387
+ // prepare slides position before animation
388
+ this.setSlidesPosition(this.prevIndex, this.direction < 0 ? this.currentIndex : null, this.direction > 0 ? this.currentIndex : null, this.direction);
389
+ },
390
+ setSlidesPosition: function(index, slideLeft, slideRight, direction) {
391
+ // reposition holder and nearest slides
392
+ if(this.slides.length > 1) {
393
+ var prevIndex = (typeof slideLeft === 'number' ? slideLeft : index > 0 ? index - 1 : this.slides.length - 1);
394
+ var nextIndex = (typeof slideRight === 'number' ? slideRight : index < this.slides.length - 1 ? index + 1 : 0);
395
+
396
+ this.slider.css(this.animProperty, this.swipeOffset ? this.swipeOffset : -this.slideSize);
397
+ this.slides.css(this.positionProperty, -9999).eq(index).css(this.positionProperty, this.slideSize);
398
+ if(prevIndex === nextIndex && typeof direction === 'number') {
399
+ var calcOffset = direction > 0 ? this.slideSize*2 : 0;
400
+ this.slides.eq(nextIndex).css(this.positionProperty, calcOffset);
401
+ } else {
402
+ this.slides.eq(prevIndex).css(this.positionProperty, 0);
403
+ this.slides.eq(nextIndex).css(this.positionProperty, this.slideSize*2);
404
+ }
405
+ }
406
+ },
407
+ switchSlide: function() {
408
+ // prepare positions and calculate offset
409
+ var self = this;
410
+ var oldSlide = this.slides.eq(this.prevIndex);
411
+ var newSlide = this.slides.eq(this.currentIndex);
412
+ this.animating = true;
413
+
414
+ // resize mask to fit slide
415
+ if(this.options.maskAutoSize) {
416
+ this.mask.animate({
417
+ height: newSlide.outerHeight(true)
418
+ }, {
419
+ duration: this.options.animSpeed
420
+ });
421
+ }
422
+
423
+ // start animation
424
+ var animProps = {};
425
+ animProps[this.animProperty] = this.direction > 0 ? -this.slideSize*2 : 0;
426
+ this.preparePosition();
427
+ this.slider.animate(animProps,{duration:this.options.animSpeed, complete:function() {
428
+ self.setSlidesPosition(self.currentIndex);
429
+
430
+ // start autorotation
431
+ self.animating = false;
432
+ self.autoRotate();
433
+
434
+ // onchange callback
435
+ self.makeCallback('onChange', self);
436
+ }});
437
+
438
+ // refresh classes
439
+ this.refreshState();
440
+
441
+ // onchange callback
442
+ this.makeCallback('onBeforeChange', this);
443
+ },
444
+ refreshState: function(initial) {
445
+ // slide change function
446
+ this.slides.removeClass(this.options.activeClass).eq(this.currentIndex).addClass(this.options.activeClass);
447
+ this.pagerLinks.removeClass(this.options.activeClass).eq(this.currentIndex).addClass(this.options.activeClass);
448
+
449
+ // display current slide number
450
+ this.currentNumber.html(this.currentIndex + 1);
451
+ this.totalNumber.html(this.slides.length);
452
+
453
+ // add class if not enough slides
454
+ this.holder.toggleClass('not-enough-slides', this.slides.length === 1);
455
+ },
456
+ autoRotate: function() {
457
+ var self = this;
458
+ clearTimeout(this.timer);
459
+ if(this.options.autoRotation) {
460
+ this.timer = setTimeout(function() {
461
+ self.nextSlide();
462
+ }, this.options.switchTime);
463
+ }
464
+ },
465
+ makeCallback: function(name) {
466
+ if(typeof this.options[name] === 'function') {
467
+ var args = Array.prototype.slice.call(arguments);
468
+ args.shift();
469
+ this.options[name].apply(this, args);
470
+ }
471
+ },
472
+ destroy: function() {
473
+ // destroy handler
474
+ this.btnPrev.unbind('click', this.btnPrevHandler);
475
+ this.btnNext.unbind('click', this.btnNextHandler);
476
+ this.pagerLinks.unbind('click', this.pagerLinksHandler);
477
+ this.holder.unbind('mouseenter', this.hoverHandler);
478
+ this.holder.unbind('mouseleave', this.leaveHandler);
479
+ $(window).unbind('load resize orientationchange', this.resizeHandler);
480
+ clearTimeout(this.timer);
481
+
482
+ // destroy swipe handler
483
+ if(this.swipeHandler) {
484
+ this.swipeHandler.destroy();
485
+ }
486
+
487
+ // remove inline styles, classes and pagination
488
+ this.holder.removeClass(this.options.galleryReadyClass);
489
+ this.slider.add(this.slides).removeAttr('style');
490
+ if(typeof this.options.generatePagination === 'string') {
491
+ this.pagerHolder.empty();
492
+ }
493
+ }
494
+ };
495
+
496
+ // detect device type
497
+ var isTouchDevice = /Windows Phone/.test(navigator.userAgent) || ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch;
498
+
499
+ // jquery plugin
500
+ $.fn.scrollAbsoluteGallery = function(opt){
501
+ return this.each(function(){
502
+ $(this).data('ScrollAbsoluteGallery', new ScrollAbsoluteGallery($.extend(opt,{holder:this})));
503
+ });
504
+ };
505
+ }(jQuery));
506
+
507
+ /*
508
+ * Image Stretch module
509
+ */
510
+ var ImageStretcher = {
511
+ getDimensions: function(data) {
512
+ // calculate element coords to fit in mask
513
+ var ratio = data.imageRatio || (data.imageWidth / data.imageHeight),
514
+ slideWidth = data.maskWidth,
515
+ slideHeight = slideWidth / ratio;
516
+
517
+ if(slideHeight < data.maskHeight) {
518
+ slideHeight = data.maskHeight;
519
+ slideWidth = slideHeight * ratio;
520
+ }
521
+ return {
522
+ width: slideWidth,
523
+ height: slideHeight,
524
+ top: (data.maskHeight - slideHeight) / 2,
525
+ left: (data.maskWidth - slideWidth) / 2
526
+ };
527
+ },
528
+ getRatio: function(image) {
529
+ if(image.prop('naturalWidth')) {
530
+ return image.prop('naturalWidth') / image.prop('naturalHeight');
531
+ } else {
532
+ var img = new Image();
533
+ img.src = image.prop('src');
534
+ return img.width / img.height;
535
+ }
536
+ },
537
+ imageLoaded: function(image, callback) {
538
+ var self = this;
539
+ var loadHandler = function() {
540
+ callback.call(self);
541
+ };
542
+ if(image.prop('complete')) {
543
+ loadHandler();
544
+ } else {
545
+ image.one('load', loadHandler);
546
+ }
547
+ },
548
+ resizeHandler: function() {
549
+ var self = this;
550
+ jQuery.each(this.imgList, function(index, item) {
551
+ if(item.image.prop('complete')) {
552
+ self.resizeImage(item.image, item.container);
553
+ }
554
+ });
555
+ },
556
+ resizeImage: function(image, container) {
557
+ this.imageLoaded(image, function() {
558
+ var styles = this.getDimensions({
559
+ imageRatio: this.getRatio(image),
560
+ maskWidth: container.width(),
561
+ maskHeight: container.height()
562
+ });
563
+ image.css({
564
+ width: styles.width,
565
+ height: styles.height,
566
+ marginTop: styles.top,
567
+ marginLeft: styles.left
568
+ });
569
+ });
570
+ },
571
+ add: function(options) {
572
+ var container = jQuery(options.container ? options.container : window),
573
+ image = typeof options.image === 'string' ? container.find(options.image) : jQuery(options.image);
574
+
575
+ // resize image
576
+ this.resizeImage(image, container);
577
+
578
+ // add resize handler once if needed
579
+ if(!this.win) {
580
+ this.resizeHandler = jQuery.proxy(this.resizeHandler, this);
581
+ this.imgList = [];
582
+ this.win = jQuery(window);
583
+ this.win.on('resize orientationchange', this.resizeHandler);
584
+ }
585
+
586
+ // store item in collection
587
+ this.imgList.push({
588
+ container: container,
589
+ image: image
590
+ });
591
+ }
592
+ };
593
+
594
+ /*! Hammer.JS - v2.0.4 - 2014-09-28
595
+ * http://hammerjs.github.io/
596
+ *
597
+ * Copyright (c) 2014 Jorik Tangelder;
598
+ * Licensed under the MIT license */
599
+ if(Object.create){!function(a,b,c,d){"use strict";function e(a,b,c){return setTimeout(k(a,c),b)}function f(a,b,c){return Array.isArray(a)?(g(a,c[b],c),!0):!1}function g(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e<a.length;)b.call(c,a[e],e,a),e++;else for(e in a)a.hasOwnProperty(e)&&b.call(c,a[e],e,a)}function h(a,b,c){for(var e=Object.keys(b),f=0;f<e.length;)(!c||c&&a[e[f]]===d)&&(a[e[f]]=b[e[f]]),f++;return a}function i(a,b){return h(a,b,!0)}function j(a,b,c){var d,e=b.prototype;d=a.prototype=Object.create(e),d.constructor=a,d._super=e,c&&h(d,c)}function k(a,b){return function(){return a.apply(b,arguments)}}function l(a,b){return typeof a==kb?a.apply(b?b[0]||d:d,b):a}function m(a,b){return a===d?b:a}function n(a,b,c){g(r(b),function(b){a.addEventListener(b,c,!1)})}function o(a,b,c){g(r(b),function(b){a.removeEventListener(b,c,!1)})}function p(a,b){for(;a;){if(a==b)return!0;a=a.parentNode}return!1}function q(a,b){return a.indexOf(b)>-1}function r(a){return a.trim().split(/\s+/g)}function s(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;d<a.length;){if(c&&a[d][c]==b||!c&&a[d]===b)return d;d++}return-1}function t(a){return Array.prototype.slice.call(a,0)}function u(a,b,c){for(var d=[],e=[],f=0;f<a.length;){var g=b?a[f][b]:a[f];s(e,g)<0&&d.push(a[f]),e[f]=g,f++}return c&&(d=b?d.sort(function(a,c){return a[b]>c[b]}):d.sort()),d}function v(a,b){for(var c,e,f=b[0].toUpperCase()+b.slice(1),g=0;g<ib.length;){if(c=ib[g],e=c?c+f:b,e in a)return e;g++}return d}function w(){return ob++}function x(a){var b=a.ownerDocument;return b.defaultView||b.parentWindow}function y(a,b){var c=this;this.manager=a,this.callback=b,this.element=a.element,this.target=a.options.inputTarget,this.domHandler=function(b){l(a.options.enable,[a])&&c.handler(b)},this.init()}function z(a){var b,c=a.options.inputClass;return new(b=c?c:rb?N:sb?Q:qb?S:M)(a,A)}function A(a,b,c){var d=c.pointers.length,e=c.changedPointers.length,f=b&yb&&d-e===0,g=b&(Ab|Bb)&&d-e===0;c.isFirst=!!f,c.isFinal=!!g,f&&(a.session={}),c.eventType=b,B(a,c),a.emit("hammer.input",c),a.recognize(c),a.session.prevInput=c}function B(a,b){var c=a.session,d=b.pointers,e=d.length;c.firstInput||(c.firstInput=E(b)),e>1&&!c.firstMultiple?c.firstMultiple=E(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=F(d);b.timeStamp=nb(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=J(h,i),b.distance=I(h,i),C(c,b),b.offsetDirection=H(b.deltaX,b.deltaY),b.scale=g?L(g.pointers,d):1,b.rotation=g?K(g.pointers,d):0,D(c,b);var j=a.element;p(b.srcEvent.target,j)&&(j=b.srcEvent.target),b.target=j}function C(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};(b.eventType===yb||f.eventType===Ab)&&(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function D(a,b){var c,e,f,g,h=a.lastInterval||b,i=b.timeStamp-h.timeStamp;if(b.eventType!=Bb&&(i>xb||h.velocity===d)){var j=h.deltaX-b.deltaX,k=h.deltaY-b.deltaY,l=G(i,j,k);e=l.x,f=l.y,c=mb(l.x)>mb(l.y)?l.x:l.y,g=H(j,k),a.lastInterval=b}else c=h.velocity,e=h.velocityX,f=h.velocityY,g=h.direction;b.velocity=c,b.velocityX=e,b.velocityY=f,b.direction=g}function E(a){for(var b=[],c=0;c<a.pointers.length;)b[c]={clientX:lb(a.pointers[c].clientX),clientY:lb(a.pointers[c].clientY)},c++;return{timeStamp:nb(),pointers:b,center:F(b),deltaX:a.deltaX,deltaY:a.deltaY}}function F(a){var b=a.length;if(1===b)return{x:lb(a[0].clientX),y:lb(a[0].clientY)};for(var c=0,d=0,e=0;b>e;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:lb(c/b),y:lb(d/b)}}function G(a,b,c){return{x:b/a||0,y:c/a||0}}function H(a,b){return a===b?Cb:mb(a)>=mb(b)?a>0?Db:Eb:b>0?Fb:Gb}function I(a,b,c){c||(c=Kb);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function J(a,b,c){c||(c=Kb);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function K(a,b){return J(b[1],b[0],Lb)-J(a[1],a[0],Lb)}function L(a,b){return I(b[0],b[1],Lb)/I(a[0],a[1],Lb)}function M(){this.evEl=Nb,this.evWin=Ob,this.allow=!0,this.pressed=!1,y.apply(this,arguments)}function N(){this.evEl=Rb,this.evWin=Sb,y.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function O(){this.evTarget=Ub,this.evWin=Vb,this.started=!1,y.apply(this,arguments)}function P(a,b){var c=t(a.touches),d=t(a.changedTouches);return b&(Ab|Bb)&&(c=u(c.concat(d),"identifier",!0)),[c,d]}function Q(){this.evTarget=Xb,this.targetIds={},y.apply(this,arguments)}function R(a,b){var c=t(a.touches),d=this.targetIds;if(b&(yb|zb)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=t(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return p(a.target,i)}),b===yb)for(e=0;e<f.length;)d[f[e].identifier]=!0,e++;for(e=0;e<g.length;)d[g[e].identifier]&&h.push(g[e]),b&(Ab|Bb)&&delete d[g[e].identifier],e++;return h.length?[u(f.concat(h),"identifier",!0),h]:void 0}function S(){y.apply(this,arguments);var a=k(this.handler,this);this.touch=new Q(this.manager,a),this.mouse=new M(this.manager,a)}function T(a,b){this.manager=a,this.set(b)}function U(a){if(q(a,bc))return bc;var b=q(a,cc),c=q(a,dc);return b&&c?cc+" "+dc:b||c?b?cc:dc:q(a,ac)?ac:_b}function V(a){this.id=w(),this.manager=null,this.options=i(a||{},this.defaults),this.options.enable=m(this.options.enable,!0),this.state=ec,this.simultaneous={},this.requireFail=[]}function W(a){return a&jc?"cancel":a&hc?"end":a&gc?"move":a&fc?"start":""}function X(a){return a==Gb?"down":a==Fb?"up":a==Db?"left":a==Eb?"right":""}function Y(a,b){var c=b.manager;return c?c.get(a):a}function Z(){V.apply(this,arguments)}function $(){Z.apply(this,arguments),this.pX=null,this.pY=null}function _(){Z.apply(this,arguments)}function ab(){V.apply(this,arguments),this._timer=null,this._input=null}function bb(){Z.apply(this,arguments)}function cb(){Z.apply(this,arguments)}function db(){V.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function eb(a,b){return b=b||{},b.recognizers=m(b.recognizers,eb.defaults.preset),new fb(a,b)}function fb(a,b){b=b||{},this.options=i(b,eb.defaults),this.options.inputTarget=this.options.inputTarget||a,this.handlers={},this.session={},this.recognizers=[],this.element=a,this.input=z(this),this.touchAction=new T(this,this.options.touchAction),gb(this,!0),g(b.recognizers,function(a){var b=this.add(new a[0](a[1]));a[2]&&b.recognizeWith(a[2]),a[3]&&b.requireFailure(a[3])},this)}function gb(a,b){var c=a.element;g(a.options.cssProps,function(a,d){c.style[v(c.style,d)]=b?a:""})}function hb(a,c){var d=b.createEvent("Event");d.initEvent(a,!0,!0),d.gesture=c,c.target.dispatchEvent(d)}var ib=["","webkit","moz","MS","ms","o"],jb=b.createElement("div"),kb="function",lb=Math.round,mb=Math.abs,nb=Date.now,ob=1,pb=/mobile|tablet|ip(ad|hone|od)|android/i,qb="ontouchstart"in a,rb=v(a,"PointerEvent")!==d,sb=qb&&pb.test(navigator.userAgent),tb="touch",ub="pen",vb="mouse",wb="kinect",xb=25,yb=1,zb=2,Ab=4,Bb=8,Cb=1,Db=2,Eb=4,Fb=8,Gb=16,Hb=Db|Eb,Ib=Fb|Gb,Jb=Hb|Ib,Kb=["x","y"],Lb=["clientX","clientY"];y.prototype={handler:function(){},init:function(){this.evEl&&n(this.element,this.evEl,this.domHandler),this.evTarget&&n(this.target,this.evTarget,this.domHandler),this.evWin&&n(x(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&o(this.element,this.evEl,this.domHandler),this.evTarget&&o(this.target,this.evTarget,this.domHandler),this.evWin&&o(x(this.element),this.evWin,this.domHandler)}};var Mb={mousedown:yb,mousemove:zb,mouseup:Ab},Nb="mousedown",Ob="mousemove mouseup";j(M,y,{handler:function(a){var b=Mb[a.type];b&yb&&0===a.button&&(this.pressed=!0),b&zb&&1!==a.which&&(b=Ab),this.pressed&&this.allow&&(b&Ab&&(this.pressed=!1),this.callback(this.manager,b,{pointers:[a],changedPointers:[a],pointerType:vb,srcEvent:a}))}});var Pb={pointerdown:yb,pointermove:zb,pointerup:Ab,pointercancel:Bb,pointerout:Bb},Qb={2:tb,3:ub,4:vb,5:wb},Rb="pointerdown",Sb="pointermove pointerup pointercancel";a.MSPointerEvent&&(Rb="MSPointerDown",Sb="MSPointerMove MSPointerUp MSPointerCancel"),j(N,y,{handler:function(a){var b=this.store,c=!1,d=a.type.toLowerCase().replace("ms",""),e=Pb[d],f=Qb[a.pointerType]||a.pointerType,g=f==tb,h=s(b,a.pointerId,"pointerId");e&yb&&(0===a.button||g)?0>h&&(b.push(a),h=b.length-1):e&(Ab|Bb)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var Tb={touchstart:yb,touchmove:zb,touchend:Ab,touchcancel:Bb},Ub="touchstart",Vb="touchstart touchmove touchend touchcancel";j(O,y,{handler:function(a){var b=Tb[a.type];if(b===yb&&(this.started=!0),this.started){var c=P.call(this,a,b);b&(Ab|Bb)&&c[0].length-c[1].length===0&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:tb,srcEvent:a})}}});var Wb={touchstart:yb,touchmove:zb,touchend:Ab,touchcancel:Bb},Xb="touchstart touchmove touchend touchcancel";j(Q,y,{handler:function(a){var b=Wb[a.type],c=R.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:tb,srcEvent:a})}}),j(S,y,{handler:function(a,b,c){var d=c.pointerType==tb,e=c.pointerType==vb;if(d)this.mouse.allow=!1;else if(e&&!this.mouse.allow)return;b&(Ab|Bb)&&(this.mouse.allow=!0),this.callback(a,b,c)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Yb=v(jb.style,"touchAction"),Zb=Yb!==d,$b="compute",_b="auto",ac="manipulation",bc="none",cc="pan-x",dc="pan-y";T.prototype={set:function(a){a==$b&&(a=this.compute()),Zb&&(this.manager.element.style[Yb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return g(this.manager.recognizers,function(b){l(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),U(a.join(" "))},preventDefaults:function(a){if(!Zb){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return void b.preventDefault();var d=this.actions,e=q(d,bc),f=q(d,dc),g=q(d,cc);return e||f&&c&Hb||g&&c&Ib?this.preventSrc(b):void 0}},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var ec=1,fc=2,gc=4,hc=8,ic=hc,jc=16,kc=32;V.prototype={defaults:{},set:function(a){return h(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(f(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=Y(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return f(a,"dropRecognizeWith",this)?this:(a=Y(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(f(a,"requireFailure",this))return this;var b=this.requireFail;return a=Y(a,this),-1===s(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(f(a,"dropRequireFailure",this))return this;a=Y(a,this);var b=s(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function b(b){c.manager.emit(c.options.event+(b?W(d):""),a)}var c=this,d=this.state;hc>d&&b(!0),b(),d>=hc&&b(!0)},tryEmit:function(a){return this.canEmit()?this.emit(a):void(this.state=kc)},canEmit:function(){for(var a=0;a<this.requireFail.length;){if(!(this.requireFail[a].state&(kc|ec)))return!1;a++}return!0},recognize:function(a){var b=h({},a);return l(this.options.enable,[this,b])?(this.state&(ic|jc|kc)&&(this.state=ec),this.state=this.process(b),void(this.state&(fc|gc|hc|jc)&&this.tryEmit(b))):(this.reset(),void(this.state=kc))},process:function(){},getTouchAction:function(){},reset:function(){}},j(Z,V,{defaults:{pointers:1},attrTest:function(a){var b=this.options.pointers;return 0===b||a.pointers.length===b},process:function(a){var b=this.state,c=a.eventType,d=b&(fc|gc),e=this.attrTest(a);return d&&(c&Bb||!e)?b|jc:d||e?c&Ab?b|hc:b&fc?b|gc:fc:kc}}),j($,Z,{defaults:{event:"pan",threshold:10,pointers:1,direction:Jb},getTouchAction:function(){var a=this.options.direction,b=[];return a&Hb&&b.push(dc),a&Ib&&b.push(cc),b},directionTest:function(a){var b=this.options,c=!0,d=a.distance,e=a.direction,f=a.deltaX,g=a.deltaY;return e&b.direction||(b.direction&Hb?(e=0===f?Cb:0>f?Db:Eb,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?Cb:0>g?Fb:Gb,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return Z.prototype.attrTest.call(this,a)&&(this.state&fc||!(this.state&fc)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=X(a.direction);b&&this.manager.emit(this.options.event+b,a),this._super.emit.call(this,a)}}),j(_,Z,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[bc]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&fc)},emit:function(a){if(this._super.emit.call(this,a),1!==a.scale){var b=a.scale<1?"in":"out";this.manager.emit(this.options.event+b,a)}}}),j(ab,V,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[_b]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,f=a.deltaTime>b.time;if(this._input=a,!d||!c||a.eventType&(Ab|Bb)&&!f)this.reset();else if(a.eventType&yb)this.reset(),this._timer=e(function(){this.state=ic,this.tryEmit()},b.time,this);else if(a.eventType&Ab)return ic;return kc},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===ic&&(a&&a.eventType&Ab?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=nb(),this.manager.emit(this.options.event,this._input)))}}),j(bb,Z,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[bc]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&fc)}}),j(cb,Z,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:Hb|Ib,pointers:1},getTouchAction:function(){return $.prototype.getTouchAction.call(this)},attrTest:function(a){var b,c=this.options.direction;return c&(Hb|Ib)?b=a.velocity:c&Hb?b=a.velocityX:c&Ib&&(b=a.velocityY),this._super.attrTest.call(this,a)&&c&a.direction&&a.distance>this.options.threshold&&mb(b)>this.options.velocity&&a.eventType&Ab},emit:function(a){var b=X(a.direction);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),j(db,V,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[ac]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,f=a.deltaTime<b.time;if(this.reset(),a.eventType&yb&&0===this.count)return this.failTimeout();if(d&&f&&c){if(a.eventType!=Ab)return this.failTimeout();var g=this.pTime?a.timeStamp-this.pTime<b.interval:!0,h=!this.pCenter||I(this.pCenter,a.center)<b.posThreshold;this.pTime=a.timeStamp,this.pCenter=a.center,h&&g?this.count+=1:this.count=1,this._input=a;var i=this.count%b.taps;if(0===i)return this.hasRequireFailures()?(this._timer=e(function(){this.state=ic,this.tryEmit()},b.interval,this),fc):ic}return kc},failTimeout:function(){return this._timer=e(function(){this.state=kc},this.options.interval,this),kc},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==ic&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),eb.VERSION="2.0.4",eb.defaults={domEvents:!1,touchAction:$b,enable:!0,inputTarget:null,inputClass:null,preset:[[bb,{enable:!1}],[_,{enable:!1},["rotate"]],[cb,{direction:Hb}],[$,{direction:Hb},["swipe"]],[db],[db,{event:"doubletap",taps:2},["tap"]],[ab]],cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}};var lc=1,mc=2;fb.prototype={set:function(a){return h(this.options,a),a.touchAction&&this.touchAction.update(),a.inputTarget&&(this.input.destroy(),this.input.target=a.inputTarget,this.input.init()),this},stop:function(a){this.session.stopped=a?mc:lc},recognize:function(a){var b=this.session;if(!b.stopped){this.touchAction.preventDefaults(a);var c,d=this.recognizers,e=b.curRecognizer;(!e||e&&e.state&ic)&&(e=b.curRecognizer=null);for(var f=0;f<d.length;)c=d[f],b.stopped===mc||e&&c!=e&&!c.canRecognizeWith(e)?c.reset():c.recognize(a),!e&&c.state&(fc|gc|hc)&&(e=b.curRecognizer=c),f++}},get:function(a){if(a instanceof V)return a;for(var b=this.recognizers,c=0;c<b.length;c++)if(b[c].options.event==a)return b[c];return null},add:function(a){if(f(a,"add",this))return this;var b=this.get(a.options.event);return b&&this.remove(b),this.recognizers.push(a),a.manager=this,this.touchAction.update(),a},remove:function(a){if(f(a,"remove",this))return this;var b=this.recognizers;return a=this.get(a),b.splice(s(b,a),1),this.touchAction.update(),this},on:function(a,b){var c=this.handlers;return g(r(a),function(a){c[a]=c[a]||[],c[a].push(b)}),this},off:function(a,b){var c=this.handlers;return g(r(a),function(a){b?c[a].splice(s(c[a],b),1):delete c[a]}),this},emit:function(a,b){this.options.domEvents&&hb(a,b);var c=this.handlers[a]&&this.handlers[a].slice();if(c&&c.length){b.type=a,b.preventDefault=function(){b.srcEvent.preventDefault()};for(var d=0;d<c.length;)c[d](b),d++}},destroy:function(){this.element&&gb(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},h(eb,{INPUT_START:yb,INPUT_MOVE:zb,INPUT_END:Ab,INPUT_CANCEL:Bb,STATE_POSSIBLE:ec,STATE_BEGAN:fc,STATE_CHANGED:gc,STATE_ENDED:hc,STATE_RECOGNIZED:ic,STATE_CANCELLED:jc,STATE_FAILED:kc,DIRECTION_NONE:Cb,DIRECTION_LEFT:Db,DIRECTION_RIGHT:Eb,DIRECTION_UP:Fb,DIRECTION_DOWN:Gb,DIRECTION_HORIZONTAL:Hb,DIRECTION_VERTICAL:Ib,DIRECTION_ALL:Jb,Manager:fb,Input:y,TouchAction:T,TouchInput:Q,MouseInput:M,PointerEventInput:N,TouchMouseInput:S,SingleTouchInput:O,Recognizer:V,AttrRecognizer:Z,Tap:db,Pan:$,Swipe:cb,Pinch:_,Rotate:bb,Press:ab,on:n,off:o,each:g,merge:i,extend:h,inherit:j,bindFn:k,prefixed:v}),typeof define==kb&&define.amd?define(function(){return eb}):"undefined"!=typeof module&&module.exports?module.exports=eb:a[c]=eb}(window,document,"Hammer");}
600
+
601
+ /*! VelocityJS.org (1.2.1). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License */
602
+ /*! VelocityJS.org jQuery Shim (1.0.1). (C) 2014 The jQuery Foundation. MIT @license: en.wikipedia.org/wiki/MIT_License. */
603
+ !function(e){function t(e){var t=e.length,r=$.type(e);return"function"===r||$.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===r||0===t||"number"==typeof t&&t>0&&t-1 in e}if(!e.jQuery){var $=function(e,t){return new $.fn.init(e,t)};$.isWindow=function(e){return null!=e&&e==e.window},$.type=function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?a[o.call(e)]||"object":typeof e},$.isArray=Array.isArray||function(e){return"array"===$.type(e)},$.isPlainObject=function(e){var t;if(!e||"object"!==$.type(e)||e.nodeType||$.isWindow(e))return!1;try{if(e.constructor&&!n.call(e,"constructor")&&!n.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}for(t in e);return void 0===t||n.call(e,t)},$.each=function(e,r,a){var n,o=0,i=e.length,s=t(e);if(a){if(s)for(;i>o&&(n=r.apply(e[o],a),n!==!1);o++);else for(o in e)if(n=r.apply(e[o],a),n===!1)break}else if(s)for(;i>o&&(n=r.call(e[o],o,e[o]),n!==!1);o++);else for(o in e)if(n=r.call(e[o],o,e[o]),n===!1)break;return e},$.data=function(e,t,a){if(void 0===a){var n=e[$.expando],o=n&&r[n];if(void 0===t)return o;if(o&&t in o)return o[t]}else if(void 0!==t){var n=e[$.expando]||(e[$.expando]=++$.uuid);return r[n]=r[n]||{},r[n][t]=a,a}},$.removeData=function(e,t){var a=e[$.expando],n=a&&r[a];n&&$.each(t,function(e,t){delete n[t]})},$.extend=function(){var e,t,r,a,n,o,i=arguments[0]||{},s=1,l=arguments.length,u=!1;for("boolean"==typeof i&&(u=i,i=arguments[s]||{},s++),"object"!=typeof i&&"function"!==$.type(i)&&(i={}),s===l&&(i=this,s--);l>s;s++)if(null!=(n=arguments[s]))for(a in n)e=i[a],r=n[a],i!==r&&(u&&r&&($.isPlainObject(r)||(t=$.isArray(r)))?(t?(t=!1,o=e&&$.isArray(e)?e:[]):o=e&&$.isPlainObject(e)?e:{},i[a]=$.extend(u,o,r)):void 0!==r&&(i[a]=r));return i},$.queue=function(e,r,a){function n(e,r){var a=r||[];return null!=e&&(t(Object(e))?!function(e,t){for(var r=+t.length,a=0,n=e.length;r>a;)e[n++]=t[a++];if(r!==r)for(;void 0!==t[a];)e[n++]=t[a++];return e.length=n,e}(a,"string"==typeof e?[e]:e):[].push.call(a,e)),a}if(e){r=(r||"fx")+"queue";var o=$.data(e,r);return a?(!o||$.isArray(a)?o=$.data(e,r,n(a)):o.push(a),o):o||[]}},$.dequeue=function(e,t){$.each(e.nodeType?[e]:e,function(e,r){t=t||"fx";var a=$.queue(r,t),n=a.shift();"inprogress"===n&&(n=a.shift()),n&&("fx"===t&&a.unshift("inprogress"),n.call(r,function(){$.dequeue(r,t)}))})},$.fn=$.prototype={init:function(e){if(e.nodeType)return this[0]=e,this;throw new Error("Not a DOM node.")},offset:function(){var t=this[0].getBoundingClientRect?this[0].getBoundingClientRect():{top:0,left:0};return{top:t.top+(e.pageYOffset||document.scrollTop||0)-(document.clientTop||0),left:t.left+(e.pageXOffset||document.scrollLeft||0)-(document.clientLeft||0)}},position:function(){function e(){for(var e=this.offsetParent||document;e&&"html"===!e.nodeType.toLowerCase&&"static"===e.style.position;)e=e.offsetParent;return e||document}var t=this[0],e=e.apply(t),r=this.offset(),a=/^(?:body|html)$/i.test(e.nodeName)?{top:0,left:0}:$(e).offset();return r.top-=parseFloat(t.style.marginTop)||0,r.left-=parseFloat(t.style.marginLeft)||0,e.style&&(a.top+=parseFloat(e.style.borderTopWidth)||0,a.left+=parseFloat(e.style.borderLeftWidth)||0),{top:r.top-a.top,left:r.left-a.left}}};var r={};$.expando="velocity"+(new Date).getTime(),$.uuid=0;for(var a={},n=a.hasOwnProperty,o=a.toString,i="Boolean Number String Function Array Date RegExp Object Error".split(" "),s=0;s<i.length;s++)a["[object "+i[s]+"]"]=i[s].toLowerCase();$.fn.init.prototype=$.fn,e.Velocity={Utilities:$}}}(window),function(e){"object"==typeof module&&"object"==typeof module.exports?module.exports=e():"function"==typeof define&&define.amd?define(e):e()}(function(){return function(e,t,r,a){function n(e){for(var t=-1,r=e?e.length:0,a=[];++t<r;){var n=e[t];n&&a.push(n)}return a}function o(e){return g.isWrapped(e)?e=[].slice.call(e):g.isNode(e)&&(e=[e]),e}function i(e){var t=$.data(e,"velocity");return null===t?a:t}function s(e){return function(t){return Math.round(t*e)*(1/e)}}function l(e,r,a,n){function o(e,t){return 1-3*t+3*e}function i(e,t){return 3*t-6*e}function s(e){return 3*e}function l(e,t,r){return((o(t,r)*e+i(t,r))*e+s(t))*e}function u(e,t,r){return 3*o(t,r)*e*e+2*i(t,r)*e+s(t)}function c(t,r){for(var n=0;m>n;++n){var o=u(r,e,a);if(0===o)return r;var i=l(r,e,a)-t;r-=i/o}return r}function p(){for(var t=0;b>t;++t)w[t]=l(t*x,e,a)}function f(t,r,n){var o,i,s=0;do i=r+(n-r)/2,o=l(i,e,a)-t,o>0?n=i:r=i;while(Math.abs(o)>h&&++s<v);return i}function d(t){for(var r=0,n=1,o=b-1;n!=o&&w[n]<=t;++n)r+=x;--n;var i=(t-w[n])/(w[n+1]-w[n]),s=r+i*x,l=u(s,e,a);return l>=y?c(t,s):0==l?s:f(t,r,r+x)}function g(){V=!0,(e!=r||a!=n)&&p()}var m=4,y=.001,h=1e-7,v=10,b=11,x=1/(b-1),S="Float32Array"in t;if(4!==arguments.length)return!1;for(var P=0;4>P;++P)if("number"!=typeof arguments[P]||isNaN(arguments[P])||!isFinite(arguments[P]))return!1;e=Math.min(e,1),a=Math.min(a,1),e=Math.max(e,0),a=Math.max(a,0);var w=S?new Float32Array(b):new Array(b),V=!1,C=function(t){return V||g(),e===r&&a===n?t:0===t?0:1===t?1:l(d(t),r,n)};C.getControlPoints=function(){return[{x:e,y:r},{x:a,y:n}]};var T="generateBezier("+[e,r,a,n]+")";return C.toString=function(){return T},C}function u(e,t){var r=e;return g.isString(e)?v.Easings[e]||(r=!1):r=g.isArray(e)&&1===e.length?s.apply(null,e):g.isArray(e)&&2===e.length?b.apply(null,e.concat([t])):g.isArray(e)&&4===e.length?l.apply(null,e):!1,r===!1&&(r=v.Easings[v.defaults.easing]?v.defaults.easing:h),r}function c(e){if(e){var t=(new Date).getTime(),r=v.State.calls.length;r>1e4&&(v.State.calls=n(v.State.calls));for(var o=0;r>o;o++)if(v.State.calls[o]){var s=v.State.calls[o],l=s[0],u=s[2],f=s[3],d=!!f,m=null;f||(f=v.State.calls[o][3]=t-16);for(var y=Math.min((t-f)/u.duration,1),h=0,b=l.length;b>h;h++){var S=l[h],w=S.element;if(i(w)){var V=!1;if(u.display!==a&&null!==u.display&&"none"!==u.display){if("flex"===u.display){var C=["-webkit-box","-moz-box","-ms-flexbox","-webkit-flex"];$.each(C,function(e,t){x.setPropertyValue(w,"display",t)})}x.setPropertyValue(w,"display",u.display)}u.visibility!==a&&"hidden"!==u.visibility&&x.setPropertyValue(w,"visibility",u.visibility);for(var T in S)if("element"!==T){var k=S[T],A,F=g.isString(k.easing)?v.Easings[k.easing]:k.easing;if(1===y)A=k.endValue;else{var E=k.endValue-k.startValue;if(A=k.startValue+E*F(y,u,E),!d&&A===k.currentValue)continue}if(k.currentValue=A,"tween"===T)m=A;else{if(x.Hooks.registered[T]){var j=x.Hooks.getRoot(T),H=i(w).rootPropertyValueCache[j];H&&(k.rootPropertyValue=H)}var N=x.setPropertyValue(w,T,k.currentValue+(0===parseFloat(A)?"":k.unitType),k.rootPropertyValue,k.scrollData);x.Hooks.registered[T]&&(i(w).rootPropertyValueCache[j]=x.Normalizations.registered[j]?x.Normalizations.registered[j]("extract",null,N[1]):N[1]),"transform"===N[0]&&(V=!0)}}u.mobileHA&&i(w).transformCache.translate3d===a&&(i(w).transformCache.translate3d="(0px, 0px, 0px)",V=!0),V&&x.flushTransformCache(w)}}u.display!==a&&"none"!==u.display&&(v.State.calls[o][2].display=!1),u.visibility!==a&&"hidden"!==u.visibility&&(v.State.calls[o][2].visibility=!1),u.progress&&u.progress.call(s[1],s[1],y,Math.max(0,f+u.duration-t),f,m),1===y&&p(o)}}v.State.isTicking&&P(c)}function p(e,t){if(!v.State.calls[e])return!1;for(var r=v.State.calls[e][0],n=v.State.calls[e][1],o=v.State.calls[e][2],s=v.State.calls[e][4],l=!1,u=0,c=r.length;c>u;u++){var p=r[u].element;if(t||o.loop||("none"===o.display&&x.setPropertyValue(p,"display",o.display),"hidden"===o.visibility&&x.setPropertyValue(p,"visibility",o.visibility)),o.loop!==!0&&($.queue(p)[1]===a||!/\.velocityQueueEntryFlag/i.test($.queue(p)[1]))&&i(p)){i(p).isAnimating=!1,i(p).rootPropertyValueCache={};var f=!1;$.each(x.Lists.transforms3D,function(e,t){var r=/^scale/.test(t)?1:0,n=i(p).transformCache[t];i(p).transformCache[t]!==a&&new RegExp("^\\("+r+"[^.]").test(n)&&(f=!0,delete i(p).transformCache[t])}),o.mobileHA&&(f=!0,delete i(p).transformCache.translate3d),f&&x.flushTransformCache(p),x.Values.removeClass(p,"velocity-animating")}if(!t&&o.complete&&!o.loop&&u===c-1)try{o.complete.call(n,n)}catch(d){setTimeout(function(){throw d},1)}s&&o.loop!==!0&&s(n),o.loop!==!0||t||($.each(i(p).tweensContainer,function(e,t){/^rotate/.test(e)&&360===parseFloat(t.endValue)&&(t.endValue=0,t.startValue=360),/^backgroundPosition/.test(e)&&100===parseFloat(t.endValue)&&"%"===t.unitType&&(t.endValue=0,t.startValue=100)}),v(p,"reverse",{loop:!0,delay:o.delay})),o.queue!==!1&&$.dequeue(p,o.queue)}v.State.calls[e]=!1;for(var g=0,m=v.State.calls.length;m>g;g++)if(v.State.calls[g]!==!1){l=!0;break}l===!1&&(v.State.isTicking=!1,delete v.State.calls,v.State.calls=[])}var f=function(){if(r.documentMode)return r.documentMode;for(var e=7;e>4;e--){var t=r.createElement("div");if(t.innerHTML="<!--[if IE "+e+"]><span></span><![endif]-->",t.getElementsByTagName("span").length)return t=null,e}return a}(),d=function(){var e=0;return t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||function(t){var r=(new Date).getTime(),a;return a=Math.max(0,16-(r-e)),e=r+a,setTimeout(function(){t(r+a)},a)}}(),g={isString:function(e){return"string"==typeof e},isArray:Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},isFunction:function(e){return"[object Function]"===Object.prototype.toString.call(e)},isNode:function(e){return e&&e.nodeType},isNodeList:function(e){return"object"==typeof e&&/^\[object (HTMLCollection|NodeList|Object)\]$/.test(Object.prototype.toString.call(e))&&e.length!==a&&(0===e.length||"object"==typeof e[0]&&e[0].nodeType>0)},isWrapped:function(e){return e&&(e.jquery||t.Zepto&&t.Zepto.zepto.isZ(e))},isSVG:function(e){return t.SVGElement&&e instanceof t.SVGElement},isEmptyObject:function(e){for(var t in e)return!1;return!0}},$,m=!1;if(e.fn&&e.fn.jquery?($=e,m=!0):$=t.Velocity.Utilities,8>=f&&!m)throw new Error("Velocity: IE8 and below require jQuery to be loaded before Velocity.");if(7>=f)return void(jQuery.fn.velocity=jQuery.fn.animate);var y=400,h="swing",v={State:{isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),isAndroid:/Android/i.test(navigator.userAgent),isGingerbread:/Android 2\.3\.[3-7]/i.test(navigator.userAgent),isChrome:t.chrome,isFirefox:/Firefox/i.test(navigator.userAgent),prefixElement:r.createElement("div"),prefixMatches:{},scrollAnchor:null,scrollPropertyLeft:null,scrollPropertyTop:null,isTicking:!1,calls:[]},CSS:{},Utilities:$,Redirects:{},Easings:{},Promise:t.Promise,defaults:{queue:"",duration:y,easing:h,begin:a,complete:a,progress:a,display:a,visibility:a,loop:!1,delay:!1,mobileHA:!0,_cacheValues:!0},init:function(e){$.data(e,"velocity",{isSVG:g.isSVG(e),isAnimating:!1,computedStyle:null,tweensContainer:null,rootPropertyValueCache:{},transformCache:{}})},hook:null,mock:!1,version:{major:1,minor:2,patch:1},debug:!1};t.pageYOffset!==a?(v.State.scrollAnchor=t,v.State.scrollPropertyLeft="pageXOffset",v.State.scrollPropertyTop="pageYOffset"):(v.State.scrollAnchor=r.documentElement||r.body.parentNode||r.body,v.State.scrollPropertyLeft="scrollLeft",v.State.scrollPropertyTop="scrollTop");var b=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,r,a){var n={x:t.x+a.dx*r,v:t.v+a.dv*r,tension:t.tension,friction:t.friction};return{dx:n.v,dv:e(n)}}function r(r,a){var n={dx:r.v,dv:e(r)},o=t(r,.5*a,n),i=t(r,.5*a,o),s=t(r,a,i),l=1/6*(n.dx+2*(o.dx+i.dx)+s.dx),u=1/6*(n.dv+2*(o.dv+i.dv)+s.dv);return r.x=r.x+l*a,r.v=r.v+u*a,r}return function a(e,t,n){var o={x:-1,v:0,tension:null,friction:null},i=[0],s=0,l=1e-4,u=.016,c,p,f;for(e=parseFloat(e)||500,t=parseFloat(t)||20,n=n||null,o.tension=e,o.friction=t,c=null!==n,c?(s=a(e,t),p=s/n*u):p=u;;)if(f=r(f||o,p),i.push(1+f.x),s+=16,!(Math.abs(f.x)>l&&Math.abs(f.v)>l))break;return c?function(e){return i[e*(i.length-1)|0]}:s}}();v.Easings={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},spring:function(e){return 1-Math.cos(4.5*e*Math.PI)*Math.exp(6*-e)}},$.each([["ease",[.25,.1,.25,1]],["ease-in",[.42,0,1,1]],["ease-out",[0,0,.58,1]],["ease-in-out",[.42,0,.58,1]],["easeInSine",[.47,0,.745,.715]],["easeOutSine",[.39,.575,.565,1]],["easeInOutSine",[.445,.05,.55,.95]],["easeInQuad",[.55,.085,.68,.53]],["easeOutQuad",[.25,.46,.45,.94]],["easeInOutQuad",[.455,.03,.515,.955]],["easeInCubic",[.55,.055,.675,.19]],["easeOutCubic",[.215,.61,.355,1]],["easeInOutCubic",[.645,.045,.355,1]],["easeInQuart",[.895,.03,.685,.22]],["easeOutQuart",[.165,.84,.44,1]],["easeInOutQuart",[.77,0,.175,1]],["easeInQuint",[.755,.05,.855,.06]],["easeOutQuint",[.23,1,.32,1]],["easeInOutQuint",[.86,0,.07,1]],["easeInExpo",[.95,.05,.795,.035]],["easeOutExpo",[.19,1,.22,1]],["easeInOutExpo",[1,0,0,1]],["easeInCirc",[.6,.04,.98,.335]],["easeOutCirc",[.075,.82,.165,1]],["easeInOutCirc",[.785,.135,.15,.86]]],function(e,t){v.Easings[t[0]]=l.apply(null,t[1])});var x=v.CSS={RegEx:{isHex:/^#([A-f\d]{3}){1,2}$/i,valueUnwrap:/^[A-z]+\((.*)\)$/i,wrappedValueAlreadyExtracted:/[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,valueSplit:/([A-z]+\(.+\))|(([A-z0-9#-.]+?)(?=\s|$))/gi},Lists:{colors:["fill","stroke","stopColor","color","backgroundColor","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outlineColor"],transformsBase:["translateX","translateY","scale","scaleX","scaleY","skewX","skewY","rotateZ"],transforms3D:["transformPerspective","translateZ","scaleZ","rotateX","rotateY"]},Hooks:{templates:{textShadow:["Color X Y Blur","black 0px 0px 0px"],boxShadow:["Color X Y Blur Spread","black 0px 0px 0px 0px"],clip:["Top Right Bottom Left","0px 0px 0px 0px"],backgroundPosition:["X Y","0% 0%"],transformOrigin:["X Y Z","50% 50% 0px"],perspectiveOrigin:["X Y","50% 50%"]},registered:{},register:function(){for(var e=0;e<x.Lists.colors.length;e++){var t="color"===x.Lists.colors[e]?"0 0 0 1":"255 255 255 1";x.Hooks.templates[x.Lists.colors[e]]=["Red Green Blue Alpha",t]}var r,a,n;if(f)for(r in x.Hooks.templates){a=x.Hooks.templates[r],n=a[0].split(" ");var o=a[1].match(x.RegEx.valueSplit);"Color"===n[0]&&(n.push(n.shift()),o.push(o.shift()),x.Hooks.templates[r]=[n.join(" "),o.join(" ")])}for(r in x.Hooks.templates){a=x.Hooks.templates[r],n=a[0].split(" ");for(var e in n){var i=r+n[e],s=e;x.Hooks.registered[i]=[r,s]}}},getRoot:function(e){var t=x.Hooks.registered[e];return t?t[0]:e},cleanRootPropertyValue:function(e,t){return x.RegEx.valueUnwrap.test(t)&&(t=t.match(x.RegEx.valueUnwrap)[1]),x.Values.isCSSNullValue(t)&&(t=x.Hooks.templates[e][1]),t},extractValue:function(e,t){var r=x.Hooks.registered[e];if(r){var a=r[0],n=r[1];return t=x.Hooks.cleanRootPropertyValue(a,t),t.toString().match(x.RegEx.valueSplit)[n]}return t},injectValue:function(e,t,r){var a=x.Hooks.registered[e];if(a){var n=a[0],o=a[1],i,s;return r=x.Hooks.cleanRootPropertyValue(n,r),i=r.toString().match(x.RegEx.valueSplit),i[o]=t,s=i.join(" ")}return r}},Normalizations:{registered:{clip:function(e,t,r){switch(e){case"name":return"clip";case"extract":var a;return x.RegEx.wrappedValueAlreadyExtracted.test(r)?a=r:(a=r.toString().match(x.RegEx.valueUnwrap),a=a?a[1].replace(/,(\s+)?/g," "):r),a;case"inject":return"rect("+r+")"}},blur:function(e,t,r){switch(e){case"name":return v.State.isFirefox?"filter":"-webkit-filter";case"extract":var a=parseFloat(r);if(!a&&0!==a){var n=r.toString().match(/blur\(([0-9]+[A-z]+)\)/i);a=n?n[1]:0}return a;case"inject":return parseFloat(r)?"blur("+r+")":"none"}},opacity:function(e,t,r){if(8>=f)switch(e){case"name":return"filter";case"extract":var a=r.toString().match(/alpha\(opacity=(.*)\)/i);return r=a?a[1]/100:1;case"inject":return t.style.zoom=1,parseFloat(r)>=1?"":"alpha(opacity="+parseInt(100*parseFloat(r),10)+")"}else switch(e){case"name":return"opacity";case"extract":return r;case"inject":return r}}},register:function(){9>=f||v.State.isGingerbread||(x.Lists.transformsBase=x.Lists.transformsBase.concat(x.Lists.transforms3D));for(var e=0;e<x.Lists.transformsBase.length;e++)!function(){var t=x.Lists.transformsBase[e];x.Normalizations.registered[t]=function(e,r,n){switch(e){case"name":return"transform";case"extract":return i(r)===a||i(r).transformCache[t]===a?/^scale/i.test(t)?1:0:i(r).transformCache[t].replace(/[()]/g,"");case"inject":var o=!1;switch(t.substr(0,t.length-1)){case"translate":o=!/(%|px|em|rem|vw|vh|\d)$/i.test(n);break;case"scal":case"scale":v.State.isAndroid&&i(r).transformCache[t]===a&&1>n&&(n=1),o=!/(\d)$/i.test(n);break;case"skew":o=!/(deg|\d)$/i.test(n);break;case"rotate":o=!/(deg|\d)$/i.test(n)}return o||(i(r).transformCache[t]="("+n+")"),i(r).transformCache[t]}}}();for(var e=0;e<x.Lists.colors.length;e++)!function(){var t=x.Lists.colors[e];x.Normalizations.registered[t]=function(e,r,n){switch(e){case"name":return t;case"extract":var o;if(x.RegEx.wrappedValueAlreadyExtracted.test(n))o=n;else{var i,s={black:"rgb(0, 0, 0)",blue:"rgb(0, 0, 255)",gray:"rgb(128, 128, 128)",green:"rgb(0, 128, 0)",red:"rgb(255, 0, 0)",white:"rgb(255, 255, 255)"};/^[A-z]+$/i.test(n)?i=s[n]!==a?s[n]:s.black:x.RegEx.isHex.test(n)?i="rgb("+x.Values.hexToRgb(n).join(" ")+")":/^rgba?\(/i.test(n)||(i=s.black),o=(i||n).toString().match(x.RegEx.valueUnwrap)[1].replace(/,(\s+)?/g," ")}return 8>=f||3!==o.split(" ").length||(o+=" 1"),o;case"inject":return 8>=f?4===n.split(" ").length&&(n=n.split(/\s+/).slice(0,3).join(" ")):3===n.split(" ").length&&(n+=" 1"),(8>=f?"rgb":"rgba")+"("+n.replace(/\s+/g,",").replace(/\.(\d)+(?=,)/g,"")+")"}}}()}},Names:{camelCase:function(e){return e.replace(/-(\w)/g,function(e,t){return t.toUpperCase()})},SVGAttribute:function(e){var t="width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2";return(f||v.State.isAndroid&&!v.State.isChrome)&&(t+="|transform"),new RegExp("^("+t+")$","i").test(e)},prefixCheck:function(e){if(v.State.prefixMatches[e])return[v.State.prefixMatches[e],!0];for(var t=["","Webkit","Moz","ms","O"],r=0,a=t.length;a>r;r++){var n;if(n=0===r?e:t[r]+e.replace(/^\w/,function(e){return e.toUpperCase()}),g.isString(v.State.prefixElement.style[n]))return v.State.prefixMatches[e]=n,[n,!0]}return[e,!1]}},Values:{hexToRgb:function(e){var t=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,r=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,a;return e=e.replace(t,function(e,t,r,a){return t+t+r+r+a+a}),a=r.exec(e),a?[parseInt(a[1],16),parseInt(a[2],16),parseInt(a[3],16)]:[0,0,0]},isCSSNullValue:function(e){return 0==e||/^(none|auto|transparent|(rgba\(0, ?0, ?0, ?0\)))$/i.test(e)},getUnitType:function(e){return/^(rotate|skew)/i.test(e)?"deg":/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(e)?"":"px"},getDisplayType:function(e){var t=e&&e.tagName.toString().toLowerCase();return/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(t)?"inline":/^(li)$/i.test(t)?"list-item":/^(tr)$/i.test(t)?"table-row":/^(table)$/i.test(t)?"table":/^(tbody)$/i.test(t)?"table-row-group":"block"},addClass:function(e,t){e.classList?e.classList.add(t):e.className+=(e.className.length?" ":"")+t},removeClass:function(e,t){e.classList?e.classList.remove(t):e.className=e.className.toString().replace(new RegExp("(^|\\s)"+t.split(" ").join("|")+"(\\s|$)","gi")," ")}},getPropertyValue:function(e,r,n,o){function s(e,r){function n(){u&&x.setPropertyValue(e,"display","none")}var l=0;if(8>=f)l=$.css(e,r);else{var u=!1;if(/^(width|height)$/.test(r)&&0===x.getPropertyValue(e,"display")&&(u=!0,x.setPropertyValue(e,"display",x.Values.getDisplayType(e))),!o){if("height"===r&&"border-box"!==x.getPropertyValue(e,"boxSizing").toString().toLowerCase()){var c=e.offsetHeight-(parseFloat(x.getPropertyValue(e,"borderTopWidth"))||0)-(parseFloat(x.getPropertyValue(e,"borderBottomWidth"))||0)-(parseFloat(x.getPropertyValue(e,"paddingTop"))||0)-(parseFloat(x.getPropertyValue(e,"paddingBottom"))||0);return n(),c}if("width"===r&&"border-box"!==x.getPropertyValue(e,"boxSizing").toString().toLowerCase()){var p=e.offsetWidth-(parseFloat(x.getPropertyValue(e,"borderLeftWidth"))||0)-(parseFloat(x.getPropertyValue(e,"borderRightWidth"))||0)-(parseFloat(x.getPropertyValue(e,"paddingLeft"))||0)-(parseFloat(x.getPropertyValue(e,"paddingRight"))||0);return n(),p}}var d;d=i(e)===a?t.getComputedStyle(e,null):i(e).computedStyle?i(e).computedStyle:i(e).computedStyle=t.getComputedStyle(e,null),"borderColor"===r&&(r="borderTopColor"),l=9===f&&"filter"===r?d.getPropertyValue(r):d[r],(""===l||null===l)&&(l=e.style[r]),n()}if("auto"===l&&/^(top|right|bottom|left)$/i.test(r)){var g=s(e,"position");("fixed"===g||"absolute"===g&&/top|left/i.test(r))&&(l=$(e).position()[r]+"px")}return l}var l;if(x.Hooks.registered[r]){var u=r,c=x.Hooks.getRoot(u);n===a&&(n=x.getPropertyValue(e,x.Names.prefixCheck(c)[0])),x.Normalizations.registered[c]&&(n=x.Normalizations.registered[c]("extract",e,n)),l=x.Hooks.extractValue(u,n)}else if(x.Normalizations.registered[r]){var p,d;p=x.Normalizations.registered[r]("name",e),"transform"!==p&&(d=s(e,x.Names.prefixCheck(p)[0]),x.Values.isCSSNullValue(d)&&x.Hooks.templates[r]&&(d=x.Hooks.templates[r][1])),l=x.Normalizations.registered[r]("extract",e,d)}if(!/^[\d-]/.test(l))if(i(e)&&i(e).isSVG&&x.Names.SVGAttribute(r))if(/^(height|width)$/i.test(r))try{l=e.getBBox()[r]}catch(g){l=0}else l=e.getAttribute(r);else l=s(e,x.Names.prefixCheck(r)[0]);return x.Values.isCSSNullValue(l)&&(l=0),v.debug>=2&&console.log("Get "+r+": "+l),l},setPropertyValue:function(e,r,a,n,o){var s=r;if("scroll"===r)o.container?o.container["scroll"+o.direction]=a:"Left"===o.direction?t.scrollTo(a,o.alternateValue):t.scrollTo(o.alternateValue,a);else if(x.Normalizations.registered[r]&&"transform"===x.Normalizations.registered[r]("name",e))x.Normalizations.registered[r]("inject",e,a),s="transform",a=i(e).transformCache[r];else{if(x.Hooks.registered[r]){var l=r,u=x.Hooks.getRoot(r);n=n||x.getPropertyValue(e,u),a=x.Hooks.injectValue(l,a,n),r=u}if(x.Normalizations.registered[r]&&(a=x.Normalizations.registered[r]("inject",e,a),r=x.Normalizations.registered[r]("name",e)),s=x.Names.prefixCheck(r)[0],8>=f)try{e.style[s]=a}catch(c){v.debug&&console.log("Browser does not support ["+a+"] for ["+s+"]")}else i(e)&&i(e).isSVG&&x.Names.SVGAttribute(r)?e.setAttribute(r,a):e.style[s]=a;v.debug>=2&&console.log("Set "+r+" ("+s+"): "+a)}return[s,a]},flushTransformCache:function(e){function t(t){return parseFloat(x.getPropertyValue(e,t))}var r="";if((f||v.State.isAndroid&&!v.State.isChrome)&&i(e).isSVG){var a={translate:[t("translateX"),t("translateY")],skewX:[t("skewX")],skewY:[t("skewY")],scale:1!==t("scale")?[t("scale"),t("scale")]:[t("scaleX"),t("scaleY")],rotate:[t("rotateZ"),0,0]};$.each(i(e).transformCache,function(e){/^translate/i.test(e)?e="translate":/^scale/i.test(e)?e="scale":/^rotate/i.test(e)&&(e="rotate"),a[e]&&(r+=e+"("+a[e].join(" ")+") ",delete a[e])})}else{var n,o;$.each(i(e).transformCache,function(t){return n=i(e).transformCache[t],"transformPerspective"===t?(o=n,!0):(9===f&&"rotateZ"===t&&(t="rotate"),void(r+=t+n+" "))}),o&&(r="perspective"+o+" "+r)}x.setPropertyValue(e,"transform",r)}};x.Hooks.register(),x.Normalizations.register(),v.hook=function(e,t,r){var n=a;return e=o(e),$.each(e,function(e,o){if(i(o)===a&&v.init(o),r===a)n===a&&(n=v.CSS.getPropertyValue(o,t));else{var s=v.CSS.setPropertyValue(o,t,r);"transform"===s[0]&&v.CSS.flushTransformCache(o),n=s}}),n};var S=function(){function e(){return l?T.promise||null:f}function n(){function e(e){function p(e,t){var r=a,i=a,s=a;return g.isArray(e)?(r=e[0],!g.isArray(e[1])&&/^[\d-]/.test(e[1])||g.isFunction(e[1])||x.RegEx.isHex.test(e[1])?s=e[1]:(g.isString(e[1])&&!x.RegEx.isHex.test(e[1])||g.isArray(e[1]))&&(i=t?e[1]:u(e[1],o.duration),e[2]!==a&&(s=e[2]))):r=e,t||(i=i||o.easing),g.isFunction(r)&&(r=r.call(n,w,P)),g.isFunction(s)&&(s=s.call(n,w,P)),[r||0,i,s]}function f(e,t){var r,a;return a=(t||"0").toString().toLowerCase().replace(/[%A-z]+$/,function(e){return r=e,""}),r||(r=x.Values.getUnitType(e)),[a,r]}function d(){var e={myParent:n.parentNode||r.body,position:x.getPropertyValue(n,"position"),fontSize:x.getPropertyValue(n,"fontSize")},a=e.position===N.lastPosition&&e.myParent===N.lastParent,o=e.fontSize===N.lastFontSize;N.lastParent=e.myParent,N.lastPosition=e.position,N.lastFontSize=e.fontSize;var s=100,l={};if(o&&a)l.emToPx=N.lastEmToPx,l.percentToPxWidth=N.lastPercentToPxWidth,l.percentToPxHeight=N.lastPercentToPxHeight;else{var u=i(n).isSVG?r.createElementNS("http://www.w3.org/2000/svg","rect"):r.createElement("div");v.init(u),e.myParent.appendChild(u),$.each(["overflow","overflowX","overflowY"],function(e,t){v.CSS.setPropertyValue(u,t,"hidden")}),v.CSS.setPropertyValue(u,"position",e.position),v.CSS.setPropertyValue(u,"fontSize",e.fontSize),v.CSS.setPropertyValue(u,"boxSizing","content-box"),$.each(["minWidth","maxWidth","width","minHeight","maxHeight","height"],function(e,t){v.CSS.setPropertyValue(u,t,s+"%")}),v.CSS.setPropertyValue(u,"paddingLeft",s+"em"),l.percentToPxWidth=N.lastPercentToPxWidth=(parseFloat(x.getPropertyValue(u,"width",null,!0))||1)/s,l.percentToPxHeight=N.lastPercentToPxHeight=(parseFloat(x.getPropertyValue(u,"height",null,!0))||1)/s,l.emToPx=N.lastEmToPx=(parseFloat(x.getPropertyValue(u,"paddingLeft"))||1)/s,e.myParent.removeChild(u)}return null===N.remToPx&&(N.remToPx=parseFloat(x.getPropertyValue(r.body,"fontSize"))||16),null===N.vwToPx&&(N.vwToPx=parseFloat(t.innerWidth)/100,N.vhToPx=parseFloat(t.innerHeight)/100),l.remToPx=N.remToPx,l.vwToPx=N.vwToPx,l.vhToPx=N.vhToPx,v.debug>=1&&console.log("Unit ratios: "+JSON.stringify(l),n),l}if(o.begin&&0===w)try{o.begin.call(m,m)}catch(y){setTimeout(function(){throw y},1)}if("scroll"===k){var S=/^x$/i.test(o.axis)?"Left":"Top",V=parseFloat(o.offset)||0,C,A,F;o.container?g.isWrapped(o.container)||g.isNode(o.container)?(o.container=o.container[0]||o.container,C=o.container["scroll"+S],F=C+$(n).position()[S.toLowerCase()]+V):o.container=null:(C=v.State.scrollAnchor[v.State["scrollProperty"+S]],A=v.State.scrollAnchor[v.State["scrollProperty"+("Left"===S?"Top":"Left")]],F=$(n).offset()[S.toLowerCase()]+V),s={scroll:{rootPropertyValue:!1,startValue:C,currentValue:C,endValue:F,unitType:"",easing:o.easing,scrollData:{container:o.container,direction:S,alternateValue:A}},element:n},v.debug&&console.log("tweensContainer (scroll): ",s.scroll,n)}else if("reverse"===k){if(!i(n).tweensContainer)return void $.dequeue(n,o.queue);"none"===i(n).opts.display&&(i(n).opts.display="auto"),"hidden"===i(n).opts.visibility&&(i(n).opts.visibility="visible"),i(n).opts.loop=!1,i(n).opts.begin=null,i(n).opts.complete=null,b.easing||delete o.easing,b.duration||delete o.duration,o=$.extend({},i(n).opts,o);var E=$.extend(!0,{},i(n).tweensContainer);for(var j in E)if("element"!==j){var H=E[j].startValue;E[j].startValue=E[j].currentValue=E[j].endValue,E[j].endValue=H,g.isEmptyObject(b)||(E[j].easing=o.easing),v.debug&&console.log("reverse tweensContainer ("+j+"): "+JSON.stringify(E[j]),n)}s=E}else if("start"===k){var E;i(n).tweensContainer&&i(n).isAnimating===!0&&(E=i(n).tweensContainer),$.each(h,function(e,t){if(RegExp("^"+x.Lists.colors.join("$|^")+"$").test(e)){var r=p(t,!0),n=r[0],o=r[1],i=r[2];if(x.RegEx.isHex.test(n)){for(var s=["Red","Green","Blue"],l=x.Values.hexToRgb(n),u=i?x.Values.hexToRgb(i):a,c=0;c<s.length;c++){var f=[l[c]];o&&f.push(o),u!==a&&f.push(u[c]),h[e+s[c]]=f}delete h[e]}}});for(var R in h){var O=p(h[R]),z=O[0],q=O[1],M=O[2];R=x.Names.camelCase(R);var I=x.Hooks.getRoot(R),B=!1;if(i(n).isSVG||"tween"===I||x.Names.prefixCheck(I)[1]!==!1||x.Normalizations.registered[I]!==a){(o.display!==a&&null!==o.display&&"none"!==o.display||o.visibility!==a&&"hidden"!==o.visibility)&&/opacity|filter/.test(R)&&!M&&0!==z&&(M=0),o._cacheValues&&E&&E[R]?(M===a&&(M=E[R].endValue+E[R].unitType),B=i(n).rootPropertyValueCache[I]):x.Hooks.registered[R]?M===a?(B=x.getPropertyValue(n,I),M=x.getPropertyValue(n,R,B)):B=x.Hooks.templates[I][1]:M===a&&(M=x.getPropertyValue(n,R));var W,G,D,X=!1;if(W=f(R,M),M=W[0],D=W[1],W=f(R,z),z=W[0].replace(/^([+-\/*])=/,function(e,t){return X=t,""}),G=W[1],M=parseFloat(M)||0,z=parseFloat(z)||0,"%"===G&&(/^(fontSize|lineHeight)$/.test(R)?(z/=100,G="em"):/^scale/.test(R)?(z/=100,G=""):/(Red|Green|Blue)$/i.test(R)&&(z=z/100*255,G="")),/[\/*]/.test(X))G=D;else if(D!==G&&0!==M)if(0===z)G=D;else{l=l||d();var Y=/margin|padding|left|right|width|text|word|letter/i.test(R)||/X$/.test(R)||"x"===R?"x":"y";switch(D){case"%":M*="x"===Y?l.percentToPxWidth:l.percentToPxHeight;break;case"px":break;default:M*=l[D+"ToPx"]}switch(G){case"%":M*=1/("x"===Y?l.percentToPxWidth:l.percentToPxHeight);break;case"px":break;default:M*=1/l[G+"ToPx"]}}switch(X){case"+":z=M+z;break;case"-":z=M-z;break;case"*":z=M*z;break;case"/":z=M/z}s[R]={rootPropertyValue:B,startValue:M,currentValue:M,endValue:z,unitType:G,easing:q},v.debug&&console.log("tweensContainer ("+R+"): "+JSON.stringify(s[R]),n)}else v.debug&&console.log("Skipping ["+I+"] due to a lack of browser support.")}s.element=n}s.element&&(x.Values.addClass(n,"velocity-animating"),L.push(s),""===o.queue&&(i(n).tweensContainer=s,i(n).opts=o),i(n).isAnimating=!0,w===P-1?(v.State.calls.push([L,m,o,null,T.resolver]),v.State.isTicking===!1&&(v.State.isTicking=!0,c())):w++)}var n=this,o=$.extend({},v.defaults,b),s={},l;switch(i(n)===a&&v.init(n),parseFloat(o.delay)&&o.queue!==!1&&$.queue(n,o.queue,function(e){v.velocityQueueEntryFlag=!0,i(n).delayTimer={setTimeout:setTimeout(e,parseFloat(o.delay)),next:e}}),o.duration.toString().toLowerCase()){case"fast":o.duration=200;break;case"normal":o.duration=y;break;case"slow":o.duration=600;break;default:o.duration=parseFloat(o.duration)||1}v.mock!==!1&&(v.mock===!0?o.duration=o.delay=1:(o.duration*=parseFloat(v.mock)||1,o.delay*=parseFloat(v.mock)||1)),o.easing=u(o.easing,o.duration),o.begin&&!g.isFunction(o.begin)&&(o.begin=null),o.progress&&!g.isFunction(o.progress)&&(o.progress=null),o.complete&&!g.isFunction(o.complete)&&(o.complete=null),o.display!==a&&null!==o.display&&(o.display=o.display.toString().toLowerCase(),"auto"===o.display&&(o.display=v.CSS.Values.getDisplayType(n))),o.visibility!==a&&null!==o.visibility&&(o.visibility=o.visibility.toString().toLowerCase()),o.mobileHA=o.mobileHA&&v.State.isMobile&&!v.State.isGingerbread,o.queue===!1?o.delay?setTimeout(e,o.delay):e():$.queue(n,o.queue,function(t,r){return r===!0?(T.promise&&T.resolver(m),!0):(v.velocityQueueEntryFlag=!0,void e(t))}),""!==o.queue&&"fx"!==o.queue||"inprogress"===$.queue(n)[0]||$.dequeue(n)}var s=arguments[0]&&(arguments[0].p||$.isPlainObject(arguments[0].properties)&&!arguments[0].properties.names||g.isString(arguments[0].properties)),l,f,d,m,h,b;if(g.isWrapped(this)?(l=!1,d=0,m=this,f=this):(l=!0,d=1,m=s?arguments[0].elements||arguments[0].e:arguments[0]),m=o(m)){s?(h=arguments[0].properties||arguments[0].p,b=arguments[0].options||arguments[0].o):(h=arguments[d],b=arguments[d+1]);var P=m.length,w=0;if(!/^(stop|finish)$/i.test(h)&&!$.isPlainObject(b)){var V=d+1;b={};for(var C=V;C<arguments.length;C++)g.isArray(arguments[C])||!/^(fast|normal|slow)$/i.test(arguments[C])&&!/^\d/.test(arguments[C])?g.isString(arguments[C])||g.isArray(arguments[C])?b.easing=arguments[C]:g.isFunction(arguments[C])&&(b.complete=arguments[C]):b.duration=arguments[C]}var T={promise:null,resolver:null,rejecter:null};l&&v.Promise&&(T.promise=new v.Promise(function(e,t){T.resolver=e,T.rejecter=t}));var k;switch(h){case"scroll":k="scroll";break;case"reverse":k="reverse";break;case"finish":case"stop":$.each(m,function(e,t){i(t)&&i(t).delayTimer&&(clearTimeout(i(t).delayTimer.setTimeout),i(t).delayTimer.next&&i(t).delayTimer.next(),delete i(t).delayTimer)});var A=[];return $.each(v.State.calls,function(e,t){t&&$.each(t[1],function(r,n){var o=b===a?"":b;return o===!0||t[2].queue===o||b===a&&t[2].queue===!1?void $.each(m,function(r,a){a===n&&((b===!0||g.isString(b))&&($.each($.queue(a,g.isString(b)?b:""),function(e,t){g.isFunction(t)&&t(null,!0)}),$.queue(a,g.isString(b)?b:"",[])),"stop"===h?(i(a)&&i(a).tweensContainer&&o!==!1&&$.each(i(a).tweensContainer,function(e,t){t.endValue=t.currentValue}),A.push(e)):"finish"===h&&(t[2].duration=1))}):!0})}),"stop"===h&&($.each(A,function(e,t){p(t,!0)}),T.promise&&T.resolver(m)),e();default:if(!$.isPlainObject(h)||g.isEmptyObject(h)){if(g.isString(h)&&v.Redirects[h]){var F=$.extend({},b),E=F.duration,j=F.delay||0;return F.backwards===!0&&(m=$.extend(!0,[],m).reverse()),$.each(m,function(e,t){parseFloat(F.stagger)?F.delay=j+parseFloat(F.stagger)*e:g.isFunction(F.stagger)&&(F.delay=j+F.stagger.call(t,e,P)),F.drag&&(F.duration=parseFloat(E)||(/^(callout|transition)/.test(h)?1e3:y),F.duration=Math.max(F.duration*(F.backwards?1-e/P:(e+1)/P),.75*F.duration,200)),v.Redirects[h].call(t,t,F||{},e,P,m,T.promise?T:a)}),e()}var H="Velocity: First argument ("+h+") was not a property map, a known action, or a registered redirect. Aborting.";return T.promise?T.rejecter(new Error(H)):console.log(H),e()}k="start"}var N={lastParent:null,lastPosition:null,lastFontSize:null,lastPercentToPxWidth:null,lastPercentToPxHeight:null,lastEmToPx:null,remToPx:null,vwToPx:null,vhToPx:null},L=[];$.each(m,function(e,t){g.isNode(t)&&n.call(t)});var F=$.extend({},v.defaults,b),R;if(F.loop=parseInt(F.loop),R=2*F.loop-1,F.loop)for(var O=0;R>O;O++){var z={delay:F.delay,progress:F.progress};O===R-1&&(z.display=F.display,z.visibility=F.visibility,z.complete=F.complete),S(m,"reverse",z)}return e()}};v=$.extend(S,v),v.animate=S;var P=t.requestAnimationFrame||d;return v.State.isMobile||r.hidden===a||r.addEventListener("visibilitychange",function(){r.hidden?(P=function(e){return setTimeout(function(){e(!0)},16)},c()):P=t.requestAnimationFrame||d}),e.Velocity=v,e!==t&&(e.fn.velocity=S,e.fn.velocity.defaults=v.defaults),$.each(["Down","Up"],function(e,t){v.Redirects["slide"+t]=function(e,r,n,o,i,s){var l=$.extend({},r),u=l.begin,c=l.complete,p={height:"",marginTop:"",marginBottom:"",paddingTop:"",paddingBottom:""},f={};l.display===a&&(l.display="Down"===t?"inline"===v.CSS.Values.getDisplayType(e)?"inline-block":"block":"none"),l.begin=function(){u&&u.call(i,i);for(var r in p){f[r]=e.style[r];var a=v.CSS.getPropertyValue(e,r);p[r]="Down"===t?[a,0]:[0,a]}f.overflow=e.style.overflow,e.style.overflow="hidden"},l.complete=function(){for(var t in f)e.style[t]=f[t];c&&c.call(i,i),s&&s.resolver(i)},v(e,p,l)}}),$.each(["In","Out"],function(e,t){v.Redirects["fade"+t]=function(e,r,n,o,i,s){var l=$.extend({},r),u={opacity:"In"===t?1:0},c=l.complete;l.complete=n!==o-1?l.begin=null:function(){c&&c.call(i,i),s&&s.resolver(i)},l.display===a&&(l.display="In"===t?"auto":"none"),v(this,u,l)}}),v}(window.jQuery||window.Zepto||window,window,document)});