HEX
Server: Apache
System: Linux p3plzcpnl506847.prod.phx3.secureserver.net 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User: slfopp7cb1df (5698090)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: /home/slfopp7cb1df/public_html/home/wp-content/themes/nanosoft/assets/js/theme.js
( function( $ ) {
	"use strict";

	var $win = $(window), $doc = $(document), $body = $('body');

(function() {
	var lastTime = 0;
	var vendors = ['ms', 'moz', 'webkit', 'o'];
	for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
			window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
			window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame']
					|| window[vendors[x]+'CancelRequestAnimationFrame'];
	}

	if (!window.requestAnimationFrame)
			window.requestAnimationFrame = function(callback, element) {
					var currTime = new Date().getTime();
					var timeToCall = Math.max(0, 16 - (currTime - lastTime));
					var id = window.setTimeout(function() { callback(currTime + timeToCall); },
							timeToCall);
					lastTime = currTime + timeToCall;
					return id;
			};

	if (!window.cancelAnimationFrame)
			window.cancelAnimationFrame = function(id) {
					clearTimeout(id);
			};
}());

(function($) {

	function Circle(pos,rad,color, ctx) {
			var _this = this;

			// constructor
			(function() {
					_this.pos = pos || null;
					_this.radius = rad || null;
					_this.color = color || null;
			})();

			this.draw = function() {
					if(!_this.active) return;
					ctx.beginPath();
					ctx.arc(_this.pos.x, _this.pos.y, _this.radius, 0, 2 * Math.PI, false);
					ctx.fillStyle = 'rgba(255,255,255,'+ _this.active+')';
					ctx.fill();
			};
	}

	// Util
	function getDistance(p1, p2) {
			return Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2);
	}

	function CanvasEffect (element) {
			this.$elm = $(element);
			this.animateHeader = true;
			
			this._initHeader();
			this._initAnimation();
			this._initEvents();
	}

	CanvasEffect.prototype = {
			_initHeader: function () {
					this.width = this.$elm.outerWidth();
					this.height = this.$elm.outerHeight();
					this.target = {x: this.width/2, y: this.height/2};

					this.canvas = this.$elm.find('canvas').get(0);
					this.canvas.width = this.width;
					this.canvas.height = this.height;
					this.ctx = this.canvas.getContext('2d');

					// create points
					this.points = [];
					for(var x = 0; x < this.width; x = x + this.width/20) {
							for(var y = 0; y < this.height; y = y + this.height/20) {
									var px = x + Math.random()*this.width/20;
									var py = y + Math.random()*this.height/20;
									var p = {x: px, originX: px, y: py, originY: py };

									this.points.push(p);
							}
					}

					// for each point find the 5 closest points
					for(var i = 0; i < this.points.length; i++) {
							var closest = [];
							var p1 = this.points[i];
							for(var j = 0; j < this.points.length; j++) {
									var p2 = this.points[j]
									if(!(p1 == p2)) {
											var placed = false;
											for(var k = 0; k < 5; k++) {
													if(!placed) {
															if(closest[k] == undefined) {
																	closest[k] = p2;
																	placed = true;
															}
													}
											}

											for(var k = 0; k < 5; k++) {
													if(!placed) {
															if(getDistance(p1, p2) < getDistance(p1, closest[k])) {
																	closest[k] = p2;
																	placed = true;
															}
													}
											}
									}
							}
							p1.closest = closest;
					}

					// assign a circle to each point
					for(var i in this.points) {
							var c = new Circle(this.points[i], 2+Math.random()*2, 'rgba(255,255,255,0.3)', this.ctx);
							this.points[i].circle = c;
					}
			},

			_initAnimation: function () {
					this._animate();

					for(var i in this.points) {
							this._shiftPoint(this.points[i]);
					}
			},

			_initEvents: function () {
					if(!('ontouchstart' in window)) {
							this.$elm.on('mousemove', this._mouseMove.bind(this));
					}

					window.addEventListener('resize', this._resize.bind(this));
			},

			_mouseMove: function (e) {
				e.stopPropagation();

				var y = e.pageY - $(e.currentTarget).offset().top
  				var x = e.pageX - $(e.currentTarget).offset().left

				this.target.x = x;
				this.target.y = y;
			},

			_resize: function () {
				this.width = this.$elm.outerWidth();
				this.height = this.$elm.outerHeight();
				this.canvas.width = this.width;
				this.canvas.height = this.height;
			},

			_animate: function () {
				this.ctx.clearRect(0,0,this.width,this.height);
				for(var i in this.points) {
						// detect points in range
						if(Math.abs(getDistance(this.target, this.points[i])) < 4000) {
								this.points[i].active = 0.3;
								this.points[i].circle.active = 0.6;
						} else if(Math.abs(getDistance(this.target, this.points[i])) < 20000) {
								this.points[i].active = 0.1;
								this.points[i].circle.active = 0.3;
						} else if(Math.abs(getDistance(this.target, this.points[i])) < 40000) {
								this.points[i].active = 0.02;
								this.points[i].circle.active = 0.1;
						} else {
								this.points[i].active = 0;
								this.points[i].circle.active = 0;
						}

						this._drawLines(this.points[i]);
						this.points[i].circle.draw();
				}
					
				window.requestAnimationFrame(this._animate.bind(this));
			},

			_shiftPoint: function (p) {
					var self = this;
					TweenLite.to(p, 1+1*Math.random(), {x:p.originX-50+Math.random()*100,
							y: p.originY-50+Math.random()*100, ease:Circ.easeInOut,
							onComplete: function() {
									self._shiftPoint(p);
							}});
			},

			_drawLines: function (p) {
					if(!p.active) return;

					for(var i in p.closest) {
							this.ctx.beginPath();
							this.ctx.moveTo(p.x, p.y);
							this.ctx.lineTo(p.closest[i].x, p.closest[i].y);
							this.ctx.strokeStyle = 'rgba(255,255,255,'+ p.active+')';
							this.ctx.stroke();
					}
			}
	}

	$.fn['canvasEffect'] = function () {
			return this.each(function () {
					new CanvasEffect(this);
			});
    };
})(jQuery);
$.fn['contentGrid'] = function() {
	return this.each(function() {
		var $this = $(this);

		$this.imagesLoaded().then(function() {
			$this.isotope(
				$.extend({}, $this.data('grid'), {
					layoutMode: 'packery',
					percentPosition: true
				})
			);
		});
	});
};
$.fn['contentGridFilter'] = function() {
	return this.each(function() {
		var targetSelector = $(this).attr('data-filter-target'),
			target = $(targetSelector),
			filter = $(this);

		filter.on('click', 'a', function(e) {
			e.preventDefault();

			$('.active', filter).removeClass('active');
			$(this).closest('li').addClass('active');

			target.isotope({
				filter: $( this ).parent().attr( 'data-filter' )
			});
		});
	});
};
$.headerSticky = function() {
	$win.on( 'scroll load', function() {
		$win.scrollTop() > $( '#site-header' ).outerHeight()
			? $( '.site-header-sticky' ).addClass( 'active' )
			: $( '.site-header-sticky' ).removeClass( 'active' );
	} );
};

