{"mappings": "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", "sourcesContent": ["\n\n        var DEVMODE=false;\n        var STATIC_URI_PREFIX=\"https://s.smore.com/\";\n\n        ", "/*****\r\n * @fileOverview\r\n * This is Smore's AMD loader.\r\n *\r\n * TODO:\r\n *  - Document how to use it in modules\r\n *\r\n ****/\r\n\r\n// Setup defaults\r\nif (typeof DEVMODE === 'undefined') {\r\n    window.DEVMODE = true;\r\n}\r\n\r\nif (typeof STATIC_URI_PREFIX === 'undefined') {\r\n    window.STATIC_URI_PREFIX = '/';\r\n}\r\n\r\nif (typeof BUILD_TS === 'undefined') {\r\n    window.BUILD_TS = Number(new Date());\r\n}\r\n\r\n\r\n(function (win) {\r\n    // Enable or disable debug prints\r\n    var debug = false;\r\n\r\n    var PENDING_LOAD_TIME = 20000;\r\n\r\n    var console = window.console || {\r\n            debug: function () {\r\n            }, log: function () {\r\n            }, error: function () {\r\n            }\r\n        };\r\n\r\n    function log() {\r\n        if (DEVMODE) {\r\n            if (!debug) {\r\n                return;\r\n            }\r\n            var m = console.debug || console.log;\r\n\r\n            m.apply(console, arguments);\r\n        }\r\n    }\r\n\r\n\r\n    /*********************************************************************************\r\n     * Tiny promise implementation\r\n     *********************************************************************************/\r\n\r\n    /***\r\n     * @param {*=} resolveValue\r\n     * @constructor\r\n     */\r\n    function Promise(resolveValue) {\r\n        this.state = 'pending';\r\n        this._cbs = [];\r\n\r\n        if (resolveValue !== undefined) {\r\n            this.resolve(resolveValue);\r\n        }\r\n    }\r\n\r\n    Promise.prototype = {\r\n        done: function (callback) {\r\n            if (this.state === 'completed') {\r\n                callback(this.result);\r\n            } else {\r\n                this._cbs.push(callback);\r\n            }\r\n        },\r\n\r\n        resolve: function (value) {\r\n            this.result = value;\r\n            this.state = 'completed';\r\n\r\n            // invoke all callbacks\r\n            for (var i = 0; i < this._cbs.length; i++) {\r\n                this._cbs[i](value);\r\n            }\r\n        }\r\n    };\r\n\r\n\r\n    /***\r\n     * Creates a promise that will be resolved when all the given promises resolve\r\n     * @returns {Promise}\r\n     */\r\n    Promise.all = function (items) {\r\n        var p = new Promise();\r\n\r\n        var pending = items.length;\r\n\r\n        // resolve if no args\r\n        if (!pending) {\r\n            p.resolve();\r\n            return p;\r\n        }\r\n\r\n        function onPromiseCompleted() {\r\n            pending -= 1;\r\n            if (!pending) {\r\n                p.resolve();\r\n            }\r\n        }\r\n\r\n        // go over arguments\r\n        for (var i = 0; i < items.length; i++) {\r\n            /***\r\n             * @type {Promise}\r\n             */\r\n            var pi = items[i];\r\n            pi.done(onPromiseCompleted);\r\n        }\r\n\r\n        return p;\r\n    };\r\n\r\n\r\n    /*********************************************************************************\r\n     * Basic define/dependencies handling\r\n     *********************************************************************************/\r\n\r\n\r\n    /***\r\n     * @type {Object}\r\n     * @private\r\n     */\r\n    var _modules = {};\r\n\r\n    var _pending = {};\r\n\r\n    /***\r\n     * Is there an error with loading? if there is, we stop everything\r\n     *\r\n     * @type {boolean}\r\n     * @private\r\n     */\r\n    var _isError = false;\r\n\r\n    function define(name, deps, moduleDef) {\r\n        if (typeof deps === 'function') {\r\n            moduleDef = deps;\r\n            deps = [];\r\n        }\r\n\r\n        if (typeof moduleDef !== 'function') {\r\n            return;\r\n        }\r\n\r\n        if (name in _modules) {\r\n            return;\r\n        }\r\n\r\n        // mark the module as pending\r\n        _pending[name] = _pending[name] || new Promise();\r\n\r\n        loadDependencies(name, deps, moduleDef, (function () {\r\n            var m = _modules[name] = initModuleDef(name, moduleDef);\r\n\r\n            createPath(name, m);\r\n\r\n            resolveDependency(name);\r\n        }));\r\n    }\r\n\r\n\r\n    function initModuleDef(defName, def) {\r\n\r\n        /***\r\n         * A require function that uses the current module defined name to resolve the required name\r\n         * @param {String} requiredName\r\n         * @returns {*}\r\n         */\r\n        function internalRequire(requiredName) {\r\n            return moduleRequire(defName, requiredName);\r\n        }\r\n\r\n        // If this is development, try to execute the module\r\n        if (DEVMODE) {\r\n            // use try-catch, to report errors\r\n            try {\r\n                return def(internalRequire);\r\n            } catch (err) {\r\n                // in case of an error, we mark the _isError flag and notify our user\r\n\r\n                _isError = true;\r\n\r\n                var msg = \"Error loading module: \" + defName + \" \" + err;\r\n\r\n                showError(msg);\r\n                console.error(msg, err);\r\n                throw msg;\r\n            }\r\n        } else {\r\n            // in production, just run the module and return the results\r\n            return def(internalRequire);\r\n        }\r\n\r\n    }\r\n\r\n    /*********************************************************************************\r\n     * Dependency loading\r\n     *********************************************************************************/\r\n\r\n    var REQUIRE_REGEXP = /[^.]\\s*require\\s*\\(\\s*[\"']([^'\"\\s]+)[\"']\\s*\\)/g\r\n\r\n    function loadDependencies(name, deps, moduleDef, completeCallback) {\r\n        DEVMODE && log(\"LOADING DEPS FOR\", name);\r\n\r\n        if (DEVMODE) {\r\n\r\n            // extract all the dependencies\r\n            var f = String(moduleDef);\r\n\r\n            // We're using replace, because it's the only way to iterate through subgroups of multimatches\r\n            f.replace(REQUIRE_REGEXP, function (match, dep) {\r\n                deps.push(expandName(name, dep));\r\n            });\r\n\r\n            // if no dependencies, resolve;\r\n            if (!deps.length) {\r\n                return completeCallback();\r\n            }\r\n\r\n            loadModules(deps, completeCallback)\r\n        } else {\r\n            // If were on production, there is no need for dependency extraction\r\n            return completeCallback();\r\n        }\r\n    }\r\n\r\n    function loadModules(modules, completedCallback) {\r\n        var loaders = [];\r\n        for (var i = 0; i < modules.length; i++) {\r\n            loaders.push(loadDep(modules[i]));\r\n        }\r\n\r\n        Promise.all(loaders).done(completedCallback);\r\n    }\r\n\r\n    var BASE_SCRIPT = '/js/';\r\n\r\n    function loadDep(name) {\r\n        DEVMODE && log('%c DEP LOAD ' + name, 'color:gray;');\r\n\r\n        // if already loaded\r\n        if (name in _pending) {\r\n            var pend = _pending[name];\r\n            DEVMODE && log('%c PENDING FOUND:' + name + \", State: \" + pend.state, 'color:purple');\r\n            return pend;\r\n        }\r\n\r\n        // We use dynamic loading only on development\r\n        if (DEVMODE) {\r\n\r\n            log('%c LOADING FROM REMOTE ' + name, 'color:red');\r\n\r\n            // create a new pending promise\r\n            var p = _pending[name] = new Promise();\r\n\r\n            // create a script loader\r\n            var doc = document;\r\n\r\n            var s = doc.createElement('script');\r\n            s.type = 'text/javascript';\r\n            s.src = BASE_SCRIPT + name + '.js';\r\n            s.async = true;\r\n            s.onerror = function () {\r\n                throw \"Error loading script '\" + s.src + \"'.\";\r\n            };\r\n\r\n            // add the script file to the head\r\n            if (doc.head) {\r\n                doc.head.appendChild(s);\r\n            } else {\r\n                var fc = doc.body.firstChild;\r\n                doc.body.insertBefore(s, fc);\r\n            }\r\n\r\n\r\n            setTimeout(function () {\r\n                // only show script loading errors if there is no other error messages\r\n                if (p.state === 'pending' && !_isError) {\r\n                    console.error(\"%c Failed loading script \" + name, 'color:red;');\r\n                    // show an alert\r\n                    showError(\"Failed loading script: \" + name);\r\n                }\r\n\r\n            }, PENDING_LOAD_TIME);\r\n\r\n            // return the promise\r\n            return p;\r\n        }\r\n    }\r\n\r\n    function resolveDependency(name) {\r\n        if (name in _pending) {\r\n            _pending[name].resolve(name);\r\n        } else {\r\n            _pending[name] = new Promise(name);\r\n        }\r\n\r\n        DEVMODE && log('%c RESOLVED ' + name, 'color:green');\r\n    }\r\n\r\n    function showError(content) {\r\n        if (DEVMODE) {\r\n            var b = document.body;\r\n            var fc = b.firstChild;\r\n\r\n            var c = document.createElement('div');\r\n            c.setAttribute('style', \"background:#a10;color:#fff;font-size:12px;border-bottom:1px solid #fff;\" +\r\n            \"text-align:center;padding:7px;width:100%;height:20px;z-index:100;position:relative\");\r\n\r\n            c.innerHTML = content;\r\n\r\n            b.insertBefore(c, fc);\r\n        }\r\n    }\r\n\r\n\r\n    function moduleRequire(moduleName, name) {\r\n        name = expandName(moduleName, name);\r\n\r\n        if (!(name in _modules)) {\r\n            throw 'Module ' + name + ' is not loaded :(';\r\n        }\r\n\r\n        return _modules[name];\r\n    }\r\n\r\n    function expandName(moduleName, targetName) {\r\n\r\n        // If it's a relative require (a require that starts with ./)\r\n        if (targetName.indexOf('./') > -1) {\r\n\r\n            // start by calculating module path, without the module file\r\n            var path = moduleName.substr(0, moduleName.lastIndexOf('/'));\r\n\r\n            // add the target name but remove the .\r\n            return path + targetName.substr(1);\r\n        }\r\n\r\n        // else, return the original target name\r\n        return targetName;\r\n    }\r\n\r\n\r\n    function require(modules, callback) {\r\n        if (typeof modules === 'string') {\r\n            modules = [modules];\r\n        }\r\n\r\n        if (typeof callback !== 'function') {\r\n            throw \"You must specify a callback function\";\r\n        }\r\n\r\n\r\n        loadModules(modules, function () {\r\n\r\n            var results = [];\r\n            for (var i = 0; i < modules.length; i++) {\r\n                results.push(moduleRequire('', modules[i]));\r\n            }\r\n\r\n            callback.apply(win, results);\r\n        });\r\n    }\r\n\r\n    function legacyDefine(name, value) {\r\n        if (name in _modules) {\r\n            throw name + \" is already defined!\";\r\n        }\r\n\r\n        _modules[name] = value;\r\n    }\r\n\r\n    function createPath(name, value) {\r\n        if (name === 'jquery') return;\r\n        var parts = name.split('/');\r\n        var cur = win;\r\n\r\n        for (var part; parts.length && (part = parts.shift());) {\r\n            if (cur[part]) {\r\n                cur = cur[part];\r\n            }\r\n            else if (!parts.length) {\r\n                cur[part] = value;\r\n            }\r\n            else {\r\n                cur = cur[part] = {};\r\n            }\r\n        }\r\n    }\r\n\r\n    win.define = define;\r\n    win.require = require;\r\n    win.legacyDefine = legacyDefine;\r\n\r\n})(window);", "/****\n *  @fileOverview\n *\n *\n *****/\n\ndefine('fire/ui/overlay', function (require) {\n    var Z_INDEX = 5000;\n    var SHIM_CLS = 'fire-shim';\n    var FADE_DURATION = 300;\n\n    var _doc = $(document);\n    var _body = $(_doc[0].body);\n    var _win = $(window);\n    var _current;\n\n    function show(zIndex, extraClass, closeOnClick) {\n        // remove previous shim\n        remove();\n\n        zIndex = zIndex || Z_INDEX;\n\n        // new deferred\n        var dfd = $.Deferred();\n\n        // create shim\n        var el = $('<div/>').addClass(SHIM_CLS + ' ' + (extraClass || ''));\n\n        // set current + css\n        _current = el.css({position: 'absolute', 'z-index': zIndex, top: 0, left: 0, overflow: 'hidden'});\n\n\n        // resize handler\n        _win.on('resize', position);\n\n        // position\n        position();\n        // add to dom\n        _body.prepend(el);\n\n        // click handler\n        el.click(function (e) {\n            dfd.resolve(e);\n            if (closeOnClick) {\n                remove();\n            }\n        });\n\n\n        // return promise\n        return dfd.promise();\n    }\n\n\n    /****\n     *\n     * @param {Boolean=} fade\n     */\n    function remove(fade) {\n        if (!_current) return;\n        _win.off('resize', position);\n\n        if (fade) {\n            _current.animate({opacity: 0}, FADE_DURATION);\n\n        }\n\n        // support for fade\n        return $.when(_current).done(function () {\n            if (_current) _current.remove();\n            _current = null;\n        })\n    }\n\n    function position() {\n        if (!_current) return;\n\n\n        // hide the overlay to not interfere with the scroll width/height calculation\n        _current.hide();\n        _current.css({width: _body[0].scrollWidth, height: _body[0].scrollHeight});\n        _current.show();\n    }\n\n\n    return {\n        show: show,\n        remove: remove\n    };\n\n});", "// Generated by CoffeeScript 1.12.7\n\n/*\n  mobile\n  ======\n\n  A set of utility methods for testing mobile devices and media queries.\n */\ndefine('fire/util/mobile', function(require) {\n  var isLandscape, isMiniLayout, isMobile, isPhone, isPortrait, isRetina, isTablet, mq;\n  mq = function(q) {\n\n    /*\n    Test a media query and see if it matches\n    \n    Params:\n      q   The media query to test for\n    \n    Examples:\n      mobile.mq(\"screen and (max-width: 600px)\")\n      => true\n     */\n    var m, matchMedia;\n    matchMedia = window.matchMedia || window.msMatchMedia;\n    if (!matchMedia) {\n      return false;\n    }\n    m = matchMedia(q);\n    return m && (m.matches || false);\n  };\n  isMobile = function() {\n\n    /*\n    Returns true if the device is a phone or a tablet\n     */\n    return isPhone() || isTablet();\n  };\n  isLandscape = function() {\n\n    /*\n    Returns true if our orientation is landscape\n     */\n    return mq('(orientation: landscape)');\n  };\n  isPortrait = function() {\n\n    /*\n    Returns true if our orientation is portrait\n     */\n    return mq('(orientation: portrait)');\n  };\n  isPhone = function() {\n\n    /*\n    Returns true if the device is a phone\n     */\n    return mq('only screen and (min-device-width: 320px) and (max-device-width: 480px)');\n  };\n  isTablet = function() {\n\n    /*\n    Returns true if the device is a tablet\n     */\n    return mq('only screen and (min-device-width:768px) and (max-device-width:1024px)');\n  };\n  isRetina = function() {\n\n    /*\n    Returns true if the device has high pixel density\n     */\n    return mq('only screen and (-webkit-min-device-pixel-ratio : 1.5)') || mq('only screen and (min-device-pixel-ratio : 1.5)');\n  };\n  isMiniLayout = function() {\n\n    /*\n    Returns true if the screen is in mini layout\n     */\n    return mq('only screen and (max-width: 720px)');\n  };\n  return {\n    mq: mq,\n    isMobile: isMobile,\n    isLandscape: isLandscape,\n    isPortrait: isPortrait,\n    isPhone: isPhone,\n    isTablet: isTablet,\n    isRetina: isRetina,\n    isMiniLayout: isMiniLayout\n  };\n});\n", "define('fire/ui/modal', function (require) {\r\n    var overlay = require('fire/ui/overlay');\r\n    var mobile = require('fire/util/mobile');\r\n\r\n    var Z_INDEX = 101;\r\n\r\n    var DEFAULTS = {\r\n        animate: true,\r\n        width: 500,\r\n        overlayClose: true,\r\n        loadingTitle: 'Loading...',\r\n        overlayClass: '',\r\n        close: null,\r\n        cssClass: '',\r\n        loadingSubtitle: '',\r\n        zIndex: Z_INDEX,\r\n        skipOverlay: false,\r\n        containerEl: false\r\n    };\r\n\r\n    var OVERLAY_CLASS = 'fire-modal-overlay';\r\n    var MODAL_CLASS = 'fire-modal';\r\n    var MOBILE_MODAL_CLASS = 'fire-modal-mobile';\r\n\r\n    var ANIMATION_DURATION = 250;\r\n\r\n\r\n    var _win = $(window);\r\n    var _body = $('body');\r\n\r\n    var _current, _options, _contentWrap, _locked;\r\n\r\n    // This should be extracted to a helper 'fire' library\r\n    var isTouch = \"ontouchend\" in document;\r\n\r\n    var _isPhone = mobile.isPhone();\r\n\r\n    /**************************** REMOTE URL ************************************/\r\n\r\n    function showUrl(url, options) {\r\n        // fetch the remote content\r\n        return showDeferred($.get(url), options);\r\n    }\r\n\r\n    function showDeferred(deferred, options) {\r\n        var dfd = $.Deferred();\r\n\r\n        // handle the case of a resolved deferred\r\n        if (deferred.state() === 'resolved') {\r\n            deferred.done(function (r) {\r\n                show(r, options).done(dfd.resolve);\r\n                return dfd.promise();\r\n            });\r\n            return dfd.promise();\r\n        }\r\n\r\n\r\n        // show the loading screen\r\n        show(getLoading(options), options).done(function () {\r\n            // When the deferred is completed\r\n            deferred.done(function (r) {\r\n                // replace content\r\n                _contentWrap.html(r);\r\n                position();\r\n                dfd.resolve(_current);\r\n            }).fail(function (r) {\r\n                // In case of an error\r\n                _contentWrap.html(getError());\r\n                _current.addClass(MODAL_CLASS + '-error');\r\n                position();\r\n                dfd.reject(_current);\r\n            });\r\n        });\r\n\r\n\r\n        return dfd.promise();\r\n    }\r\n\r\n\r\n    function getLoading(options) {\r\n        var o = $.extend({}, DEFAULTS, options || {});\r\n\r\n        return '<div class=\"spinner\"><h3><span></span>' + o.loadingTitle\r\n            + '</h3><p class=\"help-text\">' + o.loadingSubtitle\r\n            + '</p></div>'\r\n    }\r\n\r\n    function getError() {\r\n\r\n        return '<div class=\"' + MODAL_CLASS + '-error-content\"><h3 class=\"webfont\">Oops! Something bad happened :/</h3>' +\r\n            '<p>Hope we can still be friends...</p> ' +\r\n            '<p style=\"margin-top: 15px;\"><a class=\"' + MODAL_CLASS + '-close\">Close this</a> or <a href=\"mailto:hello@smore.com\">shower us with rage</a>.</div></div>';\r\n    }\r\n\r\n    /**************************** MODAL  ************************************/\r\n\r\n\r\n    function show(content, options) {\r\n\r\n        var dfd = $.Deferred();\r\n\r\n        // init options\r\n        _options = $.extend({}, DEFAULTS, options, {});\r\n\r\n        // close the currently open modal;\r\n        close();\r\n\r\n        if (_isPhone) {\r\n            return showPhone(content);\r\n        }\r\n\r\n        var containerEl = options.containerEl || _body;\r\n        _current = setup(content, MODAL_CLASS, containerEl);\r\n\r\n        // Store the container el\r\n        if (options.containerEl) {\r\n            _current.data('containerEl', options.containerEl);\r\n        }\r\n\r\n        _current.css('width', options.width);\r\n\r\n\r\n        if (!options.skipOverlay) {\r\n            var oc = OVERLAY_CLASS;\r\n            if (options.overlayClass) {\r\n                oc += (' ' + options.overlayClass);\r\n            }\r\n\r\n            // show overlay\r\n            var o = overlay.show(_options.zIndex, oc, _options.overlayClose);\r\n\r\n            // attach close\r\n            if (_options.overlayClose) {\r\n                o.done(close);\r\n            }\r\n        }\r\n\r\n        // position\r\n        position();\r\n\r\n        if (options.resolveBeforeAnimation) {\r\n            dfd.resolve(_current);\r\n        }\r\n\r\n        // apply show animation\r\n        if (_options.animate) {\r\n            animate('show', _current);\r\n        }\r\n\r\n        // resolve the deferred after the animation completion\r\n        $.when(_current).done(dfd.resolve);\r\n\r\n        // return deferred\r\n        return dfd.promise();\r\n    }\r\n\r\n    function position() {\r\n        if (!_current || _isPhone) return;\r\n        var width = _current.width();\r\n        var height = _current.height();\r\n\r\n        var left = 0;\r\n        var top = 0;\r\n\r\n        if (_current.data('containerEl')) {\r\n            var containerEl = _current.data('containerEl');\r\n\r\n            var containerHeight = containerEl.height();\r\n            var containerWidth = containerEl.width();\r\n\r\n            // put at screen center\r\n            top = (containerHeight / 2 ) - (height / 2);\r\n\r\n            // if our modal is too big for the screen, position it 50 pixel from the top\r\n            if (top < 0) {\r\n                top = 50;\r\n            }\r\n\r\n            left = (containerWidth / 2) - (width / 2);\r\n\r\n\r\n        } else {\r\n\r\n            var scrollTop = _win.scrollTop();\r\n            var scrollLeft = _win.scrollLeft();\r\n            var screenWidth = window.innerWidth || _win.width();\r\n            var screenHeight = window.innerHeight || _win.height();\r\n\r\n            // put at screen center\r\n            top = scrollTop + (screenHeight / 2 ) - (height / 2);\r\n\r\n            // if our modal is too big for the screen, position it 50 pixel from the top\r\n            if (top < scrollTop) {\r\n                top = scrollTop + 50;\r\n            }\r\n\r\n            left = scrollLeft + (screenWidth / 2) - (width / 2);\r\n        }\r\n\r\n\r\n        _current.css({\r\n            top: top,\r\n            left: left\r\n        });\r\n\r\n        window.setTimeout(fixPlaceholders, 20);\r\n    }\r\n\r\n    function setup(content, modalClass, containerEl) {\r\n        var c = $(content).show();\r\n\r\n        var dom = $('<div/>').addClass(modalClass + '  ' + (_options.cssClass || ''));\r\n        // wrap content with a wrapper div;\r\n        _contentWrap = c.wrap('<div/>').parent().addClass(MODAL_CLASS + '-content');\r\n\r\n        dom.append(_contentWrap);\r\n        containerEl.append(dom);\r\n\r\n\r\n        // delegate the 'fire-modal-close' class to close the modal\r\n        dom.delegate('.' + MODAL_CLASS + '-close', 'click', onCloseClicked);\r\n\r\n        return dom;\r\n    }\r\n\r\n    /***\r\n     *\r\n     * @param {string} type animation type (show/hide)\r\n     */\r\n    function animate(type, el) {\r\n        if (!el) return $.when();\r\n\r\n        // remove shadow for performance\r\n        el.addClass('no-shadow');\r\n\r\n        if (type === 'show') {\r\n            el.css({'margin-top': '-50px', opacity: 0})\r\n                .show()\r\n                .animate({'margin-top': 0, 'opacity': 1}, ANIMATION_DURATION);\r\n        }\r\n\r\n        if (type === 'hide') {\r\n            el\r\n                .animate({'margin-top': '50px', 'opacity': 0}, ANIMATION_DURATION);\r\n        }\r\n\r\n\r\n        return $.when(el).done(function () {\r\n            el.removeClass('no-shadow');\r\n        });\r\n    }\r\n\r\n    /***\r\n     *\r\n     * @param {Boolean=} fast should we use animation for the close?\r\n     */\r\n    function close(fast) {\r\n        if (!_current) return $.when();\r\n\r\n        if (_isPhone) return closePhone();\r\n\r\n        unlock();\r\n\r\n        var cur = _current;\r\n        // remove events\r\n        _win.off('resize', position);\r\n\r\n        // hide overlay\r\n        var o = overlay.remove(!fast && _options.animate);\r\n\r\n        // animate hide\r\n        if (_options.animate && !fast) {\r\n            animate('hide', cur);\r\n        }\r\n\r\n        // when done\r\n        return $.when(o, cur).done(function () {\r\n            // fix a tipsy issue\r\n            $('div.tipsy').hide();\r\n\r\n            if (_options && _options.close) {\r\n                _options.close(cur);\r\n            }\r\n            cur.detach();\r\n            var containerEl = _current.data('containerEl');\r\n\r\n            _contentWrap = _current = _options = cur = null;\r\n\r\n\r\n            if (containerEl) {\r\n                containerEl.remove();\r\n            }\r\n        });\r\n    }\r\n\r\n    /*********************************************************************************\r\n     * Phone width modal\r\n     *********************************************************************************/\r\n\r\n        // TODO - maybe restore the scroll position after a close?\r\n\r\n    function closePhone() {\r\n\r\n        var cur = _current;\r\n        if (_options && _options.close) _options.close(cur);\r\n        cur.remove();\r\n\r\n        // clean up everything\r\n        _contentWrap = _current = _options = cur = null;\r\n\r\n        // restore the body state\r\n        showBodyItems();\r\n\r\n        _body.removeClass('mobile-modal-body');\r\n\r\n        // restore the scroll top\r\n\r\n        if (_prePhoneScrollTop) {\r\n            _body.scrollTop(_prePhoneScrollTop);\r\n            _prePhoneScrollTop = null;\r\n        }\r\n\r\n        return $.when();\r\n    }\r\n\r\n    var _prePhoneScrollTop = null;\r\n\r\n    /***\r\n     * Show phone content\r\n     * @param content\r\n     */\r\n    function showPhone(content) {\r\n        // store the scroll top value\r\n        _prePhoneScrollTop = _body.scrollTop();\r\n\r\n        // hide body items\r\n        hideBodyItems();\r\n\r\n        // setup phone view\r\n        _current = setup(content, MOBILE_MODAL_CLASS,_body);\r\n\r\n        _body.addClass('mobile-modal-body');\r\n\r\n        // scroll to the top\r\n        _body.scrollTop(0);\r\n        return $.when(_current);\r\n    }\r\n\r\n    var _hiddenBodyItems;\r\n\r\n    function showBodyItems() {\r\n        // restore hidden body items\r\n        _hiddenBodyItems.show();\r\n\r\n        // remove current body items\r\n        _hiddenBodyItems = null;\r\n    }\r\n\r\n    function hideBodyItems() {\r\n        _hiddenBodyItems = _body.children(':visible').hide();\r\n    }\r\n\r\n\r\n    function fixPlaceholders() {\r\n        var pf = $.fn.placeholderPolyfill;\r\n        if (!_current || !pf) return;\r\n\r\n        // apply the placeholder on child elements\r\n        pf(_current, true);\r\n    }\r\n\r\n\r\n    function lock() {\r\n        _locked = true;\r\n\r\n        if (_current) _current.addClass('fire-modal-locked');\r\n    }\r\n\r\n    function unlock() {\r\n        _locked = false;\r\n\r\n        if (_current) _current.removeClass('fire-modal-locked');\r\n    }\r\n\r\n\r\n    function onCloseClicked(e) {\r\n        e.preventDefault();\r\n        e.stopImmediatePropagation();\r\n\r\n        var t = $(e.currentTarget);\r\n        if (_locked || t.hasClass('disabled')) return;\r\n\r\n        close();\r\n    }\r\n\r\n    // setup events\r\n\r\n    if (!isTouch) {\r\n        _win.on('resize', position);\r\n    }\r\n\r\n\r\n    var module = {\r\n        close: close,\r\n        show: show,\r\n        showUrl: showUrl,\r\n        showDeferred: showDeferred,\r\n        position: position,\r\n        lock: lock,\r\n        unlock: unlock\r\n    };\r\n\r\n\r\n    /*****\r\n     * Backward compatibility\r\n     * @deprecated\r\n     */\r\n    window.fire.modal = module;\r\n\r\n    /*****\r\n     * Backward compatibility\r\n     * @deprecated\r\n     */\r\n    window.fire.modal.reposition = position;\r\n\r\n\r\n    return module;\r\n});\r\n", "// Generated by CoffeeScript 1.12.7\ndefine('fire/util/eventEmitter', function(require) {\n\n  /*\n    Event emitter class\n  \n    TODO: this needs a proper documentation\n    shlomiatar @ 16/04/13\n   */\n  var Emitter;\n  Emitter = (function() {\n    var _guid, getGuid;\n\n    _guid = 0;\n\n    getGuid = function() {\n\n      /*\n      Returns a new emitter guid\n       */\n      _guid += 1;\n      return \"ev_\" + _guid;\n    };\n\n    function Emitter() {\n      this.__ev = {};\n    }\n\n    Emitter.prototype.on = function(name, callback) {\n\n      /*\n        Register a callback\n       */\n      if (!callback) {\n        return;\n      }\n      if (!(name in this.__ev)) {\n        this.__ev[name] = [];\n      }\n      if (this.__findCallbackIdx(name, callback) > 0) {\n        return;\n      }\n      if (!callback.guid) {\n        callback.guid = getGuid();\n      }\n      this.__ev[name].push(callback);\n      return this;\n    };\n\n    Emitter.prototype.one = function(name, callback) {\n\n      /*\n      Creates a callback that will fire only once\n       */\n      var handler, self;\n      self = this;\n      handler = function() {\n        callback.apply(this, arguments);\n        return self.off(name, callback);\n      };\n      if (!callback.guid) {\n        callback.guid = getGuid();\n      }\n      handler.guid = callback.guid;\n      return this.on(name, handler);\n    };\n\n    Emitter.prototype.off = function(name, callback) {\n\n      /*\n        Unregister an event/multiple events\n      \n        Params:\n          - name      The name of the event we dergisterring\n          - callback  (optional) the callback we want to de-register. if non was specified, removes all the callbacks for\n                                 the event\n       */\n      var idx;\n      if (!callback) {\n        delete this.__ev[name];\n        return;\n      }\n      idx = this.__findCallbackIdx(name, callback);\n      if (idx > -1) {\n        this.__ev[name].splice(idx, 1);\n      }\n      return this;\n    };\n\n    Emitter.prototype.trigger = function(name) {\n\n      /*\n      Trigger an event\n       */\n      var c, i, len, ref;\n      if (!(name in this.__ev)) {\n        return;\n      }\n      ref = this.__ev[name];\n      for (i = 0, len = ref.length; i < len; i++) {\n        c = ref[i];\n        c.apply(this, Array.prototype.slice.call(arguments, 1));\n      }\n      return this;\n    };\n\n    Emitter.prototype.__findCallbackIdx = function(name, callback) {\n\n      /*\n      Locates the callback index by the event name and callback\n       */\n      var c, i, idx, len, ref;\n      if (!(name in this.__ev)) {\n        return -1;\n      }\n      ref = this.__ev[name];\n      for (idx = i = 0, len = ref.length; i < len; idx = ++i) {\n        c = ref[idx];\n        if (c === callback) {\n          return idx;\n        }\n        if (c.guid && c.guid === callback.guid) {\n          return idx;\n        }\n      }\n      return -1;\n    };\n\n    return Emitter;\n\n  })();\n  return {\n    Emitter: Emitter\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\nvar extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty,\n  slice = [].slice;\n\ndefine('fire/ui/view', function(require) {\n  var View, em;\n  em = require('fire/util/eventEmitter');\n\n  /*\n  The basic view building block\n   */\n  View = (function(superClass) {\n    extend(View, superClass);\n\n    function View(options) {\n      if (options == null) {\n        options = {};\n      }\n      this.options = options;\n      if (this.defaultOptions) {\n        this.options = $.extend({}, this.defaultOptions, options);\n      }\n      View.__super__.constructor.apply(this, arguments);\n      this._modifiers = {};\n      this.el = options.el;\n      if (!this.el) {\n        this.el = this.generate();\n      } else {\n        this.options = $.extend({}, this.defaultOptions, this.el.data(), options);\n      }\n      if (this.autoRender) {\n        this.render();\n        this.setup();\n      }\n    }\n\n    View.prototype.autoRender = true;\n\n    View.prototype.render = function() {\n      return null;\n    };\n\n    View.prototype.setup = function() {\n      if (this.attrs) {\n        this.el.attr(this.attrs);\n      }\n      if (this.cssClass) {\n        this.el.addClass(this.cssClass);\n      }\n      if (this.events) {\n        return this.delegate(this._extractEvents(this.events));\n      }\n    };\n\n    View.prototype.remove = function() {\n      if (this.beforeRemove) {\n        this.beforeRemove();\n      }\n      if (this.el) {\n        this.el.remove();\n      }\n      return this.removed = true;\n    };\n\n    View.prototype.find = function(selector) {\n      return this.el.find(selector);\n    };\n\n    View.prototype.delegate = function(events) {\n      var e, j, len, results;\n      results = [];\n      for (j = 0, len = events.length; j < len; j++) {\n        e = events[j];\n        results.push(this.el.on(e.name, e.selector, e.handler));\n      }\n      return results;\n    };\n\n    View.prototype.undelegate = function(events) {\n      var e, j, len, results;\n      results = [];\n      for (j = 0, len = events.length; j < len; j++) {\n        e = events[j];\n        results.push(this.el.off(e.name, e.selector, e.handler));\n      }\n      return results;\n    };\n\n    View.prototype.generate = function() {\n\n      /*\n      An override of view to allow quick generation of widget steps\n       */\n      var cls, h, selEl, selector;\n      if (this.templateSelector) {\n        selector = _.result(this, 'templateSelector');\n        selEl = $(selector);\n        h = selEl.html();\n        cls = selEl.data('class') || '';\n        if (!h) {\n          throw \"Could not find html content with the selector \" + selector + \".\";\n        }\n        return $('<div>').addClass(cls).append(h);\n      }\n    };\n\n    View.prototype._extractEvents = function(eventDict) {\n\n      /*\n      Converts an event dict to a list of event handlers\n       */\n      var extractEvent, k, v;\n      if (!eventDict) {\n        return [];\n      }\n      extractEvent = (function(_this) {\n        return function(key, handlerName) {\n          var handler, name, ref, selector;\n          ref = key.split(' '), name = ref[0], selector = 2 <= ref.length ? slice.call(ref, 1) : [];\n          handler = _this[handlerName];\n          if (!handler) {\n            throw \"The handler \" + handlerName + \" was not found in \" + _this;\n          }\n          return {\n            name: name,\n            selector: selector.join(' '),\n            handler: $.proxy(handler, _this)\n          };\n        };\n      })(this);\n      return (function() {\n        var results;\n        results = [];\n        for (k in eventDict) {\n          v = eventDict[k];\n          results.push(extractEvent(k, v));\n        }\n        return results;\n      })();\n    };\n\n    View.prototype.addModifier = function(modifier, allowDomUpdate) {\n      var u;\n      if (allowDomUpdate == null) {\n        allowDomUpdate = false;\n      }\n\n      /*\n      Add a modifier to the current view\n      \n      Params:\n        - modifier\n        - allowDomUpdate        Sets a delay so the browser could update the dom before applying the modifier\n       */\n      if (this.hasModifier(modifier)) {\n        return;\n      }\n      this._modifiers[modifier] = true;\n      u = (function(_this) {\n        return function() {\n          if (_this.el) {\n            return _this.el.addClass(\"is-\" + modifier);\n          }\n        };\n      })(this);\n      if (allowDomUpdate) {\n        return setTimeout(u, 20);\n      } else {\n        return u();\n      }\n    };\n\n    View.prototype.removeModifier = function(modifier) {\n\n      /*\n      Remove the modifier from the view\n      \n      Params:\n        - modifier\n       */\n      if (!this.hasModifier(modifier)) {\n        return;\n      }\n      delete this._modifiers[modifier];\n      if (this.el) {\n        return this.el.removeClass(\"is-\" + modifier);\n      }\n    };\n\n    View.prototype.hasModifier = function(modifier) {\n\n      /*\n      Checks if the given modifier is active\n      \n      Params:\n        - Modifier  The modifier\n      \n      Returns:\n        true if the view has the given modifier, false if not\n       */\n      return modifier in this._modifiers;\n    };\n\n    View.prototype.modifiers = function() {\n\n      /*\n      Returns a list of the active modifiers\n       */\n      var i;\n      return (function() {\n        var results;\n        results = [];\n        for (i in this._modifiers) {\n          results.push(i);\n        }\n        return results;\n      }).call(this);\n    };\n\n    return View;\n\n  })(em.Emitter);\n  return {\n    View: View\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\ndefine('fire/util/history', function(require) {\n  var HISTORY_ID, HISTORY_KEY, StateHelper, getKey, hub, onHistoryPopState;\n  HISTORY_ID = 0;\n  HISTORY_KEY = '__history_key';\n  getKey = function() {\n    HISTORY_ID += 1;\n    return \"history_key_\" + HISTORY_ID;\n  };\n  hub = $({});\n  onHistoryPopState = function(e) {\n    var k, state;\n    state = e.originalEvent.state;\n    if (!state) {\n      return;\n    }\n    k = state[HISTORY_KEY];\n    if (k) {\n      return hub.trigger(k, state);\n    }\n  };\n  $(window).on('popstate', onHistoryPopState);\n  StateHelper = (function() {\n    function StateHelper(callback) {\n      this.id = getKey();\n      hub.on(this.id, callback);\n    }\n\n    StateHelper.prototype.push = function(state) {\n      var current;\n      if (state == null) {\n        state = {};\n      }\n      state[HISTORY_KEY] = this.id;\n      if (!history.pushState) {\n        return;\n      }\n      try {\n        current = JSON.stringify(history.state);\n        if (JSON.stringify(state) === current) {\n          return;\n        }\n        return history.pushState(state, document.title, document.location.href);\n      } catch (error) {}\n    };\n\n    StateHelper.prototype.pop = function() {\n      return null;\n    };\n\n    StateHelper.prototype.remove = function() {\n      return hub.off(this.id);\n    };\n\n    return StateHelper;\n\n  })();\n  return {\n    getHelper: function(callback) {\n      return new StateHelper(callback);\n    }\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\n\n/*\n  TODO - Proper view documentation\n */\nvar bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n  extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\ndefine('fire/ui/views/ModalView', function(require) {\n  var ModalView, history, modal, view;\n  modal = require('fire/ui/modal');\n  view = require('fire/ui/view');\n  history = require('fire/util/history');\n\n  /*\n    Provides a simple modal implementation\n  \n    @class ModalView\n   */\n  ModalView = (function(superClass) {\n    var PRELOAD_CACHE;\n\n    extend(ModalView, superClass);\n\n    PRELOAD_CACHE = {};\n\n    function ModalView(url1, options) {\n      this.url = url1;\n      this.onModalCompleted = bind(this.onModalCompleted, this);\n      ModalView.__super__.constructor.call(this, options);\n      if (this.enableHistory) {\n        this.historyHelper = history.getHelper((function(_this) {\n          return function(e, state) {\n            if (state && state.init) {\n              return _this.close();\n            }\n          };\n        })(this));\n      }\n      if (this.preload) {\n        this.getContent();\n      }\n    }\n\n    ModalView.prototype.autoRender = false;\n\n    ModalView.prototype.preload = false;\n\n    ModalView.prototype.show = function(modalOptions) {\n      var close;\n      close = $.proxy(this.onClose, this);\n      if (this.preload) {\n        modalOptions = $.extend({}, {\n          resolveBeforeAnimation: true,\n          close: close\n        }, modalOptions);\n      }\n      return modal.showDeferred(this.getContent(), modalOptions).always(this.onModalCompleted);\n    };\n\n    ModalView.prototype.onModalCompleted = function(el) {\n\n      /*\n      Happens when the modal creation is complete.\n      \n      We use this event to initalize the modal, setup history and call the render function\n       */\n      if (this.enableHistory) {\n        this.historyHelper.push({\n          init: true\n        });\n      }\n      this.el = el;\n      this.setup();\n      this.setupModalEvents();\n      this.render();\n      return modal.position();\n    };\n\n    ModalView.prototype.close = function(fast) {\n      return modal.close(fast);\n    };\n\n    ModalView.prototype.onClose = function() {\n\n      /*\n      Modals can override this to define behavior on close\n       */\n      return this.closed = true;\n    };\n\n    ModalView.prototype.setupModalEvents = function() {\n      return null;\n    };\n\n    ModalView.prototype.getContent = function() {\n\n      /*\n      Loads the content from the given url, if preload is defined, the content will be cached\n       */\n      var result;\n      if (this._loadedContent) {\n        return $.when(this._loadedContent);\n      }\n      result = this._loadContent();\n      if (this.preload) {\n        result.done((function(_this) {\n          return function(content) {\n            return _this._loadedContent = content;\n          };\n        })(this));\n      }\n      return result;\n    };\n\n    ModalView.prototype._loadContent = function() {\n\n      /*\n      Loads the content, use the preload cache if possible\n       */\n      var name;\n      if (!this.preload) {\n        return $.get(this.url);\n      }\n      return PRELOAD_CACHE[name = this.url] != null ? PRELOAD_CACHE[name] : PRELOAD_CACHE[name] = $.get(this.url);\n    };\n\n    ModalView.preloadUrl = function(url) {\n\n      /*\n      Preloads the url and stores it in cache for all the modals\n       */\n      return PRELOAD_CACHE[url] = $.get(url);\n    };\n\n    return ModalView;\n\n  })(view.View);\n  return {\n    ModalView: ModalView\n  };\n});\n", "define('fire/util/array', function (require) {\r\n    var _proto = Array.prototype;\r\n\r\n    // polyfills flag\r\n    // maybe in to future we could compile our code with legacy-ie flag to remove non important code\r\n    var POLYFILLS = true;\r\n\r\n\r\n    function normalize(items) {\r\n        if (items === null) return null;\r\n        if (Array.isArray(items)) return items.clone();\r\n        return [items];\r\n    }\r\n\r\n\r\n    /****\r\n     * Remove single or multiple items from the current array\r\n     * @param {*|Array} input\r\n     * @returns {Array}\r\n     */\r\n    _proto.remove = function (input) {\r\n        var items = normalize(input);\r\n        for (var i = 0; i < items.length; i++) {\r\n            var idx = this.indexOf(items[i]);\r\n            if (idx == -1) return this;\r\n            this.splice(idx, 1);\r\n        }\r\n        return this;\r\n    };\r\n\r\n\r\n    /***\r\n     * Removes elements that match the given lambda\r\n     * @param {function(*):boolean} lambda\r\n     * @returns {Array}\r\n     */\r\n    _proto.removeBy = function (lambda) {\r\n        return this.remove(this.where(lambda));\r\n    };\r\n\r\n    /***\r\n     * Insert the given item at the given index\r\n     * @param {*} item\r\n     * @param {number} idx\r\n     */\r\n    _proto.insert = function (item, idx) {\r\n        this.splice(idx, 0, item);\r\n    };\r\n\r\n\r\n    /***\r\n     * Inserts item before origItem\r\n     * @param {*} item\r\n     * @param {*} origItem\r\n     */\r\n    _proto.insertBefore = function (item, origItem) {\r\n        var idx = this.indexOf(origItem);\r\n        // if not found push it the the end\r\n        if (idx == -1) {\r\n            this.push(item);\r\n            return;\r\n        }\r\n\r\n        this.insert(item, idx);\r\n    };\r\n\r\n    /***\r\n     * Inserts item before origItem\r\n     * @param {*} item\r\n     * @param {*} origItem\r\n     */\r\n    _proto.insertAfter = function (item, origItem) {\r\n        var idx = this.indexOf(origItem);\r\n        // if not found push it the the end\r\n        if (idx == -1 || (idx + 1) > this.length) {\r\n            this.push(item);\r\n            return;\r\n        }\r\n\r\n        this.insert(item, idx + 1);\r\n    };\r\n\r\n\r\n    /**\r\n     * Duplicates the array\r\n     * @returns {Array}\r\n     */\r\n    _proto.clone = _proto.slice;\r\n\r\n    /***\r\n     * Checks if the given item is inside the current array\r\n     * @param {*} item\r\n     *\r\n     * @returns {boolean}\r\n     */\r\n    _proto.contains = function (item) {\r\n        return this.indexOf(item) != -1;\r\n    };\r\n\r\n\r\n    /***\r\n     * Returns the given array without the items from secondArray\r\n     * @param {Array} secondArray\r\n     * @returns {Array}\r\n     */\r\n    _proto.minus = function (secondArray) {\r\n        return this.clone().remove(secondArray);\r\n    };\r\n\r\n    /***\r\n     * Normalize input that can be single item or array to single array;\r\n     * @param items {Array/object}\r\n     * @returns {Array}\r\n     */\r\n    Array.normalize = normalize;\r\n\r\n    /***\r\n     * Returns the last element of the array\r\n     *\r\n     * @param {Function=} filter\r\n     * @returns {*}\r\n     */\r\n    _proto.last = function (filter) {\r\n        var arr = filter ? this.filter(filter) : this;\r\n        return arr[arr.length - 1];\r\n    };\r\n\r\n    /***\r\n     * Returns the first element of the array\r\n     *\r\n     * @param {Function=} filter\r\n     * @returns {*}\r\n     */\r\n    _proto.first = function (filter) {\r\n        var arr = filter ? this.filter(filter) : this;\r\n        return arr[0];\r\n    };\r\n\r\n\r\n    /***\r\n     * Adds the given item to the array only if not already inside\r\n     * returns true if the item was added\r\n     *\r\n     * @param {*} item\r\n     * @returns {boolean}\r\n     */\r\n    _proto.setPush = function (item) {\r\n        return !this.contains(item) && this.push(item);\r\n    };\r\n\r\n    /***\r\n     * Get a random item from the array\r\n     *\r\n     * @returns {*}\r\n     */\r\n    _proto.random = function () {\r\n        var i = Math.round((this.length - 1) * Math.random());\r\n        return this[i];\r\n    };\r\n\r\n    /****\r\n     * returns a unique representation of the array\r\n     *\r\n     * @returns {Array}\r\n     */\r\n    _proto.unique = function () {\r\n        var r = [];\r\n        for (var i = 0; i < this.length; i++) {\r\n            var el = this[i];\r\n            var idx = this.indexOf(el);\r\n            if (idx > -1 && idx < i) continue;\r\n            r.push(el);\r\n        }\r\n        return r;\r\n    };\r\n\r\n    _proto.sum = function (func) {\r\n        var o = 0;\r\n        for (var i = 0; i < this.length; i++) {\r\n            if (func) {\r\n                o += func(this[i]);\r\n            } else {\r\n                o += this[i];\r\n            }\r\n        }\r\n        return o;\r\n    };\r\n\r\n    /****\r\n     * Converts an array with arrays to a normal array\r\n     *\r\n     * @returns {Array}\r\n     */\r\n    _proto.flatten = function () {\r\n        var r = [];\r\n        for (var i = 0; i < this.length; i++) {\r\n            var o = this[i];\r\n            if (Array.isArray(o)) {\r\n                o.flatten().forEach(function (i) {\r\n                    r.push(i)\r\n                });\r\n            } else {\r\n                r.push(o);\r\n            }\r\n        }\r\n        return r;\r\n    };\r\n\r\n    /****\r\n     * Converts the given array to a dictionary type object\r\n     *\r\n     * converts [1,2,3,5] to {1:true, 2:true,3:true,5:true}\r\n     *\r\n     * @param {Array} array\r\n     * @returns {object.<*.boolean>}\r\n     */\r\n    Array.toObject = function (array) {\r\n        // empty object if no array/no items in array\r\n        if (!array || !array.length) return {};\r\n\r\n        var result = {};\r\n        for (var i = 0; i < array.length; i++) {\r\n            result[array[i]] = true;\r\n        }\r\n        return result;\r\n    };\r\n\r\n    function objectKeys(obj) {\r\n        var r = [];\r\n        for (var k in obj) {\r\n            r.push(k);\r\n        }\r\n        return r;\r\n    }\r\n\r\n    /**************************** POLYFILLS ************************************/\r\n\r\n    if (POLYFILLS) {\r\n        // isArray polyfill for older browsers\r\n        if (!Array.isArray) {\r\n            Array.isArray = function (val) {\r\n                return val &&\r\n                    typeof(val) === 'object' &&\r\n                    typeof(val.length) === 'number' &&\r\n                    typeof(val.splice) === 'function' && !(val.propertyIsEnumerable('length'));\r\n            }\r\n        }\r\n\r\n\r\n        // SUPPORT FOR ARRAYS IN IE8\r\n        if (!_proto.indexOf) {\r\n            _proto.indexOf = function (elt /*, from*/) {\r\n                var len = this.length >>> 0;\r\n\r\n                var from = Number(arguments[1]) || 0;\r\n                from = (from < 0)\r\n                    ? Math.ceil(from)\r\n                    : Math.floor(from);\r\n                if (from < 0)\r\n                    from += len;\r\n\r\n                for (; from < len; from++) {\r\n                    if (from in this &&\r\n                        this[from] === elt)\r\n                        return from;\r\n                }\r\n                return -1;\r\n            };\r\n        }\r\n\r\n        // polyfill for .some\r\n        if (!_proto.some) {\r\n            _proto.some = function (fn, scope) {\r\n                if (!fn) return false;\r\n                scope = scope || window;\r\n\r\n                for (var i = 0; i < this.length; i++) {\r\n                    if (fn.call(scope, this[i], i)) return true;\r\n                }\r\n\r\n                return false;\r\n            };\r\n        }\r\n\r\n        // polyfill for .forEach\r\n        if (!_proto.forEach) {\r\n            _proto.forEach = function (fn, scope) {\r\n                for (var i = 0, len = this.length; i < len; ++i) {\r\n                    fn.call(scope || this, this[i], i, this);\r\n                }\r\n            }\r\n        }\r\n\r\n        // polyfill for .filter\r\n        if (!_proto.filter) {\r\n            _proto.filter = function (fn, scope) {\r\n                var res = [];\r\n                if (!fn) return res;\r\n                scope = scope || window;\r\n\r\n                for (var i = 0; i < this.length; i++) {\r\n                    var v = this[i];\r\n                    if (fn.call(scope, v, i)) {\r\n                        res.push(v);\r\n                    }\r\n                }\r\n\r\n                return res;\r\n            };\r\n        }\r\n\r\n        if (!_proto.every) {\r\n            _proto.every = function (fn, scope) {\r\n                if (!fn) return true;\r\n                scope = scope || window;\r\n\r\n                for (var i = 0; i < this.length; i++) {\r\n                    if (!fn.call(scope, this[i], i)) return false;\r\n\r\n                }\r\n                return true;\r\n            };\r\n        }\r\n\r\n        if (!_proto.map) {\r\n            _proto.map = function (fn, scope) {\r\n                if (!fn) return this;\r\n                scope = scope || window;\r\n                var res = [];\r\n                for (var i = 0; i < this.length; i++) {\r\n                    res.push(fn.call(scope, this[i], i));\r\n                }\r\n\r\n                return res;\r\n            }\r\n        }\r\n    }\r\n\r\n    /**************************** BACKWARDS COMP ************************************/\r\n\r\n    /***\r\n     * @deprecated use .some\r\n     */\r\n    _proto.any = _proto.some;\r\n    /***\r\n     * @deprecated use .every\r\n     */\r\n    _proto.all = _proto.every;\r\n    /***\r\n     * @deprecated use .forEach\r\n     */\r\n    _proto.each = _proto.forEach;\r\n    /***\r\n     * @deprecated use .filter\r\n     */\r\n    _proto.where = _proto.filter;\r\n\r\n\r\n    /**************************** jQuery support ************************************/\r\n    if ('jQuery' in window) {\r\n        ['forEach', 'every', 'some', 'sum'].forEach(function (k) {\r\n            jQuery.fn[k] = _proto[k];\r\n        });\r\n    }\r\n\r\n\r\n    /**************************** range ************************************/\r\n\r\n    var FORMAT_REGXP = /\\{0\\}/g\r\n\r\n    /****\r\n     * Range function similar to python's range\r\n     * @param {Number} start\r\n     * @param {Number=} end\r\n     * @param {String=} format String of the format 'molsh_{0}_1', the function will an array with the strings and\r\n     *                         replace {0} with the index\r\n     * @return {Array}\r\n     */\r\n    function range(start, end, format) {\r\n        var r = [];\r\n\r\n        if (!end) {\r\n            end = start;\r\n            start = 0;\r\n        }\r\n\r\n        for (var i = start; i < end; i++) {\r\n            if (format) {\r\n                r.push(format.replace(FORMAT_REGXP, i));\r\n            } else {\r\n                r.push(i);\r\n            }\r\n        }\r\n\r\n        return r;\r\n    }\r\n\r\n    return {\r\n        toObject:Array.toObject,\r\n        keys:objectKeys,\r\n        range:range\r\n    }\r\n})\r\n;", "define('fire/net/safe', function (require) {\r\n    \"use strict\";\r\n\r\n    var GENERIC_ERROR_MESSAGE = 'Something went wrong :-/';\r\n    var _body = $('body');\r\n\r\n    /***\r\n     *\r\n     * @param {String} uri\r\n     * @param {Object=} params\r\n     * @param {Function=} successFunc\r\n     * @param {Object=} opts\r\n     *\r\n     * @returns {$.Deferred}\r\n     */\r\n    function post(uri, params, successFunc, opts) {\r\n        params = params || {};\r\n\r\n        // add the smore token\r\n        $.extend(params, {_token: token()});\r\n\r\n        var o = $.extend({\r\n            url: uri,\r\n            type: 'POST',\r\n            success: successFunc,\r\n            data: params\r\n        }, opts);\r\n\r\n        var p = $.ajax(o);\r\n\r\n        var call = p.then(handleRequest, handleFailedRequest);\r\n\r\n        // setup shorthands for compatibility with $.post\r\n        call.success = call.done;\r\n        call.error = call.fail;\r\n        call.complete = call.always;\r\n\r\n\r\n        // compatibility with jqXhr\r\n        call.abort = p.abort;\r\n        call.setRequestHeader = p.setRequestHeader;\r\n        call.getAllResponseHeaders = p.getAllResponseHeaders;\r\n        call.getResponseHeader = p.getResponseHeader;\r\n\r\n        // handle success callback\r\n        if (successFunc) {\r\n            call.done(successFunc);\r\n        }\r\n        return call;\r\n    }\r\n\r\n    function handleFailedRequest(jqXhr, statusText, error) {\r\n        var dfd = $.Deferred();\r\n\r\n        if (statusText === 'abort') {\r\n            dfd.reject(statusText, jqXhr, error);\r\n        } else {\r\n            dfd.reject(GENERIC_ERROR_MESSAGE, jqXhr, error);\r\n        }\r\n        return dfd;\r\n    }\r\n\r\n\r\n    /****\r\n     *\r\n     * @param data\r\n     * @param textStatus\r\n     * @param jqXhr\r\n     * @return {jQuery.Deferred}\r\n     * @private\r\n     */\r\n    function handleRequest(data, textStatus, jqXhr) {\r\n        // create the new deferred\r\n        var dfd = $.Deferred();\r\n        // if there is data, and no status information\r\n        if (!data || data && !data.status) {\r\n            dfd.resolve(data, textStatus, jqXhr);\r\n        }\r\n\r\n        // if we have status\r\n        if (data.status) {\r\n            if (data.status === 'success') {\r\n                dfd.resolve(data.result, textStatus, jqXhr);\r\n            }\r\n\r\n            if (data.status === 'error') {\r\n                dfd.reject(data.message || GENERIC_ERROR_MESSAGE, data, textStatus, jqXhr);\r\n            }\r\n\r\n        }\r\n\r\n\r\n        // setup shorthands for compatibility with $.post\r\n        return dfd;\r\n    }\r\n\r\n\r\n    function iframeEl(uri, params, fromForm) {\r\n        var dfd = $.Deferred();\r\n        var i = getIframe();\r\n        var name = i.attr('name');\r\n\r\n        registerCallback(name, dfd);\r\n\r\n        params = $.extend({}, params, {'_iframe_id': name});\r\n\r\n        // create a form and submit it\r\n        form(uri, params, name, fromForm);\r\n\r\n        var p = dfd.promise();\r\n\r\n        p.abort = function () {\r\n            dfd.reject(\"ABORT\");\r\n        };\r\n\r\n        return p;\r\n    }\r\n\r\n    function registerCallback(name, dfd) {\r\n        if (!('smore' in window)) {\r\n            window.smore = {};\r\n        }\r\n\r\n\r\n        window.smore[name] = function (data) {\r\n            // if there is data, and no status information\r\n            if (!data || data && !data.status) {\r\n                dfd.resolve(data);\r\n            }\r\n\r\n            // if we have status\r\n            if (data.status) {\r\n                if (data.status === 'success') {\r\n                    dfd.resolve(data.result);\r\n                }\r\n\r\n                if (data.status === 'error') {\r\n                    dfd.reject(data.message, data);\r\n                }\r\n            }\r\n        };\r\n\r\n        // always remove the callback from the smore object\r\n        dfd.always(function () {\r\n            delete window.smore[name];\r\n        });\r\n    }\r\n\r\n\r\n    var HIDDEN_CSS = {\r\n        'visibility': 'hidden',\r\n        'width': 1,\r\n        'height': 1,\r\n        'position': 'absolute',\r\n        'left': -10000,\r\n        'top': -10000\r\n    };\r\n\r\n\r\n    var _iframeId = 0;\r\n\r\n    function getIframe() {\r\n\r\n        var name = 'iframe_name_' + (++_iframeId);\r\n\r\n        var iframeEl = $('<iframe/>')\r\n            .css(HIDDEN_CSS)\r\n            .attr('name', name);\r\n\r\n        $(document.body).append(iframeEl);\r\n\r\n\r\n        return iframeEl;\r\n    }\r\n\r\n    /***\r\n     * Store the token\r\n     *\r\n     * @type {String|Function}\r\n     * @private\r\n     */\r\n    var _token = '';\r\n\r\n    /***\r\n     * Gets or sets the token\r\n     * @param {string|Function=} val\r\n     * @return {*}\r\n     */\r\n    function token(val) {\r\n        if (val) {\r\n            _token = val;\r\n        }\r\n\r\n        // If we have a function stored\r\n        if (typeof _token === 'function') {\r\n            return _token();\r\n        }\r\n\r\n        return _token;\r\n    }\r\n\r\n\r\n    function form(uri, params, targetFrame, form) {\r\n        params = $.extend({'_token': token()}, params);\r\n\r\n        if (!form) {\r\n            form = $('<form/>')\r\n                .css(HIDDEN_CSS)\r\n                .appendTo(_body);\r\n        }\r\n\r\n\r\n        form.attr({\r\n            method: 'POST',\r\n            // the target frame\r\n            target: targetFrame,\r\n            // the action uri\r\n            action: uri,\r\n            enctype: 'multipart/form-data'\r\n        });\r\n\r\n        for (var k in params) {\r\n            $('<input/>').attr({\r\n                name: k,\r\n                type: 'hidden'\r\n            })\r\n                .appendTo(form)\r\n                .val(params[k]);\r\n        }\r\n\r\n        form.submit();\r\n    }\r\n\r\n    function callbackForm(uri, params, targetFrame, baseForm, callbackParam) {\r\n        callbackParam = callbackParam || 'cb';\r\n\r\n        var cbName = 'form_cb_name_' + (++_iframeId);\r\n\r\n        var dfd = $.Deferred();\r\n\r\n        registerCallback(cbName, dfd);\r\n\r\n        var base = {};\r\n        base[callbackParam] = cbName;\r\n\r\n        params = $.extend(base, params);\r\n\r\n        form(uri, params, targetFrame, baseForm);\r\n\r\n        return dfd;\r\n    }\r\n\r\n\r\n    return {\r\n        token: token,\r\n        post: post,\r\n        iframe: iframeEl,\r\n        form: form,\r\n        callbackForm: callbackForm\r\n    };\r\n});\r\n", "// Generated by CoffeeScript 1.12.7\nvar extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\ndefine('fire/ui/forms/validators', function(require) {\n  var RequiredValidator, VALIDATORS, Validator, fromField;\n  VALIDATORS = [];\n  Validator = (function() {\n    function Validator(field1) {\n      this.field = field1;\n      null;\n    }\n\n    Validator.prototype.validate = function() {\n      throw 'NotImplemented';\n    };\n\n    return Validator;\n\n  })();\n  RequiredValidator = (function(superClass) {\n    var DEFAULT_REQUIRED_MESSAGE;\n\n    extend(RequiredValidator, superClass);\n\n    DEFAULT_REQUIRED_MESSAGE = 'This field is required';\n\n    function RequiredValidator() {\n      RequiredValidator.__super__.constructor.apply(this, arguments);\n      this.message = this.field.options.required;\n      if (this.message === true) {\n        this.message = DEFAULT_REQUIRED_MESSAGE;\n      }\n    }\n\n    RequiredValidator.prototype.validate = function() {\n      if (this.field.isEmpty()) {\n        return this.message;\n      }\n    };\n\n    RequiredValidator.isFieldMatch = function(field) {\n      return field.options.required;\n    };\n\n    return RequiredValidator;\n\n  })(Validator);\n  VALIDATORS.push(RequiredValidator);\n  fromField = function(fieldView) {\n\n    /*\n    Get a list of validators for the given field\n    \n    We will iterate over all the registered validators and their 'isFieldMatch' static method\n     */\n    var i, len, result, validatorClass;\n    result = [];\n    for (i = 0, len = VALIDATORS.length; i < len; i++) {\n      validatorClass = VALIDATORS[i];\n      if (validatorClass.isFieldMatch(fieldView)) {\n        result.push(new validatorClass(fieldView));\n      }\n    }\n    return result;\n  };\n  return {\n    fromField: fromField\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\nvar extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\ndefine('fire/ui/forms/fieldView', function(require) {\n  var FieldView, validators, vw;\n  vw = require('fire/ui/view');\n  validators = require('./validators');\n  FieldView = (function(superClass) {\n    extend(FieldView, superClass);\n\n    function FieldView() {\n      return FieldView.__super__.constructor.apply(this, arguments);\n    }\n\n    FieldView.prototype.render = function() {\n      this.name = this.options.name || this.el.attr('name');\n      this.id = this.options.id || this.el.attr('id');\n      this.el.attr({\n        'name': this.name,\n        'id': this.id\n      });\n      this.setupInputEvents(this.el);\n      return this.setupValidators();\n    };\n\n    FieldView.prototype.setupInputEvents = function(inputEl) {\n\n      /*\n      Register different input events\n       */\n      inputEl.on('focus', (function(_this) {\n        return function(e) {\n          return _this.onInputFocus(e);\n        };\n      })(this));\n      return inputEl.on('blur', (function(_this) {\n        return function(e) {\n          return _this.onInputBlur(e);\n        };\n      })(this));\n    };\n\n    FieldView.prototype.setupValidators = function() {\n\n      /*\n      Initalize validation classes for the field\n       */\n      return this.validators = validators.fromField(this);\n    };\n\n    FieldView.prototype.onInputFocus = function(e) {\n      return this.addModifier('active');\n    };\n\n    FieldView.prototype.onInputBlur = function(e) {\n      return this.removeModifier('active');\n    };\n\n    FieldView.prototype.onChanged = function() {\n\n      /*\n      An internal event to update the empty modifier and status\n       */\n      if (this.isEmpty()) {\n        this.addModifier('empty');\n      } else {\n        this.removeModifier('empty');\n      }\n      return this.setValid();\n    };\n\n    FieldView.prototype.validateField = function() {\n\n      /*\n      Start the validation of the field\n       */\n      var error;\n      this.setValid();\n      error = this.validate();\n      if (error) {\n        this.setInvalid(error);\n        return false;\n      }\n      return true;\n    };\n\n    FieldView.prototype.validate = function() {\n\n      /*\n      handle the field validation.\n      \n      Returns\n        - nothing if the field is valid\n        - String if the field is invalid, the string will be used as the message\n       */\n      var error, i, len, ref, v;\n      ref = this.validators;\n      for (i = 0, len = ref.length; i < len; i++) {\n        v = ref[i];\n        error = v.validate();\n        if (error) {\n          return error;\n        }\n      }\n    };\n\n    FieldView.prototype.value = function() {\n\n      /*\n      Extract the value from the field\n       */\n      return $.trim(this.el.val());\n    };\n\n    FieldView.prototype.isEmpty = function() {\n\n      /*\n      Is this field empty\n       */\n      return !this.value();\n    };\n\n    FieldView.prototype.errorSpan = function() {\n\n      /*\n      Returns the error span element if available\n      \n      Error element id should be {original-field-id}-error.\n      \n      Returns\n        - jQuery element for the errorSpan\n       */\n      return $(\"#\" + this.id + \"-error\");\n    };\n\n    FieldView.prototype.setInvalid = function(message) {\n\n      /*\n      Show the error label, mark the field as invalid\n      \n      Params:\n        - message   The message to show in the error label\n       */\n      this.addModifier('invalid');\n      this.trigger('invalid', this);\n      return this.errorSpan().show().text(message);\n    };\n\n    FieldView.prototype.setValid = function() {\n\n      /*\n      Mark the field as valid\n       */\n      this.removeModifier('invalid');\n      this.trigger('valid', this);\n      return this.errorSpan().hide();\n    };\n\n    FieldView.prototype.enable = function() {\n\n      /*\n      Enables the field\n       */\n      return this.removeModifier('disabled');\n    };\n\n    FieldView.prototype.disable = function() {\n\n      /*\n      Disables the field\n       */\n      return this.addModifier('disabled');\n    };\n\n    FieldView.prototype.focus = function() {\n\n      /*\n      Sets the focus on the field\n       */\n      return this.el.focus();\n    };\n\n    FieldView.fromEl = function(el) {\n\n      /*\n      Creates a new FieldView instance for the given element\n      \n      FieldView subsclasses needs to register themselves using FieldView.register(selector, subclass)\n      \n      For example, if we want to have a special FieldView for checkboxes, we'll use\n      FieldView.register('input[type=checkbox]', CheckboxFieldView)\n      \n      \n      Params:\n        - el    The element that we're creating a FieldView for\n       */\n      var i, item, len, selectors;\n      el = $(el);\n      selectors = FieldView.selectors;\n      for (i = 0, len = selectors.length; i < len; i++) {\n        item = selectors[i];\n        if (el.is(item.selector)) {\n          return new item.subclass({\n            el: el\n          });\n        }\n      }\n      console.error(\"Can't find FieldView for \", el);\n      throw \"Can't find a FieldView for the field \" + el;\n    };\n\n    FieldView.selectors = [];\n\n    FieldView.register = function(selector, subclass) {\n\n      /*\n       * Registers FieldView subclass to a given selector.\n       * When the FieldView.fromEl(el) static method is called, it will try to match\n       * The field element to the selector. if the selector matches, it will instantiate the subclass\n       *\n       * Params:\n       *   - selector    a selector to test the field with\n       *   - subclass    The subclass of FieldView to instantiate if the selector matches\n       */\n      return FieldView.selectors.push({\n        selector: selector,\n        subclass: subclass\n      });\n    };\n\n    return FieldView;\n\n  })(vw.View);\n  return {\n    FieldView: FieldView\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\nvar extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\ndefine('fire/ui/forms/fields/textFieldView', function(require) {\n  var FIELD_VIEW_SELECTOR, TextFieldView, fv;\n  FIELD_VIEW_SELECTOR = 'input[type=text],input[type=email],input[type=search],input[type=url],input[type=password],select,textarea';\n  fv = require('fire/ui/forms/fieldView');\n  TextFieldView = (function(superClass) {\n    extend(TextFieldView, superClass);\n\n    function TextFieldView() {\n      return TextFieldView.__super__.constructor.apply(this, arguments);\n    }\n\n    TextFieldView.prototype.setupInputEvents = function() {\n      TextFieldView.__super__.setupInputEvents.apply(this, arguments);\n      this.el.on('input keyup', (function(_this) {\n        return function(e) {\n          return _this.onInput(e);\n        };\n      })(this));\n      return this.el.on('paste cut', (function(_this) {\n        return function(e) {\n          return _this.onClipboardTextChanged(e);\n        };\n      })(this));\n    };\n\n    TextFieldView.prototype.onInput = function(e) {\n\n      /*\n      Handle key up events\n      \n      Params:\n        - e    jQuery.Event\n       */\n      return this.onChanged();\n    };\n\n    TextFieldView.prototype.onClipboardTextChanged = function(e) {\n\n      /*\n      Handle cut/paste events\n      \n      Params:\n        - e   jQuery.Event\n       */\n      return this.onChanged();\n    };\n\n    TextFieldView.prototype.disable = function() {\n\n      /*\n      Disable the field\n       */\n      TextFieldView.__super__.disable.apply(this, arguments);\n      return this.el.attr('disabled', true);\n    };\n\n    TextFieldView.prototype.enable = function() {\n\n      /*\n      Enable the field\n       */\n      TextFieldView.__super__.enable.apply(this, arguments);\n      return this.el.removeAttr('disabled');\n    };\n\n    return TextFieldView;\n\n  })(fv.FieldView);\n  fv.FieldView.register(FIELD_VIEW_SELECTOR, TextFieldView);\n  return {\n    TextFieldView: TextFieldView\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\nvar extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\ndefine('fire/ui/forms/fields/checkboxFieldView', function(require) {\n  var CheckboxFieldView, FIELD_VIEW_SELECTOR, fv;\n  FIELD_VIEW_SELECTOR = 'input[type=checkbox]';\n  fv = require('fire/ui/forms/fieldView');\n  CheckboxFieldView = (function(superClass) {\n    extend(CheckboxFieldView, superClass);\n\n    function CheckboxFieldView() {\n      return CheckboxFieldView.__super__.constructor.apply(this, arguments);\n    }\n\n    CheckboxFieldView.prototype.value = function() {\n\n      /*\n      Extract the value from the field\n       */\n      return this.el.is(':checked');\n    };\n\n    return CheckboxFieldView;\n\n  })(fv.FieldView);\n  fv.FieldView.register(FIELD_VIEW_SELECTOR, CheckboxFieldView);\n  return {\n    CheckboxFieldView: CheckboxFieldView\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\nvar extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\ndefine('fire/ui/forms/fields/radioFieldView', function(require) {\n  var FIELD_VIEW_SELECTOR, RadioFieldView, fv;\n  FIELD_VIEW_SELECTOR = 'div.radio-container';\n  fv = require('fire/ui/forms/fieldView');\n  RadioFieldView = (function(superClass) {\n    extend(RadioFieldView, superClass);\n\n    function RadioFieldView() {\n      return RadioFieldView.__super__.constructor.apply(this, arguments);\n    }\n\n    RadioFieldView.prototype.value = function() {\n\n      /*\n      Extract the value from the field\n       */\n      return this.el.find('input:radio:checked').val();\n    };\n\n    RadioFieldView.prototype.setupInputEvents = function() {\n      var radios;\n      RadioFieldView.__super__.setupInputEvents.apply(this, arguments);\n      radios = this.el.find('input:radio');\n      radios.on('focus', (function(_this) {\n        return function(e) {\n          return _this.onInputFocus(e);\n        };\n      })(this));\n      radios.on('blur', (function(_this) {\n        return function(e) {\n          return _this.onInputBlur(e);\n        };\n      })(this));\n      return radios.on('change', (function(_this) {\n        return function(e) {\n          return _this.onChanged();\n        };\n      })(this));\n    };\n\n    return RadioFieldView;\n\n  })(fv.FieldView);\n  fv.FieldView.register(FIELD_VIEW_SELECTOR, RadioFieldView);\n  return {\n    RadioFieldView: RadioFieldView\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\nvar extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\ndefine('fire/ui/forms/fields/hiddenFieldView', function(require) {\n  var FIELD_VIEW_SELECTOR, HiddenFieldView, fv;\n  FIELD_VIEW_SELECTOR = 'input[type=hidden]';\n  fv = require('fire/ui/forms/fieldView');\n  HiddenFieldView = (function(superClass) {\n    extend(HiddenFieldView, superClass);\n\n    function HiddenFieldView() {\n      return HiddenFieldView.__super__.constructor.apply(this, arguments);\n    }\n\n    HiddenFieldView.prototype.setupInputEvents = function() {\n      return HiddenFieldView.__super__.setupInputEvents.apply(this, arguments);\n    };\n\n    HiddenFieldView.prototype.disable = function() {\n\n      /*\n      Disable the field\n       */\n      HiddenFieldView.__super__.disable.apply(this, arguments);\n      return this.el.attr('disabled', true);\n    };\n\n    HiddenFieldView.prototype.enable = function() {\n\n      /*\n      Enable the field\n       */\n      HiddenFieldView.__super__.enable.apply(this, arguments);\n      return this.el.removeAttr('disabled');\n    };\n\n    return HiddenFieldView;\n\n  })(fv.FieldView);\n  fv.FieldView.register(FIELD_VIEW_SELECTOR, HiddenFieldView);\n  return {\n    HiddenFieldView: HiddenFieldView\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\n\n/*\n *  Fields loader\n *  ==============\n *\n *  This module loads the common fields from the fields folder.\n *\n *  Require this file instead of the fieldView file\n */\ndefine('fire/ui/forms/fields', function(require) {\n  var fv;\n  fv = require('./fieldView');\n  require('./fields/textFieldView');\n  require('./fields/checkboxFieldView');\n  require('./fields/radioFieldView');\n  require('./fields/hiddenFieldView');\n  return {\n    FieldView: fv.FieldView\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\nvar extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty,\n  indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\ndefine('fire/ui/forms/formView', function(require) {\n  var ErrorCollection, FormView, arr, fv, mobile, safe, vw;\n  arr = require('fire/util/array');\n  vw = require('fire/ui/view');\n  safe = require('fire/net/safe');\n  fv = require('./fields');\n  mobile = require('fire/util/mobile');\n  FormView = (function(superClass) {\n    var ERROR_BOX_SELECTOR, SUBMIT_BUTTON_SELECTOR;\n\n    extend(FormView, superClass);\n\n    function FormView() {\n      return FormView.__super__.constructor.apply(this, arguments);\n    }\n\n    SUBMIT_BUTTON_SELECTOR = '.submit-button,input[type=submit]';\n\n    ERROR_BOX_SELECTOR = '.error-box';\n\n    FormView.prototype.cssClass = 'form-view';\n\n    FormView.prototype.defaultOptions = {\n      pleaseWaitText: 'Please Wait...',\n      fieldSelector: '.form-field',\n      deliveryMethod: 'ajax',\n      validationErrorMessage: 'Some of the fields are invalid.',\n      deliveryDelay: 300\n    };\n\n    FormView.prototype.render = function() {\n\n      /*\n      Setup all the fields, etc\n       */\n      this.setupFields();\n      this.setupSubmitButton();\n      this.errorBox = this.find(ERROR_BOX_SELECTOR).hide();\n      if (!this.options.action) {\n        return this.options.action = this.el.attr('action');\n      }\n    };\n\n    FormView.prototype.setupFields = function() {\n\n      /*\n      Initialize the fields for the form\n       */\n      var el, j, len, ref, results1;\n      this.fields = [];\n      ref = this.find(this.options.fieldSelector);\n      results1 = [];\n      for (j = 0, len = ref.length; j < len; j++) {\n        el = ref[j];\n        results1.push(this.fields.push(new fv.FieldView.fromEl(el)));\n      }\n      return results1;\n    };\n\n    FormView.prototype.setupSubmitButton = function() {\n\n      /*\n      Setup the submit button text\n       */\n      this.submitButton = this.find(SUBMIT_BUTTON_SELECTOR);\n      if (this.options.submitText) {\n        this.submitButtonText(this.options.submitText);\n      } else {\n        this.options.submitText = $.trim(this.submitButtonText());\n      }\n      return this.submitButton.click((function(_this) {\n        return function(e) {\n          return _this.onSubmitButtonClicked(e);\n        };\n      })(this));\n    };\n\n    FormView.prototype.onSubmitButtonClicked = function(e) {\n\n      /*\n      Handle clicks on the submission button\n       */\n      e.stopPropagation();\n      e.preventDefault();\n      return this.submit();\n    };\n\n    FormView.prototype.submit = function() {\n\n      /*\n      Tries to send the form\n      \n      Returns:\n        true if the form was delivered, false if not\n       */\n      if (this.hasModifier('disabled') || this.hasModifier('submitting')) {\n        return false;\n      }\n      if (this.validateForm()) {\n        this.deliverForm();\n        return true;\n      }\n      return false;\n    };\n\n    FormView.prototype.reset = function() {\n\n      /*\n      Clear the form\n       */\n      this.cleanup();\n      this.hideErrors();\n      return this.el[0].reset();\n    };\n\n    FormView.prototype.deliverForm = function() {\n\n      /*\n      Delivers the form, returns a deferred with completion/failure handling\n       */\n      var p, params, url;\n      this.addModifier('submitting');\n      this.trigger('submitstart', this);\n      this.submitButtonText(this.options.pleaseWaitText);\n      this.disable();\n      params = this.values();\n      url = this.options.action;\n      p = $.Deferred();\n      switch (this.options.deliveryMethod) {\n        case 'ajax':\n          p = safe.post(url, params);\n          break;\n        case 'form':\n          safe.form(url, params);\n          break;\n        case 'iframe':\n          p = safe.iframe(url, params);\n          break;\n        default:\n          throw \"Bad deliveryMethod: \" + this.options.deliveryMethod;\n      }\n      p.done((function(_this) {\n        return function(result) {\n          return _this.onDeliveryCompleted(result);\n        };\n      })(this));\n      p.fail((function(_this) {\n        return function(error, data) {\n          return _this.onDeliveryFailed(error, data);\n        };\n      })(this));\n      return p.promise();\n    };\n\n    FormView.prototype.onDeliveryCompleted = function(result) {\n\n      /*\n      Handles the successful completion of the form\n      \n      Params:\n        - form      The FormView\n        - result    The response from the server\n       */\n      this.result = result;\n      return setTimeout((function(_this) {\n        return function() {\n          _this.trigger('success', _this, result);\n          return _this.cleanup();\n        };\n      })(this), this.options.deliveryDelay);\n    };\n\n    FormView.prototype.onDeliveryFailed = function(error, data) {\n\n      /*\n      Handles a failed submission of the form\n      \n      Params:\n        - error       Error message\n        - data        Error result from the server\n       */\n      this.result = null;\n      return setTimeout((function(_this) {\n        return function() {\n          _this.errors = new ErrorCollection();\n          _this.processServerErrors(error, data, _this.errors);\n          _this.trigger('fail', _this, _this.error);\n          _this.showErrors();\n          return _this.cleanup();\n        };\n      })(this), this.options.deliveryDelay);\n    };\n\n    FormView.prototype.processServerErrors = function(message, data, error_collection) {\n\n      /*\n      Process the server error. return a proper error\n      \n      Params:\n        - message           The error value returned from the server\n        - data              The error data response from the server\n        - error_collection  The error collection. Implementations should append the errors to the collection\n       */\n      return error_collection.add('server_error', message, 'server_error');\n    };\n\n    FormView.prototype.cleanup = function() {\n\n      /*\n      Clean up the form\n       */\n      this.removeModifier('submitting');\n      this.trigger('submitcomplete', this);\n      this.submitButtonText(this.options.submitText);\n      return this.enable();\n    };\n\n    FormView.prototype.submitButtonText = function(text) {\n\n      /*\n      Sets the submit button text\n       */\n      if (this.submitButton.is('input')) {\n        if (text) {\n          return this.submitButton.val(text);\n        }\n        return this.submitButton.val();\n      }\n      if (text) {\n        return this.submitButton.text(text);\n      }\n      return this.submitButton.text();\n    };\n\n    FormView.prototype.values = function() {\n\n      /*\n      Extract the fields and get the values\n       */\n      var f, j, len, ref, values;\n      values = $.extend({}, this.options.extraParams);\n      ref = this.fields;\n      for (j = 0, len = ref.length; j < len; j++) {\n        f = ref[j];\n        values[f.name] = f.value();\n      }\n      return values;\n    };\n\n    FormView.prototype.validateForm = function() {\n\n      /*\n      Validates the fields and call a custom validation method\n      \n      Returns:\n        true if the form is valid, false if not\n       */\n      var field, results;\n      this.errors = new ErrorCollection();\n      this.validate(this.fields, this.errors);\n      results = (function() {\n        var j, len, ref, results1;\n        ref = this.fields;\n        results1 = [];\n        for (j = 0, len = ref.length; j < len; j++) {\n          field = ref[j];\n          results1.push(field.validateField());\n        }\n        return results1;\n      }).call(this);\n      if (indexOf.call(results, false) >= 0) {\n        this.errors.add('validation_error', this.options.validationErrorMessage);\n      }\n      if (this.errors.length) {\n        this.trigger('invalid', this);\n        this.addModifier('invalid');\n        this.showErrors();\n        return false;\n      } else {\n        this.trigger('valid', this);\n        this.removeModifier('invalid');\n        this.hideErrors();\n        return true;\n      }\n    };\n\n    FormView.prototype.validate = function(fields, errorCollecion) {\n\n      /*\n      An extra validation method that can be overriden by implemntations\n      \n      Params\n        - fields            A list of FieldView objects\n        - errorCollection   An ErrorCollection object that can be used to add errors to the form\n       */\n      return null;\n    };\n\n    FormView.prototype.showErrors = function() {\n\n      /*\n      Show the active errors\n       */\n      var e, h, j, len, ref;\n      h = '';\n      ref = this.errors.errors;\n      for (j = 0, len = ref.length; j < len; j++) {\n        e = ref[j];\n        if (e.description) {\n          h += \"<p>\" + e.description + \"</p>\";\n        }\n      }\n      if (h) {\n        return this.errorBox.html(h).show();\n      }\n    };\n\n    FormView.prototype.setError = function(message) {\n\n      /*\n      Override the errors with a custom message, show errors\n      \n      Params:\n        - message   Error message to show\n       */\n      this.errors = new ErrorCollection();\n      this.errors.add('custom', message);\n      return this.showErrors();\n    };\n\n    FormView.prototype.hideErrors = function() {\n\n      /*\n      Hide the errors\n       */\n      return this.errorBox.hide();\n    };\n\n    FormView.prototype.disable = function() {\n\n      /*\n      Disable the form.\n      \n      This method will:\n      - Add the `disabled` modifier to the form\n      - Call the `disable` method for all of the fields\n      - Add the `is-disabled` class to the submit button\n       */\n      var f, j, len, ref;\n      this.addModifier('disabled');\n      ref = this.fields;\n      for (j = 0, len = ref.length; j < len; j++) {\n        f = ref[j];\n        f.disable();\n      }\n      return this.submitButton.addClass('is-disabled');\n    };\n\n    FormView.prototype.enable = function() {\n\n      /*\n      Enables the form\n      \n      This method will:\n      - Remove the `disabled` modifier from the form\n      - Call the `enable` method for all of the fields\n      - Remove the `is-disabled` class from the submit button\n       */\n      var f, j, len, ref;\n      this.removeModifier('disabled');\n      ref = this.fields;\n      for (j = 0, len = ref.length; j < len; j++) {\n        f = ref[j];\n        f.enable();\n      }\n      return this.submitButton.removeClass('is-disabled');\n    };\n\n    FormView.prototype.field = function(fieldName) {\n\n      /*\n      Gets an instance of a field by name\n       */\n      return this.fields.filter(function(i) {\n        return i.name === fieldName;\n      })[0];\n    };\n\n    FormView.prototype.focus = function(fieldName) {\n      var ref, ref1;\n      if (fieldName == null) {\n        fieldName = null;\n      }\n\n      /*\n      Focus the form.\n      \n      If a field name is given, the form will try to focus on that field\n      If not - the form will focus on the first element\n      \n      Params:\n        - fieldName       (Optional) The field name to try and focus on\n       */\n      if (mobile.isPhone()) {\n        return;\n      }\n      if (fieldName) {\n        return (ref = this.field(fieldName)) != null ? ref.focus() : void 0;\n      } else {\n        return (ref1 = this.fields[0]) != null ? ref1.focus() : void 0;\n      }\n    };\n\n    return FormView;\n\n  })(vw.View);\n  ErrorCollection = (function() {\n    function ErrorCollection() {\n      this.clear();\n    }\n\n    ErrorCollection.prototype.add = function(name, description, type) {\n      if (type == null) {\n        type = null;\n      }\n      this.errors.push({\n        name: name,\n        description: description,\n        type: type\n      });\n      return this.length += 1;\n    };\n\n    ErrorCollection.prototype.clear = function() {\n      this.errors = [];\n      return this.length = 0;\n    };\n\n    return ErrorCollection;\n\n  })();\n  return {\n    FormView: FormView\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\nvar extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\ndefine('smore/ui/login/signupFormView', function(require) {\n  var SignupFormView, fv;\n  fv = require('fire/ui/forms/formView');\n  SignupFormView = (function(superClass) {\n    extend(SignupFormView, superClass);\n\n    function SignupFormView() {\n      SignupFormView.__super__.constructor.apply(this, arguments);\n      this.options.validationErrorMessage = '';\n    }\n\n    SignupFormView.prototype.processServerErrors = function(errorMessage, errorData, errorCollection) {\n\n      /*\n      Process the server error. return a proper error\n      \n      Params:\n        - errorMessage       The error value returned from the server\n        - errorData          The error data, as returned from the server\n        - errorCollection    The error collection. Implementations should append the errors to the collection\n       */\n      var field, firstProblem, i, len, p, problem, problems, ref;\n      switch (errorMessage) {\n        case 'invalid':\n          problems = errorData.code;\n          firstProblem = '';\n          for (i = 0, len = problems.length; i < len; i++) {\n            p = problems[i];\n            field = p[0], problem = p[1];\n            if ((ref = this.field(field)) != null) {\n              ref.setInvalid(problem);\n            }\n            firstProblem = firstProblem || problem;\n          }\n          return errorCollection.add('invalid', false);\n        case 'tryfacebook':\n          return errorCollection.add('tryfacebook', 'Try logging in with your Facebook account.');\n        case 'trygoogle':\n          return errorCollection.add('trygoogle', 'Try logging in with your Google account.');\n        case 'tryemail':\n          return errorCollection.add('tryemail', 'Try logging in with your email.');\n        case 'user exists':\n          return errorCollection.add('user exists', 'We already have a user with that email. Try logging in instead.', 'field_error', {\n            target: 'email'\n          });\n        default:\n          return errorCollection.add('unkown', 'Something is broken. Try again later :(');\n      }\n    };\n\n    return SignupFormView;\n\n  })(fv.FormView);\n  return {\n    SignupFormView: SignupFormView\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\nvar extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\ndefine('smore/ui/login/loginFormView', function(require) {\n  var LoginFormView, fv;\n  fv = require('fire/ui/forms/formView');\n  LoginFormView = (function(superClass) {\n    extend(LoginFormView, superClass);\n\n    function LoginFormView() {\n      LoginFormView.__super__.constructor.apply(this, arguments);\n      this.options.validationErrorMessage = '';\n    }\n\n    LoginFormView.prototype.processServerErrors = function(errorMessage, errorData, errorCollection) {\n\n      /*\n      Process the server error. return a proper error\n      \n      Params:\n        - errorMessage       The error value returned from the server\n        - errorData          The error data, as returned from the server\n        - errorCollection    The error collection. Implementations should append the errors to the collection\n       */\n      switch (errorMessage) {\n        case 'tryfacebook':\n          return errorCollection.add('tryfacebook', 'Try logging in with your Facebook account.');\n        case 'trygoogle':\n          return errorCollection.add('tryfacebook', 'Try logging in with your Google account.');\n        case 'invaliduser':\n          return errorCollection.add('invaliduser', 'Please enter your email', 'field_error', {\n            target: 'email'\n          });\n        case 'nouser':\n          return errorCollection.add('nouser', 'Wrong email or password', 'field_error', {\n            target: 'email'\n          });\n        case 'tryemail':\n          return errorCollection.add('tryemail', 'Try logging in with your email.');\n        case 'badpassword':\n          return errorCollection.add('badpassword', 'Wrong email or password', 'field_error', {\n            target: 'email'\n          });\n        default:\n          return errorCollection.add('unkown', 'Something is broken. Try again later :(');\n      }\n    };\n\n    return LoginFormView;\n\n  })(fv.FormView);\n  return {\n    LoginFormView: LoginFormView\n  };\n});\n", "define('fire/util/strings', function(require) {\r\n\r\n    var _proto = String.prototype;\r\n\r\n    /****\r\n     * Simple string format\r\n     *\r\n     * format('molsh {0}', 'dolsh')\r\n     * => 'molsh dolsh'\r\n     *\r\n     * @param {String} string\r\n     * @param {...string} varArgs\r\n     * @returns {string}\r\n     */\r\n    function format(string, varArgs) {\r\n        var s = arguments[0];\r\n        for (var i = 0; i < arguments.length - 1; i++) {\r\n            var reg = new RegExp(\"\\\\{\" + i + \"\\\\}\", \"gm\");\r\n            s = s.replace(reg, arguments[i + 1]);\r\n        }\r\n\r\n        return s;\r\n    }\r\n\r\n    // shortcut\r\n    _proto.format = format;\r\n\r\n    return {\r\n        format: format\r\n    };\r\n});", "define('fire/net/popup', function (require) {\r\n    var str = require('fire/util/strings');\r\n\r\n    var NO_DATA_CODE = 'NO_DATA';\r\n    var POPUP_CLOSED = 'POPUP_CLOSED';\r\n\r\n    /*****\r\n     * Opens a popup to the given url with the given width/height.\r\n     *\r\n     * Returns a deferred object that will be resolved with the value returned from the popup.\r\n     *\r\n     * This method generates a callback inside the window object and cleans up afterwards.\r\n     * The generated callback name is than sent with the url, so the popup will use it to resolve the call\r\n     *\r\n     * The deferred will be rejected if:\r\n     *  - The server returned an error\r\n     *  - The popup was closed before it was resolved\r\n     *\r\n     *\r\n     * The results from the server should be in the form:\r\n     *\r\n     * Success:\r\n     *  {status: 'success', result: <result data>}\r\n     *\r\n     * Error:\r\n     *  {status: 'error', message: <error message or code>}\r\n     *\r\n     *\r\n     * @param {String} url              the url for the popup\r\n     * @param {Number} width            popup width\r\n     * @param {Number} height           popup height\r\n     * @param {String=} callbackParam   an optional callback param. defaults to 'cb'\r\n     *\r\n     * @returns {jQuery.Deferred}\r\n     */\r\n    function popup(url, width, height, callbackParam) {\r\n        if (!url) {\r\n            throw \"Url must be defined!\";\r\n        }\r\n\r\n        // setup defaults\r\n        callbackParam = callbackParam || 'cb';\r\n\r\n        // create a new deferred\r\n        var dfd = $.Deferred();\r\n\r\n        // setup callback name\r\n        var cbName = '__pop_cb_' + (++_callbackId);\r\n\r\n\r\n        // an inner function to handle the result\r\n        function handleResult(data) {\r\n            // do nothing if we already handled it\r\n            if (dfd.state() !== 'pending') {\r\n                return;\r\n            }\r\n\r\n            // if there is no data or data is from an unexpected type\r\n            if (!data || typeof data !== 'object') {\r\n                // reject it\r\n                dfd.reject('NO_DATA');\r\n            }\r\n\r\n            // Switch by status code\r\n            switch (data.status) {\r\n                case 'success':\r\n                    dfd.resolve(data.result);\r\n                    break;\r\n                case 'error':\r\n                    dfd.reject(data.message);\r\n                    break;\r\n                default:\r\n                    dfd.reject(NO_DATA_CODE);\r\n            }\r\n\r\n            // cleanup\r\n            delete window[cbName];\r\n        }\r\n\r\n        // store the\r\n        window[cbName] = handleResult;\r\n\r\n        // setup the url\r\n        var popUrl = setupUrl(url, callbackParam, cbName);\r\n\r\n        //console.debug(\"Opening popup\", popUrl);\r\n\r\n        // open the popup\r\n        var popRef = openPopup(popUrl, width, height, function () {\r\n            handleResult({status: 'error', message: POPUP_CLOSED});\r\n        });\r\n\r\n        // return a read only promise\r\n        var promise = dfd.promise();\r\n\r\n        // add an abort method\r\n        promise.abort = function () {\r\n            tryAbort(popRef, dfd);\r\n        };\r\n\r\n        return promise;\r\n    }\r\n\r\n\r\n    /***\r\n     * We store the callback id\r\n     * @type {Number}\r\n     * @private\r\n     */\r\n    var _callbackId = 0;\r\n\r\n\r\n    /****\r\n     * Generate a url with the callback name and param\r\n     * @param {String} url\r\n     * @param {String} callbackParam\r\n     * @param {String} cbName\r\n     *\r\n     * @returns {String} the url with the callback\r\n     */\r\n    function setupUrl(url, callbackParam, cbName) {\r\n\r\n        var cb = callbackParam + '=' + cbName;\r\n\r\n        // Support for placeholder\r\n        if (url.indexOf('%{cb}') !== -1) {\r\n            return url.replace('%{cb}', cb);\r\n        }\r\n\r\n\r\n        // do we have a ? inside the url?\r\n        if (url.indexOf('?') === -1) {\r\n            // not? just add the cb with a ?\r\n            return url + '?' + cb;\r\n        } else {\r\n            return url + '&' + cb;\r\n        }\r\n    }\r\n\r\n    /***\r\n     * Opens the popup, fires the closeCb function when it is closed\r\n     *\r\n     * @param {String} url\r\n     * @param {Number} width\r\n     * @param {Number} height\r\n     * @param {Function} closeCb\r\n     * @param {String} frameName\r\n     */\r\n    function openPopup(url, width, height, closeCb, frameName) {\r\n        var popup = window.open(url, frameName || '', popupSettings(width, height));\r\n\r\n        // create an interval that test the popup\r\n        var interval = setInterval(function () {\r\n            // die if it's still open\r\n            if (popup && !popup.closed) {\r\n                return;\r\n            }\r\n            // else:\r\n\r\n            // stop interval\r\n            clearInterval(interval);\r\n\r\n            // call the closeCb:\r\n            closeCb();\r\n        }, 20);\r\n\r\n        return popup;\r\n    }\r\n\r\n    /***\r\n     * Tries to abort the given popup\r\n     * @param popRef\r\n     * @param {jQuery.Deferred} dfd\r\n     */\r\n    function tryAbort(popRef, dfd) {\r\n        // if the popup is already resolved, exit\r\n        if (dfd.state() !== 'pending') {\r\n            return;\r\n        }\r\n\r\n        // try to close the popup\r\n        try {\r\n            popRef.close();\r\n        } catch (e) {\r\n            // no-op\r\n        }\r\n    }\r\n\r\n    /***\r\n     *\r\n     * @param width\r\n     * @param height\r\n     * @returns {String} a string that represent popup settings\r\n     */\r\n    function popupSettings(width, height) {\r\n        return str.format('width={0},height={1},location=no,status=no', width, height);\r\n    }\r\n\r\n\r\n    return {\r\n        open: popup,\r\n        openPopup: openPopup\r\n    };\r\n});", "// Generated by CoffeeScript 1.12.7\nvar extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\ndefine('smore/ui/login/facebookConnectView', function(require) {\n  var FacebookConnectView, popup, vw;\n  vw = require('fire/ui/view');\n  popup = require('fire/net/popup');\n  FacebookConnectView = (function(superClass) {\n    var POPUP_SIZE;\n\n    extend(FacebookConnectView, superClass);\n\n    function FacebookConnectView() {\n      return FacebookConnectView.__super__.constructor.apply(this, arguments);\n    }\n\n    POPUP_SIZE = {\n      width: 600,\n      height: 450\n    };\n\n    FacebookConnectView.prototype.cssClass = 'facebook-connect-button';\n\n    FacebookConnectView.prototype.events = {\n      'click': 'onConnectClicked'\n    };\n\n    FacebookConnectView.prototype.defaultOptions = {\n      pleaseWaitText: 'Please wait...',\n      connectUrl: '/app/users/connect'\n    };\n\n    FacebookConnectView.prototype.render = function() {\n\n      /*\n       */\n      this.textSpan = this.find('.text-content');\n      if (this.options.text) {\n        return this.textSpan.text(this.options.text);\n      } else {\n        return this.options.text = $.trim(this.textSpan.text());\n      }\n    };\n\n    FacebookConnectView.prototype.onConnectClicked = function(e) {\n\n      /*\n      Hanldes clicks on the button element\n       */\n      if (this.hasModifier('disabled') || this.hasModifier('connecting')) {\n        return;\n      }\n      this.addModifier('connecting');\n      this.trigger('connectstart', this);\n      this.disable();\n      this.textSpan.text(this.options.pleaseWaitText);\n      this.popup = popup.open(this.generateUrl(), POPUP_SIZE.width, POPUP_SIZE.height);\n      this.popup.done((function(_this) {\n        return function(r) {\n          return _this.onPopupComplete(r);\n        };\n      })(this));\n      return this.popup.fail((function(_this) {\n        return function(r) {\n          return _this.onPopupFailed(r);\n        };\n      })(this));\n    };\n\n    FacebookConnectView.prototype.generateUrl = function() {\n\n      /*\n      Generate url for the connect popup\n      \n      We're composing the url from three parts\n        - options.connectUrl\n        - options.buttonId\n        - options.connectParams\n       */\n      var params, query, url;\n      params = $.extend({}, this.options.connectParams);\n      if (this.options.buttonId) {\n        params['signup_button'] = this.options.buttonId;\n      }\n      if (this.options.signupSegment) {\n        params['segment'] = this.options.signupSegment;\n      }\n      query = $.param(params);\n      url = this.options.connectUrl;\n      if (url.indexOf('?') > 0) {\n        url += '&';\n      } else {\n        url += '?';\n      }\n      return url + query;\n    };\n\n    FacebookConnectView.prototype.onPopupComplete = function(result) {\n\n      /*\n      When the popup action is completed\n       */\n      var connectType;\n      if (result.is_new) {\n        connectType = 'signup';\n      } else {\n        connectType = 'login';\n      }\n      this.trigger('success', this, connectType, result);\n      this.trigger(connectType, this, result);\n      return this.cleanup();\n    };\n\n    FacebookConnectView.prototype.onPopupFailed = function(message) {\n\n      /*\n      When the popup action has failed\n       */\n      switch (message) {\n        case 'POPUP_CLOSED':\n        case 'fb_cancel':\n          this.trigger('cancel', this);\n          break;\n        default:\n          this.trigger('fail', this, message);\n      }\n      return this.cleanup();\n    };\n\n    FacebookConnectView.prototype.cleanup = function() {\n\n      /*\n      Clean up after successful/failed connection.\n      We need to enable buttons and remove connecting modifier\n       */\n      this.textSpan.text(this.options.text);\n      this.removeModifier('connecting');\n      this.trigger('connectcomplete', this);\n      this.enable();\n      return this.popup.abort();\n    };\n\n    FacebookConnectView.prototype.enable = function() {\n\n      /*\n      Enables the button\n       */\n      return this.removeModifier('disabled');\n    };\n\n    FacebookConnectView.prototype.disable = function() {\n\n      /*\n      Disables the button\n       */\n      return this.addModifier('disabled');\n    };\n\n    FacebookConnectView.prototype.beforeRemove = function() {\n\n      /*\n      Before remove, cleanup some resources, abort the popup etc\n       */\n      var ref;\n      return (ref = this.popup) != null ? ref.abort() : void 0;\n    };\n\n    return FacebookConnectView;\n\n  })(vw.View);\n  return {\n    FacebookConnectView: FacebookConnectView\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\nvar extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\ndefine('smore/ui/login/googleConnectView', function(require) {\n  var GoogleConnectView, vw;\n  vw = require('fire/ui/view');\n  GoogleConnectView = (function(superClass) {\n    extend(GoogleConnectView, superClass);\n\n    function GoogleConnectView(options) {\n      GoogleConnectView.__super__.constructor.call(this, options);\n      this.setupGoogleConnect();\n    }\n\n    GoogleConnectView.prototype.cssClass = 'google-connect-button';\n\n    GoogleConnectView.prototype.events = {\n      'click': 'onConnectClicked'\n    };\n\n    GoogleConnectView.prototype.defaultOptions = {\n      pleaseWaitText: 'Please wait...',\n      connectUrl: '/app/users/google_connect'\n    };\n\n    GoogleConnectView.prototype.render = function() {\n      this.textSpan = this.find('.text-content');\n      if (this.options.text) {\n        return this.textSpan.text(this.options.text);\n      } else {\n        return this.options.text = $.trim(this.textSpan.text());\n      }\n    };\n\n    GoogleConnectView.prototype.setupGoogleConnect = function() {\n      return gapi.load('auth2', (function(_this) {\n        return function() {\n          var error;\n          try {\n            return gapi.auth2.init({\n              client_id: window.__google_connect_client_id,\n              cookiepolicy: 'single_host_origin'\n            });\n          } catch (error1) {\n            error = error1;\n            return console.log(error);\n          }\n        };\n      })(this));\n    };\n\n    GoogleConnectView.prototype.onConnectClicked = function(e) {\n      if (this.hasModifier('disabled') || this.hasModifier('connecting')) {\n        return;\n      }\n      this.addModifier('connecting');\n      this.trigger('connectstart', this);\n      this.disable();\n      this.textSpan.text(this.options.pleaseWaitText);\n      return gapi.auth2.getAuthInstance().signIn().then((function(_this) {\n        return function(r) {\n          return _this.onGoogleConnectSuccess(r);\n        };\n      })(this), (function(_this) {\n        return function(r) {\n          return _this.onGoogleConnectError(r.error);\n        };\n      })(this));\n    };\n\n    GoogleConnectView.prototype.onServerSignupWithGoogle = function(data) {\n      var connectType, result;\n      if (data.status !== 'success') {\n        return this.onGoogleConnectError(data.message);\n      }\n      result = data.result;\n      if (result.is_new) {\n        connectType = 'signup';\n      } else {\n        connectType = 'login';\n      }\n      this.trigger('success', this, connectType, result);\n      this.trigger(connectType, this, result);\n      return this.cleanup();\n    };\n\n    GoogleConnectView.prototype.onGoogleConnectSuccess = function(googleUser) {\n      var params;\n      params = {\n        'idtoken': googleUser.getAuthResponse().id_token\n      };\n      if (this.options.buttonId) {\n        params['signup_button'] = this.options.buttonId;\n      }\n      if (this.options.signupSegment) {\n        params['segment'] = this.options.signupSegment;\n      }\n      return $.post('/app/users/google_login', params).done((function(_this) {\n        return function(r) {\n          return _this.onServerSignupWithGoogle(r);\n        };\n      })(this)).fail((function(_this) {\n        return function(r) {\n          return _this.onGoogleConnectError(r);\n        };\n      })(this));\n    };\n\n    GoogleConnectView.prototype.onGoogleConnectError = function(error) {\n      switch (error) {\n        case 'popup_closed_by_user':\n          this.trigger('cancel', this);\n          break;\n        default:\n          this.trigger('fail', this, error);\n      }\n      return this.cleanup();\n    };\n\n    GoogleConnectView.prototype.cleanup = function() {\n\n      /*\n      Clean up after successful/failed connection.\n      We need to enable buttons and remove connecting modifier\n       */\n      this.textSpan.text(this.options.text);\n      this.removeModifier('connecting');\n      this.trigger('connectcomplete', this);\n      return this.enable();\n    };\n\n    GoogleConnectView.prototype.enable = function() {\n\n      /*\n      Enables the button\n       */\n      return this.removeModifier('disabled');\n    };\n\n    GoogleConnectView.prototype.disable = function() {\n\n      /*\n      Disables the button\n       */\n      return this.addModifier('disabled');\n    };\n\n    return GoogleConnectView;\n\n  })(vw.View);\n  return {\n    GoogleConnectView: GoogleConnectView\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\n\n/*\n * Report module\n * =============\n *\n * This is the new version of smore.report\n *\n * Reports events to mixpanel/google analytics\n *\n * Public Methods\n * --------------\n * - event(name, props={},unique=false}        Sends an event to mixpanel. returns a deferred object when the event\n *                                           has been sent successfully\n * - ab()                                    Returns a dict with the results of the current active a/b tests\n *\n */\ndefine('smore/util/report', function(require) {\n  var MIXPANEL_TIMEOUT, _uniqueEvents, getAbTestValues, track;\n  MIXPANEL_TIMEOUT = 300;\n  _uniqueEvents = {};\n  track = function(name, props, unique) {\n    var analytics, dfd, key;\n    if (props == null) {\n      props = {};\n    }\n    if (unique == null) {\n      unique = false;\n    }\n\n    /*\n    \n    Report an event to segment.io\n    \n    Params:\n      - name      Event name\n      - props     Optional properties to sedn with the event\n      - unique    Only send once for the given name and props\n    \n    Returns:\n        A deferred object, that will be resolve on success or rejected after MIXPANEL_TIMEOUT ms\n     */\n    analytics = window.analytics;\n    if (!name || !analytics.track) {\n      DEVMODE && console.error(\"analytics is not loaded or event name wasn't provided!\");\n      return;\n    }\n    props = $.extend(getAbTestValues(), props);\n    if (unique && window.JSON) {\n      key = name + \"-\" + (JSON.stringify(props));\n      if (key in _uniqueEvents) {\n        return;\n      }\n      _uniqueEvents[key] = true;\n    }\n    dfd = $.Deferred();\n    DEVMODE && console.log(\"%cevent:\", 'color:green', name, props, unique);\n    analytics.track(name, props, dfd.resolve);\n    setTimeout(dfd.reject, MIXPANEL_TIMEOUT);\n    return dfd.promise();\n  };\n  getAbTestValues = function() {\n\n    /*\n    Extract the a/b test values from the meta tags\n    \n    Returns:\n      A dict from the ab test key to the value\n     */\n    var el, els, i, key, len, values;\n    values = {};\n    els = $('.smore-ab-test-meta');\n    for (i = 0, len = els.length; i < len; i++) {\n      el = els[i];\n      key = el.getAttribute('key');\n      if (key) {\n        values[\"ab_test_\" + key] = el.getAttribute('content');\n      }\n    }\n    return values;\n  };\n  return {\n    track: track,\n    ab: getAbTestValues\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\nvar extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\ndefine('smore/ui/login/modal', function(require) {\n  var CONTENT_ENDPOINT, DEFAULT_AFTER_SUCCESS_URL, LoginModalView, MODAL_OPTIONS, autoLogin, fbv, googleConnectView, isLoggedIn, lfv, mv, report, sfv, show;\n  mv = require('fire/ui/views/ModalView');\n  sfv = require('./signupFormView');\n  lfv = require('./loginFormView');\n  fbv = require('./facebookConnectView');\n  googleConnectView = require('./googleConnectView');\n  report = require('smore/util/report');\n  CONTENT_ENDPOINT = '/app/users/login_modal';\n  if (DEVMODE) {\n    CONTENT_ENDPOINT += '?_t=' + Number(new Date());\n  }\n  MODAL_OPTIONS = {\n    cssClass: 'base-modal login-modal',\n    width: 406,\n    overlayClose: true,\n    overlayClass: 'login-modal-overlay'\n  };\n  DEFAULT_AFTER_SUCCESS_URL = '/app';\n  LoginModalView = (function(superClass) {\n    var EVENTS;\n\n    extend(LoginModalView, superClass);\n\n    EVENTS = {\n      login_modal_open: 'LOGIN MODAL: Open'\n    };\n\n\n    /*\n      LoginModalViews\n    \n      @extends {ModalView}\n      @class\n     */\n\n    LoginModalView.prototype.preload = true;\n\n    LoginModalView.prototype.enableHistory = true;\n\n    LoginModalView.prototype.events = {\n      'click .switch-state': 'onSwitchStateClicked'\n    };\n\n    LoginModalView.prototype.defaultOptions = {\n      state: 'signup'\n    };\n\n    function LoginModalView(options) {\n\n      /*\n      \n       @param {String} state Starts the modal in a specifc state. state can be 'login' or 'signup'\n       */\n      LoginModalView.__super__.constructor.call(this, CONTENT_ENDPOINT, options);\n      this.state = this.options.state;\n    }\n\n    LoginModalView.prototype.render = function() {\n\n      /*\n        Initialize sub-views, like signup,login and facbook connect\n       */\n      var buttonId, segment, signupParams;\n      buttonId = this.options.buttonId;\n      signupParams = {\n        'signup_button': buttonId\n      };\n      segment = this._signupSegment();\n      if (segment) {\n        signupParams['segment'] = segment;\n      }\n      this.loginForm = new lfv.LoginFormView({\n        el: this.find('.login-form')\n      });\n      this.loginForm.on('success', (function(_this) {\n        return function(f, result) {\n          return _this.onSuccess('login', result);\n        };\n      })(this));\n      this.signupForm = new sfv.SignupFormView({\n        el: this.find('.signup-form'),\n        extraParams: signupParams\n      });\n      this.signupForm.on('success', (function(_this) {\n        return function(f, result) {\n          return _this.onSuccess('signup', result);\n        };\n      })(this));\n      this.signupGoogleConnect = new googleConnectView.GoogleConnectView({\n        el: this.find('.only-signup .google-connect-button'),\n        buttonId: buttonId,\n        signupSegment: segment\n      });\n      this.signupGoogleConnect.on('success', (function(_this) {\n        return function(f, type, result) {\n          return _this.onSuccess(type, result);\n        };\n      })(this)).on('fail', (function(_this) {\n        return function(fbc, msg) {\n          return _this.onSignupFailed(msg);\n        };\n      })(this));\n      this.loginGoogleConnect = new googleConnectView.GoogleConnectView({\n        el: this.find('.only-login .google-connect-button'),\n        buttonId: buttonId,\n        signupSegment: segment\n      });\n      this.loginGoogleConnect.on('success', (function(_this) {\n        return function(f, type, result) {\n          return _this.onSuccess(type, result);\n        };\n      })(this)).on('fail', (function(_this) {\n        return function(fbc, msg) {\n          return _this.onLoginFailed(msg);\n        };\n      })(this));\n      this.signupfbConnect = new fbv.FacebookConnectView({\n        el: this.find('.only-signup .facebook-connect-button'),\n        buttonId: buttonId,\n        signupSegment: segment\n      });\n      this.signupfbConnect.on('success', (function(_this) {\n        return function(f, type, result) {\n          return _this.onSuccess(type, result);\n        };\n      })(this)).on('fail', (function(_this) {\n        return function(fbc, msg) {\n          return _this.onSignupFailed(msg);\n        };\n      })(this));\n      this.loginfbConnect = new fbv.FacebookConnectView({\n        el: this.find('.only-login .facebook-connect-button'),\n        buttonId: buttonId,\n        signupSegment: segment\n      });\n      this.loginfbConnect.on('success', (function(_this) {\n        return function(f, type, result) {\n          return _this.onSuccess(type, result);\n        };\n      })(this)).on('fail', (function(_this) {\n        return function(fbc, msg) {\n          return _this.onLoginFailed(msg);\n        };\n      })(this));\n      this.setState(this.state);\n      this.setupDisableState(this.loginForm, this.loginfbConnect, this.loginGoogleConnect);\n      return this.setupDisableState(this.signupForm, this.signupfbConnect, this.signupGoogleConnect);\n    };\n\n    LoginModalView.prototype._signupSegment = function() {\n\n      /*\n      Get the the segment information from the meta tag \"smore:signup_segemnt\"\n       */\n      return $('meta[name=\"smore:signup_segment\"]').attr('value');\n    };\n\n    LoginModalView.prototype.setupDisableState = function(form, fbConnect, googleConnect) {\n\n      /*\n      Setup events to disable/enable the form when the fb-connect button is connecting.\n      Same thing goes the other way around: disable/enable fb-connect button when the form is being proccessed\n       */\n      form.on('submitstart', (function(_this) {\n        return function(f) {\n          fbConnect.disable();\n          googleConnect.disable();\n          return _this.addModifier('pending', true);\n        };\n      })(this));\n      form.on('submitcomplete', (function(_this) {\n        return function(f) {\n          fbConnect.enable();\n          googleConnect.enable();\n          return _this.removeModifier('pending');\n        };\n      })(this));\n      fbConnect.on('connectstart', (function(_this) {\n        return function(f) {\n          form.disable();\n          googleConnect.disable();\n          return _this.addModifier('pending', true);\n        };\n      })(this));\n      fbConnect.on('connectcomplete', (function(_this) {\n        return function(f) {\n          form.enable();\n          googleConnect.enable();\n          return _this.removeModifier('pending');\n        };\n      })(this));\n      googleConnect.on('connectstart', (function(_this) {\n        return function(f) {\n          form.disable();\n          fbConnect.disable();\n          return _this.addModifier('pending', true);\n        };\n      })(this));\n      return googleConnect.on('connectcomplete', (function(_this) {\n        return function(f) {\n          form.enable();\n          fbConnect.enable();\n          return _this.removeModifier('pending');\n        };\n      })(this));\n    };\n\n    LoginModalView.prototype.setState = function(state) {\n\n      /*\n      Switch between states for the modal\n      \n      State can be 'login' or 'signup'\n       */\n      this.removeModifier(this.state);\n      this.addModifier(state);\n      this.state = state;\n      if (state === 'login') {\n        return this.loginForm.focus();\n      } else {\n        return this.signupForm.focus();\n      }\n    };\n\n    LoginModalView.prototype.onSwitchStateClicked = function(e) {\n\n      /*\n      When someone clicks on the switch state label\n       */\n      var state;\n      state = $(e.currentTarget).data('target');\n      if (state) {\n        return this.setState(state);\n      }\n    };\n\n    LoginModalView.prototype.show = function() {\n      LoginModalView.__super__.show.call(this, MODAL_OPTIONS);\n      if (window.ga) {\n        return ga(\"send\", \"pageview\", \"/app/users/signup_modal\");\n      }\n    };\n\n    LoginModalView.prototype.onSuccess = function(type, result) {\n\n      /*\n      Login/Signup was successfully completed\n      \n      Params:\n        - type    login if we had a successful login, signup if we had a successful signup\n        - result  The result dictionary from the server\n       */\n      var r;\n      if (this.closed) {\n        return;\n      }\n      if (this.options.onSuccess) {\n        return this.options.onSuccess(this, type, result);\n      }\n      $('body').hide();\n      if (this.options.reloadOnly) {\n        return document.location.reload();\n      } else {\n        r = result.redirect_url || DEFAULT_AFTER_SUCCESS_URL;\n        if (r === 'app/reporting/report_errors') {\n          r = '/app';\n        }\n        return document.location = r;\n      }\n    };\n\n    LoginModalView.prototype.onLoginFailed = function(msg) {\n      return this.handleFailure(msg, this.loginForm);\n    };\n\n    LoginModalView.prototype.onSignupFailed = function(msg) {\n      return this.handleFailure(msg, this.signupForm);\n    };\n\n    LoginModalView.prototype.handleFailure = function(msg, form) {\n      var error;\n      error = \"Something is broken. Try again later: (\";\n      if (msg === 'tryemail') {\n        error = 'Try logging in with your email';\n      }\n      if (msg === 'trygoogle') {\n        error = 'Try logging in with your Google account';\n      }\n      if (msg === 'tryfacebook') {\n        error = 'Try logging in with your Facebook account';\n      }\n      return form.setError(error);\n    };\n\n    LoginModalView.prototype.onClose = function() {\n      LoginModalView.__super__.onClose.apply(this, arguments);\n      this.signupfbConnect.remove();\n      return this.loginfbConnect.remove();\n    };\n\n    return LoginModalView;\n\n  })(mv.ModalView);\n  show = function(el, options) {\n    var m, opts;\n    if (options == null) {\n      options = {};\n    }\n\n    /*\n    Show the login modal in case of\n    \n    Params:\n      - el        jQuery   The button element\n      - options            Optional options to add\n     */\n    opts = $.extend({}, el.data(), options);\n    m = new LoginModalView(opts);\n    m.show();\n    return m;\n  };\n  isLoggedIn = function() {\n\n    /*\n    Test if the user has a login cookie\n     */\n    var m;\n    m = document.cookie.match(/_L=\"?([A-Za-z0-9\\+\\/\\\\]*)\"?/);\n    return m && m.length >= 2;\n  };\n  autoLogin = function() {\n    $('.auto-quick-login').on('click', function(e) {\n      var t;\n      e.preventDefault();\n      t = $(e.currentTarget);\n      return show(t);\n    });\n    return mv.ModalView.preloadUrl(CONTENT_ENDPOINT);\n  };\n  $(autoLogin);\n  return {\n    LoginModalView: LoginModalView,\n    show: show,\n    isLoggedIn: isLoggedIn\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\nvar extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\ndefine('marketing/flat/sections/sliderView', function(require) {\n  var SliderView, vw;\n  vw = require('fire/ui/view');\n  SliderView = (function(superClass) {\n\n    /*\n      SliderView\n     */\n    var ACTIVE_CLASS;\n\n    extend(SliderView, superClass);\n\n    function SliderView() {\n      return SliderView.__super__.constructor.apply(this, arguments);\n    }\n\n    ACTIVE_CLASS = 'slider-active';\n\n    SliderView.prototype.render = function() {\n      this._items = this.find(\".slider-item\");\n      return this.go(0);\n    };\n\n    SliderView.prototype.go = function(idx) {\n      var item;\n      item = this._items[idx];\n      if (!item) {\n        DEVMODE && console.error(\"Can't find slider item with index: \" + idx);\n        return;\n      }\n      return $(item).addClass(ACTIVE_CLASS).siblings().removeClass(ACTIVE_CLASS);\n    };\n\n    SliderView.prototype.next = function() {\n      var curIdx, newIdx;\n      curIdx = this._items.filter(\".\" + ACTIVE_CLASS).index();\n      newIdx = (curIdx + 1) % this._items.length;\n      return this.go(newIdx);\n    };\n\n    SliderView.prototype.prev = function() {\n      var curIdx, newIdx;\n      curIdx = this._items.filter(\".\" + ACTIVE_CLASS).index();\n      if (curIdx === 0) {\n        newIdx = this._items.length - 1;\n      } else {\n        newIdx = curIdx - 1;\n      }\n      return this.go(newIdx);\n    };\n\n    return SliderView;\n\n  })(vw.View);\n  return {\n    SliderView: SliderView\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\nvar extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\ndefine('marketing/flat/sections/header', function(require) {\n  var HeaderSectionView, sv, vw;\n  vw = require('fire/ui/view');\n  sv = require('./sliderView');\n  HeaderSectionView = (function(superClass) {\n\n    /*\n    Header Section view\n     */\n    var SLIDER_ROTATE_INTERVAL;\n\n    extend(HeaderSectionView, superClass);\n\n    function HeaderSectionView() {\n      return HeaderSectionView.__super__.constructor.apply(this, arguments);\n    }\n\n    SLIDER_ROTATE_INTERVAL = 4000;\n\n    HeaderSectionView.prototype.render = function() {\n\n      /*\n      Connect all the events etc\n       */\n      var els, s;\n      els = this.find('.flyers .frame');\n      if (els.length) {\n        s = new sv.SliderView({\n          el: this.find('.flyers .frame')\n        });\n        return setInterval((function() {\n          return s.next();\n        }), SLIDER_ROTATE_INTERVAL);\n      }\n    };\n\n    return HeaderSectionView;\n\n  })(vw.View);\n  return {\n    HeaderSectionView: HeaderSectionView\n  };\n});\n", "// Generated by CoffeeScript 1.6.2\r\n/*\r\njQuery Waypoints - v2.0.2\r\nCopyright (c) 2011-2013 Caleb Troughton\r\nDual licensed under the MIT license and GPL license.\r\nhttps://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt\r\n*/\r\n(function(){var t=[].indexOf||function(t){for(var e=0,n=this.length;e<n;e++){if(e in this&&this[e]===t)return e}return-1},e=[].slice;(function(t,e){if(typeof define===\"function\"&&define.amd){return define(\"waypoints\",[\"jquery\"],function(n){return e(n,t)})}else{return e(t.jQuery,t)}})(this,function(n,r){var i,o,l,s,f,u,a,c,h,d,p,y,v,w,g,m;i=n(r);c=t.call(r,\"ontouchstart\")>=0;s={horizontal:{},vertical:{}};f=1;a={};u=\"waypoints-context-id\";p=\"resize.waypoints\";y=\"scroll.waypoints\";v=1;w=\"waypoints-waypoint-ids\";g=\"waypoint\";m=\"waypoints\";o=function(){function t(t){var e=this;this.$element=t;this.element=t[0];this.didResize=false;this.didScroll=false;this.id=\"context\"+f++;this.oldScroll={x:t.scrollLeft(),y:t.scrollTop()};this.waypoints={horizontal:{},vertical:{}};t.data(u,this.id);a[this.id]=this;t.bind(y,function(){var t;if(!(e.didScroll||c)){e.didScroll=true;t=function(){e.doScroll();return e.didScroll=false};return r.setTimeout(t,n[m].settings.scrollThrottle)}});t.bind(p,function(){var t;if(!e.didResize){e.didResize=true;t=function(){n[m](\"refresh\");return e.didResize=false};return r.setTimeout(t,n[m].settings.resizeThrottle)}})}t.prototype.doScroll=function(){var t,e=this;t={horizontal:{newScroll:this.$element.scrollLeft(),oldScroll:this.oldScroll.x,forward:\"right\",backward:\"left\"},vertical:{newScroll:this.$element.scrollTop(),oldScroll:this.oldScroll.y,forward:\"down\",backward:\"up\"}};if(c&&(!t.vertical.oldScroll||!t.vertical.newScroll)){n[m](\"refresh\")}n.each(t,function(t,r){var i,o,l;l=[];o=r.newScroll>r.oldScroll;i=o?r.forward:r.backward;n.each(e.waypoints[t],function(t,e){var n,i;if(r.oldScroll<(n=e.offset)&&n<=r.newScroll){return l.push(e)}else if(r.newScroll<(i=e.offset)&&i<=r.oldScroll){return l.push(e)}});l.sort(function(t,e){return t.offset-e.offset});if(!o){l.reverse()}return n.each(l,function(t,e){if(e.options.continuous||t===l.length-1){return e.trigger([i])}})});return this.oldScroll={x:t.horizontal.newScroll,y:t.vertical.newScroll}};t.prototype.refresh=function(){var t,e,r,i=this;r=n.isWindow(this.element);e=this.$element.offset();this.doScroll();t={horizontal:{contextOffset:r?0:e.left,contextScroll:r?0:this.oldScroll.x,contextDimension:this.$element.width(),oldScroll:this.oldScroll.x,forward:\"right\",backward:\"left\",offsetProp:\"left\"},vertical:{contextOffset:r?0:e.top,contextScroll:r?0:this.oldScroll.y,contextDimension:r?n[m](\"viewportHeight\"):this.$element.height(),oldScroll:this.oldScroll.y,forward:\"down\",backward:\"up\",offsetProp:\"top\"}};return n.each(t,function(t,e){return n.each(i.waypoints[t],function(t,r){var i,o,l,s,f;i=r.options.offset;l=r.offset;o=n.isWindow(r.element)?0:r.$element.offset()[e.offsetProp];if(n.isFunction(i)){i=i.apply(r.element)}else if(typeof i===\"string\"){i=parseFloat(i);if(r.options.offset.indexOf(\"%\")>-1){i=Math.ceil(e.contextDimension*i/100)}}r.offset=o-e.contextOffset+e.contextScroll-i;if(r.options.onlyOnScroll&&l!=null||!r.enabled){return}if(l!==null&&l<(s=e.oldScroll)&&s<=r.offset){return r.trigger([e.backward])}else if(l!==null&&l>(f=e.oldScroll)&&f>=r.offset){return r.trigger([e.forward])}else if(l===null&&e.oldScroll>=r.offset){return r.trigger([e.forward])}})})};t.prototype.checkEmpty=function(){if(n.isEmptyObject(this.waypoints.horizontal)&&n.isEmptyObject(this.waypoints.vertical)){this.$element.unbind([p,y].join(\" \"));return delete a[this.id]}};return t}();l=function(){function t(t,e,r){var i,o;r=n.extend({},n.fn[g].defaults,r);if(r.offset===\"bottom-in-view\"){r.offset=function(){var t;t=n[m](\"viewportHeight\");if(!n.isWindow(e.element)){t=e.$element.height()}return t-n(this).outerHeight()}}this.$element=t;this.element=t[0];this.axis=r.horizontal?\"horizontal\":\"vertical\";this.callback=r.handler;this.context=e;this.enabled=r.enabled;this.id=\"waypoints\"+v++;this.offset=null;this.options=r;e.waypoints[this.axis][this.id]=this;s[this.axis][this.id]=this;i=(o=t.data(w))!=null?o:[];i.push(this.id);t.data(w,i)}t.prototype.trigger=function(t){if(!this.enabled){return}if(this.callback!=null){this.callback.apply(this.element,t)}if(this.options.triggerOnce){return this.destroy()}};t.prototype.disable=function(){return this.enabled=false};t.prototype.enable=function(){this.context.refresh();return this.enabled=true};t.prototype.destroy=function(){delete s[this.axis][this.id];delete this.context.waypoints[this.axis][this.id];return this.context.checkEmpty()};t.getWaypointsByElement=function(t){var e,r;r=n(t).data(w);if(!r){return[]}e=n.extend({},s.horizontal,s.vertical);return n.map(r,function(t){return e[t]})};return t}();d={init:function(t,e){var r;if(e==null){e={}}if((r=e.handler)==null){e.handler=t}this.each(function(){var t,r,i,s;t=n(this);i=(s=e.context)!=null?s:n.fn[g].defaults.context;if(!n.isWindow(i)){i=t.closest(i)}i=n(i);r=a[i.data(u)];if(!r){r=new o(i)}return new l(t,r,e)});n[m](\"refresh\");return this},disable:function(){return d._invoke(this,\"disable\")},enable:function(){return d._invoke(this,\"enable\")},destroy:function(){return d._invoke(this,\"destroy\")},prev:function(t,e){return d._traverse.call(this,t,e,function(t,e,n){if(e>0){return t.push(n[e-1])}})},next:function(t,e){return d._traverse.call(this,t,e,function(t,e,n){if(e<n.length-1){return t.push(n[e+1])}})},_traverse:function(t,e,i){var o,l;if(t==null){t=\"vertical\"}if(e==null){e=r}l=h.aggregate(e);o=[];this.each(function(){var e;e=n.inArray(this,l[t]);return i(o,e,l[t])});return this.pushStack(o)},_invoke:function(t,e){t.each(function(){var t;t=l.getWaypointsByElement(this);return n.each(t,function(t,n){n[e]();return true})});return this}};n.fn[g]=function(){var t,r;r=arguments[0],t=2<=arguments.length?e.call(arguments,1):[];if(d[r]){return d[r].apply(this,t)}else if(n.isFunction(r)){return d.init.apply(this,arguments)}else if(n.isPlainObject(r)){return d.init.apply(this,[null,r])}else if(!r){return n.error(\"jQuery Waypoints needs a callback function or handler option.\")}else{return n.error(\"The \"+r+\" method does not exist in jQuery Waypoints.\")}};n.fn[g].defaults={context:r,continuous:true,enabled:true,horizontal:false,offset:0,triggerOnce:false};h={refresh:function(){return n.each(a,function(t,e){return e.refresh()})},viewportHeight:function(){var t;return(t=r.innerHeight)!=null?t:i.height()},aggregate:function(t){var e,r,i;e=s;if(t){e=(i=a[n(t).data(u)])!=null?i.waypoints:void 0}if(!e){return[]}r={horizontal:[],vertical:[]};n.each(r,function(t,i){n.each(e[t],function(t,e){return i.push(e)});i.sort(function(t,e){return t.offset-e.offset});r[t]=n.map(i,function(t){return t.element});return r[t]=n.unique(r[t])});return r},above:function(t){if(t==null){t=r}return h._filter(t,\"vertical\",function(t,e){return e.offset<=t.oldScroll.y})},below:function(t){if(t==null){t=r}return h._filter(t,\"vertical\",function(t,e){return e.offset>t.oldScroll.y})},left:function(t){if(t==null){t=r}return h._filter(t,\"horizontal\",function(t,e){return e.offset<=t.oldScroll.x})},right:function(t){if(t==null){t=r}return h._filter(t,\"horizontal\",function(t,e){return e.offset>t.oldScroll.x})},enable:function(){return h._invoke(\"enable\")},disable:function(){return h._invoke(\"disable\")},destroy:function(){return h._invoke(\"destroy\")},extendFn:function(t,e){return d[t]=e},_invoke:function(t){var e;e=n.extend({},s.vertical,s.horizontal);return n.each(e,function(e,n){n[t]();return true})},_filter:function(t,e,r){var i,o;i=a[n(t).data(u)];if(!i){return[]}o=[];n.each(i.waypoints[e],function(t,e){if(r(i,e)){return o.push(e)}});o.sort(function(t,e){return t.offset-e.offset});return n.map(o,function(t){return t.element})}};n[m]=function(){var t,n;n=arguments[0],t=2<=arguments.length?e.call(arguments,1):[];if(h[n]){return h[n].apply(null,t)}else{return h.aggregate.call(null,n)}};n[m].settings={resizeThrottle:100,scrollThrottle:30};return i.load(function(){return n[m](\"refresh\")})})}).call(this);\r\n\r\n\r\ndefine('lib/waypoints', function(){return $.waypoints})", "// Generated by CoffeeScript 1.12.7\n\n/*\n  ScrollWatcher\n  ==================\n\n  This module provides a utility class for monitoring the scrolled-into-view-state of a given element\n\n  Events                Params                      Description\n  ------\n  `scrollin`            this                        Fired when the element is scrolled into view\n  `scrollout`           this                        Fired when the element is scrolled out of view\n\n\n  Availiable option keys\n  ----------------------\n\n  `startOffset`         The offset of the element height to trigger the scrollin/scrollout when the bottom of the viewport has\n                        been scrolled past it (Defaults to 100% - the bottom of the element)\n  `endOffset`           The offset of the element height to trigger the scrollin/scrollout when the top of the viewport has\n                        been scrolled past it (Defaults to 100% - the bottom of the element)\n\n\n\n  Usage\n  -----\n\n  s = new ScrollWatcher(el)\n  s.on('scrollin', onScrolledIn)\n  s.on('scrollout', onScrolledOut)\n\non:\n  BOS-start-down\n  TOS-start-up\n\noff:\n  TOS-end-down\n  BOS-start-up\n\n  TODO:\n  - fix documentation\n  shlomiatar @ 31/07/13\n */\nvar extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\ndefine('fire/ui/scrollWatcher', function(require) {\n  var DEFAULT_OPTIONS, ScrollWatcher, em, waypoints;\n  em = require('fire/util/eventEmitter');\n  waypoints = require('lib/waypoints');\n  DEFAULT_OPTIONS = {\n    startOffset: 0,\n    endOffset: 1\n  };\n  ScrollWatcher = (function(superClass) {\n    extend(ScrollWatcher, superClass);\n\n    function ScrollWatcher(el, options) {\n      if (options == null) {\n        options = DEFAULT_OPTIONS;\n      }\n      ScrollWatcher.__super__.constructor.apply(this, arguments);\n      this.el = $(el);\n      this._current = null;\n      this._setupBreakpoint({\n        side: 'bos',\n        scroll: 'in',\n        dir: 'down',\n        point: options.startOffset\n      });\n      this._setupBreakpoint({\n        side: 'tos',\n        scroll: 'in',\n        dir: 'up',\n        point: options.startOffset\n      });\n      this._setupBreakpoint({\n        side: 'tos',\n        scroll: 'out',\n        dir: 'down',\n        point: options.endOffset\n      });\n      this._setupBreakpoint({\n        side: 'bos',\n        scroll: 'out',\n        dir: 'up',\n        point: options.startOffset\n      });\n      this._testInView(options);\n    }\n\n    ScrollWatcher.prototype._testInView = function(options) {\n      var elementHeight, elementOffset, scrollTop, viewportHeight, visibleFromBottom, visibleFromTop;\n      viewportHeight = $.waypoints('viewportHeight');\n      elementHeight = this.el.outerHeight();\n      elementOffset = this.el.offset();\n      scrollTop = $('body').scrollTop();\n      visibleFromTop = viewportHeight - ((elementOffset.top - scrollTop) + elementHeight) > 0;\n      visibleFromBottom = scrollTop < (elementOffset.top + elementHeight);\n      if (visibleFromBottom && visibleFromTop) {\n        return this.inView = true;\n      }\n    };\n\n    ScrollWatcher.prototype._setupBreakpoint = function(opts) {\n      var dir, offsetFunc, point, scroll, side, t;\n      side = opts.side, point = opts.point, scroll = opts.scroll, dir = opts.dir;\n      t = (function(_this) {\n        return function(d) {\n          if (d === dir && _this._current !== scroll) {\n            _this._current = scroll;\n            return _this.trigger(\"scroll\" + scroll, _this);\n          }\n        };\n      })(this);\n      offsetFunc = function() {\n\n        /*\n        The offset function calculates the correct breakpoint for the scroll.\n        \n        It returns the number of pixel from the top of the viewport to trigger the event\n         */\n        var elOffset, h, vp;\n        h = $(this).outerHeight();\n        elOffset = h * point;\n        if (side === 'tos') {\n          return -elOffset;\n        } else {\n          vp = $.waypoints('viewportHeight');\n          return vp - elOffset;\n        }\n      };\n      return this.el.waypoint(t, {\n        offset: offsetFunc\n      });\n    };\n\n    return ScrollWatcher;\n\n  })(em.Emitter);\n  return {\n    ScrollWatcher: ScrollWatcher\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\nvar extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\ndefine('marketing/flat/sections/ambientVideoView', function(require) {\n  var AmbientVideoView, mobile, sw, vw;\n  vw = require('fire/ui/view');\n  sw = require('fire/ui/scrollWatcher');\n  mobile = require('fire/util/mobile');\n  AmbientVideoView = (function(superClass) {\n    extend(AmbientVideoView, superClass);\n\n    function AmbientVideoView() {\n      return AmbientVideoView.__super__.constructor.apply(this, arguments);\n    }\n\n\n    /*\n      Ambient video views\n     */\n\n    AmbientVideoView.prototype.events = {\n      'click .pause': '_onPauseClicked',\n      'click .play': '_onPlayClicked',\n      'click .replay': '_onReplayClicked'\n    };\n\n    AmbientVideoView.prototype.render = function() {\n\n      /*\n        Setup events\n       */\n      this._video = this.find('video');\n      this._video[0].loop = false;\n      if (!$.isFunction(this._video[0].play)) {\n        this._noVideo = true;\n        this._video.hide();\n        this.find('.poster').attr('style', 'display:block;!important');\n      }\n      if (mobile.isTablet()) {\n        this._video.prop('controls', true);\n        this.setState('tablet-manual-playing');\n        return;\n      }\n      this._video.on('ended', (function(_this) {\n        return function() {\n          return _this._onVideoEnded();\n        };\n      })(this));\n      this.setState('waiting');\n      this._sw = new sw.ScrollWatcher(this.el, {\n        startOffset: 0.5,\n        endOffset: 1\n      });\n      this._sw.on('scrollin', (function(_this) {\n        return function() {\n          return _this._onVideoScrollIn();\n        };\n      })(this));\n      this._sw.on('scrollout', (function(_this) {\n        return function() {\n          return _this._onVideoScrollOut();\n        };\n      })(this));\n      if (this._sw.inView) {\n        return this._onVideoScrollIn();\n      }\n    };\n\n    AmbientVideoView.prototype.setState = function(state) {\n\n      /*\n      Sets the state and activate the right modifier\n       */\n      if (this._state) {\n        this.removeModifier(this._state);\n      }\n      this.addModifier(state);\n      return this._state = state;\n    };\n\n    AmbientVideoView.prototype._playVideo = function() {\n\n      /*\n      Play the internal video\n       */\n      if (this._noVideo) {\n        return;\n      }\n      return this._video[0].play();\n    };\n\n    AmbientVideoView.prototype._pauseVideo = function() {\n\n      /*\n      Pause the internal video\n       */\n      if (this._noVideo) {\n        return;\n      }\n      return this._video[0].pause();\n    };\n\n    AmbientVideoView.prototype._rewindVideo = function() {\n\n      /*\n      Rewind the internal video\n       */\n      return this._video[0].currentTime = 0;\n    };\n\n    AmbientVideoView.prototype._onVideoEnded = function() {\n\n      /*\n      When the video is finished\n       */\n      return this.setState('completed');\n    };\n\n    AmbientVideoView.prototype._onPauseClicked = function(e) {\n\n      /*\n      Pause the video, sets the right state\n       */\n      this._pauseVideo();\n      return this.setState('paused');\n    };\n\n    AmbientVideoView.prototype._onPlayClicked = function(e) {\n\n      /*\n      Play the video, set it on manual mode\n       */\n      this._playVideo();\n      return this.setState('manual-playing');\n    };\n\n    AmbientVideoView.prototype._onReplayClicked = function(e) {\n\n      /*\n      Replay the video, set it on manual mode\n       */\n      this._rewindVideo();\n      this._playVideo();\n      return this.setState('manual-playing');\n    };\n\n    AmbientVideoView.prototype._onVideoScrollIn = function() {\n\n      /*\n      When the video is scrolled into view\n       */\n      if (this._state === 'waiting' && this._video.is(':visible')) {\n        this.setState('playing');\n        return this._playVideo();\n      }\n    };\n\n    AmbientVideoView.prototype._onVideoScrollOut = function() {\n\n      /*\n      When the video is scrolled out of the view\n       */\n      if (this._state === 'playing') {\n        this.setState('waiting');\n        this._pauseVideo();\n        return this._rewindVideo();\n      }\n    };\n\n    return AmbientVideoView;\n\n  })(vw.View);\n  return {\n    AmbientVideoView: AmbientVideoView\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\nvar extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\ndefine('marketing/flat/sections/editor', function(require) {\n  var EditorSectionView, avv, mobile, vw;\n  vw = require('fire/ui/view');\n  mobile = require('fire/util/mobile');\n  avv = require('./ambientVideoView');\n  EditorSectionView = (function(superClass) {\n    extend(EditorSectionView, superClass);\n\n    function EditorSectionView() {\n      return EditorSectionView.__super__.constructor.apply(this, arguments);\n    }\n\n\n    /*\n    Editor Section view\n     */\n\n    EditorSectionView.prototype.render = function() {\n\n      /*\n      Connect all the events etc\n       */\n      var vid;\n      if (mobile.isPhone()) {\n        return;\n      }\n      return vid = new avv.AmbientVideoView({\n        el: this.find('.frame')\n      });\n    };\n\n    return EditorSectionView;\n\n  })(vw.View);\n  return {\n    EditorSectionView: EditorSectionView\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\nvar extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\ndefine('marketing/flat/sections/promotion', function(require) {\n  var AnimationBar, CounterItem, PromotionSectionView, array, mobile, vw;\n  vw = require('fire/ui/view');\n  mobile = require('fire/util/mobile');\n  array = require('fire/util/array');\n  PromotionSectionView = (function(superClass) {\n\n    /*\n    Promotion Section view\n     */\n    var RANDOM_ANIMATION_MAX_SECONDS;\n\n    extend(PromotionSectionView, superClass);\n\n    function PromotionSectionView() {\n      return PromotionSectionView.__super__.constructor.apply(this, arguments);\n    }\n\n    RANDOM_ANIMATION_MAX_SECONDS = 4;\n\n    PromotionSectionView.prototype.events = {\n      'click .traffic-sources .title-bar': 'onSourceTitlebarClicked'\n    };\n\n    PromotionSectionView.prototype.render = function() {\n\n      /*\n      Connect all the events etc\n       */\n      var el, j, len1, ref, source;\n      if (mobile.isPhone()) {\n        return;\n      }\n      this._animationBars = {};\n      this._sources = [];\n      ref = this.find('.source');\n      for (j = 0, len1 = ref.length; j < len1; j++) {\n        el = ref[j];\n        el = $(el);\n        source = el.data('source');\n        this._animationBars[source] = new AnimationBar(el);\n        this._sources.push(source);\n      }\n      this._counter = new CounterItem(this.find('.view-counter'));\n      return this.randomAnimation();\n    };\n\n    PromotionSectionView.prototype.onSourceTitlebarClicked = function(e) {\n\n      /*\n      Handle clicks on the source title bar click\n       */\n      var source, titleBar;\n      titleBar = $(e.currentTarget);\n      source = titleBar.parent('.source');\n      this.animate(source.data('source'));\n      if (source.hasClass('extended')) {\n        return;\n      }\n      return source.addClass('extended').siblings().removeClass('extended');\n    };\n\n    PromotionSectionView.prototype.animate = function(source, cb) {\n      var bar;\n      if (cb == null) {\n        cb = false;\n      }\n\n      /*\n      Animates a source bar\n      \n      Params:\n        - source    The name of the source to animate\n        - cb        (Optional) callback to invoke on completion\n       */\n      bar = this._animationBars[source];\n      if (!bar) {\n        return;\n      }\n      return bar.animate((function(_this) {\n        return function() {\n          _this._counter.incr();\n          if (cb) {\n            return cb();\n          }\n        };\n      })(this));\n    };\n\n    PromotionSectionView.prototype.randomAnimation = function() {\n\n      /*\n      Picks a random number of seconds and invoke an animtaion on one of the sources\n       */\n      var source;\n      source = this._sources.random();\n      return this.animate(source, (function(_this) {\n        return function() {\n\n          /*\n          Randomize a number of seconds to wait until the next random animation\n           */\n          var s;\n          s = Math.round(Math.random() * RANDOM_ANIMATION_MAX_SECONDS);\n          return setTimeout((function() {\n            return _this.randomAnimation();\n          }), s * 1000);\n        };\n      })(this));\n    };\n\n    return PromotionSectionView;\n\n  })(vw.View);\n  AnimationBar = (function() {\n\n    /*\n    Animation bullet bar\n     */\n    var ANIMATION_FADE_DELAY, ANIMATION_START_DELAY;\n\n    ANIMATION_START_DELAY = 300;\n\n    ANIMATION_FADE_DELAY = 200;\n\n    function AnimationBar(el) {\n\n      /*\n      Setup the animation inside the given element\n       */\n      this.ul = $('<ul><li/><li/><li/><li/><li/></ul>').addClass('source-animation no-mobile').prependTo(el);\n      this.lis = this.ul.children();\n    }\n\n    AnimationBar.prototype.animate = function(completed) {\n\n      /*\n      Handle animation\n      \n      Params:\n        - completed     A callback to call when the animation was completed\n       */\n      var i, j, len, lis, ref, results;\n      lis = this.lis;\n      len = lis.length;\n      results = [];\n      for (i = j = ref = len; ref <= 0 ? j <= 0 : j >= 0; i = ref <= 0 ? ++j : --j) {\n        results.push((function(i) {\n          var el;\n          el = $(lis[i]);\n          return setTimeout(function() {\n            el.addClass('beep');\n            return setTimeout(function() {\n              el.removeClass('beep');\n              if (i === 0) {\n                return completed();\n              }\n            }, ANIMATION_FADE_DELAY);\n          }, ANIMATION_START_DELAY * (len - i));\n        })(i));\n      }\n      return results;\n    };\n\n    return AnimationBar;\n\n  })();\n  CounterItem = (function() {\n\n    /*\n    Handles counter animation\n     */\n    function CounterItem(el1) {\n      this.el = el1;\n      this._viewsSpan = this.el.find('.views');\n      this._views = Number(this._viewsSpan.text());\n    }\n\n    CounterItem.prototype.incr = function() {\n      this._views += 1;\n      this._viewsSpan.text(this._views);\n      return this.highlight();\n    };\n\n    CounterItem.prototype.highlight = function() {\n      var el;\n      el = this.el;\n      el.removeClass('animating');\n      el.addClass('highlighted');\n      return setTimeout(function() {\n        el.addClass('animating');\n        return setTimeout(function() {\n          return el.removeClass('highlighted');\n        }, 20);\n      }, 20);\n    };\n\n    return CounterItem;\n\n  })();\n  return {\n    PromotionSectionView: PromotionSectionView\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\nvar extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\ndefine('marketing/flat/sections/analytics', function(require) {\n  var AnalyticsSectionView, vw;\n  vw = require('fire/ui/view');\n  AnalyticsSectionView = (function(superClass) {\n    extend(AnalyticsSectionView, superClass);\n\n    function AnalyticsSectionView() {\n      return AnalyticsSectionView.__super__.constructor.apply(this, arguments);\n    }\n\n\n    /*\n    Analytics Section view\n     */\n\n    AnalyticsSectionView.prototype.events = {\n      'click .forward-arrow': 'onForwardArrowClicked',\n      'click .back-arrow': 'onBackArrowClicked',\n      'click .image-selector li': 'onImageSelectorItemClicked'\n    };\n\n    AnalyticsSectionView.prototype.render = function() {\n\n      /*\n      Connect all the events etc\n       */\n      this.galleryItems = this.find('.image-frame');\n      return this.selectorItems = this.find('.image-selector li');\n    };\n\n    AnalyticsSectionView.prototype.onForwardArrowClicked = function(e) {\n\n      /*\n      Handle forward arrow clicks\n       */\n      e.preventDefault();\n      return this.galleryForward();\n    };\n\n    AnalyticsSectionView.prototype.onBackArrowClicked = function(e) {\n\n      /*\n      Handle backward arrow clicks\n       */\n      e.preventDefault();\n      return this.galleryBack();\n    };\n\n    AnalyticsSectionView.prototype.onImageSelectorItemClicked = function(e) {\n\n      /*\n      Handle image selector clicks\n       */\n      var idx, item;\n      item = $(e.currentTarget);\n      if (item.hasClass('selected')) {\n        return;\n      }\n      idx = item.index();\n      return this.galleryGo(idx);\n    };\n\n    AnalyticsSectionView.prototype.galleryGo = function(idx) {\n\n      /*\n      Show the gallery item from the given index\n      \n      Params:\n        - idx   The index of the gallery item we want to show\n       */\n      var item;\n      item = this.galleryItems[idx];\n      if (!item) {\n        DEVMODE && console.error(\"Can't find gallery item with index: \" + idx);\n        return;\n      }\n      $(item).addClass('selected').siblings().removeClass('selected');\n      return $(this.selectorItems[idx]).addClass('selected').siblings().removeClass('selected');\n    };\n\n    AnalyticsSectionView.prototype.galleryForward = function() {\n\n      /*\n      Move the gallery to the next item\n       */\n      var curIdx, newIdx;\n      curIdx = this.galleryItems.filter('.selected').index();\n      newIdx = (curIdx + 1) % this.galleryItems.length;\n      return this.galleryGo(newIdx);\n    };\n\n    AnalyticsSectionView.prototype.galleryBack = function() {\n\n      /*\n      Move the gallery to the previous item\n       */\n      var curIdx, newIdx;\n      curIdx = this.galleryItems.filter('.selected').index();\n      if (curIdx === 0) {\n        newIdx = this.galleryItems.length - 1;\n      } else {\n        newIdx = curIdx - 1;\n      }\n      return this.galleryGo(newIdx);\n    };\n\n    return AnalyticsSectionView;\n\n  })(vw.View);\n  return {\n    AnalyticsSectionView: AnalyticsSectionView\n  };\n});\n", "// Generated by CoffeeScript 1.12.7\n\n/*\n * The flat landing page endpoint\n * ------------------------------\n *\n * This file is responsible for loading all the required views / scripts for the new landing page\n * And initalizing them as the page is ready\n */\ndefine('marketing/flat/landingpage', function(require) {\n  var hs, init, lm, sa, se, sp;\n  lm = require('smore/ui/login/modal');\n  hs = require('./sections/header');\n  se = require('./sections/editor');\n  sp = require('./sections/promotion');\n  sa = require('./sections/analytics');\n  init = function() {\n\n    /*\n      Initialization code, to be run when the dom is ready\n     */\n    new hs.HeaderSectionView({\n      el: $('.section.header')\n    });\n    new se.EditorSectionView({\n      el: $('.section.editor')\n    });\n    new sp.PromotionSectionView({\n      el: $('.section.promotion')\n    });\n    return new sa.AnalyticsSectionView({\n      el: $('.section.analytics')\n    });\n  };\n  return $(init);\n});\n"], "sources": ["js/_consts.js", "js/lib/require.js", "js/fire/ui/overlay.js", "js/fire/util/mobile.js", "js/fire/ui/modal.js", "js/fire/util/eventEmitter.js", "js/fire/ui/view.js", "js/fire/util/history.js", "js/fire/ui/views/ModalView.js", "js/fire/util/array.js", "js/fire/net/safe.js", "js/fire/ui/forms/validators.js", "js/fire/ui/forms/fieldView.js", "js/fire/ui/forms/fields/textFieldView.js", "js/fire/ui/forms/fields/checkboxFieldView.js", "js/fire/ui/forms/fields/radioFieldView.js", "js/fire/ui/forms/fields/hiddenFieldView.js", "js/fire/ui/forms/fields.js", "js/fire/ui/forms/formView.js", "js/smore/ui/login/signupFormView.js", "js/smore/ui/login/loginFormView.js", "js/fire/util/strings.js", "js/fire/net/popup.js", "js/smore/ui/login/facebookConnectView.js", "js/smore/ui/login/googleConnectView.js", "js/smore/util/report.js", "js/smore/ui/login/modal.js", "js/marketing/flat/sections/sliderView.js", "js/marketing/flat/sections/header.js", "js/lib/waypoints.js", "js/fire/ui/scrollWatcher.js", "js/marketing/flat/sections/ambientVideoView.js", "js/marketing/flat/sections/editor.js", "js/marketing/flat/sections/promotion.js", "js/marketing/flat/sections/analytics.js", "js/marketing/flat/landingpage.js"], "version": 3, "names": ["DEVMODE", "STATIC_URI_PREFIX", "window", "BUILD_TS", "Number", "Date", "win", "log", "debug", "m", "console", "apply", "arguments", "Promise", "resolveValue", "this", "state", "_cbs", "undefined", "resolve", "define", "name", "deps", "moduleDef", "_modules", "_pending", "loadDependencies", "initModuleDef", "createPath", "resolveDependency", "defName", "def", "internalRequire", "requiredName", "moduleRequire", "err", "_isError", "msg", "showError", "error", "completeCallback", "f", "String", "replace", "REQUIRE_REGEXP", "match", "dep", "push", "expandName", "length", "loadModules", "modules", "completedCallback", "loaders", "i", "loadDep", "all", "done", "pend", "p", "doc", "document", "s", "createElement", "type", "src", "BASE_SCRIPT", "async", "onerror", "head", "appendChild", "fc", "body", "firstChild", "insertBefore", "setTimeout", "PENDING_LOAD_TIME", "content", "b", "c", "setAttribute", "innerHTML", "moduleName", "targetName", "indexOf", "path", "substr", "lastIndexOf", "require", "callback", "results", "legacyDefine", "value", "part", "parts", "split", "cur", "shift", "prototype", "result", "items", "onPromiseCompleted", "pending", "pi", "show", "zIndex", "extraClass", "closeOnClick", "remove", "Z_INDEX", "dfd", "$", "Deferred", "el", "addClass", "SHIM_CLS", "_current", "css", "position", "z-index", "top", "left", "overflow", "_win", "on", "_body", "prepend", "click", "e", "promise", "fade", "off", "animate", "opacity", "FADE_DURATION", "when", "hide", "width", "scrollWidth", "height", "scrollHeight", "_doc", "isLandscape", "isMiniLayout", "isMobile", "isPhone", "isPortrait", "isRetina", "isTablet", "mq", "q", "matchMedia", "msMatchMedia", "matches", "showUrl", "url", "options", "showDeferred", "get", "deferred", "r", "getLoading", "_contentWrap", "html", "fail", "getError", "MODAL_CLASS", "reject", "o", "extend", "DEFAULTS", "loadingTitle", "loadingSubtitle", "_options", "close", "_isPhone", "showPhone", "containerEl", "setup", "data", "skipOverlay", "oc", "OVERLAY_CLASS", "overlayClass", "overlay", "overlayClose", "resolveBeforeAnimation", "containerHeight", "containerWidth", "scrollTop", "scrollLeft", "screenWidth", "innerWidth", "screenHeight", "innerHeight", "fixPlaceholders", "modalClass", "dom", "cssClass", "wrap", "parent", "append", "delegate", "onCloseClicked", "margin-top", "ANIMATION_DURATION", "removeClass", "fast", "closePhone", "unlock", "detach", "showBodyItems", "_prePhoneScrollTop", "hideBodyItems", "MOBILE_MODAL_CLASS", "_hiddenBodyItems", "children", "pf", "fn", "placeholderPolyfill", "lock", "_locked", "preventDefault", "stopImmediatePropagation", "t", "currentTarget", "hasClass", "mobile", "isTouch", "module", "fire", "modal", "reposition", "Emitter", "__ev", "_guid", "getGuid", "__findCallbackIdx", "guid", "one", "handler", "self", "idx", "splice", "trigger", "len", "ref", "Array", "slice", "call", "child", "ctor", "constructor", "key", "hasProp", "__super__", "hasOwnProperty", "View", "em", "superClass", "defaultOptions", "_modifiers", "generate", "autoRender", "render", "attrs", "attr", "events", "_extractEvents", "beforeRemove", "removed", "find", "selector", "j", "undelegate", "cls", "h", "selEl", "templateSelector", "_", "eventDict", "extractEvent", "k", "v", "_this", "handlerName", "join", "proxy", "addModifier", "modifier", "allowDomUpdate", "u", "hasModifier", "removeModifier", "modifiers", "HISTORY_ID", "HISTORY_KEY", "StateHelper", "getKey", "hub", "onHistoryPopState", "originalEvent", "id", "current", "history", "pushState", "JSON", "stringify", "title", "location", "href", "pop", "getHelper", "bind", "me", "ModalView", "view", "url1", "onModalCompleted", "enableHistory", "historyHelper", "init", "preload", "getContent", "PRELOAD_CACHE", "modalOptions", "onClose", "always", "setupModalEvents", "closed", "_loadedContent", "_loadContent", "preloadUrl", "normalize", "isArray", "clone", "objectKeys", "obj", "range", "start", "end", "format", "FORMAT_REGXP", "_proto", "POLYFILLS", "input", "removeBy", "lambda", "where", "insert", "item", "origItem", "insertAfter", "contains", "minus", "secondArray", "last", "filter", "arr", "first", "setPush", "random", "Math", "round", "unique", "sum", "func", "flatten", "forEach", "toObject", "array", "val", "propertyIsEnumerable", "elt", "from", "ceil", "floor", "some", "scope", "res", "every", "map", "any", "each", "jQuery", "keys", "post", "uri", "params", "successFunc", "opts", "_token", "token", "success", "ajax", "then", "handleRequest", "handleFailedRequest", "complete", "abort", "setRequestHeader", "getAllResponseHeaders", "getResponseHeader", "jqXhr", "statusText", "GENERIC_ERROR_MESSAGE", "textStatus", "status", "message", "iframeEl", "fromForm", "getIframe", "registerCallback", "_iframe_id", "form", "smore", "_iframeId", "HIDDEN_CSS", "targetFrame", "appendTo", "method", "target", "action", "enctype", "submit", "callbackForm", "baseForm", "callbackParam", "cbName", "base", "visibility", "iframe", "RequiredValidator", "VALIDATORS", "Validator", "fromField", "field1", "field", "validate", "required", "DEFAULT_REQUIRED_MESSAGE", "isEmpty", "isFieldMatch", "fieldView", "validatorClass", "FieldView", "validators", "vw", "setupInputEvents", "setupValidators", "inputEl", "onInputFocus", "onInputBlur", "onChanged", "setValid", "validateField", "setInvalid", "trim", "errorSpan", "text", "enable", "disable", "focus", "fromEl", "selectors", "is", "subclass", "register", "FIELD_VIEW_SELECTOR", "TextFieldView", "fv", "onInput", "onClipboardTextChanged", "removeAttr", "CheckboxFieldView", "RadioFieldView", "radios", "HiddenFieldView", "l", "ErrorCollection", "FormView", "safe", "ERROR_BOX_SELECTOR", "SUBMIT_BUTTON_SELECTOR", "pleaseWaitText", "fieldSelector", "deliveryMethod", "validationErrorMessage", "deliveryDelay", "setupFields", "setupSubmitButton", "errorBox", "results1", "fields", "submitButton", "submitText", "submitButtonText", "onSubmitButtonClicked", "stopPropagation", "validateForm", "deliverForm", "reset", "cleanup", "hideErrors", "values", "onDeliveryCompleted", "onDeliveryFailed", "errors", "processServerErrors", "showErrors", "error_collection", "add", "extraParams", "errorCollecion", "description", "setError", "fieldName", "ref1", "clear", "SignupFormView", "errorMessage", "errorData", "errorCollection", "firstProblem", "problem", "problems", "code", "LoginFormView", "string", "varArgs", "reg", "RegExp", "popup", "handleResult", "NO_DATA_CODE", "_callbackId", "popUrl", "setupUrl", "popRef", "openPopup", "POPUP_CLOSED", "tryAbort", "cb", "closeCb", "frameName", "open", "popupSettings", "interval", "setInterval", "clearInterval", "str", "FacebookConnectView", "POPUP_SIZE", "connectUrl", "textSpan", "onConnectClicked", "generateUrl", "onPopupComplete", "onPopupFailed", "query", "connectParams", "buttonId", "signupSegment", "param", "connectType", "is_new", "GoogleConnectView", "setupGoogleConnect", "gapi", "load", "auth2", "client_id", "__google_connect_client_id", "cookiepolicy", "error1", "getAuthInstance", "signIn", "onGoogleConnectSuccess", "onGoogleConnectError", "onServerSignupWithGoogle", "googleUser", "idtoken", "getAuthResponse", "id_token", "MIXPANEL_TIMEOUT", "_uniqueEvents", "getAbTestValues", "track", "props", "analytics", "els", "getAttribute", "ab", "CONTENT_ENDPOINT", "DEFAULT_AFTER_SUCCESS_URL", "LoginModalView", "MODAL_OPTIONS", "autoLogin", "fbv", "googleConnectView", "isLoggedIn", "lfv", "mv", "report", "sfv", "EVENTS", "login_modal_open", "click .switch-state", "segment", "signupParams", "signup_button", "_signupSegment", "loginForm", "onSuccess", "signupForm", "signupGoogleConnect", "fbc", "onSignupFailed", "loginGoogleConnect", "onLoginFailed", "signupfbConnect", "loginfbConnect", "setState", "setupDisableState", "fbConnect", "googleConnect", "onSwitchStateClicked", "ga", "reloadOnly", "reload", "redirect_url", "handleFailure", "cookie", "SliderView", "ACTIVE_CLASS", "_items", "go", "siblings", "next", "curIdx", "newIdx", "index", "prev", "HeaderSectionView", "sv", "SLIDER_ROTATE_INTERVAL", "n", "amd", "a", "d", "y", "w", "g", "horizontal", "vertical", "$element", "element", "didResize", "didScroll", "oldScroll", "x", "waypoints", "doScroll", "settings", "scrollThrottle", "resizeThrottle", "newScroll", "forward", "backward", "offset", "sort", "reverse", "continuous", "refresh", "isWindow", "contextOffset", "contextScroll", "contextDimension", "offsetProp", "isFunction", "parseFloat", "onlyOnScroll", "enabled", "checkEmpty", "isEmptyObject", "unbind", "defaults", "outerHeight", "axis", "context", "triggerOnce", "destroy", "getWaypointsByElement", "closest", "_invoke", "_traverse", "aggregate", "inArray", "pushStack", "isPlainObject", "viewportHeight", "above", "_filter", "below", "right", "extendFn", "DEFAULT_OPTIONS", "ScrollWatcher", "startOffset", "endOffset", "_setupBreakpoint", "side", "scroll", "dir", "point", "_testInView", "elementHeight", "elementOffset", "visibleFromBottom", "visibleFromTop", "inView", "offsetFunc", "elOffset", "vp", "waypoint", "AmbientVideoView", "sw", "click .pause", "click .play", "click .replay", "_video", "loop", "play", "_noVideo", "prop", "_onVideoEnded", "_sw", "_onVideoScrollIn", "_onVideoScrollOut", "_state", "_playVideo", "_pauseVideo", "pause", "_rewindVideo", "currentTime", "_onPauseClicked", "_onPlayClicked", "_onReplayClicked", "EditorSectionView", "avv", "vid", "AnimationBar", "CounterItem", "PromotionSectionView", "RANDOM_ANIMATION_MAX_SECONDS", "click .traffic-sources .title-bar", "len1", "source", "_animationBars", "_sources", "_counter", "randomAnimation", "onSourceTitlebarClicked", "titleBar", "bar", "incr", "ul", "prependTo", "lis", "ANIMATION_FADE_DELAY", "ANIMATION_START_DELAY", "completed", "el1", "_viewsSpan", "_views", "highlight", "AnalyticsSectionView", "click .forward-arrow", "click .back-arrow", "click .image-selector li", "galleryItems", "selectorItems", "onForwardArrowClicked", "galleryForward", "onBackArrowClicked", "galleryBack", "onImageSelectorItemClicked", "galleryGo", "hs", "lm", "sa", "se", "sp"], "file": "/js/landingpage_flat.02223fda.js"}