\r\n fakeBody = doc.createElement( 'body' ),\r\n div = doc.createElement( 'div' );\r\n\r\n div.id = 'mq-test-1';\r\n div.style.cssText = 'position:absolute;top:-100em';\r\n fakeBody.style.background = 'none';\r\n fakeBody.appendChild(div);\r\n\r\n return function (q) {\r\n\r\n div.innerHTML = '';\r\n\r\n docElem.insertBefore( fakeBody, refNode );\r\n bool = div.offsetWidth === 42;\r\n docElem.removeChild( fakeBody );\r\n\r\n return {\r\n matches : bool,\r\n media : q\r\n };\r\n\r\n };\r\n\r\n }( document ));\r\n\r\n /*\r\n * jquery.requestAnimationFrame\r\n * https://github.com/gnarf37/jquery-requestAnimationFrame\r\n * Requires jQuery 1.8+\r\n *\r\n * Copyright (c) 2012 Corey Frang\r\n * Licensed under the MIT license.\r\n */\r\n\r\n (function(jQuery) {\r\n\r\n\r\n // requestAnimationFrame polyfill adapted from Erik Möller\r\n // fixes from Paul Irish and Tino Zijdel\r\n // http://paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\r\n\r\n var animating,\r\n lastTime = 0,\r\n vendors = ['webkit', 'moz'],\r\n requestAnimationFrame = window.requestAnimationFrame,\r\n cancelAnimationFrame = window.cancelAnimationFrame,\r\n jqueryFxAvailable = 'undefined' !== typeof jQuery.fx;\r\n\r\n for (; lastTime < vendors.length && !requestAnimationFrame; lastTime++) {\r\n requestAnimationFrame = window[ vendors[lastTime] + 'RequestAnimationFrame' ];\r\n cancelAnimationFrame = cancelAnimationFrame ||\r\n window[ vendors[lastTime] + 'CancelAnimationFrame' ] ||\r\n window[ vendors[lastTime] + 'CancelRequestAnimationFrame' ];\r\n }\r\n\r\n function raf() {\r\n if (animating) {\r\n requestAnimationFrame(raf);\r\n\r\n if (jqueryFxAvailable) {\r\n jQuery.fx.tick();\r\n }\r\n }\r\n }\r\n\r\n if (requestAnimationFrame) {\r\n // use rAF\r\n window.requestAnimationFrame = requestAnimationFrame;\r\n window.cancelAnimationFrame = cancelAnimationFrame;\r\n\r\n if (jqueryFxAvailable) {\r\n jQuery.fx.timer = function (timer) {\r\n if (timer() && jQuery.timers.push(timer) && !animating) {\r\n animating = true;\r\n raf();\r\n }\r\n };\r\n\r\n jQuery.fx.stop = function () {\r\n animating = false;\r\n };\r\n }\r\n } else {\r\n // polyfill\r\n window.requestAnimationFrame = function (callback) {\r\n var currTime = new Date().getTime(),\r\n timeToCall = Math.max(0, 16 - (currTime - lastTime)),\r\n id = window.setTimeout(function () {\r\n callback(currTime + timeToCall);\r\n }, timeToCall);\r\n lastTime = currTime + timeToCall;\r\n return id;\r\n };\r\n\r\n window.cancelAnimationFrame = function (id) {\r\n clearTimeout(id);\r\n };\r\n\r\n }\r\n\r\n }( $ ));\r\n\r\n function removeQuotes (string) {\r\n if (typeof string === 'string' || string instanceof String) {\r\n string = string.replace(/^['\\\\/\"]+|(;\\s?})+|['\\\\/\"]+$/g, '');\r\n }\r\n\r\n return string;\r\n }\r\n\r\n window.Foundation = {\r\n name : 'Foundation',\r\n\r\n version : '{{VERSION}}',\r\n\r\n media_queries : {\r\n 'small' : S('.foundation-mq-small').css('font-family').replace(/^[\\/\\\\'\"]+|(;\\s?})+|[\\/\\\\'\"]+$/g, ''),\r\n 'small-only' : S('.foundation-mq-small-only').css('font-family').replace(/^[\\/\\\\'\"]+|(;\\s?})+|[\\/\\\\'\"]+$/g, ''),\r\n 'medium' : S('.foundation-mq-medium').css('font-family').replace(/^[\\/\\\\'\"]+|(;\\s?})+|[\\/\\\\'\"]+$/g, ''),\r\n 'medium-only' : S('.foundation-mq-medium-only').css('font-family').replace(/^[\\/\\\\'\"]+|(;\\s?})+|[\\/\\\\'\"]+$/g, ''),\r\n 'large' : S('.foundation-mq-large').css('font-family').replace(/^[\\/\\\\'\"]+|(;\\s?})+|[\\/\\\\'\"]+$/g, ''),\r\n 'large-only' : S('.foundation-mq-large-only').css('font-family').replace(/^[\\/\\\\'\"]+|(;\\s?})+|[\\/\\\\'\"]+$/g, ''),\r\n 'xlarge' : S('.foundation-mq-xlarge').css('font-family').replace(/^[\\/\\\\'\"]+|(;\\s?})+|[\\/\\\\'\"]+$/g, ''),\r\n 'xlarge-only' : S('.foundation-mq-xlarge-only').css('font-family').replace(/^[\\/\\\\'\"]+|(;\\s?})+|[\\/\\\\'\"]+$/g, ''),\r\n 'xxlarge' : S('.foundation-mq-xxlarge').css('font-family').replace(/^[\\/\\\\'\"]+|(;\\s?})+|[\\/\\\\'\"]+$/g, '')\r\n },\r\n\r\n stylesheet : $('').appendTo('head')[0].sheet,\r\n\r\n global : {\r\n namespace : undefined\r\n },\r\n\r\n init : function (scope, libraries, method, options, response) {\r\n var args = [scope, method, options, response],\r\n responses = [];\r\n\r\n // check RTL\r\n this.rtl = /rtl/i.test(S('html').attr('dir'));\r\n\r\n // set foundation global scope\r\n this.scope = scope || this.scope;\r\n\r\n this.set_namespace();\r\n\r\n if (libraries && typeof libraries === 'string' && !/reflow/i.test(libraries)) {\r\n if (this.libs.hasOwnProperty(libraries)) {\r\n responses.push(this.init_lib(libraries, args));\r\n }\r\n } else {\r\n for (var lib in this.libs) {\r\n responses.push(this.init_lib(lib, libraries));\r\n }\r\n }\r\n\r\n S(window).load(function () {\r\n S(window)\r\n .trigger('resize.fndtn.clearing')\r\n .trigger('resize.fndtn.dropdown')\r\n .trigger('resize.fndtn.equalizer')\r\n .trigger('resize.fndtn.interchange')\r\n .trigger('resize.fndtn.joyride')\r\n .trigger('resize.fndtn.magellan')\r\n .trigger('resize.fndtn.topbar')\r\n .trigger('resize.fndtn.slider');\r\n });\r\n\r\n return scope;\r\n },\r\n\r\n init_lib : function (lib, args) {\r\n if (this.libs.hasOwnProperty(lib)) {\r\n this.patch(this.libs[lib]);\r\n\r\n if (args && args.hasOwnProperty(lib)) {\r\n if (typeof this.libs[lib].settings !== 'undefined') {\r\n $.extend(true, this.libs[lib].settings, args[lib]);\r\n } else if (typeof this.libs[lib].defaults !== 'undefined') {\r\n $.extend(true, this.libs[lib].defaults, args[lib]);\r\n }\r\n return this.libs[lib].init.apply(this.libs[lib], [this.scope, args[lib]]);\r\n }\r\n\r\n args = args instanceof Array ? args : new Array(args);\r\n return this.libs[lib].init.apply(this.libs[lib], args);\r\n }\r\n\r\n return function () {};\r\n },\r\n\r\n patch : function (lib) {\r\n lib.scope = this.scope;\r\n lib.namespace = this.global.namespace;\r\n lib.rtl = this.rtl;\r\n lib['data_options'] = this.utils.data_options;\r\n lib['attr_name'] = attr_name;\r\n lib['add_namespace'] = add_namespace;\r\n lib['bindings'] = bindings;\r\n lib['S'] = this.utils.S;\r\n },\r\n\r\n inherit : function (scope, methods) {\r\n var methods_arr = methods.split(' '),\r\n i = methods_arr.length;\r\n\r\n while (i--) {\r\n if (this.utils.hasOwnProperty(methods_arr[i])) {\r\n scope[methods_arr[i]] = this.utils[methods_arr[i]];\r\n }\r\n }\r\n },\r\n\r\n set_namespace : function () {\r\n\r\n // Description:\r\n // Don't bother reading the namespace out of the meta tag\r\n // if the namespace has been set globally in javascript\r\n //\r\n // Example:\r\n // Foundation.global.namespace = 'my-namespace';\r\n // or make it an empty string:\r\n // Foundation.global.namespace = '';\r\n //\r\n //\r\n\r\n // If the namespace has not been set (is undefined), try to read it out of the meta element.\r\n // Otherwise use the globally defined namespace, even if it's empty ('')\r\n var namespace = ( this.global.namespace === undefined ) ? $('.foundation-data-attribute-namespace').css('font-family') : this.global.namespace;\r\n\r\n // Finally, if the namsepace is either undefined or false, set it to an empty string.\r\n // Otherwise use the namespace value.\r\n this.global.namespace = ( namespace === undefined || /false/i.test(namespace) ) ? '' : namespace;\r\n },\r\n\r\n libs : {},\r\n\r\n // methods that can be inherited in libraries\r\n utils : {\r\n\r\n // Description:\r\n // Fast Selector wrapper returns jQuery object. Only use where getElementById\r\n // is not available.\r\n //\r\n // Arguments:\r\n // Selector (String): CSS selector describing the element(s) to be\r\n // returned as a jQuery object.\r\n //\r\n // Scope (String): CSS selector describing the area to be searched. Default\r\n // is document.\r\n //\r\n // Returns:\r\n // Element (jQuery Object): jQuery object containing elements matching the\r\n // selector within the scope.\r\n S : S,\r\n\r\n // Description:\r\n // Executes a function a max of once every n milliseconds\r\n //\r\n // Arguments:\r\n // Func (Function): Function to be throttled.\r\n //\r\n // Delay (Integer): Function execution threshold in milliseconds.\r\n //\r\n // Returns:\r\n // Lazy_function (Function): Function with throttling applied.\r\n throttle : function (func, delay) {\r\n var timer = null;\r\n\r\n return function () {\r\n var context = this, args = arguments;\r\n\r\n if (timer == null) {\r\n timer = setTimeout(function () {\r\n func.apply(context, args);\r\n timer = null;\r\n }, delay);\r\n }\r\n };\r\n },\r\n\r\n // Description:\r\n // Executes a function when it stops being invoked for n seconds\r\n // Modified version of _.debounce() http://underscorejs.org\r\n //\r\n // Arguments:\r\n // Func (Function): Function to be debounced.\r\n //\r\n // Delay (Integer): Function execution threshold in milliseconds.\r\n //\r\n // Immediate (Bool): Whether the function should be called at the beginning\r\n // of the delay instead of the end. Default is false.\r\n //\r\n // Returns:\r\n // Lazy_function (Function): Function with debouncing applied.\r\n debounce : function (func, delay, immediate) {\r\n var timeout, result;\r\n return function () {\r\n var context = this, args = arguments;\r\n var later = function () {\r\n timeout = null;\r\n if (!immediate) {\r\n result = func.apply(context, args);\r\n }\r\n };\r\n var callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, delay);\r\n if (callNow) {\r\n result = func.apply(context, args);\r\n }\r\n return result;\r\n };\r\n },\r\n\r\n // Description:\r\n // Parses data-options attribute\r\n //\r\n // Arguments:\r\n // El (jQuery Object): Element to be parsed.\r\n //\r\n // Returns:\r\n // Options (Javascript Object): Contents of the element's data-options\r\n // attribute.\r\n data_options : function (el, data_attr_name) {\r\n data_attr_name = data_attr_name || 'options';\r\n var opts = {}, ii, p, opts_arr,\r\n data_options = function (el) {\r\n var namespace = Foundation.global.namespace;\r\n\r\n if (namespace.length > 0) {\r\n return el.data(namespace + '-' + data_attr_name);\r\n }\r\n\r\n return el.data(data_attr_name);\r\n };\r\n\r\n var cached_options = data_options(el);\r\n\r\n if (typeof cached_options === 'object') {\r\n return cached_options;\r\n }\r\n\r\n opts_arr = (cached_options || ':').split(';');\r\n ii = opts_arr.length;\r\n\r\n function isNumber (o) {\r\n return !isNaN (o - 0) && o !== null && o !== '' && o !== false && o !== true;\r\n }\r\n\r\n function trim (str) {\r\n if (typeof str === 'string') {\r\n return $.trim(str);\r\n }\r\n return str;\r\n }\r\n\r\n while (ii--) {\r\n p = opts_arr[ii].split(':');\r\n p = [p[0], p.slice(1).join(':')];\r\n\r\n if (/true/i.test(p[1])) {\r\n p[1] = true;\r\n }\r\n if (/false/i.test(p[1])) {\r\n p[1] = false;\r\n }\r\n if (isNumber(p[1])) {\r\n if (p[1].indexOf('.') === -1) {\r\n p[1] = parseInt(p[1], 10);\r\n } else {\r\n p[1] = parseFloat(p[1]);\r\n }\r\n }\r\n\r\n if (p.length === 2 && p[0].length > 0) {\r\n opts[trim(p[0])] = trim(p[1]);\r\n }\r\n }\r\n\r\n return opts;\r\n },\r\n\r\n // Description:\r\n // Adds JS-recognizable media queries\r\n //\r\n // Arguments:\r\n // Media (String): Key string for the media query to be stored as in\r\n // Foundation.media_queries\r\n //\r\n // Class (String): Class name for the generated tag\r\n register_media : function (media, media_class) {\r\n if (Foundation.media_queries[media] === undefined) {\r\n $('head').append('');\r\n Foundation.media_queries[media] = removeQuotes($('.' + media_class).css('font-family'));\r\n }\r\n },\r\n\r\n // Description:\r\n // Add custom CSS within a JS-defined media query\r\n //\r\n // Arguments:\r\n // Rule (String): CSS rule to be appended to the document.\r\n //\r\n // Media (String): Optional media query string for the CSS rule to be\r\n // nested under.\r\n add_custom_rule : function (rule, media) {\r\n if (media === undefined && Foundation.stylesheet) {\r\n Foundation.stylesheet.insertRule(rule, Foundation.stylesheet.cssRules.length);\r\n } else {\r\n var query = Foundation.media_queries[media];\r\n\r\n if (query !== undefined) {\r\n Foundation.stylesheet.insertRule('@media ' +\r\n Foundation.media_queries[media] + '{ ' + rule + ' }', Foundation.stylesheet.cssRules.length);\r\n }\r\n }\r\n },\r\n\r\n // Description:\r\n // Performs a callback function when an image is fully loaded\r\n //\r\n // Arguments:\r\n // Image (jQuery Object): Image(s) to check if loaded.\r\n //\r\n // Callback (Function): Function to execute when image is fully loaded.\r\n image_loaded : function (images, callback) {\r\n var self = this,\r\n unloaded = images.length;\r\n\r\n function pictures_has_height(images) {\r\n var pictures_number = images.length;\r\n\r\n for (var i = pictures_number - 1; i >= 0; i--) {\r\n if(images.attr('height') === undefined) {\r\n return false;\r\n };\r\n };\r\n\r\n return true;\r\n }\r\n\r\n if (unloaded === 0 || pictures_has_height(images)) {\r\n callback(images);\r\n }\r\n\r\n images.each(function () {\r\n single_image_loaded(self.S(this), function () {\r\n unloaded -= 1;\r\n if (unloaded === 0) {\r\n callback(images);\r\n }\r\n });\r\n });\r\n },\r\n\r\n // Description:\r\n // Returns a random, alphanumeric string\r\n //\r\n // Arguments:\r\n // Length (Integer): Length of string to be generated. Defaults to random\r\n // integer.\r\n //\r\n // Returns:\r\n // Rand (String): Pseudo-random, alphanumeric string.\r\n random_str : function () {\r\n if (!this.fidx) {\r\n this.fidx = 0;\r\n }\r\n this.prefix = this.prefix || [(this.name || 'F'), (+new Date).toString(36)].join('-');\r\n\r\n return this.prefix + (this.fidx++).toString(36);\r\n },\r\n\r\n // Description:\r\n // Helper for window.matchMedia\r\n //\r\n // Arguments:\r\n // mq (String): Media query\r\n //\r\n // Returns:\r\n // (Boolean): Whether the media query passes or not\r\n match : function (mq) {\r\n return window.matchMedia(mq).matches;\r\n },\r\n\r\n // Description:\r\n // Helpers for checking Foundation default media queries with JS\r\n //\r\n // Returns:\r\n // (Boolean): Whether the media query passes or not\r\n\r\n is_small_up : function () {\r\n return this.match(Foundation.media_queries.small);\r\n },\r\n\r\n is_medium_up : function () {\r\n return this.match(Foundation.media_queries.medium);\r\n },\r\n\r\n is_large_up : function () {\r\n return this.match(Foundation.media_queries.large);\r\n },\r\n\r\n is_xlarge_up : function () {\r\n return this.match(Foundation.media_queries.xlarge);\r\n },\r\n\r\n is_xxlarge_up : function () {\r\n return this.match(Foundation.media_queries.xxlarge);\r\n },\r\n\r\n is_small_only : function () {\r\n return !this.is_medium_up() && !this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up();\r\n },\r\n\r\n is_medium_only : function () {\r\n return this.is_medium_up() && !this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up();\r\n },\r\n\r\n is_large_only : function () {\r\n return this.is_medium_up() && this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up();\r\n },\r\n\r\n is_xlarge_only : function () {\r\n return this.is_medium_up() && this.is_large_up() && this.is_xlarge_up() && !this.is_xxlarge_up();\r\n },\r\n\r\n is_xxlarge_only : function () {\r\n return this.is_medium_up() && this.is_large_up() && this.is_xlarge_up() && this.is_xxlarge_up();\r\n }\r\n }\r\n };\r\n\r\n $.fn.foundation = function () {\r\n var args = Array.prototype.slice.call(arguments, 0);\r\n\r\n return this.each(function () {\r\n Foundation.init.apply(Foundation, [this].concat(args));\r\n return this;\r\n });\r\n };\r\n\r\n}(jQuery, window, window.document));\r\n","/*!\r\n* jQuery Cycle2; version: 2.1.5 build: 20140415\r\n* http://jquery.malsup.com/cycle2/\r\n* Copyright (c) 2014 M. Alsup; Dual licensed: MIT/GPL\r\n*/\r\n\r\n/* Cycle2 core engine */\r\n;(function($) {\r\n\"use strict\";\r\n\r\nvar version = '2.1.5';\r\n\r\n$.fn.cycle = function( options ) {\r\n // fix mistakes with the ready state\r\n var o;\r\n if ( this.length === 0 && !$.isReady ) {\r\n o = { s: this.selector, c: this.context };\r\n $.fn.cycle.log('requeuing slideshow (dom not ready)');\r\n $(function() {\r\n $( o.s, o.c ).cycle(options);\r\n });\r\n return this;\r\n }\r\n\r\n return this.each(function() {\r\n var data, opts, shortName, val;\r\n var container = $(this);\r\n var log = $.fn.cycle.log;\r\n\r\n if ( container.data('cycle.opts') )\r\n return; // already initialized\r\n\r\n if ( container.data('cycle-log') === false ||\r\n ( options && options.log === false ) ||\r\n ( opts && opts.log === false) ) {\r\n log = $.noop;\r\n }\r\n\r\n log('--c2 init--');\r\n data = container.data();\r\n for (var p in data) {\r\n // allow props to be accessed sans 'cycle' prefix and log the overrides\r\n if (data.hasOwnProperty(p) && /^cycle[A-Z]+/.test(p) ) {\r\n val = data[p];\r\n shortName = p.match(/^cycle(.*)/)[1].replace(/^[A-Z]/, lowerCase);\r\n log(shortName+':', val, '('+typeof val +')');\r\n data[shortName] = val;\r\n }\r\n }\r\n\r\n opts = $.extend( {}, $.fn.cycle.defaults, data, options || {});\r\n\r\n opts.timeoutId = 0;\r\n opts.paused = opts.paused || false; // #57\r\n opts.container = container;\r\n opts._maxZ = opts.maxZ;\r\n\r\n opts.API = $.extend ( { _container: container }, $.fn.cycle.API );\r\n opts.API.log = log;\r\n opts.API.trigger = function( eventName, args ) {\r\n opts.container.trigger( eventName, args );\r\n return opts.API;\r\n };\r\n\r\n container.data( 'cycle.opts', opts );\r\n container.data( 'cycle.API', opts.API );\r\n\r\n // opportunity for plugins to modify opts and API\r\n opts.API.trigger('cycle-bootstrap', [ opts, opts.API ]);\r\n\r\n opts.API.addInitialSlides();\r\n opts.API.preInitSlideshow();\r\n\r\n if ( opts.slides.length )\r\n opts.API.initSlideshow();\r\n });\r\n};\r\n\r\n$.fn.cycle.API = {\r\n opts: function() {\r\n return this._container.data( 'cycle.opts' );\r\n },\r\n addInitialSlides: function() {\r\n var opts = this.opts();\r\n var slides = opts.slides;\r\n opts.slideCount = 0;\r\n opts.slides = $(); // empty set\r\n\r\n // add slides that already exist\r\n slides = slides.jquery ? slides : opts.container.find( slides );\r\n\r\n if ( opts.random ) {\r\n slides.sort(function() {return Math.random() - 0.5;});\r\n }\r\n\r\n opts.API.add( slides );\r\n },\r\n\r\n preInitSlideshow: function() {\r\n var opts = this.opts();\r\n opts.API.trigger('cycle-pre-initialize', [ opts ]);\r\n var tx = $.fn.cycle.transitions[opts.fx];\r\n if (tx && $.isFunction(tx.preInit))\r\n tx.preInit( opts );\r\n opts._preInitialized = true;\r\n },\r\n\r\n postInitSlideshow: function() {\r\n var opts = this.opts();\r\n opts.API.trigger('cycle-post-initialize', [ opts ]);\r\n var tx = $.fn.cycle.transitions[opts.fx];\r\n if (tx && $.isFunction(tx.postInit))\r\n tx.postInit( opts );\r\n },\r\n\r\n initSlideshow: function() {\r\n var opts = this.opts();\r\n var pauseObj = opts.container;\r\n var slideOpts;\r\n opts.API.calcFirstSlide();\r\n\r\n if ( opts.container.css('position') == 'static' )\r\n opts.container.css('position', 'relative');\r\n\r\n $(opts.slides[opts.currSlide]).css({\r\n opacity: 1,\r\n display: 'block',\r\n visibility: 'visible'\r\n });\r\n opts.API.stackSlides( opts.slides[opts.currSlide], opts.slides[opts.nextSlide], !opts.reverse );\r\n\r\n if ( opts.pauseOnHover ) {\r\n // allow pauseOnHover to specify an element\r\n if ( opts.pauseOnHover !== true )\r\n pauseObj = $( opts.pauseOnHover );\r\n\r\n pauseObj.hover(\r\n function(){ opts.API.pause( true ); },\r\n function(){ opts.API.resume( true ); }\r\n );\r\n }\r\n\r\n // stage initial transition\r\n if ( opts.timeout ) {\r\n slideOpts = opts.API.getSlideOpts( opts.currSlide );\r\n opts.API.queueTransition( slideOpts, slideOpts.timeout + opts.delay );\r\n }\r\n\r\n opts._initialized = true;\r\n opts.API.updateView( true );\r\n opts.API.trigger('cycle-initialized', [ opts ]);\r\n opts.API.postInitSlideshow();\r\n },\r\n\r\n pause: function( hover ) {\r\n var opts = this.opts(),\r\n slideOpts = opts.API.getSlideOpts(),\r\n alreadyPaused = opts.hoverPaused || opts.paused;\r\n\r\n if ( hover )\r\n opts.hoverPaused = true;\r\n else\r\n opts.paused = true;\r\n\r\n if ( ! alreadyPaused ) {\r\n opts.container.addClass('cycle-paused');\r\n opts.API.trigger('cycle-paused', [ opts ]).log('cycle-paused');\r\n\r\n if ( slideOpts.timeout ) {\r\n clearTimeout( opts.timeoutId );\r\n opts.timeoutId = 0;\r\n\r\n // determine how much time is left for the current slide\r\n opts._remainingTimeout -= ( $.now() - opts._lastQueue );\r\n if ( opts._remainingTimeout < 0 || isNaN(opts._remainingTimeout) )\r\n opts._remainingTimeout = undefined;\r\n }\r\n }\r\n },\r\n\r\n resume: function( hover ) {\r\n var opts = this.opts(),\r\n alreadyResumed = !opts.hoverPaused && !opts.paused,\r\n remaining;\r\n\r\n if ( hover )\r\n opts.hoverPaused = false;\r\n else\r\n opts.paused = false;\r\n\r\n\r\n if ( ! alreadyResumed ) {\r\n opts.container.removeClass('cycle-paused');\r\n // #gh-230; if an animation is in progress then don't queue a new transition; it will\r\n // happen naturally\r\n if ( opts.slides.filter(':animated').length === 0 )\r\n opts.API.queueTransition( opts.API.getSlideOpts(), opts._remainingTimeout );\r\n opts.API.trigger('cycle-resumed', [ opts, opts._remainingTimeout ] ).log('cycle-resumed');\r\n }\r\n },\r\n\r\n add: function( slides, prepend ) {\r\n var opts = this.opts();\r\n var oldSlideCount = opts.slideCount;\r\n var startSlideshow = false;\r\n var len;\r\n\r\n if ( $.type(slides) == 'string')\r\n slides = $.trim( slides );\r\n\r\n $( slides ).each(function(i) {\r\n var slideOpts;\r\n var slide = $(this);\r\n\r\n if ( prepend )\r\n opts.container.prepend( slide );\r\n else\r\n opts.container.append( slide );\r\n\r\n opts.slideCount++;\r\n slideOpts = opts.API.buildSlideOpts( slide );\r\n\r\n if ( prepend )\r\n opts.slides = $( slide ).add( opts.slides );\r\n else\r\n opts.slides = opts.slides.add( slide );\r\n\r\n opts.API.initSlide( slideOpts, slide, --opts._maxZ );\r\n\r\n slide.data('cycle.opts', slideOpts);\r\n opts.API.trigger('cycle-slide-added', [ opts, slideOpts, slide ]);\r\n });\r\n\r\n opts.API.updateView( true );\r\n\r\n startSlideshow = opts._preInitialized && (oldSlideCount < 2 && opts.slideCount >= 1);\r\n if ( startSlideshow ) {\r\n if ( !opts._initialized )\r\n opts.API.initSlideshow();\r\n else if ( opts.timeout ) {\r\n len = opts.slides.length;\r\n opts.nextSlide = opts.reverse ? len - 1 : 1;\r\n if ( !opts.timeoutId ) {\r\n opts.API.queueTransition( opts );\r\n }\r\n }\r\n }\r\n },\r\n\r\n calcFirstSlide: function() {\r\n var opts = this.opts();\r\n var firstSlideIndex;\r\n firstSlideIndex = parseInt( opts.startingSlide || 0, 10 );\r\n if (firstSlideIndex >= opts.slides.length || firstSlideIndex < 0)\r\n firstSlideIndex = 0;\r\n\r\n opts.currSlide = firstSlideIndex;\r\n if ( opts.reverse ) {\r\n opts.nextSlide = firstSlideIndex - 1;\r\n if (opts.nextSlide < 0)\r\n opts.nextSlide = opts.slides.length - 1;\r\n }\r\n else {\r\n opts.nextSlide = firstSlideIndex + 1;\r\n if (opts.nextSlide == opts.slides.length)\r\n opts.nextSlide = 0;\r\n }\r\n },\r\n\r\n calcNextSlide: function() {\r\n var opts = this.opts();\r\n var roll;\r\n if ( opts.reverse ) {\r\n roll = (opts.nextSlide - 1) < 0;\r\n opts.nextSlide = roll ? opts.slideCount - 1 : opts.nextSlide-1;\r\n opts.currSlide = roll ? 0 : opts.nextSlide+1;\r\n }\r\n else {\r\n roll = (opts.nextSlide + 1) == opts.slides.length;\r\n opts.nextSlide = roll ? 0 : opts.nextSlide+1;\r\n opts.currSlide = roll ? opts.slides.length-1 : opts.nextSlide-1;\r\n }\r\n },\r\n\r\n calcTx: function( slideOpts, manual ) {\r\n var opts = slideOpts;\r\n var tx;\r\n\r\n if ( opts._tempFx )\r\n tx = $.fn.cycle.transitions[opts._tempFx];\r\n else if ( manual && opts.manualFx )\r\n tx = $.fn.cycle.transitions[opts.manualFx];\r\n\r\n if ( !tx )\r\n tx = $.fn.cycle.transitions[opts.fx];\r\n\r\n opts._tempFx = null;\r\n this.opts()._tempFx = null;\r\n\r\n if (!tx) {\r\n tx = $.fn.cycle.transitions.fade;\r\n opts.API.log('Transition \"' + opts.fx + '\" not found. Using fade.');\r\n }\r\n return tx;\r\n },\r\n\r\n prepareTx: function( manual, fwd ) {\r\n var opts = this.opts();\r\n var after, curr, next, slideOpts, tx;\r\n\r\n if ( opts.slideCount < 2 ) {\r\n opts.timeoutId = 0;\r\n return;\r\n }\r\n if ( manual && ( !opts.busy || opts.manualTrump ) ) {\r\n opts.API.stopTransition();\r\n opts.busy = false;\r\n clearTimeout(opts.timeoutId);\r\n opts.timeoutId = 0;\r\n }\r\n if ( opts.busy )\r\n return;\r\n if ( opts.timeoutId === 0 && !manual )\r\n return;\r\n\r\n curr = opts.slides[opts.currSlide];\r\n next = opts.slides[opts.nextSlide];\r\n slideOpts = opts.API.getSlideOpts( opts.nextSlide );\r\n tx = opts.API.calcTx( slideOpts, manual );\r\n\r\n opts._tx = tx;\r\n\r\n if ( manual && slideOpts.manualSpeed !== undefined )\r\n slideOpts.speed = slideOpts.manualSpeed;\r\n\r\n // if ( opts.nextSlide === opts.currSlide )\r\n // opts.API.calcNextSlide();\r\n\r\n // ensure that:\r\n // 1. advancing to a different slide\r\n // 2. this is either a manual event (prev/next, pager, cmd) or\r\n // a timer event and slideshow is not paused\r\n if ( opts.nextSlide != opts.currSlide &&\r\n (manual || (!opts.paused && !opts.hoverPaused && opts.timeout) )) { // #62\r\n\r\n opts.API.trigger('cycle-before', [ slideOpts, curr, next, fwd ]);\r\n if ( tx.before )\r\n tx.before( slideOpts, curr, next, fwd );\r\n\r\n after = function() {\r\n opts.busy = false;\r\n // #76; bail if slideshow has been destroyed\r\n if (! opts.container.data( 'cycle.opts' ) )\r\n return;\r\n\r\n if (tx.after)\r\n tx.after( slideOpts, curr, next, fwd );\r\n opts.API.trigger('cycle-after', [ slideOpts, curr, next, fwd ]);\r\n opts.API.queueTransition( slideOpts);\r\n opts.API.updateView( true );\r\n };\r\n\r\n opts.busy = true;\r\n if (tx.transition)\r\n tx.transition(slideOpts, curr, next, fwd, after);\r\n else\r\n opts.API.doTransition( slideOpts, curr, next, fwd, after);\r\n\r\n opts.API.calcNextSlide();\r\n opts.API.updateView();\r\n } else {\r\n opts.API.queueTransition( slideOpts );\r\n }\r\n },\r\n\r\n // perform the actual animation\r\n doTransition: function( slideOpts, currEl, nextEl, fwd, callback) {\r\n var opts = slideOpts;\r\n var curr = $(currEl), next = $(nextEl);\r\n var fn = function() {\r\n // make sure animIn has something so that callback doesn't trigger immediately\r\n next.animate(opts.animIn || { opacity: 1}, opts.speed, opts.easeIn || opts.easing, callback);\r\n };\r\n\r\n next.css(opts.cssBefore || {});\r\n curr.animate(opts.animOut || {}, opts.speed, opts.easeOut || opts.easing, function() {\r\n curr.css(opts.cssAfter || {});\r\n if (!opts.sync) {\r\n fn();\r\n }\r\n });\r\n if (opts.sync) {\r\n fn();\r\n }\r\n },\r\n\r\n queueTransition: function( slideOpts, specificTimeout ) {\r\n var opts = this.opts();\r\n var timeout = specificTimeout !== undefined ? specificTimeout : slideOpts.timeout;\r\n if (opts.nextSlide === 0 && --opts.loop === 0) {\r\n opts.API.log('terminating; loop=0');\r\n opts.timeout = 0;\r\n if ( timeout ) {\r\n setTimeout(function() {\r\n opts.API.trigger('cycle-finished', [ opts ]);\r\n }, timeout);\r\n }\r\n else {\r\n opts.API.trigger('cycle-finished', [ opts ]);\r\n }\r\n // reset nextSlide\r\n opts.nextSlide = opts.currSlide;\r\n return;\r\n }\r\n if ( opts.continueAuto !== undefined ) {\r\n if ( opts.continueAuto === false ||\r\n ($.isFunction(opts.continueAuto) && opts.continueAuto() === false )) {\r\n opts.API.log('terminating automatic transitions');\r\n opts.timeout = 0;\r\n if ( opts.timeoutId )\r\n clearTimeout(opts.timeoutId);\r\n return;\r\n }\r\n }\r\n if ( timeout ) {\r\n opts._lastQueue = $.now();\r\n if ( specificTimeout === undefined )\r\n opts._remainingTimeout = slideOpts.timeout;\r\n\r\n if ( !opts.paused && ! opts.hoverPaused ) {\r\n opts.timeoutId = setTimeout(function() {\r\n opts.API.prepareTx( false, !opts.reverse );\r\n }, timeout );\r\n }\r\n }\r\n },\r\n\r\n stopTransition: function() {\r\n var opts = this.opts();\r\n if ( opts.slides.filter(':animated').length ) {\r\n opts.slides.stop(false, true);\r\n opts.API.trigger('cycle-transition-stopped', [ opts ]);\r\n }\r\n\r\n if ( opts._tx && opts._tx.stopTransition )\r\n opts._tx.stopTransition( opts );\r\n },\r\n\r\n // advance slide forward or back\r\n advanceSlide: function( val ) {\r\n var opts = this.opts();\r\n clearTimeout(opts.timeoutId);\r\n opts.timeoutId = 0;\r\n opts.nextSlide = opts.currSlide + val;\r\n\r\n if (opts.nextSlide < 0)\r\n opts.nextSlide = opts.slides.length - 1;\r\n else if (opts.nextSlide >= opts.slides.length)\r\n opts.nextSlide = 0;\r\n\r\n opts.API.prepareTx( true, val >= 0 );\r\n return false;\r\n },\r\n\r\n buildSlideOpts: function( slide ) {\r\n var opts = this.opts();\r\n var val, shortName;\r\n var slideOpts = slide.data() || {};\r\n for (var p in slideOpts) {\r\n // allow props to be accessed sans 'cycle' prefix and log the overrides\r\n if (slideOpts.hasOwnProperty(p) && /^cycle[A-Z]+/.test(p) ) {\r\n val = slideOpts[p];\r\n shortName = p.match(/^cycle(.*)/)[1].replace(/^[A-Z]/, lowerCase);\r\n opts.API.log('['+(opts.slideCount-1)+']', shortName+':', val, '('+typeof val +')');\r\n slideOpts[shortName] = val;\r\n }\r\n }\r\n\r\n slideOpts = $.extend( {}, $.fn.cycle.defaults, opts, slideOpts );\r\n slideOpts.slideNum = opts.slideCount;\r\n\r\n try {\r\n // these props should always be read from the master state object\r\n delete slideOpts.API;\r\n delete slideOpts.slideCount;\r\n delete slideOpts.currSlide;\r\n delete slideOpts.nextSlide;\r\n delete slideOpts.slides;\r\n } catch(e) {\r\n // no op\r\n }\r\n return slideOpts;\r\n },\r\n\r\n getSlideOpts: function( index ) {\r\n var opts = this.opts();\r\n if ( index === undefined )\r\n index = opts.currSlide;\r\n\r\n var slide = opts.slides[index];\r\n var slideOpts = $(slide).data('cycle.opts');\r\n return $.extend( {}, opts, slideOpts );\r\n },\r\n\r\n initSlide: function( slideOpts, slide, suggestedZindex ) {\r\n var opts = this.opts();\r\n slide.css( slideOpts.slideCss || {} );\r\n if ( suggestedZindex > 0 )\r\n slide.css( 'zIndex', suggestedZindex );\r\n\r\n // ensure that speed settings are sane\r\n if ( isNaN( slideOpts.speed ) )\r\n slideOpts.speed = $.fx.speeds[slideOpts.speed] || $.fx.speeds._default;\r\n if ( !slideOpts.sync )\r\n slideOpts.speed = slideOpts.speed / 2;\r\n\r\n slide.addClass( opts.slideClass );\r\n },\r\n\r\n updateView: function( isAfter, isDuring, forceEvent ) {\r\n var opts = this.opts();\r\n if ( !opts._initialized )\r\n return;\r\n var slideOpts = opts.API.getSlideOpts();\r\n var currSlide = opts.slides[ opts.currSlide ];\r\n\r\n if ( ! isAfter && isDuring !== true ) {\r\n opts.API.trigger('cycle-update-view-before', [ opts, slideOpts, currSlide ]);\r\n if ( opts.updateView < 0 )\r\n return;\r\n }\r\n\r\n if ( opts.slideActiveClass ) {\r\n opts.slides.removeClass( opts.slideActiveClass )\r\n .eq( opts.currSlide ).addClass( opts.slideActiveClass );\r\n }\r\n\r\n if ( isAfter && opts.hideNonActive )\r\n opts.slides.filter( ':not(.' + opts.slideActiveClass + ')' ).css('visibility', 'hidden');\r\n\r\n if ( opts.updateView === 0 ) {\r\n setTimeout(function() {\r\n opts.API.trigger('cycle-update-view', [ opts, slideOpts, currSlide, isAfter ]);\r\n }, slideOpts.speed / (opts.sync ? 2 : 1) );\r\n }\r\n\r\n if ( opts.updateView !== 0 )\r\n opts.API.trigger('cycle-update-view', [ opts, slideOpts, currSlide, isAfter ]);\r\n\r\n if ( isAfter )\r\n opts.API.trigger('cycle-update-view-after', [ opts, slideOpts, currSlide ]);\r\n },\r\n\r\n getComponent: function( name ) {\r\n var opts = this.opts();\r\n var selector = opts[name];\r\n if (typeof selector === 'string') {\r\n // if selector is a child, sibling combinator, adjancent selector then use find, otherwise query full dom\r\n return (/^\\s*[\\>|\\+|~]/).test( selector ) ? opts.container.find( selector ) : $( selector );\r\n }\r\n if (selector.jquery)\r\n return selector;\r\n\r\n return $(selector);\r\n },\r\n\r\n stackSlides: function( curr, next, fwd ) {\r\n var opts = this.opts();\r\n if ( !curr ) {\r\n curr = opts.slides[opts.currSlide];\r\n next = opts.slides[opts.nextSlide];\r\n fwd = !opts.reverse;\r\n }\r\n\r\n // reset the zIndex for the common case:\r\n // curr slide on top, next slide beneath, and the rest in order to be shown\r\n $(curr).css('zIndex', opts.maxZ);\r\n\r\n var i;\r\n var z = opts.maxZ - 2;\r\n var len = opts.slideCount;\r\n if (fwd) {\r\n for ( i = opts.currSlide + 1; i < len; i++ )\r\n $( opts.slides[i] ).css( 'zIndex', z-- );\r\n for ( i = 0; i < opts.currSlide; i++ )\r\n $( opts.slides[i] ).css( 'zIndex', z-- );\r\n }\r\n else {\r\n for ( i = opts.currSlide - 1; i >= 0; i-- )\r\n $( opts.slides[i] ).css( 'zIndex', z-- );\r\n for ( i = len - 1; i > opts.currSlide; i-- )\r\n $( opts.slides[i] ).css( 'zIndex', z-- );\r\n }\r\n\r\n $(next).css('zIndex', opts.maxZ - 1);\r\n },\r\n\r\n getSlideIndex: function( el ) {\r\n return this.opts().slides.index( el );\r\n }\r\n\r\n}; // API\r\n\r\n// default logger\r\n$.fn.cycle.log = function log() {\r\n /*global console:true */\r\n if (window.console && console.log)\r\n console.log('[cycle2] ' + Array.prototype.join.call(arguments, ' ') );\r\n};\r\n\r\n$.fn.cycle.version = function() { return 'Cycle2: ' + version; };\r\n\r\n// helper functions\r\n\r\nfunction lowerCase(s) {\r\n return (s || '').toLowerCase();\r\n}\r\n\r\n// expose transition object\r\n$.fn.cycle.transitions = {\r\n custom: {\r\n },\r\n none: {\r\n before: function( opts, curr, next, fwd ) {\r\n opts.API.stackSlides( next, curr, fwd );\r\n opts.cssBefore = { opacity: 1, visibility: 'visible', display: 'block' };\r\n }\r\n },\r\n fade: {\r\n before: function( opts, curr, next, fwd ) {\r\n var css = opts.API.getSlideOpts( opts.nextSlide ).slideCss || {};\r\n opts.API.stackSlides( curr, next, fwd );\r\n opts.cssBefore = $.extend(css, { opacity: 0, visibility: 'visible', display: 'block' });\r\n opts.animIn = { opacity: 1 };\r\n opts.animOut = { opacity: 0 };\r\n }\r\n },\r\n fadeout: {\r\n before: function( opts , curr, next, fwd ) {\r\n var css = opts.API.getSlideOpts( opts.nextSlide ).slideCss || {};\r\n opts.API.stackSlides( curr, next, fwd );\r\n opts.cssBefore = $.extend(css, { opacity: 1, visibility: 'visible', display: 'block' });\r\n opts.animOut = { opacity: 0 };\r\n }\r\n },\r\n scrollHorz: {\r\n before: function( opts, curr, next, fwd ) {\r\n opts.API.stackSlides( curr, next, fwd );\r\n var w = opts.container.css('overflow','hidden').width();\r\n opts.cssBefore = { left: fwd ? w : - w, top: 0, opacity: 1, visibility: 'visible', display: 'block' };\r\n opts.cssAfter = { zIndex: opts._maxZ - 2, left: 0 };\r\n opts.animIn = { left: 0 };\r\n opts.animOut = { left: fwd ? -w : w };\r\n }\r\n }\r\n};\r\n\r\n// @see: http://jquery.malsup.com/cycle2/api\r\n$.fn.cycle.defaults = {\r\n allowWrap: true,\r\n autoSelector: '.cycle-slideshow[data-cycle-auto-init!=false]',\r\n delay: 0,\r\n easing: null,\r\n fx: 'fade',\r\n hideNonActive: true,\r\n loop: 0,\r\n manualFx: undefined,\r\n manualSpeed: undefined,\r\n manualTrump: true,\r\n maxZ: 100,\r\n pauseOnHover: false,\r\n reverse: false,\r\n slideActiveClass: 'cycle-slide-active',\r\n slideClass: 'cycle-slide',\r\n slideCss: { position: 'absolute', top: 0, left: 0 },\r\n slides: '> img',\r\n speed: 500,\r\n startingSlide: 0,\r\n sync: true,\r\n timeout: 4000,\r\n updateView: 0\r\n};\r\n\r\n// automatically find and run slideshows\r\n$(document).ready(function() {\r\n $( $.fn.cycle.defaults.autoSelector ).cycle();\r\n});\r\n\r\n})(jQuery);\r\n\r\n/*! Cycle2 autoheight plugin; Copyright (c) M.Alsup, 2012; version: 20130913 */\r\n(function($) {\r\n\"use strict\";\r\n\r\n$.extend($.fn.cycle.defaults, {\r\n autoHeight: 0, // setting this option to false disables autoHeight logic\r\n autoHeightSpeed: 250,\r\n autoHeightEasing: null\r\n});\r\n\r\n$(document).on( 'cycle-initialized', function( e, opts ) {\r\n var autoHeight = opts.autoHeight;\r\n var t = $.type( autoHeight );\r\n var resizeThrottle = null;\r\n var ratio;\r\n\r\n if ( t !== 'string' && t !== 'number' )\r\n return;\r\n\r\n // bind events\r\n opts.container.on( 'cycle-slide-added cycle-slide-removed', initAutoHeight );\r\n opts.container.on( 'cycle-destroyed', onDestroy );\r\n\r\n if ( autoHeight == 'container' ) {\r\n opts.container.on( 'cycle-before', onBefore );\r\n }\r\n else if ( t === 'string' && /\\d+\\:\\d+/.test( autoHeight ) ) {\r\n // use ratio\r\n ratio = autoHeight.match(/(\\d+)\\:(\\d+)/);\r\n ratio = ratio[1] / ratio[2];\r\n opts._autoHeightRatio = ratio;\r\n }\r\n\r\n // if autoHeight is a number then we don't need to recalculate the sentinel\r\n // index on resize\r\n if ( t !== 'number' ) {\r\n // bind unique resize handler per slideshow (so it can be 'off-ed' in onDestroy)\r\n opts._autoHeightOnResize = function () {\r\n clearTimeout( resizeThrottle );\r\n resizeThrottle = setTimeout( onResize, 50 );\r\n };\r\n\r\n $(window).on( 'resize orientationchange', opts._autoHeightOnResize );\r\n }\r\n\r\n setTimeout( onResize, 30 );\r\n\r\n function onResize() {\r\n initAutoHeight( e, opts );\r\n }\r\n});\r\n\r\nfunction initAutoHeight( e, opts ) {\r\n var clone, height, sentinelIndex;\r\n var autoHeight = opts.autoHeight;\r\n\r\n if ( autoHeight == 'container' ) {\r\n height = $( opts.slides[ opts.currSlide ] ).outerHeight();\r\n opts.container.height( height );\r\n }\r\n else if ( opts._autoHeightRatio ) {\r\n opts.container.height( opts.container.width() / opts._autoHeightRatio );\r\n }\r\n else if ( autoHeight === 'calc' || ( $.type( autoHeight ) == 'number' && autoHeight >= 0 ) ) {\r\n if ( autoHeight === 'calc' )\r\n sentinelIndex = calcSentinelIndex( e, opts );\r\n else if ( autoHeight >= opts.slides.length )\r\n sentinelIndex = 0;\r\n else\r\n sentinelIndex = autoHeight;\r\n\r\n // only recreate sentinel if index is different\r\n if ( sentinelIndex == opts._sentinelIndex )\r\n return;\r\n\r\n opts._sentinelIndex = sentinelIndex;\r\n if ( opts._sentinel )\r\n opts._sentinel.remove();\r\n\r\n // clone existing slide as sentinel\r\n clone = $( opts.slides[ sentinelIndex ].cloneNode(true) );\r\n\r\n // #50; remove special attributes from cloned content\r\n clone.removeAttr( 'id name rel' ).find( '[id],[name],[rel]' ).removeAttr( 'id name rel' );\r\n\r\n clone.css({\r\n position: 'static',\r\n visibility: 'hidden',\r\n display: 'block'\r\n }).prependTo( opts.container ).addClass('cycle-sentinel cycle-slide').removeClass('cycle-slide-active');\r\n clone.find( '*' ).css( 'visibility', 'hidden' );\r\n\r\n opts._sentinel = clone;\r\n }\r\n}\r\n\r\nfunction calcSentinelIndex( e, opts ) {\r\n var index = 0, max = -1;\r\n\r\n // calculate tallest slide index\r\n opts.slides.each(function(i) {\r\n var h = $(this).height();\r\n if ( h > max ) {\r\n max = h;\r\n index = i;\r\n }\r\n });\r\n return index;\r\n}\r\n\r\nfunction onBefore( e, opts, outgoing, incoming, forward ) {\r\n var h = $(incoming).outerHeight();\r\n opts.container.animate( { height: h }, opts.autoHeightSpeed, opts.autoHeightEasing );\r\n}\r\n\r\nfunction onDestroy( e, opts ) {\r\n if ( opts._autoHeightOnResize ) {\r\n $(window).off( 'resize orientationchange', opts._autoHeightOnResize );\r\n opts._autoHeightOnResize = null;\r\n }\r\n opts.container.off( 'cycle-slide-added cycle-slide-removed', initAutoHeight );\r\n opts.container.off( 'cycle-destroyed', onDestroy );\r\n opts.container.off( 'cycle-before', onBefore );\r\n\r\n if ( opts._sentinel ) {\r\n opts._sentinel.remove();\r\n opts._sentinel = null;\r\n }\r\n}\r\n\r\n})(jQuery);\r\n\r\n/*! caption plugin for Cycle2; version: 20130306 */\r\n(function($) {\r\n\"use strict\";\r\n\r\n$.extend($.fn.cycle.defaults, {\r\n caption: '> .cycle-caption',\r\n captionTemplate: '{{slideNum}} / {{slideCount}}',\r\n overlay: '> .cycle-overlay',\r\n overlayTemplate: '{{title}}
{{desc}}
',\r\n captionModule: 'caption'\r\n});\r\n\r\n$(document).on( 'cycle-update-view', function( e, opts, slideOpts, currSlide ) {\r\n if ( opts.captionModule !== 'caption' )\r\n return;\r\n var el;\r\n $.each(['caption','overlay'], function() {\r\n var name = this;\r\n var template = slideOpts[name+'Template'];\r\n var el = opts.API.getComponent( name );\r\n if( el.length && template ) {\r\n el.html( opts.API.tmpl( template, slideOpts, opts, currSlide ) );\r\n el.show();\r\n }\r\n else {\r\n el.hide();\r\n }\r\n });\r\n});\r\n\r\n$(document).on( 'cycle-destroyed', function( e, opts ) {\r\n var el;\r\n $.each(['caption','overlay'], function() {\r\n var name = this, template = opts[name+'Template'];\r\n if ( opts[name] && template ) {\r\n el = opts.API.getComponent( 'caption' );\r\n el.empty();\r\n }\r\n });\r\n});\r\n\r\n})(jQuery);\r\n\r\n/*! command plugin for Cycle2; version: 20140415 */\r\n(function($) {\r\n\"use strict\";\r\n\r\nvar c2 = $.fn.cycle;\r\n\r\n$.fn.cycle = function( options ) {\r\n var cmd, cmdFn, opts;\r\n var args = $.makeArray( arguments );\r\n\r\n if ( $.type( options ) == 'number' ) {\r\n return this.cycle( 'goto', options );\r\n }\r\n\r\n if ( $.type( options ) == 'string' ) {\r\n return this.each(function() {\r\n var cmdArgs;\r\n cmd = options;\r\n opts = $(this).data('cycle.opts');\r\n\r\n if ( opts === undefined ) {\r\n c2.log('slideshow must be initialized before sending commands; \"' + cmd + '\" ignored');\r\n return;\r\n }\r\n else {\r\n cmd = cmd == 'goto' ? 'jump' : cmd; // issue #3; change 'goto' to 'jump' internally\r\n cmdFn = opts.API[ cmd ];\r\n if ( $.isFunction( cmdFn )) {\r\n cmdArgs = $.makeArray( args );\r\n cmdArgs.shift();\r\n return cmdFn.apply( opts.API, cmdArgs );\r\n }\r\n else {\r\n c2.log( 'unknown command: ', cmd );\r\n }\r\n }\r\n });\r\n }\r\n else {\r\n return c2.apply( this, arguments );\r\n }\r\n};\r\n\r\n// copy props\r\n$.extend( $.fn.cycle, c2 );\r\n\r\n$.extend( c2.API, {\r\n next: function() {\r\n var opts = this.opts();\r\n if ( opts.busy && ! opts.manualTrump )\r\n return;\r\n\r\n var count = opts.reverse ? -1 : 1;\r\n if ( opts.allowWrap === false && ( opts.currSlide + count ) >= opts.slideCount )\r\n return;\r\n\r\n opts.API.advanceSlide( count );\r\n opts.API.trigger('cycle-next', [ opts ]).log('cycle-next');\r\n },\r\n\r\n prev: function() {\r\n var opts = this.opts();\r\n if ( opts.busy && ! opts.manualTrump )\r\n return;\r\n var count = opts.reverse ? 1 : -1;\r\n if ( opts.allowWrap === false && ( opts.currSlide + count ) < 0 )\r\n return;\r\n\r\n opts.API.advanceSlide( count );\r\n opts.API.trigger('cycle-prev', [ opts ]).log('cycle-prev');\r\n },\r\n\r\n destroy: function() {\r\n this.stop(); //#204\r\n\r\n var opts = this.opts();\r\n var clean = $.isFunction( $._data ) ? $._data : $.noop; // hack for #184 and #201\r\n clearTimeout(opts.timeoutId);\r\n opts.timeoutId = 0;\r\n opts.API.stop();\r\n opts.API.trigger( 'cycle-destroyed', [ opts ] ).log('cycle-destroyed');\r\n opts.container.removeData();\r\n clean( opts.container[0], 'parsedAttrs', false );\r\n\r\n // #75; remove inline styles\r\n if ( ! opts.retainStylesOnDestroy ) {\r\n opts.container.removeAttr( 'style' );\r\n opts.slides.removeAttr( 'style' );\r\n opts.slides.removeClass( opts.slideActiveClass );\r\n }\r\n opts.slides.each(function() {\r\n $(this).removeData();\r\n clean( this, 'parsedAttrs', false );\r\n });\r\n },\r\n\r\n jump: function( index, fx ) {\r\n // go to the requested slide\r\n var fwd;\r\n var opts = this.opts();\r\n if ( opts.busy && ! opts.manualTrump )\r\n return;\r\n var num = parseInt( index, 10 );\r\n if (isNaN(num) || num < 0 || num >= opts.slides.length) {\r\n opts.API.log('goto: invalid slide index: ' + num);\r\n return;\r\n }\r\n if (num == opts.currSlide) {\r\n opts.API.log('goto: skipping, already on slide', num);\r\n return;\r\n }\r\n opts.nextSlide = num;\r\n clearTimeout(opts.timeoutId);\r\n opts.timeoutId = 0;\r\n opts.API.log('goto: ', num, ' (zero-index)');\r\n fwd = opts.currSlide < opts.nextSlide;\r\n opts._tempFx = fx;\r\n opts.API.prepareTx( true, fwd );\r\n },\r\n\r\n stop: function() {\r\n var opts = this.opts();\r\n var pauseObj = opts.container;\r\n clearTimeout(opts.timeoutId);\r\n opts.timeoutId = 0;\r\n opts.API.stopTransition();\r\n if ( opts.pauseOnHover ) {\r\n if ( opts.pauseOnHover !== true )\r\n pauseObj = $( opts.pauseOnHover );\r\n pauseObj.off('mouseenter mouseleave');\r\n }\r\n opts.API.trigger('cycle-stopped', [ opts ]).log('cycle-stopped');\r\n },\r\n\r\n reinit: function() {\r\n var opts = this.opts();\r\n opts.API.destroy();\r\n opts.container.cycle();\r\n },\r\n\r\n remove: function( index ) {\r\n var opts = this.opts();\r\n var slide, slideToRemove, slides = [], slideNum = 1;\r\n for ( var i=0; i < opts.slides.length; i++ ) {\r\n slide = opts.slides[i];\r\n if ( i == index ) {\r\n slideToRemove = slide;\r\n }\r\n else {\r\n slides.push( slide );\r\n $( slide ).data('cycle.opts').slideNum = slideNum;\r\n slideNum++;\r\n }\r\n }\r\n if ( slideToRemove ) {\r\n opts.slides = $( slides );\r\n opts.slideCount--;\r\n $( slideToRemove ).remove();\r\n if (index == opts.currSlide)\r\n opts.API.advanceSlide( 1 );\r\n else if ( index < opts.currSlide )\r\n opts.currSlide--;\r\n else\r\n opts.currSlide++;\r\n\r\n opts.API.trigger('cycle-slide-removed', [ opts, index, slideToRemove ]).log('cycle-slide-removed');\r\n opts.API.updateView();\r\n }\r\n }\r\n\r\n});\r\n\r\n// listen for clicks on elements with data-cycle-cmd attribute\r\n$(document).on('click.cycle', '[data-cycle-cmd]', function(e) {\r\n // issue cycle command\r\n e.preventDefault();\r\n var el = $(this);\r\n var command = el.data('cycle-cmd');\r\n var context = el.data('cycle-context') || '.cycle-slideshow';\r\n $(context).cycle(command, el.data('cycle-arg'));\r\n});\r\n\r\n\r\n})(jQuery);\r\n\r\n/*! hash plugin for Cycle2; version: 20130905 */\r\n(function($) {\r\n\"use strict\";\r\n\r\n$(document).on( 'cycle-pre-initialize', function( e, opts ) {\r\n onHashChange( opts, true );\r\n\r\n opts._onHashChange = function() {\r\n onHashChange( opts, false );\r\n };\r\n\r\n $( window ).on( 'hashchange', opts._onHashChange);\r\n});\r\n\r\n$(document).on( 'cycle-update-view', function( e, opts, slideOpts ) {\r\n if ( slideOpts.hash && ( '#' + slideOpts.hash ) != window.location.hash ) {\r\n opts._hashFence = true;\r\n window.location.hash = slideOpts.hash;\r\n }\r\n});\r\n\r\n$(document).on( 'cycle-destroyed', function( e, opts) {\r\n if ( opts._onHashChange ) {\r\n $( window ).off( 'hashchange', opts._onHashChange );\r\n }\r\n});\r\n\r\nfunction onHashChange( opts, setStartingSlide ) {\r\n var hash;\r\n if ( opts._hashFence ) {\r\n opts._hashFence = false;\r\n return;\r\n }\r\n\r\n hash = window.location.hash.substring(1);\r\n\r\n opts.slides.each(function(i) {\r\n if ( $(this).data( 'cycle-hash' ) == hash ) {\r\n if ( setStartingSlide === true ) {\r\n opts.startingSlide = i;\r\n }\r\n else {\r\n var fwd = opts.currSlide < i;\r\n opts.nextSlide = i;\r\n opts.API.prepareTx( true, fwd );\r\n }\r\n return false;\r\n }\r\n });\r\n}\r\n\r\n})(jQuery);\r\n\r\n/*! loader plugin for Cycle2; version: 20131121 */\r\n(function($) {\r\n\"use strict\";\r\n\r\n$.extend($.fn.cycle.defaults, {\r\n loader: false\r\n});\r\n\r\n$(document).on( 'cycle-bootstrap', function( e, opts ) {\r\n var addFn;\r\n\r\n if ( !opts.loader )\r\n return;\r\n\r\n // override API.add for this slideshow\r\n addFn = opts.API.add;\r\n opts.API.add = add;\r\n\r\n function add( slides, prepend ) {\r\n var slideArr = [];\r\n if ( $.type( slides ) == 'string' )\r\n slides = $.trim( slides );\r\n else if ( $.type( slides) === 'array' ) {\r\n for (var i=0; i < slides.length; i++ )\r\n slides[i] = $(slides[i])[0];\r\n }\r\n\r\n slides = $( slides );\r\n var slideCount = slides.length;\r\n\r\n if ( ! slideCount )\r\n return;\r\n\r\n slides.css('visibility','hidden').appendTo('body').each(function(i) { // appendTo fixes #56\r\n var count = 0;\r\n var slide = $(this);\r\n var images = slide.is('img') ? slide : slide.find('img');\r\n slide.data('index', i);\r\n // allow some images to be marked as unimportant (and filter out images w/o src value)\r\n images = images.filter(':not(.cycle-loader-ignore)').filter(':not([src=\"\"])');\r\n if ( ! images.length ) {\r\n --slideCount;\r\n slideArr.push( slide );\r\n return;\r\n }\r\n\r\n count = images.length;\r\n images.each(function() {\r\n // add images that are already loaded\r\n if ( this.complete ) {\r\n imageLoaded();\r\n }\r\n else {\r\n $(this).load(function() {\r\n imageLoaded();\r\n }).on(\"error\", function() {\r\n if ( --count === 0 ) {\r\n // ignore this slide\r\n opts.API.log('slide skipped; img not loaded:', this.src);\r\n if ( --slideCount === 0 && opts.loader == 'wait') {\r\n addFn.apply( opts.API, [ slideArr, prepend ] );\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n function imageLoaded() {\r\n if ( --count === 0 ) {\r\n --slideCount;\r\n addSlide( slide );\r\n }\r\n }\r\n });\r\n\r\n if ( slideCount )\r\n opts.container.addClass('cycle-loading');\r\n\r\n\r\n function addSlide( slide ) {\r\n var curr;\r\n if ( opts.loader == 'wait' ) {\r\n slideArr.push( slide );\r\n if ( slideCount === 0 ) {\r\n // #59; sort slides into original markup order\r\n slideArr.sort( sorter );\r\n addFn.apply( opts.API, [ slideArr, prepend ] );\r\n opts.container.removeClass('cycle-loading');\r\n }\r\n }\r\n else {\r\n curr = $(opts.slides[opts.currSlide]);\r\n addFn.apply( opts.API, [ slide, prepend ] );\r\n curr.show();\r\n opts.container.removeClass('cycle-loading');\r\n }\r\n }\r\n\r\n function sorter(a, b) {\r\n return a.data('index') - b.data('index');\r\n }\r\n }\r\n});\r\n\r\n})(jQuery);\r\n\r\n/*! pager plugin for Cycle2; version: 20140415 */\r\n(function($) {\r\n\"use strict\";\r\n\r\n$.extend($.fn.cycle.defaults, {\r\n pager: '> .cycle-pager',\r\n pagerActiveClass: 'cycle-pager-active',\r\n pagerEvent: 'click.cycle',\r\n pagerEventBubble: undefined,\r\n pagerTemplate: '•'\r\n});\r\n\r\n$(document).on( 'cycle-bootstrap', function( e, opts, API ) {\r\n // add method to API\r\n API.buildPagerLink = buildPagerLink;\r\n});\r\n\r\n$(document).on( 'cycle-slide-added', function( e, opts, slideOpts, slideAdded ) {\r\n if ( opts.pager ) {\r\n opts.API.buildPagerLink ( opts, slideOpts, slideAdded );\r\n opts.API.page = page;\r\n }\r\n});\r\n\r\n$(document).on( 'cycle-slide-removed', function( e, opts, index, slideRemoved ) {\r\n if ( opts.pager ) {\r\n var pagers = opts.API.getComponent( 'pager' );\r\n pagers.each(function() {\r\n var pager = $(this);\r\n $( pager.children()[index] ).remove();\r\n });\r\n }\r\n});\r\n\r\n$(document).on( 'cycle-update-view', function( e, opts, slideOpts ) {\r\n var pagers;\r\n\r\n if ( opts.pager ) {\r\n pagers = opts.API.getComponent( 'pager' );\r\n pagers.each(function() {\r\n $(this).children().removeClass( opts.pagerActiveClass )\r\n .eq( opts.currSlide ).addClass( opts.pagerActiveClass );\r\n });\r\n }\r\n});\r\n\r\n$(document).on( 'cycle-destroyed', function( e, opts ) {\r\n var pager = opts.API.getComponent( 'pager' );\r\n\r\n if ( pager ) {\r\n pager.children().off( opts.pagerEvent ); // #202\r\n if ( opts.pagerTemplate )\r\n pager.empty();\r\n }\r\n});\r\n\r\nfunction buildPagerLink( opts, slideOpts, slide ) {\r\n var pagerLink;\r\n var pagers = opts.API.getComponent( 'pager' );\r\n pagers.each(function() {\r\n var pager = $(this);\r\n if ( slideOpts.pagerTemplate ) {\r\n var markup = opts.API.tmpl( slideOpts.pagerTemplate, slideOpts, opts, slide[0] );\r\n pagerLink = $( markup ).appendTo( pager );\r\n }\r\n else {\r\n pagerLink = pager.children().eq( opts.slideCount - 1 );\r\n }\r\n pagerLink.on( opts.pagerEvent, function(e) {\r\n if ( ! opts.pagerEventBubble )\r\n e.preventDefault();\r\n opts.API.page( pager, e.currentTarget);\r\n });\r\n });\r\n}\r\n\r\nfunction page( pager, target ) {\r\n /*jshint validthis:true */\r\n var opts = this.opts();\r\n if ( opts.busy && ! opts.manualTrump )\r\n return;\r\n\r\n var index = pager.children().index( target );\r\n var nextSlide = index;\r\n var fwd = opts.currSlide < nextSlide;\r\n if (opts.currSlide == nextSlide) {\r\n return; // no op, clicked pager for the currently displayed slide\r\n }\r\n opts.nextSlide = nextSlide;\r\n opts._tempFx = opts.pagerFx;\r\n opts.API.prepareTx( true, fwd );\r\n opts.API.trigger('cycle-pager-activated', [opts, pager, target ]);\r\n}\r\n\r\n})(jQuery);\r\n\r\n/*! prevnext plugin for Cycle2; version: 20140408 */\r\n(function($) {\r\n\"use strict\";\r\n\r\n$.extend($.fn.cycle.defaults, {\r\n next: '> .cycle-next',\r\n nextEvent: 'click.cycle',\r\n disabledClass: 'disabled',\r\n prev: '> .cycle-prev',\r\n prevEvent: 'click.cycle',\r\n swipe: false\r\n});\r\n\r\n$(document).on( 'cycle-initialized', function( e, opts ) {\r\n opts.API.getComponent( 'next' ).on( opts.nextEvent, function(e) {\r\n e.preventDefault();\r\n opts.API.next();\r\n });\r\n\r\n opts.API.getComponent( 'prev' ).on( opts.prevEvent, function(e) {\r\n e.preventDefault();\r\n opts.API.prev();\r\n });\r\n\r\n if ( opts.swipe ) {\r\n var nextEvent = opts.swipeVert ? 'swipeUp.cycle' : 'swipeLeft.cycle swipeleft.cycle';\r\n var prevEvent = opts.swipeVert ? 'swipeDown.cycle' : 'swipeRight.cycle swiperight.cycle';\r\n opts.container.on( nextEvent, function(e) {\r\n opts._tempFx = opts.swipeFx;\r\n opts.API.next();\r\n });\r\n opts.container.on( prevEvent, function() {\r\n opts._tempFx = opts.swipeFx;\r\n opts.API.prev();\r\n });\r\n }\r\n});\r\n\r\n$(document).on( 'cycle-update-view', function( e, opts, slideOpts, currSlide ) {\r\n if ( opts.allowWrap )\r\n return;\r\n\r\n var cls = opts.disabledClass;\r\n var next = opts.API.getComponent( 'next' );\r\n var prev = opts.API.getComponent( 'prev' );\r\n var prevBoundry = opts._prevBoundry || 0;\r\n var nextBoundry = (opts._nextBoundry !== undefined)?opts._nextBoundry:opts.slideCount - 1;\r\n\r\n if ( opts.currSlide == nextBoundry )\r\n next.addClass( cls ).prop( 'disabled', true );\r\n else\r\n next.removeClass( cls ).prop( 'disabled', false );\r\n\r\n if ( opts.currSlide === prevBoundry )\r\n prev.addClass( cls ).prop( 'disabled', true );\r\n else\r\n prev.removeClass( cls ).prop( 'disabled', false );\r\n});\r\n\r\n\r\n$(document).on( 'cycle-destroyed', function( e, opts ) {\r\n opts.API.getComponent( 'prev' ).off( opts.nextEvent );\r\n opts.API.getComponent( 'next' ).off( opts.prevEvent );\r\n opts.container.off( 'swipeleft.cycle swiperight.cycle swipeLeft.cycle swipeRight.cycle swipeUp.cycle swipeDown.cycle' );\r\n});\r\n\r\n})(jQuery);\r\n\r\n/*! progressive loader plugin for Cycle2; version: 20130315 */\r\n(function($) {\r\n\"use strict\";\r\n\r\n$.extend($.fn.cycle.defaults, {\r\n progressive: false\r\n});\r\n\r\n$(document).on( 'cycle-pre-initialize', function( e, opts ) {\r\n if ( !opts.progressive )\r\n return;\r\n\r\n var API = opts.API;\r\n var nextFn = API.next;\r\n var prevFn = API.prev;\r\n var prepareTxFn = API.prepareTx;\r\n var type = $.type( opts.progressive );\r\n var slides, scriptEl;\r\n\r\n if ( type == 'array' ) {\r\n slides = opts.progressive;\r\n }\r\n else if ($.isFunction( opts.progressive ) ) {\r\n slides = opts.progressive( opts );\r\n }\r\n else if ( type == 'string' ) {\r\n scriptEl = $( opts.progressive );\r\n slides = $.trim( scriptEl.html() );\r\n if ( !slides )\r\n return;\r\n // is it json array?\r\n if ( /^(\\[)/.test( slides ) ) {\r\n try {\r\n slides = $.parseJSON( slides );\r\n }\r\n catch(err) {\r\n API.log( 'error parsing progressive slides', err );\r\n return;\r\n }\r\n }\r\n else {\r\n // plain text, split on delimeter\r\n slides = slides.split( new RegExp( scriptEl.data('cycle-split') || '\\n') );\r\n\r\n // #95; look for empty slide\r\n if ( ! slides[ slides.length - 1 ] )\r\n slides.pop();\r\n }\r\n }\r\n\r\n\r\n\r\n if ( prepareTxFn ) {\r\n API.prepareTx = function( manual, fwd ) {\r\n var index, slide;\r\n\r\n if ( manual || slides.length === 0 ) {\r\n prepareTxFn.apply( opts.API, [ manual, fwd ] );\r\n return;\r\n }\r\n\r\n if ( fwd && opts.currSlide == ( opts.slideCount-1) ) {\r\n slide = slides[ 0 ];\r\n slides = slides.slice( 1 );\r\n opts.container.one('cycle-slide-added', function(e, opts ) {\r\n setTimeout(function() {\r\n opts.API.advanceSlide( 1 );\r\n },50);\r\n });\r\n opts.API.add( slide );\r\n }\r\n else if ( !fwd && opts.currSlide === 0 ) {\r\n index = slides.length-1;\r\n slide = slides[ index ];\r\n slides = slides.slice( 0, index );\r\n opts.container.one('cycle-slide-added', function(e, opts ) {\r\n setTimeout(function() {\r\n opts.currSlide = 1;\r\n opts.API.advanceSlide( -1 );\r\n },50);\r\n });\r\n opts.API.add( slide, true );\r\n }\r\n else {\r\n prepareTxFn.apply( opts.API, [ manual, fwd ] );\r\n }\r\n };\r\n }\r\n\r\n if ( nextFn ) {\r\n API.next = function() {\r\n var opts = this.opts();\r\n if ( slides.length && opts.currSlide == ( opts.slideCount - 1 ) ) {\r\n var slide = slides[ 0 ];\r\n slides = slides.slice( 1 );\r\n opts.container.one('cycle-slide-added', function(e, opts ) {\r\n nextFn.apply( opts.API );\r\n opts.container.removeClass('cycle-loading');\r\n });\r\n opts.container.addClass('cycle-loading');\r\n opts.API.add( slide );\r\n }\r\n else {\r\n nextFn.apply( opts.API );\r\n }\r\n };\r\n }\r\n\r\n if ( prevFn ) {\r\n API.prev = function() {\r\n var opts = this.opts();\r\n if ( slides.length && opts.currSlide === 0 ) {\r\n var index = slides.length-1;\r\n var slide = slides[ index ];\r\n slides = slides.slice( 0, index );\r\n opts.container.one('cycle-slide-added', function(e, opts ) {\r\n opts.currSlide = 1;\r\n opts.API.advanceSlide( -1 );\r\n opts.container.removeClass('cycle-loading');\r\n });\r\n opts.container.addClass('cycle-loading');\r\n opts.API.add( slide, true );\r\n }\r\n else {\r\n prevFn.apply( opts.API );\r\n }\r\n };\r\n }\r\n});\r\n\r\n})(jQuery);\r\n\r\n/*! tmpl plugin for Cycle2; version: 20121227 */\r\n(function($) {\r\n\"use strict\";\r\n\r\n$.extend($.fn.cycle.defaults, {\r\n tmplRegex: '{{((.)?.*?)}}'\r\n});\r\n\r\n$.extend($.fn.cycle.API, {\r\n tmpl: function( str, opts /*, ... */) {\r\n var regex = new RegExp( opts.tmplRegex || $.fn.cycle.defaults.tmplRegex, 'g' );\r\n var args = $.makeArray( arguments );\r\n args.shift();\r\n return str.replace(regex, function(_, str) {\r\n var i, j, obj, prop, names = str.split('.');\r\n for (i=0; i < args.length; i++) {\r\n obj = args[i];\r\n if ( ! obj )\r\n continue;\r\n if (names.length > 1) {\r\n prop = obj;\r\n for (j=0; j < names.length; j++) {\r\n obj = prop;\r\n prop = prop[ names[j] ] || str;\r\n }\r\n } else {\r\n prop = obj[str];\r\n }\r\n\r\n if ($.isFunction(prop))\r\n return prop.apply(obj, args);\r\n if (prop !== undefined && prop !== null && prop != str)\r\n return prop;\r\n }\r\n return str;\r\n });\r\n }\r\n});\r\n\r\n})(jQuery);\r\n",";(function ($, window, document, undefined) {\r\n 'use strict';\r\n\r\n Foundation.libs.equalizer = {\r\n name : 'equalizer',\r\n\r\n version : '{{VERSION}}',\r\n\r\n settings : {\r\n use_tallest : true,\r\n before_height_change : $.noop,\r\n after_height_change : $.noop,\r\n equalize_on_stack : false\r\n },\r\n\r\n init : function (scope, method, options) {\r\n Foundation.inherit(this, 'image_loaded');\r\n this.bindings(method, options);\r\n this.reflow();\r\n },\r\n\r\n events : function () {\r\n this.S(window).off('.equalizer').on('resize.fndtn.equalizer', function (e) {\r\n this.reflow();\r\n }.bind(this));\r\n },\r\n\r\n equalize : function (equalizer) {\r\n var isStacked = false,\r\n group = equalizer.data('equalizer'),\r\n vals = group ? equalizer.find('['+this.attr_name()+'-watch=\"'+group+'\"]:visible') : equalizer.find('['+this.attr_name()+'-watch]:visible'),\r\n settings = equalizer.data(this.attr_name(true)+'-init'),\r\n firstTopOffset;\r\n\r\n if (vals.length === 0) {\r\n return;\r\n }\r\n \r\n settings.before_height_change();\r\n equalizer.trigger('before-height-change.fndth.equalizer');\r\n vals.height('inherit');\r\n \r\n if (settings.equalize_on_stack === false) {\r\n firstTopOffset = vals.first().offset().top;\r\n vals.each(function () {\r\n if ($(this).offset().top !== firstTopOffset) {\r\n isStacked = true;\r\n return false;\r\n }\r\n });\r\n if (isStacked) {\r\n return;\r\n }\r\n }\r\n\r\n var heights = vals.map(function () { return $(this).outerHeight(false) }).get();\r\n\r\n if (settings.use_tallest) {\r\n var max = Math.max.apply(null, heights);\r\n vals.css('height', max);\r\n } else {\r\n var min = Math.min.apply(null, heights);\r\n vals.css('height', min);\r\n }\r\n \r\n settings.after_height_change();\r\n equalizer.trigger('after-height-change.fndtn.equalizer');\r\n },\r\n\r\n reflow : function () {\r\n var self = this;\r\n\r\n this.S('[' + this.attr_name() + ']', this.scope).each(function () {\r\n var $eq_target = $(this);\r\n self.image_loaded(self.S('img', this), function () {\r\n self.equalize($eq_target)\r\n });\r\n });\r\n }\r\n };\r\n})(jQuery, window, window.document);\r\n","var DateFormat = {};\r\n\r\n(function($) {\r\n var daysInWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\r\n var shortDaysInWeek = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\r\n var shortMonthsInYear = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\r\n 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n var longMonthsInYear = ['January', 'February', 'March', 'April', 'May', 'June',\r\n 'July', 'August', 'September', 'October', 'November', 'December'];\r\n var shortMonthsToNumber = { 'Jan': '01', 'Feb': '02', 'Mar': '03', 'Apr': '04', 'May': '05', 'Jun': '06',\r\n 'Jul': '07', 'Aug': '08', 'Sep': '09', 'Oct': '10', 'Nov': '11', 'Dec': '12' };\r\n\r\n var YYYYMMDD_MATCHER = /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.?\\d{0,3}[Z\\-+]?(\\d{2}:?\\d{2})?/;\r\n\r\n $.format = (function() {\r\n function numberToLongDay(value) {\r\n // 0 to Sunday\r\n // 1 to Monday\r\n return daysInWeek[parseInt(value, 10)] || value;\r\n }\r\n\r\n function numberToShortDay(value) {\r\n // 0 to Sun\r\n // 1 to Mon\r\n return shortDaysInWeek[parseInt(value, 10)] || value;\r\n }\r\n\r\n function numberToShortMonth(value) {\r\n // 1 to Jan\r\n // 2 to Feb\r\n var monthArrayIndex = parseInt(value, 10) - 1;\r\n return shortMonthsInYear[monthArrayIndex] || value;\r\n }\r\n\r\n function numberToLongMonth(value) {\r\n // 1 to January\r\n // 2 to February\r\n var monthArrayIndex = parseInt(value, 10) - 1;\r\n return longMonthsInYear[monthArrayIndex] || value;\r\n }\r\n\r\n function shortMonthToNumber(value) {\r\n // Jan to 01\r\n // Feb to 02\r\n return shortMonthsToNumber[value] || value;\r\n }\r\n\r\n function parseTime(value) {\r\n // 10:54:50.546\r\n // => hour: 10, minute: 54, second: 50, millis: 546\r\n // 10:54:50\r\n // => hour: 10, minute: 54, second: 50, millis: ''\r\n var time = value,\r\n hour,\r\n minute,\r\n second,\r\n millis = '',\r\n delimited,\r\n timeArray;\r\n\r\n if(time.indexOf('.') !== -1) {\r\n delimited = time.split('.');\r\n // split time and milliseconds\r\n time = delimited[0];\r\n millis = delimited[delimited.length - 1];\r\n }\r\n\r\n timeArray = time.split(':');\r\n\r\n if(timeArray.length === 3) {\r\n hour = timeArray[0];\r\n minute = timeArray[1];\r\n // '20 GMT-0200 (BRST)'.replace(/\\s.+/, '').replace(/[a-z]/gi, '');\r\n // => 20\r\n // '20Z'.replace(/\\s.+/, '').replace(/[a-z]/gi, '');\r\n // => 20\r\n second = timeArray[2].replace(/\\s.+/, '').replace(/[a-z]/gi, '');\r\n // '01:10:20 GMT-0200 (BRST)'.replace(/\\s.+/, '').replace(/[a-z]/gi, '');\r\n // => 01:10:20\r\n // '01:10:20Z'.replace(/\\s.+/, '').replace(/[a-z]/gi, '');\r\n // => 01:10:20\r\n time = time.replace(/\\s.+/, '').replace(/[a-z]/gi, '');\r\n return {\r\n time: time,\r\n hour: hour,\r\n minute: minute,\r\n second: second,\r\n millis: millis\r\n };\r\n }\r\n\r\n return { time : '', hour : '', minute : '', second : '', millis : '' };\r\n }\r\n\r\n\r\n function padding(value, length) {\r\n var paddingCount = length - String(value).length;\r\n for(var i = 0; i < paddingCount; i++) {\r\n value = '0' + value;\r\n }\r\n return value;\r\n }\r\n\r\n return {\r\n\r\n parseDate: function(value) {\r\n var values,\r\n subValues;\r\n\r\n var parsedDate = {\r\n date: null,\r\n year: null,\r\n month: null,\r\n dayOfMonth: null,\r\n dayOfWeek: null,\r\n time: null\r\n };\r\n\r\n if(typeof value == 'number') {\r\n return this.parseDate(new Date(value));\r\n } else if(typeof value.getFullYear == 'function') {\r\n parsedDate.year = String(value.getFullYear());\r\n // d = new Date(1900, 1, 1) // 1 for Feb instead of Jan.\r\n // => Thu Feb 01 1900 00:00:00\r\n parsedDate.month = String(value.getMonth() + 1);\r\n parsedDate.dayOfMonth = String(value.getDate());\r\n parsedDate.time = parseTime(value.toTimeString() + '.' + value.getMilliseconds());\r\n } else if(value.search(YYYYMMDD_MATCHER) != -1) {\r\n /* 2009-04-19T16:11:05+02:00 || 2009-04-19T16:11:05Z */\r\n values = value.split(/[T\\+-]/);\r\n parsedDate.year = values[0];\r\n parsedDate.month = values[1];\r\n parsedDate.dayOfMonth = values[2];\r\n parsedDate.time = parseTime(values[3].split('.')[0]);\r\n } else {\r\n values = value.split(' ');\r\n if(values.length === 6 && isNaN(values[5])) {\r\n // values[5] == year\r\n /*\r\n * This change is necessary to make `Mon Apr 28 2014 05:30:00 GMT-0300` work\r\n * like `case 7`\r\n * otherwise it will be considered like `Wed Jan 13 10:43:41 CET 2010\r\n * Fixes: https://github.com/phstc/jquery-dateFormat/issues/64\r\n */\r\n values[values.length] = '()';\r\n }\r\n switch (values.length) {\r\n case 6:\r\n /* Wed Jan 13 10:43:41 CET 2010 */\r\n parsedDate.year = values[5];\r\n parsedDate.month = shortMonthToNumber(values[1]);\r\n parsedDate.dayOfMonth = values[2];\r\n parsedDate.time = parseTime(values[3]);\r\n break;\r\n case 2:\r\n /* 2009-12-18 10:54:50.546 */\r\n subValues = values[0].split('-');\r\n parsedDate.year = subValues[0];\r\n parsedDate.month = subValues[1];\r\n parsedDate.dayOfMonth = subValues[2];\r\n parsedDate.time = parseTime(values[1]);\r\n break;\r\n case 7:\r\n /* Tue Mar 01 2011 12:01:42 GMT-0800 (PST) */\r\n case 9:\r\n /* added by Larry, for Fri Apr 08 2011 00:00:00 GMT+0800 (China Standard Time) */\r\n case 10:\r\n /* added by Larry, for Fri Apr 08 2011 00:00:00 GMT+0200 (W. Europe Daylight Time) */\r\n parsedDate.year = values[3];\r\n parsedDate.month = shortMonthToNumber(values[1]);\r\n parsedDate.dayOfMonth = values[2];\r\n parsedDate.time = parseTime(values[4]);\r\n break;\r\n case 1:\r\n /* added by Jonny, for 2012-02-07CET00:00:00 (Doctrine Entity -> Json Serializer) */\r\n subValues = values[0].split('');\r\n parsedDate.year = subValues[0] + subValues[1] + subValues[2] + subValues[3];\r\n parsedDate.month = subValues[5] + subValues[6];\r\n parsedDate.dayOfMonth = subValues[8] + subValues[9];\r\n parsedDate.time = parseTime(subValues[13] + subValues[14] + subValues[15] + subValues[16] + subValues[17] + subValues[18] + subValues[19] + subValues[20]);\r\n break;\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n if(parsedDate.time) {\r\n parsedDate.date = new Date(parsedDate.year, parsedDate.month - 1, parsedDate.dayOfMonth, parsedDate.time.hour, parsedDate.time.minute, parsedDate.time.second, parsedDate.time.millis);\r\n } else {\r\n parsedDate.date = new Date(parsedDate.year, parsedDate.month - 1, parsedDate.dayOfMonth);\r\n }\r\n\r\n parsedDate.dayOfWeek = String(parsedDate.date.getDay());\r\n\r\n return parsedDate;\r\n },\r\n\r\n date : function(value, format) {\r\n try {\r\n var parsedDate = this.parseDate(value);\r\n\r\n if(parsedDate === null) {\r\n return value;\r\n }\r\n\r\n var year = parsedDate.year,\r\n month = parsedDate.month,\r\n dayOfMonth = parsedDate.dayOfMonth,\r\n dayOfWeek = parsedDate.dayOfWeek,\r\n time = parsedDate.time;\r\n var hour;\r\n\r\n var pattern = '',\r\n retValue = '',\r\n unparsedRest = '',\r\n inQuote = false;\r\n\r\n /* Issue 1 - variable scope issue in format.date (Thanks jakemonO) */\r\n for(var i = 0; i < format.length; i++) {\r\n var currentPattern = format.charAt(i);\r\n // Look-Ahead Right (LALR)\r\n var nextRight = format.charAt(i + 1);\r\n\r\n if (inQuote) {\r\n if (currentPattern == \"'\") {\r\n retValue += (pattern === '') ? \"'\" : pattern;\r\n pattern = '';\r\n inQuote = false;\r\n } else {\r\n pattern += currentPattern;\r\n }\r\n continue;\r\n }\r\n pattern += currentPattern;\r\n unparsedRest = '';\r\n switch (pattern) {\r\n case 'ddd':\r\n retValue += numberToLongDay(dayOfWeek);\r\n pattern = '';\r\n break;\r\n case 'dd':\r\n if(nextRight === 'd') {\r\n break;\r\n }\r\n retValue += padding(dayOfMonth, 2);\r\n pattern = '';\r\n break;\r\n case 'd':\r\n if(nextRight === 'd') {\r\n break;\r\n }\r\n retValue += parseInt(dayOfMonth, 10);\r\n pattern = '';\r\n break;\r\n case 'D':\r\n if(dayOfMonth == 1 || dayOfMonth == 21 || dayOfMonth == 31) {\r\n dayOfMonth = parseInt(dayOfMonth, 10) + 'st';\r\n } else if(dayOfMonth == 2 || dayOfMonth == 22) {\r\n dayOfMonth = parseInt(dayOfMonth, 10) + 'nd';\r\n } else if(dayOfMonth == 3 || dayOfMonth == 23) {\r\n dayOfMonth = parseInt(dayOfMonth, 10) + 'rd';\r\n } else {\r\n dayOfMonth = parseInt(dayOfMonth, 10) + 'th';\r\n }\r\n retValue += dayOfMonth;\r\n pattern = '';\r\n break;\r\n case 'MMMM':\r\n retValue += numberToLongMonth(month);\r\n pattern = '';\r\n break;\r\n case 'MMM':\r\n if(nextRight === 'M') {\r\n break;\r\n }\r\n retValue += numberToShortMonth(month);\r\n pattern = '';\r\n break;\r\n case 'MM':\r\n if(nextRight === 'M') {\r\n break;\r\n }\r\n retValue += padding(month, 2);\r\n pattern = '';\r\n break;\r\n case 'M':\r\n if(nextRight === 'M') {\r\n break;\r\n }\r\n retValue += parseInt(month, 10);\r\n pattern = '';\r\n break;\r\n case 'y':\r\n case 'yyy':\r\n if(nextRight === 'y') {\r\n break;\r\n }\r\n retValue += pattern;\r\n pattern = '';\r\n break;\r\n case 'yy':\r\n if(nextRight === 'y') {\r\n break;\r\n }\r\n retValue += String(year).slice(-2);\r\n pattern = '';\r\n break;\r\n case 'yyyy':\r\n retValue += year;\r\n pattern = '';\r\n break;\r\n case 'HH':\r\n retValue += padding(time.hour, 2);\r\n pattern = '';\r\n break;\r\n case 'H':\r\n if(nextRight === 'H') {\r\n break;\r\n }\r\n retValue += parseInt(time.hour, 10);\r\n pattern = '';\r\n break;\r\n case 'hh':\r\n /* time.hour is '00' as string == is used instead of === */\r\n hour = (parseInt(time.hour, 10) === 0 ? 12 : time.hour < 13 ? time.hour\r\n : time.hour - 12);\r\n retValue += padding(hour, 2);\r\n pattern = '';\r\n break;\r\n case 'h':\r\n if(nextRight === 'h') {\r\n break;\r\n }\r\n hour = (parseInt(time.hour, 10) === 0 ? 12 : time.hour < 13 ? time.hour\r\n : time.hour - 12);\r\n retValue += parseInt(hour, 10);\r\n // Fixing issue https://github.com/phstc/jquery-dateFormat/issues/21\r\n // retValue = parseInt(retValue, 10);\r\n pattern = '';\r\n break;\r\n case 'mm':\r\n retValue += padding(time.minute, 2);\r\n pattern = '';\r\n break;\r\n case 'm':\r\n if(nextRight === 'm') {\r\n break;\r\n }\r\n retValue += time.minute;\r\n pattern = '';\r\n break;\r\n case 'ss':\r\n /* ensure only seconds are added to the return string */\r\n retValue += padding(time.second.substring(0, 2), 2);\r\n pattern = '';\r\n break;\r\n case 's':\r\n if(nextRight === 's') {\r\n break;\r\n }\r\n retValue += time.second;\r\n pattern = '';\r\n break;\r\n case 'S':\r\n case 'SS':\r\n if(nextRight === 'S') {\r\n break;\r\n }\r\n retValue += pattern;\r\n pattern = '';\r\n break;\r\n case 'SSS':\r\n retValue += padding(time.millis.substring(0, 3), 3);\r\n pattern = '';\r\n break;\r\n case 'a':\r\n retValue += time.hour >= 12 ? 'PM' : 'AM';\r\n pattern = '';\r\n break;\r\n case 'p':\r\n retValue += time.hour >= 12 ? 'p.m.' : 'a.m.';\r\n pattern = '';\r\n break;\r\n case 'E':\r\n retValue += numberToShortDay(dayOfWeek);\r\n pattern = '';\r\n break;\r\n case \"'\":\r\n pattern = '';\r\n inQuote = true;\r\n break;\r\n default:\r\n retValue += currentPattern;\r\n pattern = '';\r\n break;\r\n }\r\n }\r\n retValue += unparsedRest;\r\n return retValue;\r\n } catch (e) {\r\n if(console && console.log) {\r\n console.log(e);\r\n }\r\n return value;\r\n }\r\n },\r\n /*\r\n * JavaScript Pretty Date\r\n * Copyright (c) 2011 John Resig (ejohn.org)\r\n * Licensed under the MIT and GPL licenses.\r\n *\r\n * Takes an ISO time and returns a string representing how long ago the date\r\n * represents\r\n *\r\n * ('2008-01-28T20:24:17Z') // => '2 hours ago'\r\n * ('2008-01-27T22:24:17Z') // => 'Yesterday'\r\n * ('2008-01-26T22:24:17Z') // => '2 days ago'\r\n * ('2008-01-14T22:24:17Z') // => '2 weeks ago'\r\n * ('2007-12-15T22:24:17Z') // => 'more than 5 weeks ago'\r\n *\r\n */\r\n prettyDate : function(time) {\r\n var date;\r\n var diff;\r\n var day_diff;\r\n\r\n if(typeof time === 'string' || typeof time === 'number') {\r\n date = new Date(time);\r\n }\r\n\r\n if(typeof time === 'object') {\r\n date = new Date(time.toString());\r\n }\r\n\r\n diff = (((new Date()).getTime() - date.getTime()) / 1000);\r\n\r\n day_diff = Math.floor(diff / 86400);\r\n\r\n if(isNaN(day_diff) || day_diff < 0) {\r\n return;\r\n }\r\n\r\n if(diff < 60) {\r\n return 'just now';\r\n } else if(diff < 120) {\r\n return '1 minute ago';\r\n } else if(diff < 3600) {\r\n return Math.floor(diff / 60) + ' minutes ago';\r\n } else if(diff < 7200) {\r\n return '1 hour ago';\r\n } else if(diff < 86400) {\r\n return Math.floor(diff / 3600) + ' hours ago';\r\n } else if(day_diff === 1) {\r\n return 'Yesterday';\r\n } else if(day_diff < 7) {\r\n return day_diff + ' days ago';\r\n } else if(day_diff < 31) {\r\n return Math.ceil(day_diff / 7) + ' weeks ago';\r\n } else if(day_diff >= 31) {\r\n return 'more than 5 weeks ago';\r\n }\r\n },\r\n toBrowserTimeZone : function(value, format) {\r\n return this.date(new Date(value), format || 'MM/dd/yyyy HH:mm:ss');\r\n }\r\n };\r\n }());\r\n}(DateFormat));\r\n","/*********************************************************************\r\n* #### Twitter Post Fetcher v14.0 ####\r\n* Coded by Jason Mayes 2015. A present to all the developers out there.\r\n* www.jasonmayes.com\r\n* Please keep this disclaimer with my code if you use it. Thanks. :-)\r\n* Got feedback or questions, ask here:\r\n* http://www.jasonmayes.com/projects/twitterApi/\r\n* Github: https://github.com/jasonmayes/Twitter-Post-Fetcher\r\n* Updates will be posted to this site.\r\n*********************************************************************/\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD. Register as an anonymous module.\r\n define([], factory);\r\n } else if (typeof exports === 'object') {\r\n // Node. Does not work with strict CommonJS, but\r\n // only CommonJS-like environments that support module.exports,\r\n // like Node.\r\n module.exports = factory();\r\n } else {\r\n // Browser globals.\r\n factory();\r\n }\r\n}(this, function () {\r\n var domNode = '';\r\n var maxTweets = 20;\r\n var parseLinks = true;\r\n var queue = [];\r\n var inProgress = false;\r\n var printTime = true;\r\n var printUser = true;\r\n var formatterFunction = null;\r\n var supportsClassName = true;\r\n var showRts = true;\r\n var customCallbackFunction = null;\r\n var showInteractionLinks = true;\r\n var showImages = false;\r\n var targetBlank = true;\r\n var lang = 'en';\r\n var permalinks = true;\r\n var dataOnly = false;\r\n var script = null;\r\n var scriptAdded = false;\r\n\r\n function handleTweets(tweets) {\r\n if (customCallbackFunction === null) {\r\n var x = tweets.length;\r\n var n = 0;\r\n var element = document.getElementById(domNode);\r\n var html = '';\r\n while (n < x) {\r\n html += '- ' + tweets[n] + '
';\r\n n++;\r\n }\r\n html += '
';\r\n element.innerHTML = html;\r\n } else {\r\n customCallbackFunction(tweets);\r\n }\r\n }\r\n\r\n function strip(data) {\r\n return data.replace(/]*>(.*?)<\\/b>/gi, function (a, s) { return s; })\r\n .replace(/class=\"(?!(tco-hidden|tco-display|tco-ellipsis))+.*?\"|data-query-source=\".*?\"|dir=\".*?\"|rel=\".*?\"/gi,\r\n '');\r\n }\r\n\r\n function targetLinksToNewWindow(el) {\r\n var links = el.getElementsByTagName('a');\r\n for (var i = links.length - 1; i >= 0; i--) {\r\n links[i].setAttribute('target', '_blank');\r\n }\r\n }\r\n\r\n function getElementsByClassName(node, classname) {\r\n var a = [];\r\n var regex = new RegExp('(^| )' + classname + '( |$)');\r\n var elems = node.getElementsByTagName('*');\r\n for (var i = 0, j = elems.length; i < j; i++) {\r\n if (regex.test(elems[i].className)) {\r\n a.push(elems[i]);\r\n }\r\n }\r\n return a;\r\n }\r\n\r\n function extractImageUrl(image_data) {\r\n if (image_data !== undefined) {\r\n var data_src = image_data.innerHTML\r\n .match(/data-srcset=\"([A-z0-9%_\\.-]+)/i)[0];\r\n return decodeURIComponent(data_src).split('\"')[1];\r\n }\r\n }\r\n\r\n var twitterFetcher = {\r\n fetch: function (config) {\r\n if (config.maxTweets === undefined) {\r\n config.maxTweets = 20;\r\n }\r\n if (config.enableLinks === undefined) {\r\n config.enableLinks = true;\r\n }\r\n if (config.showUser === undefined) {\r\n config.showUser = true;\r\n }\r\n if (config.showTime === undefined) {\r\n config.showTime = true;\r\n }\r\n if (config.dateFunction === undefined) {\r\n config.dateFunction = 'default';\r\n }\r\n if (config.showRetweet === undefined) {\r\n config.showRetweet = true;\r\n }\r\n if (config.customCallback === undefined) {\r\n config.customCallback = null;\r\n }\r\n if (config.showInteraction === undefined) {\r\n config.showInteraction = true;\r\n }\r\n if (config.showImages === undefined) {\r\n config.showImages = false;\r\n }\r\n if (config.linksInNewWindow === undefined) {\r\n config.linksInNewWindow = true;\r\n }\r\n if (config.showPermalinks === undefined) {\r\n config.showPermalinks = true;\r\n }\r\n if (config.dataOnly === undefined) {\r\n config.dataOnly = false;\r\n }\r\n\r\n if (inProgress) {\r\n queue.push(config);\r\n } else {\r\n inProgress = true;\r\n\r\n domNode = config.domId;\r\n maxTweets = config.maxTweets;\r\n parseLinks = config.enableLinks;\r\n printUser = config.showUser;\r\n printTime = config.showTime;\r\n showRts = config.showRetweet;\r\n formatterFunction = config.dateFunction;\r\n customCallbackFunction = config.customCallback;\r\n showInteractionLinks = config.showInteraction;\r\n showImages = config.showImages;\r\n targetBlank = config.linksInNewWindow;\r\n permalinks = config.showPermalinks;\r\n dataOnly = config.dataOnly;\r\n\r\n var head = document.getElementsByTagName('head')[0];\r\n if (script !== null) {\r\n head.removeChild(script);\r\n }\r\n script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = 'https://cdn.syndication.twimg.com/widgets/timelines/' +\r\n config.id + '?&lang=' + (config.lang || lang) +\r\n '&callback=twitterFetcher.callback&' +\r\n 'suppress_response_codes=true&rnd=' + Math.random();\r\n head.appendChild(script);\r\n }\r\n },\r\n callback: function (data) {\r\n var div = document.createElement('div');\r\n div.innerHTML = data.body;\r\n if (typeof (div.getElementsByClassName) === 'undefined') {\r\n supportsClassName = false;\r\n }\r\n\r\n function swapDataSrc(element) {\r\n var avatarImg = element.getElementsByTagName('img')[0];\r\n avatarImg.src = avatarImg.getAttribute('data-src-2x');\r\n return element;\r\n };\r\n\r\n var tweets = [];\r\n var authors = [];\r\n var times = [];\r\n var images = [];\r\n var rts = [];\r\n var tids = [];\r\n var permalinksURL = [];\r\n var x = 0;\r\n\r\n if (supportsClassName) {\r\n var tmp = div.getElementsByClassName('tweet');\r\n while (x < tmp.length) {\r\n if (tmp[x].getElementsByClassName('retweet-credit').length > 0) {\r\n rts.push(true);\r\n } else {\r\n rts.push(false);\r\n }\r\n if (!rts[x] || rts[x] && showRts) {\r\n tweets.push(tmp[x].getElementsByClassName('e-entry-title')[0]);\r\n tids.push(tmp[x].getAttribute('data-tweet-id'));\r\n authors.push(swapDataSrc(tmp[x]\r\n .getElementsByClassName('p-author')[0]));\r\n times.push(tmp[x].getElementsByClassName('dt-updated')[0]);\r\n permalinksURL.push(tmp[x].getElementsByClassName('permalink')[0]);\r\n if (tmp[x].getElementsByClassName('inline-media')[0] !==\r\n undefined) {\r\n images.push(tmp[x].getElementsByClassName('inline-media')[0]);\r\n } else {\r\n images.push(undefined);\r\n }\r\n }\r\n x++;\r\n }\r\n } else {\r\n var tmp = getElementsByClassName(div, 'tweet');\r\n while (x < tmp.length) {\r\n tweets.push(getElementsByClassName(tmp[x], 'e-entry-title')[0]);\r\n tids.push(tmp[x].getAttribute('data-tweet-id'));\r\n authors.push(swapDataSrc(getElementsByClassName(tmp[x],\r\n 'p-author')[0]));\r\n times.push(getElementsByClassName(tmp[x], 'dt-updated')[0]);\r\n permalinksURL.push(getElementsByClassName(tmp[x], 'permalink')[0]);\r\n if (getElementsByClassName(tmp[x], 'inline-media')[0] !== undefined) {\r\n images.push(getElementsByClassName(tmp[x], 'inline-media')[0]);\r\n } else {\r\n images.push(undefined);\r\n }\r\n\r\n if (getElementsByClassName(tmp[x], 'retweet-credit').length > 0) {\r\n rts.push(true);\r\n } else {\r\n rts.push(false);\r\n }\r\n x++;\r\n }\r\n }\r\n\r\n if (tweets.length > maxTweets) {\r\n tweets.splice(maxTweets, (tweets.length - maxTweets));\r\n authors.splice(maxTweets, (authors.length - maxTweets));\r\n times.splice(maxTweets, (times.length - maxTweets));\r\n rts.splice(maxTweets, (rts.length - maxTweets));\r\n images.splice(maxTweets, (images.length - maxTweets));\r\n permalinksURL.splice(maxTweets, (permalinksURL.length - maxTweets));\r\n }\r\n\r\n var arrayTweets = [];\r\n var x = tweets.length;\r\n var n = 0;\r\n if (dataOnly) {\r\n while (n < x) {\r\n arrayTweets.push({\r\n tweet: tweets[n].innerHTML,\r\n author: authors[n].innerHTML,\r\n time: times[n].innerText,\r\n image: extractImageUrl(images[n]),\r\n rt: rts[n],\r\n tid: tids[n],\r\n permalinkURL: permalinksURL[n].href\r\n });\r\n n++;\r\n }\r\n } else {\r\n while (n < x) {\r\n if (typeof (formatterFunction) !== 'string') {\r\n var datetimeText = times[n].getAttribute('datetime');\r\n var newDate = new Date(times[n].getAttribute('datetime')\r\n .replace(/-/g, '/').replace('T', ' ').split('+')[0]);\r\n var dateString = formatterFunction(newDate, datetimeText);\r\n times[n].setAttribute('aria-label', dateString);\r\n\r\n if (tweets[n].innerText) {\r\n // IE hack.\r\n if (supportsClassName) {\r\n times[n].innerText = dateString;\r\n } else {\r\n var h = document.createElement('p');\r\n var t = document.createTextNode(dateString);\r\n h.appendChild(t);\r\n h.setAttribute('aria-label', dateString);\r\n times[n] = h;\r\n }\r\n } else {\r\n times[n].textContent = dateString;\r\n }\r\n }\r\n var op = '';\r\n if (parseLinks) {\r\n if (targetBlank) {\r\n targetLinksToNewWindow(tweets[n]);\r\n if (printUser) {\r\n targetLinksToNewWindow(authors[n]);\r\n }\r\n }\r\n if (printUser) {\r\n op += '' + strip(authors[n].innerHTML) +\r\n '
';\r\n }\r\n op += '';\r\n if (printTime) {\r\n if (permalinks) {\r\n op += '' + times[n].getAttribute('aria-label') + '
';\r\n } else {\r\n op += '' +\r\n times[n].getAttribute('aria-label') + '
';\r\n }\r\n }\r\n } else {\r\n if (tweets[n].innerText) {\r\n if (printUser) {\r\n op += '' + authors[n].innerText + '
';\r\n }\r\n op += '';\r\n if (printTime) {\r\n op += '' + times[n].innerText + '
';\r\n }\r\n\r\n } else {\r\n if (printUser) {\r\n op += '' + authors[n].textContent + '
';\r\n }\r\n op += '';\r\n if (printTime) {\r\n op += '' + times[n].textContent + '
';\r\n }\r\n }\r\n }\r\n if (showInteractionLinks) {\r\n op += '' +\r\n '
';\r\n }\r\n\r\n if (showImages && images[n] !== undefined) {\r\n op += '';\r\n }\r\n\r\n arrayTweets.push(op);\r\n n++;\r\n }\r\n }\r\n\r\n handleTweets(arrayTweets);\r\n inProgress = false;\r\n\r\n if (queue.length > 0) {\r\n twitterFetcher.fetch(queue[0]);\r\n queue.splice(0, 1);\r\n }\r\n }\r\n };\r\n\r\n // It must be a global variable because it will be called by JSONP.\r\n window.twitterFetcher = twitterFetcher;\r\n return twitterFetcher;\r\n}));","/*!\r\n * enquire.js v2.1.2 - Awesome Media Queries in JavaScript\r\n * Copyright (c) 2014 Nick Williams - http://wicky.nillia.ms/enquire.js\r\n * License: MIT (http://www.opensource.org/licenses/mit-license.php)\r\n */\r\n\r\n;(function (name, context, factory) {\r\n\tvar matchMedia = window.matchMedia;\r\n\r\n\tif (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = factory(matchMedia);\r\n\t}\r\n\telse if (typeof define === 'function' && define.amd) {\r\n\t\tdefine(function() {\r\n\t\t\treturn (context[name] = factory(matchMedia));\r\n\t\t});\r\n\t}\r\n\telse {\r\n\t\tcontext[name] = factory(matchMedia);\r\n\t}\r\n}('enquire', this, function (matchMedia) {\r\n\r\n\t'use strict';\r\n\r\n /*jshint unused:false */\r\n /**\r\n * Helper function for iterating over a collection\r\n *\r\n * @param collection\r\n * @param fn\r\n */\r\n function each(collection, fn) {\r\n var i = 0,\r\n length = collection.length,\r\n cont;\r\n\r\n for(i; i < length; i++) {\r\n cont = fn(collection[i], i);\r\n if(cont === false) {\r\n break; //allow early exit\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Helper function for determining whether target object is an array\r\n *\r\n * @param target the object under test\r\n * @return {Boolean} true if array, false otherwise\r\n */\r\n function isArray(target) {\r\n return Object.prototype.toString.apply(target) === '[object Array]';\r\n }\r\n\r\n /**\r\n * Helper function for determining whether target object is a function\r\n *\r\n * @param target the object under test\r\n * @return {Boolean} true if function, false otherwise\r\n */\r\n function isFunction(target) {\r\n return typeof target === 'function';\r\n }\r\n\r\n /**\r\n * Delegate to handle a media query being matched and unmatched.\r\n *\r\n * @param {object} options\r\n * @param {function} options.match callback for when the media query is matched\r\n * @param {function} [options.unmatch] callback for when the media query is unmatched\r\n * @param {function} [options.setup] one-time callback triggered the first time a query is matched\r\n * @param {boolean} [options.deferSetup=false] should the setup callback be run immediately, rather than first time query is matched?\r\n * @constructor\r\n */\r\n function QueryHandler(options) {\r\n this.options = options;\r\n !options.deferSetup && this.setup();\r\n }\r\n QueryHandler.prototype = {\r\n\r\n /**\r\n * coordinates setup of the handler\r\n *\r\n * @function\r\n */\r\n setup : function() {\r\n if(this.options.setup) {\r\n this.options.setup();\r\n }\r\n this.initialised = true;\r\n },\r\n\r\n /**\r\n * coordinates setup and triggering of the handler\r\n *\r\n * @function\r\n */\r\n on : function() {\r\n !this.initialised && this.setup();\r\n this.options.match && this.options.match();\r\n },\r\n\r\n /**\r\n * coordinates the unmatch event for the handler\r\n *\r\n * @function\r\n */\r\n off : function() {\r\n this.options.unmatch && this.options.unmatch();\r\n },\r\n\r\n /**\r\n * called when a handler is to be destroyed.\r\n * delegates to the destroy or unmatch callbacks, depending on availability.\r\n *\r\n * @function\r\n */\r\n destroy : function() {\r\n this.options.destroy ? this.options.destroy() : this.off();\r\n },\r\n\r\n /**\r\n * determines equality by reference.\r\n * if object is supplied compare options, if function, compare match callback\r\n *\r\n * @function\r\n * @param {object || function} [target] the target for comparison\r\n */\r\n equals : function(target) {\r\n return this.options === target || this.options.match === target;\r\n }\r\n\r\n };\r\n /**\r\n * Represents a single media query, manages it's state and registered handlers for this query\r\n *\r\n * @constructor\r\n * @param {string} query the media query string\r\n * @param {boolean} [isUnconditional=false] whether the media query should run regardless of whether the conditions are met. Primarily for helping older browsers deal with mobile-first design\r\n */\r\n function MediaQuery(query, isUnconditional) {\r\n this.query = query;\r\n this.isUnconditional = isUnconditional;\r\n this.handlers = [];\r\n this.mql = matchMedia(query);\r\n\r\n var self = this;\r\n this.listener = function(mql) {\r\n self.mql = mql;\r\n self.assess();\r\n };\r\n this.mql.addListener(this.listener);\r\n }\r\n MediaQuery.prototype = {\r\n\r\n /**\r\n * add a handler for this query, triggering if already active\r\n *\r\n * @param {object} handler\r\n * @param {function} handler.match callback for when query is activated\r\n * @param {function} [handler.unmatch] callback for when query is deactivated\r\n * @param {function} [handler.setup] callback for immediate execution when a query handler is registered\r\n * @param {boolean} [handler.deferSetup=false] should the setup callback be deferred until the first time the handler is matched?\r\n */\r\n addHandler : function(handler) {\r\n var qh = new QueryHandler(handler);\r\n this.handlers.push(qh);\r\n\r\n this.matches() && qh.on();\r\n },\r\n\r\n /**\r\n * removes the given handler from the collection, and calls it's destroy methods\r\n * \r\n * @param {object || function} handler the handler to remove\r\n */\r\n removeHandler : function(handler) {\r\n var handlers = this.handlers;\r\n each(handlers, function(h, i) {\r\n if(h.equals(handler)) {\r\n h.destroy();\r\n return !handlers.splice(i,1); //remove from array and exit each early\r\n }\r\n });\r\n },\r\n\r\n /**\r\n * Determine whether the media query should be considered a match\r\n * \r\n * @return {Boolean} true if media query can be considered a match, false otherwise\r\n */\r\n matches : function() {\r\n return this.mql.matches || this.isUnconditional;\r\n },\r\n\r\n /**\r\n * Clears all handlers and unbinds events\r\n */\r\n clear : function() {\r\n each(this.handlers, function(handler) {\r\n handler.destroy();\r\n });\r\n this.mql.removeListener(this.listener);\r\n this.handlers.length = 0; //clear array\r\n },\r\n\r\n /*\r\n * Assesses the query, turning on all handlers if it matches, turning them off if it doesn't match\r\n */\r\n assess : function() {\r\n var action = this.matches() ? 'on' : 'off';\r\n\r\n each(this.handlers, function(handler) {\r\n handler[action]();\r\n });\r\n }\r\n };\r\n /**\r\n * Allows for registration of query handlers.\r\n * Manages the query handler's state and is responsible for wiring up browser events\r\n *\r\n * @constructor\r\n */\r\n function MediaQueryDispatch () {\r\n if(!matchMedia) {\r\n throw new Error('matchMedia not present, legacy browsers require a polyfill');\r\n }\r\n\r\n this.queries = {};\r\n this.browserIsIncapable = !matchMedia('only all').matches;\r\n }\r\n\r\n MediaQueryDispatch.prototype = {\r\n\r\n /**\r\n * Registers a handler for the given media query\r\n *\r\n * @param {string} q the media query\r\n * @param {object || Array || Function} options either a single query handler object, a function, or an array of query handlers\r\n * @param {function} options.match fired when query matched\r\n * @param {function} [options.unmatch] fired when a query is no longer matched\r\n * @param {function} [options.setup] fired when handler first triggered\r\n * @param {boolean} [options.deferSetup=false] whether setup should be run immediately or deferred until query is first matched\r\n * @param {boolean} [shouldDegrade=false] whether this particular media query should always run on incapable browsers\r\n */\r\n register : function(q, options, shouldDegrade) {\r\n var queries = this.queries,\r\n isUnconditional = shouldDegrade && this.browserIsIncapable;\r\n\r\n if(!queries[q]) {\r\n queries[q] = new MediaQuery(q, isUnconditional);\r\n }\r\n\r\n //normalise to object in an array\r\n if(isFunction(options)) {\r\n options = { match : options };\r\n }\r\n if(!isArray(options)) {\r\n options = [options];\r\n }\r\n each(options, function(handler) {\r\n if (isFunction(handler)) {\r\n handler = { match : handler };\r\n }\r\n queries[q].addHandler(handler);\r\n });\r\n\r\n return this;\r\n },\r\n\r\n /**\r\n * unregisters a query and all it's handlers, or a specific handler for a query\r\n *\r\n * @param {string} q the media query to target\r\n * @param {object || function} [handler] specific handler to unregister\r\n */\r\n unregister : function(q, handler) {\r\n var query = this.queries[q];\r\n\r\n if(query) {\r\n if(handler) {\r\n query.removeHandler(handler);\r\n }\r\n else {\r\n query.clear();\r\n delete this.queries[q];\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n };\r\n\r\n\treturn new MediaQueryDispatch();\r\n\r\n}));","jQuery(document).ready(function($) {\r\n // activate mobile nav\r\n $('.btn-mobile-nav').click(function () {\r\n var txt = $('.wrap-nav').is(':visible') ? 'Menu' : 'Close';\r\n if( $('.wrap-nav').is(':visible') ) {\r\n $('span', this).text(txt);\r\n $('.wrap-nav').slideUp('fast');\r\n $(this).removeClass('stick');\r\n $('i', this).addClass('fa-bars').removeClass('fa-close');\r\n } else {\r\n $('span', this).text(txt);\r\n $('.wrap-nav').slideDown('fast');\r\n $(this).addClass('stick');\r\n $('i', this).removeClass('fa-bars').addClass('fa-close');\r\n }\r\n });\r\n\r\n // homepage background rotator\r\n $('.cycle-slideshow.bg-rotator').on('cycle-after',function(e,opts) {\r\n $('.cycle-slideshow.captions').cycle('goto',opts.nextSlide);\r\n });\r\n\r\n // insert twitter\r\n var config5 = {\r\n \"id\": '604371161867100160',\r\n \"domId\": '',\r\n \"maxTweets\": 3,\r\n \"enableLinks\": true,\r\n \"showUser\": true,\r\n \"showTime\": true,\r\n \"dateFunction\": dateFormatter,\r\n \"showRetweet\": false,\r\n \"customCallback\": handleTweets,\r\n \"showInteraction\": false\r\n };\r\n var m_names = new Array(\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\");\r\n function dateFormatter(date) {\r\n var curr_date = date.getDate();\r\n var curr_month = date.getMonth();\r\n var output = m_names[curr_month] + \" \" + curr_date;\r\n return output;\r\n }\r\n function handleTweets(tweets){\r\n var x = tweets.length;\r\n var n = 0;\r\n var element = document.getElementById('latest-tweets');\r\n var html = '';\r\n while(n < x) {\r\n html += '- ' + tweets[n] + '
';\r\n n++;\r\n }\r\n html += '
';\r\n element.innerHTML = html;\r\n $(document).foundation('equalizer', 'reflow');\r\n }\r\n twitterFetcher.fetch(config5);\r\n\r\n enquire.register('screen and (max-width: 40em)', function() {\r\n\r\n })\r\n .register('screen and (max-width: 64em)', function() {\r\n // open/close primary nav items\r\n $('.nav-primary > li > i').click(function () {\r\n var span = $(this);\r\n var child = $(this).next('ul');\r\n var parent = $(this).parent('li');\r\n\r\n if (child.is(':visible')) {\r\n child.hide();\r\n parent.removeClass('open');\r\n $(this).toggleClass('fa-angle-right').toggleClass('fa-angle-down');\r\n } else {\r\n span.parent('li').siblings().children('ul').hide();\r\n span.parent('li').siblings().find('.fa').addClass('fa-angle-right').removeClass('fa-angle-down');\r\n parent.addClass('open');\r\n $(this).toggleClass('fa-angle-right').toggleClass('fa-angle-down');\r\n child.show();\r\n }\r\n });\r\n });\r\n\r\n //Hide and Show the Newsletter Signup form\r\n $('.newsletter label').click(function () {\r\n $('.newsletter').toggleClass('maximized');\r\n });\r\n\r\n $('.newsletter-response').click(function () {\r\n $('.newsletter-response').hide();\r\n });\r\n});\r\n"],"sourceRoot":"/source/"}