',a,\"\"].join(\"\"),l.id=g,(m?l:n).innerHTML+=h,n.appendChild(l),m||(n.style.background=\"\",n.style.overflow=\"hidden\",k=f.style.overflow,f.style.overflow=\"hidden\",f.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),f.style.overflow=k),!!i},w={}.hasOwnProperty,x;!A(w,\"undefined\")&&!A(w.call,\"undefined\")?x=function(a,b){return w.call(a,b)}:x=function(a,b){return b in a&&A(a.constructor.prototype[b],\"undefined\")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!=\"function\")throw new TypeError;var d=t.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(t.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(t.call(arguments)))};return e}),p.borderradius=function(){return E(\"borderRadius\")},p.csstransforms=function(){return!!E(\"transform\")},p.csstransforms3d=function(){var a=!!E(\"perspective\");return a&&\"webkitPerspective\"in f.style&&v(\"@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}\",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a};for(var F in p)x(p,F)&&(u=F.toLowerCase(),e[u]=p[F](),s.push((e[u]?\"\":\"no-\")+u));return e.addTest=function(a,b){if(typeof a==\"object\")for(var d in a)x(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b==\"function\"?b():b,typeof enableClasses!=\"undefined\"&&enableClasses&&(f.className+=\" \"+(b?\"\":\"no-\")+a),e[a]=b}return e},y(\"\"),h=j=null,e._version=d,e._prefixes=l,e._domPrefixes=o,e._cssomPrefixes=n,e.testProp=function(a){return C([a])},e.testAllProps=E,e.testStyles=v,e.prefixed=function(a,b,c){return b?E(a,b,c):E(a,\"pfx\")},e}(this,document);\r\n\t\r\n /* Modernizr 2.8.3 (Custom Build) | MIT & BSD\r\n * Build: http://modernizr.com/download/#-borderradius-csstransforms-csstransforms3d-prefixed-teststyles-testprop-testallprops-prefixes-domprefixes\r\n */\r\n ; window.Modernizr = function (a, b, c) { function y(a) { i.cssText = a } function z(a, b) { return y(l.join(a + \";\") + (b || \"\")) } function A(a, b) { return typeof a === b } function B(a, b) { return !!~(\"\" + a).indexOf(b) } function C(a, b) { for (var d in a) { var e = a[d]; if (!B(e, \"-\") && i[e] !== c) return b == \"pfx\" ? e : !0 } return !1 } function D(a, b, d) { for (var e in a) { var f = b[a[e]]; if (f !== c) return d === !1 ? a[e] : A(f, \"function\") ? f.bind(d || b) : f } return !1 } function E(a, b, c) { var d = a.charAt(0).toUpperCase() + a.slice(1), e = (a + \" \" + n.join(d + \" \") + d).split(\" \"); return A(b, \"string\") || A(b, \"undefined\") ? C(e, b) : (e = (a + \" \" + o.join(d + \" \") + d).split(\" \"), D(e, b, c)) } var d = \"2.8.3\", e = {}, f = b.documentElement, g = \"modernizr\", h = b.createElement(g), i = h.style, j, k = {}.toString, l = \" -webkit- -moz- -o- -ms- \".split(\" \"), m = \"Webkit Moz O ms\", n = m.split(\" \"), o = m.toLowerCase().split(\" \"), p = {}, q = {}, r = {}, s = [], t = s.slice, u, v = function (a, c, d, e) { var h, i, j, k, l = b.createElement(\"div\"), m = b.body, n = m || b.createElement(\"body\"); if (parseInt(d, 10)) while (d--) j = b.createElement(\"div\"), j.id = e ? e[d] : g + (d + 1), l.appendChild(j); return h = [\"\", '\"].join(\"\"), l.id = g, (m ? l : n).innerHTML += h, n.appendChild(l), m || (n.style.background = \"\", n.style.overflow = \"hidden\", k = f.style.overflow, f.style.overflow = \"hidden\", f.appendChild(n)), i = c(l, a), m ? l.parentNode.removeChild(l) : (n.parentNode.removeChild(n), f.style.overflow = k), !!i }, w = {}.hasOwnProperty, x; !A(w, \"undefined\") && !A(w.call, \"undefined\") ? x = function (a, b) { return w.call(a, b) } : x = function (a, b) { return b in a && A(a.constructor.prototype[b], \"undefined\") }, Function.prototype.bind || (Function.prototype.bind = function (b) { var c = this; if (typeof c != \"function\") throw new TypeError; var d = t.call(arguments, 1), e = function () { if (this instanceof e) { var a = function () { }; a.prototype = c.prototype; var f = new a, g = c.apply(f, d.concat(t.call(arguments))); return Object(g) === g ? g : f } return c.apply(b, d.concat(t.call(arguments))) }; return e }), p.borderradius = function () { return E(\"borderRadius\") }, p.csstransforms = function () { return !!E(\"transform\") }, p.csstransforms3d = function () { var a = !!E(\"perspective\"); return a && \"webkitPerspective\" in f.style && v(\"@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}\", function (b, c) { a = b.offsetLeft === 9 && b.offsetHeight === 3 }), a }; for (var F in p) x(p, F) && (u = F.toLowerCase(), e[u] = p[F](), s.push((e[u] ? \"\" : \"no-\") + u)); return e.addTest = function (a, b) { if (typeof a == \"object\") for (var d in a) x(a, d) && e.addTest(d, a[d]); else { a = a.toLowerCase(); if (e[a] !== c) return e; b = typeof b == \"function\" ? b() : b, typeof enableClasses != \"undefined\" && enableClasses && (f.className += \" \" + (b ? \"\" : \"no-\") + a), e[a] = b } return e }, y(\"\"), h = j = null, e._version = d, e._prefixes = l, e._domPrefixes = o, e._cssomPrefixes = n, e.testProp = function (a) { return C([a]) }, e.testAllProps = E, e.testStyles = v, e.prefixed = function (a, b, c) { return b ? E(a, b, c) : E(a, \"pfx\") }, e }(this, this.document);\r\n\r\n\tvar prop_transform = Modernizr.prefixed('transform');\r\n\tvar prop_origin = Modernizr.prefixed('transformOrigin');\r\n\tvar prop_radius = Modernizr.prefixed('borderRadius');\r\n\tvar supportsTrans3D = Modernizr.csstransforms3d;\r\n\t\r\n})(jQuery, window, document);\r\n\r\n//End - smoothZoom\r\n\r\n//...................................................................................................................\r\n//For mouse wheel support\r\n\r\n/*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh)\r\n * Licensed under the MIT License (LICENSE.txt).\r\n *\r\n * Version: 3.1.11\r\n *\r\n * Requires: jQuery 1.2.2+\r\n */\r\n!function(a){\"function\"==typeof define&&define.amd?define([\"jquery\"],a):\"object\"==typeof exports?module.exports=a:a(jQuery)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type=\"mousewheel\",\"detail\"in g&&(m=-1*g.detail),\"wheelDelta\"in g&&(m=g.wheelDelta),\"wheelDeltaY\"in g&&(m=g.wheelDeltaY),\"wheelDeltaX\"in g&&(l=-1*g.wheelDeltaX),\"axis\"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,\"deltaY\"in g&&(m=-1*g.deltaY,j=m),\"deltaX\"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,\"mousewheel-line-height\");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,\"mousewheel-page-height\");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?\"floor\":\"ceil\"](j/f),l=Math[l>=1?\"floor\":\"ceil\"](l/f),m=Math[m>=1?\"floor\":\"ceil\"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&\"mousewheel\"===a.type&&b%120===0}var e,f,g=[\"wheel\",\"mousewheel\",\"DOMMouseScroll\",\"MozMousePixelScroll\"],h=\"onwheel\"in document||document.documentMode>=9?[\"wheel\"]:[\"mousewheel\",\"DomMouseScroll\",\"MozMousePixelScroll\"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:\"3.1.11\",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,\"mousewheel-line-height\",k.getLineHeight(this)),a.data(this,\"mousewheel-page-height\",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,\"mousewheel-line-height\"),a.removeData(this,\"mousewheel-page-height\")},getLineHeight:function(b){var c=a(b)[\"offsetParent\"in a.fn?\"offsetParent\":\"parent\"]();return c.length||(c=a(\"body\")),parseInt(c.css(\"fontSize\"),10)},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind(\"mousewheel\",a):this.trigger(\"mousewheel\")},unmousewheel:function(a){return this.unbind(\"mousewheel\",a)}})});\r\n\r\n//...................................................................................................................","// The semi-colon before the function invocation is a safety \r\n// net against concatenated scripts and/or other plugins \r\n// that are not closed properly.\r\n; (function ($, window, document, undefined) {\r\n\r\n // undefined is used here as the undefined global \r\n // variable in ECMAScript 3 and is mutable (i.e. it can \r\n // be changed by someone else). undefined isn't really \r\n // being passed in so we can ensure that its value is \r\n // truly undefined. In ES5, undefined can no longer be \r\n // modified.\r\n\r\n // window and document are passed through as local \r\n // variables rather than as globals, because this (slightly) \r\n // quickens the resolution process and can be more \r\n // efficiently minified (especially when both are \r\n // regularly referenced in your plugin).\r\n\r\n // Create the defaults once\r\n var pluginName = 'interactivemap';\r\n var defaults = {\r\n apiBaseUrl: 'http://localhost:8000/api/interactivemap/',\r\n zoomMax: 300,\r\n zoomMin: 0,\r\n zoomInitial: 0,\r\n initialFilterCategories: [],\r\n initialFilterOpenStatus: 0\r\n };\r\n\r\n var keyCodes = {\r\n backspace: 8,\r\n tab: 9,\r\n enter: 13,\r\n shift: 16,\r\n ctrl: 17,\r\n alt: 18,\r\n esc: 27,\r\n left: 37,\r\n up: 38,\r\n right: 39,\r\n down: 40,\r\n del: 46\r\n };\r\n\r\n var delay = (function () {\r\n var timer = 0;\r\n return function (callback, ms) {\r\n clearTimeout(timer);\r\n timer = setTimeout(callback, ms);\r\n };\r\n })();\r\n\r\n // The actual plugin constructor\r\n function Plugin(element, options) {\r\n this.element = element;\r\n this.$element = $(element);\r\n\r\n this.options = $.extend({}, defaults, options);\r\n\r\n this._defaults = defaults;\r\n this._name = pluginName;\r\n this._keyCodes = keyCodes;\r\n\r\n this.init();\r\n }\r\n\r\n Plugin.prototype.init = function () {\r\n\r\n var $base = this;\r\n var $element = $base.$element;\r\n $base.element.type = 'interactivemap';\r\n\r\n $base.setMapSize();\r\n\r\n $('[data-toggle=\"tooltip\"]').tooltip({\r\n \tplacement : 'top'\r\n })\r\n\r\n\r\n var initSmoothZoom = function() {\r\n $('.imapBackground', $element).smoothZoom({\r\n width: '100%',\r\n height: '100%',\r\n button_SIZE: 24,\r\n button_SIZE_TOUCH_DEVICE: 28,\r\n button_COLOR: '#FFFFFF',\r\n button_BG_COLOR: '#ffffff',\r\n button_BG_TRANSPARENCY: 60,\r\n button_ALIGN: \"top right\",\r\n button_ICON_IMAGE : \"/ui/img/icons/icons.png\",\r\n zoom_OUT_TO_FIT: \"YES\",\r\n button_AUTO_HIDE: false,\r\n button_AUTO_HIDE_DELAY: 2,\r\n container: '.imap',\r\n zoom_MAX: $base.options.zoomMax,\r\n zoom_MIN: $base.options.zoomMin,\r\n initial_ZOOM: $base.options.zoomInital,\r\n on_ZOOM_PAN_UPDATE: function (zoomData, success) {\r\n setTimeout(function () {\r\n $('.imapMenuFlyOut .flyOutWrapper', $element).slideUp('fast');\r\n\r\n // Manually re-arrange z-indezes\r\n //$('.imap .landmarks .item.mark', $element).each(function () {\r\n // var mark = $(this);\r\n\r\n // var elements = $('a', mark);\r\n // if (elements.length > 0) {\r\n // mark.css('z-index', 14);\r\n // } else {\r\n // mark.css('z-index', 13);\r\n // }\r\n //});\r\n\r\n }, 300);\r\n },\r\n on_IMAGE_LOAD: function () {\r\n\r\n },\r\n button_ROUND_CORNERS: false,\r\n responsive: false,\r\n responsive_maintain_ratio: false,\r\n max_WIDTH: '',\r\n max_HEIGHT: ''\r\n });\r\n };\r\n\r\n // Init the plugin\r\n initSmoothZoom();\r\n\r\n // Set initial open status filter if any\r\n if (!isNaN($base.options.initialFilterOpenStatus) && $base.options.initialFilterOpenStatus > 0) {\r\n $('li.openStatusButtons a[href=\"#' + $base.options.initialFilterOpenStatus + '\"]', $element).addClass('selected');\r\n }\r\n\r\n // Set initial category filters if any\r\n if ($base.options.initialFilterCategories.length > 0) {\r\n\r\n // First select the root level categories in order to fetch child categories\r\n $('.imapMenu a[data-parentid=\"0\"]', $element).each(function () {\r\n var button = $(this);\r\n var parentId = parseInt(button.attr('href').replace('#', ''));\r\n if ($.grep($base.options.initialFilterCategories, function(filter) { return filter.CategoryID === parentId; }).length === 0)\r\n return true;\r\n \r\n // Fire the button to fetch its children and build flyout meny\r\n $base.toggleMenu(button, function () {\r\n $base.toggleButtonLoader(button);\r\n\r\n // Select only applicable children\r\n if ($.grep($base.options.initialFilterCategories, function (filter) { return filter.ParentID === parentId; }).length > 0) {\r\n var menu = $('.imapMenuFlyOut .flyOutWrapper[data-categoryid=\"' + parentId + '\"] ul', $element).first();\r\n $('li a', menu).each(function () {\r\n var item = $(this);\r\n item.removeClass('selected');\r\n var categoryId = parseInt(item.attr('href').replace('#', ''));\r\n\r\n if ($.grep($base.options.initialFilterCategories, function (filter) { return filter.CategoryID === categoryId; }).length === 0)\r\n return true;\r\n\r\n item.addClass('selected');\r\n });\r\n }\r\n \r\n $base.loadLandmarks(function () {\r\n $base.toggleButtonLoader(button);\r\n });\r\n });\r\n });\r\n }\r\n \r\n $('.imapMenu a, .imapMenuFlyOut a', $element).on('click', function (e) {\r\n $base.menuButtonClick($(this), e);\r\n });\r\n\r\n $('.windowSizeButton a', $element).on('click', function (e) {\r\n e.preventDefault();\r\n\r\n var button = $(this);\r\n\r\n button.toggleClass('maximized');\r\n $base.toggleFullscreen();\r\n $base.setMapSize();\r\n });\r\n\r\n $('#imapLandmarkModal').on('show.bs.modal', function (event) {\r\n var modal = $(this);\r\n var button = $(event.relatedTarget);\r\n var popupContent = $('.imapLandmarkPopupData ' + button.attr('href'));\r\n\r\n modal.find('.modal-title').html(button.text());\r\n modal.find('.modal-body').html(popupContent.html());\r\n });\r\n\r\n $(window).on('resize', function() {\r\n $base.setMapSize();\r\n });\r\n\r\n\t\t$(document).on('webkitfullscreenchange mozfullscreenchange fullscreenchange MSFullscreenChange', function(e){\r\n\t\t\tif (\r\n\t\t\t\tdocument.fullscreenElement ||\r\n\t\t\t\tdocument.webkitFullscreenElement ||\r\n\t\t\t\tdocument.mozFullScreenElement ||\r\n\t\t\t\tdocument.msFullscreenElement\r\n\t\t\t) {\r\n\t\t\t\t$base.$element.addClass('maximized')\t\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t$base.$element.removeClass('maximized')\r\n\t\t\t}\r\n\t\t\t\r\n\t\t});\r\n };\r\n\r\n\r\n Plugin.prototype.toggleFullscreen = function(){\r\n\t\tif (\r\n\t\t\tdocument.fullscreenElement ||\r\n\t\t\tdocument.webkitFullscreenElement ||\r\n\t\t\tdocument.mozFullScreenElement ||\r\n\t\t\tdocument.msFullscreenElement\r\n\t\t) {\r\n\t\t\tthis.$element.removeClass('maximized');\r\n\r\n\t\t\tif (document.exitFullscreen) {\r\n\t\t\t\tdocument.exitFullscreen();\r\n\t\t\t} else if (document.mozCancelFullScreen) {\r\n\t\t\t\tdocument.mozCancelFullScreen();\r\n\t\t\t} else if (document.webkitExitFullscreen) {\r\n\t\t\t\tdocument.webkitExitFullscreen();\r\n\t\t\t} else if (document.msExitFullscreen) {\r\n\t\t\t\tdocument.msExitFullscreen();\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.$element.addClass('maximized');\r\n\t\t\telement = $('.imapContainer').get(0);\r\n\r\n\t\t\tif (element.requestFullscreen) {\r\n\t\t\t\telement.requestFullscreen();\r\n\t\t\t} else if (element.mozRequestFullScreen) {\r\n\t\t\t\telement.mozRequestFullScreen();\r\n\t\t\t} else if (element.webkitRequestFullscreen) {\r\n\t\t\t\telement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);\r\n\t\t\t} else if (element.msRequestFullscreen) {\r\n\t\t\t\telement.msRequestFullscreen();\r\n\t\t\t}\r\n\t\t}\r\n }\r\n \r\n Plugin.prototype.menuButtonClick = function (button, e) {\r\n var $base = this;\r\n\r\n e.preventDefault();\r\n\r\n $base.toggleMenu(button, function () {\r\n $base.toggleButtonLoader(button);\r\n $base.loadLandmarks(function () {\r\n $base.toggleButtonLoader(button);\r\n });\r\n });\r\n };\r\n\r\n Plugin.prototype.setMapSize = function () {\r\n var $base = this;\r\n var $element = $base.$element;\r\n\r\n var $container = $element.parent().parent();\r\n\r\n \tif($element.hasClass('maximized'))\r\n {\r\n \t\t\tvar windowWidth = $(window).width();\r\n \tvar windowHeight = $(window).height();\r\n\r\n \tvar size = {width: windowWidth, height: windowHeight};\r\n \t$element.css(size);\r\n \t$('.imap', $element).css(size);\r\n\r\n\t\t\tif ($('.imapBackground', $element).data('smoothZoom')) {\r\n\t\t\t\t$('.imapBackground', $element).smoothZoom('resize', size);\r\n\t\t\t}\r\n\r\n \treturn;\r\n }\r\n\r\n if (!$container.is('div'))\r\n $container = $(window);\r\n\r\n var $menu = $('.imapMenu', $element);\r\n\r\n // Hide and reset sizes\r\n $('.imap', $element).hide().parent().css('height', '').css('width', '');\r\n $element.css('height', '').css('width', '');\r\n\r\n // Calculate size\r\n var containerSize = { width: $container.width(), height: $container.outerHeight() };\r\n var imapHeight = containerSize.height;\r\n console.log('containerSize', containerSize)\r\n console.log('$menu.height()', $menu.height())\r\n\r\n //if (containerSize.height === 0 || containerSize.height <= $menu.height()) {\r\n var $image = $('.imapBackground', $element);\r\n var imageSize = { width: $image.attr('data-originalwidth'), height: $image.attr('data-originalheight') };\r\n \r\n if (imageSize.width > containerSize.width) {\r\n var ratio = imageSize.height / imageSize.width;\r\n containerSize.height = Math.ceil(ratio * containerSize.width);\r\n }\r\n\r\n imapHeight = containerSize.height;\r\n containerSize.height += $menu.height();\r\n //} else {\r\n // imapHeight -= $menu.height();\r\n //}\r\n \r\n // Set sizes and show\r\n //$element.height(containerSize.height + $menu.height() + 'px').width('100%');\r\n $element.height(containerSize.height + 'px').width('100%');\r\n $('.imap', $element).show().parent().height(imapHeight + 'px').width('100%');\r\n\r\n \r\n\r\n // If smoothzoom as been initialized, resize that aswell\r\n if ($('.imapBackground', $element).data('smoothZoom')) {\r\n $('.imapBackground', $element).smoothZoom('resize', { width: $('.imap', $element).parent().width(), height: $('.imap', $element).parent().height() });\r\n }\r\n\r\n return $base;\r\n };\r\n\r\n Plugin.prototype.toggleMenu = function (button, callback) {\r\n\r\n var $base = this;\r\n var $element = $base.$element;\r\n\r\n if (button.parents('li.openStatusButtons').length > 0) {\r\n button.toggleClass('selected');\r\n $base.loadLandmarks();\r\n return $base;\r\n }\r\n\r\n var categoryId = parseInt(button.attr('href').replace('#', ''));\r\n var parentId = parseInt(button.attr('data-parentid'));\r\n var flyout = $('.imapMenuFlyOut .flyOutWrapper[data-categoryid=\"' + categoryId + '\"]', $element);\r\n var menu = parentId === 0 ? $('ul', flyout).first() : button.parents('ul').next('ul');\r\n\r\n if (button.hasClass('selected')) {\r\n // Deselect the category and all children\r\n button.removeClass('selected');\r\n \r\n if (parentId === 0) {\r\n flyout.hide();\r\n $('li a', menu).removeClass('selected');\r\n } else {\r\n $('li a', menu.nextAll('ul')).removeClass('selected').parents('ul').hide();\r\n }\r\n \r\n if ($.isFunction(callback))\r\n callback();\r\n\r\n } else {\r\n button.addClass('selected');\r\n \r\n if (parentId === 0) {\r\n // This is a rootlevel button.\r\n // Hide all other flyoutwrappers and add a wrapper to flyout for this button if not already present.\r\n $('.imapMenuFlyOut .flyOutWrapper', $element).hide();\r\n if (flyout.length === 0) {\r\n flyout = $('').appendTo($('.imapMenuFlyOut', $element));\r\n }\r\n }\r\n\r\n // Get the active wrapper and try to get the next unordered list, add it if not existing\r\n if (menu.length === 0)\r\n menu = $('').appendTo(flyout);\r\n\r\n // Clear\r\n $('li a', menu).unbind('click');\r\n\r\n $.ajax({\r\n type: 'GET',\r\n url: $base.options.apiBaseUrl + 'categories/' + categoryId,\r\n data: null,\r\n contentType: 'application/json; charset=utf-8',\r\n dataType: 'json',\r\n async: true,\r\n success: function (data) {\r\n if (data == null || data.length <= 0) {\r\n if ($.isFunction(callback))\r\n callback();\r\n\r\n return;\r\n }\r\n\r\n var html = '';\r\n $.each(data, function (index, item) {\r\n if ($('li a[href=\"#' + item.id + '\"]', menu).length > 0)\r\n return true;\r\n\r\n var style = item.categoryIconImage === '' ? '' : ' style=\"background-image:url(' + item.categoryIconImage + ');\"';\r\n html += '' + item.name + '';\r\n });\r\n\r\n menu.append(html);\r\n\r\n $('li a', menu).bind('click', function(e) {\r\n $base.menuButtonClick($(this), e);\r\n });\r\n\r\n $('li a', menu).addClass('selected');\r\n \r\n flyout.show();\r\n\r\n if ($.isFunction(callback))\r\n callback();\r\n }\r\n });\r\n }\r\n \r\n return $base;\r\n }\r\n\r\n Plugin.prototype.toggleButtonLoader = function (button) {\r\n\r\n var $base = this;\r\n var $element = $base.$element;\r\n\r\n var loader = null;\r\n if (button.attr('data-parentid') === '0') {\r\n loader = button.siblings('div.ajaxloader');\r\n } else {\r\n loader = $('.imapMenu li a[href=\"#' + button.attr('data-parentid') + '\"]', $element).siblings('div.ajaxloader');\r\n }\r\n\r\n if (loader.is(':visible')) {\r\n loader.hide();\r\n } else {\r\n loader.show();\r\n }\r\n\r\n return $base;\r\n }\r\n\r\n Plugin.prototype.loadLandmarks = function (callback) {\r\n\r\n var $base = this;\r\n var $element = $base.$element;\r\n\r\n var request = {\r\n categories: [],\r\n openStatusFlag: 0\r\n };\r\n \r\n // Get selected categories\r\n $('li:not(.openStatusButtons) a.selected', $element).each(function () {\r\n var categoryId = parseInt($(this).attr('href').replace('#', ''));\r\n var parentId = parseInt($(this).attr('data-parentid'));\r\n\r\n // Remove parents\r\n var parentIndex = $.inArray(parentId, request.categories);\r\n if (parentIndex > -1) {\r\n request.categories.splice(parentIndex, 1); \r\n }\r\n \r\n request.categories.push(categoryId);\r\n });\r\n \r\n // Get selected open status\r\n $('li.openStatusButtons a.selected', $element).each(function () {\r\n request.openStatusFlag = request.openStatusFlag | parseInt($(this).attr('href').replace('#', ''));\r\n });\r\n \r\n $.ajax({\r\n type: 'POST',\r\n url: $base.options.apiBaseUrl + 'positions',\r\n data: JSON.stringify(request),\r\n contentType: 'application/json; charset=utf-8',\r\n dataType: 'json',\r\n async: true,\r\n success: function (data) {\r\n\r\n $('.landmarks', $element).html('');\r\n $('.imapLandmarkPopupData', $element).html('');\r\n $element.smoothZoom('refreshAllLandmarks');\r\n\r\n if (data == null || data.length <= 0) {\r\n if ($.isFunction(callback))\r\n callback();\r\n\r\n return;\r\n }\r\n\r\n console.log(data);\r\n\r\n $.each(data, function (index, item) {\r\n var location = '';\r\n location += '';\r\n\r\n if (item.image !== '') {\r\n location += '
';\r\n if (item.popupContent !== '') {\r\n location += '
';\r\n location += '
';\r\n location += '';\r\n } else {\r\n location += '

