1/* =================================================== 2:: LIBRARY / SHARED / MENU TOP 3 * ========================================================== */ 4// jQuery(function() { 5jQuery(".menu-wrap").addClass("navbar"); 6jQuery(".menu").addClass("nav"); 7jQuery(".menu ul").addClass("dropdown-menu"); 8 9// on the first level li, make it a typical bootstrap top menu drop down 10jQuery(".navbar-nav > li").each(function() { 11 12 if (jQuery(this).children("ul").length > 0) { 13 jQuery(this).addClass("dropdown nav-item"); 14 jQuery(this).children("a").addClass("dropdown-toggle nav-link"); 15 jQuery(this).children("a").attr("data-toggle", "dropdown"); 16 jQuery(this).children("a").html(jQuery(this).children("a").html() + '<strong class="caret"></strong>'); 17 jQuery(this).children("ul").addClass("dropdown-menu"); 18 19 } 20}); 21 22 23 24 25jQuery(document).ready(function() { 26 //H andles menu drop down 27 jQuery('.dropdown-menu').find('form').click(function(e) { 28 e.stopPropagation(); 29 }); 30 jQuery('.dropdown-menu').on('touchstart.dropdown.data-api').click(function(e) { 31 e.stopPropagation(); 32 }); 33 // for drop down sub menu on mobile 34 jQuery('.dropdown-submenu').on('touchstart.dropdown.data-api').click(function(e) { 35 e.stopPropagation(); 36 37 if (jQuery(this).hasClass("opened")) { 38 jQuery(this).removeClass("opened"); 39 } else { 40 jQuery(this).addClass("opened") 41 } 42 }); 43 44 45}); 46 47 48 49 50/* =================================================== 51:: LIBRARY / SHARED / MENU SIDE 52 * ========================================================== */ 53jQuery(function() { 54 55 var menuside_ul = jQuery('.menuside > li > ul'), 56 menuside_a = jQuery('.menuside > li > a'); 57 58 menuside_ul.hide(); 59 60 menuside_a.click(function(e) { 61 if (jQuery(this).attr("href") == "#") { 62 63 e.preventDefault(); 64 if (!jQuery(this).hasClass('active')) { 65 menuside_a.removeClass('active'); 66 menuside_ul.filter(':visible').slideUp('normal'); 67 jQuery(this).addClass('active').next().stop(true, true).slideDown('normal'); 68 } else { 69 jQuery(this).removeClass('active'); 70 jQuery(this).next().stop(true, true).slideUp('normal'); 71 } 72 } 73 }); 74 75}); 76 77/* =================================================== 78:: LIBRARY / PRO-COPMPONENTS / CAROUSELS / WELCOME = index page header 79 * ========================================================== */ 80 81(function( $ ) { 82 83 //Function to animate slider captions 84 function doAnimations( elems ) { 85 //Cache the animationend event in a variable 86 var animEndEv = 'webkitAnimationEnd animationend'; 87 88 elems.each(function () { 89 var $this = $(this), 90 $animationType = $this.data('animation'); 91 $this.addClass($animationType).one(animEndEv, function () { 92 $this.removeClass($animationType); 93 }); 94 }); 95 } 96 97 //Variables on page load 98 var $myCarousel = $('.bs-animate'), 99 $firstAnimatingElems = $myCarousel.find('.item:first').find("[data-animation ^= 'animated']"); 100 101 //Initialize carousel 102 $myCarousel.carousel(); 103 104 //Animate captions in first slide on page load 105 doAnimations($firstAnimatingElems); 106 107 //Pause carousel 108 $myCarousel.carousel('pause'); 109 110 111 //Other slides to be animated on carousel slide event 112 $myCarousel.on('slide.bs.carousel', function (e) { 113 var $animatingElems = $(e.relatedTarget).find("[data-animation ^= 'animated']"); 114 doAnimations($animatingElems); 115 }); 116 117})(jQuery); 118 119 120 121/* =================================================== 122:: YOUTUBEBACKGROUND 123 * ========================================================== */ 124 125/* 126 * YoutubeBackground - A wrapper for the Youtube API - Great for fullscreen background videos or just regular videos. 127 * 128 * Licensed under the MIT license: 129 * http://www.opensource.org/licenses/mit-license.php 130 * 131 * 132 * Version: 1.0.1 133 * 134 */ 135 136// Chain of Responsibility pattern. Creates base class that can be overridden. 137if (typeof Object.create !== "function") { 138 Object.create = function(obj) { 139 function F() {} 140 F.prototype = obj; 141 return new F(); 142 }; 143} 144 145 146function isPlayerPlaying() { 147 // console.log("checking!"); 148 var player = jQuery('#background-video').data('ytPlayer').player; 149 //console.log(player.getVideoLoadedFraction()); 150 var totalSeconds = player.getDuration(); 151 var secondsSoFar = player.getCurrentTime(); 152 var tollerance = .25; 153 if (secondsSoFar >= totalSeconds - tollerance) { 154 console.log(totalSeconds); 155 console.log(secondsSoFar); 156 console.log("yup!"); 157 player.seekTo(0); 158 console.log('resetting to zero'); 159 } 160 161 } 162function checkPlayer() { 163 setInterval('isPlayerPlaying()', 200);
164 console.log("setting interval"); 165 166} 167(function($, window, document) { 168 var 169 loadAPI = function loadAPI(callback) { 170 171 // Load Youtube API 172 var tag = document.createElement('script'), 173 head = document.getElementsByTagName('head')[0]; 174 175 tag.src = 'https://www.youtube.com/iframe_api'; 176 177 head.appendChild(tag); 178 179 // Clean up Tags. 180 head = null; 181 tag = null; 182 183 iframeIsReady(callback); 184 }, 185 iframeIsReady = function iframeIsReady(callback) { 186 // Listen for Gobal YT player callback 187 if (typeof YT === 'undefined' && typeof window.loadingPlayer === 'undefined') { 188 // Prevents Ready Event from being called twice 189 window.loadingPlayer = true; 190 191 192 // Creates deferred so, other players know when to wait. 193 window.dfd = $.Deferred(); 194 window.onYouTubeIframeAPIReady = function() { 195 window.onYouTubeIframeAPIReady = null; 196 window.dfd.resolve( "done" ); 197 callback(); 198 }; 199 } else if (typeof YT === 'object') { 200 callback(); 201 } else { 202 window.dfd.done(function( name ) { 203 callback(); 204 }); 205 } 206 }; 207 208 209 210 211 // YTPlayer Object 212 YTPlayer = { 213 player: null, 214 215 // Defaults 216 defaults: { 217 ratio: 16 / 9, 218 videoId: 'l7X4sc_BTtw', 219 mute: true, 220 repeat: true, 221 width: $(window).width(), 222 playButtonClass: 'YTPlayer-play', 223 pauseButtonClass: 'YTPlayer-pause', 224 muteButtonClass: 'YTPlayer-mute', 225 volumeUpClass: 'YTPlayer-volume-up', 226 volumeDownClass: 'YTPlayer-volume-down', 227 start: 3, 228 pauseOnScroll: false, 229 fitToBackground: true, 230 playerVars: { 231 modestbranding: 1, 232 autoplay: 1, 233 controls: 0, 234 showinfo: 0, 235 wmode: 'transparent', 236 branding: 0, 237 rel: 0, 238 autohide: 0 239 }, 240 events: null 241 }, 242 243 /** 244 * @function init 245 * Intializes YTPlayer object 246 */ 247 init: function init(node, userOptions) { 248 var self = this; 249 250 self.userOptions = userOptions; 251 252 self.$body = $('body'), 253 self.$node = $(node), 254 self.$window = $(window); 255 256 // Setup event defaults with the reference to this 257 self.defaults.events = { 258 'onReady': function(e) { 259 self.onPlayerReady(e); 260 261 // setup up pause on scroll 262 if (self.options.pauseOnScroll) { 263 self.pauseOnScroll(); 264 } 265 266 // Callback for when finished 267 if (typeof self.options.callback == 'function') { 268 self.options.callback.call(this); 269 } 270 }, 271 'onStateChange': function(e) { 272 if (e.data === 1) { 273 self.$node.addClass('loaded'); 274 } else if (e.data === 0 && self.options.repeat) { // video ended and repeat option is set true 275 self.player.seekTo(self.options.start); 276 } 277 } 278 } 279 280 281 self.options = $.extend(true, {}, self.defaults, self.userOptions); 282 self.options.height = Math.ceil(self.options.width / self.options.ratio); 283 self.ID = (new Date()).getTime(); 284 self.holderID = 'YTPlayer-ID-' + self.ID; 285 286 if (self.options.fitToBackground) { 287 self.createBackgroundVideo(); 288 } else { 289 self.createContainerVideo(); 290 } 291 // Listen for Resize Event 292 self.$window.on('resize.YTplayer' + self.ID, function() { 293 self.resize(self); 294 }); 295 296 loadAPI(self.onYouTubeIframeAPIReady.bind(self)); 297 298 self.resize(self); 299 300 return self; 301 }, 302 303 304 /** 305 * @function pauseOnScroll 306 * Adds window events to pause video on scroll. 307 */ 308 pauseOnScroll: function pauseOnScroll() { 309 var self = this; 310 self.$window.on('scroll.YTplayer' + self.ID, function() { 311 var state = self.player.getPlayerState(); 312 if (state === 1) { 313 self.player.pauseVideo(); 314 } 315 }); 316 self.$window.scrollStopped(function(){ 317 var state = self.player.getPlayerState(); 318 if (state === 2) { 319 self.player.playVideo(); 320 } 321 }); 322 }, 323 /** 324 * @function createContainerVideo 325 * Adds HTML for video in a container 326 */ 327 createContainerVideo: function createContainerVideo() { 328 var self = this; 329 330 /*jshint multistr: true */ 331 var $YTPlayerString = $('<div id="ytplayer-container' + self.ID + '" >\ 332 <div id="' + self.holderID + '" class="ytplayer-player"></div> \ 333 </div> \ 334 <div id="ytplayer-shield"></div>'); 335 336 self.$node.append($YTPlayerString); 337 self.$YTPlayerString = $YTPlayerString; 338 $YTPlayerString = null; 339 }, 340 341 /**
342 * @function createBackgroundVideo 343 * Adds HTML for video background 344 */ 345 createBackgroundVideo: function createBackgroundVideo() { 346 /*jshint multistr: true */ 347 var self = this, 348 $YTPlayerString = $('<div id="ytplayer-container' + self.ID + '" class="ytplayer-container background">\ 349 <div id="' + self.holderID + '" class="ytplayer-player"></div>\ 350 </div>\ 351 <div id="ytplayer-shield"></div>'); 352 353 self.$node.find('img').fadeOut(); 354 self.$node.append($YTPlayerString); 355 self.$YTPlayerString = $YTPlayerString; 356 $YTPlayerString = null; 357 }, 358 359 /** 360 * @function resize 361 * Resize event to change video size 362 */ 363 resize: function resize(self) { 364 //var self = this; 365 var container = $(window); 366 367 if (!self.options.fitToBackground) { 368 container = self.$node; 369 } 370 371 var width = container.width(), 372 pWidth, // player width, to be defined 373 height = container.height(), 374 pHeight, // player height, tbd 375 $YTPlayerPlayer = $('#' + self.holderID); 376 377 // when screen aspect ratio differs from video, video must center and underlay one dimension 378 if (width / self.options.ratio < height) { 379 pWidth = Math.ceil(height * self.options.ratio); // get new player width 380 $YTPlayerPlayer.width(pWidth).height(height).css({ 381 left: (width - pWidth) / 2, 382 top: 0 383 }); // player width is greater, offset left; reset top 384 } else { // new video width < window width (gap to right) 385 pHeight = Math.ceil(width / self.options.ratio); // get new player height 386 $YTPlayerPlayer.width(width).height(pHeight).css({ 387 left: 0, 388 top: 0 389 }); // player height is greater, offset top; reset left 390 } 391 392 $YTPlayerPlayer = null; 393 container = null; 394 }, 395 396 /** 397 * @function onYouTubeIframeAPIReady 398 * @ params {object} YTPlayer object for access to options 399 * Youtube API calls this function when the player is ready. 400 */ 401 onYouTubeIframeAPIReady: function onYouTubeIframeAPIReady() { 402 var self = this; 403 console.log("yessss"); 404 checkPlayer(); 405 self.player = new window.YT.Player(self.holderID, self.options); 406 }, 407 408 /** 409 * @function onPlayerReady 410 * @ params {event} window event from youtube player 411 */ 412 onPlayerReady: function onPlayerReady(e) { 413 if (this.options.mute) { 414 e.target.mute(); 415 } 416 e.target.playVideo(); 417 }, 418 419 /** 420 * @function getPlayer 421 * returns youtube player 422 */ 423 getPlayer: function getPlayer() { 424 return this.player; 425 }, 426 427 /** 428 * @function destroy 429 * destroys all! 430 */ 431 destroy: function destroy() { 432 var self = this; 433 434 self.$node 435 .removeData('yt-init') 436 .removeData('ytPlayer') 437 .removeClass('loaded'); 438 439 self.$YTPlayerString.remove(); 440 441 $(window).off('resize.YTplayer' + self.ID); 442 $(window).off('scroll.YTplayer' + self.ID); 443 self.$body = null; 444 self.$node = null; 445 self.$YTPlayerString = null; 446 self.player.destroy(); 447 self.player = null; 448 } 449 }; 450 451 // Scroll Stopped event. 452 $.fn.scrollStopped = function(callback) { 453 var $this = $(this), self = this; 454 $this.scroll(function(){ 455 if ($this.data('scrollTimeout')) { 456 clearTimeout($this.data('scrollTimeout')); 457 } 458 $this.data('scrollTimeout', setTimeout(callback,250,self)); 459 }); 460 }; 461 462 // Create plugin 463 $.fn.YTPlayer = function(options) { 464 465 return this.each(function() { 466 var el = this; 467 468 $(el).data("yt-init", true); 469 var player = Object.create(YTPlayer); 470 player.init(el, options); 471 $.data(el, "ytPlayer", player); 472 }); 473 }; 474 475})(jQuery, window, document); 476 477 478/* =================================================== 479:: MORPHTEXT 480 * ========================================================== */ 481 482/*! 483 * Morphext - Text Rotating Plugin for jQuery 484 * https://github.com/MrSaints/Morphext 485 * 486 * Built on jQuery Boilerplate 487 * http://jqueryboilerplate.com/ 488 * 489 * Copyright 2014 Ian Lai and other contributors 490 * Released under the MIT license 491 * http://ian.mit-license.org/ 492 */ 493 494/*eslint-env browser */ 495/*global jQuery:false */ 496/*eslint-disable no-underscore-dangle */ 497 498(function ($) { 499 "use strict"; 500 501 var pluginName = "Morphext", 502 defaults = { 503 animation: "bounceIn", 504 separator: ",", 505 speed: 2000, 506 complete: $.noop 507 }; 508 509 function Plugin (element, options) { 510 this.element = $(element); 511 512 this.settings = $.extend({}, defaults, options); 513 this._defaults = defaults; 514 this._init(); 515 } 516 517 Plugin.prototype = { 518 _init: function () { 519 var $that = this; 520 this.phrases = []; 521 522 this.element.addClass("morphext"); 523 524 $.each(this.element.text().split(this.settings.separator), function (key, value) { 525 $that.phrases.push($.trim(value)); 526 }); 527 528 this.index = -1; 529 this.animate(); 530 this.start(); 531 }, 532 animate: function () { 533 this.index = ++this.index % this.phrases.length; 534 this.element[0].innerHTML = "<span class=\"animated " + this.settings.animation + "\">" + this.phrases[this.index] + "</span>"; 535 536 if ($.isFunction(this.settings.complete)) { 537 this.settings.complete.call(this); 538 } 539 }, 540 start: function () { 541 var $that = this; 542 this._interval = setInterval(function () { 543 $that.animate(); 544 }, this.settings.speed); 545 }, 546 stop: function () { 547 this._interval = clearInterval(this._interval); 548 } 549 }; 550 551 $.fn[pluginName] = function (options) { 552 return this.each(function() { 553 if (!$.data(this, "plugin_" + pluginName)) { 554 $.data(this, "plugin_" + pluginName, new Plugin(this, options)); 555 } 556 }); 557 }; 558})(jQuery); 559 560/* =================================================== 561:: IMAGE MIX BLEND MODES 562 * ========================================================== */ 563/* 564if('CSS' in window && 'supports' in window.CSS) { 565 var support = window.CSS.supports('mix-blend-mode','overlay'); 566 support = support?'mix-blend-mode-overlay':'no-mix-blend-mode-overlay'; 567 $('html').addClass(support); 568 alert(support); 569} 570 571if('CSS' in window && 'supports' in window.CSS) { 572 var support = window.CSS.supports('mix-blend-mode','multiply'); 573 support = support?'mix-blend-mode-multiply':'no-mix-blend-mode-multiply'; 574 $('html').addClass(support); 575 alert(support); 576 577} 578*/ 579/* 580 if ('CSS' in window && 'supports' in window.CSS) { 581 alert("yes, has support"); 582 } else { 583 alert("no support"); 584 var x = document.getElementsByClassName("blendimage"); 585 for (i = 0; i < x.length; i++) { 586 x[i].style.display = "none"; 587 } 588 589 } 590*/ 591 592/* 593Plugin: jQuery Parallax 594Version 1.1.3 595Author: Ian Lunn 596Twitter: @IanLunn 597Author URL: http://www.ianlunn.co.uk/ 598Plugin URL: http://www.ianlunn.co.uk/plugins/jquery-parallax/ 599 600Dual licensed under the MIT and GPL licenses: 601http://www.opensource.org/licenses/mit-license.php 602http://www.gnu.org/licenses/gpl.html 603*/ 604 605(function( $ ){ 606 var $window = $(window); 607 var windowHeight = $window.height(); 608 609 $window.resize(function () { 610 windowHeight = $window.height(); 611 }); 612 613 $.fn.parallax = function(xpos, speedFactor, outerHeight) { 614 var $this = $(this); 615 var getHeight; 616 var firstTop; 617 var paddingTop = 0; 618 619 //get the starting position of each element to have parallax applied to it 620 $this.each(function(){ 621 firstTop = $this.offset().top; 622 }); 623 624 if (outerHeight) { 625 getHeight = function(jqo) { 626 return jqo.outerHeight(true); 627 }; 628 } else { 629 getHeight = function(jqo) { 630 return jqo.height(); 631 }; 632 } 633 634 // setup defaults if arguments aren't specified 635 if (arguments.length < 1 || xpos === null) xpos = "50%"; 636 if (arguments.length < 2 || speedFactor === null) speedFactor = 0.1; 637 if (arguments.length < 3 || outerHeight === null) outerHeight = true; 638 639 // function to be called whenever the window is scrolled or resized
640 function update(){ 641 var pos = $window.scrollTop(); 642 643 $this.each(function(){ 644 var $element = $(this); 645 var top = $element.offset().top; 646 var height = getHeight($element); 647 648 // Check if totally above or totally below viewport 649 if (top + height < pos || top > pos + windowHeight) { 650 return; 651 } 652 653 $this.css('backgroundPosition', xpos + " " + Math.round((firstTop - pos) * speedFactor) + "px"); 654 }); 655 } 656 657 $window.bind('scroll', update).resize(update); 658 update(); 659 }; 660})(jQuery); 661 662 663 664(function() { 665 var imagecanvas = document.createElement('canvas'); 666 var imagecontext = imagecanvas.getContext('2d'); 667 /* uncomment do see the canvas to debug 668 document.body.appendChild(imagecanvas); 669 */ 670 window.addEventListener('load', function() { 671 [].forEach.call(document.querySelectorAll('img.mask'), function(img) { 672 var newImg = document.createElement('img'); 673 if (img.src !== 'undefined') { 674 newImg.src = img.src; 675 newImg.onload = function() { 676 var width = newImg.width; 677 var height = newImg.height; 678 var mask = document.createElement('img'); 679 mask.src = img.getAttribute('data-mask'); 680 mask.onload = function() { 681 imagecanvas.width = width; 682 imagecanvas.height = height; 683 imagecontext.drawImage(mask, 0, 0, width, height); 684 imagecontext.globalCompositeOperation = 'source-atop'; 685 imagecontext.drawImage(img, 0, 0); 686 img.src = imagecanvas.toDataURL(); 687 } 688 } 689 } 690 }); 691 }, false); 692})(); 693 694/*! 695 696 ========================================================= 697 * Material Kit PRO - v2.1.1 698 ========================================================= 699 700 * Product Page: https://www.creative-tim.com/product/material-kit-pro 701 * Copyright 2018 Creative Tim (http://www.creative-tim.com) 702 703 * Designed by www.invisionapp.com Coded by www.creative-tim.com 704 705 ========================================================= 706 707 * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 708 709 */ 710 711materialKit = { 712 misc: { 713 navbar_menu_visible: 0, 714 window_width: 0, 715 transparent: true, 716 colored_shadows: true, 717 fixedTop: false, 718 navbar_initialized: false, 719 isWindow: document.documentMode || /Edge/.test(navigator.userAgent) 720 }, 721 722 checkScrollForParallax: function() { 723 oVal = ($(window).scrollTop() / 3); 724 big_image.css({ 725 'transform': 'translate3d(0,' + oVal + 'px,0)', 726 '-webkit-transform': 'translate3d(0,' + oVal + 'px,0)', 727 '-ms-transform': 'translate3d(0,' + oVal + 'px,0)', 728 '-o-transform': 'translate3d(0,' + oVal + 'px,0)' 729 }); 730 }, 731 732 initFormExtendedDatetimepickers: function() { 733 $('.datetimepicker').datetimepicker({ 734 icons: { 735 time: "far fa-clock", 736 date: "fa fa-calendar", 737 up: "fa fa-chevron-up", 738 down: "fa fa-chevron-down", 739 previous: 'fa fa-chevron-left', 740 next: 'fa fa-chevron-right', 741 today: 'fa fa-screenshot', 742 clear: 'fa fa-trash', 743 close: 'fa fa-remove' 744 } 745 }); 746 747 $('.datepicker').datetimepicker({ 748 format: 'MM/DD/YYYY', 749 icons: { 750 time: "far fa-clock", 751 date: "fa fa-calendar", 752 up: "fa fa-chevron-up", 753 down: "fa fa-chevron-down", 754 previous: 'fa fa-chevron-left', 755 next: 'fa fa-chevron-right', 756 today: 'fa fa-screenshot', 757 clear: 'fa fa-trash', 758 close: 'fa fa-remove' 759 } 760 }); 761 762 $('.timepicker').datetimepicker({ 763 // format: 'H:mm', // use this format if you want the 24hours timepicker 764 format: 'h:mm A', //use this format if you want the 12hours timpiecker with AM/PM toggle 765 icons: { 766 time: "far fa-clock", 767 date: "fa fa-calendar", 768 up: "fa fa-chevron-up", 769 down: "fa fa-chevron-down", 770 previous: 'fa fa-chevron-left', 771 next: 'fa fa-chevron-right', 772 today: 'fa fa-screenshot',
773 clear: 'fa fa-trash', 774 close: 'fa fa-remove' 775 } 776 }); 777 }, 778 779 780 781 782 initColoredShadows: function() { 783 if (materialKit.misc.colored_shadows == true) { 784 if (!(BrowserDetect.browser == 'Explorer' && BrowserDetect.version <= 12)) { 785 $('.card:not([data-colored-shadow="false"]) .card-header-image').each(function() { 786 $card_img = $(this); 787 788 is_on_dark_screen = $(this).closest('.section-dark, .section-image').length; 789 790 // we block the generator of the colored shadows on dark sections, because they are not natural 791 if (is_on_dark_screen == 0) { 792 var img_source = $card_img.find('img').attr('src'); 793 var is_rotating = $card_img.closest('.card-rotate').length == 1 ? true : false; 794 var $append_div = $card_img; 795 796 var colored_shadow_div = $('<div class="colored-shadow"/>'); 797 798 if (is_rotating) { 799 var card_image_height = $card_img.height(); 800 var card_image_width = $card_img.width(); 801 802 $(this).find('.back').css({ 803 'height': card_image_height + 'px', 804 'width': card_image_width + 'px' 805 }); 806 $append_div = $card_img.find('.front'); 807 } 808 809 colored_shadow_div.css({ 810 'background-image': 'url(' + img_source + ')' 811 }).appendTo($append_div); 812 813 if ($card_img.width() > 700) { 814 colored_shadow_div.addClass('colored-shadow-big'); 815 } 816 817 setTimeout(function() { 818 colored_shadow_div.css('opacity', 1); 819 }, 200); 820 } 821 822 }); 823 } 824 } 825 }, 826 827 initRotateCard: debounce(function() { 828 $('.rotating-card-container .card-rotate').each(function() { 829 var $this = $(this); 830 831 var card_width = $(this).parent().width(); 832 var card_height = $(this).find('.front .card-body').outerHeight(); 833 834 $this.parent().css({ 835 'margin-bottom': 30 + 'px' 836 }); 837 838 $this.find('.front').css({ 839 'width': card_width + 'px', 840 }); 841 842 $this.find('.back').css({ 843 'width': card_width + 'px', 844 }); 845 }); 846 }, 50), 847 848 checkScrollForTransparentNavbar: debounce(function() { 849 if ($(document).scrollTop() > scroll_distance) { 850 if (materialKit.misc.transparent) { 851 materialKit.misc.transparent = false; 852 $('.navbar-color-on-scroll').removeClass('navbar-transparent'); 853 } 854 } else { 855 if (!materialKit.misc.transparent) { 856 materialKit.misc.transparent = true; 857 $('.navbar-color-on-scroll').addClass('navbar-transparent'); 858 } 859 } 860 }, 17) 861}; 862 863var big_image; 864 865$(document).ready(function() { 866 BrowserDetect.init(); 867 868 // Init Material scripts for buttons ripples, inputs animations etc, more info on the next link https://github.com/FezVrasta/bootstrap-material-design#materialjs 869 $('body').bootstrapMaterialDesign(); 870 871 window_width = $(window).width(); 872 873 $navbar = $('.navbar[color-on-scroll]'); 874 scroll_distance = $navbar.attr('color-on-scroll') || 500; 875 876 $navbar_collapse = $('.navbar').find('.navbar-collapse'); 877 878 // Multilevel Dropdown menu 879 880 $('.dropdown-menu a.dropdown-toggle').on('click', function(e) { 881 var $el = $(this); 882 var $parent = $(this).offsetParent(".dropdown-menu"); 883 if (!$(this).next().hasClass('show')) { 884 $(this).parents('.dropdown-menu').first().find('.show').removeClass("show"); 885 } 886 var $subMenu = $(this).next(".dropdown-menu"); 887 $subMenu.toggleClass('show'); 888 889 $(this).closest("a").toggleClass('open'); 890 891 $(this).parents('a.dropdown-item.dropdown.show').on('hidden.bs.dropdown', function(e) { 892 $('.dropdown-menu .show').removeClass("show"); 893 }); 894 895 if (!$parent.parent().hasClass('navbar-nav')) { 896 $el.next().css({ 897 "top": $el[0].offsetTop, 898 "left": $parent.outerWidth() - 4 899 }); 900 } 901 902 return false; 903 }); 904 905 // Activate the Tooltips 906 $('[data-toggle="tooltip"], [rel="tooltip"]').tooltip(); 907 908 // FileInput 909 $('.form-file-simple .inputFileVisible').click(function() { 910 $(this).siblings('.inputFileHidden').trigger('click'); 911 }); 912 913 $('.form-file-simple .inputFileHidden').change(function() { 914 var filename = $(this).val().replace(/C:\\fakepath\\/i, ''); 915 $(this).siblings('.inputFileVisible').val(filename); 916 }); 917 918 $('.form-file-multiple .inputFileVisible, .form-file-multiple .input-group-btn').click(function() { 919 $(this).parent().parent().find('.inputFileHidden').trigger('click'); 920 $(this).parent().parent().addClass('is-focused'); 921 }); 922 923 $('.form-file-multiple .inputFileHidden').change(function() { 924 var names = ''; 925 for (var i = 0; i < $(this).get(0).files.length; ++i) { 926 if (i < $(this).get(0).files.length - 1) { 927 names += $(this).get(0).files.item(i).name + ','; 928 } else { 929 names += $(this).get(0).files.item(i).name; 930 } 931 } 932 $(this).siblings('.input-group').find('.inputFileVisible').val(names); 933 }); 934 935 $('.form-file-multiple .btn').on('focus', function() { 936 $(this).parent().siblings().trigger('focus'); 937 }); 938 939 $('.form-file-multiple .btn').on('focusout', function() { 940 $(this).parent().siblings().trigger('focusout'); 941 }); 942 943 // Activate bootstrap-select 944 if ($(".selectpicker").length != 0) { 945 $(".selectpicker").selectpicker(); 946 } 947 948 // Activate Popovers 949 $('[data-toggle="popover"]').popover(); 950 951 // Active Carousel 952 $('.carousel').carousel(); 953 954 //Activate tags 955 // we style the badges with our colors 956 var tagClass = $('.tagsinput').data('color'); 957 958 if ($(".tagsinput").length != 0) { 959 $('.tagsinput').tagsinput(); 960 } 961 962 $('.bootstrap-tagsinput').addClass('' + tagClass + '-badge'); 963 964 if ($('.navbar-color-on-scroll').length != 0) { 965 $(window).on('scroll', materialKit.checkScrollForTransparentNavbar); 966 } 967 968 materialKit.checkScrollForTransparentNavbar(); 969 970 if (window_width >= 768) {
971 big_image = $('.page-header[data-parallax="true"]'); 972 if (big_image.length != 0) { 973 $(window).on('scroll', materialKit.checkScrollForParallax); 974 } 975 976 } 977 978 //initialise rotating cards 979 materialKit.initRotateCard(); 980 981 //initialise colored shadow 982 materialKit.initColoredShadows(); 983}); 984 985$(window).on('resize', function() { 986 materialKit.initRotateCard(); 987}); 988 989$(document).on('click', '.card-rotate .btn-rotate', function() { 990 var $rotating_card_container = $(this).closest('.rotating-card-container'); 991 992 if ($rotating_card_container.hasClass('hover')) { 993 $rotating_card_container.removeClass('hover'); 994 } else { 995 $rotating_card_container.addClass('hover'); 996 } 997}); 998 999$(document).on('click', '.navbar-toggler', function() { 1000 $toggle = $(this); 1001 1002 if (materialKit.misc.navbar_menu_visible == 1) { 1003 $('html').removeClass('nav-open'); 1004 materialKit.misc.navbar_menu_visible = 0; 1005 $('#bodyClick').remove(); 1006 setTimeout(function() { 1007 $toggle.removeClass('toggled'); 1008 }, 550); 1009 1010 $('html').removeClass('nav-open-absolute'); 1011 } else { 1012 setTimeout(function() { 1013 $toggle.addClass('toggled'); 1014 }, 580); 1015 1016 1017 div = '<div id="bodyClick"></div>'; 1018 $(div).appendTo("body").click(function() { 1019 $('html').removeClass('nav-open'); 1020 1021 if ($('nav').hasClass('navbar-absolute')) { 1022 $('html').removeClass('nav-open-absolute'); 1023 } 1024 materialKit.misc.navbar_menu_visible = 0; 1025 $('#bodyClick').remove(); 1026 setTimeout(function() { 1027 $toggle.removeClass('toggled'); 1028 }, 550); 1029 }); 1030 1031 if ($('nav').hasClass('navbar-absolute')) { 1032 $('html').addClass('nav-open-absolute'); 1033 } 1034 1035 $('html').addClass('nav-open'); 1036 materialKit.misc.navbar_menu_visible = 1; 1037 } 1038}); 1039 1040// Returns a function, that, as long as it continues to be invoked, will not 1041// be triggered. The function will be called after it stops being called for 1042// N milliseconds. If `immediate` is passed, trigger the function on the 1043// leading edge, instead of the trailing. 1044 1045function debounce(func, wait, immediate) { 1046 var timeout; 1047 return function() { 1048 var context = this, 1049 args = arguments; 1050 clearTimeout(timeout); 1051 timeout = setTimeout(function() { 1052 timeout = null; 1053 if (!immediate) func.apply(context, args); 1054 }, wait); 1055 if (immediate && !timeout) func.apply(context, args); 1056 }; 1057}; 1058 1059var BrowserDetect = { 1060 init: function() { 1061 this.browser = this.searchString(this.dataBrowser) || "Other"; 1062 this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "Unknown"; 1063 }, 1064 searchString: function(data) { 1065 for (var i = 0; i < data.length; i++) { 1066 var dataString = data[i].string; 1067 this.versionSearchString = data[i].subString; 1068 1069 if (dataString.indexOf(data[i].subString) !== -1) { 1070 return data[i].identity; 1071 } 1072 } 1073 }, 1074 searchVersion: function(dataString) { 1075 var index = dataString.indexOf(this.versionSearchString); 1076 if (index === -1) { 1077 return; 1078 } 1079 1080 var rv = dataString.indexOf("rv:"); 1081 if (this.versionSearchString === "Trident" && rv !== -1) { 1082 return parseFloat(dataString.substring(rv + 3)); 1083 } else { 1084 return parseFloat(dataString.substring(index + this.versionSearchString.length + 1)); 1085 } 1086 }, 1087 1088 dataBrowser: [{ 1089 string: navigator.userAgent, 1090 subString: "Chrome", 1091 identity: "Chrome" 1092 }, 1093 { 1094 string: navigator.userAgent, 1095 subString: "MSIE", 1096 identity: "Explorer" 1097 }, 1098 { 1099 string: navigator.userAgent, 1100 subString: "Trident", 1101 identity: "Explorer" 1102 }, 1103 { 1104 string: navigator.userAgent, 1105 subString: "Firefox", 1106 identity: "Firefox" 1107 }, 1108 { 1109 string: navigator.userAgent, 1110 subString: "Safari", 1111 identity: "Safari" 1112 }, 1113 { 1114 string: navigator.userAgent, 1115 subString: "Opera", 1116 identity: "Opera" 1117 } 1118 ] 1119 1120}; 1121 1122var better_browser = '<div class="container"><div class="better-browser row"><div class="col-md-2"></div><div class="col-md-8"><h3>We are sorry but it looks like your Browser doesn\'t support our website Features. In order to get the full experience please download a new version of your favourite browser.</h3></div><div class="col-md-2"></div><br><div class="col-md-4"><a href="https://www.mozilla.org/ro/firefox/new/" class="btn btn-warning">Mozilla</a><br></div><div class="col-md-4"><a href="https://www.google.com/chrome/browser/desktop/index.html" class="btn ">Chrome</a><br></div><div class="col-md-4">
1122<a href="http://windows.microsoft.com/en-us/internet-explorer/ie-11-worldwide-languages" class="btn">Internet Explorer</a><br></div><br><br><h4>Thank you!</h4></div></div>'; 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 //-------------testimonial-6,7,8 carousel------------- 1133 $(".comncarousel").owlCarousel({ 1134 items: 1, 1135 loop: true, 1136 dots: true, 1137 autoplay: true, 1138 smartSpeed: 1200, 1139 autoplayTimeout: 3000 1140 }); 1141 1142 1143 //*----------carousel-1-------------- 1144 $(".carousel1_wrapper").owlCarousel({ 1145 items: 6, 1146 loop: true, 1147 dots: true, 1148 margin: 30, 1149 autoplay: true, 1150 smartSpeed: 1200, 1151 autoplayTimeout: 3000, 1152 responsiveClass: true, 1153 responsive: { 1154 0: { 1155 items: 1, 1156 }, 1157 480: { 1158 items: 2, 1159 }, 1160 768: { 1161 items: 3, 1162 }, 1163 992: { 1164 items: 4, 1165 }, 1166 1200: { 1167 items: 5, 1168 } 1169 } 1170 }); 1171 1172 1173 //*---------carousel-2---------- 1174 $(".carousel2_wrapper").owlCarousel({ 1175 items: 3, 1176 loop: true, 1177 dots: false, 1178 nav: true, 1179 navText: ["<i class='fa fa-angle-left'></i>", "<i class='fa fa-angle-right'></i>"], 1180 margin: 30, 1181 autoplay: true, 1182 smartSpeed: 1200, 1183 autoplayTimeout: 3000, 1184 responsiveClass: true, 1185 responsive: { 1186 0: { 1187 items: 1, 1188 }, 1189 480: { 1190 items: 2, 1191 }, 1192 768: { 1193 items: 3, 1194 } 1195 } 1196 }); 1197 1198 1199 //*---------carousel-3-------- 1200 $(".carousel3_wrapper").owlCarousel({ 1201 items: 3, 1202 loop: true, 1203 dots: true, 1204 margin: 30, 1205 autoplay: true, 1206 smartSpeed: 1200, 1207 autoplayTimeout: 3000, 1208 responsiveClass: true, 1209 responsive: { 1210 0: { 1211 items: 1, 1212 }, 1213 768: { 1214 items: 2, 1215 1216 }, 1217 992: { 1218 items: 3, 1219 } 1220 } 1221 }); 1222 1223 1224 //*----carousel-4-------- 1225 $(".carousel4_wrapper").owlCarousel({ 1226 items: 3, 1227 loop: true, 1228 dots: false, 1229 margin: 30, 1230 nav: true, 1231 navText: ["<i class='fa fa-angle-left'></i>", "<i class='fa fa-angle-right'></i>"], 1232 autoplay: false, 1233 smartSpeed: 1200, 1234 autoplayTimeout: 3000, 1235 responsiveClass: true, 1236 responsive: { 1237 0: { 1238 items: 1, 1239 }, 1240 768: { 1241 items: 2, 1242 1243 }, 1244 992: { 1245 items: 3, 1246 } 1247 } 1248 }); 1249 1250 1251 //*---------carousel-5--------- 1252 $(".carousel5_wrapper").owlCarousel({ 1253 items: 1, 1254 loop: true, 1255 dots: true, 1256 autoplay: true, 1257 nav: true, 1258 navText: ["<i class='fa fa-angle-left'></i>", "<i class='fa fa-angle-right'></i>"], 1259 smartSpeed: 1200, 1260 autoplayTimeout: 3000 1261 }); 1262 1263 1264 //*-------carousel-6-------- 1265 $(".carousel6_wrapper").owlCarousel({ 1266 items: 1, 1267 loop: true, 1268 dots: true, 1269 autoplay: true, 1270 smartSpeed: 1200, 1271 autoplayTimeout: 3000 1272 }); 1273 1274 1275 //*-------carousel-6-------- 1276 $(".carousel7_wrapper").owlCarousel({ 1277 items: 1, 1278 loop: true, 1279 dots: false, 1280 nav: true, 1281 navText: ["<i class='fa fa-angle-left'></i>", "<i class='fa fa-angle-right'></i>"], 1282 autoplay: false, 1283 smartSpeed: 1200, 1284 autoplayTimeout: 3000 1285 }); 1286 1287 1288 //*----carousel-14-------- 1289 $(".carousel8_wrapper").owlCarousel({ 1290 items: 5, 1291 loop: true, 1292 dots: false, 1293 margin: 30, 1294 stagePadding: 10, 1295 autoplay: true, 1296 smartSpeed: 1200, 1297 autoplayTimeout: 3000, 1298 responsiveClass: true, 1299 responsive: { 1300 0: { 1301 items: 1, 1302 }, 1303 480: { 1304 items: 2, 1305 }, 1306 768: { 1307 items: 3, 1308 }, 1309 992: { 1310 items: 4, 1311 }, 1312 1200: { 1313 items: 5, 1314 } 1315 } 1316 });
vendor: 2 bytes, line 1317
1317
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.