$.mobileMenu = function () {
  $('ul.menu li.menu-item-has-children, ul.menu li.page_item_has_children').each(function () {
    var menuItem = $(this)
    var menuToggle = $('<span class="menu-item-toggle"><span></span></span>')

    menuToggle.insertAfter(menuItem.find('> a'))
      .on('click', function () {
        menuItem.toggleClass('menu-item-expand');
        menuItem.nextAll().removeClass('menu-item-expand');
        menuItem.prevAll().removeClass('menu-item-expand');
      })
  })
}

function NavSearch( element ) {
	this.element = $( element );
	this.toggler = $( '> a:first-child', this.element );
	this.input   = $( 'input', this.element );

	$doc.on( 'click', this.hide.bind( this ) );

	this.toggler.on( 'click', this.toggle.bind( this ) );
	this.element.on( 'click', function( e ) {
		e.stopPropagation();
	});

	this.element.on( 'keydown', ( function( e ) {
		if ( e.keyCode == 27 )
			this.hide();
	} ).bind( this ) );

	$.each( ['transitionend', 'oTransitionEnd', 'webkitTransitionEnd'], ( function( index, eventName ) {
		$( '> div', this.element ).on( eventName, ( function() {
			if ( this.element.hasClass( 'active' ) )
				this.input.get( 0 ).focus();
		} ).bind( this ) );
	} ).bind( this ) );
};

NavSearch.prototype = {
	toggle: function( e ) {
		e.preventDefault();
		e.stopPropagation();

		this.element.toggleClass( 'active' );
	},

	hide: function() {
		this.element.removeClass( 'active' );
	}
};