';\r\n }\r\n } else {\r\n location += '
';\r\n }\r\n\r\n location += '
';\r\n\r\n $('.landmarks', $element).append(location);\r\n \r\n if (item.PopupContent !== '') {\r\n\r\n\r\n $('' + item.popupContent + '
').appendTo($('.imapLandmarkPopupData'));\r\n }\r\n });\r\n\r\n $('.imapBackground', $element).smoothZoom('refreshAllLandmarks');\r\n\r\n // Manually re-arrange z-indezes\r\n //var categoryId = 0;\r\n //var zindex = 12;\r\n\r\n $('.landmarks .item.mark', $element).each(function () {\r\n var $mark = $(this);\r\n\r\n //if (parseInt($mark.attr('data-parentid')) !== categoryId) {\r\n // categoryId = parseInt($mark.attr('data-parentid'));\r\n // zindex++;\r\n //}\r\n\r\n //$mark.css('z-index', zindex);\r\n\r\n var clickable = $('a', $mark);\r\n if (clickable.length > 0) {\r\n $mark.css('z-index', 15);\r\n return true;\r\n }\r\n\r\n var label = $('div.label img', $mark);\r\n if (label.length > 0) {\r\n $mark.css('z-index', 14);\r\n return true;\r\n }\r\n \r\n $mark.css('z-index', 13);\r\n });\r\n\r\n $('.landmarkButton', $element).unbind('click');\r\n $('.landmarkButton', $element).bind('click', function(e) {\r\n e.preventDefault();\r\n });\r\n\r\n if ($.isFunction(callback))\r\n callback();\r\n }\r\n });\r\n\r\n return $base;\r\n };\r\n \r\n\r\n // A really lightweight plugin wrapper around the constructor, \r\n // preventing against multiple instantiations\r\n $.fn[pluginName] = function (options) {\r\n return this.each(function () {\r\n if (!$.data(this, pluginName)) {\r\n $.data(this, pluginName, new Plugin(this, options));\r\n }\r\n });\r\n };\r\n})(jQuery, window, document);","var Parallax = function Parallax(elem) {\r\n var body = $('body');\r\n var self = this;\r\n\r\n this.elem = $(elem);\r\n this.offset = self.elem.offset().top;\r\n this.media = self.elem.find('.media');\r\n this.isVideo = self.media.hasClass('video');\r\n this.content = self.elem.find('.content-wrapper');\r\n this.contentSpeed = 2.5;\r\n this.opacitySpeed = 2;\r\n\r\n this.init = function() {\r\n $(window).on('scroll', this.onScroll);\r\n this.onScroll();\r\n }\r\n\r\n this.onScroll = function() {\r\n var scrollTop = $(window).scrollTop();\r\n var windowHeight = $(window).height();\r\n var elemEnd = self.elem.outerHeight() + self.offset;\r\n var perc = Math.min(1, scrollTop / elemEnd);\r\n var distanceToMove = 0;\r\n\r\n if (!self.isVideo) {\r\n distanceToMove = self.media.outerHeight() - self.elem.outerHeight();\r\n self.media.css('top', -distanceToMove * perc)\r\n } else {\r\n distanceToMove = self.elem.outerHeight() * 1.1 - self.elem.outerHeight();\r\n }\r\n\r\n if (self.content.length) {\r\n elemEnd = self.elem.outerHeight() + self.offset;\r\n var opacityPerc = Math.min(1, scrollTop / elemEnd);\r\n\r\n self.content.css('opacity', 1.0 - (opacityPerc * self.opacitySpeed));\r\n self.content.css('top', -(distanceToMove * self.contentSpeed) * perc);\r\n }\r\n }\r\n\r\n $(document).ready(function(){\r\n self.init(); \r\n });\r\n \r\n};\r\n\r\n","/*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh)\n * Licensed under the MIT License (LICENSE.txt).\n *\n * Version: 3.1.9\n *\n * Requires: jQuery 1.2.2+\n */\n\n(function (factory) {\n if ( typeof define === 'function' && define.amd ) {\n // AMD. Register as an anonymous module.\n define(['jquery'], factory);\n } else if (typeof exports === 'object') {\n // Node/CommonJS style for Browserify\n module.exports = factory;\n } else {\n // Browser globals\n factory(jQuery);\n }\n}(function ($) {\n\n var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],\n toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?\n ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],\n slice = Array.prototype.slice,\n nullLowestDeltaTimeout, lowestDelta;\n\n if ( $.event.fixHooks ) {\n for ( var i = toFix.length; i; ) {\n $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;\n }\n }\n\n var special = $.event.special.mousewheel = {\n version: '3.1.9',\n\n setup: function() {\n if ( this.addEventListener ) {\n for ( var i = toBind.length; i; ) {\n this.addEventListener( toBind[--i], handler, false );\n }\n } else {\n this.onmousewheel = handler;\n }\n // Store the line height and page height for this particular element\n $.data(this, 'mousewheel-line-height', special.getLineHeight(this));\n $.data(this, 'mousewheel-page-height', special.getPageHeight(this));\n },\n\n teardown: function() {\n if ( this.removeEventListener ) {\n for ( var i = toBind.length; i; ) {\n this.removeEventListener( toBind[--i], handler, false );\n }\n } else {\n this.onmousewheel = null;\n }\n },\n\n getLineHeight: function(elem) {\n return parseInt($(elem)['offsetParent' in $.fn ? 'offsetParent' : 'parent']().css('fontSize'), 10);\n },\n\n getPageHeight: function(elem) {\n return $(elem).height();\n },\n\n settings: {\n adjustOldDeltas: true\n }\n };\n\n $.fn.extend({\n mousewheel: function(fn) {\n return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');\n },\n\n unmousewheel: function(fn) {\n return this.unbind('mousewheel', fn);\n }\n });\n\n\n function handler(event) {\n var orgEvent = event || window.event,\n args = slice.call(arguments, 1),\n delta = 0,\n deltaX = 0,\n deltaY = 0,\n absDelta = 0;\n event = $.event.fix(orgEvent);\n event.type = 'mousewheel';\n\n // Old school scrollwheel delta\n if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; }\n if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; }\n if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; }\n if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }\n\n // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\n if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {\n deltaX = deltaY * -1;\n deltaY = 0;\n }\n\n // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy\n delta = deltaY === 0 ? deltaX : deltaY;\n\n // New school wheel delta (wheel event)\n if ( 'deltaY' in orgEvent ) {\n deltaY = orgEvent.deltaY * -1;\n delta = deltaY;\n }\n if ( 'deltaX' in orgEvent ) {\n deltaX = orgEvent.deltaX;\n if ( deltaY === 0 ) { delta = deltaX * -1; }\n }\n\n // No change actually happened, no reason to go any further\n if ( deltaY === 0 && deltaX === 0 ) { return; }\n\n // Need to convert lines and pages to pixels if we aren't already in pixels\n // There are three delta modes:\n // * deltaMode 0 is by pixels, nothing to do\n // * deltaMode 1 is by lines\n // * deltaMode 2 is by pages\n if ( orgEvent.deltaMode === 1 ) {\n var lineHeight = $.data(this, 'mousewheel-line-height');\n delta *= lineHeight;\n deltaY *= lineHeight;\n deltaX *= lineHeight;\n } else if ( orgEvent.deltaMode === 2 ) {\n var pageHeight = $.data(this, 'mousewheel-page-height');\n delta *= pageHeight;\n deltaY *= pageHeight;\n deltaX *= pageHeight;\n }\n\n // Store lowest absolute delta to normalize the delta values\n absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );\n\n if ( !lowestDelta || absDelta < lowestDelta ) {\n lowestDelta = absDelta;\n\n // Adjust older deltas if necessary\n if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n lowestDelta /= 40;\n }\n }\n\n // Adjust older deltas if necessary\n if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n // Divide all the things by 40!\n delta /= 40;\n deltaX /= 40;\n deltaY /= 40;\n }\n\n // Get a whole, normalized value for the deltas\n delta = Math[ delta >= 1 ? 'floor' : 'ceil' ](delta / lowestDelta);\n deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);\n deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);\n\n // Add information to the event object\n event.deltaX = deltaX;\n event.deltaY = deltaY;\n event.deltaFactor = lowestDelta;\n // Go ahead and set deltaMode to 0 since we converted to pixels\n // Although this is a little odd since we overwrite the deltaX/Y\n // properties with normalized deltas.\n event.deltaMode = 0;\n\n // Add event and delta to the front of the arguments\n args.unshift(event, delta, deltaX, deltaY);\n\n // Clearout lowestDelta after sometime to better\n // handle multiple device types that give different\n // a different lowestDelta\n // Ex: trackpad = 3 and mouse wheel = 120\n if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }\n nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);\n\n return ($.event.dispatch || $.event.handle).apply(this, args);\n }\n\n function nullLowestDelta() {\n lowestDelta = null;\n }\n\n function shouldAdjustOldDeltas(orgEvent, absDelta) {\n // If this is an older event and the delta is divisable by 120,\n // then we are assuming that the browser is treating this as an\n // older mouse wheel event and that we should divide the deltas\n // by 40 to try and get a more usable deltaFactor.\n // Side note, this actually impacts the reported scroll distance\n // in older browsers and can cause scrolling to be slower than native.\n // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.\n return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;\n }\n\n}));\n","/*! perfect-scrollbar - v0.4.11\n* http://noraesae.github.com/perfect-scrollbar/\n* Copyright (c) 2014 Hyeonje Alex Jun; Licensed MIT\n*\n* Edited by Rik de Vos (www.rikdevos.com)\n* \n*/\n(function (factory) {\n 'use strict';\n\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['jquery'], factory);\n } else if (typeof exports === 'object') {\n // Node/CommonJS\n factory(require('jquery'));\n } else {\n // Browser globals\n factory(jQuery);\n }\n}(function ($) {\n 'use strict';\n\n // The default settings for the plugin\n var defaultSettings = {\n wheelSpeed: 10,\n wheelPropagation: false,\n minScrollbarLength: null,\n maxScrollbarLength: null,\n useBothWheelAxes: false,\n useKeyboard: true,\n suppressScrollX: false,\n suppressScrollY: false,\n scrollXMarginOffset: 0,\n scrollYMarginOffset: 0,\n includePadding: false\n };\n\n var getEventClassName = (function () {\n var incrementingId = 0;\n return function () {\n var id = incrementingId;\n incrementingId += 1;\n return '.perfect-scrollbar-' + id;\n };\n }());\n\n $.fn.perfectScrollbar = function (suppliedSettings, option) {\n\n return this.each(function () {\n // Use the default settings\n var settings = $.extend(true, {}, defaultSettings),\n $this = $(this);\n\n if (typeof suppliedSettings === \"object\") {\n // But over-ride any supplied\n $.extend(true, settings, suppliedSettings);\n } else {\n // If no settings were supplied, then the first param must be the option\n option = suppliedSettings;\n }\n\n // Catch options\n\n if (option === 'update') {\n if ($this.data('perfect-scrollbar-update')) {\n $this.data('perfect-scrollbar-update')();\n }\n return $this;\n }\n else if (option === 'destroy') {\n if ($this.data('perfect-scrollbar-destroy')) {\n $this.data('perfect-scrollbar-destroy')();\n }\n return $this;\n }\n\n if ($this.data('perfect-scrollbar')) {\n // if there's already perfect-scrollbar\n return $this.data('perfect-scrollbar');\n }\n\n\n // Or generate new perfectScrollbar\n\n // Set class to the container\n $this.addClass('ps-container');\n\n var $scrollbarXRail = $(\"\").appendTo($this),\n $scrollbarYRail = $(\"\").appendTo($this),\n $scrollbarX = $(\"\").appendTo($scrollbarXRail),\n $scrollbarY = $(\"\").appendTo($scrollbarYRail),\n scrollbarXActive,\n scrollbarYActive,\n containerWidth,\n containerHeight,\n contentWidth,\n contentHeight,\n scrollbarXWidth,\n scrollbarXLeft,\n scrollbarXBottom = parseInt($scrollbarXRail.css('bottom'), 10),\n isScrollbarXUsingBottom = scrollbarXBottom === scrollbarXBottom, // !isNaN\n scrollbarXTop = isScrollbarXUsingBottom ? null : parseInt($scrollbarXRail.css('top'), 10),\n scrollbarYHeight,\n scrollbarYTop,\n scrollbarYRight = parseInt($scrollbarYRail.css('right'), 10),\n isScrollbarYUsingRight = scrollbarYRight === scrollbarYRight, // !isNaN\n scrollbarYLeft = isScrollbarYUsingRight ? null: parseInt($scrollbarYRail.css('left'), 10),\n isRtl = $this.css('direction') === \"rtl\",\n eventClassName = getEventClassName(),\n railBorderXWidth = parseInt($scrollbarXRail.css('borderLeftWidth'), 10) + parseInt($scrollbarXRail.css('borderRightWidth'), 10),\n railBorderYWidth = parseInt($scrollbarXRail.css('borderTopWidth'), 10) + parseInt($scrollbarXRail.css('borderBottomWidth'), 10);\n\n var updateContentScrollTop = function (currentTop, deltaY) {\n var newTop = currentTop + deltaY,\n maxTop = containerHeight - scrollbarYHeight;\n\n if (newTop < 0) {\n scrollbarYTop = 0;\n }\n else if (newTop > maxTop) {\n scrollbarYTop = maxTop;\n }\n else {\n scrollbarYTop = newTop;\n }\n\n var scrollTop = parseInt(scrollbarYTop * (contentHeight - containerHeight) / (containerHeight - scrollbarYHeight), 10);\n $this.scrollTop(scrollTop);\n };\n\n var updateContentScrollLeft = function (currentLeft, deltaX) {\n var newLeft = currentLeft + deltaX,\n maxLeft = containerWidth - scrollbarXWidth;\n\n if (newLeft < 0) {\n scrollbarXLeft = 0;\n }\n else if (newLeft > maxLeft) {\n scrollbarXLeft = maxLeft;\n }\n else {\n scrollbarXLeft = newLeft;\n }\n\n var scrollLeft = parseInt(scrollbarXLeft * (contentWidth - containerWidth) / (containerWidth - scrollbarXWidth), 10);\n $this.scrollLeft(scrollLeft);\n };\n\n var getSettingsAdjustedThumbSize = function (thumbSize) {\n if (settings.minScrollbarLength) {\n thumbSize = Math.max(thumbSize, settings.minScrollbarLength);\n }\n if (settings.maxScrollbarLength) {\n thumbSize = Math.min(thumbSize, settings.maxScrollbarLength);\n }\n return thumbSize;\n };\n\n var updateScrollbarCss = function () {\n var scrollbarXStyles = {width: containerWidth, display: scrollbarXActive ? \"inherit\": \"none\"};\n if (isRtl) {\n scrollbarXStyles.left = $this.scrollLeft() + containerWidth - contentWidth;\n } else {\n scrollbarXStyles.left = $this.scrollLeft();\n }\n if (isScrollbarXUsingBottom) {\n scrollbarXStyles.bottom = scrollbarXBottom - $this.scrollTop();\n } else {\n scrollbarXStyles.top = scrollbarXTop + $this.scrollTop();\n }\n $scrollbarXRail.css(scrollbarXStyles);\n\n var scrollbarYStyles = {top: $this.scrollTop(), height: containerHeight, display: scrollbarYActive ? \"inherit\": \"none\"};\n\n if (isScrollbarYUsingRight) {\n if (isRtl) {\n scrollbarYStyles.right = contentWidth - $this.scrollLeft() - scrollbarYRight - $scrollbarY.outerWidth();\n } else {\n scrollbarYStyles.right = scrollbarYRight - $this.scrollLeft();\n }\n } else {\n if (isRtl) {\n scrollbarYStyles.left = $this.scrollLeft() + containerWidth * 2 - contentWidth - scrollbarYLeft - $scrollbarY.outerWidth();\n } else {\n scrollbarYStyles.left = scrollbarYLeft + $this.scrollLeft();\n }\n }\n $scrollbarYRail.css(scrollbarYStyles);\n\n $scrollbarX.css({left: scrollbarXLeft, width: scrollbarXWidth - railBorderXWidth});\n $scrollbarY.css({top: scrollbarYTop, height: scrollbarYHeight - railBorderYWidth});\n\n if (scrollbarXActive) {\n $this.addClass('ps-active-x');\n } else {\n $this.removeClass('ps-active-x');\n }\n\n if (scrollbarYActive) {\n $this.addClass('ps-active-y');\n } else {\n $this.removeClass('ps-active-y');\n }\n };\n\n var updateBarSizeAndPosition = function () {\n containerWidth = settings.includePadding ? $this.innerWidth() : $this.width();\n containerHeight = settings.includePadding ? $this.innerHeight() : $this.height();\n contentWidth = $this.prop('scrollWidth');\n contentHeight = $this.prop('scrollHeight');\n\n if (!settings.suppressScrollX && containerWidth + settings.scrollXMarginOffset < contentWidth) {\n scrollbarXActive = true;\n scrollbarXWidth = getSettingsAdjustedThumbSize(parseInt(containerWidth * containerWidth / contentWidth, 10));\n scrollbarXLeft = parseInt($this.scrollLeft() * (containerWidth - scrollbarXWidth) / (contentWidth - containerWidth), 10);\n }\n else {\n scrollbarXActive = false;\n scrollbarXWidth = 0;\n scrollbarXLeft = 0;\n $this.scrollLeft(0);\n }\n\n if (!settings.suppressScrollY && containerHeight + settings.scrollYMarginOffset < contentHeight) {\n scrollbarYActive = true;\n scrollbarYHeight = getSettingsAdjustedThumbSize(parseInt(containerHeight * containerHeight / contentHeight, 10));\n scrollbarYTop = parseInt($this.scrollTop() * (containerHeight - scrollbarYHeight) / (contentHeight - containerHeight), 10);\n }\n else {\n scrollbarYActive = false;\n scrollbarYHeight = 0;\n scrollbarYTop = 0;\n $this.scrollTop(0);\n }\n\n if (scrollbarYTop >= containerHeight - scrollbarYHeight) {\n scrollbarYTop = containerHeight - scrollbarYHeight;\n }\n if (scrollbarXLeft >= containerWidth - scrollbarXWidth) {\n scrollbarXLeft = containerWidth - scrollbarXWidth;\n }\n\n updateScrollbarCss();\n };\n\n var bindMouseScrollXHandler = function () {\n var currentLeft,\n currentPageX;\n\n $scrollbarX.bind('mousedown' + eventClassName, function (e) {\n currentPageX = e.pageX;\n currentLeft = $scrollbarX.position().left;\n $scrollbarXRail.addClass('in-scrolling');\n e.stopPropagation();\n e.preventDefault();\n });\n\n $(document).bind('mousemove' + eventClassName, function (e) {\n if ($scrollbarXRail.hasClass('in-scrolling')) {\n updateContentScrollLeft(currentLeft, e.pageX - currentPageX);\n updateBarSizeAndPosition();\n e.stopPropagation();\n e.preventDefault();\n }\n });\n\n $(document).bind('mouseup' + eventClassName, function (e) {\n if ($scrollbarXRail.hasClass('in-scrolling')) {\n $scrollbarXRail.removeClass('in-scrolling');\n }\n });\n\n currentLeft =\n currentPageX = null;\n };\n\n var bindMouseScrollYHandler = function () {\n var currentTop,\n currentPageY;\n\n $scrollbarY.bind('mousedown' + eventClassName, function (e) {\n currentPageY = e.pageY;\n currentTop = $scrollbarY.position().top;\n $scrollbarYRail.addClass('in-scrolling');\n e.stopPropagation();\n e.preventDefault();\n });\n\n $(document).bind('mousemove' + eventClassName, function (e) {\n if ($scrollbarYRail.hasClass('in-scrolling')) {\n updateContentScrollTop(currentTop, e.pageY - currentPageY);\n updateBarSizeAndPosition();\n e.stopPropagation();\n e.preventDefault();\n }\n });\n\n $(document).bind('mouseup' + eventClassName, function (e) {\n if ($scrollbarYRail.hasClass('in-scrolling')) {\n $scrollbarYRail.removeClass('in-scrolling');\n }\n });\n\n currentTop =\n currentPageY = null;\n };\n\n // check if the default scrolling should be prevented.\n var shouldPreventDefault = function (deltaX, deltaY) {\n var scrollTop = $this.scrollTop();\n if (deltaX === 0) {\n if (!scrollbarYActive) {\n return false;\n }\n if ((scrollTop === 0 && deltaY > 0) || (scrollTop >= contentHeight - containerHeight && deltaY < 0)) {\n return !settings.wheelPropagation;\n }\n }\n\n var scrollLeft = $this.scrollLeft();\n if (deltaY === 0) {\n if (!scrollbarXActive) {\n return false;\n }\n if ((scrollLeft === 0 && deltaX < 0) || (scrollLeft >= contentWidth - containerWidth && deltaX > 0)) {\n return !settings.wheelPropagation;\n }\n }\n return true;\n };\n\n // bind handlers\n var bindMouseWheelHandler = function () {\n // FIXME: Backward compatibility.\n // After e.deltaFactor applied, wheelSpeed should have smaller value.\n // Currently, there's no way to change the settings after the scrollbar initialized.\n // But if the way is implemented in the future, wheelSpeed should be reset.\n settings.wheelSpeed /= 10;\n\n var shouldPrevent = false;\n $this.bind('mousewheel' + eventClassName, function (e, deprecatedDelta, deprecatedDeltaX, deprecatedDeltaY) {\n var deltaX = e.deltaX * e.deltaFactor || deprecatedDeltaX,\n deltaY = e.deltaY * e.deltaFactor || deprecatedDeltaY;\n\n shouldPrevent = false;\n if (!settings.useBothWheelAxes) {\n // deltaX will only be used for horizontal scrolling and deltaY will\n // only be used for vertical scrolling - this is the default\n $this.scrollTop($this.scrollTop() - (deltaY * settings.wheelSpeed));\n $this.scrollLeft($this.scrollLeft() + (deltaX * settings.wheelSpeed));\n } else if (scrollbarYActive && !scrollbarXActive) {\n // only vertical scrollbar is active and useBothWheelAxes option is\n // active, so let's scroll vertical bar using both mouse wheel axes\n if (deltaY) {\n $this.scrollTop($this.scrollTop() - (deltaY * settings.wheelSpeed));\n } else {\n $this.scrollTop($this.scrollTop() + (deltaX * settings.wheelSpeed));\n }\n shouldPrevent = true;\n } else if (scrollbarXActive && !scrollbarYActive) {\n // useBothWheelAxes and only horizontal bar is active, so use both\n // wheel axes for horizontal bar\n if (deltaX) {\n $this.scrollLeft($this.scrollLeft() + (deltaX * settings.wheelSpeed));\n } else {\n $this.scrollLeft($this.scrollLeft() - (deltaY * settings.wheelSpeed));\n }\n shouldPrevent = true;\n }\n\n // update bar position\n updateBarSizeAndPosition();\n\n shouldPrevent = (shouldPrevent || shouldPreventDefault(deltaX, deltaY));\n if (shouldPrevent) {\n e.stopPropagation();\n e.preventDefault();\n }\n });\n\n // fix Firefox scroll problem\n $this.bind('MozMousePixelScroll' + eventClassName, function (e) {\n if (shouldPrevent) {\n e.preventDefault();\n }\n });\n };\n\n var bindKeyboardHandler = function () {\n var hovered = false;\n $this.bind('mouseenter' + eventClassName, function (e) {\n hovered = true;\n });\n $this.bind('mouseleave' + eventClassName, function (e) {\n hovered = false;\n });\n\n var shouldPrevent = false;\n $(document).bind('keydown' + eventClassName, function (e) {\n if (e.isDefaultPrevented && e.isDefaultPrevented()) {\n return;\n }\n\n if (!hovered || $(document.activeElement).is(\":input,[contenteditable]\")) {\n return;\n }\n\n var deltaX = 0,\n deltaY = 0;\n\n switch (e.which) {\n case 37: // left\n deltaX = -30;\n break;\n case 38: // up\n deltaY = 30;\n break;\n case 39: // right\n deltaX = 30;\n break;\n case 40: // down\n deltaY = -30;\n break;\n case 33: // page up\n deltaY = 90;\n break;\n case 32: // space bar\n case 34: // page down\n deltaY = -90;\n break;\n case 35: // end\n deltaY = -containerHeight;\n break;\n case 36: // home\n deltaY = containerHeight;\n break;\n default:\n return;\n }\n\n $this.scrollTop($this.scrollTop() - deltaY);\n $this.scrollLeft($this.scrollLeft() + deltaX);\n\n shouldPrevent = shouldPreventDefault(deltaX, deltaY);\n if (shouldPrevent) {\n e.preventDefault();\n }\n });\n };\n\n var bindRailClickHandler = function () {\n var stopPropagation = function (e) { e.stopPropagation(); };\n\n $scrollbarY.bind('click' + eventClassName, stopPropagation);\n $scrollbarYRail.bind('click' + eventClassName, function (e) {\n var halfOfScrollbarLength = parseInt(scrollbarYHeight / 2, 10),\n positionTop = e.pageY - $scrollbarYRail.offset().top - halfOfScrollbarLength,\n maxPositionTop = containerHeight - scrollbarYHeight,\n positionRatio = positionTop / maxPositionTop;\n\n if (positionRatio < 0) {\n positionRatio = 0;\n } else if (positionRatio > 1) {\n positionRatio = 1;\n }\n\n $this.scrollTop((contentHeight - containerHeight) * positionRatio);\n });\n\n $scrollbarX.bind('click' + eventClassName, stopPropagation);\n $scrollbarXRail.bind('click' + eventClassName, function (e) {\n var halfOfScrollbarLength = parseInt(scrollbarXWidth / 2, 10),\n positionLeft = e.pageX - $scrollbarXRail.offset().left - halfOfScrollbarLength,\n maxPositionLeft = containerWidth - scrollbarXWidth,\n positionRatio = positionLeft / maxPositionLeft;\n\n if (positionRatio < 0) {\n positionRatio = 0;\n } else if (positionRatio > 1) {\n positionRatio = 1;\n }\n\n $this.scrollLeft((contentWidth - containerWidth) * positionRatio);\n });\n };\n\n // bind mobile touch handler\n var bindMobileTouchHandler = function () {\n var applyTouchMove = function (differenceX, differenceY) {\n if(isNaN(differenceY) || differenceY == NaN || !differenceY) {\n return;\n }\n $this.scrollTop($this.scrollTop() - differenceY);\n $this.scrollLeft($this.scrollLeft() - differenceX);\n\n // update bar position\n updateBarSizeAndPosition();\n };\n\n var startCoords = {},\n startTime = 0,\n speed = {},\n breakingProcess = null,\n inGlobalTouch = false;\n\n $(window).bind(\"touchstart\" + eventClassName, function (e) {\n inGlobalTouch = true;\n });\n $(window).bind(\"touchend\" + eventClassName, function (e) {\n inGlobalTouch = false;\n });\n\n $this.bind(\"touchstart\" + eventClassName, function (e) {\n var touch = e.originalEvent.targetTouches[0];\n\n startCoords.pageX = touch.pageX;\n startCoords.pageY = touch.pageY;\n\n startTime = (new Date()).getTime();\n\n if (breakingProcess !== null) {\n clearInterval(breakingProcess);\n }\n\n e.stopPropagation();\n });\n $this.bind(\"touchmove\" + eventClassName, function (e) {\n if (!inGlobalTouch && e.originalEvent.targetTouches.length === 1) {\n var touch = e.originalEvent.targetTouches[0];\n\n var currentCoords = {};\n currentCoords.pageX = touch.pageX;\n currentCoords.pageY = touch.pageY;\n\n var differenceX = currentCoords.pageX - startCoords.pageX,\n differenceY = currentCoords.pageY - startCoords.pageY;\n\n applyTouchMove(differenceX, differenceY);\n startCoords = currentCoords;\n\n var currentTime = (new Date()).getTime();\n\n var timeGap = currentTime - startTime;\n if (timeGap > 0) {\n speed.x = differenceX / timeGap;\n speed.y = differenceY / timeGap;\n startTime = currentTime;\n }\n\n e.preventDefault();\n }\n });\n $this.bind(\"touchend\" + eventClassName, function (e) {\n clearInterval(breakingProcess);\n breakingProcess = setInterval(function () {\n if (Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {\n clearInterval(breakingProcess);\n return;\n }\n\n applyTouchMove(speed.x * 30, speed.y * 30);\n\n speed.x *= 0.8;\n speed.y *= 0.8;\n }, 10);\n });\n };\n\n var bindScrollHandler = function () {\n $this.bind('scroll' + eventClassName, function (e) {\n updateBarSizeAndPosition();\n });\n };\n\n var destroy = function () {\n $this.unbind(eventClassName);\n $(window).unbind(eventClassName);\n $(document).unbind(eventClassName);\n $this.data('perfect-scrollbar', null);\n $this.data('perfect-scrollbar-update', null);\n $this.data('perfect-scrollbar-destroy', null);\n $scrollbarX.remove();\n $scrollbarY.remove();\n $scrollbarXRail.remove();\n $scrollbarYRail.remove();\n\n // clean all variables\n $scrollbarXRail =\n $scrollbarYRail =\n $scrollbarX =\n $scrollbarY =\n scrollbarXActive =\n scrollbarYActive =\n containerWidth =\n containerHeight =\n contentWidth =\n contentHeight =\n scrollbarXWidth =\n scrollbarXLeft =\n scrollbarXBottom =\n isScrollbarXUsingBottom =\n scrollbarXTop =\n scrollbarYHeight =\n scrollbarYTop =\n scrollbarYRight =\n isScrollbarYUsingRight =\n scrollbarYLeft =\n isRtl =\n eventClassName = null;\n };\n\n var ieSupport = function (version) {\n $this.addClass('ie').addClass('ie' + version);\n\n var bindHoverHandlers = function () {\n var mouseenter = function () {\n $(this).addClass('hover');\n };\n var mouseleave = function () {\n $(this).removeClass('hover');\n };\n $this.bind('mouseenter' + eventClassName, mouseenter).bind('mouseleave' + eventClassName, mouseleave);\n $scrollbarXRail.bind('mouseenter' + eventClassName, mouseenter).bind('mouseleave' + eventClassName, mouseleave);\n $scrollbarYRail.bind('mouseenter' + eventClassName, mouseenter).bind('mouseleave' + eventClassName, mouseleave);\n $scrollbarX.bind('mouseenter' + eventClassName, mouseenter).bind('mouseleave' + eventClassName, mouseleave);\n $scrollbarY.bind('mouseenter' + eventClassName, mouseenter).bind('mouseleave' + eventClassName, mouseleave);\n };\n\n var fixIe6ScrollbarPosition = function () {\n updateScrollbarCss = function () {\n var scrollbarXStyles = {left: scrollbarXLeft + $this.scrollLeft(), width: scrollbarXWidth};\n if (isScrollbarXUsingBottom) {\n scrollbarXStyles.bottom = scrollbarXBottom;\n } else {\n scrollbarXStyles.top = scrollbarXTop;\n }\n $scrollbarX.css(scrollbarXStyles);\n\n var scrollbarYStyles = {top: scrollbarYTop + $this.scrollTop(), height: scrollbarYHeight};\n if (isScrollbarYUsingRight) {\n scrollbarYStyles.right = scrollbarYRight;\n } else {\n scrollbarYStyles.left = scrollbarYLeft;\n }\n\n $scrollbarY.css(scrollbarYStyles);\n $scrollbarX.hide().show();\n $scrollbarY.hide().show();\n };\n };\n\n if (version === 6) {\n bindHoverHandlers();\n fixIe6ScrollbarPosition();\n }\n };\n\n var supportsTouch = (('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch);\n\n var initialize = function () {\n var ieMatch = navigator.userAgent.toLowerCase().match(/(msie) ([\\w.]+)/);\n if (ieMatch && ieMatch[1] === 'msie') {\n // must be executed at first, because 'ieSupport' may addClass to the container\n ieSupport(parseInt(ieMatch[2], 10));\n }\n\n updateBarSizeAndPosition();\n bindScrollHandler();\n bindMouseScrollXHandler();\n bindMouseScrollYHandler();\n bindRailClickHandler();\n if (supportsTouch) {\n bindMobileTouchHandler();\n }\n if ($this.mousewheel) {\n bindMouseWheelHandler();\n }\n if (settings.useKeyboard) {\n bindKeyboardHandler();\n }\n $this.data('perfect-scrollbar', $this);\n $this.data('perfect-scrollbar-update', updateBarSizeAndPosition);\n $this.data('perfect-scrollbar-destroy', destroy);\n };\n\n // initialize\n initialize();\n\n return $this;\n });\n };\n}));\n","/*!\n * \n * Modern HTML5 Responsive Youtube Playlist Player\n * For jQuery 1.9 and above\n * \n * @author Rik de Vos\n * @link http://rikdevos.com/\n * @version 1.7.0\n *\n * This is not free software. Visit http://codecanyon.net/item/modern-html5-responsive-youtube-playlist-player/8619272?ref=RikdeVos to purchase a license\n * \n */\n\n(function($){\n\t$.youtube_video = function(el, options){\n\t\t// To avoid scope issues, use 'base' instead of 'this'\n\t\t// to reference this class from internal events and functions.\n\t\tvar base = this;\n\t\t\n\t\t// Access to jQuery and DOM versions of element\n\t\t// base.$el = $(\"\").appendTo($(el));\n\t\tbase.$el = $(el);\n\t\tbase.el = el;\n\t\t\n\t\t// Add a reverse reference to the DOM object\n\t\tbase.$el.data(\"youtube_video\", base);\n\t\t\n\t\tbase.init = function(){\n\t\t\tbase.options = $.extend({},$.youtube_video.defaultOptions, options);\n\t\t\tbase.options_copy = $.extend({},$.youtube_video.defaultOptions, options);\n\t\t\tbase.api_key = base.options.api_key;\n\t\t\tbase.$el.addClass('yesp');\n\t\t\tbase.$logo = [];\n\t\t\tbase.type = false;\n\n\t\t\tif(base.options.playlist !== false) {\n\t\t\t\t// this is a playlist\n\t\t\t\tbase.id = 'yt_player_'+base.options.playlist.replace(/[^a-z0-9]/ig,'');\n\t\t\t\tbase.type = 'playlist';\n\t\t\t}else if(base.options.channel !== false) {\n\t\t\t\t// this is a channel\n\t\t\t\tbase.id = 'yt_player_'+base.options.channel.replace(/[^a-z0-9]/ig,'');\n\t\t\t\tbase.type = 'channel';\n\t\t\t}else if(base.options.user !== false) {\n\t\t\t\t// this is a user\n\t\t\t\tbase.id = 'yt_player_'+base.options.user.replace(/[^a-z0-9]/ig,'');\n\t\t\t\tbase.type = 'user';\n\t\t\t}else if(base.options.videos !== false) {\n\t\t\t\t// this is a video(s)\n\t\t\t\tif(typeof(base.options.videos) == 'string') {\n\t\t\t\t\tbase.options.videos = [base.options.videos];\n\t\t\t\t}\n\t\t\t\tbase.id = 'yt_player_'+base.options.videos[0].replace(/[^a-z0-9]/ig,'');\n\t\t\t\tbase.type = 'videos';\n\t\t\t}else {\n\t\t\t\tbase.display_error('No playlist/channel/user/videos entered. Set at least 1.', true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If we had an id ready, use that one\n\t\t\tif(typeof(base.options.player_id) !== typeof(undefined) && base.options.player_id !== false) {\n\t\t\t\tbase.id = base.options.player_id;\n\t\t\t}\n\n\t\t\tif(typeof base.$el.attr('id') !== typeof undefined && base.$el.attr('id') !== false) {\n\t\t\t\t// we already have an id attr on the $el, so use it\n\t\t\t\tbase.id = base.$el.attr('id');\n\t\t\t}else {\n\t\t\t\t// use the generated id\n\t\t\t\tbase.$el.attr('id', base.id);\n\t\t\t}\n\n\t\t\tif(base.options.max_results > 50) {\n\t\t\t\tbase.options.max_results = 50;\n\t\t\t}\n\t\t\t\n\n\t\t\t// Globals\n\t\t\tbase.$controls = [];\n\t\t\tbase.$title = null;\n\t\t\tbase.$container = base.$el.find('.yesp-container');\n\t\t\tbase.youtube = null;\n\t\t\tbase.playlist_items = [];\n\t\t\tbase.playlist_count = 0;\n\t\t\tbase.info = {\n\t\t\t\t'width': 0,\n\t\t\t\t'height': 0,\n\t\t\t\t'duration': 0,\n\t\t\t\t'current_time': 0,\n\t\t\t\t'previous_time': 0,\n\t\t\t\t'volume': base.options.volume,\n\t\t\t\t'time_drag': false,\n\t\t\t\t'volume_drag': false,\n\t\t\t\t'ie': base.detect_ie(),\n\t\t\t\t'ie_previous_time': 0,\n\t\t\t\t'touch': base.detect_touch(),\n\t\t\t\t'youtube_loaded': false,\n\t\t\t\t'ios': ( navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ? true : false ),\n\t\t\t\t'mobile': ( navigator.userAgent.match(/(Android|webOS|iPad|iPhone|iPod|BlackBerry|Windows Phone)/g) ? true : false ),\n\t\t\t\t'ipad': ( navigator.userAgent.match(/(iPad)/g) ? true : false ),\n\t\t\t\t'state': false,\n\t\t\t\t'index': 0,\n\t\t\t\t'hover': true,\n\t\t\t\t'fullscreen': false,\n\t\t\t\t'idle_time': 0,\n\t\t\t\t'idle_controls_hidden': false,\n\t\t\t\t'playlist_shown': true,\n\t\t\t\t'horizontal_playlist_shown': true,\n\t\t\t\t'playlist_width': 200,\n\t\t\t\t'playlist_animating': false,\n\t\t\t\t'first_play': false,\n\t\t\t\t'current_video_url': '',\n\t\t\t\t'next_page_token': false,\n\t\t\t\t'playlist_i': 0,\n\t\t\t\t'alternative_api_ready_check': false,\n\t\t\t\t'youtube_logo_timer': false,\n\t\t\t};\n\n\t\t\tif(base.info.ios) {\n\t\t\t\tbase.$el.addClass('yesp-ios');\n\t\t\t\tbase.options.volume_control = false;\n\t\t\t\tbase.options_copy.volume_control = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(base.info.mobile) {\n\t\t\t\tbase.options.show_controls_on_load = true;\n\t\t\t\tbase.options.show_controls_on_pause = true;\n\t\t\t\tbase.options.show_controls_on_play = true;\n\n\t\t\t\tbase.$el.addClass('yesp-mobile');\n\t\t\t}\n\n\t\t\tif(base.info.ie) {\n\t\t\t\t// base.options.fullscreen_control = false;\n\t\t\t\tbase.$el.addClass('yesp-ie');\n\t\t\t}\n\n if (!base.$el[0].requestFullScreen && !base.$el[0].mozRequestFullScreen && !base.$el[0].webkitRequestFullScreen && !base.$el[0].webkitSupportsFullscreen) {\n\t\t\t\tbase.options.fullscreen_control = false;\n\t\t\t}\n\n\n\t\t\tbase.create_player_element();\n\n\t\t\t// base.playlist_items = null;\n\t\t\t// base.playlist_count = 0;\n\n\t\t\tbase.init_playlist();\n\n\t\t\tbase.create_controls();\n\t\t\tbase.create_title();\n\t\t\tbase.create_overlays();\n\t\t\tbase.show_controls();\n\t\t\tbase.bind_controls();\n\t\t\t\n\t\t\t$(window).on('resize', base.resize);\n\t\t\tbase.resize();\n\n\t\t\tbase.init_time_slider();\n\t\t\tbase.init_volume_slider();\n\n\t\t\tbase.set_style();\n\n\t\t\tif(base.options.width !== false) {\n\t\t\t\tbase.$el.css('width', base.options.width);\n\t\t\t\tbase.resize();\n\t\t\t}\n\n\t\t\tif(!base.options.show_controls_on_load) {\n\t\t\t\tbase.hide_controls();\n\t\t\t}\n\n\t\t\tif(base.options.playlist_type === 'horizontal') {\n\t\t\t\tbase.hide_playlist(true);\n\t\t\t\t//base.options.show_playlist = false;\n\n\t\t\t\tif(!base.options.show_playlist) {\n\t\t\t\t\tbase.hide_horizontal_playlist();\n\t\t\t\t}else {\n\t\t\t\t\tbase.show_horizontal_playlist();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// base.info.horizontal_playlist_shown = true;\n\t\t\t}else {\n\t\t\t\t// it's vertical\n\t\t\t\tbase.hide_horizontal_playlist();\n\t\t\t\tif(!base.options.show_playlist) {\n\t\t\t\t\tbase.hide_playlist(true);\n\t\t\t\t}\n\t\t\t\t// base.info.horizontal_playlist_shown = false;\n\t\t\t}\n\n\t\t\tdocument.addEventListener(\"fullscreenchange\", function () {\n\t\t\t\tif(!document.fullscreen) {\n\t\t\t\t\tbase.exit_fullscreen();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\t \n\t\t\tdocument.addEventListener(\"mozfullscreenchange\", function () {\n\t\t\t\tif(!document.mozFullScreen) {\n\t\t\t\t\tbase.exit_fullscreen();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\t \n\t\t\tdocument.addEventListener(\"webkitfullscreenchange\", function () {\n\t\t\t\tif(!document.webkitIsFullScreen) {\n\t\t\t\t\tbase.exit_fullscreen();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t\t \n\t\t\tdocument.addEventListener(\"msfullscreenchange\", function () {\n\t\t\t\tif(!document.msFullscreenElement) {\n\t\t\t\t\tbase.exit_fullscreen();\n\t\t\t\t}\n\t\t\t}, false);\n\n\t\t\tsetInterval(function() {\n\t\t\t\tif(base.info.mobile) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tbase.info.idle_time += 500;\n\t\t\t\tif(base.info.fullscreen && base.info.idle_time > 2000) {\n\t\t\t\t\tbase.info.idle_controls_hidden = true;\n\t\t\t\t\tbase.hide_controls(true);\n\t\t\t\t}\n\t\t\t}, 500);\n\n\t\t\tbase.$el.mousemove(function (e) {\n\t\t\t\tbase.info.idle_time = 0;\n\t\t\t\tif(base.info.idle_controls_hidden && base.info.fullscreen) {\n\t\t\t\t\tbase.info.idle_controls_hidden = false;\n\t\t\t\t\tbase.show_controls();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tbase.$el.keypress(function (e) {\n\t\t\t\tbase.info.idle_time = 0;\n\t\t\t\tif(base.info.idle_controls_hidden && base.info.fullscreen) {\n\t\t\t\t\tbase.info.idle_controls_hidden = false;\n\t\t\t\t\tbase.show_controls();\n\t\t\t\t}\n\t\t\t});\n\t\t\n\t\t\tif(base.info.touch) {\n\t\t\t\tbase.$el.addClass('yesp-touch');\n\t\t\t}\n\n\t\t\tsetTimeout(function() {\n\t\t\t\tbase.info.alternative_api_ready_check = true;\n\t\t\t}, 1000);\n\n\t\t};\n\n\t\tbase.display_error = function(message, remove_player) {\n\t\t\tvar $error = base.$el.find('.yesp-error').html(''+message).slideDown();\n\t\t\tif($error.length === 0) {\n\t\t\t\talert(message);\n\t\t\t}\n\t\t\tif(remove_player === true) {\n\t\t\t\tbase.$el.find('.yesp-video').remove();\n\t\t\t\tbase.$el.find('.yesp-container, .yesp-hp').css('background-image', 'none');\n\t\t\t}\n\t\t};\n\n\t\tbase.remove_next_page = function() {\n\t\t\tbase.info.next_page_token = false;\n\t\t\tbase.$el.find('.yesp-next-page').remove();\n\t\t\tbase.$el.find('.yesp-hp-next-page').remove();\n\t\t\tbase.$el.find('.yesp-hp-videos').css('width', (base.playlist_count)*160);\n\t\t};\n\n\t\tbase.get_playlist_next = function() {\n\t\t\tif(base.info.next_page_token === false) {\n\t\t\t\tbase.remove_next_page();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tbase.$el.find('.yesp-next-page').html('');\n\t\t\tbase.get_playlist(base.info.next_page_token, base.options.playlist);\n\t\t};\n\n\t\tbase.get_playlist = function(pageToken, playlist) {\n\t\t\tif(typeof(pageToken) === typeof(undefined) || pageToken === false) {\n\t\t\t\tpageToken = false;\n\t\t\t\tthrough_pagination = false;\n\t\t\t}else {\n\t\t\t\tthrough_pagination = true;\n\t\t\t}\n\n\t\t\tvar url = 'https://www.googleapis.com/youtube/v3/playlistItems?part=snippet,status&maxResults='+base.options.max_results+'&playlistId='+playlist+'&key='+base.options.api_key;\n\n\t\t\tif(through_pagination === true) {\n\t\t\t\turl += '&pageToken='+pageToken;\n\t\t\t}\n\n\t\t\tvar r = $.getJSON(url, function(yt) {\n\t\t\t\tif(typeof(yt.items) !== 'undefined') {\n\t\t\t\t\tif(yt.items.length === 0) {\n\t\t\t\t\t\tbase.display_error('This playlist is empty.', true);\n\t\t\t\t\t}\n\n\t\t\t\t\tif(base.options.shuffle) {\n\t\t\t\t\t\tyt.items = base.shuffle_array(yt.items);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar filtered_items = base.create_playlist(through_pagination, yt.items, yt.items.length);\n\n\t\t\t\t\tbase.playlist_items = base.playlist_items.concat(filtered_items.items);\n\t\t\t\t\tbase.playlist_count += filtered_items.count;\n\n\t\t\t\t\tif(base.options.pagination === true) {\n\t\t\t\t\t\tif(typeof(yt.nextPageToken) === typeof(undefined)) {\n\t\t\t\t\t\t\tbase.remove_next_page();\n\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\tbase.info.next_page_token = yt.nextPageToken;\n\t\t\t\t\t\t\tbase.$el.find('.yesp-next-page').html(''+base.options.load_more_text).show();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//base.set_playlist_width(base.info.playlist_width);\n\t\t\t\t\t}else {\n\t\t\t\t\t\tbase.info.next_page_token = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(base.playlist_count < 2 && !through_pagination && base.info.next_page_token === false) {\n\t\t\t\t\t\tbase.hide_playlist(true);\n\t\t\t\t\t\tbase.options.show_playlist = false;\n\n\t\t\t\t\t\tbase.options.playlist_toggle_control = false;\n\t\t\t\t\t\tbase.$controls['playlist_toggle'].hide();\n\n\t\t\t\t\t\tbase.options.fwd_bck_control = false;\n\t\t\t\t\t\tbase.options_copy.fwd_bck_control = false;\n\t\t\t\t\t\tbase.$controls['forward'].hide();\n\t\t\t\t\t\tbase.$controls['backward'].hide();\n\n\t\t\t\t\t\tbase.resize();\n\t\t\t\t\t\tif(base.playlist_count === 0) {\n\t\t\t\t\t\t\tbase.display_error('This playlist is empty.', true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}else {\n\t\t\t\t\tbase.display_error('An error occured while retrieving the playlist.', true);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tr.fail(function(data) {\n\t\t\t\tvar error = 'An error occured while retrieving the playlist.';\n\t\t\t\tif(typeof(data.responseText) !== typeof(undefined)) {\n\t\t\t\t\tvar message = $.parseJSON(data.responseText);\n\t\t\t\t\tif(message.error.code == '404') {\n\t\t\t\t\t\terror = 'The playlist was not found.';\n\t\t\t\t\t}else if(message.error.code == '403') {\n\t\t\t\t\t\terror = message.error.message;\n\t\t\t\t\t}else if(message.error.code == '400') {\n\t\t\t\t\t\terror = 'The API key you have entered is invalid.';\n\t\t\t\t\t}else {\n\t\t\t\t\t\t\n\t\t\t\t\t\terror = 'An error occured while retrieving the playlist.
'+message.error.message+'';\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t\tbase.display_error(error, true);\n\t\t\t\tbase.hide_playlist(true);\n\t\t\t});\n\t\t};\n\n\t\tbase.get_channel = function(type, source) {\n\t\t\tvar url = '';\n\t\t\tif(type === 'user') {\n\t\t\t\turl = 'https://www.googleapis.com/youtube/v3/channels?part=contentDetails&maxResults='+base.options.max_results+'&forUsername='+encodeURIComponent(source)+'&key='+base.api_key;\n\t\t\t}else {\n\t\t\t\turl = 'https://www.googleapis.com/youtube/v3/channels?part=contentDetails&maxResults='+base.options.max_results+'&id='+source+'&key='+base.api_key;\n\t\t\t}\n\n\t\t\t$.getJSON(url, function(yt) {\n\t\t\t\tif(typeof(yt.items) !== undefined && yt.items.length == 1) {\n\t\t\t\t\tvar upload_playlist = yt.items[0].contentDetails.relatedPlaylists.uploads;\n\t\t\t\t\tbase.options.playlist = upload_playlist;\n\t\t\t\t\tbase.get_playlist(false, base.options.playlist);\n\t\t\t\t}else {\n\t\t\t\t\tbase.display_error('An error occured while retrieving the channel/user.', true);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tbase.get_videos = function(videos) {\n\t\t\tvar vid_list = '',\n\t\t\tl = videos.length;\n\n\t\t\tfor(var i = 0; i < l; i++) {\n\t\t\t\tif(i !== l-1) {\n\t\t\t\t\tvid_list += videos[i]+',';\n\t\t\t\t}else {\n\t\t\t\t\tvid_list += videos[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar url = 'https://www.googleapis.com/youtube/v3/videos?part=snippet,status&maxResults='+base.options.max_results+'&id='+vid_list+'&key='+base.api_key;\n\n\n\t\t\t$.getJSON(url, function(yt) {\n\t\t\t\tif(typeof(yt.items) !== 'undefined') {\n\t\t\t\t\t// we have results\n\t\t\t\t\t// set the video id\n\t\t\t\t\tfor(var i = 0; i < yt.items.length; i++) {\n\t\t\t\t\t\tyt.items[i].snippet.resourceId = { videoId: yt.items[i].id };\n\t\t\t\t\t}\n\t\t\t\t\tvar filtered_items = base.create_playlist(false, yt.items, yt.items.length);\n\t\t\t\t\t\n\t\t\t\t\tbase.playlist_items = base.playlist_items.concat(filtered_items.items);\n\t\t\t\t\tbase.playlist_count += filtered_items.count;\n\n\t\t\t\t\tif(base.playlist_count < 2) {\n\t\t\t\t\t\tbase.hide_playlist(true);\n\t\t\t\t\t\tbase.options.show_playlist = false;\n\n\t\t\t\t\t\tbase.options.playlist_toggle_control = false;\n\t\t\t\t\t\tbase.$controls['playlist_toggle'].hide();\n\n\t\t\t\t\t\tbase.options.fwd_bck_control = false;\n\t\t\t\t\t\tbase.options_copy.fwd_bck_control = false;\n\t\t\t\t\t\tbase.$controls['forward'].hide();\n\t\t\t\t\t\tbase.$controls['backward'].hide();\n\n\t\t\t\t\t\tbase.resize();\n\t\t\t\t\t\tif(base.playlist_count === 0) {\n\t\t\t\t\t\t\tbase.display_error('This playlist is empty, or the video\\'s were not found.', true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\n\t\t\t\t}else {\n\t\t\t\t\tbase.display_error('An error occured while retrieving the video(s).', true);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn;\n\t\t};\n\n\t\tbase.init_playlist = function() {\n\n\t\t\tif(base.type === 'playlist') {\n\t\t\t\tbase.get_playlist(false, base.options.playlist);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(base.type == 'channel') {\n\t\t\t\tbase.get_channel('channel', base.options.channel);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(base.type == 'user') {\n\t\t\t\tbase.get_channel('user', base.options.user);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(base.type == 'videos') {\n\t\t\t\tbase.get_videos(base.options.videos);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t};\n\t\t\n\t\tbase.create_playlist = function(through_pagination, items, count) {\n\t\t\tif(!through_pagination) {\n\t\t\t\tbase.create_youtube_element();\n\t\t\t}\n\t\t\t\n\t\t\tvar i = 0;\n\t\t\twhile(typeof(items[i]) !== 'undefined') {\n\t\t\t\t// Remove 'private' video\n\t\t\t\tif(items[i].status.privacyStatus == 'private') {\n\t\t\t\t\titems.splice(i, 1);\n\t\t\t\t\tcount--;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Remove 'deleted' video\n\t\t\t\tif(typeof(items[i].snippet.thumbnails) == typeof(undefined)) {\n\t\t\t\t\titems.splice(i, 1);\n\t\t\t\t\tcount--;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tbase.options.on_done_loading(items);\n\t\t\t\n\n\t\t\tfor(base.info.playlist_i; base.info.playlist_i < base.playlist_count+count; base.info.playlist_i++) {\n\t\t\t\tvar video = items[base.info.playlist_i-base.playlist_count],\n\t\t\t\t\timg_src = '';\n\n\t\t\t\t// Order: 16/9 medium, 4/3 medium, 4/3 high, 4/3 default\n\t\t\t\tif(typeof(video.snippet.thumbnails.medium) !== 'undefined' && video.snippet.thumbnails.medium.width/video.snippet.thumbnails.medium.height == 16/9) {\n\t\t\t\t\timg_src = video.snippet.thumbnails.medium.url;\n\t\t\t\t}else if(typeof(video.snippet.thumbnails.medium) !== 'undefined') {\n\t\t\t\t\timg_src = video.snippet.thumbnails.medium.url;\n\t\t\t\t}else if(typeof(video.snippet.thumbnails.high) !== 'undefined') {\n\t\t\t\t\timg_src = video.snippet.thumbnails.high.url;\n\t\t\t\t}else if(typeof(video.snippet.thumbnails.default) !== 'undefined') {\n\t\t\t\t\timg_src = video.snippet.thumbnails.default.url;\n\t\t\t\t}\n\n\t\t\t\tvar title = video.snippet.title;\n\n\t\t\t\tif (video.snippet.title.length > 85) {\n\t\t\t\t\tvideo.snippet.title = video.snippet.title.substr(0,85)+'...';\n\t\t\t\t}\n\n\t\t\t\tif (video.snippet.channelTitle.length > 20) {\n\t\t\t\t\tvideo.snippet.channelTitle = video.snippet.channelTitle.substr(0,20)+'...';\n\t\t\t\t}\n\n\t\t\t\t// Vertical video\n\t\t\t\tvar $video = $('
'+video.snippet.title+'
'+video.snippet.channelTitle+'
'+base.options.now_playing_text+'
');\n\n\t\t\t\t$video.click(function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tif(!base.options.show_controls_on_play) {\n\t\t\t\t\t\tbase.hide_controls();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tbase.play_video(parseFloat($(this).attr('data-index')));\n\t\t\t\t});\n\t\t\t\tif(base.options.show_channel_in_playlist == false) {\n\t\t\t\t\t$video.find('.yesp-playlist-channel').remove();\n\t\t\t\t}\n\t\t\t\t$video.insertBefore(base.$el.find('.yesp-playlist .yesp-next-page'));\n\t\t\t\tbase.$el.find('.yesp-playlist, .yesp-hp').css('background-image', 'none');\n\n\t\t\t\t// Horizontal video\n\t\t\t\tvar video_title = video.snippet.title;\n\n\t\t\t\tif(video_title.length > 45) {\n\t\t\t\t\tvideo_title = video.snippet.title.substring(0, 45) + '...';\n\t\t\t\t}\n\n\t\t\t\tvar $video_hp = $('
'+video_title+'
'+video.snippet.channelTitle+'
'+base.options.now_playing_text+'
');\n\n\t\t\t\t$video_hp.click(function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tif(!base.options.show_controls_on_play) {\n\t\t\t\t\t\tbase.hide_controls();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tbase.play_video(parseFloat($(this).attr('data-index')));\n\t\t\t\t});\n\t\t\t\tif(base.options.show_channel_in_playlist == false) {\n\t\t\t\t\t$video_hp.find('.yesp-hp-channel').remove();\n\t\t\t\t}\n\t\t\t\t$video_hp.insertBefore(base.$el.find('.yesp-hp .yesp-hp-next-page'));\n\n\t\t\t}\n\n\t\t\tbase.$el.find('.yesp-hp-videos').css('width', (base.info.playlist_i)*160+50);\n\n\t\t\tif(through_pagination === false) {\n\t\t\t\tbase.$el.find('.yesp-playlist').perfectScrollbar({\n\t\t\t\t\t'suppressScrollX': true\n\t\t\t\t});\n\n\t\t\t\tbase.$el.find('.yesp-hp').perfectScrollbar({\n\t\t\t\t\t'suppressScrollY': true,\n\t\t\t\t\t'useBothWheelAxes': true\n\t\t\t\t});\n\t\t\t\tbase.resize(false, true);\n\t\t\t}\n\n\t\t\tif(through_pagination === true) {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tbase.update_scroll_position(false, Math.floor(base.info.playlist_width/16*9)*(base.playlist_count-count));\n\t\t\t\t}, 10);\n\t\t\t\t\n\t\t\t\t// base.update_scroll_position\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t'items': items,\n\t\t\t\t'count': count,\n\t\t\t};\n\t\t\t// base.set_playlist_width(100);\n\t\t\t// base.create_youtube_element();\n\t\t};\n\n\t\tbase.check_youtube_api_ready = function() {\n\t\t\tif(!base.info.alternative_api_ready_check) {\n\t\t\t\tif(!$('body').hasClass('yesp-youtube-iframe-ready')) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\t// YT not an object\n\t\t\t\tif(typeof(YT) !== typeof({})) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// YT not loaded\n\t\t\t\tif(YT.loaded == 0) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// It's loaded!\n\t\t\treturn true;\n\t\t};\n\t\t\n\t\tbase.create_youtube_element = function() {\n\t\t\t// If youtube isn't ready, try again in 10ms\n\t\t\tif(!base.check_youtube_api_ready()) {\n\t\t\t\tsetTimeout(base.create_youtube_element, 10);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(base.info.youtube_loaded) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tbase.info.youtube_loaded = true;\n\n\t\t\tvar vars = {\n\t\t\t\t'controls': 0,\n\t\t\t\t'showinfo': 0,\n\t\t\t\t'fullscreen': 0,\n\t\t\t\t'iv_load_policy': base.options.show_annotations ? 1 : 3,\n\t\t\t\t'fs': 0,\n\t\t\t\t// height: 390,\n\t\t\t\t// width: 640,\n\t\t\t\t// 'vq': 'hd720', // will force hd video\n\t\t\t\t'wmode': 'opaque'\n\t\t\t};\n\n\t\t\tif(base.options.force_hd) {\n\t\t\t\tvars.vq = 'hd720';\n\t\t\t}\n\n\t\t\tif(base.options.hide_youtube_logo) {\n\t\t\t\tvars.modestbranding = 1;\n\t\t\t}\n\n\t\t\tfor(var i in base.options.player_vars) {\n\t\t\t\tvars[i] = base.options.player_vars[i];\n\t\t\t}\n\n\t\t\t// Force HTTPS, otherwise it will randomly return errors\n\t\t\twindow.YTConfig = {\n\t\t\t\t'host': 'https://www.youtube.com'\n\t\t\t};\n\n\t\t\tbase.youtube = new YT.Player(base.id+'_yt', {\n\t\t\t\t// fullscreen: 0,\n\t\t\t\t// iv_load_policy: 3,\n\t\t\t\t// fs: 0,\n\t\t\t\t// videoId: base.playlist_items[0].snippet.resourceId.videoId,\n\t\t\t\tplayerVars: vars,\n\t\t\t\tevents: {\n\t\t\t\t\t'onReady': base.youtube_ready,\n\t\t\t\t\t'onStateChange': base.youtube_state_change\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t\n\n\t\t};\n\n\t\tbase.youtube_ready = function() {\n\t\t\tsetInterval(base.youtube_player_updates, 500);\n\t\t\t// Load first video\n\t\t\tif(base.playlist_count == 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tbase.play_video(base.options.first_video, !base.options.autoplay, true);\n\t\t\tif(base.options.volume !== false) {\n\t\t\t\tbase.update_volume(0, base.options.volume);\n\t\t\t}\n\t\t\t\n\t\t\tbase.$el.find('.yesp-container').hover(function() {\n\t\t\t\tbase.info.hover = true;\n\t\t\t\tbase.show_controls();\n\t\t\t}, function() {\n\t\t\t\tbase.info.hover = false;\n\t\t\t\tvar s = base.youtube.getPlayerState();\n\t\t\t\tif(base.options.show_controls_on_pause && (s == -1 || s == 0 || s == 2 || s == 5)) {\n\t\t\t\t\t// do not hide\n\t\t\t\t}else if(base.options.show_controls_on_play) {\n\t\t\t\t\t// do not hide\n\t\t\t\t}else {\n\t\t\t\t\tbase.hide_controls();\n\t\t\t\t}\n\t\t\t\tbase.hide_share();\n\t\t\t});\n\t\t}\n\n\t\tbase.youtube_player_updates = function() {\n\t\t\tbase.info.current_time = base.youtube.getCurrentTime();\n\n\t\t\tif(!base.youtube.getCurrentTime()) {\n\t\t\t\tbase.info.current_time = 0;\n\t\t\t}\n\n\t\t\tbase.info.duration = base.youtube.getDuration();\n\n\t\t\tif(!base.info.duration) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(base.info.current_time == base.info.previous_time) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tbase.info.previous_time = base.info.current_time;\n\n\t\t\tif(base.options.time_indicator == 'full') {\n\t\t\t\tbase.$controls['time'].html(base.format_time(base.info.current_time)+' / '+base.format_time(base.info.duration));\n\t\t\t}else {\n\t\t\t\tbase.$controls['time'].html(base.format_time(base.info.current_time));\n\t\t\t}\n\n\t\t\tvar s = Math.round(base.info.current_time);\n\t\t\tif(s == 0) {\n\t\t\t\tbase.$controls['youtube'].attr('href', base.$controls['youtube'].attr('data-href'));\n\t\t\t}else {\n\t\t\t\tbase.$controls['youtube'].attr('href', base.$controls['youtube'].attr('data-href')+'#t='+s);\n\t\t\t}\n\n\t\t\tbase.info.current_video_url = base.$controls['youtube'].attr('data-href');\n\n\t\t\tvar perc = 100 * base.info.current_time / base.info.duration;\n\t\t\tbase.$controls['time_bar_time'].css('width',perc+'%');\n\t\t\tbase.$controls['time_bar_buffer'].css('width', base.youtube.getVideoLoadedFraction()*100+'%');\n\n\t\t\tbase.options.on_time_update(base.info.current_time);\n\n\t\t};\n\n\t\tbase.youtube_state_change = function(e) {\n\t\t\tvar state = e.data;\n\t\t\tif(state == 0) {\n\t\t\t\t// ended\n\t\t\t\tif(base.options.continuous) {\n\t\t\t\t\t// load next video\n\t\t\t\t\tbase.forward();\n\t\t\t\t}else {\n\t\t\t\t\tbase.play_video(base.info.index, true);\n\t\t\t\t\tbase.$controls['play'].removeClass('yesp-icon-play').removeClass('yesp-icon-pause').addClass('yesp-icon-undo');\n\t\t\t\t\tbase.show_controls();\n\t\t\t\t}\n\t\t\t}else if(state == 1 || state == 3) {\n\t\t\t\t// playing or buffering\n\t\t\t\tbase.$controls['play'].removeClass('yesp-icon-play').addClass('yesp-icon-pause').removeClass('yesp-icon-undo');\n\t\t\t}else if(state == 2) {\n\t\t\t\t// paused\n\t\t\t\tbase.$controls['play'].addClass('yesp-icon-play').removeClass('yesp-icon-pause').removeClass('yesp-icon-undo');\n\t\t\t}\n\n\t\t\tif(!base.info.first_play && state !== -1 && state !== 5) {\n\t\t\t\tbase.info.first_play = true;\n\t\t\t}\n\n\t\t\tbase.youtube_player_updates();\n\t\t\tbase.options.on_state_change(state);\n\t\t};\n\n\t\tbase.create_player_element = function() {\n\t\t\tbase.$el.css('width', '100%').addClass('yesp').html('');\n\t\t\t\n\t\t\tbase.$el.find('.yesp-video-container').click(function(e) {\n\t\t\t\tbase.play_pause();\n\t\t\t});\n\n\t\t\tif(base.options.playlist_type == \"horizontal\") {\n\t\t\t\tbase.$el.find('.yesp-playlist').remove();\n\t\t\t}\n\n\t\t\tbase.$el.find('.yesp-next-page, .yesp-hp-next-page').click(function(e) {\n\t\t\t\tbase.get_playlist_next();\n\t\t\t});\n\n\t\t\tbase.$el.find('.yesp-autoposter').click(function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tbase.play();\n\t\t\t\t//base.$el.find('.yesp-autoposter').hide();\n\t\t\t});\n\n\t\t};\n\n\t\tbase.create_controls = function() {\n\t\t\tvar $controls = $('');\n\n\t\t\t$controls.html('');\n\n\t\t\tbase.$controls['play'] = $controls.find('.yesp-play');\n\t\t\tbase.$controls['time'] = $controls.find('.yesp-time');\n\t\t\tbase.$controls['time_bar'] = $controls.find('.yesp-bar');\n\t\t\tbase.$controls['time_bar_buffer'] = $controls.find('.yesp-bar-buffer');\n\t\t\tbase.$controls['time_bar_time'] = $controls.find('.yesp-bar-time');\n\t\t\tbase.$controls['volume'] = $controls.find('.yesp-volume');\n\t\t\tbase.$controls['volume_icon'] = $controls.find('.yesp-volume-icon');\n\t\t\tbase.$controls['volume_bar'] = $controls.find('.yesp-volume-bar');\n\t\t\tbase.$controls['volume_amount'] = $controls.find('.yesp-volume-amount');\n\t\t\tbase.$controls['share'] = $controls.find('.yesp-share');\n\t\t\tbase.$controls['youtube'] = $controls.find('.yesp-youtube');\n\t\t\tbase.$controls['forward'] = $controls.find('.yesp-forward');\n\t\t\tbase.$controls['backward'] = $controls.find('.yesp-backward');\n\t\t\tbase.$controls['playlist_toggle'] = $controls.find('.yesp-playlist-toggle');\n\t\t\tbase.$controls['fullscreen'] = $controls.find('.yesp-fullscreen');\n\n\t\t\tif(!base.options.play_control) {\n\t\t\t\tbase.$controls['play'].hide();\n\t\t\t}\n\n\t\t\tif(!base.options.time_indicator) {\n\t\t\t\tbase.$controls['time'].hide();\n\t\t\t}else if(base.options.time_indicator == 'full') {\n\t\t\t\tbase.$controls['time'].addClass('yesp-full-time');\n\t\t\t}\n\n\t\t\tif(!base.options.volume_control) {\n\t\t\t\tbase.$controls['volume'].hide();\n\t\t\t}\n\n\t\t\tif(!base.options.share_control) {\n\t\t\t\tbase.$controls['share'].hide();\n\t\t\t}\n\n\t\t\tif(!base.options.youtube_link_control) {\n\t\t\t\tbase.$controls['youtube'].hide();\n\t\t\t}\n\n\t\t\tif(!base.options.fwd_bck_control) {\n\t\t\t\tbase.$controls['backward'].hide();\n\t\t\t\tbase.$controls['forward'].hide();\n\t\t\t}\n\n\t\t\tif(!base.options.fullscreen_control) {\n\t\t\t\tbase.$controls['fullscreen'].hide();\n\t\t\t}\n\n\t\t\tif(!base.options.playlist_toggle_control) {\n\t\t\t\tbase.$controls['playlist_toggle'].hide();\n\t\t\t}\n\n\t\t\t$controls.appendTo(this.$el.find('.yesp-container'));\n\n\t\t\tbase.$logo = $('');\n\n\t\t\tbase.$logo.appendTo(this.$el.find('.yesp-container'));\n\n\t\t\tif(base.options.hide_youtube_logo || base.info.mobile) {\n\t\t\t\tbase.$logo.hide();\n\t\t\t\tbase.options.hide_youtube_logo = true;\n\t\t\t}\n\n\n\t\t};\n\n\t\tbase.create_title = function() {\n\t\t\tbase.$title = $('');\n\t\t\tbase.$title.html('');\n\n\t\t\tbase.$title.appendTo(base.$el.find('.yesp-container'));\n\t\t};\n\n\t\tbase.update_title = function(title, channel, channel_link) {\n\t\t\tif(base.options.show_channel_in_title) {\n\t\t\t\tbase.$title.find('div.yesp-title-wrapper').html(''+channel+''+title);\n\t\t\t}else {\n\t\t\t\tbase.$title.find('div.yesp-title-wrapper').html(title);\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t};\n\n\t\tbase.create_overlays = function() {\n\n\t\t\tbase.$social = $('')\n\t\t\t\t.appendTo(base.$el.find('.yesp-container'));\n\n\t\t\tbase.$social.find('.yesp-social-facebook').click(function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tbase.share_facebook();\n\t\t\t});\n\t\t\tbase.$social.find('.yesp-social-twitter').click(function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tbase.share_twitter();\n\t\t\t});\n\t\t\tbase.$social.find('.yesp-social-google').click(function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tbase.share_google();\n\t\t\t});\n\n\t\t};\n\n\t\tbase.share_link = function() {\n\n\t\t},\n\n\t\tbase.share_facebook = function() {\n\t\t\twindow.open('https://www.facebook.com/sharer/sharer.php?u='+base.share_url(), 'Share on Facebook', \"height=300,width=600\");\n\t\t},\n\n\t\tbase.share_twitter = function() {\n\t\t\twindow.open('https://twitter.com/home?status='+base.share_url(), 'Share on Twitter', \"height=300,width=600\");\n\t\t},\n\n\t\tbase.share_google = function() {\n\t\t\twindow.open('https://plus.google.com/share?url='+base.share_url(), 'Share on Google+', \"height=300,width=600\");\n\t\t},\n\n\t\tbase.bind_controls = function() {\n\n\t\t\tbase.$controls['play'].click(function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tbase.play_pause();\n\t\t\t});\n\n\t\t\tbase.$controls['volume_icon'].click(function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tif(base.youtube.isMuted()) {\n\t\t\t\t\t// unmute\n\t\t\t\t\tif(base.info.volume == 0) {\n\t\t\t\t\t\tbase.info.volume = base.options.volume;\n\t\t\t\t\t}\n\n\t\t\t\t\tbase.update_volume(0, base.info.volume);\n\t\t\t\t}else {\n\t\t\t\t\t// mute\n\t\t\t\t\tvar previous_vol = base.youtube.getVolume()/100;\n\t\t\t\t\tbase.update_volume(0, 0);\n\t\t\t\t\tbase.info.volume = previous_vol;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tbase.$controls['share'].click(function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tbase.toggle_share();\n\t\t\t});\n\n\t\t\tbase.$controls['youtube'].click(function(e) {\n\t\t\t\tbase.pause();\n\t\t\t});\n\n\t\t\tbase.$controls['backward'].click(function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tbase.backward();\n\t\t\t});\n\n\t\t\tbase.$controls['forward'].click(function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tbase.forward();\n\t\t\t});\n\n\t\t\tbase.$controls['fullscreen'].click(function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tif(base.info.fullscreen) {\n\t\t\t\t\t// exit fullscreen\n\t\t\t\t\tbase.exit_fullscreen(true);\n\t\t\t\t}else {\n\t\t\t\t\t// enter fullscreen\n\t\t\t\t\tbase.enter_fullscreen();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t});\n\n\t\t\tbase.$controls['playlist_toggle'].click(function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tbase.toggle_playlist();\n\t\t\t});\n\n\t\t};\n\n\t\tbase.show_controls = function() {\n\n\t\t\tbase.$title.stop().animate({\n\t\t\t\t'opacity': 1\n\t\t\t}, 250);\n\n\t\t\tbase.$el.find('.yesp-controls').stop().animate({\n\t\t\t\t'bottom': 0,\n\t\t\t\t'opacity': 1,\n\t\t\t}, 250);\n\n\t\t\tif(!base.options.hide_youtube_logo && !base.info.mobile) {\n\t\t\t\tbase.info.youtube_logo_timer = setTimeout(function() {\n\t\t\t\t\tbase.$logo.stop().fadeTo(250, .25, function() {\n\t\t\t\t\t\tbase.$logo.css('opacity', '');\n\t\t\t\t\t});\n\t\t\t\t}, 250);\t\n\t\t\t}\n\t\t};\n\n\t\tbase.hide_controls = function(opacity) {\n\t\t\t// opacity = true;\n\t\t\tif(typeof(opacity) !== 'undefined' && opacity == true) {\n\t\t\t\tbase.$el.find('.yesp-controls').stop().animate({\n\t\t\t\t\t'bottom': 0,\n\t\t\t\t\t'opacity': 0,\n\t\t\t\t}, 250);\n\t\t\t}else {\n\t\t\t\tbase.$el.find('.yesp-controls').stop().animate({\n\t\t\t\t\t'bottom': -50\n\t\t\t\t}, 250);\n\t\t\t}\n\n\t\t\t//console.log(base.$el.find('.yesp-youtube-logo').length);\n\t\t\tif(base.info.youtube_logo_timer !== false) {\n\t\t\t\tclearTimeout(base.info.youtube_logo_timer);\n\t\t\t}\n\t\t\tbase.$el.find('.yesp-youtube-logo').stop().fadeTo(350, 0, function() {\n\t\t\t\t//base.$el.find('.yesp-youtube-logo').css('opacity', '');\n\t\t\t});\n\n\t\t\t\n\n\t\t\t// Never hide the title for ios\n\t\t\tif(base.info.ios) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tbase.$title.stop().animate({\n\t\t\t\t'opacity': 0\n\t\t\t}, 250);\n\n\t\t};\n\n\t\t\n\n\t\tbase.play_pause = function() {\n\t\t\tvar state = base.youtube.getPlayerState();\n\t\t\tif(state == 2) {\n\t\t\t\t// paused\n\t\t\t\tbase.play();\n\t\t\t}else if(state == 0) {\n\t\t\t\t// stopped\n\t\t\t\tbase.youtube.seekTo(0);\n\t\t\t\tbase.play();\n\t\t\t}else if(state == 5) {\n\t\t\t\t// cueued\n\t\t\t\t// base.youtube.seekTo(0);\n\t\t\t\tbase.play();\n\t\t\t}else {\n\t\t\t\t// playing or buffering\n\t\t\t\tbase.pause();\n\t\t\t}\n\t\t};\n\n\t\tbase.play = function() {\n\t\t\tbase.youtube.playVideo();\n\t\t\tbase.$el.find('.yesp-autoposter').hide();\n\t\t\tbase.$controls['play'].removeClass('yesp-icon-play').addClass('yesp-icon-pause').removeClass('yesp-icon-undo');\n\t\t\t// base.options.on_play();\n\t\t};\n\n\t\tbase.pause = function() {\n\t\t\tbase.youtube.pauseVideo();\n\t\t\tbase.$controls['play'].addClass('yesp-icon-play').removeClass('yesp-icon-pause').removeClass('yesp-icon-undo');\n\t\t\t// base.options.on_pause();\n\t\t};\n\n\t\tbase.stop = function() {\n\t\t\tbase.pause();\n\t\t\tbase.youtube.stopVideo();\n\t\t};\n\n\t\tbase.forward = function() {\n\t\t\tbase.info.index++;\n\t\t\tif(base.info.index >= base.playlist_count) {\n\t\t\t\tbase.info.index = 0;\n\t\t\t}\n\t\t\tbase.play_video(base.info.index);\n\t\t};\n\n\t\tbase.backward = function() {\n\t\t\tbase.info.index--;\n\t\t\tif(base.info.index < 0) {\n\t\t\t\tbase.info.index = base.playlist_count-1;\n\t\t\t}\n\t\t\tbase.play_video(base.info.index);\n\t\t};\n\n\t\tbase.play_video = function(index, cue, fast_scroll) {\n\n\t\t\tif(parseFloat(index, 10) == index && parseFloat(index, 10) <= base.playlist_items.length) {\n\t\t\t\tindex = parseFloat(index, 10);\n\t\t\t}else {\n\t\t\t\tvar video_id = index;\n\t\t\t\tindex = 0;\n\t\t\t\tfor(var i = 0; i < base.playlist_items.length; i++) {\n\t\t\t\t\tif(base.playlist_items[i].snippet.resourceId.videoId === video_id) {\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar video = base.playlist_items[index];\n\t\t\tif(video == undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(typeof(fast_scroll) === typeof(undefined)) {\n\t\t\t\tfast_scroll = false;\n\t\t\t}\n\t\t\tif(base.info.mobile && !base.info.first_play) {\n\t\t\t\tcue = true;\n\t\t\t}\n\t\t\tvar title \t\t\t= video.snippet.title,\n\t\t\t\tchannel \t\t= video.snippet.channelTitle,\n\t\t\t\tchannel_link\t= 'https://www.youtube.com/channel/'+video.snippet.channelId,\n\t\t\t\tvideo_id \t\t= video.snippet.resourceId.videoId,\n\t\t\t\tvideo_link\t\t= 'https://www.youtube.com/watch?v='+video_id;\n\n\t\t\tbase.update_title(title, channel, channel_link);\n\t\t\tif(typeof(cue) == 'undefined' || cue == false) {\n\t\t\t\tbase.youtube.loadVideoById(video_id);\n\t\t\t}else {\n\t\t\t\tbase.youtube.cueVideoById(video_id);\n\t\t\t}\n\n\t\t\tbase.$logo.attr('href', video_link);\n\n\t\t\tbase.$controls['youtube'].attr('href', video_link).attr('data-href', video_link);\n\t\t\tbase.info.current_video_url = video_link;\n\n\t\t\tbase.$el.find('.yesp-playlist-video').attr('data-playing', '0');\n\t\t\tbase.$el.find('.yesp-playlist-video[data-index='+index+']').attr('data-playing', '1');\n\n\t\t\tbase.$el.find('.yesp-hp-video').attr('data-playing', '0');\n\t\t\tbase.$el.find('.yesp-hp-video[data-index='+index+']').attr('data-playing', '1');\n\n\t\t\tif(base.options.time_indicator == 'full') {\n\t\t\t\tbase.$controls['time'].html('00:00 / 00:00');\n\t\t\t}else {\n\t\t\t\tbase.$controls['time'].html('00:00');\n\t\t\t}\n\t\t\t\n\t\t\tbase.$controls['time_bar_time'].css('width', 0);\n\t\t\tbase.$controls['time_bar_buffer'].css('width', 0);\n\n\t\t\tbase.info.index = index;\n\n\t\t\tbase.update_scroll_position(fast_scroll);\n\n\t\t\tif(cue === true && !base.info.mobile) {\n\t\t\t\t// show hi-res image\n\t\t\t\tvar img_src = false;\n\t\t\t\tif(typeof(video.snippet.thumbnails.maxres) !== 'undefined') {\n\t\t\t\t\timg_src = video.snippet.thumbnails.maxres.url;\n\t\t\t\t}else if(typeof(video.snippet.thumbnails.high) !== 'undefined') {\n\t\t\t\t\timg_src = video.snippet.thumbnails.high.url;\n\t\t\t\t}else if(typeof(video.snippet.thumbnails.medium) !== 'undefined') {\n\t\t\t\t\timg_src = video.snippet.thumbnails.medium.url;\n\t\t\t\t}else if(typeof(video.snippet.thumbnails.standard) !== 'undefined') {\n\t\t\t\t\timg_src = video.snippet.thumbnails.standard.url;\n\t\t\t\t}else if(typeof(video.snippet.thumbnails.default) !== 'undefined') {\n\t\t\t\t\timg_src = video.snippet.thumbnails.default.url;\n\t\t\t\t}\n\t\t\t\tif(img_src !== false) {\n\t\t\t\t\tbase.$el.find('.yesp-autoposter').css('background-image', 'url(\"'+img_src+'\")').show();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}else {\n\t\t\t\tbase.$el.find('.yesp-autoposter').hide();\n\t\t\t}\n\n\t\t\tbase.options.on_load(video.snippet);\n\n\t\t};\n\n\t\tbase.update_scroll_position = function(fast, force_scroll) {\n\t\t\tif(base.options.playlist_type === 'horizontal') {\n\t\t\t\tvar scroll_to = 160*base.info.index;\n\t\t\t\tif(typeof(force_scroll) !== typeof(undefined)) {\n\t\t\t\t\tscroll_to = force_scroll;\n\t\t\t\t}\n\n\t\t\t\tif(fast == true) {\n\t\t\t\t\tbase.$el.find('.yesp-hp').scrollLeft(scroll_to);\n\t\t\t\t\tbase.$el.find('.yesp-hp').perfectScrollbar('update');\n\t\t\t\t}else {\n\t\t\t\t\tbase.$el.find('.yesp-hp').stop().animate({\n\t\t\t\t\t\tscrollLeft: scroll_to\n\t\t\t\t\t}, 500, function() {\n\t\t\t\t\t\tbase.$el.find('.yesp-hp').perfectScrollbar('update');\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar scroll_to = Math.floor(base.info.playlist_width/16*9)*base.info.index;\n\t\t\tif(typeof(force_scroll) !== typeof(undefined)) {\n\t\t\t\tscroll_to = force_scroll;\n\t\t\t}\n\t\t\tif(scroll_to < 0) { scroll_to = 0; }\n\n\t\t\tvar playlist_height = base.$el.find('.yesp-playlist').innerHeight(),\n\t\t\t\titem_heights = Math.floor(base.info.playlist_width/16*9)*base.playlist_count;\n\n\t\t\tvar max_scroll = item_heights-playlist_height;\n\t\t\tif(base.info.next_page_token) {\n\t\t\t\tmax_scroll += 50;\n\t\t\t}\n\t\t\tif(scroll_to > max_scroll) {\n\t\t\t\tscroll_to = max_scroll;\n\t\t\t}\n\n\t\t\tif(fast == true) {\n\t\t\t\tbase.$el.find('.yesp-playlist').scrollTop(scroll_to);\n\t\t\t\tbase.$el.find('.yesp-playlist').perfectScrollbar('update');\n\t\t\t}else {\n\t\t\t\tbase.$el.find('.yesp-playlist').stop().animate({\n\t\t\t\t\tscrollTop: scroll_to\n\t\t\t\t}, 500, function() {\n\t\t\t\t\tbase.$el.find('.yesp-playlist').perfectScrollbar('update');\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// base.play_video_index = function(index) {\n\t\t// \t// var video = base.playlist_items[index];\n\t\t// \tbase.play_video(index);\n\t\t// };\n\n\t\tbase.toggle_fullscreen = function() {\n\t\t\tif(base.info.fullscreen) {\n\t\t\t\tbase.exit_fullscreen(true);\n\t\t\t}else {\n\t\t\t\tbase.enter_fullscreen()\n\t\t\t}\n\t\t};\n\n\t\tbase.enter_fullscreen = function() {\n\n\t\t\t//if(base.info.mobile) {\n\t\t\t\t\n\t\t\t//}\n\n var requestFullScreen = base.$el.find('.yesp-container')[0].webkitRequestFullScreen || base.$el.find('.yesp-container')[0].requestFullScreen || base.$el.find('.yesp-container')[0].mozRequestFullScreen || base.$el.find('.yesp-container')[0].webkitEnterFullScreen;\n\t\t\tif(!requestFullScreen) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar w = $(window).width(),\n\t\t\t\th = $(window).height();\n\n\t\t\tbase.info.fullscreen = true;\n\n\t\t\tbase.$el.find('.yesp-container, .yesp-container iframe').css({\n\t\t\t\t'width': '100%',\n\t\t\t\t'height': '100%'\n\t\t\t});\n\t\t\tbase.youtube.setSize(w, h);\n\t\t\trequestFullScreen.bind(base.$el.find('.yesp-container')[0])();\n\t\t};\n\n\t\tbase.exit_fullscreen = function(exit) {\n\t\t\tif(typeof(exit) !== 'undefined' && exit) {\n\t\t\t\tif (document.exitFullscreen) {\n\t\t\t\t\tdocument.exitFullscreen();\n\t\t\t\t}\n\t\t\t\telse if (document.mozCancelFullScreen) {\n\t\t\t\t\tdocument.mozCancelFullScreen();\n\t\t\t\t}\n\t\t\t\telse if (document.webkitCancelFullScreen) {\n\t\t\t\t\tdocument.webkitCancelFullScreen();\n\t\t\t\t}\n\t\t\t\telse if (document.msExitFullscreen) {\n\t\t\t\t\tdocument.msExitFullscreen();\n }\n else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen();\n }\n\t\t\t}\n\t\t\tbase.info.fullscreen = false;\n\t\t\tbase.resize();\n\t\t\t// base.show_controls();\n\t\t};\n\n\t\tbase.toggle_playlist = function() {\n\t\t\tif(base.options.playlist_type === 'horizontal') {\n\t\t\t\tif(base.info.horizontal_playlist_shown) {\n\t\t\t\t\tbase.hide_horizontal_playlist();\n\t\t\t\t}else {\n\t\t\t\t\tbase.show_horizontal_playlist();\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tif(base.info.playlist_shown) {\n\t\t\t\t\tbase.hide_playlist(false);\n\t\t\t\t}else {\n\t\t\t\t\tbase.show_playlist(false);\n\t\t\t\t}\n\t\t\t\tif(base.options.show_playlist !== 'auto') {\n\t\t\t\t\tbase.resize();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t};\n\n\t\tbase.show_playlist = function(fast, resize) {\n\t\t\tif(base.options.playlist_type == 'horizontal') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(typeof(resize) == typeof(undefined)) {\n\t\t\t\tresize = true;\n\t\t\t}\n\t\t\tfast = true;\n\t\t\tif(base.info.playlist_animating) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tbase.info.playlist_animating = true;\n\t\t\tvar $p = base.$el.find('.yesp-playlist'),\n\t\t\t\tw = 0;\n \n\t\t\tbase.$el.find('.yesp-icon-list').removeClass('yesp-icon-list').addClass('yesp-icon-align-justify');\n \n\t\t\tif(fast) {\n\t\t\t\t$p.css('width', base.info.playlist_width);\n\t\t\t\tbase.info.playlist_shown = true;\n\t\t\t\tbase.info.playlist_animating = false;\n\t\t\t\tif(resize) {\n\t\t\t\t\tbase.resize(true);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t};\n \n\t\tbase.hide_playlist = function(fast, resize) {\n\t\t\tif(typeof(resize) == typeof(undefined)) {\n\t\t\t\tresize = true;\n\t\t\t}\n\t\t\tfast = true;\n\t\t\tif(base.info.playlist_animating) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tbase.info.playlist_animating = true;\n\n\t\t\tvar $p = base.$el.find('.yesp-playlist');\n \t\t\t\n \t\t\tif(base.options.playlist_type == 'vertical') {\n\t\t\t\tbase.$el.find('.yesp-icon-align-justify').removeClass('yesp-icon-align-justify').addClass('yesp-icon-list');\n\t\t\t}\n\t\t\t\n \n\t\t\tif(fast) {\n \n\t\t\t\t$p.css('width', 0);\n\t\t\t\tbase.info.playlist_shown = false;\n\t\t\t\tbase.info.playlist_animating = false;\n\t\t\t\tif(resize) {\n\t\t\t\t\tbase.resize(true);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t};\n\n\t\tbase.show_horizontal_playlist = function() {\n\t\t\tbase.info.horizontal_playlist_shown = true;\n\t\t\tbase.$el.find('.yesp-hp').show();\n\t\t\tbase.$el.find('.yesp-icon-list').removeClass('yesp-icon-list').addClass('yesp-icon-align-justify');\n\t\t};\n\n\t\tbase.hide_horizontal_playlist = function() {\n\t\t\tbase.info.horizontal_playlist_shown = false;\n\t\t\tbase.$el.find('.yesp-hp').hide();\n\t\t\tbase.$el.find('.yesp-icon-align-justify').removeClass('yesp-icon-align-justify').addClass('yesp-icon-list');\n\t\t};\n\n\t\tbase.set_playlist_width = function(width) {\n\t\t\tif(base.info.playlist_shown) {\n\t\t\t\tbase.info.playlist_width = width;\n\t\t\t}\n\n\t\t\tvar height = Math.floor(width/16*9);\n\n\t\t\tbase.$el\n\t\t\t\t.find('.yesp-playlist').css({\n\t\t\t\t\t'width': width\n\t\t\t\t})\n\t\t\t\t.find('.yesp-playlist-video').css({\n\t\t\t\t\t'width': width,\n\t\t\t\t\t'height': height\n\t\t\t\t});\n\n\t\t\tbase.$el.find('.yesp-playlist .yesp-playlist-current').css('width', width-20);\n\n\n\t\t\tif(width <= 100) {\n\n\t\t\t\tbase.$el.find('.yesp-playlist').addClass('yesp-playlist-simple');\n\t\t\t\tbase.$el.find('.yesp-playlist .yesp-playlist-current').css('width', 10);\n\t\t\t}else {\n\t\t\t\tbase.$el.find('.yesp-playlist').removeClass('yesp-playlist-simple');\n\t\t\t}\n\n\t\t}\n\n\t\tbase.resize = function(avoid_playlist, force_update) {\n\n\t\t\t// when undefined or object (from window.resize)\n\t\t\tif(typeof(avoid_playlist) == typeof(undefined) || typeof(avoid_playlist) == typeof({})) {\n\t\t\t\tavoid_playlist = false;\n\t\t\t}\n\t\t\t\n\t\t\tvar width = base.$el.innerWidth();\n\n\t\t\tif(base.options.show_playlist == 'auto' && avoid_playlist == false) {\n \n\t\t\t\tif(width < 660 && (force_update == true || base.info.playlist_width == 200)) {\n\t\t\t\t\tbase.set_playlist_width(100);\n\t\t\t\t\tbase.update_scroll_position(true);\n\t\t\t\t}\n\t\t\t\tif(width < 500 && (force_update == true || base.info.playlist_shown == true)) {\n\t\t\t\t\tbase.hide_playlist(false, false);\n\t\t\t\t\tbase.update_scroll_position(true);\n\t\t\t\t}\n \n\t\t\t\tif(width >= 500 && (force_update == true || base.info.playlist_shown == false)) {\n\t\t\t\t\tbase.show_playlist(false, false);\n\t\t\t\t\tbase.update_scroll_position(true);\n\t\t\t\t}\n\t\t\t\tif(width >= 660 && (force_update == true || base.info.playlist_width == 100)) {\n\t\t\t\t\tbase.set_playlist_width(200);\n\t\t\t\t\tbase.update_scroll_position(true);\n\t\t\t\t}\n\t\t\t}else if(avoid_playlist == false) {\n\t\t\t\tforce_update = true;\n\t\t\t\tif(width < 660 && (force_update == true || base.info.playlist_width == 200)) {\n\t\t\t\t\tbase.set_playlist_width(100);\n\t\t\t\t\tbase.update_scroll_position(true);\n\t\t\t\t}\n \n\t\t\t\tif(width >= 660 && (force_update == true || base.info.playlist_width == 100)) {\n\t\t\t\t\tbase.set_playlist_width(200);\n\t\t\t\t\tbase.update_scroll_position(true);\n\t\t\t\t}\n \n\t\t\t\tif(base.info.playlist_shown == false) {\n\t\t\t\t\tbase.hide_playlist(true, false);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\n\t\t\tvar controls_width = width - (base.info.playlist_shown ? base.info.playlist_width : 0),\n\t\t\t\theight = controls_width/16*9;\n\n\t\t\tif(base.info.fullscreen) {\n\t\t\t\twidth = $(window).width();\n\t\t\t\tcontrols_width = width;\n\t\t\t\theight = $(window).height();\n\t\t\t}\n\n\t\t\t// if(!base.info.fullscreen) {\n\t\t\t\tbase.$el.find('.yesp-container, .yesp-playlist, .yesp-video').css('height', height);\n\t\t\t\tbase.$el.find('.yesp-container, .yesp-video').css('width', controls_width);\n\n\t\t\t\tbase.$el.find('.yesp-playlist').perfectScrollbar('update');\n\t\t\t\t//base.$el.find('.yesp-playlist').css('width', base.info.playlist_width);\n\t\t\t// }\n\n\t\t\tbase.info.width = controls_width;\n\t\t\tbase.info.height = height;\n\n\t\t\t//var height = base.$el.innerHeight();\n\n\t\t\tvar bar_width = controls_width - 20; // Minus the padding\n\n\t\t\t// Remove options if the width is too small\n\t\t\tif(controls_width < 600) {\n\t\t\t\tif(base.options.time_indicator == 'full') {\n\t\t\t\t\tbase.options.time_indicator = true;\n\t\t\t\t\tbase.$controls['time'].html(base.format_time(base.info.current_time));\n\t\t\t\t\tbase.$controls['time'].removeClass('yesp-full-time');\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(controls_width < 530) {\n\t\t\t\tbase.options.fwd_bck_control = false;\n\t\t\t\tbase.options.youtube_link_control = false;\n\t\t\t\tbase.$controls['forward'].hide();\n\t\t\t\tbase.$controls['backward'].hide();\n\t\t\t\tbase.$controls['youtube'].hide();\n\t\t\t}\n\t\t\tif(controls_width < 400) {\n\t\t\t\tbase.options.volume_control = false;\n\t\t\t\tbase.$controls['volume'].hide();\n\t\t\t\t\n\t\t\t}\n\t\t\tif(controls_width < 300) {\n\t\t\t\tbase.options.time_indicator = false;\n\t\t\t\tbase.$controls['time'].hide();\n\t\t\t\t\n\t\t\t\tbase.options.share_control = false;\n\t\t\t\tbase.$controls['share'].hide();\n\t\t\t}\n\n\t\t\t// Add options from when width was too small\n\t\t\tif(controls_width >= 300 && (base.options_copy.time_indicator == true || base.options_copy.time_indicator == 'full')) {\n\t\t\t\tbase.options.time_indicator = true;\n\t\t\t\tbase.$controls['time'].show();\n\t\t\t}\n\t\t\tif(controls_width >= 300 && base.options_copy.share_control == true) {\n\t\t\t\tbase.options.share_control = true;\n\t\t\t\tbase.$controls['share'].show();\n\t\t\t}\n\t\t\tif(controls_width >= 400 && base.options_copy.volume_control == true) {\n\t\t\t\tbase.options.volume_control = true;\n\t\t\t\tbase.$controls['volume'].show();\n\t\t\t}\n\t\t\tif(controls_width >= 530 && base.options_copy.fwd_bck_control == true) {\n\t\t\t\tbase.options.fwd_bck_control = true;\n\t\t\t\tbase.$controls['forward'].show();\n\t\t\t\tbase.$controls['backward'].show();\n\t\t\t}\n\t\t\tif(controls_width >= 530 && base.options_copy.youtube_link_control == true) {\n\t\t\t\tbase.options.youtube_link_control = true;\n\t\t\t\tbase.$controls['youtube'].show();\n\t\t\t}\n\t\t\tif(controls_width >= 600 && base.options_copy.time_indicator == 'full') {\n\t\t\t\tbase.options.time_indicator = 'full';\n\t\t\t\tbase.$controls['time'].html(base.format_time(base.info.current_time)+' / '+base.format_time(base.info.duration));\n\t\t\t\tbase.$controls['time'].addClass('yesp-full-time');\n\t\t\t}\n\t\t\t\n\n\t\t\tif(base.options.play_control) {\n\t\t\t\tbar_width -= 30;\n\t\t\t}\n\n\t\t\tif(base.options.time_indicator) {\n\t\t\t\tbar_width -= 58;\n\t\t\t}\n\n\t\t\tif(base.options.time_indicator == 'full') {\n\t\t\t\tbar_width -= 40;\n\t\t\t}\n\n\t\t\tif(base.options.volume_control) {\n\t\t\t\tbar_width -= 110;\n\t\t\t}\n\n\t\t\tif(base.options.share_control) {\n\t\t\t\tbar_width -= 30;\n\t\t\t}\n\n\t\t\tif(base.options.youtube_link_control) {\n\t\t\t\tbar_width -= 30;\n\t\t\t}\n\n\t\t\tif(base.options.fwd_bck_control) {\n\t\t\t\tbar_width -= 60;\n\t\t\t}\n\n\t\t\tif(base.options.fullscreen_control) {\n\t\t\t\tbar_width -= 30;\n\t\t\t}\n\n\t\t\tif(base.options.playlist_toggle_control) {\n\t\t\t\tbar_width -= 30;\n\t\t\t}\n\n\t\t\tbar_width -= 18; // Minus the bar's margin;\n\n\t\t\tbase.$controls['time_bar'].css('width', bar_width);\n\n\t\t\t\n\n\t\t};\n\n\t\tbase.init_time_slider = function() {\n\t\t\tbase.$controls['time_bar'].on('mousedown', function(e) {\n\t\t\t\tif(!base.info.ipad) {\n\t\t\t\t\tbase.info.time_drag = true;\n\t\t\t\t}\n\t\t\t\tbase.update_time_slider(e.pageX);\n\t\t\t\t\n\t\t\t});\n\t\t\t$(document).on('mouseup', function(e) {\n\t\t\t\tif(base.info.time_drag) {\n\t\t\t\t\tbase.info.time_drag = false;\n\t\t\t\t\tbase.update_time_slider(e.pageX);\n\t\t\t\t}\n\t\t\t});\n\t\t\t$(document).on('mousemove', function(e) {\n\t\t\t\tif(base.info.time_drag) {\n\t\t\t\t\tbase.update_time_slider(e.pageX);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tbase.update_time_slider = function(x) {\n\n\t\t\tif(base.info.duration == 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar maxduration = base.info.duration;\n\t\t\tvar position = x - base.$controls['time_bar'].offset().left;\n\t\t\tvar percentage = 100 * position / base.$controls['time_bar'].width();\n\n\t\t\tif(percentage > 100) {\n\t\t\t\tpercentage = 100;\n\t\t\t}\n\t\t\tif(percentage < 0) {\n\t\t\t\tpercentage = 0;\n\t\t\t}\n\t\t\tvar seekto = Math.round(maxduration * percentage / 100);\n\t\t\tbase.$controls['time_bar_time'].css('width',percentage+'%');\n\t\t\t\n\t\t\t//setTimeout(function() {\n\t\t\t\tbase.youtube.seekTo(seekto);\n\t\t\t//}, 5);\n\n\t\t\t//\n\n\t\t\t//base.youtube.seekTo(500);\n\n\t\t\tbase.options.on_seek(maxduration * percentage / 100);\n\n\t\t};\n\n\t\tbase.init_volume_slider = function() {\n\t\t\tbase.$controls['volume_bar'].on('mousedown', function(e) {\n\t\t\t\tbase.info.volume_drag = true;\n\t\t\t\tbase.$controls['volume_icon'].removeClass('yesp-icon-volume-off').addClass('yesp-icon-volume-up');\n\t\t\t\tbase.update_volume(e.pageX);\n\t\t\t});\n\t\t\t$(document).on('mouseup', function(e) {\n\t\t\t\tif(base.info.volume_drag) {\n\t\t\t\t\tbase.info.volume_drag = false;\n\t\t\t\t\tbase.update_volume(e.pageX);\n\t\t\t\t}\n\t\t\t});\n\t\t\t$(document).on('mousemove', function(e) {\n\t\t\t\tif(base.info.volume_drag) {\n\t\t\t\t\tbase.update_volume(e.pageX);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tbase.update_volume = function(x, vol) {\n\n\t\t\tvar percentage;\n\n\t\t\tif(vol) {\n\t\t\t\tpercentage = vol * 100;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar position = x - base.$controls['volume_bar'].offset().left;\n\t\t\t\tpercentage = 100 * position / base.$controls['volume_bar'].width();\n\t\t\t}\n\t\t\t\n\t\t\tif(percentage > 100) {\n\t\t\t\tpercentage = 100;\n\t\t\t}\n\t\t\tif(percentage < 0) {\n\t\t\t\tpercentage = 0;\n\t\t\t}\n\t\t\t\n\t\t\tbase.$controls['volume_amount'].css('width',percentage+'%');\n\n\t\t\tbase.youtube.setVolume(percentage);\n\n\t\t\tif(percentage == 0) {\n\t\t\t\tbase.youtube.mute();\n\t\t\t}else if(base.youtube.isMuted()) {\n\t\t\t\tbase.youtube.unMute();\n\t\t\t}\n\n\t\t\tif(percentage == 0) {\n\t\t\t\tbase.$controls['volume_icon'].addClass('yesp-icon-volume-off').removeClass('yesp-icon-volume-up');\n\t\t\t}else {\n\t\t\t\tbase.$controls['volume_icon'].removeClass('yesp-icon-volume-off').addClass('yesp-icon-volume-up');\n\t\t\t}\n\t\t\t\n\t\t\tbase.options.on_volume(percentage/100);\n\t\t\t\n\t\t};\n\n\t\tbase.toggle_share = function() {\n\t\t\tif(base.$social.attr('show') == '1') {\n\t\t\t\tbase.hide_share();\n\t\t\t}else {\n\t\t\t\tbase.show_share();\n\t\t\t}\n\t\t};\n\n\t\tbase.show_share = function() {\n\t\t\tbase\n\t\t\t\t.$social.attr('show', '1')\n\t\t\t\t.stop()\n\t\t\t\t.animate({\n\t\t\t\t\tright: 10\n\t\t\t\t}, 200);\n\t\t};\n\n\t\tbase.hide_share = function() {\n\t\t\tbase\n\t\t\t\t.$social.attr('show', '0')\n\t\t\t\t.stop()\n\t\t\t\t.animate({\n\t\t\t\t\tright: -140\n\t\t\t\t}, 200);\n\t\t};\n\n\t\tbase.set_style = function() {\n\t\t\tvar $s = $('');\n\n\t\t\tvar default_colors = {\n\t\t\t\tcontrols_bg: \t\t'rgba(0,0,0,.75)',\n\t\t\t\tbuttons: \t\t\t'rgba(255,255,255,.5)',\n\t\t\t\tbuttons_hover: \t\t'rgba(255,255,255,1)',\n\t\t\t\tbuttons_active: \t'rgba(255,255,255,1)',\n\t\t\t\ttime_text: \t\t\t'#FFFFFF',\n\t\t\t\tbar_bg: \t\t\t'rgba(255,255,255,.5)',\n\t\t\t\tbuffer: \t\t\t'rgba(255,255,255,.25)',\n\t\t\t\tfill: \t\t\t\t'#FFFFFF',\n\t\t\t\tvideo_title: \t\t'#FFFFFF',\n\t\t\t\tvideo_channel: \t\t'#DFF76D',\n\t\t\t\tplaylist_overlay: \t'rgba(0,0,0,.5)',\n\t\t\t\tplaylist_title: \t'#FFFFFF',\n\t\t\t\tplaylist_channel: \t'#DFF76D',\n\t\t\t\tscrollbar: \t\t\t'#FFFFFF',\n\t\t\t\tscrollbar_bg: \t\t'rgba(255,255,255,.25)',\n\t\t\t\tload_more_bg: \t\t'#000000',\n\t\t\t\tload_more_text: \t'#FFFFFF',\n\t\t\t};\n\n\t\t\tfor(key in base.options.colors) {\n\t\t\t\tdefault_colors[key] = base.options.colors[key];\n\t\t\t}\n\n\t\t\t$s.html('#'+base.id+'.yesp .yesp-controls{background:'+default_colors.controls_bg+'!important}#'+base.id+'.yesp .yesp-controls a{color:'+default_colors.buttons+'!important}#'+base.id+'.yesp .yesp-controls a:hover{color:'+default_colors.buttons_hover+'!important}#'+base.id+'.yesp .yesp-controls a:active{color:'+default_colors.buttons_active+'!important}#'+base.id+'.yesp .yesp-time{color:'+default_colors.time_text+'!important}#'+base.id+'.yesp .yesp-bar,#'+base.id+'.yesp .yesp-volume .yesp-volume-bar{background:'+default_colors.bar_bg+'!important}#'+base.id+'.yesp .yesp-bar .yesp-bar-buffer{background:'+default_colors.buffer+'!important}#'+base.id+'.yesp .yesp-bar .yesp-bar-time,#'+base.id+'.yesp .yesp-volume .yesp-volume-bar .yesp-volume-amount{background:'+default_colors.fill+'!important}#'+base.id+'.yesp .yesp-title-wrapper{color:'+default_colors.video_title+'!important}#'+base.id+'.yesp .yesp-title a.yesp-subtitle{border-color:'+default_colors.video_title+'!important}#'+base.id+'.yesp .yesp-title-wrapper a{color:'+default_colors.video_channel+'!important}#'+base.id+'.yesp .yesp-playlist-overlay,#'+base.id+'.yesp .yesp-hp-overlay,#'+base.id+'.yesp .yesp-playlist-current,#'+base.id+'.yesp .yesp-hp-current{background: '+default_colors.playlist_overlay+' !important;}#'+base.id+'.yesp .yesp-playlist-overlay .yesp-playlist-title,#'+base.id+'.yesp .yesp-hp-overlay .yesp-hp-title,#'+base.id+'.yesp .yesp-playlist-current,#'+base.id+'.yesp .yesp-hp-current{color: '+default_colors.playlist_title+' !important;}#'+base.id+'.yesp .yesp-playlist-overlay .yesp-playlist-channel,#'+base.id+'.yesp .yesp-hp-overlay .yesp-hp-channel {color: '+default_colors.playlist_channel+' !important;}#'+base.id+'.yesp .ps-scrollbar-y-rail, #'+base.id+'.yesp .ps-scrollbar-x-rail {background: '+default_colors.scrollbar_bg+' !important;}#'+base.id+'.yesp .ps-scrollbar-y,#'+base.id+'.yesp .ps-scrollbar-x {background: '+default_colors.scrollbar+' !important;}#'+base.id+'.yesp .yesp-next-page,#'+base.id+'.yesp .yesp-hp-next-page {background:'+default_colors.load_more_bg+' !important;color:'+default_colors.load_more_text+' !important;}');\n\t\t\t$s.appendTo('body');\n\t\t};\n\n\t\tbase.format_time = function(seconds) {\n\t\t\tvar m = Math.floor(seconds / 60) < 10 ? \"0\" + Math.floor(seconds / 60) : Math.floor(seconds / 60),\n\t\t\t\ts = Math.floor(seconds - (m * 60)) < 10 ? \"0\" + Math.floor(seconds - (m * 60)) : Math.floor(seconds - (m * 60));\n\t\t\treturn m + \":\" + s;\n\t\t};\n\n\t\tbase.cut_text = function(n) {\n\t\t\treturn function textCutter(i, text) {\n\t\t\t\tvar short = text.substr(0, n);\n\t\t\t\tif (/^\\S/.test(text.substr(n))) {\n\t\t\t\t\treturn short.replace(/\\s+\\S*$/, \"\");\n\t\t\t\t}\n\t\t\t\treturn short;\n\t\t\t};\n\t\t};\n\n\t\tbase.share_url = function() {\n\t\t\treturn base.info.current_video_url;\n\t\t};\n\n\t\tbase.detect_ie = function() {\n\t\t\tvar ua = window.navigator.userAgent;\n\t\t\tvar msie = ua.indexOf('MSIE ');\n\t\t\tvar trident = ua.indexOf('Trident/');\n\n\t\t\tif (msie > 0) {\n\t\t\t\treturn parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n\t\t\t}\n\n\t\t\tif (trident > 0) {\n\t\t\t\tvar rv = ua.indexOf('rv:');\n\t\t\t\treturn parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n\t\t\t}\n\n\t\t\t// other browser\n\t\t\treturn false;\n\t\t};\n\n\t\tbase.detect_touch = function() {\n\t\t\treturn !!('ontouchstart' in window) || !!('onmsgesturechange' in window);\n\t\t};\n\n\t\tbase.shuffle_array = function(array) {\n\t\t\tfor (var i = array.length - 1; i > 0; i--) {\n\t\t\t\tvar j = Math.floor(Math.random() * (i + 1));\n\t\t\t\tvar temp = array[i];\n\t\t\t\tarray[i] = array[j];\n\t\t\t\tarray[j] = temp;\n\t\t\t}\n\t\t\treturn array;\n\t\t};\n\t\t\n\t\t// Run initializer\n\t\tbase.init();\n\t};\n\t\n\t$.youtube_video.defaultOptions = {\n\n\t\t// Options\n\t\tplaylist: \t\t\t\t\tfalse,\n\t\tchannel: \t\t\t\t\tfalse,\n\t\tuser: \t\t\t\t\t\tfalse,\n\t\tvideos: \t\t\t\t\tfalse,\n\t\tplayer_id: \t\t\t\t\tfalse,\n\t\tshuffle: \t\t\t\t\tfalse,\n\t\tapi_key: \t\t\t\t\t'AIzaSyAuL07vOpwHN0r2E3Sk2_k6KDgni8EjH2Q',\n\t\tmax_results: \t\t\t\t50,\n\t\tpagination: \t\t\t\ttrue, \t\t\t\t// NEW IN 1.1\n\t\tcontinuous: \t\t\t\ttrue,\n\t\tfirst_video: \t\t\t\t0,\n\t\tshow_playlist: \t\t\t\t'auto',\n\t\tplaylist_type: \t\t\t\t'vertical',\n\t\tshow_channel_in_playlist: \ttrue,\n\t\tshow_channel_in_title: \t\ttrue,\n\t\twidth: \t\t\t\t\t\tfalse,\n\t\tshow_annotations: \t\t\tfalse,\n\t\tnow_playing_text: \t\t\t'Now Playing',\n\t\tload_more_text: \t\t\t'Load More', \t\t// NEW IN 1.1\n\t\tforce_hd: \t\t\t\t\tfalse, \t\t\t\t// NEW IN 1.1\n\t\thide_youtube_logo: \t\t\tfalse,\t\t\t\t// NEW IN 1.1\n\t\tautoplay: \t\t\t\t\tfalse,\n\t\tplay_control: \t\t\t\ttrue,\n\t\ttime_indicator: \t\t\t'full',\n\t\tvolume_control: \t\t\ttrue,\n\t\tshare_control: \t\t\t\ttrue,\n\t\tfwd_bck_control: \t\t\ttrue,\n\t\tyoutube_link_control: \t\ttrue,\n\t\tfullscreen_control: \t\ttrue,\n\t\tplaylist_toggle_control: \ttrue,\n\t\tvolume: \t\t\t\t\tfalse,\n\t\tshow_controls_on_load: \t\ttrue,\n\t\tshow_controls_on_pause: \ttrue,\n\t\tshow_controls_on_play: \t\tfalse,\n\t\tplayer_vars: \t\t\t\t{},\n\t\tcolors: \t\t\t\t\t{},\n\n\t\t// Callbacks\n\t\ton_load: \t\t\tfunction(snippet) \t{},\n\t\ton_done_loading: \tfunction(videos) \t{},\n\t\ton_state_change:\tfunction(state) \t{},\n\t\ton_seek: \t\t\tfunction(seconds) \t{},\n\t\ton_volume: \t\t\tfunction(volume) \t{},\n\t\ton_time_update: \tfunction(seconds) \t{},\n\n\t};\n\n\n\t$.fn.youtube_video = function(options){\n\t\treturn this.each(function(){\n\t\t\t(new $.youtube_video(this, options));\n\t\t});\n\t};\n\n\t// Methods\n\t\n\t$.fn.youtube_video_play = function(){\n\t\treturn this.each(function(){\n\t\t\t(new $.youtube_video_play(this));\n\t\t});\n\t};\n\n\t$.youtube_video_play = function(el){\n\t\tvar $el = $(el),\n\t\t\tbase = $el.data(\"youtube_video\");\n\t\tbase.play();\n\t};\n\n\t$.fn.youtube_video_pause = function(){\n\t\treturn this.each(function(){\n\t\t\t(new $.youtube_video_pause(this));\n\t\t});\n\t};\n\n\t$.youtube_video_pause = function(el){\n\t\tvar $el = $(el),\n\t\t\tbase = $el.data(\"youtube_video\");\n\t\tbase.pause();\n\t};\n\n\t$.fn.youtube_video_stop = function(){\n\t\treturn this.each(function(){\n\t\t\t(new $.youtube_video_stop(this));\n\t\t});\n\t};\n\n\t$.youtube_video_stop = function(el){\n\t\tvar $el = $(el),\n\t\t\tbase = $el.data(\"youtube_video\");\n\t\tbase.stop();\n\t};\n\n\t$.fn.youtube_video_seek = function(t){\n\t\treturn this.each(function(){\n\t\t\t(new $.youtube_video_seek(this, t));\n\t\t});\n\t};\n\n\t$.youtube_video_seek = function(el, seconds){\n\t\tvar $el = $(el),\n\t\t\tbase = $el.data(\"youtube_video\");\n\n\t\tvar maxduration = base.info.duration,\n\t\t\tpercentage = seconds / maxduration * 100;\n\t\tbase.$controls['time_bar_time'].css('width',percentage+'%');\t\n\t\tbase.youtube.seekTo(maxduration * percentage / 100);\n\t\tbase.options.on_seek(seconds);\n\t};\n\n\t$.fn.youtube_video_load = function(index){\n\t\treturn this.each(function(){\n\t\t\t(new $.youtube_video_load(this, index));\n\t\t});\n\t};\n\n\t$.youtube_video_load = function(el, index){\n\t\tvar $el = $(el),\n\t\t\tbase = $el.data(\"youtube_video\");\n\n\t\tbase.play_video(index);\n\t};\n\n\n\t$.fn.youtube_video_volume = function(volume){\n\t\treturn this.each(function(){\n\t\t\t(new $.youtube_video_volume(this, volume));\n\t\t});\n\t};\n\n\t$.youtube_video_volume = function(el, volume){\n\t\tvar $el = $(el),\n\t\t\tbase = $el.data(\"youtube_video\");\n\n\t\tbase.update_volume(0, volume);\n\t};\n\n\t$.fn.youtube_show_controls = function(){\n\t\treturn this.each(function(){\n\t\t\t(new $.youtube_show_controls(this));\n\t\t});\n\t};\n\n\t$.youtube_show_controls = function(el){\n\t\tvar $el = $(el),\n\t\t\tbase = $el.data(\"youtube_video\");\n\n\t\tbase.show_controls();\n\t};\n\t\n\t\n})(jQuery);\n\n\n\n\n\n\n","/*! iFrame Resizer (iframeSizer.min.js ) - v3.5.1 - 2015-11-04\n * Desc: Force cross domain iframes to size to content.\n * Requires: iframeResizer.contentWindow.min.js to be loaded into the target frame.\n * Copyright: (c) 2015 David J. Bradshaw - dave@bradshaw.net\n * License: MIT\n */\n\n!function(a){\"use strict\";function b(b,c,d){\"addEventListener\"in a?b.addEventListener(c,d,!1):\"attachEvent\"in a&&b.attachEvent(\"on\"+c,d)}function c(b,c,d){\"removeEventListener\"in a?b.removeEventListener(c,d,!1):\"detachEvent\"in a&&b.detachEvent(\"on\"+c,d)}function d(){var b,c=[\"moz\",\"webkit\",\"o\",\"ms\"];for(b=0;be&&(e=c,h(W,\"Set \"+d+\" to min value\")),e>b&&(e=b,h(W,\"Set \"+d+\" to max value\")),V[d]=\"\"+e}function k(){function a(){function a(){var a=0,d=!1;for(h(W,\"Checking connection is from allowed list of origins: \"+c);aP[w][\"max\"+a])throw new Error(\"Value for min\"+a+\" can not be greater than max\"+a)}c(\"Height\"),c(\"Width\"),b(\"maxHeight\"),b(\"minHeight\"),b(\"maxWidth\"),b(\"minWidth\")}function e(){var a=c&&c.id||S.id+F++;return null!==document.getElementById(a)&&(a+=F++),a}function f(b){return R=b,\"\"===b&&(a.id=b=e(),G=(c||{}).log,R=b,h(b,\"Added missing iframe ID: \"+b+\" (\"+a.src+\")\")),b}function g(){h(w,\"IFrame scrolling \"+(P[w].scrolling?\"enabled\":\"disabled\")+\" for \"+w),a.style.overflow=!1===P[w].scrolling?\"hidden\":\"auto\",a.scrolling=!1===P[w].scrolling?\"no\":\"yes\"}function i(){(\"number\"==typeof P[w].bodyMargin||\"0\"===P[w].bodyMargin)&&(P[w].bodyMarginV1=P[w].bodyMargin,P[w].bodyMargin=\"\"+P[w].bodyMargin+\"px\")}function k(){var b=P[w].firstRun,c=P[w].heightCalculationMethod in O;!b&&c&&r({iframe:a,height:0,width:0,type:\"init\"})}function l(){Function.prototype.bind&&(P[w].iframe.iFrameResizer={close:n.bind(null,P[w].iframe),resize:u.bind(null,\"Window resize\",\"resize\",P[w].iframe),moveToAnchor:function(a){u(\"Move to anchor\",\"inPageLink:\"+a,P[w].iframe,w)},sendMessage:function(a){a=JSON.stringify(a),u(\"Send Message\",\"message:\"+a,P[w].iframe,w)}})}function m(c){function d(){u(\"iFrame.onload\",c,a),k()}b(a,\"load\",d),u(\"init\",c,a)}function o(a){if(\"object\"!=typeof a)throw new TypeError(\"Options is not an object\")}function p(a){for(var b in S)S.hasOwnProperty(b)&&(P[w][b]=a.hasOwnProperty(b)?a[b]:S[b])}function q(a){return\"\"===a||\"file://\"===a?\"*\":a}function s(b){b=b||{},P[w]={firstRun:!0,iframe:a,remoteHost:a.src.split(\"/\").slice(0,3).join(\"/\")},o(b),p(b),P[w].targetOrigin=!0===P[w].checkOrigin?q(P[w].remoteHost):\"*\"}function t(){return w in P&&\"iFrameResizer\"in a}var w=f(a.id);t()?j(w,\"Ignored iFrame, already setup.\"):(s(c),g(),d(),i(),m(v(w)),l())}function x(a,b){null===Q&&(Q=setTimeout(function(){Q=null,a()},b))}function y(){function b(){function a(a){function b(b){return\"0px\"===P[a].iframe.style[b]}function c(a){return null!==a.offsetParent}c(P[a].iframe)&&(b(\"height\")||b(\"width\"))&&u(\"Visibility change\",\"resize\",P[a].iframe,a)}for(var b in P)a(b)}function c(a){h(\"window\",\"Mutation observed: \"+a[0].target+\" \"+a[0].type),x(b,16)}function d(){var a=document.querySelector(\"body\"),b={attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0},d=new e(c);d.observe(a,b)}var e=a.MutationObserver||a.WebKitMutationObserver;e&&d()}function z(a){function b(){B(\"Window \"+a,\"resize\")}h(\"window\",\"Trigger event: \"+a),x(b,16)}function A(){function a(){B(\"Tab Visable\",\"resize\")}\"hidden\"!==document.visibilityState&&(h(\"document\",\"Trigger event: Visiblity change\"),x(a,16))}function B(a,b){function c(a){return\"parent\"===P[a].resizeFrom&&P[a].autoResize&&!P[a].firstRun}for(var d in P)c(d)&&u(a,b,document.getElementById(d),d)}function C(){b(a,\"message\",l),b(a,\"resize\",function(){z(\"resize\")}),b(document,\"visibilitychange\",A),b(document,\"-webkit-visibilitychange\",A),b(a,\"focusin\",function(){z(\"focus\")}),b(a,\"focus\",function(){z(\"focus\")})}function D(){function a(a,c){function d(){if(!c.tagName)throw new TypeError(\"Object is not a valid DOM element\");if(\"IFRAME\"!==c.tagName.toUpperCase())throw new TypeError(\"Expected