{I" class:ETI"BundledAsset;FI"logical_path;TI"foundation/index.js;FI" pathname;TI"m/home/meddle/.rbenv/versions/2.0.0-p353/gemsets/yatoto/gems/zurb-foundation-4.0.9/js/foundation/index.js;FI"content_type;TI"application/javascript;TI" mtime;Tl+€ƒœRI" length;TiÄI" digest;TI"%51b7235a7f5b78c58a39d40cb201c8bd;FI" source;TI"Ä/* * Foundation Responsive Library * http://foundation.zurb.com * Copyright 2013, ZURB * Free to use under the MIT license. * http://www.opensource.org/licenses/mit-license.php */ /*jslint unparam: true, browser: true, indent: 2 */ // Accommodate running jQuery or Zepto in noConflict() mode by // using an anonymous function to redefine the $ shorthand name. // See http://docs.jquery.com/Using_jQuery_with_Other_Libraries // and http://zeptojs.com/ var libFuncName = null; if (typeof jQuery === "undefined" && typeof Zepto === "undefined" && typeof $ === "function") { libFuncName = $; } else if (typeof jQuery === "function") { libFuncName = jQuery; } else if (typeof Zepto === "function") { libFuncName = Zepto; } else { throw new TypeError(); } (function ($) { (function () { // add dusty browser stuff if (!Array.prototype.filter) { Array.prototype.filter = function(fun /*, thisp */) { "use strict"; if (this == null) { throw new TypeError(); } var t = Object(this), len = t.length >>> 0; if (typeof fun != "function") { try { throw new TypeError(); } catch (e) { return; } } var res = [], thisp = arguments[1]; for (var i = 0; i < len; i++) { if (i in t) { var val = t[i]; // in case fun mutates this if (fun && fun.call(thisp, val, i, t)) { res.push(val); } } } return res; }; if (!Function.prototype.bind) { Function.prototype.bind = function (oThis) { if (typeof this !== "function") { // closest thing possible to the ECMAScript 5 internal IsCallable function throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); } var aArgs = Array.prototype.slice.call(arguments, 1), fToBind = this, fNOP = function () {}, fBound = function () { return fToBind.apply(this instanceof fNOP && oThis ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments))); }; fNOP.prototype = this.prototype; fBound.prototype = new fNOP(); return fBound; }; } } // fake stop() for zepto. $.fn.stop = $.fn.stop || function() { return this; }; }()); ;(function (window, document, undefined) { 'use strict'; window.Foundation = { name : 'Foundation', version : '4.0.8', // global Foundation cache object cache : {}, init : function (scope, libraries, method, options, response, /* internal */ nc) { var library_arr, args = [scope, method, options, response], responses = [], nc = nc || false; // disable library error catching, // used for development only if (nc) this.nc = nc; // set foundation global scope this.scope = scope || this.scope; if (libraries && typeof libraries === 'string') { if (/off/i.test(libraries)) return this.off(); library_arr = libraries.split(' '); if (library_arr.length > 0) { for (var i = library_arr.length - 1; i >= 0; i--) { responses.push(this.init_lib(library_arr[i], args)); } } } else { for (var lib in this.libs) { responses.push(this.init_lib(lib, args)); } } // if first argument is callback, add to args if (typeof libraries === 'function') { args.unshift(libraries); } return this.response_obj(responses, args); }, response_obj : function (response_arr, args) { for (var callback in args) { if (typeof args[callback] === 'function') { return args[callback]({ errors: response_arr.filter(function (s) { if (typeof s === 'string') return s; }) }); } } return response_arr; }, init_lib : function (lib, args) { return this.trap(function () { if (this.libs.hasOwnProperty(lib)) { this.patch(this.libs[lib]); return this.libs[lib].init.apply(this.libs[lib], args); } }.bind(this), lib); }, trap : function (fun, lib) { if (!this.nc) { try { return fun(); } catch (e) { return this.error({name: lib, message: 'could not be initialized', more: e.name + ' ' + e.message}); } } return fun(); }, patch : function (lib) { this.fix_outer(lib); }, inherit : function (scope, methods) { var methods_arr = methods.split(' '); for (var i = methods_arr.length - 1; i >= 0; i--) { if (this.lib_methods.hasOwnProperty(methods_arr[i])) { this.libs[scope.name][methods_arr[i]] = this.lib_methods[methods_arr[i]]; } } }, random_str : function (length) { var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split(''); if (!length) { length = Math.floor(Math.random() * chars.length); } var str = ''; for (var i = 0; i < length; i++) { str += chars[Math.floor(Math.random() * chars.length)]; } return str; }, libs : {}, // methods that can be inherited in libraries lib_methods : { set_data : function (node, data) { // this.name references the name of the library calling this method var id = [this.name,+new Date(),Foundation.random_str(5)].join('-'); Foundation.cache[id] = data; node.attr('data-' + this.name + '-id', id); return data; }, get_data : function (node) { return Foundation.cache[node.attr('data-' + this.name + '-id')]; }, remove_data : function (node) { if (node) { delete Foundation.cache[node.attr('data-' + this.name + '-id')]; node.attr('data-' + this.name + '-id', ''); } else { $('[data-' + this.name + '-id]').each(function () { delete Foundation.cache[$(this).attr('data-' + this.name + '-id')]; $(this).attr('data-' + this.name + '-id', ''); }); } }, throttle : function(fun, delay) { var timer = null; return function () { var context = this, args = arguments; clearTimeout(timer); timer = setTimeout(function () { fun.apply(context, args); }, delay); }; }, // parses data-options attribute on nodes and turns // them into an object data_options : function (el) { var opts = {}, ii, p, opts_arr = (el.attr('data-options') || ':').split(';'), opts_len = opts_arr.length; function isNumber (o) { return ! isNaN (o-0) && o !== null && o !== "" && o !== false && o !== true; } function trim(str) { if (typeof str === 'string') return $.trim(str); return str; } // parse options for (ii = opts_len - 1; ii >= 0; ii--) { p = opts_arr[ii].split(':'); if (/true/i.test(p[1])) p[1] = true; if (/false/i.test(p[1])) p[1] = false; if (isNumber(p[1])) p[1] = parseInt(p[1], 10); if (p.length === 2 && p[0].length > 0) { opts[trim(p[0])] = trim(p[1]); } } return opts; }, delay : function (fun, delay) { return setTimeout(fun, delay); }, // animated scrolling scrollTo : function (el, to, duration) { if (duration < 0) return; var difference = to - $(window).scrollTop(); var perTick = difference / duration * 10; this.scrollToTimerCache = setTimeout(function() { if (!isNaN(parseInt(perTick, 10))) { window.scrollTo(0, $(window).scrollTop() + perTick); this.scrollTo(el, to, duration - 10); } }.bind(this), 10); }, // not supported in core Zepto scrollLeft : function (el) { if (!el.length) return; return ('scrollLeft' in el[0]) ? el[0].scrollLeft : el[0].pageXOffset; }, // test for empty object or array empty : function (obj) { if (obj.length && obj.length > 0) return false; if (obj.length && obj.length === 0) return true; for (var key in obj) { if (hasOwnProperty.call(obj, key)) return false; } return true; } }, fix_outer : function (lib) { lib.outerHeight = function (el, bool) { if (typeof Zepto === 'function') { return el.height(); } if (typeof bool !== 'undefined') { return el.outerHeight(bool); } return el.outerHeight(); }; lib.outerWidth = function (el) { if (typeof Zepto === 'function') { return el.width(); } if (typeof bool !== 'undefined') { return el.outerWidth(bool); } return el.outerWidth(); }; }, error : function (error) { return error.name + ' ' + error.message + '; ' + error.more; }, // remove all foundation events. off: function () { $(this.scope).off('.fndtn'); $(window).off('.fndtn'); return true; }, zj : function () { try { return Zepto; } catch (e) { return jQuery; } }() }, $.fn.foundation = function () { var args = Array.prototype.slice.call(arguments, 0); return this.each(function () { Foundation.init.apply(Foundation, [this].concat(args)); return this; }); }; }(this, this.document)); })(libFuncName); /*jslint unparam: true, browser: true, indent: 2 */ ;(function ($, window, document, undefined) { 'use strict'; Foundation.libs.alerts = { name : 'alerts', version : '4.0.0', settings : { speed: 300, // fade out speed callback: function (){} }, init : function (scope, method, options) { this.scope = scope || this.scope; if (typeof method === 'object') { $.extend(true, this.settings, method); } if (typeof method != 'string') { if (!this.settings.init) this.events(); return this.settings.init; } else { return this[method].call(this, options); } }, events : function () { var self = this; $(this.scope).on('click.fndtn.alerts', '[data-alert] a.close', function (e) { e.preventDefault(); $(this).closest("[data-alert]").fadeOut(self.speed, function () { $(this).remove(); self.settings.callback(); }); }); this.settings.init = true; }, off : function () { $(this.scope).off('.fndtn.alerts'); } }; }(Foundation.zj, this, this.document)); /*jslint unparam: true, browser: true, indent: 2 */ ;(function ($, window, document, undefined) { 'use strict'; Foundation.libs.clearing = { name : 'clearing', version : '4.0.0', settings : { templates : { viewing : '×' + '' }, // comma delimited list of selectors that, on click, will close clearing, // add 'div.clearing-blackout, div.visible-img' to close on background click close_selectors : '.clearing-close', // event initializers and locks init : false, locked : false }, init : function (scope, method, options) { this.scope = this.scope || scope; Foundation.inherit(this, 'set_data get_data remove_data throttle'); if (typeof method === 'object') { options = $.extend(true, this.settings, method); } if (typeof method != 'string') { $(this.scope).find('ul[data-clearing]').each(function () { var self = Foundation.libs.clearing, $el = $(this), options = options || {}, settings = self.get_data($el); if (!settings) { options.$parent = $el.parent(); self.set_data($el, $.extend(true, self.settings, options)); self.assemble($el.find('li')); if (!self.settings.init) { self.events().swipe_events(); } } }); return this.settings.init; } else { // fire method return this[method].call(this, options); } }, // event binding and initial setup events : function () { var self = this; $(this.scope) .on('click.fndtn.clearing', 'ul[data-clearing] li', function (e, current, target) { var current = current || $(this), target = target || current, settings = self.get_data(current.parent()); e.preventDefault(); if (!settings) self.init(); // set current and target to the clicked li if not otherwise defined. self.open($(e.target), current, target); self.update_paddles(target); }) .on('click.fndtn.clearing', '.clearing-main-right', function (e) { this.nav(e, 'next') }.bind(this)) .on('click.fndtn.clearing', '.clearing-main-left', function (e) { this.nav(e, 'prev') }.bind(this)) .on('click.fndtn.clearing', this.settings.close_selectors, function (e) { Foundation.libs.clearing.close(e, this) }) .on('keydown.fndtn.clearing', function (e) { this.keydown(e) }.bind(this)); $(window).on('resize.fndtn.clearing', function (e) { this.resize() }.bind(this)); this.settings.init = true; return this; }, swipe_events : function () { var self = this; $(this.scope) .on('touchstart.fndtn.clearing', '.visible-img', function(e) { if (!e.touches) { e = e.originalEvent; } var data = { start_page_x: e.touches[0].pageX, start_page_y: e.touches[0].pageY, start_time: (new Date()).getTime(), delta_x: 0, is_scrolling: undefined }; $(this).data('swipe-transition', data); e.stopPropagation(); }) .on('touchmove.fndtn.clearing', '.visible-img', function(e) { if (!e.touches) { e = e.originalEvent; } // Ignore pinch/zoom events if(e.touches.length > 1 || e.scale && e.scale !== 1) return; var data = $(this).data('swipe-transition'); if (typeof data === 'undefined') { data = {}; } data.delta_x = e.touches[0].pageX - data.start_page_x; if ( typeof data.is_scrolling === 'undefined') { data.is_scrolling = !!( data.is_scrolling || Math.abs(data.delta_x) < Math.abs(e.touches[0].pageY - data.start_page_y) ); } if (!data.is_scrolling && !data.active) { e.preventDefault(); var direction = (data.delta_x < 0) ? 'next' : 'prev'; data.active = true; self.nav(e, direction); } }) .on('touchend.fndtn.clearing', '.visible-img', function(e) { $(this).data('swipe-transition', {}); e.stopPropagation(); }); }, assemble : function ($li) { var $el = $li.parent(), settings = this.get_data($el), grid = $el.detach(), data = { grid: '', viewing: settings.templates.viewing }, wrapper = '
' + data.viewing + data.grid + '
'; return settings.$parent.append(wrapper); }, // event callbacks open : function ($image, current, target) { var root = target.closest('.clearing-assembled'), container = root.find('div').first(), visible_image = container.find('.visible-img'), image = visible_image.find('img').not($image); if (!this.locked()) { // set the image to the selected thumbnail image.attr('src', this.load($image)); this.loaded(image, function () { // toggle the gallery root.addClass('clearing-blackout'); container.addClass('clearing-container'); visible_image.show(); this.fix_height(target) .caption(visible_image.find('.clearing-caption'), $image) .center(image) .shift(current, target, function () { target.siblings().removeClass('visible'); target.addClass('visible'); }); }.bind(this)); } }, close : function (e, el) { e.preventDefault(); var root = (function (target) { if (/blackout/.test(target.selector)) { return target; } else { return target.closest('.clearing-blackout'); } }($(el))), container, visible_image; if (el === e.target && root) { container = root.find('div').first(), visible_image = container.find('.visible-img'); this.settings.prev_index = 0; root.find('ul[data-clearing]') .attr('style', '').closest('.clearing-blackout') .removeClass('clearing-blackout'); container.removeClass('clearing-container'); visible_image.hide(); } return false; }, keydown : function (e) { var clearing = $('.clearing-blackout').find('ul[data-clearing]'); if (e.which === 39) this.go(clearing, 'next'); if (e.which === 37) this.go(clearing, 'prev'); if (e.which === 27) $('a.clearing-close').trigger('click'); }, nav : function (e, direction) { var clearing = $('.clearing-blackout').find('ul[data-clearing]'); e.preventDefault(); this.go(clearing, direction); }, resize : function () { var image = $('.clearing-blackout .visible-img').find('img'); if (image.length) { this.center(image); } }, // visual adjustments fix_height : function (target) { var lis = target.parent().children(), self = this; lis.each(function () { var li = $(this), image = li.find('img'); if (li.height() > self.outerHeight(image)) { li.addClass('fix-height'); } }) .closest('ul') .width(lis.length * 100 + '%'); return this; }, update_paddles : function (target) { var visible_image = target .closest('.carousel') .siblings('.visible-img'); if (target.next().length) { visible_image .find('.clearing-main-right') .removeClass('disabled'); } else { visible_image .find('.clearing-main-right') .addClass('disabled'); } if (target.prev().length) { visible_image .find('.clearing-main-left') .removeClass('disabled'); } else { visible_image .find('.clearing-main-left') .addClass('disabled'); } }, center : function (target) { target.css({ marginLeft : -(this.outerWidth(target) / 2), marginTop : -(this.outerHeight(target) / 2) }); return this; }, // image loading and preloading load : function ($image) { var href = $image.parent().attr('href'); this.preload($image); if (href) return href; return $image.attr('src'); }, preload : function ($image) { this .img($image.closest('li').next()) .img($image.closest('li').prev()); }, loaded : function (image, callback) { // based on jquery.imageready.js // @weblinc, @jsantell, (c) 2012 function loaded () { callback(); } function bindLoad () { this.one('load', loaded); if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) { var src = this.attr( 'src' ), param = src.match( /\?/ ) ? '&' : '?'; param += 'random=' + (new Date()).getTime(); this.attr('src', src + param); } } if (!image.attr('src')) { loaded(); return; } if (this.complete || this.readyState === 4) { loaded(); } else { bindLoad.call(image); } }, img : function (img) { if (img.length) { var new_img = new Image(), new_a = img.find('a'); if (new_a.length) { new_img.src = new_a.attr('href'); } else { new_img.src = img.find('img').attr('src'); } } return this; }, // image caption caption : function (container, $image) { var caption = $image.data('caption'); if (caption) { container .text(caption) .show(); } else { container .text('') .hide(); } return this; }, // directional methods go : function ($ul, direction) { var current = $ul.find('.visible'), target = current[direction](); if (target.length) { target .find('img') .trigger('click', [current, target]); } }, shift : function (current, target, callback) { var clearing = target.parent(), old_index = this.settings.prev_index || target.index(), direction = this.direction(clearing, current, target), left = parseInt(clearing.css('left'), 10), width = this.outerWidth(target), skip_shift; // we use jQuery animate instead of CSS transitions because we // need a callback to unlock the next animation if (target.index() !== old_index && !/skip/.test(direction)){ if (/left/.test(direction)) { this.lock(); clearing.animate({left : left + width}, 300, this.unlock()); } else if (/right/.test(direction)) { this.lock(); clearing.animate({left : left - width}, 300, this.unlock()); } } else if (/skip/.test(direction)) { // the target image is not adjacent to the current image, so // do we scroll right or not skip_shift = target.index() - this.settings.up_count; this.lock(); if (skip_shift > 0) { clearing.animate({left : -(skip_shift * width)}, 300, this.unlock()); } else { clearing.animate({left : 0}, 300, this.unlock()); } } callback(); }, direction : function ($el, current, target) { var lis = $el.find('li'), li_width = this.outerWidth(lis) + (this.outerWidth(lis) / 4), up_count = Math.floor(this.outerWidth($('.clearing-container')) / li_width) - 1, target_index = lis.index(target), response; this.settings.up_count = up_count; if (this.adjacent(this.settings.prev_index, target_index)) { if ((target_index > up_count) && target_index > this.settings.prev_index) { response = 'right'; } else if ((target_index > up_count - 1) && target_index <= this.settings.prev_index) { response = 'left'; } else { response = false; } } else { response = 'skip'; } this.settings.prev_index = target_index; return response; }, adjacent : function (current_index, target_index) { for (var i = target_index + 1; i >= target_index - 1; i--) { if (i === current_index) return true; } return false; }, // lock management lock : function () { this.settings.locked = true; }, unlock : function () { this.settings.locked = false; }, locked : function () { return this.settings.locked; }, // plugin management/browser quirks outerHTML : function (el) { // support FireFox < 11 return el.outerHTML || new XMLSerializer().serializeToString(el); }, off : function () { $(this.scope).off('.fndtn.clearing'); $(window).off('.fndtn.clearing'); this.remove_data(); // empty settings cache this.settings.init = false; } }; }(Foundation.zj, this, this.document)); /*! * jQuery Cookie Plugin v1.3 * https://github.com/carhartl/jquery-cookie * * Copyright 2011, Klaus Hartl * Dual licensed under the MIT or GPL Version 2 licenses. * http://www.opensource.org/licenses/mit-license.php * http://www.opensource.org/licenses/GPL-2.0 * * Modified to work with Zepto.js by ZURB */ (function ($, document, undefined) { var pluses = /\+/g; function raw(s) { return s; } function decoded(s) { return decodeURIComponent(s.replace(pluses, ' ')); } var config = $.cookie = function (key, value, options) { // write if (value !== undefined) { options = $.extend({}, config.defaults, options); if (value === null) { options.expires = -1; } if (typeof options.expires === 'number') { var days = options.expires, t = options.expires = new Date(); t.setDate(t.getDate() + days); } value = config.json ? JSON.stringify(value) : String(value); return (document.cookie = [ encodeURIComponent(key), '=', config.raw ? value : encodeURIComponent(value), options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : '' ].join('')); } // read var decode = config.raw ? raw : decoded; var cookies = document.cookie.split('; '); for (var i = 0, l = cookies.length; i < l; i++) { var parts = cookies[i].split('='); if (decode(parts.shift()) === key) { var cookie = decode(parts.join('=')); return config.json ? JSON.parse(cookie) : cookie; } } return null; }; config.defaults = {}; $.removeCookie = function (key, options) { if ($.cookie(key) !== null) { $.cookie(key, null, options); return true; } return false; }; })(Foundation.zj, document); /*jslint unparam: true, browser: true, indent: 2 */ ;(function ($, window, document, undefined) { 'use strict'; Foundation.libs.dropdown = { name : 'dropdown', version : '4.0.9', settings : { activeClass: 'open' }, init : function (scope, method, options) { this.scope = scope || this.scope; Foundation.inherit(this, 'throttle'); if (typeof method === 'object') { $.extend(true, this.settings, method); } if (typeof method != 'string') { if (!this.settings.init) { this.events(); } return this.settings.init; } else { return this[method].call(this, options); } }, events : function () { var self = this; $(this.scope).on('click.fndtn.dropdown', '[data-dropdown]', function (e) { e.preventDefault(); e.stopPropagation(); self.toggle($(this)); }); $('*, html, body').on('click.fndtn.dropdown', function (e) { if (!$(e.target).data('dropdown')) { $('[data-dropdown-content]') .css('left', '-99999px') .removeClass(self.settings.activeClass); } }); $(window).on('resize.fndtn.dropdown', self.throttle(function () { self.resize.call(self); }, 50)).trigger('resize'); this.settings.init = true; }, toggle : function (target, resize) { var dropdown = $('#' + target.data('dropdown')); $('[data-dropdown-content]').not(dropdown).css('left', '-99999px').removeClass(this.settings.activeClass); if (dropdown.hasClass(this.settings.activeClass)) { dropdown .css('left', '-99999px') .removeClass(this.settings.activeClass); } else { this .css(dropdown .addClass(this.settings.activeClass), target); } }, resize : function () { var dropdown = $('[data-dropdown-content].open'), target = $("[data-dropdown='" + dropdown.attr('id') + "']"); if (dropdown.length && target.length) { this.css(dropdown, target); } }, css : function (dropdown, target) { if (dropdown.parent()[0] === $('body')[0]) { var position = target.offset(); } else { var position = target.position(); } if (this.small()) { dropdown.css({ position : 'absolute', width: '95%', left: '2.5%', 'max-width': 'none', top: position.top + this.outerHeight(target) }); } else { if ($(window).width() > this.outerWidth(dropdown) + target.offset().left) { var left = position.left; } else { if (!dropdown.hasClass('right')) { dropdown.addClass('right'); } var left = position.left - (this.outerWidth(dropdown) - this.outerWidth(target)); } dropdown.attr('style', '').css({ position : 'absolute', top: position.top + this.outerHeight(target), left: left }); } return dropdown; }, small : function () { return $(window).width() < 768 || $('html').hasClass('lt-ie9'); }, off: function () { $(this.scope).off('.fndtn.dropdown'); $('html, body').off('.fndtn.dropdown'); $(window).off('.fndtn.dropdown'); $('[data-dropdown-content]').off('.fndtn.dropdown'); this.settings.init = false; } }; }(Foundation.zj, this, this.document)); /*jslint unparam: true, browser: true, indent: 2 */ ;(function ($, window, document, undefined) { 'use strict'; Foundation.libs.forms = { name : 'forms', version : '4.0.4', settings : { disable_class: 'no-custom' }, init : function (scope, method, options) { this.scope = scope || this.scope; if (typeof method === 'object') { $.extend(true, this.settings, method); } if (typeof method != 'string') { if (!this.settings.init) { this.events(); } this.assemble(); return this.settings.init; } else { return this[method].call(this, options); } }, assemble : function () { $('form.custom input[type="radio"]', $(this.scope)).not('[data-customforms="disabled"]') .each(this.append_custom_markup); $('form.custom input[type="checkbox"]', $(this.scope)).not('[data-customforms="disabled"]') .each(this.append_custom_markup); $('form.custom select', $(this.scope)).not('[data-customforms="disabled"]') .each(this.append_custom_select); }, events : function () { var self = this; $(this.scope) .on('change.fndtn.forms', 'form.custom select:not([data-customforms="disabled"])', function (e) { self.refresh_custom_select($(this)); }) .on('click.fndtn.forms', 'form.custom label', function (e) { var $associatedElement = $('#' + self.escape($(this).attr('for')) + ':not([data-customforms="disabled"])'), $customCheckbox, $customRadio; if ($associatedElement.length !== 0) { if ($associatedElement.attr('type') === 'checkbox') { e.preventDefault(); $customCheckbox = $(this).find('span.custom.checkbox'); //the checkbox might be outside after the label if ($customCheckbox.length == 0) { $customCheckbox = $(this).next('span.custom.checkbox'); } //the checkbox might be outside before the label if ($customCheckbox.length == 0) { $customCheckbox = $(this).prev('span.custom.checkbox'); } self.toggle_checkbox($customCheckbox); } else if ($associatedElement.attr('type') === 'radio') { e.preventDefault(); $customRadio = $(this).find('span.custom.radio'); //the radio might be outside after the label if ($customRadio.length == 0) { $customRadio = $(this).next('span.custom.radio'); } //the radio might be outside before the label if ($customRadio.length == 0) { $customRadio = $(this).prev('span.custom.radio'); } self.toggle_radio($customRadio); } } }) .on('click.fndtn.forms', 'form.custom div.custom.dropdown a.current, form.custom div.custom.dropdown a.selector', function (e) { var $this = $(this), $dropdown = $this.closest('div.custom.dropdown'), $select = $dropdown.prev(); // make sure other dropdowns close if(!$dropdown.hasClass('open')) $(self.scope).trigger('click'); e.preventDefault(); if (false === $select.is(':disabled')) { $dropdown.toggleClass('open'); if ($dropdown.hasClass('open')) { $(self.scope).on('click.fndtn.forms.customdropdown', function () { $dropdown.removeClass('open'); $(self.scope).off('.fndtn.forms.customdropdown'); }); } else { $(self.scope).on('.fndtn.forms.customdropdown'); } return false; } }) .on('click.fndtn.forms touchend.fndtn.forms', 'form.custom div.custom.dropdown li', function (e) { var $this = $(this), $customDropdown = $this.closest('div.custom.dropdown'), $select = $customDropdown.prev(), selectedIndex = 0; e.preventDefault(); e.stopPropagation(); if ( ! $(this).hasClass('disabled')) { $('div.dropdown').not($customDropdown).removeClass('open'); var $oldThis= $this .closest('ul') .find('li.selected'); $oldThis.removeClass('selected'); $this.addClass('selected'); $customDropdown .removeClass('open') .find('a.current') .html($this.html()); $this.closest('ul').find('li').each(function (index) { if ($this[0] == this) { selectedIndex = index; } }); $select[0].selectedIndex = selectedIndex; //store the old value in data $select.data('prevalue', $oldThis.html()); $select.trigger('change'); } }); this.settings.init = true; }, append_custom_markup : function (idx, sel) { var $this = $(sel).hide(), type = $this.attr('type'), $span = $this.next('span.custom.' + type); if ($span.length === 0) { $span = $('').insertAfter($this); } $span.toggleClass('checked', $this.is(':checked')); $span.toggleClass('disabled', $this.is(':disabled')); }, append_custom_select : function (idx, sel) { var self = Foundation.libs.forms, $this = $( sel ), $customSelect = $this.next( 'div.custom.dropdown' ), $customList = $customSelect.find( 'ul' ), $selectCurrent = $customSelect.find( ".current" ), $selector = $customSelect.find( ".selector" ), $options = $this.find( 'option' ), $selectedOption = $options.filter( ':selected' ), copyClasses = $this.attr('class') ? $this.attr('class').split(' ') : [], maxWidth = 0, liHtml = '', $listItems, $currentSelect = false; if ($this.hasClass(self.settings.disable_class)) return; if ($customSelect.length === 0) { var customSelectSize = $this.hasClass( 'small' ) ? 'small' : $this.hasClass( 'medium' ) ? 'medium' : $this.hasClass( 'large' ) ? 'large' : $this.hasClass( 'expand' ) ? 'expand' : ''; $customSelect = $('
'); $selector = $customSelect.find(".selector"); $customList = $customSelect.find("ul"); liHtml = $options.map(function() { return "
  • " + $( this ).html() + "
  • "; } ).get().join( '' ); $customList.append(liHtml); $currentSelect = $customSelect.prepend('' + $selectedOption.html() + '' ).find( ".current" ); $this .after( $customSelect ) .hide(); } else { liHtml = $options.map(function() { return "
  • " + $( this ).html() + "
  • "; }) .get().join(''); $customList .html('') .append(liHtml); } // endif $customSelect.length === 0 $customSelect.toggleClass('disabled', $this.is( ':disabled' ) ); $listItems = $customList.find( 'li' ); $options.each( function ( index ) { if ( this.selected ) { $listItems.eq( index ).addClass( 'selected' ); if ($currentSelect) { $currentSelect.html( $( this ).html() ); } } if ($(this).is(':disabled')) { $listItems.eq( index ).addClass( 'disabled' ); } }); // // If we're not specifying a predetermined form size. // if (!$customSelect.is('.small, .medium, .large, .expand')) { // ------------------------------------------------------------------------------------ // This is a work-around for when elements are contained within hidden parents. // For example, when custom-form elements are inside of a hidden reveal modal. // // We need to display the current custom list element as well as hidden parent elements // in order to properly calculate the list item element's width property. // ------------------------------------------------------------------------------------- $customSelect.addClass( 'open' ); // // Quickly, display all parent elements. // This should help us calcualate the width of the list item's within the drop down. // var self = Foundation.libs.forms; self.hidden_fix.adjust( $customList ); maxWidth = ( self.outerWidth($listItems) > maxWidth ) ? self.outerWidth($listItems) : maxWidth; Foundation.libs.forms.hidden_fix.reset(); $customSelect.removeClass( 'open' ); } // endif }, refresh_custom_select : function ($select) { var self = this; var maxWidth = 0, $customSelect = $select.next(), $options = $select.find('option'); $customSelect.find('ul').html(''); $options.each(function () { var $li = $('
  • ' + $(this).html() + '
  • '); $customSelect.find('ul').append($li); }); // re-populate $options.each(function (index) { if (this.selected) { $customSelect.find('li').eq(index).addClass('selected'); $customSelect.find('.current').html($(this).html()); } if ($(this).is(':disabled')) { $customSelect.find('li').eq(index).addClass('disabled'); } }); // fix width $customSelect.removeAttr('style') .find('ul').removeAttr('style'); $customSelect.find('li').each(function () { $customSelect.addClass('open'); if (self.outerWidth($(this)) > maxWidth) { maxWidth = self.outerWidth($(this)); } $customSelect.removeClass('open'); }); }, toggle_checkbox : function ($element) { var $input = $element.prev(), input = $input[0]; if (false === $input.is(':disabled')) { input.checked = ((input.checked) ? false : true); $element.toggleClass('checked'); $input.trigger('change'); } }, toggle_radio : function ($element) { var $input = $element.prev(), $form = $input.closest('form.custom'), input = $input[0]; if (false === $input.is(':disabled')) { $form.find('input[type="radio"][name="' + this.escape($input.attr('name')) + '"]').next().not($element).removeClass('checked'); if ( !$element.hasClass('checked') ) { $element.toggleClass('checked'); } input.checked = $element.hasClass('checked'); $input.trigger('change'); } }, escape : function (text) { return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); }, hidden_fix : { /** * Sets all hidden parent elements and self to visibile. * * @method adjust * @param {jQuery Object} $child */ // We'll use this to temporarily store style properties. tmp : [], // We'll use this to set hidden parent elements. hidden : null, adjust : function( $child ) { // Internal reference. var _self = this; // Set all hidden parent elements, including this element. _self.hidden = $child.parents().andSelf().filter( ":hidden" ); // Loop through all hidden elements. _self.hidden.each( function() { // Cache the element. var $elem = $( this ); // Store the style attribute. // Undefined if element doesn't have a style attribute. _self.tmp.push( $elem.attr( 'style' ) ); // Set the element's display property to block, // but ensure it's visibility is hidden. $elem.css( { 'visibility' : 'hidden', 'display' : 'block' } ); }); }, // end adjust /** * Resets the elements previous state. * * @method reset */ reset : function() { // Internal reference. var _self = this; // Loop through our hidden element collection. _self.hidden.each( function( i ) { // Cache this element. var $elem = $( this ), _tmp = _self.tmp[ i ]; // Get the stored 'style' value for this element. // If the stored value is undefined. if( _tmp === undefined ) // Remove the style attribute. $elem.removeAttr( 'style' ); else // Otherwise, reset the element style attribute. $elem.attr( 'style', _tmp ); }); // Reset the tmp array. _self.tmp = []; // Reset the hidden elements variable. _self.hidden = null; } // end reset }, off : function () { $(this.scope).off('.fndtn.forms'); } }; }(Foundation.zj, this, this.document)); /*jslint unparam: true, browser: true, indent: 2 */ ;(function ($, window, document, undefined) { 'use strict'; Foundation.libs.joyride = { name: 'joyride', version : '4.0.0', defaults : { tipLocation : 'bottom', // 'top' or 'bottom' in relation to parent nubPosition : 'auto', // override on a per tooltip bases scrollSpeed : 300, // Page scrolling speed in milliseconds timer : 0, // 0 = no timer , all other numbers = timer in milliseconds startTimerOnClick : true, // true or false - true requires clicking the first button start the timer startOffset : 0, // the index of the tooltip you want to start on (index of the li) nextButton : true, // true or false to control whether a next button is used tipAnimation : 'fade', // 'pop' or 'fade' in each tip pauseAfter : [], // array of indexes where to pause the tour after tipAnimationFadeSpeed: 300, // when tipAnimation = 'fade' this is speed in milliseconds for the transition cookieMonster : false, // true or false to control whether cookies are used cookieName : 'joyride', // Name the cookie you'll use cookieDomain : false, // Will this cookie be attached to a domain, ie. '.notableapp.com' cookieExpires : 365, // set when you would like the cookie to expire. tipContainer : 'body', // Where will the tip be attached postRideCallback : function (){}, // A method to call once the tour closes (canceled or complete) postStepCallback : function (){}, // A method to call after each step template : { // HTML segments for tip layout link : '×', timer : '
    ', tip : '
    ', wrapper : '
    ', button : '' } }, settings : {}, init : function (scope, method, options) { this.scope = scope || this.scope; Foundation.inherit(this, 'throttle data_options scrollTo scrollLeft delay'); if (typeof method === 'object') { $.extend(true, this.settings, this.defaults, method); } else { $.extend(true, this.settings, this.defaults, options); } if (typeof method != 'string') { if (!this.settings.init) this.events(); return this.settings.init; } else { return this[method].call(this, options); } }, events : function () { var self = this; $(this.scope) .on('click.joyride', '.joyride-next-tip, .joyride-modal-bg', function (e) { e.preventDefault(); if (this.settings.$li.next().length < 1) { this.end(); } else if (this.settings.timer > 0) { clearTimeout(this.settings.automate); this.hide(); this.show(); this.startTimer(); } else { this.hide(); this.show(); } }.bind(this)) .on('click.joyride', '.joyride-close-tip', function (e) { e.preventDefault(); this.end(); }.bind(this)); $(window).on('resize.fndtn.joyride', self.throttle(function () { if ($('[data-joyride]').length > 0 && self.settings.$next_tip) { if (self.is_phone()) { self.pos_phone(); } else { self.pos_default(); } } }, 100)); this.settings.init = true; }, start : function () { var self = this, $this = $(this.scope).find('[data-joyride]'), integer_settings = ['timer', 'scrollSpeed', 'startOffset', 'tipAnimationFadeSpeed', 'cookieExpires'], int_settings_count = integer_settings.length; if (!this.settings.init) this.init(); // non configureable settings this.settings.$content_el = $this; this.settings.body_offset = $(this.settings.tipContainer).position(); this.settings.$tip_content = this.settings.$content_el.find('> li'); this.settings.paused = false; this.settings.attempts = 0; this.settings.tipLocationPatterns = { top: ['bottom'], bottom: [], // bottom should not need to be repositioned left: ['right', 'top', 'bottom'], right: ['left', 'top', 'bottom'] }; // can we create cookies? if (typeof $.cookie !== 'function') { this.settings.cookieMonster = false; } // generate the tips and insert into dom. if (!this.settings.cookieMonster || this.settings.cookieMonster && $.cookie(this.settings.cookieName) === null) { this.settings.$tip_content.each(function (index) { var $this = $(this); $.extend(true, self.settings, self.data_options($this)); // Make sure that settings parsed from data_options are integers where necessary for (var i = int_settings_count - 1; i >= 0; i--) { self.settings[integer_settings[i]] = parseInt(self.settings[integer_settings[i]], 10); } self.create({$li : $this, index : index}); }); // show first tip if (!this.settings.startTimerOnClick && this.settings.timer > 0) { this.show('init'); this.startTimer(); } else { this.show('init'); } } }, resume : function () { this.set_li(); this.show(); }, tip_template : function (opts) { var $blank, content; opts.tip_class = opts.tip_class || ''; $blank = $(this.settings.template.tip).addClass(opts.tip_class); content = $.trim($(opts.li).html()) + this.button_text(opts.button_text) + this.settings.template.link + this.timer_instance(opts.index); $blank.append($(this.settings.template.wrapper)); $blank.first().attr('data-index', opts.index); $('.joyride-content-wrapper', $blank).append(content); return $blank[0]; }, timer_instance : function (index) { var txt; if ((index === 0 && this.settings.startTimerOnClick && this.settings.timer > 0) || this.settings.timer === 0) { txt = ''; } else { txt = this.outerHTML($(this.settings.template.timer)[0]); } return txt; }, button_text : function (txt) { if (this.settings.nextButton) { txt = $.trim(txt) || 'Next'; txt = this.outerHTML($(this.settings.template.button).append(txt)[0]); } else { txt = ''; } return txt; }, create : function (opts) { var buttonText = opts.$li.attr('data-button') || opts.$li.attr('data-text'), tipClass = opts.$li.attr('class'), $tip_content = $(this.tip_template({ tip_class : tipClass, index : opts.index, button_text : buttonText, li : opts.$li })); $(this.settings.tipContainer).append($tip_content); }, show : function (init) { var $timer = null; // are we paused? if (this.settings.$li === undefined || ($.inArray(this.settings.$li.index(), this.settings.pauseAfter) === -1)) { // don't go to the next li if the tour was paused if (this.settings.paused) { this.settings.paused = false; } else { this.set_li(init); } this.settings.attempts = 0; if (this.settings.$li.length && this.settings.$target.length > 0) { this.settings.tipSettings = $.extend(this.settings, this.data_options(this.settings.$li)); this.settings.timer = parseInt(this.settings.timer, 10); this.settings.tipSettings.tipLocationPattern = this.settings.tipLocationPatterns[this.settings.tipSettings.tipLocation]; // scroll if not modal if (!/body/i.test(this.settings.$target.selector)) { this.scroll_to(); } if (this.is_phone()) { this.pos_phone(true); } else { this.pos_default(true); } $timer = this.settings.$next_tip.find('.joyride-timer-indicator'); if (/pop/i.test(this.settings.tipAnimation)) { $timer.width(0); if (thsi.settings.timer > 0) { this.settings.$next_tip.show(); this.delay(function () { $timer.animate({ width: $timer.parent().width() }, this.settings.timer, 'linear'); }.bind(this), this.settings.tipAnimationFadeSpeed); } else { this.settings.$next_tip.show(); } } else if (/fade/i.test(this.settings.tipAnimation)) { $timer.width(0); if (this.settings.timer > 0) { this.settings.$next_tip .fadeIn(this.settings.tipAnimationFadeSpeed) .show(); this.delay(function () { $timer.animate({ width: $timer.parent().width() }, this.settings.timer, 'linear'); }.bind(this), this.settings.tipAnimationFadeSpeed); } else { this.settings.$next_tip.fadeIn(this.settings.tipAnimationFadeSpeed); } } this.settings.$current_tip = this.settings.$next_tip; // skip non-existant targets } else if (this.settings.$li && this.settings.$target.length < 1) { this.show(); } else { this.end(); } } else { this.settings.paused = true; } }, is_phone : function () { if (Modernizr) { return Modernizr.mq('only screen and (max-width: 767px)') || $('.lt-ie9').length > 0; } return (this.settings.$window.width() < 767) ? true : false; }, hide : function () { this.settings.postStepCallback(this.settings.$li.index(), this.settings.$current_tip); $('.joyride-modal-bg').hide(); this.settings.$current_tip.hide(); }, set_li : function (init) { if (init) { this.settings.$li = this.settings.$tip_content.eq(this.settings.startOffset); this.set_next_tip(); this.settings.$current_tip = this.settings.$next_tip; } else { this.settings.$li = this.settings.$li.next(); this.set_next_tip(); } this.set_target(); }, set_next_tip : function () { this.settings.$next_tip = $(".joyride-tip-guide[data-index='" + this.settings.$li.index() + "']"); this.settings.$next_tip.data('closed', ''); }, set_target : function () { var cl = this.settings.$li.attr('data-class'), id = this.settings.$li.attr('data-id'), $sel = function () { if (id) { return $(document.getElementById(id)); } else if (cl) { return $('.' + cl).first(); } else { return $('body'); } }; this.settings.$target = $sel(); }, scroll_to : function () { var window_half, tipOffset; window_half = $(window).height() / 2; tipOffset = Math.ceil(this.settings.$target.offset().top - window_half + this.outerHeight(this.settings.$next_tip)); if (tipOffset > 0) { this.scrollTo($('html, body'), tipOffset, this.settings.scrollSpeed); } }, paused : function () { if (($.inArray((this.settings.$li.index() + 1), this.settings.pauseAfter) === -1)) { return true; } return false; }, restart : function () { this.hide(); this.settings.$li = undefined; this.show('init'); }, pos_default : function (init) { var half_fold = Math.ceil($(window).height() / 2), tip_position = this.settings.$next_tip.offset(), $nub = this.settings.$next_tip.find('.joyride-nub'), nub_height = Math.ceil(this.outerHeight($nub) / 2), toggle = init || false; // tip must not be "display: none" to calculate position if (toggle) { this.settings.$next_tip.css('visibility', 'hidden'); this.settings.$next_tip.show(); } if (!/body/i.test(this.settings.$target.selector)) { if (this.bottom()) { this.settings.$next_tip.css({ top: (this.settings.$target.offset().top + nub_height + this.outerHeight(this.settings.$target)), left: this.settings.$target.offset().left}); this.nub_position($nub, this.settings.tipSettings.nubPosition, 'top'); } else if (this.top()) { this.settings.$next_tip.css({ top: (this.settings.$target.offset().top - this.outerHeight(this.settings.$next_tip) - nub_height), left: this.settings.$target.offset().left}); this.nub_position($nub, this.settings.tipSettings.nubPosition, 'bottom'); } else if (this.right()) { this.settings.$next_tip.css({ top: this.settings.$target.offset().top, left: (this.outerWidth(this.settings.$target) + this.settings.$target.offset().left)}); this.nub_position($nub, this.settings.tipSettings.nubPosition, 'left'); } else if (this.left()) { this.settings.$next_tip.css({ top: this.settings.$target.offset().top, left: (this.settings.$target.offset().left - this.outerWidth(this.settings.$next_tip) - nub_height)}); this.nub_position($nub, this.settings.tipSettings.nubPosition, 'right'); } if (!this.visible(this.corners(this.settings.$next_tip)) && this.settings.attempts < this.settings.tipSettings.tipLocationPattern.length) { $nub.removeClass('bottom') .removeClass('top') .removeClass('right') .removeClass('left'); this.settings.tipSettings.tipLocation = this.settings.tipSettings.tipLocationPattern[this.settings.attempts]; this.settings.attempts++; this.pos_default(true); } } else if (this.settings.$li.length) { this.pos_modal($nub); } if (toggle) { this.settings.$next_tip.hide(); this.settings.$next_tip.css('visibility', 'visible'); } }, pos_phone : function (init) { var tip_height = this.outerHeight(this.settings.$next_tip), tip_offset = this.settings.$next_tip.offset(), target_height = this.outerHeight(this.settings.$target), $nub = $('.joyride-nub', this.settings.$next_tip), nub_height = Math.ceil(this.outerHeight($nub) / 2), toggle = init || false; $nub.removeClass('bottom') .removeClass('top') .removeClass('right') .removeClass('left'); if (toggle) { this.settings.$next_tip.css('visibility', 'hidden'); this.settings.$next_tip.show(); } if (!/body/i.test(this.settings.$target.selector)) { if (this.top()) { this.settings.$next_tip.offset({top: this.settings.$target.offset().top - tip_height - nub_height}); $nub.addClass('bottom'); } else { this.settings.$next_tip.offset({top: this.settings.$target.offset().top + target_height + nub_height}); $nub.addClass('top'); } } else if (this.settings.$li.length) { this.pos_modal($nub); } if (toggle) { this.settings.$next_tip.hide(); this.settings.$next_tip.css('visibility', 'visible'); } }, pos_modal : function ($nub) { this.center(); $nub.hide(); if (!this.settings.$next_tip.data('closed')) { if ($('.joyride-modal-bg').length < 1) { $('body').append('
    ').show(); } if (/pop/i.test(this.settings.tipAnimation)) { $('.joyride-modal-bg').show(); } else { $('.joyride-modal-bg').fadeIn(this.settings.tipAnimationFadeSpeed); } } }, center : function () { var $w = $(window); this.settings.$next_tip.css({ top : ((($w.height() - this.outerHeight(this.settings.$next_tip)) / 2) + $w.scrollTop()), left : ((($w.width() - this.outerWidth(this.settings.$next_tip)) / 2) + this.scrollLeft($w)) }); return true; }, bottom : function () { return /bottom/i.test(this.settings.tipSettings.tipLocation); }, top : function () { return /top/i.test(this.settings.tipSettings.tipLocation); }, right : function () { return /right/i.test(this.settings.tipSettings.tipLocation); }, left : function () { return /left/i.test(this.settings.tipSettings.tipLocation); }, corners : function (el) { var w = $(window), right = w.width() + this.scrollLeft(w), bottom = w.width() + w.scrollTop(); return [ el.offset().top <= w.scrollTop(), right <= el.offset().left + this.outerWidth(el), bottom <= el.offset().top + this.outerHeight(el), this.scrollLeft(w) >= el.offset().left ]; }, visible : function (hidden_corners) { var i = hidden_corners.length; while (i--) { if (hidden_corners[i]) return false; } return true; }, nub_position : function (nub, pos, def) { if (pos === 'auto') { nub.addClass(def); } else { nub.addClass(pos); } }, startTimer : function () { if (this.settings.$li.length) { this.settings.automate = setTimeout(function () { this.hide(); this.show(); this.startTimer(); }.bind(this), this.settings.timer); } else { clearTimeout(this.settings.automate); } }, end : function () { if (this.settings.cookieMonster) { $.cookie(this.settings.cookieName, 'ridden', { expires: this.settings.cookieExpires, domain: this.settings.cookieDomain }); } if (this.settings.timer > 0) { clearTimeout(this.settings.automate); } this.settings.$next_tip.data('closed', true); $('.joyride-modal-bg').hide(); this.settings.$current_tip.hide(); this.settings.postStepCallback(this.settings.$li.index(), this.settings.$current_tip); this.settings.postRideCallback(this.settings.$li.index(), this.settings.$current_tip); }, outerHTML : function (el) { // support FireFox < 11 return el.outerHTML || new XMLSerializer().serializeToString(el); }, off : function () { $(this.scope).off('.joyride'); $(window).off('.joyride'); $('.joyride-close-tip, .joyride-next-tip, .joyride-modal-bg').off('.joyride'); $('.joyride-tip-guide, .joyride-modal-bg').remove(); clearTimeout(this.settings.automate); this.settings = {}; } }; }(Foundation.zj, this, this.document)); /*jslint unparam: true, browser: true, indent: 2 */ ;(function ($, window, document, undefined) { 'use strict'; Foundation.libs.magellan = { name : 'magellan', version : '4.0.0', settings : { activeClass: 'active' }, init : function (scope, method, options) { this.scope = scope || this.scope; Foundation.inherit(this, 'data_options'); if (typeof method === 'object') { $.extend(true, this.settings, method); } if (typeof method != 'string') { if (!this.settings.init) { this.fixed_magellan = $("[data-magellan-expedition]"); this.set_threshold(); this.last_destination = $('[data-magellan-destination]').last(); this.events(); } return this.settings.init; } else { return this[method].call(this, options); } }, events : function () { var self = this; $(this.scope).on('arrival.fndtn.magellan', '[data-magellan-arrival]', function (e) { var $destination = $(this), $expedition = $destination.closest('[data-magellan-expedition]'), activeClass = $expedition.attr('data-magellan-active-class') || self.settings.activeClass; $destination .closest('[data-magellan-expedition]') .find('[data-magellan-arrival]') .not($destination) .removeClass(activeClass); $destination.addClass(activeClass); }); this.fixed_magellan .on('update-position.fndtn.magellan', function(){ var $el = $(this); // $el.data("magellan-fixed-position",""); //$el.data("magellan-top-offset", ""); }) .trigger('update-position'); $(window) .on('resize.fndtn.magellan', function() { this.fixed_magellan.trigger('update-position'); }.bind(this)) .on('scroll.fndtn.magellan', function() { var windowScrollTop = $(window).scrollTop(); self.fixed_magellan.each(function() { var $expedition = $(this); if (typeof $expedition.data('magellan-top-offset') === 'undefined') { $expedition.data('magellan-top-offset', $expedition.offset().top); } if (typeof $expedition.data('magellan-fixed-position') === 'undefined') { $expedition.data('magellan-fixed-position', false) } var fixed_position = (windowScrollTop + self.settings.threshold) > $expedition.data("magellan-top-offset"); var attr = $expedition.attr('data-magellan-top-offset'); if ($expedition.data("magellan-fixed-position") != fixed_position) { $expedition.data("magellan-fixed-position", fixed_position); if (fixed_position) { $expedition.css({position:"fixed", top:0}); } else { $expedition.css({position:"", top:""}); } if (fixed_position && typeof attr != 'undefined' && attr != false) { $expedition.css({position:"fixed", top:attr + "px"}); } } }); }); if (this.last_destination.length > 0) { $(window).on('scroll.fndtn.magellan', function (e) { var windowScrollTop = $(window).scrollTop(), scrolltopPlusHeight = windowScrollTop + $(window).height(), lastDestinationTop = Math.ceil(self.last_destination.offset().top); $('[data-magellan-destination]').each(function () { var $destination = $(this), destination_name = $destination.attr('data-magellan-destination'), topOffset = $destination.offset().top - windowScrollTop; if (topOffset <= self.settings.threshold) { $("[data-magellan-arrival='" + destination_name + "']").trigger('arrival'); } // In large screens we may hit the bottom of the page and dont reach the top of the last magellan-destination, so lets force it if (scrolltopPlusHeight >= $(self.scope).height() && lastDestinationTop > windowScrollTop && lastDestinationTop < scrolltopPlusHeight) { $('[data-magellan-arrival]').last().trigger('arrival'); } }); }); } this.settings.init = true; }, set_threshold : function () { if (!this.settings.threshold) { this.settings.threshold = (this.fixed_magellan.length > 0) ? this.outerHeight(this.fixed_magellan, true) : 0; } }, off : function () { $(this.scope).off('.fndtn.magellan'); } }; }(Foundation.zj, this, this.document)); ;(function ($, window, document, undefined) { 'use strict'; Foundation.libs = Foundation.libs || {}; Foundation.libs.orbit = { name: 'orbit', version: '4.0.0', settings: { timer_speed: 10000, animation_speed: 500, bullets: true, stack_on_small: true, container_class: 'orbit-container', stack_on_small_class: 'orbit-stack-on-small', next_class: 'orbit-next', prev_class: 'orbit-prev', timer_container_class: 'orbit-timer', timer_paused_class: 'paused', timer_progress_class: 'orbit-progress', slides_container_class: 'orbit-slides-container', bullets_container_class: 'orbit-bullets', bullets_active_class: 'active', slide_number_class: 'orbit-slide-number', caption_class: 'orbit-caption', active_slide_class: 'active', orbit_transition_class: 'orbit-transitioning' }, init: function (scope, method, options) { var self = this; Foundation.inherit(self, 'data_options'); if (typeof method === 'object') { $.extend(true, self.settings, method); } $('[data-orbit]', scope).each(function(idx, el) { var scoped_self = $.extend(true, {}, self); scoped_self._init(idx, el); }); }, _container_html: function() { var self = this; return '
    '; }, _bullets_container_html: function($slides) { var self = this, $list = $('
      '); $slides.each(function(idx, slide) { var $item = $('
    1. '); if (idx === 0) { $item.addClass(self.settings.bullets_active_class); } $list.append($item); }); return $list; }, _slide_number_html: function(slide_number, total_slides) { var self = this, $container = $('
      '); $container.append('' + slide_number + ' of ' + total_slides + ''); return $container; }, _timer_html: function() { var self = this; if (typeof self.settings.timer_speed === 'number' && self.settings.timer_speed > 0) { return '
      '; } else { return ''; } }, _next_html: function() { var self = this; return 'Next '; }, _prev_html: function() { var self = this; return 'Prev '; }, _init: function (idx, slider) { var self = this, $slides_container = $(slider), $container = $slides_container.wrap(self._container_html()).parent(), $slides = $slides_container.children(); $.extend(true, self.settings, self.data_options($slides_container)); $container.append(self._prev_html()); $container.append(self._next_html()); $slides_container.addClass(self.settings.slides_container_class); if (self.settings.stack_on_small) { $container.addClass(self.settings.stack_on_small_class); } $container.append(self._slide_number_html(1, $slides.length)); $container.append(self._timer_html()); if (self.settings.bullets) { $container.after(self._bullets_container_html($slides)); } // To better support the "sliding" effect it's easier // if we just clone the first and last slides $slides_container.append($slides.first().clone().attr('data-orbit-slide','')); $slides_container.prepend($slides.last().clone().attr('data-orbit-slide','')); // Make the first "real" slide active $slides_container.css('marginLeft', '-100%'); $slides.first().addClass(self.settings.active_slide_class); self._init_events($slides_container); self._init_dimensions($slides_container); self._start_timer($slides_container); }, _init_events: function ($slides_container) { var self = this, $container = $slides_container.parent(); $(window) .on('load.fndtn.orbit', function() { $slides_container.height(''); $slides_container.height($slides_container.height($container.height())); $slides_container.trigger('orbit:ready'); }) .on('resize.fndtn.orbit', function() { $slides_container.height(''); $slides_container.height($slides_container.height($container.height())); }); $(document).on('click.fndtn.orbit', '[data-orbit-link]', function(e) { e.preventDefault(); var id = $(e.currentTarget).attr('data-orbit-link'), $slide = $slides_container.find('[data-orbit-slide=' + id + ']').first(); if ($slide.length === 1) { self._reset_timer($slides_container, true); self._goto($slides_container, $slide.index(), function() {}); } }); $container.siblings('.' + self.settings.bullets_container_class) .on('click.fndtn.orbit', '[data-orbit-slide-number]', function(e) { e.preventDefault(); self._reset_timer($slides_container, true); self._goto($slides_container, $(e.currentTarget).data('orbit-slide-number'),function() {}); }); $container .on('orbit:after-slide-change.fndtn.orbit', function(e, orbit) { var $slide_number = $container.find('.' + self.settings.slide_number_class); if ($slide_number.length === 1) { $slide_number.replaceWith(self._slide_number_html(orbit.slide_number, orbit.total_slides)); } }) .on('orbit:next-slide.fndtn.orbit click.fndtn.orbit', '.' + self.settings.next_class, function(e) { e.preventDefault(); self._reset_timer($slides_container, true); self._goto($slides_container, 'next', function() {}); }) .on('orbit:prev-slide.fndtn.orbit click.fndtn.orbit', '.' + self.settings.prev_class, function(e) { e.preventDefault(); self._reset_timer($slides_container, true); self._goto($slides_container, 'prev', function() {}); }) .on('orbit:toggle-play-pause.fndtn.orbit click.fndtn.orbit touchstart.fndtn.orbit', '.' + self.settings.timer_container_class, function(e) { e.preventDefault(); var $timer = $(e.currentTarget).toggleClass(self.settings.timer_paused_class), $slides_container = $timer.closest('.' + self.settings.container_class) .find('.' + self.settings.slides_container_class); if ($timer.hasClass(self.settings.timer_paused_class)) { self._stop_timer($slides_container); } else { self._start_timer($slides_container); } }) .on('touchstart.fndtn.orbit', function(e) { if (!e.touches) { e = e.originalEvent; } var data = { start_page_x: e.touches[0].pageX, start_page_y: e.touches[0].pageY, start_time: (new Date()).getTime(), delta_x: 0, is_scrolling: undefined }; $container.data('swipe-transition', data); e.stopPropagation(); }) .on('touchmove.fndtn.orbit', function(e) { if (!e.touches) { e = e.originalEvent; } // Ignore pinch/zoom events if(e.touches.length > 1 || e.scale && e.scale !== 1) return; var data = $container.data('swipe-transition'); if (typeof data === 'undefined') { data = {}; } data.delta_x = e.touches[0].pageX - data.start_page_x; if ( typeof data.is_scrolling === 'undefined') { data.is_scrolling = !!( data.is_scrolling || Math.abs(data.delta_x) < Math.abs(e.touches[0].pageY - data.start_page_y) ); } if (!data.is_scrolling && !data.active) { e.preventDefault(); self._stop_timer($slides_container); var direction = (data.delta_x < 0) ? 'next' : 'prev'; data.active = true; self._goto($slides_container, direction, function() {}); } }) .on('touchend.fndtn.orbit', function(e) { $container.data('swipe-transition', {}); e.stopPropagation(); }); }, _init_dimensions: function ($slides_container) { var $container = $slides_container.parent(), $slides = $slides_container.children(); $slides_container.css('width', $slides.length * 100 + '%'); $slides.css('width', 100 / $slides.length + '%'); $slides_container.height($container.height()); $slides_container.css('width', $slides.length * 100 + '%'); }, _start_timer: function ($slides_container) { var self = this, $container = $slides_container.parent(); var callback = function() { self._reset_timer($slides_container, false); self._goto($slides_container, 'next', function() { self._start_timer($slides_container); }); }; var $timer = $container.find('.' + self.settings.timer_container_class), $progress = $timer.find('.' + self.settings.timer_progress_class), progress_pct = ($progress.width() / $timer.width()), delay = self.settings.timer_speed - (progress_pct * self.settings.timer_speed); $progress.animate({'width': '100%'}, delay, 'linear', callback); $slides_container.trigger('orbit:timer-started'); }, _stop_timer: function ($slides_container) { var self = this, $container = $slides_container.parent(), $timer = $container.find('.' + self.settings.timer_container_class), $progress = $timer.find('.' + self.settings.timer_progress_class), progress_pct = $progress.width() / $timer.width() self._rebuild_timer($container, progress_pct * 100 + '%'); // $progress.stop(); $slides_container.trigger('orbit:timer-stopped'); $timer = $container.find('.' + self.settings.timer_container_class); $timer.addClass(self.settings.timer_paused_class); }, _reset_timer: function($slides_container, is_paused) { var self = this, $container = $slides_container.parent(); self._rebuild_timer($container, '0%'); if (typeof is_paused === 'boolean' && is_paused) { var $timer = $container.find('.' + self.settings.timer_container_class); $timer.addClass(self.settings.timer_paused_class); } }, _rebuild_timer: function ($container, width_pct) { // Zepto is unable to stop animations since they // are css-based. This is a workaround for that // limitation, which rebuilds the dom element // thus stopping the animation var self = this, $timer = $container.find('.' + self.settings.timer_container_class), $new_timer = $(self._timer_html()), $new_timer_progress = $new_timer.find('.' + self.settings.timer_progress_class); if (typeof Zepto === 'function') { $timer.remove(); $container.append($new_timer); $new_timer_progress.css('width', width_pct); } else if (typeof jQuery === 'function') { var $progress = $timer.find('.' + self.settings.timer_progress_class); $progress.css('width', width_pct); $progress.stop(); } }, _goto: function($slides_container, index_or_direction, callback) { var self = this, $container = $slides_container.parent(), $slides = $slides_container.children(), $active_slide = $slides_container.find('.' + self.settings.active_slide_class), active_index = $active_slide.index(); if ($container.hasClass(self.settings.orbit_transition_class)) { return false; } if (index_or_direction === 'prev') { if (active_index === 0) { active_index = $slides.length - 1; } else { active_index--; } } else if (index_or_direction === 'next') { active_index = (active_index+1) % $slides.length; } else if (typeof index_or_direction === 'number') { active_index = (index_or_direction % $slides.length); } if (active_index === ($slides.length - 1) && index_or_direction === 'next') { $slides_container.css('marginLeft', '0%'); active_index = 1; } else if (active_index === 0 && index_or_direction === 'prev') { $slides_container.css('marginLeft', '-' + ($slides.length - 1) * 100 + '%'); active_index = $slides.length - 2; } // Start transition, make next slide active $container.addClass(self.settings.orbit_transition_class); $active_slide.removeClass(self.settings.active_slide_class); $($slides[active_index]).addClass(self.settings.active_slide_class); // Make next bullet active var $bullets = $container.siblings('.' + self.settings.bullets_container_class); if ($bullets.length === 1) { $bullets.children().removeClass(self.settings.bullets_active_class); $($bullets.children()[active_index-1]).addClass(self.settings.bullets_active_class); } var new_margin_left = '-' + (active_index * 100) + '%'; // Check to see if animation will occur, otherwise perform // callbacks manually $slides_container.trigger('orbit:before-slide-change'); if ($slides_container.css('marginLeft') === new_margin_left) { $container.removeClass(self.settings.orbit_transition_class); $slides_container.trigger('orbit:after-slide-change', [{slide_number: active_index, total_slides: $slides_container.children().length - 2}]); callback(); } else { $slides_container.animate({ 'marginLeft' : new_margin_left }, self.settings.animation_speed, 'linear', function() { $container.removeClass(self.settings.orbit_transition_class); $slides_container.trigger('orbit:after-slide-change', [{slide_number: active_index, total_slides: $slides_container.children().length - 2}]); callback(); }); } } }; }(Foundation.zj, this, this.document)); /*! http://mths.be/placeholder v2.0.7 by @mathias Modified to work with Zepto.js by ZURB */ ;(function(window, document, $) { var isInputSupported = 'placeholder' in document.createElement('input'), isTextareaSupported = 'placeholder' in document.createElement('textarea'), prototype = $.fn, valHooks = $.valHooks, hooks, placeholder; if (isInputSupported && isTextareaSupported) { placeholder = prototype.placeholder = function() { return this; }; placeholder.input = placeholder.textarea = true; } else { placeholder = prototype.placeholder = function() { var $this = this; $this .filter((isInputSupported ? 'textarea' : ':input') + '[placeholder]') .not('.placeholder') .bind({ 'focus.placeholder': clearPlaceholder, 'blur.placeholder': setPlaceholder }) .data('placeholder-enabled', true) .trigger('blur.placeholder'); return $this; }; placeholder.input = isInputSupported; placeholder.textarea = isTextareaSupported; hooks = { 'get': function(element) { var $element = $(element); return $element.data('placeholder-enabled') && $element.hasClass('placeholder') ? '' : element.value; }, 'set': function(element, value) { var $element = $(element); if (!$element.data('placeholder-enabled')) { return element.value = value; } if (value == '') { element.value = value; // Issue #56: Setting the placeholder causes problems if the element continues to have focus. if (element != document.activeElement) { // We can't use `triggerHandler` here because of dummy text/password inputs :( setPlaceholder.call(element); } } else if ($element.hasClass('placeholder')) { clearPlaceholder.call(element, true, value) || (element.value = value); } else { element.value = value; } // `set` can not return `undefined`; see http://jsapi.info/jquery/1.7.1/val#L2363 return $element; } }; isInputSupported || (valHooks.input = hooks); isTextareaSupported || (valHooks.textarea = hooks); $(function() { // Look for forms $(document).delegate('form', 'submit.placeholder', function() { // Clear the placeholder values so they don't get submitted var $inputs = $('.placeholder', this).each(clearPlaceholder); setTimeout(function() { $inputs.each(setPlaceholder); }, 10); }); }); // Clear placeholder values upon page reload $(window).bind('beforeunload.placeholder', function() { $('.placeholder').each(function() { this.value = ''; }); }); } function args(elem) { // Return an object of element attributes var newAttrs = {}, rinlinejQuery = /^jQuery\d+$/; $.each(elem.attributes, function(i, attr) { if (attr.specified && !rinlinejQuery.test(attr.name)) { newAttrs[attr.name] = attr.value; } }); return newAttrs; } function clearPlaceholder(event, value) { var input = this, $input = $(input); if (input.value == $input.attr('placeholder') && $input.hasClass('placeholder')) { if ($input.data('placeholder-password')) { $input = $input.hide().next().show().attr('id', $input.removeAttr('id').data('placeholder-id')); // If `clearPlaceholder` was called from `$.valHooks.input.set` if (event === true) { return $input[0].value = value; } $input.focus(); } else { input.value = ''; $input.removeClass('placeholder'); input == document.activeElement && input.select(); } } } function setPlaceholder() { var $replacement, input = this, $input = $(input), $origInput = $input, id = this.id; if (input.value == '') { if (input.type == 'password') { if (!$input.data('placeholder-textinput')) { try { $replacement = $input.clone().attr({ 'type': 'text' }); } catch(e) { $replacement = $('').attr($.extend(args(this), { 'type': 'text' })); } $replacement .removeAttr('name') .data({ 'placeholder-password': true, 'placeholder-id': id }) .bind('focus.placeholder', clearPlaceholder); $input .data({ 'placeholder-textinput': $replacement, 'placeholder-id': id }) .before($replacement); } $input = $input.removeAttr('id').hide().prev().attr('id', id).show(); // Note: `$input[0] != input` now! } $input.addClass('placeholder'); $input[0].value = $input.attr('placeholder'); } else { $input.removeClass('placeholder'); } } }(this, document, Foundation.zj)); /*jslint unparam: true, browser: true, indent: 2 */ ;(function ($, window, document, undefined) { 'use strict'; Foundation.libs.reveal = { name: 'reveal', version : '4.0.9', locked : false, settings : { animation: 'fadeAndPop', animationSpeed: 250, closeOnBackgroundClick: true, dismissModalClass: 'close-reveal-modal', bgClass: 'reveal-modal-bg', open: function(){}, opened: function(){}, close: function(){}, closed: function(){}, bg : $('.reveal-modal-bg'), css : { open : { 'opacity': 0, 'visibility': 'visible', 'display' : 'block' }, close : { 'opacity': 1, 'visibility': 'hidden', 'display': 'none' } } }, init : function (scope, method, options) { this.scope = scope || this.scope; Foundation.inherit(this, 'data_options delay'); if (typeof method === 'object') { $.extend(true, this.settings, method); } if (typeof method != 'string') { this.events(); return this.settings.init; } else { return this[method].call(this, options); } }, events : function () { var self = this; $(this.scope) .off('.fndtn.reveal') .on('click.fndtn.reveal', '[data-reveal-id]', function (e) { e.preventDefault(); if (!self.locked) { self.locked = true; self.open.call(self, $(this)); } }) .on('click.fndtn.reveal touchend.click.fndtn.reveal', this.close_targets(), function (e) { e.preventDefault(); if (!self.locked) { self.locked = true; self.close.call(self, $(this).closest('.reveal-modal')); } }) .on('open.fndtn.reveal', '.reveal-modal', this.settings.open) .on('opened.fndtn.reveal', '.reveal-modal', this.settings.opened) .on('opened.fndtn.reveal', '.reveal-modal', this.open_video) .on('close.fndtn.reveal', '.reveal-modal', this.settings.close) .on('closed.fndtn.reveal', '.reveal-modal', this.settings.closed) .on('closed.fndtn.reveal', '.reveal-modal', this.close_video); return true; }, open : function (target) { if (target) { var modal = $('#' + target.data('reveal-id')); } else { var modal = $(this.scope); } if (!modal.hasClass('open')) { var open_modal = $('.reveal-modal.open'); if (typeof modal.data('css-top') === 'undefined') { modal.data('css-top', parseInt(modal.css('top'), 10)) .data('offset', this.cache_offset(modal)); } modal.trigger('open'); if (open_modal.length < 1) { this.toggle_bg(modal); } this.hide(open_modal, this.settings.css.open); this.show(modal, this.settings.css.open); } }, close : function (modal) { var modal = modal || $(this.scope), open_modals = $('.reveal-modal.open'); if (open_modals.length > 0) { this.locked = true; modal.trigger('close'); this.toggle_bg(modal); this.hide(open_modals, this.settings.css.close); } }, close_targets : function () { var base = '.' + this.settings.dismissModalClass; if (this.settings.closeOnBackgroundClick) { return base + ', .' + this.settings.bgClass; } return base; }, toggle_bg : function (modal) { if ($('.reveal-modal-bg').length === 0) { this.settings.bg = $('
      ', {'class': this.settings.bgClass}) .insertAfter(modal); } if (this.settings.bg.filter(':visible').length > 0) { this.hide(this.settings.bg); } else { this.show(this.settings.bg); } }, show : function (el, css) { // is modal if (css) { if (/pop/i.test(this.settings.animation)) { css.top = $(window).scrollTop() - el.data('offset') + 'px'; var end_css = { top: $(window).scrollTop() + el.data('css-top') + 'px', opacity: 1 } return this.delay(function () { return el .css(css) .animate(end_css, this.settings.animationSpeed, 'linear', function () { this.locked = false; el.trigger('opened'); }.bind(this)) .addClass('open'); }.bind(this), this.settings.animationSpeed / 2); } if (/fade/i.test(this.settings.animation)) { var end_css = {opacity: 1}; return this.delay(function () { return el .css(css) .animate(end_css, this.settings.animationSpeed, 'linear', function () { this.locked = false; el.trigger('opened'); }.bind(this)) .addClass('open'); }.bind(this), this.settings.animationSpeed / 2); } return el.css(css).show().css({opacity: 1}).addClass('open').trigger('opened'); } // should we animate the background? if (/fade/i.test(this.settings.animation)) { return el.fadeIn(this.settings.animationSpeed / 2); } return el.show(); }, hide : function (el, css) { // is modal if (css) { if (/pop/i.test(this.settings.animation)) { var end_css = { top: - $(window).scrollTop() - el.data('offset') + 'px', opacity: 0 }; return this.delay(function () { return el .animate(end_css, this.settings.animationSpeed, 'linear', function () { this.locked = false; el.css(css).trigger('closed'); }.bind(this)) .removeClass('open'); }.bind(this), this.settings.animationSpeed / 2); } if (/fade/i.test(this.settings.animation)) { var end_css = {opacity: 0}; return this.delay(function () { return el .animate(end_css, this.settings.animationSpeed, 'linear', function () { this.locked = false; el.css(css).trigger('closed'); }.bind(this)) .removeClass('open'); }.bind(this), this.settings.animationSpeed / 2); } return el.hide().css(css).removeClass('open').trigger('closed'); } // should we animate the background? if (/fade/i.test(this.settings.animation)) { return el.fadeOut(this.settings.animationSpeed / 2); } return el.hide(); }, close_video : function (e) { var video = $(this).find('.flex-video'), iframe = video.find('iframe'); if (iframe.length > 0) { iframe.attr('data-src', iframe[0].src); iframe.attr('src', 'about:blank'); video.fadeOut(100).hide(); } }, open_video : function (e) { var video = $(this).find('.flex-video'), iframe = video.find('iframe'); if (iframe.length > 0) { var data_src = iframe.attr('data-src'); if (typeof data_src === 'string') { iframe[0].src = iframe.attr('data-src'); } video.show().fadeIn(100); } }, cache_offset : function (modal) { var offset = modal.show().height() + parseInt(modal.css('top'), 10); modal.hide(); return offset; }, off : function () { $(this.scope).off('.fndtn.reveal'); } }; }(Foundation.zj, this, this.document)); /*jslint unparam: true, browser: true, indent: 2 */ ;(function ($, window, document, undefined) { 'use strict'; Foundation.libs.section = { name: 'section', version : '4.0.9', settings : { deep_linking: false, one_up: true, callback: function (){} }, init : function (scope, method, options) { var self = this; this.scope = scope || this.scope; Foundation.inherit(this, 'throttle data_options'); if (typeof method != 'string') { this.set_active_from_hash(); this.events(); return true; } else { return this[method].call(this, options); } }, events : function () { var self = this; $(this.scope) .on('click.fndtn.section', '[data-section] .title', function (e) { var $this = $(this), section = $this.closest('[data-section]'); self.toggle_active.call(this, e, self); }); $(window) .on('resize.fndtn.section', self.throttle(function () { self.resize.call(this); }, 30)) .on('hashchange', function () { if (!self.settings.toggled){ self.set_active_from_hash(); $(this).trigger('resize'); } }).trigger('resize'); $(document) .on('click.fndtn.section', function (e) { if ($(e.target).closest('.title').length < 1) { $('[data-section="vertical-nav"], [data-section="horizontal-nav"]') .find('section, .section') .removeClass('active') .attr('style', ''); } }); }, toggle_active : function (e, self) { var $this = $(this), section = $this.closest('section, .section'), content = section.find('.content'), parent = section.closest('[data-section]'), self = Foundation.libs.section, settings = $.extend({}, self.settings, self.data_options(parent)); self.settings.toggled = true; if (!settings.deep_linking && content.length > 0) { e.preventDefault(); } if (section.hasClass('active')) { if (self.small(parent) || self.is_vertical(parent) || self.is_horizontal(parent) || self.is_accordion(parent)) { section .removeClass('active') .attr('style', ''); } } else { var prev_active_section = null, title_height = self.outerHeight(section.find('.title')); if (self.small(parent) || settings.one_up) { prev_active_section = $this.closest('[data-section]').find('section.active, .section.active'); if (self.small(parent)) { prev_active_section.attr('style', ''); } else { prev_active_section.attr('style', 'visibility: hidden; padding-top: '+title_height+'px;'); } } if (self.small(parent)) { section.attr('style', ''); } else { section.css('padding-top', title_height); } section.addClass('active'); if (prev_active_section !== null) { prev_active_section.removeClass('active').attr('style', ''); } } setTimeout(function () { self.settings.toggled = false; }, 300); settings.callback(); }, resize : function () { var sections = $('[data-section]'), self = Foundation.libs.section; sections.each(function() { var $this = $(this), active_section = $this.find('section.active, .section.active'), settings = $.extend({}, self.settings, self.data_options($this)); if (active_section.length > 1) { active_section .not(':first') .removeClass('active') .attr('style', ''); } else if (active_section.length < 1 && !self.is_vertical($this) && !self.is_horizontal($this) && !self.is_accordion($this)) { var first = $this.find('section, .section').first(); first.addClass('active'); if (self.small($this)) { first.attr('style', ''); } else { first.css('padding-top', self.outerHeight(first.find('.title'))); } } if (self.small($this)) { active_section.attr('style', ''); } else { active_section.css('padding-top', self.outerHeight(active_section.find('.title'))); } self.position_titles($this); if (self.is_horizontal($this) && !self.small($this)) { self.position_content($this); } else { self.position_content($this, false); } }); }, is_vertical : function (el) { return /vertical-nav/i.test(el.data('section')); }, is_horizontal : function (el) { return /horizontal-nav/i.test(el.data('section')); }, is_accordion : function (el) { return /accordion/i.test(el.data('section')); }, is_tabs : function (el) { return /tabs/i.test(el.data('section')); }, set_active_from_hash : function () { var hash = window.location.hash.substring(1), sections = $('[data-section]'), self = this; sections.each(function () { var section = $(this), settings = $.extend({}, self.settings, self.data_options(section)); if (hash.length > 0 && settings.deep_linking) { section .find('section, .section') .attr('style', '') .removeClass('active'); section .find('.content[data-slug="' + hash + '"]') .closest('section, .section') .addClass('active'); } }); }, position_titles : function (section, off) { var titles = section.find('.title'), previous_width = 0, self = this; if (typeof off === 'boolean') { titles.attr('style', ''); } else { titles.each(function () { $(this).css('left', previous_width); previous_width += self.outerWidth($(this)); }); } }, position_content : function (section, off) { var titles = section.find('.title'), content = section.find('.content'), self = this; if (typeof off === 'boolean') { content.attr('style', ''); section.attr('style', ''); } else { section.find('section, .section').each(function () { var title = $(this).find('.title'), content = $(this).find('.content'); content.css({left: title.position().left - 1, top: self.outerHeight(title) - 2}); }); // temporary work around for Zepto outerheight calculation issues. if (typeof Zepto === 'function') { section.height(this.outerHeight(titles.first())); } else { section.height(this.outerHeight(titles.first()) - 2); } } }, small : function (el) { var settings = $.extend({}, this.settings, this.data_options(el)); if (this.is_tabs(el)) { return false; } if (el && this.is_accordion(el)) { return true; } if ($('html').hasClass('lt-ie9')) { return true; } if ($('html').hasClass('ie8compat')) { return true; } return $(this.scope).width() < 768; }, off : function () { $(this.scope).off('.fndtn.section'); $(window).off('.fndtn.section'); $(document).off('.fndtn.section') } }; }(Foundation.zj, this, this.document)); /*jslint unparam: true, browser: true, indent: 2 */ ;(function ($, window, document, undefined) { 'use strict'; Foundation.libs.tooltips = { name: 'tooltips', version : '4.0.2', settings : { selector : '.has-tip', additionalInheritableClasses : [], tooltipClass : '.tooltip', tipTemplate : function (selector, content) { return '' + content + ''; } }, cache : {}, init : function (scope, method, options) { var self = this; this.scope = scope || this.scope; if (typeof method === 'object') { $.extend(true, this.settings, method); } if (typeof method != 'string') { if (Modernizr.touch) { $(this.scope) .on('click.fndtn.tooltip touchstart.fndtn.tooltip touchend.fndtn.tooltip', '[data-tooltip]', function (e) { e.preventDefault(); $(self.settings.tooltipClass).hide(); self.showOrCreateTip($(this)); }) .on('click.fndtn.tooltip touchstart.fndtn.tooltip touchend.fndtn.tooltip', this.settings.tooltipClass, function (e) { e.preventDefault(); $(this).fadeOut(150); }); } else { $(this.scope) .on('mouseenter.fndtn.tooltip mouseleave.fndtn.tooltip', '[data-tooltip]', function (e) { var $this = $(this); if (e.type === 'mouseover' || e.type === 'mouseenter') { self.showOrCreateTip($this); } else if (e.type === 'mouseout' || e.type === 'mouseleave') { self.hide($this); } }); } // $(this.scope).data('fndtn-tooltips', true); } else { return this[method].call(this, options); } }, showOrCreateTip : function ($target) { var $tip = this.getTip($target); if ($tip && $tip.length > 0) { return this.show($target); } return this.create($target); }, getTip : function ($target) { var selector = this.selector($target), tip = null; if (selector) { tip = $('span[data-selector=' + selector + ']' + this.settings.tooltipClass); } return (typeof tip === 'object') ? tip : false; }, selector : function ($target) { var id = $target.attr('id'), dataSelector = $target.attr('data-tooltip') || $target.attr('data-selector'); if ((id && id.length < 1 || !id) && typeof dataSelector != 'string') { dataSelector = 'tooltip' + Math.random().toString(36).substring(7); $target.attr('data-selector', dataSelector); } return (id && id.length > 0) ? id : dataSelector; }, create : function ($target) { var $tip = $(this.settings.tipTemplate(this.selector($target), $('
      ').html($target.attr('title')).html())), classes = this.inheritable_classes($target); $tip.addClass(classes).appendTo('body'); if (Modernizr.touch) { $tip.append('tap to close '); } $target.removeAttr('title').attr('title',''); this.show($target); }, reposition : function (target, tip, classes) { var width, nub, nubHeight, nubWidth, column, objPos; tip.css('visibility', 'hidden').show(); width = target.data('width'); nub = tip.children('.nub'); nubHeight = this.outerHeight(nub); nubWidth = this.outerHeight(nub); objPos = function (obj, top, right, bottom, left, width) { return obj.css({ 'top' : (top) ? top : 'auto', 'bottom' : (bottom) ? bottom : 'auto', 'left' : (left) ? left : 'auto', 'right' : (right) ? right : 'auto', 'width' : (width) ? width : 'auto' }).end(); }; objPos(tip, (target.offset().top + this.outerHeight(target) + 10), 'auto', 'auto', target.offset().left, width); if ($(window).width() < 767) { objPos(tip, (target.offset().top + this.outerHeight(target) + 10), 'auto', 'auto', 12.5, $(this.scope).width()); tip.addClass('tip-override'); objPos(nub, -nubHeight, 'auto', 'auto', target.offset().left); } else { objPos(tip, (target.offset().top + this.outerHeight(target) + 10), 'auto', 'auto', target.offset().left, width); tip.removeClass('tip-override'); if (classes && classes.indexOf('tip-top') > -1) { objPos(tip, (target.offset().top - this.outerHeight(tip)), 'auto', 'auto', target.offset().left, width) .removeClass('tip-override'); } else if (classes && classes.indexOf('tip-left') > -1) { objPos(tip, (target.offset().top + (this.outerHeight(target) / 2) - nubHeight*2.5), 'auto', 'auto', (target.offset().left - this.outerWidth(tip) - nubHeight), width) .removeClass('tip-override'); } else if (classes && classes.indexOf('tip-right') > -1) { objPos(tip, (target.offset().top + (this.outerHeight(target) / 2) - nubHeight*2.5), 'auto', 'auto', (target.offset().left + this.outerWidth(target) + nubHeight), width) .removeClass('tip-override'); } } tip.css('visibility', 'visible').hide(); }, inheritable_classes : function (target) { var inheritables = ['tip-top', 'tip-left', 'tip-bottom', 'tip-right', 'noradius'].concat(this.settings.additionalInheritableClasses), classes = target.attr('class'), filtered = classes ? $.map(classes.split(' '), function (el, i) { if ($.inArray(el, inheritables) !== -1) { return el; } }).join(' ') : ''; return $.trim(filtered); }, show : function ($target) { var $tip = this.getTip($target); this.reposition($target, $tip, $target.attr('class')); $tip.fadeIn(150); }, hide : function ($target) { var $tip = this.getTip($target); $tip.fadeOut(150); }, // deprecate reload reload : function () { var $self = $(this); return ($self.data('fndtn-tooltips')) ? $self.foundationTooltips('destroy').foundationTooltips('init') : $self.foundationTooltips('init'); }, off : function () { $(this.scope).off('.fndtn.tooltip'); $(this.settings.tooltipClass).each(function (i) { $('[data-tooltip]').get(i).attr('title', $(this).text()); }).remove(); } }; }(Foundation.zj, this, this.document)); /*jslint unparam: true, browser: true, indent: 2 */ ;(function ($, window, document, undefined) { 'use strict'; Foundation.libs.topbar = { name : 'topbar', version : '4.0.0', settings : { index : 0, stickyClass : 'sticky', custom_back_text: true, back_text: 'Back', init : false }, init : function (scope, method, options) { var self = this; this.scope = scope || this.scope; if (typeof method === 'object') { $.extend(true, this.settings, method); } if (typeof method != 'string') { $('.top-bar').each(function () { self.settings.$w = $(window); self.settings.$topbar = $(this); self.settings.$section = self.settings.$topbar.find('section'); self.settings.$titlebar = self.settings.$topbar.children('ul').first(); self.settings.$topbar.data('index', 0); var breakpoint = $("
      ").insertAfter(self.settings.$topbar); self.settings.breakPoint = breakpoint.width(); breakpoint.remove(); self.assemble(); if (self.settings.$topbar.parent().hasClass('fixed')) { $('body').css('padding-top', self.outerHeight(self.settings.$topbar)); } }); if (!self.settings.init) { this.events(); } return this.settings.init; } else { // fire method return this[method].call(this, options); } }, events : function () { var self = this; var offst = this.outerHeight($('.top-bar')); $(this.scope) .on('click.fndtn.topbar', '.top-bar .toggle-topbar', function (e) { var topbar = $(this).closest('.top-bar'), section = topbar.find('section, .section'), titlebar = topbar.children('ul').first(); if (!topbar.data('height')) self.largestUL(); e.preventDefault(); if (self.breakpoint()) { topbar .toggleClass('expanded') .css('min-height', ''); } if (!topbar.hasClass('expanded')) { section.css({left: '0%'}); section.find('>.name').css({left: '100%'}); section.find('li.moved').removeClass('moved'); topbar.data('index', 0); } if (topbar.parent().hasClass('fixed')) { topbar.parent().removeClass('fixed'); $('body').css('padding-top','0'); window.scrollTo(0); } else if (topbar.hasClass('fixed expanded')) { topbar.parent().addClass('fixed'); $('body').css('padding-top',offst); } }) .on('click.fndtn.topbar', '.top-bar .has-dropdown>a', function (e) { var topbar = $(this).closest('.top-bar'), section = topbar.find('section, .section'), titlebar = topbar.children('ul').first(); if (Modernizr.touch || self.breakpoint()) { e.preventDefault(); } if (self.breakpoint()) { var $this = $(this), $selectedLi = $this.closest('li'); topbar.data('index', topbar.data('index') + 1); $selectedLi.addClass('moved'); section.css({left: -(100 * topbar.data('index')) + '%'}); section.find('>.name').css({left: 100 * topbar.data('index') + '%'}); $this.siblings('ul') .height(topbar.data('height') + self.outerHeight(titlebar, true)); topbar .css('min-height', topbar.data('height') + self.outerHeight(titlebar, true) * 2) } }); $(window).on('resize.fndtn.topbar', function () { if (!this.breakpoint()) { $('.top-bar').css('min-height', ''); } }.bind(this)); // Go up a level on Click $(this.scope).on('click.fndtn', '.top-bar .has-dropdown .back', function (e) { e.preventDefault(); var $this = $(this), topbar = $this.closest('.top-bar'), section = topbar.find('section, .section'), $movedLi = $this.closest('li.moved'), $previousLevelUl = $movedLi.parent(); topbar.data('index', topbar.data('index') - 1); section.css({left: -(100 * topbar.data('index')) + '%'}); section.find('>.name').css({'left': 100 * topbar.data('index') + '%'}); if (topbar.data('index') === 0) { topbar.css('min-height', 0); } setTimeout(function () { $movedLi.removeClass('moved'); }, 300); }); }, breakpoint : function () { return $(window).width() <= this.settings.breakPoint || $('html').hasClass('lt-ie9'); }, assemble : function () { var self = this; // Pull element out of the DOM for manipulation this.settings.$section.detach(); this.settings.$section.find('.has-dropdown>a').each(function () { var $link = $(this), $dropdown = $link.siblings('.dropdown'), $titleLi = $('
    2. '); // Copy link to subnav if (self.settings.custom_back_text == true) { $titleLi.find('h5>a').html('« ' + self.settings.back_text); } else { $titleLi.find('h5>a').html('« ' + $link.html()); } $dropdown.prepend($titleLi); }); // Put element back in the DOM this.settings.$section.appendTo(this.settings.$topbar); // check for sticky this.sticky(); }, largestUL : function () { var uls = this.settings.$topbar.find('section ul ul'), largest = uls.first(), total = 0, self = this; uls.each(function () { if ($(this).children('li').length > largest.children('li').length) { largest = $(this); } }); largest.children('li').each(function () { total += self.outerHeight($(this), true); }); this.settings.$topbar.data('height', total); }, sticky : function () { var klass = '.' + this.settings.stickyClass; if ($(klass).length > 0) { var distance = $(klass).length ? $(klass).offset().top: 0, $window = $(window); var offst = this.outerHeight($('.top-bar')); $window.scroll(function() { if ($window.scrollTop() >= (distance)) { $(klass).addClass("fixed"); $('body').css('padding-top',offst); } else if ($window.scrollTop() < distance) { $(klass).removeClass("fixed"); $('body').css('padding-top','0'); } }); } }, off : function () { $(this.scope).off('.fndtn.topbar'); $(window).off('.fndtn.topbar'); } }; }(Foundation.zj, this, this.document)); /* */ ; ;TI"required_assets_digest;TI"%2d22511e0cf3665d003076b0d7716f40;FI" _version;TI"%01dc9d4cb5b0ece13ed47cc1cabfeb41;F