$.fn.navSearch = function( options ) {
	return this.each( function() {
		$( this ).data( '_navSearch', new NavSearch( this, options ) );
	} );
};

$.fn['offCanvasToggle'] = function() {
	return this.each(function() {
		var activeClass = $(this).attr('data-target') + '-active';

		$(this).on('click', function(e) {
			e.preventDefault();
			e.stopPropagation();
			
			$('body').toggleClass(activeClass);
		});

		$doc.on('click', function() {
			$('body').removeClass(activeClass);
		});

		$('.off-canvas').on('click', function(e) {
			e.stopPropagation();
		});
	});
};

$.fn['swiperSlider'] = function() {
	return this.each(function() {
		var config = $.extend({}, $(this).data('swiper'), {
			nextButton: '.swiper-button-next',
			prevButton: '.swiper-button-prev',
			autoHeight: true
		});

		var slider = new Swiper(this, config);
		var thumbs = $(this).next('.project-media-thumbs');

		if (thumbs.size() > 0) {
			var sliderThumbs = new Swiper(thumbs.get(0), {
				spaceBetween: 10,
				centeredSlides: true,
				slidesPerView: 5,
				touchRatio: 0.2
			});

			slider.params.control = sliderThumbs
			sliderThumbs.params.control = slider

			thumbs.on('click', '.swiper-slide', function() {
				var slideIndex = $(this).index();
				console.log(slideIndex)

				slider.slideTo(slideIndex)
				// sliderThumbs.slideTo(slideIndex)

				// Remove an active class
				thumbs.find('.swiper-slide-active').removeClass('swiper-slide-active')
				thumbs.find('.swiper-slide:nth(' + slideIndex + ')').addClass('swiper-slide-active')
			})
		}
	});
};
$.gotop = function() {
	$('.go-to-top a').on('click', function() {
		$( 'html, body' ).animate({ scrollTop: 0 });
	});

	$win.on('scroll', function() {
		if ($win.scrollTop() > 0) $('.go-to-top').addClass('active');
		else $('.go-to-top').removeClass('active');
	}).on('load', function() {
		$win.trigger('scroll');
	});
};
$.fn['googleMaps'] = function() {
	return this.each(function() {
		var
		elm       = $(this),
		elmCanvas = this,
		locations = {},
		geocoder  = {},
		elmConfig = $.extend({
			locations: encodeURIComponent('[]'),
			zoomable: 'yes',
			zoomlevel: 15,
			draggable: 'yes',
			type: 'roadmap',
			style: 'default'
		}, elm.data('options'));

		if (elmConfig.locations) {
			elmConfig.locations = decodeURIComponent(elmConfig.locations);
		}

		try {
			var mapStyles = {
				'subtle-grayscale': [{"featureType":"landscape","stylers":[{"saturation":-100},{"lightness":65},{"visibility":"on"}]},{"featureType":"poi","stylers":[{"saturation":-100},{"lightness":51},{"visibility":"simplified"}]},{"featureType":"road.highway","stylers":[{"saturation":-100},{"visibility":"simplified"}]},{"featureType":"road.arterial","stylers":[{"saturation":-100},{"lightness":30},{"visibility":"on"}]},{"featureType":"road.local","stylers":[{"saturation":-100},{"lightness":40},{"visibility":"on"}]},{"featureType":"transit","stylers":[{"saturation":-100},{"visibility":"simplified"}]},{"featureType":"administrative.province","stylers":[{"visibility":"off"}]},{"featureType":"water","elementType":"labels","stylers":[{"visibility":"on"},{"lightness":-25},{"saturation":-100}]},{"featureType":"water","elementType":"geometry","stylers":[{"hue":"#ffff00"},{"lightness":-25},{"saturation":-97}]}],
				'pale-dawn':        [{"featureType":"administrative","elementType":"all","stylers":[{"visibility":"on"},{"lightness":33}]},{"featureType":"landscape","elementType":"all","stylers":[{"color":"#f2e5d4"}]},{"featureType":"poi.park","elementType":"geometry","stylers":[{"color":"#c5dac6"}]},{"featureType":"poi.park","elementType":"labels","stylers":[{"visibility":"on"},{"lightness":20}]},{"featureType":"road","elementType":"all","stylers":[{"lightness":20}]},{"featureType":"road.highway","elementType":"geometry","stylers":[{"color":"#c5c6c6"}]},{"featureType":"road.arterial","elementType":"geometry","stylers":[{"color":"#e4d7c6"}]},{"featureType":"road.local","elementType":"geometry","stylers":[{"color":"#fbfaf7"}]},{"featureType":"water","elementType":"all","stylers":[{"visibility":"on"},{"color":"#acbcc9"}]}],
				'blue-warter':      [{"featureType":"administrative","elementType":"labels.text.fill","stylers":[{"color":"#444444"}]},{"featureType":"landscape","elementType":"all","stylers":[{"color":"#f2f2f2"}]},{"featureType":"poi","elementType":"all","stylers":[{"visibility":"off"}]},{"featureType":"road","elementType":"all","stylers":[{"saturation":-100},{"lightness":45}]},{"featureType":"road.highway","elementType":"all","stylers":[{"visibility":"simplified"}]},{"featureType":"road.arterial","elementType":"labels.icon","stylers":[{"visibility":"off"}]},{"featureType":"transit","elementType":"all","stylers":[{"visibility":"off"}]},{"featureType":"water","elementType":"all","stylers":[{"color":"#46bcec"},{"visibility":"on"}]}],
				'light-monochrome': [{"featureType":"administrative.locality","elementType":"all","stylers":[{"hue":"#2c2e33"},{"saturation":7},{"lightness":19},{"visibility":"on"}]},{"featureType":"landscape","elementType":"all","stylers":[{"hue":"#ffffff"},{"saturation":-100},{"lightness":100},{"visibility":"simplified"}]},{"featureType":"poi","elementType":"all","stylers":[{"hue":"#ffffff"},{"saturation":-100},{"lightness":100},{"visibility":"off"}]},{"featureType":"road","elementType":"geometry","stylers":[{"hue":"#bbc0c4"},{"saturation":-93},{"lightness":31},{"visibility":"simplified"}]},{"featureType":"road","elementType":"labels","stylers":[{"hue":"#bbc0c4"},{"saturation":-93},{"lightness":31},{"visibility":"on"}]},{"featureType":"road.arterial","elementType":"labels","stylers":[{"hue":"#bbc0c4"},{"saturation":-93},{"lightness":-2},{"visibility":"simplified"}]},{"featureType":"road.local","elementType":"geometry","stylers":[{"hue":"#e9ebed"},{"saturation":-90},{"lightness":-8},{"visibility":"simplified"}]},{"featureType":"transit","elementType":"all","stylers":[{"hue":"#e9ebed"},{"saturation":10},{"lightness":69},{"visibility":"on"}]},{"featureType":"water","elementType":"all","stylers":[{"hue":"#e9ebed"},{"saturation":-78},{"lightness":67},{"visibility":"simplified"}]}],
				'shades-of-gray':   [{"featureType":"all","elementType":"labels.text.fill","stylers":[{"saturation":36},{"color":"#000000"},{"lightness":40}]},{"featureType":"all","elementType":"labels.text.stroke","stylers":[{"visibility":"on"},{"color":"#000000"},{"lightness":16}]},{"featureType":"all","elementType":"labels.icon","stylers":[{"visibility":"off"}]},{"featureType":"administrative","elementType":"geometry.fill","stylers":[{"color":"#000000"},{"lightness":20}]},{"featureType":"administrative","elementType":"geometry.stroke","stylers":[{"color":"#000000"},{"lightness":17},{"weight":1.2}]},{"featureType":"landscape","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":20}]},{"featureType":"poi","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":21}]},{"featureType":"road.highway","elementType":"geometry.fill","stylers":[{"color":"#000000"},{"lightness":17}]},{"featureType":"road.highway","elementType":"geometry.stroke","stylers":[{"color":"#000000"},{"lightness":29},{"weight":0.2}]},{"featureType":"road.arterial","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":18}]},{"featureType":"road.local","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":16}]},{"featureType":"transit","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":19}]},{"featureType":"water","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":17}]}]
			};

			var mapTypes = {
				'roadmap'  : google.maps.MapTypeId.ROADMAP,
				'satellite': google.maps.MapTypeId.SATELLITE,
				'hybrid'   : google.maps.MapTypeId.HYBRID,
				'terrain'  : google.maps.MapTypeId.TERRAIN
			};

			var createMarker = function(map, location, image) {
				return new google.maps.Marker({
					map: map,
					position: location,
					icon: image
				});
			};

			var initMaps = function (locations) {
				if (locations.length && locations.length > 0) {
					var centerLocation = locations.shift();
					var map = new google.maps.Map(elmCanvas, {
						center     : centerLocation.latlng,
						zoom       : parseInt(elmConfig.zoomlevel || 12),
						mapTypeId  : mapTypes[elmConfig.type || 'roadmap'],
						scrollwheel: elmConfig.zoomable == 'yes',
						styles     : mapStyles[elmConfig.style],
						panControl: true,
						scaleControl: true,
						streetViewControl: true,
						zoomControl: true,
						draggable: elmConfig.draggable == 'yes'
					});

					if (centerLocation.marker != '') {
						var centerMarker = createMarker(map, centerLocation.latlng, centerLocation.marker);

						if (centerLocation.content != '') {
							var infoWindow = new google.maps.InfoWindow({
								content: centerLocation.content
							});

							centerMarker.addListener('click', function() {
								infoWindow.open(map, centerMarker);
							});
						}
					}

					if (locations.length > 0) {
						$.map(locations, function(location) {
							if (location.marker != '') {
								var marker = createMarker(map, location.latlng, location.marker);

								if (location.content != '') {
									var infoWindow = new google.maps.InfoWindow({
										content: location.content
									});

									marker.addListener('click', function() {
										infoWindow.open(map, marker);
									});
								}
							}
						});
					}
				}
			};

			var queryAddressLocations = function (locations) {
				var geocoder = new google.maps.Geocoder();
				var deferres = locations.map(function (location) {
					var deferred = $.Deferred();

				    geocoder.geocode({ 'address': location.address }, function (results, status) {
				        if (status === google.maps.GeocoderStatus.OK) {
				        	location.latlng = results[0].geometry.location;
				            deferred.resolve(location);
				        } 
				    });

				    return deferred.promise();
				});

				return deferres;
			}

			locations = $.parseJSON(elmConfig.locations);
			geocoder = new google.maps.Geocoder();

			var invalidLocations = locations.filter(function (location) {
				return location.latlng === undefined;
			});

			if (invalidLocations.length > 0) {
				$.when.apply($, queryAddressLocations(locations)).done(function () {
					initMaps(Array.prototype.slice.apply(arguments));
				});
			} else {
				initMaps(locations);
			}
		} catch(e) {
		}
	});
};
$(function() {
	// Initialize the header sticky
	$.headerSticky();

	// Initialize the menu mobile
	$.mobileMenu();

	// Initialize go-to-top button
	$.gotop();

	// Initialize scroll down arrow
	$('.content-header .down-arrow a').on('click', function() {
		var stickyHeaderHeight = $('#site-header-sticky').height() || 0;
		var adminbarHeight = $('#wpadminbar').height() || 0;
		var contentOffset = $('.content-header').offset().top + $('.content-header').outerHeight();

		$( 'html, body' ).animate({
			scrollTop: contentOffset - (stickyHeaderHeight + adminbarHeight)
		});
	});

	// Initialize the off-canvas toggler
	$('.off-canvas-toggle').offCanvasToggle();

	// Initialize the search box toggler on the
	// navigation bar
	$('.navigator .search-box').navSearch();

	// Initialize the grid component
	$('[data-grid]').contentGrid();

	// Initialize the grid items filter
	$('[data-filter-target]').contentGridFilter();

	// Initialize swiper slider
	$('[data-swiper]').swiperSlider();

	// Initialize lightbox
	$('[rel^="prettyPhoto"]').prettyPhoto({
		social_tools: ''
	});

	$('[data-height]').imagesLoaded(function () {
		$(this).matchHeight({ property: 'min-height' });
	});

	$(document).imagesLoaded(function () {
		$('.vc_row > canvas').each(function () {
			$(this).parent().canvasEffect();
		});
	});

	//Fix RTL
	$(document).ready(function () {
		if ($('html').attr('dir') == 'rtl') {
			$('[data-vc-full-width="true"]').each(function(i, v) {
				$(this)
					.css('right', -$(this).css('left'))
					.css('left' , 'auto !important');
			});
		}
	});
});

$(window).on('load', function() {
  $('body').addClass('is-loaded');
  $('.elm-google-maps[data-options]').googleMaps();
});


} ).call( this, jQuery )