PageSourceSearch

https://www.wzzk.com/wp-content/plugins/wpb-slider/assets/js/wpb-slider-common.js?ver=1.1.4

js wzzk.com collected 2026-10-02 06:31:19 UTC 51,875 bytes, 2,022 lines download raw bytes

1/**
2 * Main mathys theme js file
3 */
4"use strict";
5
6var slideStyle = "";
7var callActionsOnLoad = false;
8var videoEnded = false;
9jQuery(document).ready(function($) {
10   var isHorizontalNav=false; 
11   var horiMain = {};
12   var horMain = {};
13	if ( typeof wpbSliderArgs == 'undefined' ) 
14		return;
15
16	if ( typeof $().swipe == 'function' )
17		$.fn.swipe();
18
19	/* Sliders
20	======================================================*/
21	if ( typeof $().carouFredSel != 'function' )
22		return;
23
24	/**
25	 * Vertical navigation class
26	======================================================*/
27	var VerticalNav = function( $main ) {
28		var self = this;
29
30		var $nav = $main.find('.wpb-slider-vertical-nav');
31
32		// prev next block selector
33		this.mainBlockSelector = '.wpb-slider-vertical-nav-main';
34
35		var $navMain = $main.find(self.mainBlockSelector);
36
37		// slides array
38		this.slides = $nav.find('a');
39
40		// slides count
41		this.slidesCount = self.slides.length;
42                
43		// count of visible items
44		this.visible = 1;
45
46		// count of slide pages
47		this.slidePages = 1;
48
49		// is active vertical navigation
50		this.activeSlider = null;		
51
52		// slider args
53		this.args = {};
54
55		// slider height
56		this.sliderHeight = $navMain.height();
57
58		// item max height
59		this.itemMaxHeight = $navMain.attr("itemHeight");
60
61		// check true if slider is loaded first time
62		this.isLoaded = false;
63
64		/**
65		 * Construct object
66		 */
67		self.construct = function() {
68			if ( !self.isActive() )
69				return;
70
71			self.setSliderHeight();
72
73			self.calcSliderArgs();
74			self.setSliderArgs();
75			Actions.loadSlider( $nav, self.args );
76			self.setSliderConfigArgs();
77
78			self.onResizeNav();
79
80			// set first time loaded
81			this.isLoaded = true;
82		}
83
84		self.setSliderHeight = function() {
85			this.sliderHeight = $navMain.height();
86		}
87
88		/**	
89		 * On resize nav
90		 */
91		self.onResizeNav = function() {
92			$('body').on('wpbslWindowResize', function(){
93				var h = $main.height();
94
95				// update slides
96				this.slides = $nav.find('a');
97
98				$navMain.height(h);
99
100				self.setSliderHeight();
101				self.calcSlidesVisible();
102
103				$nav.trigger('updateSizes');
104			});
105		}
106
107		/**
108		 * Set slider config args to use this on slider actions
109		 */
110		self.setSliderConfigArgs = function() {
111			this.slidePages  = self.getSlidePages();
112		}
113
114		/**
115		 * Get count slides pages
116		 */
117		self.getSlidePages = function() {
118			return Math.ceil( self.slidesCount / self.visible );
119		}
120
121		/**
122		 * Check is active vertiacal navigation
123		 */
124		self.isActive = function() {
125			if ( null === self.activeSlider ) 
126				self.activeSlider = ( 0 == $nav.length ) ? false : true;
127
128			return self.activeSlider;
129		}
130
131		/**
132		 * Slides args
133		 */
134		self.setSliderArgs = function() {
135			var prevNext = Actions.getPrevNext( $main, self.mainBlockSelector );
136                        for(var x in wpbSliderArgs){
137                            var currSliderId = x;
138                            slideStyle = wpbSliderArgs[x]['thumb_slide_style'];
139                            break;
140                        }
141                        var width = $($navMain).width();
142			var args = {
143				responsive: true,
144				circular  : false,
145				infinite  : false,
146				direction : "up",
147				items: {
148					visible: self.visible
149				},
150				height: '100%',
151				width: width,
152				auto: false,
153                                scroll : {
154                                    items            : 1,
155                                    duration        : 1000
156                                },
157				swipe: {
158					onTouch: true,
159					onMouse: true
160				},
161				prev: prevNext.prev,
162				next: prevNext.next,
163				pagination : false,
164				onCreate: function(data) {
165					var first = data.items.prevObject[0];
166					Actions.bulletActions( $(first) );
167				}
168			}
169                        
170                        //
171                        // check if slide style is fade then use fade style.
172                        //
173                        if(slideStyle == "fade"){
174                            args["scroll"] = {
175                                    items            : 1,
176                                    fx          : "fade",
177                                    duration        : 1000
178                                };
179                        }// end if.
180
181			this.args = args;
182		}
183
184		/**
185		 * Calc nav-slider args
186		 */
187		self.calcSliderArgs = function() {
188			//self.calcItemMaxHeight();
189			self.calcSlidesVisible();
190			self.calcSlidesHeight();
191			self.resizeItemImage();
192			//self.ItemAlign();
193		}
194
195		/**
196		 * Calc slide-item max height
197		 */
198		self.calcItemMaxHeight = function() {			
199			var maxHeight = 0;
200
201			self.slides.each(function(){
202				var h = $(this).height();
203
204				if ( h > maxHeight ) {
205					maxHeight = h;
206				};
207			});
208
209			this.itemMaxHeight = maxHeight;
210		}
211
212		/**
213		 * Calc and set slides height
214		 */
215		self.calcSlidesHeight = function() {
216			//var itemHeight = self.sliderHeight / self.visible;
217            var itemHeight = $navMain.attr("itemHeight");
218			self.slides.height(itemHeight);
219		}
220
221		/**
222		 * Calc visible count and set single slide height
223		 */
224		self.calcSlidesVisible = function() {
225			var visible = 1;
226
227			visible = Math.floor( self.sliderHeight / self.itemMaxHeight );
228
229			if ( visible > self.slidesCount ) 
230				visible = self.slidesCount;
231
232			if ( visible == self.visible ) 
233				return;
234
235			this.visible = visible;	
236
237			//console.log(this.visible);
238			self.reInitSlider(visible);
239		}
240
241		/**	
242		 * Reinit slider
243		 */
244		self.reInitSlider = function( visible ) {
245			if ( false === self.isLoaded ) 
246				return;
247
248			var args = {
249				items: {
250					visible: visible
251				}
252			}
253
254			$nav.trigger('configuration', args, true);	
255		}
256
257		/**
258		 * Calc slide page by curren position
259		 */
260		self.calcSlidePage = function( currentPos ) {
261			return Math.ceil( ++currentPos / self.visible ) - 1;
262		}
263
264		/**
265		 * Get curren slider page on slider confing
266		 */
267		self.getCurrentPage = function() {
268			var page = 0;
269
270			$nav.trigger('currentPage', function(p){
271				page = p;
272			});
273
274			return page;
275		}
276
277		/**
278		 * May be slide page
279		 */
280		self.mbDoSlide = function( currentPos ) {
281                        //
282                        // WD-414 - changes for sliding only one slide at a time.
283                        //
284                        self.slideTo( currentPos );
285                        Actions.bulletActions( self.slides.eq( currentPos ) );
286                        return;
287                    
288			var calcSlidePage = self.calcSlidePage( currentPos ),
289			currentPage   = self.getCurrentPage();	
290	
291			Actions.bulletActions( self.slides.eq( currentPos ) );
292
293			if ( calcSlidePage == currentPage ) 
294				return;
295
296			self.slideTo( calcSlidePage );
297		}
298
299		/**
300		 * Slide to
301		 */
302		self.slideTo = function( page ) {
303                        if(slideStyle == "fade"){
304			//$nav.trigger( 'slideToPage', page );
305			$nav.trigger("slideToPage", [page, {
306
307	    fx          : "fade",
308
309	    duration    : 500
310
311	}]);
312                        }else{
313                            $nav.trigger( 'slideToPage', page );
314                        }
315		}// end function
316		
317		self.resizeItemImage = function() {
318			/*self.slides.each(function(){
319				var itemHeight = $(this).height()
320				var img = $(this).find('img');
321				$(img).css("margin",0);
322				$(img).css("width",'auto');
323				$(img).css("height",Math.round(itemHeight - itemHeight * 5/ 100)-10);
324			});*/
325		}
326		
327		self.ItemAlign = function() {
328			
329			var layoutHeight = $main.find('.caroufredsel_wrapper').height();
330			
331			var slideHeight = Math.round(layoutHeight/self.slidesCount);
332			slideHeight	= slideHeight;		
333
334			self.slides.each(function(){
335	
336				/*$(this).width($($navMain).width());
337				$(this).height(slideHeight);
338
339				var span = $(this).find('span');
340				$(span).width('100%');
341				$(span).height('100%');*/
342				
343				//var img = $(this).find('img');
344				//$(img).css("padding",0);
345				//$(img).css("margin",0);
346				//$(img).width('97%');
347				//$(img).height('97%');
348			});
349		}
350	}
351
352		/**
353	 * Vertical navigation class
354	======================================================*/
355
356	var HorizontalNav = function( $main ) {
357		horiMain = $main;
358		var self = this;
359                isHorizontalNav=true;
360		var $nav = $main.find('.wpb-slider-horizontal-nav');
361
362		// prev next block selector
363		this.mainBlockSelector = '.wpb-slider-horizontal-nav-main';
364
365		var $navMain = $main.find(self.mainBlockSelector);
366
367		// slides array
368		this.slides = $nav.find('a');
369
370		// slides count
371		this.slidesCount = self.slides.length;
372
373		// count of visible items
374		this.visible = 1;
375
376		// count of slide pages
377		this.slidePages = 1;
378
379		// is active vertical navigation
380		this.activeSlider = null;		
381
382		// slider args
383		this.args = {};
384
385		// slider height
386		this.sliderWidth = $navMain.width();
387
388		// item max height
389		this.itemMaxWidth = $navMain.attr("itemWidth");
390
391		// check true if slider is loaded first time
392		this.isLoaded = false;
393
394		/**
395		 * Construct object
396		 */
397		self.construct = function() {
398			if ( !self.isActive() )
399				return;
400
401			var layoutWidth = $main.find('.wpb-slider-horizontal-nav-main').width();
402                       
403			var layoutHeight = $main.find('.caroufredsel_wrapper').height();
404			var topMargin = layoutHeight-140;
405			var slideWidth = Math.round(layoutWidth/self.slidesCount);
406			var slideContentTop = topMargin-100;
407			slideWidth= slideWidth-4;
408			self.calcSliderArgs();
409			self.setSliderWidth();	
410			self.setSliderArgs();
411			self.args.height=slideWidth;
412			self.args.width=slideWidth;
413			Actions.loadSlider( $nav, self.args );
414			self.setSliderConfigArgs();
415
416			self.onResizeNav();
417			
418			// set first time loaded*/
419			this.isLoaded = true;
420		}
421		
422
423		self.setSliderWidth = function() {
424			this.sliderWidth =  $navMain.width();
425		}
426
427		/**	
428		 * On resize nav
429		 */
430		self.onResizeNav = function() {
431			$('body').on('wpbslWindowResize', function(){
432				var w = $main.width();
433
434				// update slides
435				this.slides = $nav.find('a');
436
437				//$navMain.width(w);
438
439				self.setSliderWidth();
440				self.calcSlidesVisible();
441
442				$nav.trigger('updateSizes');
443				
444				var ishorNavVisible=$('.wpb-slider-horizontal-nav-main').is(':visible');
445				$('.wpb-slider').children(".with-thumbnail").each(function(){
446					if(!ishorNavVisible){
447					  $(this).removeClass('with-thumb-height');
448					  $(this).addClass('without-thumb-height');
449					  $(this).find("img").addClass('wp-post-image-without-thumb');
450					  
451					  //WD-403
452					  if ($(this).find(".slide-content").html()) {
453					 	  if ($(this).find(".entry-title").html() || $(this).find(".entry-excerpt").html()) {
454					  	  	  $(this).find(".slide-content").addClass('slide-content-block'); //common class into wpb-slider-default.css file.
455					 	  }
456
457						  //for layout 4 - horizontal nav class
458						  //$(this).find(".slide-content").addClass('wp-slide-content-without-thumb-block');
459						  //$(this).find(".entry-excerpt").addClass('wp-slide-content-without-thumb-block'); //no need. just check with main span slide-content.
460					  }
461					  /*else { //no need to do none.
462					  	    //$(this).find(".slide-content").addClass('slide-content-none');
463					  	    
464					  	    //$(this).find(".slide-content").addClass('wp-slide-content-without-thumb-none');
465					  }*/
466					  
467					  //same as into self.ItemAlign() method.
468					  //var imght = $(this).find("img").attr("height");
469					  // $(this).find("img").css("height", imght+"px !important");
470					}else{
471					  $(this).removeClass('without-thumb-height');
472					  $(this).addClass('with-thumb-height');
473					  $(this).find("img").removeClass('wp-post-image-without-thumb');
474					  
475					  //same as into self.ItemAlign() method.
476					  //var imght = $(this).find("img").attr("height");
477					  // $(this).find("img").css("height", imght+"px !important");
478					}
479				});
480				
481				$('.slider-nav').each(function(){
482					if(!ishorNavVisible){
483					  $(this).removeClass('with-thumb-height-nav');
484					  $(this).addClass('without-thumb-height-nav');
485					}else{
486					  $(this).removeClass('without-thumb-height-nav');
487					  $(this).addClass('with-thumb-height-nav');
488					}
489				});
490	
491			});
492		}
493
494		/**
495		 * Set slider config args to use this on slider actions
496		 */
497		self.setSliderConfigArgs = function() {
498			this.slidePages  = self.getSlidePages();
499		}
500
501		/**
502		 * Get count slides pages
503		 */
504		self.getSlidePages = function() {
505			return Math.ceil( self.slidesCount / self.visible );
506		}
507
508		/**
509		 * Check is active vertiacal navigation
510		 */
511		self.isActive = function() {
512			if ( null === self.activeSlider ) 
513				self.activeSlider = ( 0 == $nav.length ) ? false : true;
514
515			return self.activeSlider;
516		}
517
518		/**
519		 * Slides args
520		 */
521		self.setSliderArgs = function() {
522			var prevNext = Actions.getPrevNext( $main, self.mainBlockSelector );
523                        for(var x in wpbSliderArgs){
524                            var currSliderId = x;
525                            slideStyle = wpbSliderArgs[x]['thumb_slide_style'];
526                            break;
527                        }
528                        
529                        
530			var args = {
531				responsive: true,
532				circular  : false,
533				infinite  : false,
534				direction : "left",
535				items: {
536					visible: self.visible
537				},
538				/*height: '100%',*/
539				width: $navMain.attr("itemWidth"),
540				/*height: $navMain.attr("itemHeight"),*/
541				auto: false,
542                                scroll : {
543                                    items            : 1,
544                                    duration        : 1000
545                                },
546				swipe: {
547					onTouch: true,
548					onMouse: true
549				},
550				prev: prevNext.prev,
551				next: prevNext.next,
552				pagination : false,
553				onCreate: function(data) {
554					var first = data.items.prevObject[0];
555					Actions.bulletActions( $(first) );
556				}
557			}
558                        //
559                        // check if slide style is fade then use fade style.
560                        //
561                        if(slideStyle == "fade"){
562                            args["scroll"] = {
563                                    items            : 1,
564                                    fx          : "fade",
565                                    duration        : 1000
566                                };
567                        }// end if.
568
569			this.args = args;
570		}
571
572		/**
573		 * Calc nav-slider args
574		 */
575		self.calcSliderArgs = function() {
576			//self.calcItemMaxWidth();
577			self.calcSlidesVisible();
578			self.calcSlidesWidth();
579			self.ItemAlign();
580		}
581
582		/**
583		 * Calc slide-item max height
584		 */
585		self.calcItemMaxWidth = function() {			
586			var maxWidth = 0;
587
588			self.slides.each(function(){
589				var w = $(this).width();
590				if ( w > maxWidth ) {
591					maxWidth = w;
592				};
593			});
594
595			this.itemMaxWidth = maxWidth;
596		}
597		
598		self.ItemAlign = function() {
599			var layoutWidth = $main.find('.wpb-slider-horizontal-nav-main').width();
600			var layoutHeight = $main.find('.caroufredsel_wrapper').height();
601			var topMargin = layoutHeight-$($navMain).height();
602			var slideWidth = Math.round(layoutWidth/self.slidesCount);
603			var slideContentTop = topMargin-100;
604			slideWidth= slideWidth-1;
605	        //$($nav).width(layoutWidth);
606	        this.sliderWidth =layoutWidth;
607	       // $($nav).height(140);
608	        this.sliderWidth = layoutWidth;
609	       //$main.find('.caroufredsel_wrapper').width(layoutWidth);
610	        //$($navMain).width(layoutWidth);
611	       // $($navMain).height(140);
612			//$($navMain).css("z-index",300);
613			//$($navMain).css("top",topMargin);
614			//$main.find('.slide-content').css("top",slideContentTop);
615			//$main.find('.wpb-slider-block').width(layoutWidth);
616			var ishorNavVisible=$('.wpb-slider-horizontal-nav-main').is(':visible');
617			$('.wpb-slider').children(".with-thumbnail").each(function(){
618				
619					if(!ishorNavVisible){
620					  $(this).removeClass('with-thumb-height');
621					  $(this).addClass('without-thumb-height');
622					  $(this).find("img").addClass('wp-post-image-without-thumb'); 
623					  //console.log($(this).find("img").attr("height"));
624					  
625					   var imght = $(this).find("img").attr("height"); //looks like they forgot to get value of variable imght, same as into else condition. so, just added.
626					   $(this).find("img").css("height", imght+"px !important");
627					   
628					   //WD-403
629					   if ($(this).find(".slide-content").html()) {
630					 	  if ($(this).find(".entry-title").html() || $(this).find(".entry-excerpt").html()) {
631					  	  	  $(this).find(".slide-content").addClass('slide-content-block');
632					 	  }
633					  }
634					 
635					}else{
636					  $(this).removeClass('without-thumb-height');
637					  $(this).addClass('with-thumb-height');
638					  $(this).find("img").removeClass('wp-post-image-without-thumb');
639					  
640					  var imght = $(this).find("img").attr("height");
641					  $(this).find("img").css("height", imght+"px !important");
642					  
643					  //create one new div and append image inside that div.
644					  /*var iDiv = document.createElement('div');
645						iDiv.className = 'img-div';
646						$(this).find("img").parent().append(iDiv);
647
648						$(this).find(".img-div").append($(this).find("img"));*/
649					}
650				});
651				
652				
653			$('.slider-nav').each(function(){
654				if(!ishorNavVisible){
655					  $(this).removeClass('with-thumb-height-nav');
656					  $(this).addClass('without-thumb-height-nav');
657					}else{
658					  $(this).removeClass('without-thumb-height-nav');
659					  $(this).addClass('with-thumb-height-nav');
660					}
661			});
662			$('.horz-nav').click(function(e){
663				e.preventDefault();
664				var curPage = self.getCurrentPage();
665				if($(this).attr('class')=='prev horz-nav'){
666					
667					if(curPage==0)
668						var page = self.slidesCount;
669                    else
670                        var page = curPage-1;
671
672					
673				}else if($(this).attr('class')=='next horz-nav'){
674                   if(curPage==self.slidesCount)
675						var page = 0;
676                    else
677                        var page = curPage+1;
678				}
679
680				if(page==0 || page==(self.slidesCount-1)){
681				$nav.trigger("slideToPage", [page, {
682	              duration    : 0
683	            }]);
684				}else{
685				 $nav.trigger( 'slideToPage', page );
686				}
687
688			});
689
690			//self.slides.each(function(){
691				/*$(this).css("float","left");
692				$(this).width(slideWidth);
693				
694				var span = $(this).find('span');
695				
696				$(span).height($($navMain).height());*/
697				
698				//var img = $(this).find('img');
699				//$(img).css("padding",0);
700				//$(img).css("margin",0);
701				//$(img).width('97%');
702				//$(img).height('97%');
703				//console.log(img);
704				
705				
706				//$(this).height(140);
707				//$(this).width('auto');
708			//});
709			
710			/*$('.wpbsl-slide-link').each(function(){
711				if(!ishorNavVisible){
712					  $(this).removeClass('with-thumb-height');
713					  $(this).addClass('without-thumb-height');
714					}else{
715					  $(this).removeClass('without-thumb-height');
716					  $(this).addClass('with-thumb-height');
717					}
718			});*/
719		}
720
721		/**
722		 * Calc and set slides height
723		 */
724		self.calcSlidesWidth = function() {
725			//var itemWidth = self.sliderWidth / self.visible;
726			var itemWidth = $navMain.attr("itemWidth");
727			self.slides.width(itemWidth);
728		}
729
730		/**
731		 * Calc visible count and set single slide height
732		 */
733		self.calcSlidesVisible = function() {
734			var visible = 1;
735
736			visible = Math.floor( self.sliderWidth / self.itemMaxWidth );
737
738			if ( visible > self.slidesCount ) 
739				visible = self.slidesCount;
740
741			if ( visible == self.visible ) 
742				return;
743
744			this.visible = visible;			
745			self.reInitSlider(visible);
746		}
747
748		/**	
749		 * Reinit slider
750		 */
751		self.reInitSlider = function( visible ) {
752			if ( false === self.isLoaded ) 
753				return;
754
755			var args = {
756				items: {
757					visible: visible
758				}
759			}
760
761			$nav.trigger('configuration', args, true);	
762		}
763
764		/**
765		 * Calc slide page by curren position
766		 */
767		self.calcSlidePage = function( currentPos ) {
768			//console.log(currentPos+"--------------"+self.visible);
769			return Math.ceil( ++currentPos / self.visible ) - 1;
770		}
771
772		/**
773		 * Get curren slider page on slider confing
774		 */
775		self.getCurrentPage = function() {
776			var page = 0;
777
778			$nav.trigger('currentPage', function(p){
779				page = p;
780			});
781
782			return page;
783		}
784
785		/**
786		 * May be slide page
787		 */
788		self.mbDoSlide = function( currentPos ) {
789                        self.slideTo( currentPos );
790                        Actions.bulletActions( self.slides.eq( currentPos ) );
791                        return;
792			var calcSlidePage = self.calcSlidePage( currentPos ),
793				currentPage   = self.getCurrentPage();
794
795				//console.log(self.slides.eq( currentPos +"--"+currentPage));	
796			Actions.bulletActions( self.slides.eq( currentPos ) );
797
798			if ( calcSlidePage == currentPage ) 
799				return;
800
801			self.slideTo( calcSlidePage );
802		}
803
804		/**
805		 * Slide to
806		 */
807		self.slideTo = function( page ) {
808			if(page==0 || page==1 || page==(self.slidesCount-1)){
809				$nav.trigger("slideToPage", [page, {
810	              duration    : 0
811	            }]);
812			}else{
813			 $nav.trigger( 'slideToPage', page );
814			}
815		}
816	}
817	/**
818	 * Main slider class
819	======================================================*/	 
820
821	var MainSlider = function( $main ) {
822		var self = this;
823
824		// vartical nav object
825		var verticalNav = {};
826		var horizontalNav = {};
827
828		//var contest = $main.context;
829		var className = jQuery($main).attr("class");
830
831		var isHorizNav = false;
832		if(className.indexOf('wpbsl-layout-default-4')>0){
833			isHorizNav = true;
834		}
835		// var $main = $('.js-wpb-slider-main-container');
836		var $slider      = $main.find('.wpb-slider');
837		var $sliderBlock = $main.find('.wpb-slider-block');
838
839		// slides array
840		this.slides = $slider.find('.wpbsl-slide');
841
842		// Slider ID
843		this.ID = 0;
844
845		// Slider args
846		this.args = {};
847
848		// bullets main block selector
849		this.bulletsBlockSelector = '.wpb-slider-bullets';
850
851		// prev-next meain block selector
852		this.prevNextBlockSelector = '.wpb-slider-block';
853
854		// is load slider
855		this.activeSlider = null;
856
857		this.BlockSizer = new BlockSizer( $sliderBlock );
858
859		/**
860		 * Construct object
861		 */
862		self.construct = function() {
863			self.setID();
864
865			if ( !self.isLoad() ) 
866				return;			
867
868			self.setArgs();
869			self.initBlockSizer();
870
871			Actions.loadSlider( $slider, self.args );
872			self.bullets();
873			self.onResizeSlider();
874
875			self.setSliderSize('onLoad');
876
877			self.setBinds();
878		}
879
880		/**	
881		 * Actions onLoad Window
882		 */
883		self.actionsOnLoad = function() {
884			self.setSliderSize('onLoad');
885			self.setImagesSize();
886			self.doEmbed();
887		}
888
889		/**
890		 * init BlockSizer object
891		 */
892		self.initBlockSizer = function() {
893			var w = self.args.meta.width;
894			var h = self.args.meta.height;
895
896			self.BlockSizer.init(w,h);
897		}
898
899		/**
900		 * On resize window set slider size and set slide image size
901		 */
902		self.onResizeSlider = function() {
903			$('body').on('wpbslWindowResize', function() {
904				if ( !self.isSliderResize() ) 
905					return;
906
907				self.setSliderSize( 'onResize' );
908
909				$slider.trigger('currentVisible', function(visible){
910					self.setImagesSize();
911				});
912			});
913		}
914
915		/**
916		 * Check is slider container is resize or no
917		 */
918		self.isSliderResize = function() {
919			return self.BlockSizer.isResize();
920		}
921
922		/**
923		 * set slider size
924		 */
925		self.setSliderSize = function( key ) {
926			switch( key ) {
927				case 'onResize': 
928					self.BlockSizer.setSizeOnResize();
929				break;
930				case 'onLoad': 
931					self.BlockSizer.setSize();
932			}
933
934			$slider.trigger('updateSizes');
935		}
936
937		/**
938		 * Check is load slider
939		 */
940		self.isLoad = function() {
941			if ( null !== self.activeSlider )
942				self.activeSlider;
943
944			self.activeSlider = false;
945
946			// is set arg 'wpbSliderArgs' generated by php
947			if ( undefined === wpbSliderArgs )
948				return self.activeSlider;
949
950			// is set slider args
951			if ( undefined === wpbSliderArgs[self.ID] )
952				return self.activeSlider;
953
954			// is slider in page
955			if ( 0 == $slider.length ) 
956				return self.activeSlider;
957
958			self.activeSlider = true;
959
960			return self.activeSlider;
961		}
962
963		/**
964		 * Set slider ID
965		 */
966		self.setID = function() {
967			this.ID = Actions.getID( $main );
968		}
969
970		/**
971		 * Set slider args
972		 */
973		self.setArgs = function() {
974			var args = wpbSliderArgs[self.ID];
975
976			args.onCreate = function(data) {
977				var $slide = $(data.items[0]);
978
979				data.items.prevObject.css('display','block');
980			}
981
982			if ( args.prev_next ) {
983				var prevNext = Actions.getPrevNext( $main, self.prevNextBlockSelector );
984
985				args.prev = prevNext.prev;
986				args.next = prevNext.next;
987			};
988
989			args.scroll.onBefore = function(data) {
990				var $newSlide = $(data.items.visible[0]),
991				$oldSlide = $(data.items.old[0]);
992
993				if(isHorizNav)
994				  self.horizontalNavItegration( $(this) );
995				else	
996				 self.verticalNavItegration( $(this) );
997
998				$oldSlide.trigger('wpbsl-stop-video');
999			}
1000
1001			self.args = args;
1002		}
1003
1004		/**
1005		 * Set images size
1006		 */
1007		self.setImagesSize = function() {
1008			var sliderSize = self.BlockSizer.getSize();
1009
1010			var SetImageSize = new ImageSizer( self.slides, sliderSize );
1011
1012			SetImageSize.setSizes();
1013		}
1014		
1015		/**
1016		 * Set vertical nav
1017		 */
1018		self.setVerticalNav = function( nav ) {
1019			verticalNav = nav;
1020		}
1021		
1022		/**
1023		 * Set horizontal nav
1024		 */
1025		self.setHorizontalNav = function( nav ) {
1026			horizontalNav = nav;
1027		}
1028
1029		/**
1030		 * Vertical navigation integration
1031		 */
1032		self.verticalNavItegration = function( $this ) {
1033			if ( undefined === verticalNav ) 
1034				return;
1035
1036			if ( undefined == verticalNav || 'undefined' == verticalNav ) 
1037				return;
1038
1039			//alert('here 1.....');
1040
1041			try {
1042			if ( !verticalNav.isActive() ) {
1043				return;
1044			}
1045			}
1046			catch(err){
1047				return;
1048			}
1049
1050			//alert('here 2.....');
1051
1052			var position;
1053
1054			$this.trigger("currentPosition", function( pos ) {
1055				position = pos;
1056			});
1057			verticalNav.mbDoSlide( position );
1058		}
1059        /**
1060		 * horizontal navigation integration
1061		 */
1062		self.horizontalNavItegration = function( $this ) {
1063			if ( undefined === horizontalNav ) 
1064				return;
1065
1066			if ( undefined == horizontalNav || 'undefined' == horizontalNav ) 
1067				return;
1068			
1069			try {
1070			if ( !horizontalNav.isActive() ) {
1071				return;
1072			}
1073			}
1074			catch(err){
1075				return;
1076			}
1077
1078			var position;
1079
1080			$this.trigger("currentPosition", function( pos ) {
1081				position = pos;
1082			});
1083			
1084			horizontalNav.mbDoSlide( position );
1085		}
1086
1087		/**
1088		 * Load bullets
1089		 */
1090		self.bullets = function() {
1091			var bullets = Actions.getBullets( $main, self.bulletsBlockSelector );
1092
1093			if ( false !== bullets ) {
1094				Actions.doBullets( $slider, bullets );
1095			};
1096		}
1097
1098		self.doEmbed = function( $currentSlide ) {
1099			// $('body').on('onYouTubeIframeAPIReady', function(){
1100				self.slides.each(function(){
1101					var DoEmbedSlide = new EmbedSlide();
1102
1103					DoEmbedSlide.init( $(this), $slider, $main );
1104				});
1105			// });
1106		}
1107
1108		self.setBinds = function() {
1109			$main.on('wpbsl-show-prev-next', function(){
1110				$(this).addClass('show-prev-next');
1111			});
1112
1113			$main.on('wpbsl-hide-prev-next', function(){
1114				$(this).removeClass('show-prev-next');
1115			});
1116
1117			 $sliderBlock.on({
1118			 	//'wpbsl-slider-play': function(){
1119			 	//	$slider.trigger('play');
1120			 	//},
1121			 	'wpbsl-slider-pause': function(){
1122			 		$slider.trigger('pause');
1123			 	}
1124			 });
1125		}
1126	}
1127
1128	/**
1129	 * Actions class
1130	======================================================*/
1131	var Actions = {
1132		// get navigation element
1133		getNav: function( $mainBlock, navClass ) {
1134			var $nav = $mainBlock.find( navClass );
1135
1136			if ( $nav.length > 0 )
1137				return $nav;
1138
1139			return false;
1140		},
1141		// get bullets $ object
1142		getBullets: function( $mainBlock, navBlock ) {
1143			return this.getNav( $mainBlock, navBlock );
1144		},
1145		// get prev-next $ object
1146		getPrevNext: function( $mainBlock, navBlock ) {
1147			var $prevNext = this.getNav( $mainBlock, navBlock );
1148
1149			var outNav = {};
1150			var prev, next;
1151
1152			if ( false !== $prevNext ) {
1153				prev = {
1154					button: $prevNext.find('.prev'),
1155					key: 'left'
1156				}
1157				next = {
1158					button: $prevNext.find('.next'),
1159					key: 'right'
1160				}
1161			} else {
1162				prev = next = false;
1163			}
1164
1165			outNav = {
1166				prev : prev,
1167				next : next
1168			}
1169
1170			return outNav;
1171		},
1172		// do bullets actions
1173		bulletActions: function( $bullet ) {
1174			$bullet.siblings().removeClass('active');
1175			$bullet.addClass('active');
1176		},
1177		// do bullets 
1178		doBullets: function( $slider, $bullets ) {
1179			$bullets.on( 'click', 'a', function(e) {
1180				e.preventDefault();
1181				
1182				var key = +$(this).data('item');
1183
1184				$slider.trigger( 'slideTo', key );
1185			});
1186		},
1187		// get id
1188		getID: function( $block ) {
1189			var idStr = $block.attr('id')
1190			return idStr.replace('wpb-slider-', '');
1191		},
1192		// load slider
1193		loadSlider : function( $slider, args ) {
1194			$slider.map(function(){
1195				$slider.carouFredSel( args/*, {debug:true}*/ );
1196			});
1197		}
1198	}
1199
1200	/**
1201	 * Window Resizer class
1202	======================================================*/
1203	var WindowResiser = function() {
1204		var self = this;
1205
1206		this.oldWidth = 0;
1207
1208		// set current window width
1209		self.setWindowWidth = function() {
1210			this.oldWidth = $(window).width();
1211		}
1212
1213		// check is resize window
1214		self.isResize = function() {
1215			return ( self.oldWidth != $(window).width() );
1216		}
1217
1218		// Trigger event on resize window
1219		self.onResizeSlider = function() {
1220			$(window).resize(function(){
1221				if ( !self.isResize() )
1222					return;
1223
1224				self.setWindowWidth();
1225
1226				$('body').trigger('wpbslWindowResize');	
1227			
1228			});
1229		}
1230	}
1231
1232	/**
1233	 * Block sizer class
1234	======================================================*/
1235
1236	var BlockSizer = function( $block ) {
1237		var self = this;
1238
1239		this.$block = $block;
1240
1241		this.w = 0;
1242		this.h = 0;
1243
1244		this.ratioWH = self.w / self.h;
1245
1246		// init class
1247		self.init = function( width, height ) {
1248			self._setWidth(width);
1249			self._setHeight(height);
1250			self._setRationWH();
1251		}
1252
1253		// set ration width-height
1254		self._setRationWH = function() {
1255			this.ratioWH = self.w / self.h;
1256		}
1257
1258		// set block width
1259		self._setWidth = function( w ) {
1260			if ( !self._isset(w) ) 
1261				w = self._getWidth();
1262
1263			this.w = w;
1264		}
1265
1266		// get block width
1267		self._getWidth = function() {
1268			return self.$block.width();
1269		}
1270
1271		// set block height
1272		self._setHeight = function(h) {
1273			if ( !self._isset(h) ) 
1274				h = self._getHeight();
1275
1276			this.h = h;
1277		}		
1278
1279		// get block height
1280		self._getHeight = function() {
1281			return self.$block.height();
1282		}
1283
1284		// check isset arg on no
1285		self._isset = function( arg ) {
1286			return !( undefined === arg );
1287		}
1288
1289		// check is resize block (!not window)
1290		self.isResize = function( w ) {
1291			if ( !self._isset(w) ) 
1292				w = self._getWidth();
1293
1294			return !( w == self.w );
1295		}
1296
1297		// get block size
1298		self.getSize = function() {
1299			return {
1300				width : self._getWidth(),
1301				height: self._getHeight()
1302			}
1303		}
1304
1305		// set size orResize window
1306		self.setSizeOnResize = function() {
1307			var w = self._getWidth();
1308
1309			if ( !self.isResize(w) ) 
1310				return;
1311
1312			self.setSize( w );
1313		}
1314
1315		// set block size
1316		self.setSize = function( w ) {
1317			if ( !self._isset(w) ) ;
1318				w = self._getWidth();
1319
1320			self._setWidth( w );
1321
1322			var h = w / self.ratioWH;
1323
1324			self.$block.height(h);
1325		}
1326	}
1327
1328	/**
1329	 * Image sizer class
1330	======================================================*/
1331
1332	var ImageSizer = function( slides, sliderSize ) {
1333		var self = this;
1334
1335		this.slides     = slides;
1336		this.sliderSize = sliderSize;
1337
1338		/**
1339		 * Set all images size
1340		 */
1341		self.setSizes = function() {
1342			self.slides.each(function(){
1343				self.setImageSize( $(this) );
1344			});
1345		}
1346
1347		/**	
1348		 * Set single image size
1349		 */
1350		self.setImageSize = function( $slide ) {
1351			// clear attr 'style' for responsive
1352			var $img = $slide.find('.wp-post-image');
1353
1354			if ( 0 == $img.length ) 
1355				return;
1356
1357			var loop = 0;
1358
1359			$img.attr('style', '');
1360
1361			var css = self.calcImageSize( $img, loop );
1362
1363			if(!isHorizontalNav){
1364			 $img.css(css);
1365			}
1366		}
1367
1368		/**
1369		 * Calculate image size
1370		 */
1371		self.calcImageSize = function( $img, loop ) {
1372			var width  = self.sliderSize.width,
1373				height = self.sliderSize.height,
1374				imgH   = $img.height(),
1375				imgW   = $img.width();
1376
1377			var css = {};
1378
1379			loop++;
1380			//alert(width + ' -- ' + height + ' : ' + imgW + ' -- ' + imgH);
1381			// difference between image height and slider height
1382			var diffH = imgH - height;
1383
1384			// difference between image width and slider width
1385			var diffW = imgW - width;
1386
1387			//alert(diffW + ' -- ' + diffH);
1388
1389			// if image size smaller than slider size
1390			if ( diffH < 0 && diffW < 0 && 1 == loop ) {
1391				var dH = height / imgH;
1392				var dW = width / imgW;
1393
1394				// if number of increase is smaller by height
1395				if ( dH < dW ) {
1396					$img.height(height);
1397				} 
1398				// if number of increase is smaller by width
1399				else {
1400					$img.width(width);
1401				}
1402				
1403				return self.calcImageSize( $img, loop );
1404			};
1405
1406			// set image_width = slider_width and 
1407			// set negative margin for image_height
1408			if ( diffW < 0 ) {
1409				var pr     = width / imgW;
1410				var newH   = imgH * pr;
1411				var margin = ( height - newH ) / 2;
1412
1413				css = {
1414					maxWidth : '100%',
1415					maxHeight: '1000%',
1416					height   : newH,
1417					width    : width,
1418					margin   : margin + 'px 0'
1419				}
1420			} else 
1421
1422			// set image_height = slider_height and 
1423			// set negative margin for image_width
1424			if ( diffH < 0 ) {
1425				var pr     = height / imgH;
1426				var newW   = imgW * pr;
1427				var margin = ( width - newW ) / 2;
1428
1429				css = {
1430					maxWidth : '1000%',
1431					maxHeight: '100%',
1432					height   : height,
1433					width    : newW,
1434					margin   : '0 '+ margin + 'px'
1435				}
1436			};
1437
1438			return css;
1439		}
1440	}
1441
1442	var EmbedSlide = function() {
1443		var self = this;
1444
1445		this.toggleClass = 'show-embed';
1446
1447		this.player = {};
1448
1449		this.isFirstLoadedVideo = false;
1450
1451		self.init = function( $currentSlide, $slider, $mainBlock ) {
1452			
1453			this.$slide     = $currentSlide;
1454
1455			if ( !self.hasEmbed() ) 
1456				return;
1457
1458			self.loadPlayer();
1459
1460			this.$slider    = $slider;
1461			this.$mainBlock = $mainBlock;
1462                        
1463                        //
1464                        // check if this is jwplatemform player.
1465                        // condition 1 :find <script>
1465 tag in slide - get 'src' attribute - look for content.jwplatform.com 
1466                        // if above condition satisfied that means we have jwplayer embed with js that means call PlayPauseJWPlayer with play action.
1467                        //
1468                        var dataAttributeOfObjectTag = $currentSlide.find('script').attr("src");
1469                        if(dataAttributeOfObjectTag != undefined){
1470                                var ifThisIsKalturaCondition1 = dataAttributeOfObjectTag.search(/content\.jwplatform\.com/ig);
1471                                if(ifThisIsKalturaCondition1 > 0){
1472                                        this.$slide.isJWPlayer = true;
1473                                        // removed below if else condition from WD-632 
1474                                        //if($currentSlide.find('object').attr("id") == undefined){
1475                                         	var playerIdWillBe = $currentSlide.find(".embed-content").find("div").attr("id");
1476                                            //alert("1...."+$currentSlide.html());
1477                                        //}else{
1478                                         //  var playerIdWillBe =  $currentSlide.find('object').attr("id");
1479                                          // alert("2...."+$currentSlide.html());
1480                                        //}
1481                                        //alert(playerIdWillBe);
1482                                        this.$slide.jwPlayerId = playerIdWillBe;
1483                                }else{
1484                                        this.$slide.isJWPlayer = false;
1485                                }
1486                        }// end if - check if this is jqplayer
1487			this.$closeBtn  = self.$slide.find('.embed-close-btn');
1488			this.$slideLink = self.$slide.find('.wpbsl-slide-link');
1489			self.setEvents();
1490			self.mbPlayVideo();
1491			self.mbStopVideo();
1492		}
1493
1494		/**
1495		 * Has slide embed or no
1496		 */
1497		self.hasEmbed = function() {
1498			return self.$slide.hasClass( 'has-slide-embed' );
1499		}
1500
1501		/**
1502		 * Set events on slide
1503		 */
1504		self.setEvents = function() {
1505			self.$slide.on('wpbsl-play-video', function(){
1506				self.playVideo();
1507			});
1508
1509			self.$slide.on('wpbsl-stop-video', function(){
1510				wait(1000);
1511				jQuery(".jwcontrols").css({
1512						"z-index": "0"});
1513				self.stopVideo();
1514			});
1515		}
1516
1517		/**
1518		 * Maybe play video
1519		 */
1520		self.mbPlayVideo = function() {
1521			self.$slideLink.on('click', function(e){
1522				e.preventDefault();
1523				// - additional code of david added - 
1524				if (jQuery(".embed-close-btn").css("display") === "none") {
1525		            jQuery(".jwcontrols").css({
1526		                "z-index": "100"
1527		            });
1528        		}// end if -
1529				self.playVideo();
1530			});
1531		}
1532
1533		/**
1534		 * Maybe stop video
1535		 */
1536		self.mbStopVideo = function() {
1537			self.$closeBtn.on('click', function(e){
1538				if (jQuery(".embed-close-btn").css("display") === "block") {
1539					jQuery(".jwcontrols").css({
1540						"z-index": "0"
1541					});
1542				}// end if.
1543				
1544				e.preventDefault();
1545				self.stopVideo();
1546			});
1547		}
1548
1549		/**
1550		 * Play video - hide image and load video
1551		 */
1552		self.playVideo = function() {
1553			self.embedToggler('enable');
1554
1555			self.navPrevNextToggler('hide');
1556
1557			self.pauseSlider();
1558                        
1559            //
1560            // hide title and content
1561            //
1562            self.$slide.find(".slide-content").css("display","none");
1563            
1564            //
1565            // check here if this slide is of JWPlayer then just play it directly. just after pause of slider.
1566            // and return from it directly. [WD-370]
1567            //
1568            if(self.$slide.isJWPlayer){
1569            	var isIE11 = !!navigator.userAgent.match(/Trident.*rv\:11\./);
1570            	var ua = window.navigator.userAgent;
1571				var msie = ua.indexOf("MSIE ");
1572            	//
1573            	// if ie 11
1574            	//
1575            	if(isIE11 || msie > 0){
1576            		var currentHtml = self.$slide.html();
1577            		self.$slide.html("");
1578            		self.$slide.html(currentHtml);
1579            		self.init( this.$slide, this.$slider, this.$mainBlock );
1580            		setTimeout(function(){jwplayer(self.$slide.jwPlayerId).play(true); }, 2000);
1581            	}else{
1582            		jwplayer(self.$slide.jwPlayerId).play(true);	
1583            	}
1584                return;
1585            }// end if check if this is jwplayer then play it.
1586            self.loadPlayer();
1587		}
1588
1589		/** 
1590		 * Load player
1591		 */
1592		self.loadPlayer = function() {
1593			if ( !self.$slide.hasClass( 'embed-type-youtube' ) ) 
1594				return;
1595			if ( self.isFirstLoadedVideo ) {
1596				self.playPlayer();
1597				return;
1598			}
1599
1600			this.isFirstLoadedVideo = true;
1601
1602			this.player = new YoutubePlayer();
1603			self.player.init( self.$slide );
1604		}
1605
1606		self.stopPlayer = function() {
1607			//if ( !self.isFirstLoadedVideo ) 
1608			//	return;
1609
1610			if ( 'undefined' == typeof self.player.stopVideo ) 
1611				return;
1612                            
1613			self.player.stopVideo();
1614		}
1615
1616		self.playPlayer = function() {
1617			self.player.playVideo();
1618		}
1619
1620		/**
1621		 * Stop video - show image and stop video
1622		 */
1623		self.stopVideo = function() {
1624			self.embedToggler('disable');
1625			self.navPrevNextToggler('show');
1626            self.$slide.find(".slide-content").css("display","");
1627            //
1628            // check here if this slide is of JWPlayer then just puase it directly. just before play of slider.
1629            // and return from it directly. [WD-370]
1630            //
1631            if(self.$slide.isJWPlayer){
1632                jwplayer(self.$slide.jwPlayerId).pause(true);
1633                self.playSlider();
1634                return;
1635            }// end if check if this is jwplayer then play it.
1636			self.playSlider();
1637			self.stopPlayer();
1638		}
1639
1640		/**	
1641		 * Pause Slider
1642		 */
1643		self.pauseSlider = function() {
1644                    //self.$slider.trigger('pause');
1645                    
1646                    //self.$slider.trigger( 'slideTo', [i, 0, true] );
1647                    //self.$slider.trigger('slideTo', $(this).index()); //no need right now.
1648                    
1649		            setTimeout(function() {
1650		                self.$slider.trigger('pause', true);
1651		                //self.$slider.trigger('pause');
1652		                
1653		                //self.$slider.trigger('play',true);
1654		                //self.$slider.trigger('stop');
1655		                
1656		            }, 1000);
1657		            return false;
1658		}
1659
1660		/**
1661		 * play Slider
1662		 */
1663		self.playSlider = function() {
1664			self.$slider.trigger('play');
1665		}
1666
1667		/**
1668		 * Show/hide prev-next nav
1669		 */
1670		self.navPrevNextToggler = function( key ) {
1671			self.$mainBlock.trigger('wpbsl-'+ key +'-prev-next');
1672		}
1673
1674		/**
1675		 * Enable/disable embed
1676		 */
1677		self.embedToggler = function( key ) {
1678			switch( key ) {
1679				case 'disable':
1680					self.$slide.removeClass(self.toggleClass);
1681					break;
1682				case 'enable':
1683					self.$slide.addClass(self.toggleClass);
1684					break;
1685			}
1686		}
1687	}
1688
1689
1690	var YoutubePlayer = function() {
1691		var self = this;
1692
1693		this.$slide;
1694
1695		this.videId = '';
1696
1697		this.playerId = 'youtube-{sliderId}-{slideId}';
1698
1699		this.player;
1700
1701		this.isFirstLoad = false;
1702
1703		self.init = function( $slide ) {
1704			this.$slide = $slide;
1705
1706			self.setPlayerArgs();
1707
1708			this.player = new YT.Player( self.playerId, self.getArgs() );
1709		}
1710
1711		self.setPlayerArgs = function() {
1712			var playerBlock = self.$slide.find('.youtube-player');
1713			
1714			this.playerId = playerBlock.attr('id');
1715			this.videId = playerBlock.data('videoId');
1716		}
1717
1718		self.getArgs = function() {
1719			return {
1720				height: '280',
1721				width: '500',
1722				videoId: self.videId,
1723				events: {
1724					'onReady': self.onPlayerReady,
1725					'onStateChange': self.onPlayerStateChange
1726				}
1727			}
1728		}
1729
1730		self.stopVideo = function() {
1731			if ( 'undefined' == typeof self.player.stopVideo ) 
1732				return;
1733
1734			self.player.stopVideo();
1735		}
1736
1737		self.playVideo = function() {
1738			if ( 'undefined' == typeof self.player.playVideo ) 
1739				return;
1740
1741			self.player.playVideo();
1742		}
1743
1744		/**
1745		 * Video status event
1746		 */
1747		self.onPlayerStateChange = function(event) {
1748			if ( 0 != event.data ) 
1749				return;
1750            
1751              if (jQuery(".embed-close-btn").css("display") === "block") { 
1752				jQuery(".jwcontrols").css({
1753						"z-index": "0"});
1754			  }	
1755
1756			  self.$slide.trigger('wpbsl-stop-video');
1757		}
1758
1759		/**	
1760		 * Player first time ready
1761		 */
1762		self.onPlayerReady = function(event) {
1763			setInterval( function() {
1764			  var state = self.player.getPlayerState();
1765			   self.onPlayerStateChange( {
1766			      data: state
1767			    });
1768			}, 3000);
1769
1770			if ( self.isFirstLoad ) 
1771				return;
1772
1773			// autoplay in iOS not working
1774			// see https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/AudioandVideoTagBasics/AudioandVideoTagBasics.html
1775			// find "...embedded media cannot be played automatically programatically in Safari on iOS - the user always initiates playback."
1776			if ( !is_iOSmobile() ) 
1777				event.target.playVideo();
1778
1779			self.isFirstLoad = true;
1780		}
1781	}
1782
1783	
1784	/**
1785	 * Load sliders
1786	======================================================*/
1787	var Sliders	= {}; // loaded sliders object
1788	var $mainSliders = $('.js-wpb-slider-main-container');
1789
1790	var DoReize = new WindowResiser();
1791	DoReize.onResizeSlider();
1792
1793	$mainSliders.map(function(){
1794		var $main = $(this);
1795
1796		//var contest = $main.context;
1797		var className = jQuery($main).attr("class");
1798		
1799		// load main slider
1800		var Slider = new MainSlider( $main );
1801		Slider.construct();
1802
1803		if(className.indexOf('wpbsl-layout-default-4')>0){
1804			var HorizNav = new HorizontalNav( $main );
1805			HorizNav.construct();
1806			Slider.setHorizontalNav( HorizNav );
1807			
1808			Sliders[Slider.ID] = {
1809			slider: Slider,
1810			nav: HorizNav
1811		};
1812		}else{
1813			// load vertical nav
1814		   var VertNav = new VerticalNav( $main );
1815		   VertNav.construct();
1816		   Slider.setVerticalNav( VertNav );
1817
1818		   Sliders[Slider.ID] = {
1819			slider: Slider,
1820			nav: VertNav
1821		   };
1822		}
1823	});
1824
1825	window.onload = function() {
1826		//alert('window.onload called.........');
1827		//WD-561 onload is taking time to load because of page is not loaded completly.
1828		//in case we have twitter, pinterest , facebook , instragam etc.. on page.
1829		if (callActionsOnLoad) {
1830			//alert('window.onload 2');
1831		}
1832		else {
1833			//alert('window.onload 1');
1834			$mainSliders.map(function(){
1835				var id = Actions.getID( $(this) );
1836				var Slider = Sliders[id].slider;
1837
1838				Slider.actionsOnLoad();
1839			});
1840			callActionsOnLoad = true;
1841		}
1842	}
1843
1844	//WD-561 -- new fun call to set time out.
1845	function callFunActionsOnLoad() {
1846		//alert('callFunActionsOnLoad fun called.');
1847		if (callActionsOnLoad) {
1848			//alert('callFunActionsOnLoad 2');
1849		}
1850		else {
1851			//alert('callFunActionsOnLoad 1');
1852			$mainSliders.map(function(){
1853				var id = Actions.getID( $(this) );
1854				var Slider = Sliders[id].slider;
1855
1856				Slider.actionsOnLoad();
1857			});
1858			callActionsOnLoad = true;
1859		}
1860	}
1861
1862	/**	
1863	 * Detect iOS
1864	 */
1865	function is_iOSmobile() {
1866		return navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ? true : false;
1867	}
1868	
1869	function isIE() {
1870	  var userAgent = navigator.userAgent;
1871	  return userAgent.indexOf("MSIE ") > -1 || userAgent.indexOf("Trident/") > -1;
1872	}
1873
1874	function wait(milliseconds){
1875     const date = Date.now();
1876  let currentDate = null;
1877  do {
1878    currentDate = Date.now();
1879  } while (currentDate - date < milliseconds);
1880}
1881
1882
1883$(".wpbsl-slide-link").swipe({
1884  tap: function(event, target) {
1885  	//
1886  	// check if this is embed slide then return from here.
1887  	//
1888  	if(this.find("span.play-icon").length > 0)
1889  		return;
1890  	
1891  	if(this.attr("target") != "_blank"){
1892		//console.log("wpbsl-slide-link is clicked1");
1893		//WPB-2714
1894		if (site_GlobalArr["sitePjax"] && site_GlobalArr["sitePjax"] != 'undefined') {
1895			if (site_GlobalArr["sitePjax"] == 'yes') {
1896				//dont need window.location.href for pjax sites.
1897				//2881
1898				if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
1899					try {
1900						var $ajaxLoader = $(".global-ajax-loader");
1901		      			$ajaxLoader.fadeIn();
1902
1903						$.pjax({url: this.attr("href") , container:'#pjax-wrapper'});
1904					//$.pjax.reload('#pjax-wrapper', {url: this.attr("href")});
1905					}catch(e){
1906						window.location.href = this.attr("href");
1907					}
1908				}
1909			}
1910			else {
1911				window.location.href = this.attr("href"); //as usual for normal sites for mobile device.
1912			}
1913		}
1914		else {
1915		window.location.href = this.attr("href"); //WPB-2666
1916		}
1917  	}else if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
1918 		window.open(this.attr("href"));
1919	}
1920  },
1921  click: function(event, target) {
1922  	// - additional code of david added - 
1923	if (jQuery(".embed-close-btn").css("display") === "none") {
1924        jQuery(".jwcontrols").css({
1925            "z-index": "100"
1926        });
1927	}// end if -	
1928  	//
1929  	// check if this is embed slide then return from here.
1930  	//
1931  	if(this.find("span.play-icon").length > 0)
1932  		return;
1933
1934  	//WD-561
1935  	event = event || window.event;
1936  	var mouseButtonClick = event.which;
1937  	if (mouseButtonClick) { //1 -- left, 2 -- middle, 3 -- right
1938  		if (mouseButtonClick == 3 || mouseButtonClick == '3') {
1939  			return;
1940  		}
1941  	}
1942  	
1943  	if(this.attr("target") != "_blank"){
1944		//console.log("wpbsl-slide-link is clicked2");
1945		//WPB-2714
1946  		if (site_GlobalArr["sitePjax"] && site_GlobalArr["sitePjax"] != 'undefined') {
1947			if (site_GlobalArr["sitePjax"] == 'yes') {
1948				//dont need window.location.href for pjax sites.
1949				
1950				//2881
1951				//alert(navigator.userAgent);
1952				if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
1953					try {
1954						var $ajaxLoader = $(".global-ajax-loader");
1955		      			$ajaxLoader.fadeIn();
1956
1957						$.pjax({url: this.attr("href") , container:'#pjax-wrapper'});
1958						//$.pjax.reload('#pjax-wrapper', {url: this.attr("href")});
1959					}catch(e){
1960						window.location.href = this.attr("href");
1961					}
1962				}
1963			}
1964			else {
1965				window.location.href = this.attr("href"); //as usual for normal sites for mobile device.
1966			}
1967		}
1968		else {
1969		window.location.href = this.attr("href"); //WPB-2666
1970		}
1971  	}else if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
1972		window.open(this.attr("href"));
1973	}
1974  }
1975   
1976  }); //End of swipe.....
1977  
1978    //
1979    // checking if things works here
1980    //
1981    $(".entry-excerpt-thumb").each(function(){
1982        var currentPostId = $(this).attr("post_id");
1983        var currentPostExcerpt = $("#post-"+currentPostId).find(".slide-content").find(".entry-excerpt").html();
1984        currentPostExcerpt = currentPostExcerpt.replace(/read more.../ig,"");
1985        var regex = /(<([^>]+)>)/ig
1986        currentPostExcerpt = currentPostExcerpt.replace(regex,"");
1987        $(this).html(currentPostExcerpt);
1988    })
1989    
1990    //
1991    // check if after loading everything it fixes issues.
1992    //
1993    if(!isHorizontalNav){
1994        var totalNavigationHeight = $(".wpb-slider-vertical-nav-main").height();
1995        var singleThumbHeight = $(".wpb-slider-vertical-nav-main").attr("itemheight");
1996        //alert(totalNavigationHeight + ' -- ' + singleThumbHeight); //396/100 = 3.96
1997        var totalItemVisible = Math.floor( totalNavigationHeight / singleThumbHeight ); //3 -- as usual floor
1998        //var totalItemVisible = Math.ceil( totalNavigationHeight / singleThumbHeight ); //4 -- WD-561, tried with ceil
1999        //alert(totalItemVisible);
2000
2001        //WD-561
2002        var minusValue = 25; //default as ususl previous value.
2003
2004        if (totalItemVisible <= 3) {
2005        	totalItemVisible = 4;
2006        	minusValue = 32;
2007        }
2008        //alert('minusValue -- '+minusValue);
2009
2010        $(".wpb-slider-vertical-nav-main a.next").css("top",parseInt(singleThumbHeight*totalItemVisible-minusValue)+"px");
2011    }// end if - check if tihs is vertical now then set arrows to proper position.
2012    else{
2013        //
2014        // in horizantal condition.
2015        //
2016        var totalWidth = $(".wpb-slider-horizontal-nav-main").width();
2017        $(".wpb-slider-horizontal-nav-main a.next").css("left",parseInt(totalWidth-20)+"px");
2018    }
2019
2020    //WD-561
2021    setTimeout( callFunActionsOnLoad , 8000); //8 secs.
2022}); //End of document.ready

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.