pbw 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
 - data/MIT-LICENSE +1 -1
 - data/Rakefile +7 -0
 - data/app/controllers/pbw/application_controller.rb +9 -3
 - data/app/controllers/pbw/areas_controller.rb +7 -0
 - data/app/controllers/pbw/base_models_controller.rb +106 -0
 - data/app/controllers/pbw/capabilities_controller.rb +7 -0
 - data/app/controllers/pbw/constraints_controller.rb +7 -0
 - data/app/controllers/pbw/item_containers_controller.rb +7 -0
 - data/app/controllers/pbw/item_conversions_controller.rb +7 -0
 - data/app/controllers/pbw/item_transfers_controller.rb +7 -0
 - data/app/controllers/pbw/items_controller.rb +7 -0
 - data/app/controllers/pbw/processes_controller.rb +7 -0
 - data/app/controllers/pbw/roles_controller.rb +5 -2
 - data/app/controllers/pbw/tokens_controller.rb +7 -0
 - data/app/controllers/pbw/triggers_controller.rb +7 -0
 - data/app/controllers/pbw/user_tokens_controller.rb +7 -0
 - data/app/models/pbw/area.rb +17 -0
 - data/app/models/pbw/capability.rb +5 -0
 - data/app/models/pbw/constraint.rb +6 -0
 - data/app/models/pbw/item.rb +15 -0
 - data/app/models/pbw/item_container.rb +12 -0
 - data/app/models/pbw/item_conversion.rb +9 -0
 - data/app/models/pbw/item_transfer.rb +9 -0
 - data/app/models/pbw/permission.rb +1 -0
 - data/app/models/pbw/process.rb +10 -0
 - data/app/models/pbw/role.rb +1 -0
 - data/app/models/pbw/rule.rb +11 -0
 - data/app/models/pbw/token.rb +16 -0
 - data/app/models/pbw/trigger.rb +7 -0
 - data/app/models/pbw/user.rb +7 -5
 - data/app/models/pbw/user_token.rb +16 -0
 - data/app/views/layouts/pbw/application.html.erb +41 -8
 - data/config/initializers/devise.rb +80 -4
 - data/config/locales/devise.en.yml +59 -0
 - data/config/routes.rb +11 -0
 - data/lib/generators/pbw/install/install_generator.rb +9 -1
 - data/lib/generators/pbw/install/templates/application.html.erb +47 -0
 - data/lib/pbw/engine.rb +33 -13
 - data/lib/pbw/version.rb +1 -1
 - data/public/Foundation-MIT-LICENSE.txt +20 -0
 - data/public/config.rb +26 -0
 - data/public/humans.txt +8 -0
 - data/public/javascripts/foundation/foundation.alerts.js +52 -0
 - data/public/javascripts/foundation/foundation.clearing.js +516 -0
 - data/public/javascripts/foundation/foundation.cookie.js +74 -0
 - data/public/javascripts/foundation/foundation.dropdown.js +178 -0
 - data/public/javascripts/foundation/foundation.forms.js +525 -0
 - data/public/javascripts/foundation/foundation.interchange.js +271 -0
 - data/public/javascripts/foundation/foundation.joyride.js +844 -0
 - data/public/javascripts/foundation/foundation.js +447 -0
 - data/public/javascripts/foundation/foundation.magellan.js +134 -0
 - data/public/javascripts/foundation/foundation.orbit.js +390 -0
 - data/public/javascripts/foundation/foundation.placeholder.js +179 -0
 - data/public/javascripts/foundation/foundation.reveal.js +330 -0
 - data/public/javascripts/foundation/foundation.section.js +422 -0
 - data/public/javascripts/foundation/foundation.tooltips.js +208 -0
 - data/public/javascripts/foundation/foundation.topbar.js +303 -0
 - data/public/javascripts/vendor/custom.modernizr.js +4 -0
 - data/public/javascripts/vendor/jquery.js +9807 -0
 - data/public/javascripts/vendor/zepto.js +2000 -0
 - data/public/robots.txt +4 -0
 - data/public/sass/_normalize.scss +402 -0
 - data/public/sass/_settings.scss +1271 -0
 - data/public/sass/app.scss +48 -0
 - data/public/stylesheets/app.css +6686 -0
 - metadata +82 -4
 - data/app/assets/javascripts/pbw/application.js +0 -13
 - data/app/assets/stylesheets/pbw/application.css +0 -13
 
| 
         @@ -0,0 +1,2000 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            /* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            ;(function(undefined){
         
     | 
| 
      
 5 
     | 
    
         
            +
              if (String.prototype.trim === undefined) // fix for iOS 3.2
         
     | 
| 
      
 6 
     | 
    
         
            +
                String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g, '') }
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              // For iOS 3.x
         
     | 
| 
      
 9 
     | 
    
         
            +
              // from https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce
         
     | 
| 
      
 10 
     | 
    
         
            +
              if (Array.prototype.reduce === undefined)
         
     | 
| 
      
 11 
     | 
    
         
            +
                Array.prototype.reduce = function(fun){
         
     | 
| 
      
 12 
     | 
    
         
            +
                  if(this === void 0 || this === null) throw new TypeError()
         
     | 
| 
      
 13 
     | 
    
         
            +
                  var t = Object(this), len = t.length >>> 0, k = 0, accumulator
         
     | 
| 
      
 14 
     | 
    
         
            +
                  if(typeof fun != 'function') throw new TypeError()
         
     | 
| 
      
 15 
     | 
    
         
            +
                  if(len == 0 && arguments.length == 1) throw new TypeError()
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  if(arguments.length >= 2)
         
     | 
| 
      
 18 
     | 
    
         
            +
                   accumulator = arguments[1]
         
     | 
| 
      
 19 
     | 
    
         
            +
                  else
         
     | 
| 
      
 20 
     | 
    
         
            +
                    do{
         
     | 
| 
      
 21 
     | 
    
         
            +
                      if(k in t){
         
     | 
| 
      
 22 
     | 
    
         
            +
                        accumulator = t[k++]
         
     | 
| 
      
 23 
     | 
    
         
            +
                        break
         
     | 
| 
      
 24 
     | 
    
         
            +
                      }
         
     | 
| 
      
 25 
     | 
    
         
            +
                      if(++k >= len) throw new TypeError()
         
     | 
| 
      
 26 
     | 
    
         
            +
                    } while (true)
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  while (k < len){
         
     | 
| 
      
 29 
     | 
    
         
            +
                    if(k in t) accumulator = fun.call(undefined, accumulator, t[k], k, t)
         
     | 
| 
      
 30 
     | 
    
         
            +
                    k++
         
     | 
| 
      
 31 
     | 
    
         
            +
                  }
         
     | 
| 
      
 32 
     | 
    
         
            +
                  return accumulator
         
     | 
| 
      
 33 
     | 
    
         
            +
                }
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            })()
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            var Zepto = (function() {
         
     | 
| 
      
 38 
     | 
    
         
            +
              var undefined, key, $, classList, emptyArray = [], slice = emptyArray.slice, filter = emptyArray.filter,
         
     | 
| 
      
 39 
     | 
    
         
            +
                document = window.document,
         
     | 
| 
      
 40 
     | 
    
         
            +
                elementDisplay = {}, classCache = {},
         
     | 
| 
      
 41 
     | 
    
         
            +
                getComputedStyle = document.defaultView.getComputedStyle,
         
     | 
| 
      
 42 
     | 
    
         
            +
                cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1,'opacity': 1, 'z-index': 1, 'zoom': 1 },
         
     | 
| 
      
 43 
     | 
    
         
            +
                fragmentRE = /^\s*<(\w+|!)[^>]*>/,
         
     | 
| 
      
 44 
     | 
    
         
            +
                tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
         
     | 
| 
      
 45 
     | 
    
         
            +
                rootNodeRE = /^(?:body|html)$/i,
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                // special attributes that should be get/set via method calls
         
     | 
| 
      
 48 
     | 
    
         
            +
                methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'],
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                adjacencyOperators = [ 'after', 'prepend', 'before', 'append' ],
         
     | 
| 
      
 51 
     | 
    
         
            +
                table = document.createElement('table'),
         
     | 
| 
      
 52 
     | 
    
         
            +
                tableRow = document.createElement('tr'),
         
     | 
| 
      
 53 
     | 
    
         
            +
                containers = {
         
     | 
| 
      
 54 
     | 
    
         
            +
                  'tr': document.createElement('tbody'),
         
     | 
| 
      
 55 
     | 
    
         
            +
                  'tbody': table, 'thead': table, 'tfoot': table,
         
     | 
| 
      
 56 
     | 
    
         
            +
                  'td': tableRow, 'th': tableRow,
         
     | 
| 
      
 57 
     | 
    
         
            +
                  '*': document.createElement('div')
         
     | 
| 
      
 58 
     | 
    
         
            +
                },
         
     | 
| 
      
 59 
     | 
    
         
            +
                readyRE = /complete|loaded|interactive/,
         
     | 
| 
      
 60 
     | 
    
         
            +
                classSelectorRE = /^\.([\w-]+)$/,
         
     | 
| 
      
 61 
     | 
    
         
            +
                idSelectorRE = /^#([\w-]*)$/,
         
     | 
| 
      
 62 
     | 
    
         
            +
                tagSelectorRE = /^[\w-]+$/,
         
     | 
| 
      
 63 
     | 
    
         
            +
                class2type = {},
         
     | 
| 
      
 64 
     | 
    
         
            +
                toString = class2type.toString,
         
     | 
| 
      
 65 
     | 
    
         
            +
                zepto = {},
         
     | 
| 
      
 66 
     | 
    
         
            +
                camelize, uniq,
         
     | 
| 
      
 67 
     | 
    
         
            +
                tempParent = document.createElement('div')
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
              zepto.matches = function(element, selector) {
         
     | 
| 
      
 70 
     | 
    
         
            +
                if (!element || element.nodeType !== 1) return false
         
     | 
| 
      
 71 
     | 
    
         
            +
                var matchesSelector = element.webkitMatchesSelector || element.mozMatchesSelector ||
         
     | 
| 
      
 72 
     | 
    
         
            +
                                      element.oMatchesSelector || element.matchesSelector
         
     | 
| 
      
 73 
     | 
    
         
            +
                if (matchesSelector) return matchesSelector.call(element, selector)
         
     | 
| 
      
 74 
     | 
    
         
            +
                // fall back to performing a selector:
         
     | 
| 
      
 75 
     | 
    
         
            +
                var match, parent = element.parentNode, temp = !parent
         
     | 
| 
      
 76 
     | 
    
         
            +
                if (temp) (parent = tempParent).appendChild(element)
         
     | 
| 
      
 77 
     | 
    
         
            +
                match = ~zepto.qsa(parent, selector).indexOf(element)
         
     | 
| 
      
 78 
     | 
    
         
            +
                temp && tempParent.removeChild(element)
         
     | 
| 
      
 79 
     | 
    
         
            +
                return match
         
     | 
| 
      
 80 
     | 
    
         
            +
              }
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
              function type(obj) {
         
     | 
| 
      
 83 
     | 
    
         
            +
                return obj == null ? String(obj) :
         
     | 
| 
      
 84 
     | 
    
         
            +
                  class2type[toString.call(obj)] || "object"
         
     | 
| 
      
 85 
     | 
    
         
            +
              }
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
              function isFunction(value) { return type(value) == "function" }
         
     | 
| 
      
 88 
     | 
    
         
            +
              function isWindow(obj)     { return obj != null && obj == obj.window }
         
     | 
| 
      
 89 
     | 
    
         
            +
              function isDocument(obj)   { return obj != null && obj.nodeType == obj.DOCUMENT_NODE }
         
     | 
| 
      
 90 
     | 
    
         
            +
              function isObject(obj)     { return type(obj) == "object" }
         
     | 
| 
      
 91 
     | 
    
         
            +
              function isPlainObject(obj) {
         
     | 
| 
      
 92 
     | 
    
         
            +
                return isObject(obj) && !isWindow(obj) && obj.__proto__ == Object.prototype
         
     | 
| 
      
 93 
     | 
    
         
            +
              }
         
     | 
| 
      
 94 
     | 
    
         
            +
              function isArray(value) { return value instanceof Array }
         
     | 
| 
      
 95 
     | 
    
         
            +
              function likeArray(obj) { return typeof obj.length == 'number' }
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
              function compact(array) { return filter.call(array, function(item){ return item != null }) }
         
     | 
| 
      
 98 
     | 
    
         
            +
              function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array }
         
     | 
| 
      
 99 
     | 
    
         
            +
              camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : '' }) }
         
     | 
| 
      
 100 
     | 
    
         
            +
              function dasherize(str) {
         
     | 
| 
      
 101 
     | 
    
         
            +
                return str.replace(/::/g, '/')
         
     | 
| 
      
 102 
     | 
    
         
            +
                       .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
         
     | 
| 
      
 103 
     | 
    
         
            +
                       .replace(/([a-z\d])([A-Z])/g, '$1_$2')
         
     | 
| 
      
 104 
     | 
    
         
            +
                       .replace(/_/g, '-')
         
     | 
| 
      
 105 
     | 
    
         
            +
                       .toLowerCase()
         
     | 
| 
      
 106 
     | 
    
         
            +
              }
         
     | 
| 
      
 107 
     | 
    
         
            +
              uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) }
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
              function classRE(name) {
         
     | 
| 
      
 110 
     | 
    
         
            +
                return name in classCache ?
         
     | 
| 
      
 111 
     | 
    
         
            +
                  classCache[name] : (classCache[name] = new RegExp('(^|\\s)' + name + '(\\s|$)'))
         
     | 
| 
      
 112 
     | 
    
         
            +
              }
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
              function maybeAddPx(name, value) {
         
     | 
| 
      
 115 
     | 
    
         
            +
                return (typeof value == "number" && !cssNumber[dasherize(name)]) ? value + "px" : value
         
     | 
| 
      
 116 
     | 
    
         
            +
              }
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
              function defaultDisplay(nodeName) {
         
     | 
| 
      
 119 
     | 
    
         
            +
                var element, display
         
     | 
| 
      
 120 
     | 
    
         
            +
                if (!elementDisplay[nodeName]) {
         
     | 
| 
      
 121 
     | 
    
         
            +
                  element = document.createElement(nodeName)
         
     | 
| 
      
 122 
     | 
    
         
            +
                  document.body.appendChild(element)
         
     | 
| 
      
 123 
     | 
    
         
            +
                  display = getComputedStyle(element, '').getPropertyValue("display")
         
     | 
| 
      
 124 
     | 
    
         
            +
                  element.parentNode.removeChild(element)
         
     | 
| 
      
 125 
     | 
    
         
            +
                  display == "none" && (display = "block")
         
     | 
| 
      
 126 
     | 
    
         
            +
                  elementDisplay[nodeName] = display
         
     | 
| 
      
 127 
     | 
    
         
            +
                }
         
     | 
| 
      
 128 
     | 
    
         
            +
                return elementDisplay[nodeName]
         
     | 
| 
      
 129 
     | 
    
         
            +
              }
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
              function children(element) {
         
     | 
| 
      
 132 
     | 
    
         
            +
                return 'children' in element ?
         
     | 
| 
      
 133 
     | 
    
         
            +
                  slice.call(element.children) :
         
     | 
| 
      
 134 
     | 
    
         
            +
                  $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node })
         
     | 
| 
      
 135 
     | 
    
         
            +
              }
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
      
 137 
     | 
    
         
            +
              // `$.zepto.fragment` takes a html string and an optional tag name
         
     | 
| 
      
 138 
     | 
    
         
            +
              // to generate DOM nodes nodes from the given html string.
         
     | 
| 
      
 139 
     | 
    
         
            +
              // The generated DOM nodes are returned as an array.
         
     | 
| 
      
 140 
     | 
    
         
            +
              // This function can be overriden in plugins for example to make
         
     | 
| 
      
 141 
     | 
    
         
            +
              // it compatible with browsers that don't support the DOM fully.
         
     | 
| 
      
 142 
     | 
    
         
            +
              zepto.fragment = function(html, name, properties) {
         
     | 
| 
      
 143 
     | 
    
         
            +
                if (html.replace) html = html.replace(tagExpanderRE, "<$1></$2>")
         
     | 
| 
      
 144 
     | 
    
         
            +
                if (name === undefined) name = fragmentRE.test(html) && RegExp.$1
         
     | 
| 
      
 145 
     | 
    
         
            +
                if (!(name in containers)) name = '*'
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
                var nodes, dom, container = containers[name]
         
     | 
| 
      
 148 
     | 
    
         
            +
                container.innerHTML = '' + html
         
     | 
| 
      
 149 
     | 
    
         
            +
                dom = $.each(slice.call(container.childNodes), function(){
         
     | 
| 
      
 150 
     | 
    
         
            +
                  container.removeChild(this)
         
     | 
| 
      
 151 
     | 
    
         
            +
                })
         
     | 
| 
      
 152 
     | 
    
         
            +
                if (isPlainObject(properties)) {
         
     | 
| 
      
 153 
     | 
    
         
            +
                  nodes = $(dom)
         
     | 
| 
      
 154 
     | 
    
         
            +
                  $.each(properties, function(key, value) {
         
     | 
| 
      
 155 
     | 
    
         
            +
                    if (methodAttributes.indexOf(key) > -1) nodes[key](value)
         
     | 
| 
      
 156 
     | 
    
         
            +
                    else nodes.attr(key, value)
         
     | 
| 
      
 157 
     | 
    
         
            +
                  })
         
     | 
| 
      
 158 
     | 
    
         
            +
                }
         
     | 
| 
      
 159 
     | 
    
         
            +
                return dom
         
     | 
| 
      
 160 
     | 
    
         
            +
              }
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
              // `$.zepto.Z` swaps out the prototype of the given `dom` array
         
     | 
| 
      
 163 
     | 
    
         
            +
              // of nodes with `$.fn` and thus supplying all the Zepto functions
         
     | 
| 
      
 164 
     | 
    
         
            +
              // to the array. Note that `__proto__` is not supported on Internet
         
     | 
| 
      
 165 
     | 
    
         
            +
              // Explorer. This method can be overriden in plugins.
         
     | 
| 
      
 166 
     | 
    
         
            +
              zepto.Z = function(dom, selector) {
         
     | 
| 
      
 167 
     | 
    
         
            +
                dom = dom || []
         
     | 
| 
      
 168 
     | 
    
         
            +
                dom.__proto__ = $.fn
         
     | 
| 
      
 169 
     | 
    
         
            +
                dom.selector = selector || ''
         
     | 
| 
      
 170 
     | 
    
         
            +
                return dom
         
     | 
| 
      
 171 
     | 
    
         
            +
              }
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
      
 173 
     | 
    
         
            +
              // `$.zepto.isZ` should return `true` if the given object is a Zepto
         
     | 
| 
      
 174 
     | 
    
         
            +
              // collection. This method can be overriden in plugins.
         
     | 
| 
      
 175 
     | 
    
         
            +
              zepto.isZ = function(object) {
         
     | 
| 
      
 176 
     | 
    
         
            +
                return object instanceof zepto.Z
         
     | 
| 
      
 177 
     | 
    
         
            +
              }
         
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
      
 179 
     | 
    
         
            +
              // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and
         
     | 
| 
      
 180 
     | 
    
         
            +
              // takes a CSS selector and an optional context (and handles various
         
     | 
| 
      
 181 
     | 
    
         
            +
              // special cases).
         
     | 
| 
      
 182 
     | 
    
         
            +
              // This method can be overriden in plugins.
         
     | 
| 
      
 183 
     | 
    
         
            +
              zepto.init = function(selector, context) {
         
     | 
| 
      
 184 
     | 
    
         
            +
                // If nothing given, return an empty Zepto collection
         
     | 
| 
      
 185 
     | 
    
         
            +
                if (!selector) return zepto.Z()
         
     | 
| 
      
 186 
     | 
    
         
            +
                // If a function is given, call it when the DOM is ready
         
     | 
| 
      
 187 
     | 
    
         
            +
                else if (isFunction(selector)) return $(document).ready(selector)
         
     | 
| 
      
 188 
     | 
    
         
            +
                // If a Zepto collection is given, juts return it
         
     | 
| 
      
 189 
     | 
    
         
            +
                else if (zepto.isZ(selector)) return selector
         
     | 
| 
      
 190 
     | 
    
         
            +
                else {
         
     | 
| 
      
 191 
     | 
    
         
            +
                  var dom
         
     | 
| 
      
 192 
     | 
    
         
            +
                  // normalize array if an array of nodes is given
         
     | 
| 
      
 193 
     | 
    
         
            +
                  if (isArray(selector)) dom = compact(selector)
         
     | 
| 
      
 194 
     | 
    
         
            +
                  // Wrap DOM nodes. If a plain object is given, duplicate it.
         
     | 
| 
      
 195 
     | 
    
         
            +
                  else if (isObject(selector))
         
     | 
| 
      
 196 
     | 
    
         
            +
                    dom = [isPlainObject(selector) ? $.extend({}, selector) : selector], selector = null
         
     | 
| 
      
 197 
     | 
    
         
            +
                  // If it's a html fragment, create nodes from it
         
     | 
| 
      
 198 
     | 
    
         
            +
                  else if (fragmentRE.test(selector))
         
     | 
| 
      
 199 
     | 
    
         
            +
                    dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null
         
     | 
| 
      
 200 
     | 
    
         
            +
                  // If there's a context, create a collection on that context first, and select
         
     | 
| 
      
 201 
     | 
    
         
            +
                  // nodes from there
         
     | 
| 
      
 202 
     | 
    
         
            +
                  else if (context !== undefined) return $(context).find(selector)
         
     | 
| 
      
 203 
     | 
    
         
            +
                  // And last but no least, if it's a CSS selector, use it to select nodes.
         
     | 
| 
      
 204 
     | 
    
         
            +
                  else dom = zepto.qsa(document, selector)
         
     | 
| 
      
 205 
     | 
    
         
            +
                  // create a new Zepto collection from the nodes found
         
     | 
| 
      
 206 
     | 
    
         
            +
                  return zepto.Z(dom, selector)
         
     | 
| 
      
 207 
     | 
    
         
            +
                }
         
     | 
| 
      
 208 
     | 
    
         
            +
              }
         
     | 
| 
      
 209 
     | 
    
         
            +
             
     | 
| 
      
 210 
     | 
    
         
            +
              // `$` will be the base `Zepto` object. When calling this
         
     | 
| 
      
 211 
     | 
    
         
            +
              // function just call `$.zepto.init, which makes the implementation
         
     | 
| 
      
 212 
     | 
    
         
            +
              // details of selecting nodes and creating Zepto collections
         
     | 
| 
      
 213 
     | 
    
         
            +
              // patchable in plugins.
         
     | 
| 
      
 214 
     | 
    
         
            +
              $ = function(selector, context){
         
     | 
| 
      
 215 
     | 
    
         
            +
                return zepto.init(selector, context)
         
     | 
| 
      
 216 
     | 
    
         
            +
              }
         
     | 
| 
      
 217 
     | 
    
         
            +
             
     | 
| 
      
 218 
     | 
    
         
            +
              function extend(target, source, deep) {
         
     | 
| 
      
 219 
     | 
    
         
            +
                for (key in source)
         
     | 
| 
      
 220 
     | 
    
         
            +
                  if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {
         
     | 
| 
      
 221 
     | 
    
         
            +
                    if (isPlainObject(source[key]) && !isPlainObject(target[key]))
         
     | 
| 
      
 222 
     | 
    
         
            +
                      target[key] = {}
         
     | 
| 
      
 223 
     | 
    
         
            +
                    if (isArray(source[key]) && !isArray(target[key]))
         
     | 
| 
      
 224 
     | 
    
         
            +
                      target[key] = []
         
     | 
| 
      
 225 
     | 
    
         
            +
                    extend(target[key], source[key], deep)
         
     | 
| 
      
 226 
     | 
    
         
            +
                  }
         
     | 
| 
      
 227 
     | 
    
         
            +
                  else if (source[key] !== undefined) target[key] = source[key]
         
     | 
| 
      
 228 
     | 
    
         
            +
              }
         
     | 
| 
      
 229 
     | 
    
         
            +
             
     | 
| 
      
 230 
     | 
    
         
            +
              // Copy all but undefined properties from one or more
         
     | 
| 
      
 231 
     | 
    
         
            +
              // objects to the `target` object.
         
     | 
| 
      
 232 
     | 
    
         
            +
              $.extend = function(target){
         
     | 
| 
      
 233 
     | 
    
         
            +
                var deep, args = slice.call(arguments, 1)
         
     | 
| 
      
 234 
     | 
    
         
            +
                if (typeof target == 'boolean') {
         
     | 
| 
      
 235 
     | 
    
         
            +
                  deep = target
         
     | 
| 
      
 236 
     | 
    
         
            +
                  target = args.shift()
         
     | 
| 
      
 237 
     | 
    
         
            +
                }
         
     | 
| 
      
 238 
     | 
    
         
            +
                args.forEach(function(arg){ extend(target, arg, deep) })
         
     | 
| 
      
 239 
     | 
    
         
            +
                return target
         
     | 
| 
      
 240 
     | 
    
         
            +
              }
         
     | 
| 
      
 241 
     | 
    
         
            +
             
     | 
| 
      
 242 
     | 
    
         
            +
              // `$.zepto.qsa` is Zepto's CSS selector implementation which
         
     | 
| 
      
 243 
     | 
    
         
            +
              // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.
         
     | 
| 
      
 244 
     | 
    
         
            +
              // This method can be overriden in plugins.
         
     | 
| 
      
 245 
     | 
    
         
            +
              zepto.qsa = function(element, selector){
         
     | 
| 
      
 246 
     | 
    
         
            +
                var found
         
     | 
| 
      
 247 
     | 
    
         
            +
                return (isDocument(element) && idSelectorRE.test(selector)) ?
         
     | 
| 
      
 248 
     | 
    
         
            +
                  ( (found = element.getElementById(RegExp.$1)) ? [found] : [] ) :
         
     | 
| 
      
 249 
     | 
    
         
            +
                  (element.nodeType !== 1 && element.nodeType !== 9) ? [] :
         
     | 
| 
      
 250 
     | 
    
         
            +
                  slice.call(
         
     | 
| 
      
 251 
     | 
    
         
            +
                    classSelectorRE.test(selector) ? element.getElementsByClassName(RegExp.$1) :
         
     | 
| 
      
 252 
     | 
    
         
            +
                    tagSelectorRE.test(selector) ? element.getElementsByTagName(selector) :
         
     | 
| 
      
 253 
     | 
    
         
            +
                    element.querySelectorAll(selector)
         
     | 
| 
      
 254 
     | 
    
         
            +
                  )
         
     | 
| 
      
 255 
     | 
    
         
            +
              }
         
     | 
| 
      
 256 
     | 
    
         
            +
             
     | 
| 
      
 257 
     | 
    
         
            +
              function filtered(nodes, selector) {
         
     | 
| 
      
 258 
     | 
    
         
            +
                return selector === undefined ? $(nodes) : $(nodes).filter(selector)
         
     | 
| 
      
 259 
     | 
    
         
            +
              }
         
     | 
| 
      
 260 
     | 
    
         
            +
             
     | 
| 
      
 261 
     | 
    
         
            +
              $.contains = function(parent, node) {
         
     | 
| 
      
 262 
     | 
    
         
            +
                return parent !== node && parent.contains(node)
         
     | 
| 
      
 263 
     | 
    
         
            +
              }
         
     | 
| 
      
 264 
     | 
    
         
            +
             
     | 
| 
      
 265 
     | 
    
         
            +
              function funcArg(context, arg, idx, payload) {
         
     | 
| 
      
 266 
     | 
    
         
            +
                return isFunction(arg) ? arg.call(context, idx, payload) : arg
         
     | 
| 
      
 267 
     | 
    
         
            +
              }
         
     | 
| 
      
 268 
     | 
    
         
            +
             
     | 
| 
      
 269 
     | 
    
         
            +
              function setAttribute(node, name, value) {
         
     | 
| 
      
 270 
     | 
    
         
            +
                value == null ? node.removeAttribute(name) : node.setAttribute(name, value)
         
     | 
| 
      
 271 
     | 
    
         
            +
              }
         
     | 
| 
      
 272 
     | 
    
         
            +
             
     | 
| 
      
 273 
     | 
    
         
            +
              // access className property while respecting SVGAnimatedString
         
     | 
| 
      
 274 
     | 
    
         
            +
              function className(node, value){
         
     | 
| 
      
 275 
     | 
    
         
            +
                var klass = node.className,
         
     | 
| 
      
 276 
     | 
    
         
            +
                    svg   = klass && klass.baseVal !== undefined
         
     | 
| 
      
 277 
     | 
    
         
            +
             
     | 
| 
      
 278 
     | 
    
         
            +
                if (value === undefined) return svg ? klass.baseVal : klass
         
     | 
| 
      
 279 
     | 
    
         
            +
                svg ? (klass.baseVal = value) : (node.className = value)
         
     | 
| 
      
 280 
     | 
    
         
            +
              }
         
     | 
| 
      
 281 
     | 
    
         
            +
             
     | 
| 
      
 282 
     | 
    
         
            +
              // "true"  => true
         
     | 
| 
      
 283 
     | 
    
         
            +
              // "false" => false
         
     | 
| 
      
 284 
     | 
    
         
            +
              // "null"  => null
         
     | 
| 
      
 285 
     | 
    
         
            +
              // "42"    => 42
         
     | 
| 
      
 286 
     | 
    
         
            +
              // "42.5"  => 42.5
         
     | 
| 
      
 287 
     | 
    
         
            +
              // JSON    => parse if valid
         
     | 
| 
      
 288 
     | 
    
         
            +
              // String  => self
         
     | 
| 
      
 289 
     | 
    
         
            +
              function deserializeValue(value) {
         
     | 
| 
      
 290 
     | 
    
         
            +
                var num
         
     | 
| 
      
 291 
     | 
    
         
            +
                try {
         
     | 
| 
      
 292 
     | 
    
         
            +
                  return value ?
         
     | 
| 
      
 293 
     | 
    
         
            +
                    value == "true" ||
         
     | 
| 
      
 294 
     | 
    
         
            +
                    ( value == "false" ? false :
         
     | 
| 
      
 295 
     | 
    
         
            +
                      value == "null" ? null :
         
     | 
| 
      
 296 
     | 
    
         
            +
                      !isNaN(num = Number(value)) ? num :
         
     | 
| 
      
 297 
     | 
    
         
            +
                      /^[\[\{]/.test(value) ? $.parseJSON(value) :
         
     | 
| 
      
 298 
     | 
    
         
            +
                      value )
         
     | 
| 
      
 299 
     | 
    
         
            +
                    : value
         
     | 
| 
      
 300 
     | 
    
         
            +
                } catch(e) {
         
     | 
| 
      
 301 
     | 
    
         
            +
                  return value
         
     | 
| 
      
 302 
     | 
    
         
            +
                }
         
     | 
| 
      
 303 
     | 
    
         
            +
              }
         
     | 
| 
      
 304 
     | 
    
         
            +
             
     | 
| 
      
 305 
     | 
    
         
            +
              $.type = type
         
     | 
| 
      
 306 
     | 
    
         
            +
              $.isFunction = isFunction
         
     | 
| 
      
 307 
     | 
    
         
            +
              $.isWindow = isWindow
         
     | 
| 
      
 308 
     | 
    
         
            +
              $.isArray = isArray
         
     | 
| 
      
 309 
     | 
    
         
            +
              $.isPlainObject = isPlainObject
         
     | 
| 
      
 310 
     | 
    
         
            +
             
     | 
| 
      
 311 
     | 
    
         
            +
              $.isEmptyObject = function(obj) {
         
     | 
| 
      
 312 
     | 
    
         
            +
                var name
         
     | 
| 
      
 313 
     | 
    
         
            +
                for (name in obj) return false
         
     | 
| 
      
 314 
     | 
    
         
            +
                return true
         
     | 
| 
      
 315 
     | 
    
         
            +
              }
         
     | 
| 
      
 316 
     | 
    
         
            +
             
     | 
| 
      
 317 
     | 
    
         
            +
              $.inArray = function(elem, array, i){
         
     | 
| 
      
 318 
     | 
    
         
            +
                return emptyArray.indexOf.call(array, elem, i)
         
     | 
| 
      
 319 
     | 
    
         
            +
              }
         
     | 
| 
      
 320 
     | 
    
         
            +
             
     | 
| 
      
 321 
     | 
    
         
            +
              $.camelCase = camelize
         
     | 
| 
      
 322 
     | 
    
         
            +
              $.trim = function(str) { return str.trim() }
         
     | 
| 
      
 323 
     | 
    
         
            +
             
     | 
| 
      
 324 
     | 
    
         
            +
              // plugin compatibility
         
     | 
| 
      
 325 
     | 
    
         
            +
              $.uuid = 0
         
     | 
| 
      
 326 
     | 
    
         
            +
              $.support = { }
         
     | 
| 
      
 327 
     | 
    
         
            +
              $.expr = { }
         
     | 
| 
      
 328 
     | 
    
         
            +
             
     | 
| 
      
 329 
     | 
    
         
            +
              $.map = function(elements, callback){
         
     | 
| 
      
 330 
     | 
    
         
            +
                var value, values = [], i, key
         
     | 
| 
      
 331 
     | 
    
         
            +
                if (likeArray(elements))
         
     | 
| 
      
 332 
     | 
    
         
            +
                  for (i = 0; i < elements.length; i++) {
         
     | 
| 
      
 333 
     | 
    
         
            +
                    value = callback(elements[i], i)
         
     | 
| 
      
 334 
     | 
    
         
            +
                    if (value != null) values.push(value)
         
     | 
| 
      
 335 
     | 
    
         
            +
                  }
         
     | 
| 
      
 336 
     | 
    
         
            +
                else
         
     | 
| 
      
 337 
     | 
    
         
            +
                  for (key in elements) {
         
     | 
| 
      
 338 
     | 
    
         
            +
                    value = callback(elements[key], key)
         
     | 
| 
      
 339 
     | 
    
         
            +
                    if (value != null) values.push(value)
         
     | 
| 
      
 340 
     | 
    
         
            +
                  }
         
     | 
| 
      
 341 
     | 
    
         
            +
                return flatten(values)
         
     | 
| 
      
 342 
     | 
    
         
            +
              }
         
     | 
| 
      
 343 
     | 
    
         
            +
             
     | 
| 
      
 344 
     | 
    
         
            +
              $.each = function(elements, callback){
         
     | 
| 
      
 345 
     | 
    
         
            +
                var i, key
         
     | 
| 
      
 346 
     | 
    
         
            +
                if (likeArray(elements)) {
         
     | 
| 
      
 347 
     | 
    
         
            +
                  for (i = 0; i < elements.length; i++)
         
     | 
| 
      
 348 
     | 
    
         
            +
                    if (callback.call(elements[i], i, elements[i]) === false) return elements
         
     | 
| 
      
 349 
     | 
    
         
            +
                } else {
         
     | 
| 
      
 350 
     | 
    
         
            +
                  for (key in elements)
         
     | 
| 
      
 351 
     | 
    
         
            +
                    if (callback.call(elements[key], key, elements[key]) === false) return elements
         
     | 
| 
      
 352 
     | 
    
         
            +
                }
         
     | 
| 
      
 353 
     | 
    
         
            +
             
     | 
| 
      
 354 
     | 
    
         
            +
                return elements
         
     | 
| 
      
 355 
     | 
    
         
            +
              }
         
     | 
| 
      
 356 
     | 
    
         
            +
             
     | 
| 
      
 357 
     | 
    
         
            +
              $.grep = function(elements, callback){
         
     | 
| 
      
 358 
     | 
    
         
            +
                return filter.call(elements, callback)
         
     | 
| 
      
 359 
     | 
    
         
            +
              }
         
     | 
| 
      
 360 
     | 
    
         
            +
             
     | 
| 
      
 361 
     | 
    
         
            +
              if (window.JSON) $.parseJSON = JSON.parse
         
     | 
| 
      
 362 
     | 
    
         
            +
             
     | 
| 
      
 363 
     | 
    
         
            +
              // Populate the class2type map
         
     | 
| 
      
 364 
     | 
    
         
            +
              $.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
         
     | 
| 
      
 365 
     | 
    
         
            +
                class2type[ "[object " + name + "]" ] = name.toLowerCase()
         
     | 
| 
      
 366 
     | 
    
         
            +
              })
         
     | 
| 
      
 367 
     | 
    
         
            +
             
     | 
| 
      
 368 
     | 
    
         
            +
              // Define methods that will be available on all
         
     | 
| 
      
 369 
     | 
    
         
            +
              // Zepto collections
         
     | 
| 
      
 370 
     | 
    
         
            +
              $.fn = {
         
     | 
| 
      
 371 
     | 
    
         
            +
                // Because a collection acts like an array
         
     | 
| 
      
 372 
     | 
    
         
            +
                // copy over these useful array functions.
         
     | 
| 
      
 373 
     | 
    
         
            +
                forEach: emptyArray.forEach,
         
     | 
| 
      
 374 
     | 
    
         
            +
                reduce: emptyArray.reduce,
         
     | 
| 
      
 375 
     | 
    
         
            +
                push: emptyArray.push,
         
     | 
| 
      
 376 
     | 
    
         
            +
                sort: emptyArray.sort,
         
     | 
| 
      
 377 
     | 
    
         
            +
                indexOf: emptyArray.indexOf,
         
     | 
| 
      
 378 
     | 
    
         
            +
                concat: emptyArray.concat,
         
     | 
| 
      
 379 
     | 
    
         
            +
             
     | 
| 
      
 380 
     | 
    
         
            +
                // `map` and `slice` in the jQuery API work differently
         
     | 
| 
      
 381 
     | 
    
         
            +
                // from their array counterparts
         
     | 
| 
      
 382 
     | 
    
         
            +
                map: function(fn){
         
     | 
| 
      
 383 
     | 
    
         
            +
                  return $($.map(this, function(el, i){ return fn.call(el, i, el) }))
         
     | 
| 
      
 384 
     | 
    
         
            +
                },
         
     | 
| 
      
 385 
     | 
    
         
            +
                slice: function(){
         
     | 
| 
      
 386 
     | 
    
         
            +
                  return $(slice.apply(this, arguments))
         
     | 
| 
      
 387 
     | 
    
         
            +
                },
         
     | 
| 
      
 388 
     | 
    
         
            +
             
     | 
| 
      
 389 
     | 
    
         
            +
                ready: function(callback){
         
     | 
| 
      
 390 
     | 
    
         
            +
                  if (readyRE.test(document.readyState)) callback($)
         
     | 
| 
      
 391 
     | 
    
         
            +
                  else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false)
         
     | 
| 
      
 392 
     | 
    
         
            +
                  return this
         
     | 
| 
      
 393 
     | 
    
         
            +
                },
         
     | 
| 
      
 394 
     | 
    
         
            +
                get: function(idx){
         
     | 
| 
      
 395 
     | 
    
         
            +
                  return idx === undefined ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length]
         
     | 
| 
      
 396 
     | 
    
         
            +
                },
         
     | 
| 
      
 397 
     | 
    
         
            +
                toArray: function(){ return this.get() },
         
     | 
| 
      
 398 
     | 
    
         
            +
                size: function(){
         
     | 
| 
      
 399 
     | 
    
         
            +
                  return this.length
         
     | 
| 
      
 400 
     | 
    
         
            +
                },
         
     | 
| 
      
 401 
     | 
    
         
            +
                remove: function(){
         
     | 
| 
      
 402 
     | 
    
         
            +
                  return this.each(function(){
         
     | 
| 
      
 403 
     | 
    
         
            +
                    if (this.parentNode != null)
         
     | 
| 
      
 404 
     | 
    
         
            +
                      this.parentNode.removeChild(this)
         
     | 
| 
      
 405 
     | 
    
         
            +
                  })
         
     | 
| 
      
 406 
     | 
    
         
            +
                },
         
     | 
| 
      
 407 
     | 
    
         
            +
                each: function(callback){
         
     | 
| 
      
 408 
     | 
    
         
            +
                  emptyArray.every.call(this, function(el, idx){
         
     | 
| 
      
 409 
     | 
    
         
            +
                    return callback.call(el, idx, el) !== false
         
     | 
| 
      
 410 
     | 
    
         
            +
                  })
         
     | 
| 
      
 411 
     | 
    
         
            +
                  return this
         
     | 
| 
      
 412 
     | 
    
         
            +
                },
         
     | 
| 
      
 413 
     | 
    
         
            +
                filter: function(selector){
         
     | 
| 
      
 414 
     | 
    
         
            +
                  if (isFunction(selector)) return this.not(this.not(selector))
         
     | 
| 
      
 415 
     | 
    
         
            +
                  return $(filter.call(this, function(element){
         
     | 
| 
      
 416 
     | 
    
         
            +
                    return zepto.matches(element, selector)
         
     | 
| 
      
 417 
     | 
    
         
            +
                  }))
         
     | 
| 
      
 418 
     | 
    
         
            +
                },
         
     | 
| 
      
 419 
     | 
    
         
            +
                add: function(selector,context){
         
     | 
| 
      
 420 
     | 
    
         
            +
                  return $(uniq(this.concat($(selector,context))))
         
     | 
| 
      
 421 
     | 
    
         
            +
                },
         
     | 
| 
      
 422 
     | 
    
         
            +
                is: function(selector){
         
     | 
| 
      
 423 
     | 
    
         
            +
                  return this.length > 0 && zepto.matches(this[0], selector)
         
     | 
| 
      
 424 
     | 
    
         
            +
                },
         
     | 
| 
      
 425 
     | 
    
         
            +
                not: function(selector){
         
     | 
| 
      
 426 
     | 
    
         
            +
                  var nodes=[]
         
     | 
| 
      
 427 
     | 
    
         
            +
                  if (isFunction(selector) && selector.call !== undefined)
         
     | 
| 
      
 428 
     | 
    
         
            +
                    this.each(function(idx){
         
     | 
| 
      
 429 
     | 
    
         
            +
                      if (!selector.call(this,idx)) nodes.push(this)
         
     | 
| 
      
 430 
     | 
    
         
            +
                    })
         
     | 
| 
      
 431 
     | 
    
         
            +
                  else {
         
     | 
| 
      
 432 
     | 
    
         
            +
                    var excludes = typeof selector == 'string' ? this.filter(selector) :
         
     | 
| 
      
 433 
     | 
    
         
            +
                      (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector)
         
     | 
| 
      
 434 
     | 
    
         
            +
                    this.forEach(function(el){
         
     | 
| 
      
 435 
     | 
    
         
            +
                      if (excludes.indexOf(el) < 0) nodes.push(el)
         
     | 
| 
      
 436 
     | 
    
         
            +
                    })
         
     | 
| 
      
 437 
     | 
    
         
            +
                  }
         
     | 
| 
      
 438 
     | 
    
         
            +
                  return $(nodes)
         
     | 
| 
      
 439 
     | 
    
         
            +
                },
         
     | 
| 
      
 440 
     | 
    
         
            +
                has: function(selector){
         
     | 
| 
      
 441 
     | 
    
         
            +
                  return this.filter(function(){
         
     | 
| 
      
 442 
     | 
    
         
            +
                    return isObject(selector) ?
         
     | 
| 
      
 443 
     | 
    
         
            +
                      $.contains(this, selector) :
         
     | 
| 
      
 444 
     | 
    
         
            +
                      $(this).find(selector).size()
         
     | 
| 
      
 445 
     | 
    
         
            +
                  })
         
     | 
| 
      
 446 
     | 
    
         
            +
                },
         
     | 
| 
      
 447 
     | 
    
         
            +
                eq: function(idx){
         
     | 
| 
      
 448 
     | 
    
         
            +
                  return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1)
         
     | 
| 
      
 449 
     | 
    
         
            +
                },
         
     | 
| 
      
 450 
     | 
    
         
            +
                first: function(){
         
     | 
| 
      
 451 
     | 
    
         
            +
                  var el = this[0]
         
     | 
| 
      
 452 
     | 
    
         
            +
                  return el && !isObject(el) ? el : $(el)
         
     | 
| 
      
 453 
     | 
    
         
            +
                },
         
     | 
| 
      
 454 
     | 
    
         
            +
                last: function(){
         
     | 
| 
      
 455 
     | 
    
         
            +
                  var el = this[this.length - 1]
         
     | 
| 
      
 456 
     | 
    
         
            +
                  return el && !isObject(el) ? el : $(el)
         
     | 
| 
      
 457 
     | 
    
         
            +
                },
         
     | 
| 
      
 458 
     | 
    
         
            +
                find: function(selector){
         
     | 
| 
      
 459 
     | 
    
         
            +
                  var result, $this = this
         
     | 
| 
      
 460 
     | 
    
         
            +
                  if (typeof selector == 'object')
         
     | 
| 
      
 461 
     | 
    
         
            +
                    result = $(selector).filter(function(){
         
     | 
| 
      
 462 
     | 
    
         
            +
                      var node = this
         
     | 
| 
      
 463 
     | 
    
         
            +
                      return emptyArray.some.call($this, function(parent){
         
     | 
| 
      
 464 
     | 
    
         
            +
                        return $.contains(parent, node)
         
     | 
| 
      
 465 
     | 
    
         
            +
                      })
         
     | 
| 
      
 466 
     | 
    
         
            +
                    })
         
     | 
| 
      
 467 
     | 
    
         
            +
                  else if (this.length == 1) result = $(zepto.qsa(this[0], selector))
         
     | 
| 
      
 468 
     | 
    
         
            +
                  else result = this.map(function(){ return zepto.qsa(this, selector) })
         
     | 
| 
      
 469 
     | 
    
         
            +
                  return result
         
     | 
| 
      
 470 
     | 
    
         
            +
                },
         
     | 
| 
      
 471 
     | 
    
         
            +
                closest: function(selector, context){
         
     | 
| 
      
 472 
     | 
    
         
            +
                  var node = this[0], collection = false
         
     | 
| 
      
 473 
     | 
    
         
            +
                  if (typeof selector == 'object') collection = $(selector)
         
     | 
| 
      
 474 
     | 
    
         
            +
                  while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector)))
         
     | 
| 
      
 475 
     | 
    
         
            +
                    node = node !== context && !isDocument(node) && node.parentNode
         
     | 
| 
      
 476 
     | 
    
         
            +
                  return $(node)
         
     | 
| 
      
 477 
     | 
    
         
            +
                },
         
     | 
| 
      
 478 
     | 
    
         
            +
                parents: function(selector){
         
     | 
| 
      
 479 
     | 
    
         
            +
                  var ancestors = [], nodes = this
         
     | 
| 
      
 480 
     | 
    
         
            +
                  while (nodes.length > 0)
         
     | 
| 
      
 481 
     | 
    
         
            +
                    nodes = $.map(nodes, function(node){
         
     | 
| 
      
 482 
     | 
    
         
            +
                      if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {
         
     | 
| 
      
 483 
     | 
    
         
            +
                        ancestors.push(node)
         
     | 
| 
      
 484 
     | 
    
         
            +
                        return node
         
     | 
| 
      
 485 
     | 
    
         
            +
                      }
         
     | 
| 
      
 486 
     | 
    
         
            +
                    })
         
     | 
| 
      
 487 
     | 
    
         
            +
                  return filtered(ancestors, selector)
         
     | 
| 
      
 488 
     | 
    
         
            +
                },
         
     | 
| 
      
 489 
     | 
    
         
            +
                parent: function(selector){
         
     | 
| 
      
 490 
     | 
    
         
            +
                  return filtered(uniq(this.pluck('parentNode')), selector)
         
     | 
| 
      
 491 
     | 
    
         
            +
                },
         
     | 
| 
      
 492 
     | 
    
         
            +
                children: function(selector){
         
     | 
| 
      
 493 
     | 
    
         
            +
                  return filtered(this.map(function(){ return children(this) }), selector)
         
     | 
| 
      
 494 
     | 
    
         
            +
                },
         
     | 
| 
      
 495 
     | 
    
         
            +
                contents: function() {
         
     | 
| 
      
 496 
     | 
    
         
            +
                  return this.map(function() { return slice.call(this.childNodes) })
         
     | 
| 
      
 497 
     | 
    
         
            +
                },
         
     | 
| 
      
 498 
     | 
    
         
            +
                siblings: function(selector){
         
     | 
| 
      
 499 
     | 
    
         
            +
                  return filtered(this.map(function(i, el){
         
     | 
| 
      
 500 
     | 
    
         
            +
                    return filter.call(children(el.parentNode), function(child){ return child!==el })
         
     | 
| 
      
 501 
     | 
    
         
            +
                  }), selector)
         
     | 
| 
      
 502 
     | 
    
         
            +
                },
         
     | 
| 
      
 503 
     | 
    
         
            +
                empty: function(){
         
     | 
| 
      
 504 
     | 
    
         
            +
                  return this.each(function(){ this.innerHTML = '' })
         
     | 
| 
      
 505 
     | 
    
         
            +
                },
         
     | 
| 
      
 506 
     | 
    
         
            +
                // `pluck` is borrowed from Prototype.js
         
     | 
| 
      
 507 
     | 
    
         
            +
                pluck: function(property){
         
     | 
| 
      
 508 
     | 
    
         
            +
                  return $.map(this, function(el){ return el[property] })
         
     | 
| 
      
 509 
     | 
    
         
            +
                },
         
     | 
| 
      
 510 
     | 
    
         
            +
                show: function(){
         
     | 
| 
      
 511 
     | 
    
         
            +
                  return this.each(function(){
         
     | 
| 
      
 512 
     | 
    
         
            +
                    this.style.display == "none" && (this.style.display = null)
         
     | 
| 
      
 513 
     | 
    
         
            +
                    if (getComputedStyle(this, '').getPropertyValue("display") == "none")
         
     | 
| 
      
 514 
     | 
    
         
            +
                      this.style.display = defaultDisplay(this.nodeName)
         
     | 
| 
      
 515 
     | 
    
         
            +
                  })
         
     | 
| 
      
 516 
     | 
    
         
            +
                },
         
     | 
| 
      
 517 
     | 
    
         
            +
                replaceWith: function(newContent){
         
     | 
| 
      
 518 
     | 
    
         
            +
                  return this.before(newContent).remove()
         
     | 
| 
      
 519 
     | 
    
         
            +
                },
         
     | 
| 
      
 520 
     | 
    
         
            +
                wrap: function(structure){
         
     | 
| 
      
 521 
     | 
    
         
            +
                  var func = isFunction(structure)
         
     | 
| 
      
 522 
     | 
    
         
            +
                  if (this[0] && !func)
         
     | 
| 
      
 523 
     | 
    
         
            +
                    var dom   = $(structure).get(0),
         
     | 
| 
      
 524 
     | 
    
         
            +
                        clone = dom.parentNode || this.length > 1
         
     | 
| 
      
 525 
     | 
    
         
            +
             
     | 
| 
      
 526 
     | 
    
         
            +
                  return this.each(function(index){
         
     | 
| 
      
 527 
     | 
    
         
            +
                    $(this).wrapAll(
         
     | 
| 
      
 528 
     | 
    
         
            +
                      func ? structure.call(this, index) :
         
     | 
| 
      
 529 
     | 
    
         
            +
                        clone ? dom.cloneNode(true) : dom
         
     | 
| 
      
 530 
     | 
    
         
            +
                    )
         
     | 
| 
      
 531 
     | 
    
         
            +
                  })
         
     | 
| 
      
 532 
     | 
    
         
            +
                },
         
     | 
| 
      
 533 
     | 
    
         
            +
                wrapAll: function(structure){
         
     | 
| 
      
 534 
     | 
    
         
            +
                  if (this[0]) {
         
     | 
| 
      
 535 
     | 
    
         
            +
                    $(this[0]).before(structure = $(structure))
         
     | 
| 
      
 536 
     | 
    
         
            +
                    var children
         
     | 
| 
      
 537 
     | 
    
         
            +
                    // drill down to the inmost element
         
     | 
| 
      
 538 
     | 
    
         
            +
                    while ((children = structure.children()).length) structure = children.first()
         
     | 
| 
      
 539 
     | 
    
         
            +
                    $(structure).append(this)
         
     | 
| 
      
 540 
     | 
    
         
            +
                  }
         
     | 
| 
      
 541 
     | 
    
         
            +
                  return this
         
     | 
| 
      
 542 
     | 
    
         
            +
                },
         
     | 
| 
      
 543 
     | 
    
         
            +
                wrapInner: function(structure){
         
     | 
| 
      
 544 
     | 
    
         
            +
                  var func = isFunction(structure)
         
     | 
| 
      
 545 
     | 
    
         
            +
                  return this.each(function(index){
         
     | 
| 
      
 546 
     | 
    
         
            +
                    var self = $(this), contents = self.contents(),
         
     | 
| 
      
 547 
     | 
    
         
            +
                        dom  = func ? structure.call(this, index) : structure
         
     | 
| 
      
 548 
     | 
    
         
            +
                    contents.length ? contents.wrapAll(dom) : self.append(dom)
         
     | 
| 
      
 549 
     | 
    
         
            +
                  })
         
     | 
| 
      
 550 
     | 
    
         
            +
                },
         
     | 
| 
      
 551 
     | 
    
         
            +
                unwrap: function(){
         
     | 
| 
      
 552 
     | 
    
         
            +
                  this.parent().each(function(){
         
     | 
| 
      
 553 
     | 
    
         
            +
                    $(this).replaceWith($(this).children())
         
     | 
| 
      
 554 
     | 
    
         
            +
                  })
         
     | 
| 
      
 555 
     | 
    
         
            +
                  return this
         
     | 
| 
      
 556 
     | 
    
         
            +
                },
         
     | 
| 
      
 557 
     | 
    
         
            +
                clone: function(){
         
     | 
| 
      
 558 
     | 
    
         
            +
                  return this.map(function(){ return this.cloneNode(true) })
         
     | 
| 
      
 559 
     | 
    
         
            +
                },
         
     | 
| 
      
 560 
     | 
    
         
            +
                hide: function(){
         
     | 
| 
      
 561 
     | 
    
         
            +
                  return this.css("display", "none")
         
     | 
| 
      
 562 
     | 
    
         
            +
                },
         
     | 
| 
      
 563 
     | 
    
         
            +
                toggle: function(setting){
         
     | 
| 
      
 564 
     | 
    
         
            +
                  return this.each(function(){
         
     | 
| 
      
 565 
     | 
    
         
            +
                    var el = $(this)
         
     | 
| 
      
 566 
     | 
    
         
            +
                    ;(setting === undefined ? el.css("display") == "none" : setting) ? el.show() : el.hide()
         
     | 
| 
      
 567 
     | 
    
         
            +
                  })
         
     | 
| 
      
 568 
     | 
    
         
            +
                },
         
     | 
| 
      
 569 
     | 
    
         
            +
                prev: function(selector){ return $(this.pluck('previousElementSibling')).filter(selector || '*') },
         
     | 
| 
      
 570 
     | 
    
         
            +
                next: function(selector){ return $(this.pluck('nextElementSibling')).filter(selector || '*') },
         
     | 
| 
      
 571 
     | 
    
         
            +
                html: function(html){
         
     | 
| 
      
 572 
     | 
    
         
            +
                  return html === undefined ?
         
     | 
| 
      
 573 
     | 
    
         
            +
                    (this.length > 0 ? this[0].innerHTML : null) :
         
     | 
| 
      
 574 
     | 
    
         
            +
                    this.each(function(idx){
         
     | 
| 
      
 575 
     | 
    
         
            +
                      var originHtml = this.innerHTML
         
     | 
| 
      
 576 
     | 
    
         
            +
                      $(this).empty().append( funcArg(this, html, idx, originHtml) )
         
     | 
| 
      
 577 
     | 
    
         
            +
                    })
         
     | 
| 
      
 578 
     | 
    
         
            +
                },
         
     | 
| 
      
 579 
     | 
    
         
            +
                text: function(text){
         
     | 
| 
      
 580 
     | 
    
         
            +
                  return text === undefined ?
         
     | 
| 
      
 581 
     | 
    
         
            +
                    (this.length > 0 ? this[0].textContent : null) :
         
     | 
| 
      
 582 
     | 
    
         
            +
                    this.each(function(){ this.textContent = text })
         
     | 
| 
      
 583 
     | 
    
         
            +
                },
         
     | 
| 
      
 584 
     | 
    
         
            +
                attr: function(name, value){
         
     | 
| 
      
 585 
     | 
    
         
            +
                  var result
         
     | 
| 
      
 586 
     | 
    
         
            +
                  return (typeof name == 'string' && value === undefined) ?
         
     | 
| 
      
 587 
     | 
    
         
            +
                    (this.length == 0 || this[0].nodeType !== 1 ? undefined :
         
     | 
| 
      
 588 
     | 
    
         
            +
                      (name == 'value' && this[0].nodeName == 'INPUT') ? this.val() :
         
     | 
| 
      
 589 
     | 
    
         
            +
                      (!(result = this[0].getAttribute(name)) && name in this[0]) ? this[0][name] : result
         
     | 
| 
      
 590 
     | 
    
         
            +
                    ) :
         
     | 
| 
      
 591 
     | 
    
         
            +
                    this.each(function(idx){
         
     | 
| 
      
 592 
     | 
    
         
            +
                      if (this.nodeType !== 1) return
         
     | 
| 
      
 593 
     | 
    
         
            +
                      if (isObject(name)) for (key in name) setAttribute(this, key, name[key])
         
     | 
| 
      
 594 
     | 
    
         
            +
                      else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)))
         
     | 
| 
      
 595 
     | 
    
         
            +
                    })
         
     | 
| 
      
 596 
     | 
    
         
            +
                },
         
     | 
| 
      
 597 
     | 
    
         
            +
                removeAttr: function(name){
         
     | 
| 
      
 598 
     | 
    
         
            +
                  return this.each(function(){ this.nodeType === 1 && setAttribute(this, name) })
         
     | 
| 
      
 599 
     | 
    
         
            +
                },
         
     | 
| 
      
 600 
     | 
    
         
            +
                prop: function(name, value){
         
     | 
| 
      
 601 
     | 
    
         
            +
                  return (value === undefined) ?
         
     | 
| 
      
 602 
     | 
    
         
            +
                    (this[0] && this[0][name]) :
         
     | 
| 
      
 603 
     | 
    
         
            +
                    this.each(function(idx){
         
     | 
| 
      
 604 
     | 
    
         
            +
                      this[name] = funcArg(this, value, idx, this[name])
         
     | 
| 
      
 605 
     | 
    
         
            +
                    })
         
     | 
| 
      
 606 
     | 
    
         
            +
                },
         
     | 
| 
      
 607 
     | 
    
         
            +
                data: function(name, value){
         
     | 
| 
      
 608 
     | 
    
         
            +
                  var data = this.attr('data-' + dasherize(name), value)
         
     | 
| 
      
 609 
     | 
    
         
            +
                  return data !== null ? deserializeValue(data) : undefined
         
     | 
| 
      
 610 
     | 
    
         
            +
                },
         
     | 
| 
      
 611 
     | 
    
         
            +
                val: function(value){
         
     | 
| 
      
 612 
     | 
    
         
            +
                  return (value === undefined) ?
         
     | 
| 
      
 613 
     | 
    
         
            +
                    (this[0] && (this[0].multiple ?
         
     | 
| 
      
 614 
     | 
    
         
            +
                       $(this[0]).find('option').filter(function(o){ return this.selected }).pluck('value') :
         
     | 
| 
      
 615 
     | 
    
         
            +
                       this[0].value)
         
     | 
| 
      
 616 
     | 
    
         
            +
                    ) :
         
     | 
| 
      
 617 
     | 
    
         
            +
                    this.each(function(idx){
         
     | 
| 
      
 618 
     | 
    
         
            +
                      this.value = funcArg(this, value, idx, this.value)
         
     | 
| 
      
 619 
     | 
    
         
            +
                    })
         
     | 
| 
      
 620 
     | 
    
         
            +
                },
         
     | 
| 
      
 621 
     | 
    
         
            +
                offset: function(coordinates){
         
     | 
| 
      
 622 
     | 
    
         
            +
                  if (coordinates) return this.each(function(index){
         
     | 
| 
      
 623 
     | 
    
         
            +
                    var $this = $(this),
         
     | 
| 
      
 624 
     | 
    
         
            +
                        coords = funcArg(this, coordinates, index, $this.offset()),
         
     | 
| 
      
 625 
     | 
    
         
            +
                        parentOffset = $this.offsetParent().offset(),
         
     | 
| 
      
 626 
     | 
    
         
            +
                        props = {
         
     | 
| 
      
 627 
     | 
    
         
            +
                          top:  coords.top  - parentOffset.top,
         
     | 
| 
      
 628 
     | 
    
         
            +
                          left: coords.left - parentOffset.left
         
     | 
| 
      
 629 
     | 
    
         
            +
                        }
         
     | 
| 
      
 630 
     | 
    
         
            +
             
     | 
| 
      
 631 
     | 
    
         
            +
                    if ($this.css('position') == 'static') props['position'] = 'relative'
         
     | 
| 
      
 632 
     | 
    
         
            +
                    $this.css(props)
         
     | 
| 
      
 633 
     | 
    
         
            +
                  })
         
     | 
| 
      
 634 
     | 
    
         
            +
                  if (this.length==0) return null
         
     | 
| 
      
 635 
     | 
    
         
            +
                  var obj = this[0].getBoundingClientRect()
         
     | 
| 
      
 636 
     | 
    
         
            +
                  return {
         
     | 
| 
      
 637 
     | 
    
         
            +
                    left: obj.left + window.pageXOffset,
         
     | 
| 
      
 638 
     | 
    
         
            +
                    top: obj.top + window.pageYOffset,
         
     | 
| 
      
 639 
     | 
    
         
            +
                    width: Math.round(obj.width),
         
     | 
| 
      
 640 
     | 
    
         
            +
                    height: Math.round(obj.height)
         
     | 
| 
      
 641 
     | 
    
         
            +
                  }
         
     | 
| 
      
 642 
     | 
    
         
            +
                },
         
     | 
| 
      
 643 
     | 
    
         
            +
                css: function(property, value){
         
     | 
| 
      
 644 
     | 
    
         
            +
                  if (arguments.length < 2 && typeof property == 'string')
         
     | 
| 
      
 645 
     | 
    
         
            +
                    return this[0] && (this[0].style[camelize(property)] || getComputedStyle(this[0], '').getPropertyValue(property))
         
     | 
| 
      
 646 
     | 
    
         
            +
             
     | 
| 
      
 647 
     | 
    
         
            +
                  var css = ''
         
     | 
| 
      
 648 
     | 
    
         
            +
                  if (type(property) == 'string') {
         
     | 
| 
      
 649 
     | 
    
         
            +
                    if (!value && value !== 0)
         
     | 
| 
      
 650 
     | 
    
         
            +
                      this.each(function(){ this.style.removeProperty(dasherize(property)) })
         
     | 
| 
      
 651 
     | 
    
         
            +
                    else
         
     | 
| 
      
 652 
     | 
    
         
            +
                      css = dasherize(property) + ":" + maybeAddPx(property, value)
         
     | 
| 
      
 653 
     | 
    
         
            +
                  } else {
         
     | 
| 
      
 654 
     | 
    
         
            +
                    for (key in property)
         
     | 
| 
      
 655 
     | 
    
         
            +
                      if (!property[key] && property[key] !== 0)
         
     | 
| 
      
 656 
     | 
    
         
            +
                        this.each(function(){ this.style.removeProperty(dasherize(key)) })
         
     | 
| 
      
 657 
     | 
    
         
            +
                      else
         
     | 
| 
      
 658 
     | 
    
         
            +
                        css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';'
         
     | 
| 
      
 659 
     | 
    
         
            +
                  }
         
     | 
| 
      
 660 
     | 
    
         
            +
             
     | 
| 
      
 661 
     | 
    
         
            +
                  return this.each(function(){ this.style.cssText += ';' + css })
         
     | 
| 
      
 662 
     | 
    
         
            +
                },
         
     | 
| 
      
 663 
     | 
    
         
            +
                index: function(element){
         
     | 
| 
      
 664 
     | 
    
         
            +
                  return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0])
         
     | 
| 
      
 665 
     | 
    
         
            +
                },
         
     | 
| 
      
 666 
     | 
    
         
            +
                hasClass: function(name){
         
     | 
| 
      
 667 
     | 
    
         
            +
                  return emptyArray.some.call(this, function(el){
         
     | 
| 
      
 668 
     | 
    
         
            +
                    return this.test(className(el))
         
     | 
| 
      
 669 
     | 
    
         
            +
                  }, classRE(name))
         
     | 
| 
      
 670 
     | 
    
         
            +
                },
         
     | 
| 
      
 671 
     | 
    
         
            +
                addClass: function(name){
         
     | 
| 
      
 672 
     | 
    
         
            +
                  return this.each(function(idx){
         
     | 
| 
      
 673 
     | 
    
         
            +
                    classList = []
         
     | 
| 
      
 674 
     | 
    
         
            +
                    var cls = className(this), newName = funcArg(this, name, idx, cls)
         
     | 
| 
      
 675 
     | 
    
         
            +
                    newName.split(/\s+/g).forEach(function(klass){
         
     | 
| 
      
 676 
     | 
    
         
            +
                      if (!$(this).hasClass(klass)) classList.push(klass)
         
     | 
| 
      
 677 
     | 
    
         
            +
                    }, this)
         
     | 
| 
      
 678 
     | 
    
         
            +
                    classList.length && className(this, cls + (cls ? " " : "") + classList.join(" "))
         
     | 
| 
      
 679 
     | 
    
         
            +
                  })
         
     | 
| 
      
 680 
     | 
    
         
            +
                },
         
     | 
| 
      
 681 
     | 
    
         
            +
                removeClass: function(name){
         
     | 
| 
      
 682 
     | 
    
         
            +
                  return this.each(function(idx){
         
     | 
| 
      
 683 
     | 
    
         
            +
                    if (name === undefined) return className(this, '')
         
     | 
| 
      
 684 
     | 
    
         
            +
                    classList = className(this)
         
     | 
| 
      
 685 
     | 
    
         
            +
                    funcArg(this, name, idx, classList).split(/\s+/g).forEach(function(klass){
         
     | 
| 
      
 686 
     | 
    
         
            +
                      classList = classList.replace(classRE(klass), " ")
         
     | 
| 
      
 687 
     | 
    
         
            +
                    })
         
     | 
| 
      
 688 
     | 
    
         
            +
                    className(this, classList.trim())
         
     | 
| 
      
 689 
     | 
    
         
            +
                  })
         
     | 
| 
      
 690 
     | 
    
         
            +
                },
         
     | 
| 
      
 691 
     | 
    
         
            +
                toggleClass: function(name, when){
         
     | 
| 
      
 692 
     | 
    
         
            +
                  return this.each(function(idx){
         
     | 
| 
      
 693 
     | 
    
         
            +
                    var $this = $(this), names = funcArg(this, name, idx, className(this))
         
     | 
| 
      
 694 
     | 
    
         
            +
                    names.split(/\s+/g).forEach(function(klass){
         
     | 
| 
      
 695 
     | 
    
         
            +
                      (when === undefined ? !$this.hasClass(klass) : when) ?
         
     | 
| 
      
 696 
     | 
    
         
            +
                        $this.addClass(klass) : $this.removeClass(klass)
         
     | 
| 
      
 697 
     | 
    
         
            +
                    })
         
     | 
| 
      
 698 
     | 
    
         
            +
                  })
         
     | 
| 
      
 699 
     | 
    
         
            +
                },
         
     | 
| 
      
 700 
     | 
    
         
            +
                scrollTop: function(){
         
     | 
| 
      
 701 
     | 
    
         
            +
                  if (!this.length) return
         
     | 
| 
      
 702 
     | 
    
         
            +
                  return ('scrollTop' in this[0]) ? this[0].scrollTop : this[0].scrollY
         
     | 
| 
      
 703 
     | 
    
         
            +
                },
         
     | 
| 
      
 704 
     | 
    
         
            +
                position: function() {
         
     | 
| 
      
 705 
     | 
    
         
            +
                  if (!this.length) return
         
     | 
| 
      
 706 
     | 
    
         
            +
             
     | 
| 
      
 707 
     | 
    
         
            +
                  var elem = this[0],
         
     | 
| 
      
 708 
     | 
    
         
            +
                    // Get *real* offsetParent
         
     | 
| 
      
 709 
     | 
    
         
            +
                    offsetParent = this.offsetParent(),
         
     | 
| 
      
 710 
     | 
    
         
            +
                    // Get correct offsets
         
     | 
| 
      
 711 
     | 
    
         
            +
                    offset       = this.offset(),
         
     | 
| 
      
 712 
     | 
    
         
            +
                    parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset()
         
     | 
| 
      
 713 
     | 
    
         
            +
             
     | 
| 
      
 714 
     | 
    
         
            +
                  // Subtract element margins
         
     | 
| 
      
 715 
     | 
    
         
            +
                  // note: when an element has margin: auto the offsetLeft and marginLeft
         
     | 
| 
      
 716 
     | 
    
         
            +
                  // are the same in Safari causing offset.left to incorrectly be 0
         
     | 
| 
      
 717 
     | 
    
         
            +
                  offset.top  -= parseFloat( $(elem).css('margin-top') ) || 0
         
     | 
| 
      
 718 
     | 
    
         
            +
                  offset.left -= parseFloat( $(elem).css('margin-left') ) || 0
         
     | 
| 
      
 719 
     | 
    
         
            +
             
     | 
| 
      
 720 
     | 
    
         
            +
                  // Add offsetParent borders
         
     | 
| 
      
 721 
     | 
    
         
            +
                  parentOffset.top  += parseFloat( $(offsetParent[0]).css('border-top-width') ) || 0
         
     | 
| 
      
 722 
     | 
    
         
            +
                  parentOffset.left += parseFloat( $(offsetParent[0]).css('border-left-width') ) || 0
         
     | 
| 
      
 723 
     | 
    
         
            +
             
     | 
| 
      
 724 
     | 
    
         
            +
                  // Subtract the two offsets
         
     | 
| 
      
 725 
     | 
    
         
            +
                  return {
         
     | 
| 
      
 726 
     | 
    
         
            +
                    top:  offset.top  - parentOffset.top,
         
     | 
| 
      
 727 
     | 
    
         
            +
                    left: offset.left - parentOffset.left
         
     | 
| 
      
 728 
     | 
    
         
            +
                  }
         
     | 
| 
      
 729 
     | 
    
         
            +
                },
         
     | 
| 
      
 730 
     | 
    
         
            +
                offsetParent: function() {
         
     | 
| 
      
 731 
     | 
    
         
            +
                  return this.map(function(){
         
     | 
| 
      
 732 
     | 
    
         
            +
                    var parent = this.offsetParent || document.body
         
     | 
| 
      
 733 
     | 
    
         
            +
                    while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css("position") == "static")
         
     | 
| 
      
 734 
     | 
    
         
            +
                      parent = parent.offsetParent
         
     | 
| 
      
 735 
     | 
    
         
            +
                    return parent
         
     | 
| 
      
 736 
     | 
    
         
            +
                  })
         
     | 
| 
      
 737 
     | 
    
         
            +
                }
         
     | 
| 
      
 738 
     | 
    
         
            +
              }
         
     | 
| 
      
 739 
     | 
    
         
            +
             
     | 
| 
      
 740 
     | 
    
         
            +
              // for now
         
     | 
| 
      
 741 
     | 
    
         
            +
              $.fn.detach = $.fn.remove
         
     | 
| 
      
 742 
     | 
    
         
            +
             
     | 
| 
      
 743 
     | 
    
         
            +
              // Generate the `width` and `height` functions
         
     | 
| 
      
 744 
     | 
    
         
            +
              ;['width', 'height'].forEach(function(dimension){
         
     | 
| 
      
 745 
     | 
    
         
            +
                $.fn[dimension] = function(value){
         
     | 
| 
      
 746 
     | 
    
         
            +
                  var offset, el = this[0],
         
     | 
| 
      
 747 
     | 
    
         
            +
                    Dimension = dimension.replace(/./, function(m){ return m[0].toUpperCase() })
         
     | 
| 
      
 748 
     | 
    
         
            +
                  if (value === undefined) return isWindow(el) ? el['inner' + Dimension] :
         
     | 
| 
      
 749 
     | 
    
         
            +
                    isDocument(el) ? el.documentElement['offset' + Dimension] :
         
     | 
| 
      
 750 
     | 
    
         
            +
                    (offset = this.offset()) && offset[dimension]
         
     | 
| 
      
 751 
     | 
    
         
            +
                  else return this.each(function(idx){
         
     | 
| 
      
 752 
     | 
    
         
            +
                    el = $(this)
         
     | 
| 
      
 753 
     | 
    
         
            +
                    el.css(dimension, funcArg(this, value, idx, el[dimension]()))
         
     | 
| 
      
 754 
     | 
    
         
            +
                  })
         
     | 
| 
      
 755 
     | 
    
         
            +
                }
         
     | 
| 
      
 756 
     | 
    
         
            +
              })
         
     | 
| 
      
 757 
     | 
    
         
            +
             
     | 
| 
      
 758 
     | 
    
         
            +
              function traverseNode(node, fun) {
         
     | 
| 
      
 759 
     | 
    
         
            +
                fun(node)
         
     | 
| 
      
 760 
     | 
    
         
            +
                for (var key in node.childNodes) traverseNode(node.childNodes[key], fun)
         
     | 
| 
      
 761 
     | 
    
         
            +
              }
         
     | 
| 
      
 762 
     | 
    
         
            +
             
     | 
| 
      
 763 
     | 
    
         
            +
              // Generate the `after`, `prepend`, `before`, `append`,
         
     | 
| 
      
 764 
     | 
    
         
            +
              // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.
         
     | 
| 
      
 765 
     | 
    
         
            +
              adjacencyOperators.forEach(function(operator, operatorIndex) {
         
     | 
| 
      
 766 
     | 
    
         
            +
                var inside = operatorIndex % 2 //=> prepend, append
         
     | 
| 
      
 767 
     | 
    
         
            +
             
     | 
| 
      
 768 
     | 
    
         
            +
                $.fn[operator] = function(){
         
     | 
| 
      
 769 
     | 
    
         
            +
                  // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings
         
     | 
| 
      
 770 
     | 
    
         
            +
                  var argType, nodes = $.map(arguments, function(arg) {
         
     | 
| 
      
 771 
     | 
    
         
            +
                        argType = type(arg)
         
     | 
| 
      
 772 
     | 
    
         
            +
                        return argType == "object" || argType == "array" || arg == null ?
         
     | 
| 
      
 773 
     | 
    
         
            +
                          arg : zepto.fragment(arg)
         
     | 
| 
      
 774 
     | 
    
         
            +
                      }),
         
     | 
| 
      
 775 
     | 
    
         
            +
                      parent, copyByClone = this.length > 1
         
     | 
| 
      
 776 
     | 
    
         
            +
                  if (nodes.length < 1) return this
         
     | 
| 
      
 777 
     | 
    
         
            +
             
     | 
| 
      
 778 
     | 
    
         
            +
                  return this.each(function(_, target){
         
     | 
| 
      
 779 
     | 
    
         
            +
                    parent = inside ? target : target.parentNode
         
     | 
| 
      
 780 
     | 
    
         
            +
             
     | 
| 
      
 781 
     | 
    
         
            +
                    // convert all methods to a "before" operation
         
     | 
| 
      
 782 
     | 
    
         
            +
                    target = operatorIndex == 0 ? target.nextSibling :
         
     | 
| 
      
 783 
     | 
    
         
            +
                             operatorIndex == 1 ? target.firstChild :
         
     | 
| 
      
 784 
     | 
    
         
            +
                             operatorIndex == 2 ? target :
         
     | 
| 
      
 785 
     | 
    
         
            +
                             null
         
     | 
| 
      
 786 
     | 
    
         
            +
             
     | 
| 
      
 787 
     | 
    
         
            +
                    nodes.forEach(function(node){
         
     | 
| 
      
 788 
     | 
    
         
            +
                      if (copyByClone) node = node.cloneNode(true)
         
     | 
| 
      
 789 
     | 
    
         
            +
                      else if (!parent) return $(node).remove()
         
     | 
| 
      
 790 
     | 
    
         
            +
             
     | 
| 
      
 791 
     | 
    
         
            +
                      traverseNode(parent.insertBefore(node, target), function(el){
         
     | 
| 
      
 792 
     | 
    
         
            +
                        if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' &&
         
     | 
| 
      
 793 
     | 
    
         
            +
                           (!el.type || el.type === 'text/javascript') && !el.src)
         
     | 
| 
      
 794 
     | 
    
         
            +
                          window['eval'].call(window, el.innerHTML)
         
     | 
| 
      
 795 
     | 
    
         
            +
                      })
         
     | 
| 
      
 796 
     | 
    
         
            +
                    })
         
     | 
| 
      
 797 
     | 
    
         
            +
                  })
         
     | 
| 
      
 798 
     | 
    
         
            +
                }
         
     | 
| 
      
 799 
     | 
    
         
            +
             
     | 
| 
      
 800 
     | 
    
         
            +
                // after    => insertAfter
         
     | 
| 
      
 801 
     | 
    
         
            +
                // prepend  => prependTo
         
     | 
| 
      
 802 
     | 
    
         
            +
                // before   => insertBefore
         
     | 
| 
      
 803 
     | 
    
         
            +
                // append   => appendTo
         
     | 
| 
      
 804 
     | 
    
         
            +
                $.fn[inside ? operator+'To' : 'insert'+(operatorIndex ? 'Before' : 'After')] = function(html){
         
     | 
| 
      
 805 
     | 
    
         
            +
                  $(html)[operator](this)
         
     | 
| 
      
 806 
     | 
    
         
            +
                  return this
         
     | 
| 
      
 807 
     | 
    
         
            +
                }
         
     | 
| 
      
 808 
     | 
    
         
            +
              })
         
     | 
| 
      
 809 
     | 
    
         
            +
             
     | 
| 
      
 810 
     | 
    
         
            +
              zepto.Z.prototype = $.fn
         
     | 
| 
      
 811 
     | 
    
         
            +
             
     | 
| 
      
 812 
     | 
    
         
            +
              // Export internal API functions in the `$.zepto` namespace
         
     | 
| 
      
 813 
     | 
    
         
            +
              zepto.uniq = uniq
         
     | 
| 
      
 814 
     | 
    
         
            +
              zepto.deserializeValue = deserializeValue
         
     | 
| 
      
 815 
     | 
    
         
            +
              $.zepto = zepto
         
     | 
| 
      
 816 
     | 
    
         
            +
             
     | 
| 
      
 817 
     | 
    
         
            +
              return $
         
     | 
| 
      
 818 
     | 
    
         
            +
            })()
         
     | 
| 
      
 819 
     | 
    
         
            +
             
     | 
| 
      
 820 
     | 
    
         
            +
            window.Zepto = Zepto
         
     | 
| 
      
 821 
     | 
    
         
            +
            '$' in window || (window.$ = Zepto)
         
     | 
| 
      
 822 
     | 
    
         
            +
             
     | 
| 
      
 823 
     | 
    
         
            +
            ;(function($){
         
     | 
| 
      
 824 
     | 
    
         
            +
              function detect(ua){
         
     | 
| 
      
 825 
     | 
    
         
            +
                var os = this.os = {}, browser = this.browser = {},
         
     | 
| 
      
 826 
     | 
    
         
            +
                  webkit = ua.match(/WebKit\/([\d.]+)/),
         
     | 
| 
      
 827 
     | 
    
         
            +
                  android = ua.match(/(Android)\s+([\d.]+)/),
         
     | 
| 
      
 828 
     | 
    
         
            +
                  ipad = ua.match(/(iPad).*OS\s([\d_]+)/),
         
     | 
| 
      
 829 
     | 
    
         
            +
                  iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/),
         
     | 
| 
      
 830 
     | 
    
         
            +
                  webos = ua.match(/(webOS|hpwOS)[\s\/]([\d.]+)/),
         
     | 
| 
      
 831 
     | 
    
         
            +
                  touchpad = webos && ua.match(/TouchPad/),
         
     | 
| 
      
 832 
     | 
    
         
            +
                  kindle = ua.match(/Kindle\/([\d.]+)/),
         
     | 
| 
      
 833 
     | 
    
         
            +
                  silk = ua.match(/Silk\/([\d._]+)/),
         
     | 
| 
      
 834 
     | 
    
         
            +
                  blackberry = ua.match(/(BlackBerry).*Version\/([\d.]+)/),
         
     | 
| 
      
 835 
     | 
    
         
            +
                  bb10 = ua.match(/(BB10).*Version\/([\d.]+)/),
         
     | 
| 
      
 836 
     | 
    
         
            +
                  rimtabletos = ua.match(/(RIM\sTablet\sOS)\s([\d.]+)/),
         
     | 
| 
      
 837 
     | 
    
         
            +
                  playbook = ua.match(/PlayBook/),
         
     | 
| 
      
 838 
     | 
    
         
            +
                  chrome = ua.match(/Chrome\/([\d.]+)/) || ua.match(/CriOS\/([\d.]+)/),
         
     | 
| 
      
 839 
     | 
    
         
            +
                  firefox = ua.match(/Firefox\/([\d.]+)/)
         
     | 
| 
      
 840 
     | 
    
         
            +
             
     | 
| 
      
 841 
     | 
    
         
            +
                // Todo: clean this up with a better OS/browser seperation:
         
     | 
| 
      
 842 
     | 
    
         
            +
                // - discern (more) between multiple browsers on android
         
     | 
| 
      
 843 
     | 
    
         
            +
                // - decide if kindle fire in silk mode is android or not
         
     | 
| 
      
 844 
     | 
    
         
            +
                // - Firefox on Android doesn't specify the Android version
         
     | 
| 
      
 845 
     | 
    
         
            +
                // - possibly devide in os, device and browser hashes
         
     | 
| 
      
 846 
     | 
    
         
            +
             
     | 
| 
      
 847 
     | 
    
         
            +
                if (browser.webkit = !!webkit) browser.version = webkit[1]
         
     | 
| 
      
 848 
     | 
    
         
            +
             
     | 
| 
      
 849 
     | 
    
         
            +
                if (android) os.android = true, os.version = android[2]
         
     | 
| 
      
 850 
     | 
    
         
            +
                if (iphone) os.ios = os.iphone = true, os.version = iphone[2].replace(/_/g, '.')
         
     | 
| 
      
 851 
     | 
    
         
            +
                if (ipad) os.ios = os.ipad = true, os.version = ipad[2].replace(/_/g, '.')
         
     | 
| 
      
 852 
     | 
    
         
            +
                if (webos) os.webos = true, os.version = webos[2]
         
     | 
| 
      
 853 
     | 
    
         
            +
                if (touchpad) os.touchpad = true
         
     | 
| 
      
 854 
     | 
    
         
            +
                if (blackberry) os.blackberry = true, os.version = blackberry[2]
         
     | 
| 
      
 855 
     | 
    
         
            +
                if (bb10) os.bb10 = true, os.version = bb10[2]
         
     | 
| 
      
 856 
     | 
    
         
            +
                if (rimtabletos) os.rimtabletos = true, os.version = rimtabletos[2]
         
     | 
| 
      
 857 
     | 
    
         
            +
                if (playbook) browser.playbook = true
         
     | 
| 
      
 858 
     | 
    
         
            +
                if (kindle) os.kindle = true, os.version = kindle[1]
         
     | 
| 
      
 859 
     | 
    
         
            +
                if (silk) browser.silk = true, browser.version = silk[1]
         
     | 
| 
      
 860 
     | 
    
         
            +
                if (!silk && os.android && ua.match(/Kindle Fire/)) browser.silk = true
         
     | 
| 
      
 861 
     | 
    
         
            +
                if (chrome) browser.chrome = true, browser.version = chrome[1]
         
     | 
| 
      
 862 
     | 
    
         
            +
                if (firefox) browser.firefox = true, browser.version = firefox[1]
         
     | 
| 
      
 863 
     | 
    
         
            +
             
     | 
| 
      
 864 
     | 
    
         
            +
                os.tablet = !!(ipad || playbook || (android && !ua.match(/Mobile/)) || (firefox && ua.match(/Tablet/)))
         
     | 
| 
      
 865 
     | 
    
         
            +
                os.phone  = !!(!os.tablet && (android || iphone || webos || blackberry || bb10 ||
         
     | 
| 
      
 866 
     | 
    
         
            +
                  (chrome && ua.match(/Android/)) || (chrome && ua.match(/CriOS\/([\d.]+)/)) || (firefox && ua.match(/Mobile/))))
         
     | 
| 
      
 867 
     | 
    
         
            +
              }
         
     | 
| 
      
 868 
     | 
    
         
            +
             
     | 
| 
      
 869 
     | 
    
         
            +
              detect.call($, navigator.userAgent)
         
     | 
| 
      
 870 
     | 
    
         
            +
              // make available to unit tests
         
     | 
| 
      
 871 
     | 
    
         
            +
              $.__detect = detect
         
     | 
| 
      
 872 
     | 
    
         
            +
             
     | 
| 
      
 873 
     | 
    
         
            +
            })(Zepto)
         
     | 
| 
      
 874 
     | 
    
         
            +
             
     | 
| 
      
 875 
     | 
    
         
            +
            ;(function($){
         
     | 
| 
      
 876 
     | 
    
         
            +
              var $$ = $.zepto.qsa, handlers = {}, _zid = 1, specialEvents={},
         
     | 
| 
      
 877 
     | 
    
         
            +
                  hover = { mouseenter: 'mouseover', mouseleave: 'mouseout' }
         
     | 
| 
      
 878 
     | 
    
         
            +
             
     | 
| 
      
 879 
     | 
    
         
            +
              specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents'
         
     | 
| 
      
 880 
     | 
    
         
            +
             
     | 
| 
      
 881 
     | 
    
         
            +
              function zid(element) {
         
     | 
| 
      
 882 
     | 
    
         
            +
                return element._zid || (element._zid = _zid++)
         
     | 
| 
      
 883 
     | 
    
         
            +
              }
         
     | 
| 
      
 884 
     | 
    
         
            +
              function findHandlers(element, event, fn, selector) {
         
     | 
| 
      
 885 
     | 
    
         
            +
                event = parse(event)
         
     | 
| 
      
 886 
     | 
    
         
            +
                if (event.ns) var matcher = matcherFor(event.ns)
         
     | 
| 
      
 887 
     | 
    
         
            +
                return (handlers[zid(element)] || []).filter(function(handler) {
         
     | 
| 
      
 888 
     | 
    
         
            +
                  return handler
         
     | 
| 
      
 889 
     | 
    
         
            +
                    && (!event.e  || handler.e == event.e)
         
     | 
| 
      
 890 
     | 
    
         
            +
                    && (!event.ns || matcher.test(handler.ns))
         
     | 
| 
      
 891 
     | 
    
         
            +
                    && (!fn       || zid(handler.fn) === zid(fn))
         
     | 
| 
      
 892 
     | 
    
         
            +
                    && (!selector || handler.sel == selector)
         
     | 
| 
      
 893 
     | 
    
         
            +
                })
         
     | 
| 
      
 894 
     | 
    
         
            +
              }
         
     | 
| 
      
 895 
     | 
    
         
            +
              function parse(event) {
         
     | 
| 
      
 896 
     | 
    
         
            +
                var parts = ('' + event).split('.')
         
     | 
| 
      
 897 
     | 
    
         
            +
                return {e: parts[0], ns: parts.slice(1).sort().join(' ')}
         
     | 
| 
      
 898 
     | 
    
         
            +
              }
         
     | 
| 
      
 899 
     | 
    
         
            +
              function matcherFor(ns) {
         
     | 
| 
      
 900 
     | 
    
         
            +
                return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)')
         
     | 
| 
      
 901 
     | 
    
         
            +
              }
         
     | 
| 
      
 902 
     | 
    
         
            +
             
     | 
| 
      
 903 
     | 
    
         
            +
              function eachEvent(events, fn, iterator){
         
     | 
| 
      
 904 
     | 
    
         
            +
                if ($.type(events) != "string") $.each(events, iterator)
         
     | 
| 
      
 905 
     | 
    
         
            +
                else events.split(/\s/).forEach(function(type){ iterator(type, fn) })
         
     | 
| 
      
 906 
     | 
    
         
            +
              }
         
     | 
| 
      
 907 
     | 
    
         
            +
             
     | 
| 
      
 908 
     | 
    
         
            +
              function eventCapture(handler, captureSetting) {
         
     | 
| 
      
 909 
     | 
    
         
            +
                return handler.del &&
         
     | 
| 
      
 910 
     | 
    
         
            +
                  (handler.e == 'focus' || handler.e == 'blur') ||
         
     | 
| 
      
 911 
     | 
    
         
            +
                  !!captureSetting
         
     | 
| 
      
 912 
     | 
    
         
            +
              }
         
     | 
| 
      
 913 
     | 
    
         
            +
             
     | 
| 
      
 914 
     | 
    
         
            +
              function realEvent(type) {
         
     | 
| 
      
 915 
     | 
    
         
            +
                return hover[type] || type
         
     | 
| 
      
 916 
     | 
    
         
            +
              }
         
     | 
| 
      
 917 
     | 
    
         
            +
             
     | 
| 
      
 918 
     | 
    
         
            +
              function add(element, events, fn, selector, getDelegate, capture){
         
     | 
| 
      
 919 
     | 
    
         
            +
                var id = zid(element), set = (handlers[id] || (handlers[id] = []))
         
     | 
| 
      
 920 
     | 
    
         
            +
                eachEvent(events, fn, function(event, fn){
         
     | 
| 
      
 921 
     | 
    
         
            +
                  var handler   = parse(event)
         
     | 
| 
      
 922 
     | 
    
         
            +
                  handler.fn    = fn
         
     | 
| 
      
 923 
     | 
    
         
            +
                  handler.sel   = selector
         
     | 
| 
      
 924 
     | 
    
         
            +
                  // emulate mouseenter, mouseleave
         
     | 
| 
      
 925 
     | 
    
         
            +
                  if (handler.e in hover) fn = function(e){
         
     | 
| 
      
 926 
     | 
    
         
            +
                    var related = e.relatedTarget
         
     | 
| 
      
 927 
     | 
    
         
            +
                    if (!related || (related !== this && !$.contains(this, related)))
         
     | 
| 
      
 928 
     | 
    
         
            +
                      return handler.fn.apply(this, arguments)
         
     | 
| 
      
 929 
     | 
    
         
            +
                  }
         
     | 
| 
      
 930 
     | 
    
         
            +
                  handler.del   = getDelegate && getDelegate(fn, event)
         
     | 
| 
      
 931 
     | 
    
         
            +
                  var callback  = handler.del || fn
         
     | 
| 
      
 932 
     | 
    
         
            +
                  handler.proxy = function (e) {
         
     | 
| 
      
 933 
     | 
    
         
            +
                    var result = callback.apply(element, [e].concat(e.data))
         
     | 
| 
      
 934 
     | 
    
         
            +
                    if (result === false) e.preventDefault(), e.stopPropagation()
         
     | 
| 
      
 935 
     | 
    
         
            +
                    return result
         
     | 
| 
      
 936 
     | 
    
         
            +
                  }
         
     | 
| 
      
 937 
     | 
    
         
            +
                  handler.i = set.length
         
     | 
| 
      
 938 
     | 
    
         
            +
                  set.push(handler)
         
     | 
| 
      
 939 
     | 
    
         
            +
                  element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))
         
     | 
| 
      
 940 
     | 
    
         
            +
                })
         
     | 
| 
      
 941 
     | 
    
         
            +
              }
         
     | 
| 
      
 942 
     | 
    
         
            +
              function remove(element, events, fn, selector, capture){
         
     | 
| 
      
 943 
     | 
    
         
            +
                var id = zid(element)
         
     | 
| 
      
 944 
     | 
    
         
            +
                eachEvent(events || '', fn, function(event, fn){
         
     | 
| 
      
 945 
     | 
    
         
            +
                  findHandlers(element, event, fn, selector).forEach(function(handler){
         
     | 
| 
      
 946 
     | 
    
         
            +
                    delete handlers[id][handler.i]
         
     | 
| 
      
 947 
     | 
    
         
            +
                    element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))
         
     | 
| 
      
 948 
     | 
    
         
            +
                  })
         
     | 
| 
      
 949 
     | 
    
         
            +
                })
         
     | 
| 
      
 950 
     | 
    
         
            +
              }
         
     | 
| 
      
 951 
     | 
    
         
            +
             
     | 
| 
      
 952 
     | 
    
         
            +
              $.event = { add: add, remove: remove }
         
     | 
| 
      
 953 
     | 
    
         
            +
             
     | 
| 
      
 954 
     | 
    
         
            +
              $.proxy = function(fn, context) {
         
     | 
| 
      
 955 
     | 
    
         
            +
                if ($.isFunction(fn)) {
         
     | 
| 
      
 956 
     | 
    
         
            +
                  var proxyFn = function(){ return fn.apply(context, arguments) }
         
     | 
| 
      
 957 
     | 
    
         
            +
                  proxyFn._zid = zid(fn)
         
     | 
| 
      
 958 
     | 
    
         
            +
                  return proxyFn
         
     | 
| 
      
 959 
     | 
    
         
            +
                } else if (typeof context == 'string') {
         
     | 
| 
      
 960 
     | 
    
         
            +
                  return $.proxy(fn[context], fn)
         
     | 
| 
      
 961 
     | 
    
         
            +
                } else {
         
     | 
| 
      
 962 
     | 
    
         
            +
                  throw new TypeError("expected function")
         
     | 
| 
      
 963 
     | 
    
         
            +
                }
         
     | 
| 
      
 964 
     | 
    
         
            +
              }
         
     | 
| 
      
 965 
     | 
    
         
            +
             
     | 
| 
      
 966 
     | 
    
         
            +
              $.fn.bind = function(event, callback){
         
     | 
| 
      
 967 
     | 
    
         
            +
                return this.each(function(){
         
     | 
| 
      
 968 
     | 
    
         
            +
                  add(this, event, callback)
         
     | 
| 
      
 969 
     | 
    
         
            +
                })
         
     | 
| 
      
 970 
     | 
    
         
            +
              }
         
     | 
| 
      
 971 
     | 
    
         
            +
              $.fn.unbind = function(event, callback){
         
     | 
| 
      
 972 
     | 
    
         
            +
                return this.each(function(){
         
     | 
| 
      
 973 
     | 
    
         
            +
                  remove(this, event, callback)
         
     | 
| 
      
 974 
     | 
    
         
            +
                })
         
     | 
| 
      
 975 
     | 
    
         
            +
              }
         
     | 
| 
      
 976 
     | 
    
         
            +
              $.fn.one = function(event, callback){
         
     | 
| 
      
 977 
     | 
    
         
            +
                return this.each(function(i, element){
         
     | 
| 
      
 978 
     | 
    
         
            +
                  add(this, event, callback, null, function(fn, type){
         
     | 
| 
      
 979 
     | 
    
         
            +
                    return function(){
         
     | 
| 
      
 980 
     | 
    
         
            +
                      var result = fn.apply(element, arguments)
         
     | 
| 
      
 981 
     | 
    
         
            +
                      remove(element, type, fn)
         
     | 
| 
      
 982 
     | 
    
         
            +
                      return result
         
     | 
| 
      
 983 
     | 
    
         
            +
                    }
         
     | 
| 
      
 984 
     | 
    
         
            +
                  })
         
     | 
| 
      
 985 
     | 
    
         
            +
                })
         
     | 
| 
      
 986 
     | 
    
         
            +
              }
         
     | 
| 
      
 987 
     | 
    
         
            +
             
     | 
| 
      
 988 
     | 
    
         
            +
              var returnTrue = function(){return true},
         
     | 
| 
      
 989 
     | 
    
         
            +
                  returnFalse = function(){return false},
         
     | 
| 
      
 990 
     | 
    
         
            +
                  ignoreProperties = /^([A-Z]|layer[XY]$)/,
         
     | 
| 
      
 991 
     | 
    
         
            +
                  eventMethods = {
         
     | 
| 
      
 992 
     | 
    
         
            +
                    preventDefault: 'isDefaultPrevented',
         
     | 
| 
      
 993 
     | 
    
         
            +
                    stopImmediatePropagation: 'isImmediatePropagationStopped',
         
     | 
| 
      
 994 
     | 
    
         
            +
                    stopPropagation: 'isPropagationStopped'
         
     | 
| 
      
 995 
     | 
    
         
            +
                  }
         
     | 
| 
      
 996 
     | 
    
         
            +
              function createProxy(event) {
         
     | 
| 
      
 997 
     | 
    
         
            +
                var key, proxy = { originalEvent: event }
         
     | 
| 
      
 998 
     | 
    
         
            +
                for (key in event)
         
     | 
| 
      
 999 
     | 
    
         
            +
                  if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key]
         
     | 
| 
      
 1000 
     | 
    
         
            +
             
     | 
| 
      
 1001 
     | 
    
         
            +
                $.each(eventMethods, function(name, predicate) {
         
     | 
| 
      
 1002 
     | 
    
         
            +
                  proxy[name] = function(){
         
     | 
| 
      
 1003 
     | 
    
         
            +
                    this[predicate] = returnTrue
         
     | 
| 
      
 1004 
     | 
    
         
            +
                    return event[name].apply(event, arguments)
         
     | 
| 
      
 1005 
     | 
    
         
            +
                  }
         
     | 
| 
      
 1006 
     | 
    
         
            +
                  proxy[predicate] = returnFalse
         
     | 
| 
      
 1007 
     | 
    
         
            +
                })
         
     | 
| 
      
 1008 
     | 
    
         
            +
                return proxy
         
     | 
| 
      
 1009 
     | 
    
         
            +
              }
         
     | 
| 
      
 1010 
     | 
    
         
            +
             
     | 
| 
      
 1011 
     | 
    
         
            +
              // emulates the 'defaultPrevented' property for browsers that have none
         
     | 
| 
      
 1012 
     | 
    
         
            +
              function fix(event) {
         
     | 
| 
      
 1013 
     | 
    
         
            +
                if (!('defaultPrevented' in event)) {
         
     | 
| 
      
 1014 
     | 
    
         
            +
                  event.defaultPrevented = false
         
     | 
| 
      
 1015 
     | 
    
         
            +
                  var prevent = event.preventDefault
         
     | 
| 
      
 1016 
     | 
    
         
            +
                  event.preventDefault = function() {
         
     | 
| 
      
 1017 
     | 
    
         
            +
                    this.defaultPrevented = true
         
     | 
| 
      
 1018 
     | 
    
         
            +
                    prevent.call(this)
         
     | 
| 
      
 1019 
     | 
    
         
            +
                  }
         
     | 
| 
      
 1020 
     | 
    
         
            +
                }
         
     | 
| 
      
 1021 
     | 
    
         
            +
              }
         
     | 
| 
      
 1022 
     | 
    
         
            +
             
     | 
| 
      
 1023 
     | 
    
         
            +
              $.fn.delegate = function(selector, event, callback){
         
     | 
| 
      
 1024 
     | 
    
         
            +
                return this.each(function(i, element){
         
     | 
| 
      
 1025 
     | 
    
         
            +
                  add(element, event, callback, selector, function(fn){
         
     | 
| 
      
 1026 
     | 
    
         
            +
                    return function(e){
         
     | 
| 
      
 1027 
     | 
    
         
            +
                      var evt, match = $(e.target).closest(selector, element).get(0)
         
     | 
| 
      
 1028 
     | 
    
         
            +
                      if (match) {
         
     | 
| 
      
 1029 
     | 
    
         
            +
                        evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element})
         
     | 
| 
      
 1030 
     | 
    
         
            +
                        return fn.apply(match, [evt].concat([].slice.call(arguments, 1)))
         
     | 
| 
      
 1031 
     | 
    
         
            +
                      }
         
     | 
| 
      
 1032 
     | 
    
         
            +
                    }
         
     | 
| 
      
 1033 
     | 
    
         
            +
                  })
         
     | 
| 
      
 1034 
     | 
    
         
            +
                })
         
     | 
| 
      
 1035 
     | 
    
         
            +
              }
         
     | 
| 
      
 1036 
     | 
    
         
            +
              $.fn.undelegate = function(selector, event, callback){
         
     | 
| 
      
 1037 
     | 
    
         
            +
                return this.each(function(){
         
     | 
| 
      
 1038 
     | 
    
         
            +
                  remove(this, event, callback, selector)
         
     | 
| 
      
 1039 
     | 
    
         
            +
                })
         
     | 
| 
      
 1040 
     | 
    
         
            +
              }
         
     | 
| 
      
 1041 
     | 
    
         
            +
             
     | 
| 
      
 1042 
     | 
    
         
            +
              $.fn.live = function(event, callback){
         
     | 
| 
      
 1043 
     | 
    
         
            +
                $(document.body).delegate(this.selector, event, callback)
         
     | 
| 
      
 1044 
     | 
    
         
            +
                return this
         
     | 
| 
      
 1045 
     | 
    
         
            +
              }
         
     | 
| 
      
 1046 
     | 
    
         
            +
              $.fn.die = function(event, callback){
         
     | 
| 
      
 1047 
     | 
    
         
            +
                $(document.body).undelegate(this.selector, event, callback)
         
     | 
| 
      
 1048 
     | 
    
         
            +
                return this
         
     | 
| 
      
 1049 
     | 
    
         
            +
              }
         
     | 
| 
      
 1050 
     | 
    
         
            +
             
     | 
| 
      
 1051 
     | 
    
         
            +
              $.fn.on = function(event, selector, callback){
         
     | 
| 
      
 1052 
     | 
    
         
            +
                return !selector || $.isFunction(selector) ?
         
     | 
| 
      
 1053 
     | 
    
         
            +
                  this.bind(event, selector || callback) : this.delegate(selector, event, callback)
         
     | 
| 
      
 1054 
     | 
    
         
            +
              }
         
     | 
| 
      
 1055 
     | 
    
         
            +
              $.fn.off = function(event, selector, callback){
         
     | 
| 
      
 1056 
     | 
    
         
            +
                return !selector || $.isFunction(selector) ?
         
     | 
| 
      
 1057 
     | 
    
         
            +
                  this.unbind(event, selector || callback) : this.undelegate(selector, event, callback)
         
     | 
| 
      
 1058 
     | 
    
         
            +
              }
         
     | 
| 
      
 1059 
     | 
    
         
            +
             
     | 
| 
      
 1060 
     | 
    
         
            +
              $.fn.trigger = function(event, data){
         
     | 
| 
      
 1061 
     | 
    
         
            +
                if (typeof event == 'string' || $.isPlainObject(event)) event = $.Event(event)
         
     | 
| 
      
 1062 
     | 
    
         
            +
                fix(event)
         
     | 
| 
      
 1063 
     | 
    
         
            +
                event.data = data
         
     | 
| 
      
 1064 
     | 
    
         
            +
                return this.each(function(){
         
     | 
| 
      
 1065 
     | 
    
         
            +
                  // items in the collection might not be DOM elements
         
     | 
| 
      
 1066 
     | 
    
         
            +
                  // (todo: possibly support events on plain old objects)
         
     | 
| 
      
 1067 
     | 
    
         
            +
                  if('dispatchEvent' in this) this.dispatchEvent(event)
         
     | 
| 
      
 1068 
     | 
    
         
            +
                })
         
     | 
| 
      
 1069 
     | 
    
         
            +
              }
         
     | 
| 
      
 1070 
     | 
    
         
            +
             
     | 
| 
      
 1071 
     | 
    
         
            +
              // triggers event handlers on current element just as if an event occurred,
         
     | 
| 
      
 1072 
     | 
    
         
            +
              // doesn't trigger an actual event, doesn't bubble
         
     | 
| 
      
 1073 
     | 
    
         
            +
              $.fn.triggerHandler = function(event, data){
         
     | 
| 
      
 1074 
     | 
    
         
            +
                var e, result
         
     | 
| 
      
 1075 
     | 
    
         
            +
                this.each(function(i, element){
         
     | 
| 
      
 1076 
     | 
    
         
            +
                  e = createProxy(typeof event == 'string' ? $.Event(event) : event)
         
     | 
| 
      
 1077 
     | 
    
         
            +
                  e.data = data
         
     | 
| 
      
 1078 
     | 
    
         
            +
                  e.target = element
         
     | 
| 
      
 1079 
     | 
    
         
            +
                  $.each(findHandlers(element, event.type || event), function(i, handler){
         
     | 
| 
      
 1080 
     | 
    
         
            +
                    result = handler.proxy(e)
         
     | 
| 
      
 1081 
     | 
    
         
            +
                    if (e.isImmediatePropagationStopped()) return false
         
     | 
| 
      
 1082 
     | 
    
         
            +
                  })
         
     | 
| 
      
 1083 
     | 
    
         
            +
                })
         
     | 
| 
      
 1084 
     | 
    
         
            +
                return result
         
     | 
| 
      
 1085 
     | 
    
         
            +
              }
         
     | 
| 
      
 1086 
     | 
    
         
            +
             
     | 
| 
      
 1087 
     | 
    
         
            +
              // shortcut methods for `.bind(event, fn)` for each event type
         
     | 
| 
      
 1088 
     | 
    
         
            +
              ;('focusin focusout load resize scroll unload click dblclick '+
         
     | 
| 
      
 1089 
     | 
    
         
            +
              'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave '+
         
     | 
| 
      
 1090 
     | 
    
         
            +
              'change select keydown keypress keyup error').split(' ').forEach(function(event) {
         
     | 
| 
      
 1091 
     | 
    
         
            +
                $.fn[event] = function(callback) {
         
     | 
| 
      
 1092 
     | 
    
         
            +
                  return callback ?
         
     | 
| 
      
 1093 
     | 
    
         
            +
                    this.bind(event, callback) :
         
     | 
| 
      
 1094 
     | 
    
         
            +
                    this.trigger(event)
         
     | 
| 
      
 1095 
     | 
    
         
            +
                }
         
     | 
| 
      
 1096 
     | 
    
         
            +
              })
         
     | 
| 
      
 1097 
     | 
    
         
            +
             
     | 
| 
      
 1098 
     | 
    
         
            +
              ;['focus', 'blur'].forEach(function(name) {
         
     | 
| 
      
 1099 
     | 
    
         
            +
                $.fn[name] = function(callback) {
         
     | 
| 
      
 1100 
     | 
    
         
            +
                  if (callback) this.bind(name, callback)
         
     | 
| 
      
 1101 
     | 
    
         
            +
                  else this.each(function(){
         
     | 
| 
      
 1102 
     | 
    
         
            +
                    try { this[name]() }
         
     | 
| 
      
 1103 
     | 
    
         
            +
                    catch(e) {}
         
     | 
| 
      
 1104 
     | 
    
         
            +
                  })
         
     | 
| 
      
 1105 
     | 
    
         
            +
                  return this
         
     | 
| 
      
 1106 
     | 
    
         
            +
                }
         
     | 
| 
      
 1107 
     | 
    
         
            +
              })
         
     | 
| 
      
 1108 
     | 
    
         
            +
             
     | 
| 
      
 1109 
     | 
    
         
            +
              $.Event = function(type, props) {
         
     | 
| 
      
 1110 
     | 
    
         
            +
                if (typeof type != 'string') props = type, type = props.type
         
     | 
| 
      
 1111 
     | 
    
         
            +
                var event = document.createEvent(specialEvents[type] || 'Events'), bubbles = true
         
     | 
| 
      
 1112 
     | 
    
         
            +
                if (props) for (var name in props) (name == 'bubbles') ? (bubbles = !!props[name]) : (event[name] = props[name])
         
     | 
| 
      
 1113 
     | 
    
         
            +
                event.initEvent(type, bubbles, true, null, null, null, null, null, null, null, null, null, null, null, null)
         
     | 
| 
      
 1114 
     | 
    
         
            +
                event.isDefaultPrevented = function(){ return this.defaultPrevented }
         
     | 
| 
      
 1115 
     | 
    
         
            +
                return event
         
     | 
| 
      
 1116 
     | 
    
         
            +
              }
         
     | 
| 
      
 1117 
     | 
    
         
            +
             
     | 
| 
      
 1118 
     | 
    
         
            +
            })(Zepto)
         
     | 
| 
      
 1119 
     | 
    
         
            +
             
     | 
| 
      
 1120 
     | 
    
         
            +
            ;(function($){
         
     | 
| 
      
 1121 
     | 
    
         
            +
              var jsonpID = 0,
         
     | 
| 
      
 1122 
     | 
    
         
            +
                  document = window.document,
         
     | 
| 
      
 1123 
     | 
    
         
            +
                  key,
         
     | 
| 
      
 1124 
     | 
    
         
            +
                  name,
         
     | 
| 
      
 1125 
     | 
    
         
            +
                  rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
         
     | 
| 
      
 1126 
     | 
    
         
            +
                  scriptTypeRE = /^(?:text|application)\/javascript/i,
         
     | 
| 
      
 1127 
     | 
    
         
            +
                  xmlTypeRE = /^(?:text|application)\/xml/i,
         
     | 
| 
      
 1128 
     | 
    
         
            +
                  jsonType = 'application/json',
         
     | 
| 
      
 1129 
     | 
    
         
            +
                  htmlType = 'text/html',
         
     | 
| 
      
 1130 
     | 
    
         
            +
                  blankRE = /^\s*$/
         
     | 
| 
      
 1131 
     | 
    
         
            +
             
     | 
| 
      
 1132 
     | 
    
         
            +
              // trigger a custom event and return false if it was cancelled
         
     | 
| 
      
 1133 
     | 
    
         
            +
              function triggerAndReturn(context, eventName, data) {
         
     | 
| 
      
 1134 
     | 
    
         
            +
                var event = $.Event(eventName)
         
     | 
| 
      
 1135 
     | 
    
         
            +
                $(context).trigger(event, data)
         
     | 
| 
      
 1136 
     | 
    
         
            +
                return !event.defaultPrevented
         
     | 
| 
      
 1137 
     | 
    
         
            +
              }
         
     | 
| 
      
 1138 
     | 
    
         
            +
             
     | 
| 
      
 1139 
     | 
    
         
            +
              // trigger an Ajax "global" event
         
     | 
| 
      
 1140 
     | 
    
         
            +
              function triggerGlobal(settings, context, eventName, data) {
         
     | 
| 
      
 1141 
     | 
    
         
            +
                if (settings.global) return triggerAndReturn(context || document, eventName, data)
         
     | 
| 
      
 1142 
     | 
    
         
            +
              }
         
     | 
| 
      
 1143 
     | 
    
         
            +
             
     | 
| 
      
 1144 
     | 
    
         
            +
              // Number of active Ajax requests
         
     | 
| 
      
 1145 
     | 
    
         
            +
              $.active = 0
         
     | 
| 
      
 1146 
     | 
    
         
            +
             
     | 
| 
      
 1147 
     | 
    
         
            +
              function ajaxStart(settings) {
         
     | 
| 
      
 1148 
     | 
    
         
            +
                if (settings.global && $.active++ === 0) triggerGlobal(settings, null, 'ajaxStart')
         
     | 
| 
      
 1149 
     | 
    
         
            +
              }
         
     | 
| 
      
 1150 
     | 
    
         
            +
              function ajaxStop(settings) {
         
     | 
| 
      
 1151 
     | 
    
         
            +
                if (settings.global && !(--$.active)) triggerGlobal(settings, null, 'ajaxStop')
         
     | 
| 
      
 1152 
     | 
    
         
            +
              }
         
     | 
| 
      
 1153 
     | 
    
         
            +
             
     | 
| 
      
 1154 
     | 
    
         
            +
              // triggers an extra global event "ajaxBeforeSend" that's like "ajaxSend" but cancelable
         
     | 
| 
      
 1155 
     | 
    
         
            +
              function ajaxBeforeSend(xhr, settings) {
         
     | 
| 
      
 1156 
     | 
    
         
            +
                var context = settings.context
         
     | 
| 
      
 1157 
     | 
    
         
            +
                if (settings.beforeSend.call(context, xhr, settings) === false ||
         
     | 
| 
      
 1158 
     | 
    
         
            +
                    triggerGlobal(settings, context, 'ajaxBeforeSend', [xhr, settings]) === false)
         
     | 
| 
      
 1159 
     | 
    
         
            +
                  return false
         
     | 
| 
      
 1160 
     | 
    
         
            +
             
     | 
| 
      
 1161 
     | 
    
         
            +
                triggerGlobal(settings, context, 'ajaxSend', [xhr, settings])
         
     | 
| 
      
 1162 
     | 
    
         
            +
              }
         
     | 
| 
      
 1163 
     | 
    
         
            +
              function ajaxSuccess(data, xhr, settings) {
         
     | 
| 
      
 1164 
     | 
    
         
            +
                var context = settings.context, status = 'success'
         
     | 
| 
      
 1165 
     | 
    
         
            +
                settings.success.call(context, data, status, xhr)
         
     | 
| 
      
 1166 
     | 
    
         
            +
                triggerGlobal(settings, context, 'ajaxSuccess', [xhr, settings, data])
         
     | 
| 
      
 1167 
     | 
    
         
            +
                ajaxComplete(status, xhr, settings)
         
     | 
| 
      
 1168 
     | 
    
         
            +
              }
         
     | 
| 
      
 1169 
     | 
    
         
            +
              // type: "timeout", "error", "abort", "parsererror"
         
     | 
| 
      
 1170 
     | 
    
         
            +
              function ajaxError(error, type, xhr, settings) {
         
     | 
| 
      
 1171 
     | 
    
         
            +
                var context = settings.context
         
     | 
| 
      
 1172 
     | 
    
         
            +
                settings.error.call(context, xhr, type, error)
         
     | 
| 
      
 1173 
     | 
    
         
            +
                triggerGlobal(settings, context, 'ajaxError', [xhr, settings, error])
         
     | 
| 
      
 1174 
     | 
    
         
            +
                ajaxComplete(type, xhr, settings)
         
     | 
| 
      
 1175 
     | 
    
         
            +
              }
         
     | 
| 
      
 1176 
     | 
    
         
            +
              // status: "success", "notmodified", "error", "timeout", "abort", "parsererror"
         
     | 
| 
      
 1177 
     | 
    
         
            +
              function ajaxComplete(status, xhr, settings) {
         
     | 
| 
      
 1178 
     | 
    
         
            +
                var context = settings.context
         
     | 
| 
      
 1179 
     | 
    
         
            +
                settings.complete.call(context, xhr, status)
         
     | 
| 
      
 1180 
     | 
    
         
            +
                triggerGlobal(settings, context, 'ajaxComplete', [xhr, settings])
         
     | 
| 
      
 1181 
     | 
    
         
            +
                ajaxStop(settings)
         
     | 
| 
      
 1182 
     | 
    
         
            +
              }
         
     | 
| 
      
 1183 
     | 
    
         
            +
             
     | 
| 
      
 1184 
     | 
    
         
            +
              // Empty function, used as default callback
         
     | 
| 
      
 1185 
     | 
    
         
            +
              function empty() {}
         
     | 
| 
      
 1186 
     | 
    
         
            +
             
     | 
| 
      
 1187 
     | 
    
         
            +
              $.ajaxJSONP = function(options){
         
     | 
| 
      
 1188 
     | 
    
         
            +
                if (!('type' in options)) return $.ajax(options)
         
     | 
| 
      
 1189 
     | 
    
         
            +
             
     | 
| 
      
 1190 
     | 
    
         
            +
                var callbackName = 'jsonp' + (++jsonpID),
         
     | 
| 
      
 1191 
     | 
    
         
            +
                  script = document.createElement('script'),
         
     | 
| 
      
 1192 
     | 
    
         
            +
                  cleanup = function() {
         
     | 
| 
      
 1193 
     | 
    
         
            +
                    clearTimeout(abortTimeout)
         
     | 
| 
      
 1194 
     | 
    
         
            +
                    $(script).remove()
         
     | 
| 
      
 1195 
     | 
    
         
            +
                    delete window[callbackName]
         
     | 
| 
      
 1196 
     | 
    
         
            +
                  },
         
     | 
| 
      
 1197 
     | 
    
         
            +
                  abort = function(type){
         
     | 
| 
      
 1198 
     | 
    
         
            +
                    cleanup()
         
     | 
| 
      
 1199 
     | 
    
         
            +
                    // In case of manual abort or timeout, keep an empty function as callback
         
     | 
| 
      
 1200 
     | 
    
         
            +
                    // so that the SCRIPT tag that eventually loads won't result in an error.
         
     | 
| 
      
 1201 
     | 
    
         
            +
                    if (!type || type == 'timeout') window[callbackName] = empty
         
     | 
| 
      
 1202 
     | 
    
         
            +
                    ajaxError(null, type || 'abort', xhr, options)
         
     | 
| 
      
 1203 
     | 
    
         
            +
                  },
         
     | 
| 
      
 1204 
     | 
    
         
            +
                  xhr = { abort: abort }, abortTimeout
         
     | 
| 
      
 1205 
     | 
    
         
            +
             
     | 
| 
      
 1206 
     | 
    
         
            +
                if (ajaxBeforeSend(xhr, options) === false) {
         
     | 
| 
      
 1207 
     | 
    
         
            +
                  abort('abort')
         
     | 
| 
      
 1208 
     | 
    
         
            +
                  return false
         
     | 
| 
      
 1209 
     | 
    
         
            +
                }
         
     | 
| 
      
 1210 
     | 
    
         
            +
             
     | 
| 
      
 1211 
     | 
    
         
            +
                window[callbackName] = function(data){
         
     | 
| 
      
 1212 
     | 
    
         
            +
                  cleanup()
         
     | 
| 
      
 1213 
     | 
    
         
            +
                  ajaxSuccess(data, xhr, options)
         
     | 
| 
      
 1214 
     | 
    
         
            +
                }
         
     | 
| 
      
 1215 
     | 
    
         
            +
             
     | 
| 
      
 1216 
     | 
    
         
            +
                script.onerror = function() { abort('error') }
         
     | 
| 
      
 1217 
     | 
    
         
            +
             
     | 
| 
      
 1218 
     | 
    
         
            +
                script.src = options.url.replace(/=\?/, '=' + callbackName)
         
     | 
| 
      
 1219 
     | 
    
         
            +
                $('head').append(script)
         
     | 
| 
      
 1220 
     | 
    
         
            +
             
     | 
| 
      
 1221 
     | 
    
         
            +
                if (options.timeout > 0) abortTimeout = setTimeout(function(){
         
     | 
| 
      
 1222 
     | 
    
         
            +
                  abort('timeout')
         
     | 
| 
      
 1223 
     | 
    
         
            +
                }, options.timeout)
         
     | 
| 
      
 1224 
     | 
    
         
            +
             
     | 
| 
      
 1225 
     | 
    
         
            +
                return xhr
         
     | 
| 
      
 1226 
     | 
    
         
            +
              }
         
     | 
| 
      
 1227 
     | 
    
         
            +
             
     | 
| 
      
 1228 
     | 
    
         
            +
              $.ajaxSettings = {
         
     | 
| 
      
 1229 
     | 
    
         
            +
                // Default type of request
         
     | 
| 
      
 1230 
     | 
    
         
            +
                type: 'GET',
         
     | 
| 
      
 1231 
     | 
    
         
            +
                // Callback that is executed before request
         
     | 
| 
      
 1232 
     | 
    
         
            +
                beforeSend: empty,
         
     | 
| 
      
 1233 
     | 
    
         
            +
                // Callback that is executed if the request succeeds
         
     | 
| 
      
 1234 
     | 
    
         
            +
                success: empty,
         
     | 
| 
      
 1235 
     | 
    
         
            +
                // Callback that is executed the the server drops error
         
     | 
| 
      
 1236 
     | 
    
         
            +
                error: empty,
         
     | 
| 
      
 1237 
     | 
    
         
            +
                // Callback that is executed on request complete (both: error and success)
         
     | 
| 
      
 1238 
     | 
    
         
            +
                complete: empty,
         
     | 
| 
      
 1239 
     | 
    
         
            +
                // The context for the callbacks
         
     | 
| 
      
 1240 
     | 
    
         
            +
                context: null,
         
     | 
| 
      
 1241 
     | 
    
         
            +
                // Whether to trigger "global" Ajax events
         
     | 
| 
      
 1242 
     | 
    
         
            +
                global: true,
         
     | 
| 
      
 1243 
     | 
    
         
            +
                // Transport
         
     | 
| 
      
 1244 
     | 
    
         
            +
                xhr: function () {
         
     | 
| 
      
 1245 
     | 
    
         
            +
                  return new window.XMLHttpRequest()
         
     | 
| 
      
 1246 
     | 
    
         
            +
                },
         
     | 
| 
      
 1247 
     | 
    
         
            +
                // MIME types mapping
         
     | 
| 
      
 1248 
     | 
    
         
            +
                accepts: {
         
     | 
| 
      
 1249 
     | 
    
         
            +
                  script: 'text/javascript, application/javascript',
         
     | 
| 
      
 1250 
     | 
    
         
            +
                  json:   jsonType,
         
     | 
| 
      
 1251 
     | 
    
         
            +
                  xml:    'application/xml, text/xml',
         
     | 
| 
      
 1252 
     | 
    
         
            +
                  html:   htmlType,
         
     | 
| 
      
 1253 
     | 
    
         
            +
                  text:   'text/plain'
         
     | 
| 
      
 1254 
     | 
    
         
            +
                },
         
     | 
| 
      
 1255 
     | 
    
         
            +
                // Whether the request is to another domain
         
     | 
| 
      
 1256 
     | 
    
         
            +
                crossDomain: false,
         
     | 
| 
      
 1257 
     | 
    
         
            +
                // Default timeout
         
     | 
| 
      
 1258 
     | 
    
         
            +
                timeout: 0,
         
     | 
| 
      
 1259 
     | 
    
         
            +
                // Whether data should be serialized to string
         
     | 
| 
      
 1260 
     | 
    
         
            +
                processData: true,
         
     | 
| 
      
 1261 
     | 
    
         
            +
                // Whether the browser should be allowed to cache GET responses
         
     | 
| 
      
 1262 
     | 
    
         
            +
                cache: true,
         
     | 
| 
      
 1263 
     | 
    
         
            +
              }
         
     | 
| 
      
 1264 
     | 
    
         
            +
             
     | 
| 
      
 1265 
     | 
    
         
            +
              function mimeToDataType(mime) {
         
     | 
| 
      
 1266 
     | 
    
         
            +
                if (mime) mime = mime.split(';', 2)[0]
         
     | 
| 
      
 1267 
     | 
    
         
            +
                return mime && ( mime == htmlType ? 'html' :
         
     | 
| 
      
 1268 
     | 
    
         
            +
                  mime == jsonType ? 'json' :
         
     | 
| 
      
 1269 
     | 
    
         
            +
                  scriptTypeRE.test(mime) ? 'script' :
         
     | 
| 
      
 1270 
     | 
    
         
            +
                  xmlTypeRE.test(mime) && 'xml' ) || 'text'
         
     | 
| 
      
 1271 
     | 
    
         
            +
              }
         
     | 
| 
      
 1272 
     | 
    
         
            +
             
     | 
| 
      
 1273 
     | 
    
         
            +
              function appendQuery(url, query) {
         
     | 
| 
      
 1274 
     | 
    
         
            +
                return (url + '&' + query).replace(/[&?]{1,2}/, '?')
         
     | 
| 
      
 1275 
     | 
    
         
            +
              }
         
     | 
| 
      
 1276 
     | 
    
         
            +
             
     | 
| 
      
 1277 
     | 
    
         
            +
              // serialize payload and append it to the URL for GET requests
         
     | 
| 
      
 1278 
     | 
    
         
            +
              function serializeData(options) {
         
     | 
| 
      
 1279 
     | 
    
         
            +
                if (options.processData && options.data && $.type(options.data) != "string")
         
     | 
| 
      
 1280 
     | 
    
         
            +
                  options.data = $.param(options.data, options.traditional)
         
     | 
| 
      
 1281 
     | 
    
         
            +
                if (options.data && (!options.type || options.type.toUpperCase() == 'GET'))
         
     | 
| 
      
 1282 
     | 
    
         
            +
                  options.url = appendQuery(options.url, options.data)
         
     | 
| 
      
 1283 
     | 
    
         
            +
              }
         
     | 
| 
      
 1284 
     | 
    
         
            +
             
     | 
| 
      
 1285 
     | 
    
         
            +
              $.ajax = function(options){
         
     | 
| 
      
 1286 
     | 
    
         
            +
                var settings = $.extend({}, options || {})
         
     | 
| 
      
 1287 
     | 
    
         
            +
                for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key]
         
     | 
| 
      
 1288 
     | 
    
         
            +
             
     | 
| 
      
 1289 
     | 
    
         
            +
                ajaxStart(settings)
         
     | 
| 
      
 1290 
     | 
    
         
            +
             
     | 
| 
      
 1291 
     | 
    
         
            +
                if (!settings.crossDomain) settings.crossDomain = /^([\w-]+:)?\/\/([^\/]+)/.test(settings.url) &&
         
     | 
| 
      
 1292 
     | 
    
         
            +
                  RegExp.$2 != window.location.host
         
     | 
| 
      
 1293 
     | 
    
         
            +
             
     | 
| 
      
 1294 
     | 
    
         
            +
                if (!settings.url) settings.url = window.location.toString()
         
     | 
| 
      
 1295 
     | 
    
         
            +
                serializeData(settings)
         
     | 
| 
      
 1296 
     | 
    
         
            +
                if (settings.cache === false) settings.url = appendQuery(settings.url, '_=' + Date.now())
         
     | 
| 
      
 1297 
     | 
    
         
            +
             
     | 
| 
      
 1298 
     | 
    
         
            +
                var dataType = settings.dataType, hasPlaceholder = /=\?/.test(settings.url)
         
     | 
| 
      
 1299 
     | 
    
         
            +
                if (dataType == 'jsonp' || hasPlaceholder) {
         
     | 
| 
      
 1300 
     | 
    
         
            +
                  if (!hasPlaceholder) settings.url = appendQuery(settings.url, 'callback=?')
         
     | 
| 
      
 1301 
     | 
    
         
            +
                  return $.ajaxJSONP(settings)
         
     | 
| 
      
 1302 
     | 
    
         
            +
                }
         
     | 
| 
      
 1303 
     | 
    
         
            +
             
     | 
| 
      
 1304 
     | 
    
         
            +
                var mime = settings.accepts[dataType],
         
     | 
| 
      
 1305 
     | 
    
         
            +
                    baseHeaders = { },
         
     | 
| 
      
 1306 
     | 
    
         
            +
                    protocol = /^([\w-]+:)\/\//.test(settings.url) ? RegExp.$1 : window.location.protocol,
         
     | 
| 
      
 1307 
     | 
    
         
            +
                    xhr = settings.xhr(), abortTimeout
         
     | 
| 
      
 1308 
     | 
    
         
            +
             
     | 
| 
      
 1309 
     | 
    
         
            +
                if (!settings.crossDomain) baseHeaders['X-Requested-With'] = 'XMLHttpRequest'
         
     | 
| 
      
 1310 
     | 
    
         
            +
                if (mime) {
         
     | 
| 
      
 1311 
     | 
    
         
            +
                  baseHeaders['Accept'] = mime
         
     | 
| 
      
 1312 
     | 
    
         
            +
                  if (mime.indexOf(',') > -1) mime = mime.split(',', 2)[0]
         
     | 
| 
      
 1313 
     | 
    
         
            +
                  xhr.overrideMimeType && xhr.overrideMimeType(mime)
         
     | 
| 
      
 1314 
     | 
    
         
            +
                }
         
     | 
| 
      
 1315 
     | 
    
         
            +
                if (settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() != 'GET'))
         
     | 
| 
      
 1316 
     | 
    
         
            +
                  baseHeaders['Content-Type'] = (settings.contentType || 'application/x-www-form-urlencoded')
         
     | 
| 
      
 1317 
     | 
    
         
            +
                settings.headers = $.extend(baseHeaders, settings.headers || {})
         
     | 
| 
      
 1318 
     | 
    
         
            +
             
     | 
| 
      
 1319 
     | 
    
         
            +
                xhr.onreadystatechange = function(){
         
     | 
| 
      
 1320 
     | 
    
         
            +
                  if (xhr.readyState == 4) {
         
     | 
| 
      
 1321 
     | 
    
         
            +
                    xhr.onreadystatechange = empty;
         
     | 
| 
      
 1322 
     | 
    
         
            +
                    clearTimeout(abortTimeout)
         
     | 
| 
      
 1323 
     | 
    
         
            +
                    var result, error = false
         
     | 
| 
      
 1324 
     | 
    
         
            +
                    if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == 'file:')) {
         
     | 
| 
      
 1325 
     | 
    
         
            +
                      dataType = dataType || mimeToDataType(xhr.getResponseHeader('content-type'))
         
     | 
| 
      
 1326 
     | 
    
         
            +
                      result = xhr.responseText
         
     | 
| 
      
 1327 
     | 
    
         
            +
             
     | 
| 
      
 1328 
     | 
    
         
            +
                      try {
         
     | 
| 
      
 1329 
     | 
    
         
            +
                        // http://perfectionkills.com/global-eval-what-are-the-options/
         
     | 
| 
      
 1330 
     | 
    
         
            +
                        if (dataType == 'script')    (1,eval)(result)
         
     | 
| 
      
 1331 
     | 
    
         
            +
                        else if (dataType == 'xml')  result = xhr.responseXML
         
     | 
| 
      
 1332 
     | 
    
         
            +
                        else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result)
         
     | 
| 
      
 1333 
     | 
    
         
            +
                      } catch (e) { error = e }
         
     | 
| 
      
 1334 
     | 
    
         
            +
             
     | 
| 
      
 1335 
     | 
    
         
            +
                      if (error) ajaxError(error, 'parsererror', xhr, settings)
         
     | 
| 
      
 1336 
     | 
    
         
            +
                      else ajaxSuccess(result, xhr, settings)
         
     | 
| 
      
 1337 
     | 
    
         
            +
                    } else {
         
     | 
| 
      
 1338 
     | 
    
         
            +
                      ajaxError(null, xhr.status ? 'error' : 'abort', xhr, settings)
         
     | 
| 
      
 1339 
     | 
    
         
            +
                    }
         
     | 
| 
      
 1340 
     | 
    
         
            +
                  }
         
     | 
| 
      
 1341 
     | 
    
         
            +
                }
         
     | 
| 
      
 1342 
     | 
    
         
            +
             
     | 
| 
      
 1343 
     | 
    
         
            +
                var async = 'async' in settings ? settings.async : true
         
     | 
| 
      
 1344 
     | 
    
         
            +
                xhr.open(settings.type, settings.url, async)
         
     | 
| 
      
 1345 
     | 
    
         
            +
             
     | 
| 
      
 1346 
     | 
    
         
            +
                for (name in settings.headers) xhr.setRequestHeader(name, settings.headers[name])
         
     | 
| 
      
 1347 
     | 
    
         
            +
             
     | 
| 
      
 1348 
     | 
    
         
            +
                if (ajaxBeforeSend(xhr, settings) === false) {
         
     | 
| 
      
 1349 
     | 
    
         
            +
                  xhr.abort()
         
     | 
| 
      
 1350 
     | 
    
         
            +
                  return false
         
     | 
| 
      
 1351 
     | 
    
         
            +
                }
         
     | 
| 
      
 1352 
     | 
    
         
            +
             
     | 
| 
      
 1353 
     | 
    
         
            +
                if (settings.timeout > 0) abortTimeout = setTimeout(function(){
         
     | 
| 
      
 1354 
     | 
    
         
            +
                    xhr.onreadystatechange = empty
         
     | 
| 
      
 1355 
     | 
    
         
            +
                    xhr.abort()
         
     | 
| 
      
 1356 
     | 
    
         
            +
                    ajaxError(null, 'timeout', xhr, settings)
         
     | 
| 
      
 1357 
     | 
    
         
            +
                  }, settings.timeout)
         
     | 
| 
      
 1358 
     | 
    
         
            +
             
     | 
| 
      
 1359 
     | 
    
         
            +
                // avoid sending empty string (#319)
         
     | 
| 
      
 1360 
     | 
    
         
            +
                xhr.send(settings.data ? settings.data : null)
         
     | 
| 
      
 1361 
     | 
    
         
            +
                return xhr
         
     | 
| 
      
 1362 
     | 
    
         
            +
              }
         
     | 
| 
      
 1363 
     | 
    
         
            +
             
     | 
| 
      
 1364 
     | 
    
         
            +
              // handle optional data/success arguments
         
     | 
| 
      
 1365 
     | 
    
         
            +
              function parseArguments(url, data, success, dataType) {
         
     | 
| 
      
 1366 
     | 
    
         
            +
                var hasData = !$.isFunction(data)
         
     | 
| 
      
 1367 
     | 
    
         
            +
                return {
         
     | 
| 
      
 1368 
     | 
    
         
            +
                  url:      url,
         
     | 
| 
      
 1369 
     | 
    
         
            +
                  data:     hasData  ? data : undefined,
         
     | 
| 
      
 1370 
     | 
    
         
            +
                  success:  !hasData ? data : $.isFunction(success) ? success : undefined,
         
     | 
| 
      
 1371 
     | 
    
         
            +
                  dataType: hasData  ? dataType || success : success
         
     | 
| 
      
 1372 
     | 
    
         
            +
                }
         
     | 
| 
      
 1373 
     | 
    
         
            +
              }
         
     | 
| 
      
 1374 
     | 
    
         
            +
             
     | 
| 
      
 1375 
     | 
    
         
            +
              $.get = function(url, data, success, dataType){
         
     | 
| 
      
 1376 
     | 
    
         
            +
                return $.ajax(parseArguments.apply(null, arguments))
         
     | 
| 
      
 1377 
     | 
    
         
            +
              }
         
     | 
| 
      
 1378 
     | 
    
         
            +
             
     | 
| 
      
 1379 
     | 
    
         
            +
              $.post = function(url, data, success, dataType){
         
     | 
| 
      
 1380 
     | 
    
         
            +
                var options = parseArguments.apply(null, arguments)
         
     | 
| 
      
 1381 
     | 
    
         
            +
                options.type = 'POST'
         
     | 
| 
      
 1382 
     | 
    
         
            +
                return $.ajax(options)
         
     | 
| 
      
 1383 
     | 
    
         
            +
              }
         
     | 
| 
      
 1384 
     | 
    
         
            +
             
     | 
| 
      
 1385 
     | 
    
         
            +
              $.getJSON = function(url, data, success){
         
     | 
| 
      
 1386 
     | 
    
         
            +
                var options = parseArguments.apply(null, arguments)
         
     | 
| 
      
 1387 
     | 
    
         
            +
                options.dataType = 'json'
         
     | 
| 
      
 1388 
     | 
    
         
            +
                return $.ajax(options)
         
     | 
| 
      
 1389 
     | 
    
         
            +
              }
         
     | 
| 
      
 1390 
     | 
    
         
            +
             
     | 
| 
      
 1391 
     | 
    
         
            +
              $.fn.load = function(url, data, success){
         
     | 
| 
      
 1392 
     | 
    
         
            +
                if (!this.length) return this
         
     | 
| 
      
 1393 
     | 
    
         
            +
                var self = this, parts = url.split(/\s/), selector,
         
     | 
| 
      
 1394 
     | 
    
         
            +
                    options = parseArguments(url, data, success),
         
     | 
| 
      
 1395 
     | 
    
         
            +
                    callback = options.success
         
     | 
| 
      
 1396 
     | 
    
         
            +
                if (parts.length > 1) options.url = parts[0], selector = parts[1]
         
     | 
| 
      
 1397 
     | 
    
         
            +
                options.success = function(response){
         
     | 
| 
      
 1398 
     | 
    
         
            +
                  self.html(selector ?
         
     | 
| 
      
 1399 
     | 
    
         
            +
                    $('<div>').html(response.replace(rscript, "")).find(selector)
         
     | 
| 
      
 1400 
     | 
    
         
            +
                    : response)
         
     | 
| 
      
 1401 
     | 
    
         
            +
                  callback && callback.apply(self, arguments)
         
     | 
| 
      
 1402 
     | 
    
         
            +
                }
         
     | 
| 
      
 1403 
     | 
    
         
            +
                $.ajax(options)
         
     | 
| 
      
 1404 
     | 
    
         
            +
                return this
         
     | 
| 
      
 1405 
     | 
    
         
            +
              }
         
     | 
| 
      
 1406 
     | 
    
         
            +
             
     | 
| 
      
 1407 
     | 
    
         
            +
              var escape = encodeURIComponent
         
     | 
| 
      
 1408 
     | 
    
         
            +
             
     | 
| 
      
 1409 
     | 
    
         
            +
              function serialize(params, obj, traditional, scope){
         
     | 
| 
      
 1410 
     | 
    
         
            +
                var type, array = $.isArray(obj)
         
     | 
| 
      
 1411 
     | 
    
         
            +
                $.each(obj, function(key, value) {
         
     | 
| 
      
 1412 
     | 
    
         
            +
                  type = $.type(value)
         
     | 
| 
      
 1413 
     | 
    
         
            +
                  if (scope) key = traditional ? scope : scope + '[' + (array ? '' : key) + ']'
         
     | 
| 
      
 1414 
     | 
    
         
            +
                  // handle data in serializeArray() format
         
     | 
| 
      
 1415 
     | 
    
         
            +
                  if (!scope && array) params.add(value.name, value.value)
         
     | 
| 
      
 1416 
     | 
    
         
            +
                  // recurse into nested objects
         
     | 
| 
      
 1417 
     | 
    
         
            +
                  else if (type == "array" || (!traditional && type == "object"))
         
     | 
| 
      
 1418 
     | 
    
         
            +
                    serialize(params, value, traditional, key)
         
     | 
| 
      
 1419 
     | 
    
         
            +
                  else params.add(key, value)
         
     | 
| 
      
 1420 
     | 
    
         
            +
                })
         
     | 
| 
      
 1421 
     | 
    
         
            +
              }
         
     | 
| 
      
 1422 
     | 
    
         
            +
             
     | 
| 
      
 1423 
     | 
    
         
            +
              $.param = function(obj, traditional){
         
     | 
| 
      
 1424 
     | 
    
         
            +
                var params = []
         
     | 
| 
      
 1425 
     | 
    
         
            +
                params.add = function(k, v){ this.push(escape(k) + '=' + escape(v)) }
         
     | 
| 
      
 1426 
     | 
    
         
            +
                serialize(params, obj, traditional)
         
     | 
| 
      
 1427 
     | 
    
         
            +
                return params.join('&').replace(/%20/g, '+')
         
     | 
| 
      
 1428 
     | 
    
         
            +
              }
         
     | 
| 
      
 1429 
     | 
    
         
            +
            })(Zepto)
         
     | 
| 
      
 1430 
     | 
    
         
            +
             
     | 
| 
      
 1431 
     | 
    
         
            +
            ;(function ($) {
         
     | 
| 
      
 1432 
     | 
    
         
            +
              $.fn.serializeArray = function () {
         
     | 
| 
      
 1433 
     | 
    
         
            +
                var result = [], el
         
     | 
| 
      
 1434 
     | 
    
         
            +
                $( Array.prototype.slice.call(this.get(0).elements) ).each(function () {
         
     | 
| 
      
 1435 
     | 
    
         
            +
                  el = $(this)
         
     | 
| 
      
 1436 
     | 
    
         
            +
                  var type = el.attr('type')
         
     | 
| 
      
 1437 
     | 
    
         
            +
                  if (this.nodeName.toLowerCase() != 'fieldset' &&
         
     | 
| 
      
 1438 
     | 
    
         
            +
                    !this.disabled && type != 'submit' && type != 'reset' && type != 'button' &&
         
     | 
| 
      
 1439 
     | 
    
         
            +
                    ((type != 'radio' && type != 'checkbox') || this.checked))
         
     | 
| 
      
 1440 
     | 
    
         
            +
                    result.push({
         
     | 
| 
      
 1441 
     | 
    
         
            +
                      name: el.attr('name'),
         
     | 
| 
      
 1442 
     | 
    
         
            +
                      value: el.val()
         
     | 
| 
      
 1443 
     | 
    
         
            +
                    })
         
     | 
| 
      
 1444 
     | 
    
         
            +
                })
         
     | 
| 
      
 1445 
     | 
    
         
            +
                return result
         
     | 
| 
      
 1446 
     | 
    
         
            +
              }
         
     | 
| 
      
 1447 
     | 
    
         
            +
             
     | 
| 
      
 1448 
     | 
    
         
            +
              $.fn.serialize = function () {
         
     | 
| 
      
 1449 
     | 
    
         
            +
                var result = []
         
     | 
| 
      
 1450 
     | 
    
         
            +
                this.serializeArray().forEach(function (elm) {
         
     | 
| 
      
 1451 
     | 
    
         
            +
                  result.push( encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.value) )
         
     | 
| 
      
 1452 
     | 
    
         
            +
                })
         
     | 
| 
      
 1453 
     | 
    
         
            +
                return result.join('&')
         
     | 
| 
      
 1454 
     | 
    
         
            +
              }
         
     | 
| 
      
 1455 
     | 
    
         
            +
             
     | 
| 
      
 1456 
     | 
    
         
            +
              $.fn.submit = function (callback) {
         
     | 
| 
      
 1457 
     | 
    
         
            +
                if (callback) this.bind('submit', callback)
         
     | 
| 
      
 1458 
     | 
    
         
            +
                else if (this.length) {
         
     | 
| 
      
 1459 
     | 
    
         
            +
                  var event = $.Event('submit')
         
     | 
| 
      
 1460 
     | 
    
         
            +
                  this.eq(0).trigger(event)
         
     | 
| 
      
 1461 
     | 
    
         
            +
                  if (!event.defaultPrevented) this.get(0).submit()
         
     | 
| 
      
 1462 
     | 
    
         
            +
                }
         
     | 
| 
      
 1463 
     | 
    
         
            +
                return this
         
     | 
| 
      
 1464 
     | 
    
         
            +
              }
         
     | 
| 
      
 1465 
     | 
    
         
            +
             
     | 
| 
      
 1466 
     | 
    
         
            +
            })(Zepto)
         
     | 
| 
      
 1467 
     | 
    
         
            +
             
     | 
| 
      
 1468 
     | 
    
         
            +
            ;(function($, undefined){
         
     | 
| 
      
 1469 
     | 
    
         
            +
              var prefix = '', eventPrefix, endEventName, endAnimationName,
         
     | 
| 
      
 1470 
     | 
    
         
            +
                vendors = { Webkit: 'webkit', Moz: '', O: 'o', ms: 'MS' },
         
     | 
| 
      
 1471 
     | 
    
         
            +
                document = window.document, testEl = document.createElement('div'),
         
     | 
| 
      
 1472 
     | 
    
         
            +
                supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i,
         
     | 
| 
      
 1473 
     | 
    
         
            +
                transform,
         
     | 
| 
      
 1474 
     | 
    
         
            +
                transitionProperty, transitionDuration, transitionTiming,
         
     | 
| 
      
 1475 
     | 
    
         
            +
                animationName, animationDuration, animationTiming,
         
     | 
| 
      
 1476 
     | 
    
         
            +
                cssReset = {}
         
     | 
| 
      
 1477 
     | 
    
         
            +
             
     | 
| 
      
 1478 
     | 
    
         
            +
              function dasherize(str) { return downcase(str.replace(/([a-z])([A-Z])/, '$1-$2')) }
         
     | 
| 
      
 1479 
     | 
    
         
            +
              function downcase(str) { return str.toLowerCase() }
         
     | 
| 
      
 1480 
     | 
    
         
            +
              function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : downcase(name) }
         
     | 
| 
      
 1481 
     | 
    
         
            +
             
     | 
| 
      
 1482 
     | 
    
         
            +
              $.each(vendors, function(vendor, event){
         
     | 
| 
      
 1483 
     | 
    
         
            +
                if (testEl.style[vendor + 'TransitionProperty'] !== undefined) {
         
     | 
| 
      
 1484 
     | 
    
         
            +
                  prefix = '-' + downcase(vendor) + '-'
         
     | 
| 
      
 1485 
     | 
    
         
            +
                  eventPrefix = event
         
     | 
| 
      
 1486 
     | 
    
         
            +
                  return false
         
     | 
| 
      
 1487 
     | 
    
         
            +
                }
         
     | 
| 
      
 1488 
     | 
    
         
            +
              })
         
     | 
| 
      
 1489 
     | 
    
         
            +
             
     | 
| 
      
 1490 
     | 
    
         
            +
              transform = prefix + 'transform'
         
     | 
| 
      
 1491 
     | 
    
         
            +
              cssReset[transitionProperty = prefix + 'transition-property'] =
         
     | 
| 
      
 1492 
     | 
    
         
            +
              cssReset[transitionDuration = prefix + 'transition-duration'] =
         
     | 
| 
      
 1493 
     | 
    
         
            +
              cssReset[transitionTiming   = prefix + 'transition-timing-function'] =
         
     | 
| 
      
 1494 
     | 
    
         
            +
              cssReset[animationName      = prefix + 'animation-name'] =
         
     | 
| 
      
 1495 
     | 
    
         
            +
              cssReset[animationDuration  = prefix + 'animation-duration'] =
         
     | 
| 
      
 1496 
     | 
    
         
            +
              cssReset[animationTiming    = prefix + 'animation-timing-function'] = ''
         
     | 
| 
      
 1497 
     | 
    
         
            +
             
     | 
| 
      
 1498 
     | 
    
         
            +
              $.fx = {
         
     | 
| 
      
 1499 
     | 
    
         
            +
                off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined),
         
     | 
| 
      
 1500 
     | 
    
         
            +
                speeds: { _default: 400, fast: 200, slow: 600 },
         
     | 
| 
      
 1501 
     | 
    
         
            +
                cssPrefix: prefix,
         
     | 
| 
      
 1502 
     | 
    
         
            +
                transitionEnd: normalizeEvent('TransitionEnd'),
         
     | 
| 
      
 1503 
     | 
    
         
            +
                animationEnd: normalizeEvent('AnimationEnd')
         
     | 
| 
      
 1504 
     | 
    
         
            +
              }
         
     | 
| 
      
 1505 
     | 
    
         
            +
             
     | 
| 
      
 1506 
     | 
    
         
            +
              $.fn.animate = function(properties, duration, ease, callback){
         
     | 
| 
      
 1507 
     | 
    
         
            +
                if ($.isPlainObject(duration))
         
     | 
| 
      
 1508 
     | 
    
         
            +
                  ease = duration.easing, callback = duration.complete, duration = duration.duration
         
     | 
| 
      
 1509 
     | 
    
         
            +
                if (duration) duration = (typeof duration == 'number' ? duration :
         
     | 
| 
      
 1510 
     | 
    
         
            +
                                ($.fx.speeds[duration] || $.fx.speeds._default)) / 1000
         
     | 
| 
      
 1511 
     | 
    
         
            +
                return this.anim(properties, duration, ease, callback)
         
     | 
| 
      
 1512 
     | 
    
         
            +
              }
         
     | 
| 
      
 1513 
     | 
    
         
            +
             
     | 
| 
      
 1514 
     | 
    
         
            +
              $.fn.anim = function(properties, duration, ease, callback){
         
     | 
| 
      
 1515 
     | 
    
         
            +
                var key, cssValues = {}, cssProperties, transforms = '',
         
     | 
| 
      
 1516 
     | 
    
         
            +
                    that = this, wrappedCallback, endEvent = $.fx.transitionEnd
         
     | 
| 
      
 1517 
     | 
    
         
            +
             
     | 
| 
      
 1518 
     | 
    
         
            +
                if (duration === undefined) duration = 0.4
         
     | 
| 
      
 1519 
     | 
    
         
            +
                if ($.fx.off) duration = 0
         
     | 
| 
      
 1520 
     | 
    
         
            +
             
     | 
| 
      
 1521 
     | 
    
         
            +
                if (typeof properties == 'string') {
         
     | 
| 
      
 1522 
     | 
    
         
            +
                  // keyframe animation
         
     | 
| 
      
 1523 
     | 
    
         
            +
                  cssValues[animationName] = properties
         
     | 
| 
      
 1524 
     | 
    
         
            +
                  cssValues[animationDuration] = duration + 's'
         
     | 
| 
      
 1525 
     | 
    
         
            +
                  cssValues[animationTiming] = (ease || 'linear')
         
     | 
| 
      
 1526 
     | 
    
         
            +
                  endEvent = $.fx.animationEnd
         
     | 
| 
      
 1527 
     | 
    
         
            +
                } else {
         
     | 
| 
      
 1528 
     | 
    
         
            +
                  cssProperties = []
         
     | 
| 
      
 1529 
     | 
    
         
            +
                  // CSS transitions
         
     | 
| 
      
 1530 
     | 
    
         
            +
                  for (key in properties)
         
     | 
| 
      
 1531 
     | 
    
         
            +
                    if (supportedTransforms.test(key)) transforms += key + '(' + properties[key] + ') '
         
     | 
| 
      
 1532 
     | 
    
         
            +
                    else cssValues[key] = properties[key], cssProperties.push(dasherize(key))
         
     | 
| 
      
 1533 
     | 
    
         
            +
             
     | 
| 
      
 1534 
     | 
    
         
            +
                  if (transforms) cssValues[transform] = transforms, cssProperties.push(transform)
         
     | 
| 
      
 1535 
     | 
    
         
            +
                  if (duration > 0 && typeof properties === 'object') {
         
     | 
| 
      
 1536 
     | 
    
         
            +
                    cssValues[transitionProperty] = cssProperties.join(', ')
         
     | 
| 
      
 1537 
     | 
    
         
            +
                    cssValues[transitionDuration] = duration + 's'
         
     | 
| 
      
 1538 
     | 
    
         
            +
                    cssValues[transitionTiming] = (ease || 'linear')
         
     | 
| 
      
 1539 
     | 
    
         
            +
                  }
         
     | 
| 
      
 1540 
     | 
    
         
            +
                }
         
     | 
| 
      
 1541 
     | 
    
         
            +
             
     | 
| 
      
 1542 
     | 
    
         
            +
                wrappedCallback = function(event){
         
     | 
| 
      
 1543 
     | 
    
         
            +
                  if (typeof event !== 'undefined') {
         
     | 
| 
      
 1544 
     | 
    
         
            +
                    if (event.target !== event.currentTarget) return // makes sure the event didn't bubble from "below"
         
     | 
| 
      
 1545 
     | 
    
         
            +
                    $(event.target).unbind(endEvent, wrappedCallback)
         
     | 
| 
      
 1546 
     | 
    
         
            +
                  }
         
     | 
| 
      
 1547 
     | 
    
         
            +
                  $(this).css(cssReset)
         
     | 
| 
      
 1548 
     | 
    
         
            +
                  callback && callback.call(this)
         
     | 
| 
      
 1549 
     | 
    
         
            +
                }
         
     | 
| 
      
 1550 
     | 
    
         
            +
                if (duration > 0) this.bind(endEvent, wrappedCallback)
         
     | 
| 
      
 1551 
     | 
    
         
            +
             
     | 
| 
      
 1552 
     | 
    
         
            +
                // trigger page reflow so new elements can animate
         
     | 
| 
      
 1553 
     | 
    
         
            +
                this.size() && this.get(0).clientLeft
         
     | 
| 
      
 1554 
     | 
    
         
            +
             
     | 
| 
      
 1555 
     | 
    
         
            +
                this.css(cssValues)
         
     | 
| 
      
 1556 
     | 
    
         
            +
             
     | 
| 
      
 1557 
     | 
    
         
            +
                if (duration <= 0) setTimeout(function() {
         
     | 
| 
      
 1558 
     | 
    
         
            +
                  that.each(function(){ wrappedCallback.call(this) })
         
     | 
| 
      
 1559 
     | 
    
         
            +
                }, 0)
         
     | 
| 
      
 1560 
     | 
    
         
            +
             
     | 
| 
      
 1561 
     | 
    
         
            +
                return this
         
     | 
| 
      
 1562 
     | 
    
         
            +
              }
         
     | 
| 
      
 1563 
     | 
    
         
            +
             
     | 
| 
      
 1564 
     | 
    
         
            +
              testEl = null
         
     | 
| 
      
 1565 
     | 
    
         
            +
            })(Zepto)
         
     | 
| 
      
 1566 
     | 
    
         
            +
             
     | 
| 
      
 1567 
     | 
    
         
            +
            //     Zepto.js
         
     | 
| 
      
 1568 
     | 
    
         
            +
            //     (c) 2010-2012 Thomas Fuchs
         
     | 
| 
      
 1569 
     | 
    
         
            +
            //     Zepto.js may be freely distributed under the MIT license.
         
     | 
| 
      
 1570 
     | 
    
         
            +
             
     | 
| 
      
 1571 
     | 
    
         
            +
            ;(function($, undefined){
         
     | 
| 
      
 1572 
     | 
    
         
            +
              var document = window.document, docElem = document.documentElement,
         
     | 
| 
      
 1573 
     | 
    
         
            +
                origShow = $.fn.show, origHide = $.fn.hide, origToggle = $.fn.toggle
         
     | 
| 
      
 1574 
     | 
    
         
            +
             
     | 
| 
      
 1575 
     | 
    
         
            +
              function anim(el, speed, opacity, scale, callback) {
         
     | 
| 
      
 1576 
     | 
    
         
            +
                if (typeof speed == 'function' && !callback) callback = speed, speed = undefined
         
     | 
| 
      
 1577 
     | 
    
         
            +
                var props = { opacity: opacity }
         
     | 
| 
      
 1578 
     | 
    
         
            +
                if (scale) {
         
     | 
| 
      
 1579 
     | 
    
         
            +
                  props.scale = scale
         
     | 
| 
      
 1580 
     | 
    
         
            +
                  el.css($.fx.cssPrefix + 'transform-origin', '0 0')
         
     | 
| 
      
 1581 
     | 
    
         
            +
                }
         
     | 
| 
      
 1582 
     | 
    
         
            +
                return el.animate(props, speed, null, callback)
         
     | 
| 
      
 1583 
     | 
    
         
            +
              }
         
     | 
| 
      
 1584 
     | 
    
         
            +
             
     | 
| 
      
 1585 
     | 
    
         
            +
              function hide(el, speed, scale, callback) {
         
     | 
| 
      
 1586 
     | 
    
         
            +
                return anim(el, speed, 0, scale, function(){
         
     | 
| 
      
 1587 
     | 
    
         
            +
                  origHide.call($(this))
         
     | 
| 
      
 1588 
     | 
    
         
            +
                  callback && callback.call(this)
         
     | 
| 
      
 1589 
     | 
    
         
            +
                })
         
     | 
| 
      
 1590 
     | 
    
         
            +
              }
         
     | 
| 
      
 1591 
     | 
    
         
            +
             
     | 
| 
      
 1592 
     | 
    
         
            +
              $.fn.show = function(speed, callback) {
         
     | 
| 
      
 1593 
     | 
    
         
            +
                origShow.call(this)
         
     | 
| 
      
 1594 
     | 
    
         
            +
                if (speed === undefined) speed = 0
         
     | 
| 
      
 1595 
     | 
    
         
            +
                else this.css('opacity', 0)
         
     | 
| 
      
 1596 
     | 
    
         
            +
                return anim(this, speed, 1, '1,1', callback)
         
     | 
| 
      
 1597 
     | 
    
         
            +
              }
         
     | 
| 
      
 1598 
     | 
    
         
            +
             
     | 
| 
      
 1599 
     | 
    
         
            +
              $.fn.hide = function(speed, callback) {
         
     | 
| 
      
 1600 
     | 
    
         
            +
                if (speed === undefined) return origHide.call(this)
         
     | 
| 
      
 1601 
     | 
    
         
            +
                else return hide(this, speed, '0,0', callback)
         
     | 
| 
      
 1602 
     | 
    
         
            +
              }
         
     | 
| 
      
 1603 
     | 
    
         
            +
             
     | 
| 
      
 1604 
     | 
    
         
            +
              $.fn.toggle = function(speed, callback) {
         
     | 
| 
      
 1605 
     | 
    
         
            +
                if (speed === undefined || typeof speed == 'boolean')
         
     | 
| 
      
 1606 
     | 
    
         
            +
                  return origToggle.call(this, speed)
         
     | 
| 
      
 1607 
     | 
    
         
            +
                else return this.each(function(){
         
     | 
| 
      
 1608 
     | 
    
         
            +
                  var el = $(this)
         
     | 
| 
      
 1609 
     | 
    
         
            +
                  el[el.css('display') == 'none' ? 'show' : 'hide'](speed, callback)
         
     | 
| 
      
 1610 
     | 
    
         
            +
                })
         
     | 
| 
      
 1611 
     | 
    
         
            +
              }
         
     | 
| 
      
 1612 
     | 
    
         
            +
             
     | 
| 
      
 1613 
     | 
    
         
            +
              $.fn.fadeTo = function(speed, opacity, callback) {
         
     | 
| 
      
 1614 
     | 
    
         
            +
                return anim(this, speed, opacity, null, callback)
         
     | 
| 
      
 1615 
     | 
    
         
            +
              }
         
     | 
| 
      
 1616 
     | 
    
         
            +
             
     | 
| 
      
 1617 
     | 
    
         
            +
              $.fn.fadeIn = function(speed, callback) {
         
     | 
| 
      
 1618 
     | 
    
         
            +
                var target = this.css('opacity')
         
     | 
| 
      
 1619 
     | 
    
         
            +
                if (target > 0) this.css('opacity', 0)
         
     | 
| 
      
 1620 
     | 
    
         
            +
                else target = 1
         
     | 
| 
      
 1621 
     | 
    
         
            +
                return origShow.call(this).fadeTo(speed, target, callback)
         
     | 
| 
      
 1622 
     | 
    
         
            +
              }
         
     | 
| 
      
 1623 
     | 
    
         
            +
             
     | 
| 
      
 1624 
     | 
    
         
            +
              $.fn.fadeOut = function(speed, callback) {
         
     | 
| 
      
 1625 
     | 
    
         
            +
                return hide(this, speed, null, callback)
         
     | 
| 
      
 1626 
     | 
    
         
            +
              }
         
     | 
| 
      
 1627 
     | 
    
         
            +
             
     | 
| 
      
 1628 
     | 
    
         
            +
              $.fn.fadeToggle = function(speed, callback) {
         
     | 
| 
      
 1629 
     | 
    
         
            +
                return this.each(function(){
         
     | 
| 
      
 1630 
     | 
    
         
            +
                  var el = $(this)
         
     | 
| 
      
 1631 
     | 
    
         
            +
                  el[
         
     | 
| 
      
 1632 
     | 
    
         
            +
                    (el.css('opacity') == 0 || el.css('display') == 'none') ? 'fadeIn' : 'fadeOut'
         
     | 
| 
      
 1633 
     | 
    
         
            +
                  ](speed, callback)
         
     | 
| 
      
 1634 
     | 
    
         
            +
                })
         
     | 
| 
      
 1635 
     | 
    
         
            +
              }
         
     | 
| 
      
 1636 
     | 
    
         
            +
             
     | 
| 
      
 1637 
     | 
    
         
            +
            })(Zepto)
         
     | 
| 
      
 1638 
     | 
    
         
            +
             
     | 
| 
      
 1639 
     | 
    
         
            +
            //     Zepto.js
         
     | 
| 
      
 1640 
     | 
    
         
            +
            //     (c) 2010-2012 Thomas Fuchs
         
     | 
| 
      
 1641 
     | 
    
         
            +
            //     Zepto.js may be freely distributed under the MIT license.
         
     | 
| 
      
 1642 
     | 
    
         
            +
             
     | 
| 
      
 1643 
     | 
    
         
            +
            ;(function($){
         
     | 
| 
      
 1644 
     | 
    
         
            +
              var cache = [], timeout
         
     | 
| 
      
 1645 
     | 
    
         
            +
             
     | 
| 
      
 1646 
     | 
    
         
            +
              $.fn.remove = function(){
         
     | 
| 
      
 1647 
     | 
    
         
            +
                return this.each(function(){
         
     | 
| 
      
 1648 
     | 
    
         
            +
                  if(this.parentNode){
         
     | 
| 
      
 1649 
     | 
    
         
            +
                    if(this.tagName === 'IMG'){
         
     | 
| 
      
 1650 
     | 
    
         
            +
                      cache.push(this)
         
     | 
| 
      
 1651 
     | 
    
         
            +
                      this.src = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs='
         
     | 
| 
      
 1652 
     | 
    
         
            +
                      if (timeout) clearTimeout(timeout)
         
     | 
| 
      
 1653 
     | 
    
         
            +
                      timeout = setTimeout(function(){ cache = [] }, 60000)
         
     | 
| 
      
 1654 
     | 
    
         
            +
                    }
         
     | 
| 
      
 1655 
     | 
    
         
            +
                    this.parentNode.removeChild(this)
         
     | 
| 
      
 1656 
     | 
    
         
            +
                  }
         
     | 
| 
      
 1657 
     | 
    
         
            +
                })
         
     | 
| 
      
 1658 
     | 
    
         
            +
              }
         
     | 
| 
      
 1659 
     | 
    
         
            +
            })(Zepto)
         
     | 
| 
      
 1660 
     | 
    
         
            +
             
     | 
| 
      
 1661 
     | 
    
         
            +
            //     Zepto.js
         
     | 
| 
      
 1662 
     | 
    
         
            +
            //     (c) 2010-2012 Thomas Fuchs
         
     | 
| 
      
 1663 
     | 
    
         
            +
            //     Zepto.js may be freely distributed under the MIT license.
         
     | 
| 
      
 1664 
     | 
    
         
            +
             
     | 
| 
      
 1665 
     | 
    
         
            +
            // The following code is heavily inspired by jQuery's $.fn.data()
         
     | 
| 
      
 1666 
     | 
    
         
            +
             
     | 
| 
      
 1667 
     | 
    
         
            +
            ;(function($) {
         
     | 
| 
      
 1668 
     | 
    
         
            +
              var data = {}, dataAttr = $.fn.data, camelize = $.camelCase,
         
     | 
| 
      
 1669 
     | 
    
         
            +
                exp = $.expando = 'Zepto' + (+new Date())
         
     | 
| 
      
 1670 
     | 
    
         
            +
             
     | 
| 
      
 1671 
     | 
    
         
            +
              // Get value from node:
         
     | 
| 
      
 1672 
     | 
    
         
            +
              // 1. first try key as given,
         
     | 
| 
      
 1673 
     | 
    
         
            +
              // 2. then try camelized key,
         
     | 
| 
      
 1674 
     | 
    
         
            +
              // 3. fall back to reading "data-*" attribute.
         
     | 
| 
      
 1675 
     | 
    
         
            +
              function getData(node, name) {
         
     | 
| 
      
 1676 
     | 
    
         
            +
                var id = node[exp], store = id && data[id]
         
     | 
| 
      
 1677 
     | 
    
         
            +
                if (name === undefined) return store || setData(node)
         
     | 
| 
      
 1678 
     | 
    
         
            +
                else {
         
     | 
| 
      
 1679 
     | 
    
         
            +
                  if (store) {
         
     | 
| 
      
 1680 
     | 
    
         
            +
                    if (name in store) return store[name]
         
     | 
| 
      
 1681 
     | 
    
         
            +
                    var camelName = camelize(name)
         
     | 
| 
      
 1682 
     | 
    
         
            +
                    if (camelName in store) return store[camelName]
         
     | 
| 
      
 1683 
     | 
    
         
            +
                  }
         
     | 
| 
      
 1684 
     | 
    
         
            +
                  return dataAttr.call($(node), name)
         
     | 
| 
      
 1685 
     | 
    
         
            +
                }
         
     | 
| 
      
 1686 
     | 
    
         
            +
              }
         
     | 
| 
      
 1687 
     | 
    
         
            +
             
     | 
| 
      
 1688 
     | 
    
         
            +
              // Store value under camelized key on node
         
     | 
| 
      
 1689 
     | 
    
         
            +
              function setData(node, name, value) {
         
     | 
| 
      
 1690 
     | 
    
         
            +
                var id = node[exp] || (node[exp] = ++$.uuid),
         
     | 
| 
      
 1691 
     | 
    
         
            +
                  store = data[id] || (data[id] = attributeData(node))
         
     | 
| 
      
 1692 
     | 
    
         
            +
                if (name !== undefined) store[camelize(name)] = value
         
     | 
| 
      
 1693 
     | 
    
         
            +
                return store
         
     | 
| 
      
 1694 
     | 
    
         
            +
              }
         
     | 
| 
      
 1695 
     | 
    
         
            +
             
     | 
| 
      
 1696 
     | 
    
         
            +
              // Read all "data-*" attributes from a node
         
     | 
| 
      
 1697 
     | 
    
         
            +
              function attributeData(node) {
         
     | 
| 
      
 1698 
     | 
    
         
            +
                var store = {}
         
     | 
| 
      
 1699 
     | 
    
         
            +
                $.each(node.attributes, function(i, attr){
         
     | 
| 
      
 1700 
     | 
    
         
            +
                  if (attr.name.indexOf('data-') == 0)
         
     | 
| 
      
 1701 
     | 
    
         
            +
                    store[camelize(attr.name.replace('data-', ''))] =
         
     | 
| 
      
 1702 
     | 
    
         
            +
                      $.zepto.deserializeValue(attr.value)
         
     | 
| 
      
 1703 
     | 
    
         
            +
                })
         
     | 
| 
      
 1704 
     | 
    
         
            +
                return store
         
     | 
| 
      
 1705 
     | 
    
         
            +
              }
         
     | 
| 
      
 1706 
     | 
    
         
            +
             
     | 
| 
      
 1707 
     | 
    
         
            +
              $.fn.data = function(name, value) {
         
     | 
| 
      
 1708 
     | 
    
         
            +
                return value === undefined ?
         
     | 
| 
      
 1709 
     | 
    
         
            +
                  // set multiple values via object
         
     | 
| 
      
 1710 
     | 
    
         
            +
                  $.isPlainObject(name) ?
         
     | 
| 
      
 1711 
     | 
    
         
            +
                    this.each(function(i, node){
         
     | 
| 
      
 1712 
     | 
    
         
            +
                      $.each(name, function(key, value){ setData(node, key, value) })
         
     | 
| 
      
 1713 
     | 
    
         
            +
                    }) :
         
     | 
| 
      
 1714 
     | 
    
         
            +
                    // get value from first element
         
     | 
| 
      
 1715 
     | 
    
         
            +
                    this.length == 0 ? undefined : getData(this[0], name) :
         
     | 
| 
      
 1716 
     | 
    
         
            +
                  // set value on all elements
         
     | 
| 
      
 1717 
     | 
    
         
            +
                  this.each(function(){ setData(this, name, value) })
         
     | 
| 
      
 1718 
     | 
    
         
            +
              }
         
     | 
| 
      
 1719 
     | 
    
         
            +
             
     | 
| 
      
 1720 
     | 
    
         
            +
              $.fn.removeData = function(names) {
         
     | 
| 
      
 1721 
     | 
    
         
            +
                if (typeof names == 'string') names = names.split(/\s+/)
         
     | 
| 
      
 1722 
     | 
    
         
            +
                return this.each(function(){
         
     | 
| 
      
 1723 
     | 
    
         
            +
                  var id = this[exp], store = id && data[id]
         
     | 
| 
      
 1724 
     | 
    
         
            +
                  if (store) $.each(names, function(){ delete store[camelize(this)] })
         
     | 
| 
      
 1725 
     | 
    
         
            +
                })
         
     | 
| 
      
 1726 
     | 
    
         
            +
              }
         
     | 
| 
      
 1727 
     | 
    
         
            +
            })(Zepto)
         
     | 
| 
      
 1728 
     | 
    
         
            +
             
     | 
| 
      
 1729 
     | 
    
         
            +
            ;(function($){
         
     | 
| 
      
 1730 
     | 
    
         
            +
              var zepto = $.zepto, oldQsa = zepto.qsa, oldMatches = zepto.matches
         
     | 
| 
      
 1731 
     | 
    
         
            +
             
     | 
| 
      
 1732 
     | 
    
         
            +
              function visible(elem){
         
     | 
| 
      
 1733 
     | 
    
         
            +
                elem = $(elem)
         
     | 
| 
      
 1734 
     | 
    
         
            +
                return !!(elem.width() || elem.height()) && elem.css("display") !== "none"
         
     | 
| 
      
 1735 
     | 
    
         
            +
              }
         
     | 
| 
      
 1736 
     | 
    
         
            +
             
     | 
| 
      
 1737 
     | 
    
         
            +
              // Implements a subset from:
         
     | 
| 
      
 1738 
     | 
    
         
            +
              // http://api.jquery.com/category/selectors/jquery-selector-extensions/
         
     | 
| 
      
 1739 
     | 
    
         
            +
              //
         
     | 
| 
      
 1740 
     | 
    
         
            +
              // Each filter function receives the current index, all nodes in the
         
     | 
| 
      
 1741 
     | 
    
         
            +
              // considered set, and a value if there were parentheses. The value
         
     | 
| 
      
 1742 
     | 
    
         
            +
              // of `this` is the node currently being considered. The function returns the
         
     | 
| 
      
 1743 
     | 
    
         
            +
              // resulting node(s), null, or undefined.
         
     | 
| 
      
 1744 
     | 
    
         
            +
              //
         
     | 
| 
      
 1745 
     | 
    
         
            +
              // Complex selectors are not supported:
         
     | 
| 
      
 1746 
     | 
    
         
            +
              //   li:has(label:contains("foo")) + li:has(label:contains("bar"))
         
     | 
| 
      
 1747 
     | 
    
         
            +
              //   ul.inner:first > li
         
     | 
| 
      
 1748 
     | 
    
         
            +
              var filters = $.expr[':'] = {
         
     | 
| 
      
 1749 
     | 
    
         
            +
                visible:  function(){ if (visible(this)) return this },
         
     | 
| 
      
 1750 
     | 
    
         
            +
                hidden:   function(){ if (!visible(this)) return this },
         
     | 
| 
      
 1751 
     | 
    
         
            +
                selected: function(){ if (this.selected) return this },
         
     | 
| 
      
 1752 
     | 
    
         
            +
                checked:  function(){ if (this.checked) return this },
         
     | 
| 
      
 1753 
     | 
    
         
            +
                parent:   function(){ return this.parentNode },
         
     | 
| 
      
 1754 
     | 
    
         
            +
                first:    function(idx){ if (idx === 0) return this },
         
     | 
| 
      
 1755 
     | 
    
         
            +
                last:     function(idx, nodes){ if (idx === nodes.length - 1) return this },
         
     | 
| 
      
 1756 
     | 
    
         
            +
                eq:       function(idx, _, value){ if (idx === value) return this },
         
     | 
| 
      
 1757 
     | 
    
         
            +
                contains: function(idx, _, text){ if ($(this).text().indexOf(text) > -1) return this },
         
     | 
| 
      
 1758 
     | 
    
         
            +
                has:      function(idx, _, sel){ if (zepto.qsa(this, sel).length) return this }
         
     | 
| 
      
 1759 
     | 
    
         
            +
              }
         
     | 
| 
      
 1760 
     | 
    
         
            +
             
     | 
| 
      
 1761 
     | 
    
         
            +
              var filterRe = new RegExp('(.*):(\\w+)(?:\\(([^)]+)\\))?$\\s*'),
         
     | 
| 
      
 1762 
     | 
    
         
            +
                  childRe  = /^\s*>/,
         
     | 
| 
      
 1763 
     | 
    
         
            +
                  classTag = 'Zepto' + (+new Date())
         
     | 
| 
      
 1764 
     | 
    
         
            +
             
     | 
| 
      
 1765 
     | 
    
         
            +
              function process(sel, fn) {
         
     | 
| 
      
 1766 
     | 
    
         
            +
                // quote the hash in `a[href^=#]` expression
         
     | 
| 
      
 1767 
     | 
    
         
            +
                sel = sel.replace(/=#\]/g, '="#"]')
         
     | 
| 
      
 1768 
     | 
    
         
            +
                var filter, arg, match = filterRe.exec(sel)
         
     | 
| 
      
 1769 
     | 
    
         
            +
                if (match && match[2] in filters) {
         
     | 
| 
      
 1770 
     | 
    
         
            +
                  filter = filters[match[2]], arg = match[3]
         
     | 
| 
      
 1771 
     | 
    
         
            +
                  sel = match[1]
         
     | 
| 
      
 1772 
     | 
    
         
            +
                  if (arg) {
         
     | 
| 
      
 1773 
     | 
    
         
            +
                    var num = Number(arg)
         
     | 
| 
      
 1774 
     | 
    
         
            +
                    if (isNaN(num)) arg = arg.replace(/^["']|["']$/g, '')
         
     | 
| 
      
 1775 
     | 
    
         
            +
                    else arg = num
         
     | 
| 
      
 1776 
     | 
    
         
            +
                  }
         
     | 
| 
      
 1777 
     | 
    
         
            +
                }
         
     | 
| 
      
 1778 
     | 
    
         
            +
                return fn(sel, filter, arg)
         
     | 
| 
      
 1779 
     | 
    
         
            +
              }
         
     | 
| 
      
 1780 
     | 
    
         
            +
             
     | 
| 
      
 1781 
     | 
    
         
            +
              zepto.qsa = function(node, selector) {
         
     | 
| 
      
 1782 
     | 
    
         
            +
                return process(selector, function(sel, filter, arg){
         
     | 
| 
      
 1783 
     | 
    
         
            +
                  try {
         
     | 
| 
      
 1784 
     | 
    
         
            +
                    var taggedParent
         
     | 
| 
      
 1785 
     | 
    
         
            +
                    if (!sel && filter) sel = '*'
         
     | 
| 
      
 1786 
     | 
    
         
            +
                    else if (childRe.test(sel))
         
     | 
| 
      
 1787 
     | 
    
         
            +
                      // support "> *" child queries by tagging the parent node with a
         
     | 
| 
      
 1788 
     | 
    
         
            +
                      // unique class and prepending that classname onto the selector
         
     | 
| 
      
 1789 
     | 
    
         
            +
                      taggedParent = $(node).addClass(classTag), sel = '.'+classTag+' '+sel
         
     | 
| 
      
 1790 
     | 
    
         
            +
             
     | 
| 
      
 1791 
     | 
    
         
            +
                    var nodes = oldQsa(node, sel)
         
     | 
| 
      
 1792 
     | 
    
         
            +
                  } catch(e) {
         
     | 
| 
      
 1793 
     | 
    
         
            +
                    console.error('error performing selector: %o', selector)
         
     | 
| 
      
 1794 
     | 
    
         
            +
                    throw e
         
     | 
| 
      
 1795 
     | 
    
         
            +
                  } finally {
         
     | 
| 
      
 1796 
     | 
    
         
            +
                    if (taggedParent) taggedParent.removeClass(classTag)
         
     | 
| 
      
 1797 
     | 
    
         
            +
                  }
         
     | 
| 
      
 1798 
     | 
    
         
            +
                  return !filter ? nodes :
         
     | 
| 
      
 1799 
     | 
    
         
            +
                    zepto.uniq($.map(nodes, function(n, i){ return filter.call(n, i, nodes, arg) }))
         
     | 
| 
      
 1800 
     | 
    
         
            +
                })
         
     | 
| 
      
 1801 
     | 
    
         
            +
              }
         
     | 
| 
      
 1802 
     | 
    
         
            +
             
     | 
| 
      
 1803 
     | 
    
         
            +
              zepto.matches = function(node, selector){
         
     | 
| 
      
 1804 
     | 
    
         
            +
                return process(selector, function(sel, filter, arg){
         
     | 
| 
      
 1805 
     | 
    
         
            +
                  return (!sel || oldMatches(node, sel)) &&
         
     | 
| 
      
 1806 
     | 
    
         
            +
                    (!filter || filter.call(node, null, arg) === node)
         
     | 
| 
      
 1807 
     | 
    
         
            +
                })
         
     | 
| 
      
 1808 
     | 
    
         
            +
              }
         
     | 
| 
      
 1809 
     | 
    
         
            +
            })(Zepto)
         
     | 
| 
      
 1810 
     | 
    
         
            +
             
     | 
| 
      
 1811 
     | 
    
         
            +
            //     Zepto.js
         
     | 
| 
      
 1812 
     | 
    
         
            +
            //     (c) 2010-2012 Thomas Fuchs
         
     | 
| 
      
 1813 
     | 
    
         
            +
            //     Zepto.js may be freely distributed under the MIT license.
         
     | 
| 
      
 1814 
     | 
    
         
            +
             
     | 
| 
      
 1815 
     | 
    
         
            +
            ;(function($){
         
     | 
| 
      
 1816 
     | 
    
         
            +
              $.fn.end = function(){
         
     | 
| 
      
 1817 
     | 
    
         
            +
                return this.prevObject || $()
         
     | 
| 
      
 1818 
     | 
    
         
            +
              }
         
     | 
| 
      
 1819 
     | 
    
         
            +
             
     | 
| 
      
 1820 
     | 
    
         
            +
              $.fn.andSelf = function(){
         
     | 
| 
      
 1821 
     | 
    
         
            +
                return this.add(this.prevObject || $())
         
     | 
| 
      
 1822 
     | 
    
         
            +
              }
         
     | 
| 
      
 1823 
     | 
    
         
            +
             
     | 
| 
      
 1824 
     | 
    
         
            +
              'filter,add,not,eq,first,last,find,closest,parents,parent,children,siblings'.split(',').forEach(function(property){
         
     | 
| 
      
 1825 
     | 
    
         
            +
                var fn = $.fn[property]
         
     | 
| 
      
 1826 
     | 
    
         
            +
                $.fn[property] = function(){
         
     | 
| 
      
 1827 
     | 
    
         
            +
                  var ret = fn.apply(this, arguments)
         
     | 
| 
      
 1828 
     | 
    
         
            +
                  ret.prevObject = this
         
     | 
| 
      
 1829 
     | 
    
         
            +
                  return ret
         
     | 
| 
      
 1830 
     | 
    
         
            +
                }
         
     | 
| 
      
 1831 
     | 
    
         
            +
              })
         
     | 
| 
      
 1832 
     | 
    
         
            +
            })(Zepto)
         
     | 
| 
      
 1833 
     | 
    
         
            +
             
     | 
| 
      
 1834 
     | 
    
         
            +
            //     Zepto.js
         
     | 
| 
      
 1835 
     | 
    
         
            +
            //     (c) 2010-2012 Thomas Fuchs
         
     | 
| 
      
 1836 
     | 
    
         
            +
            //     Zepto.js may be freely distributed under the MIT license.
         
     | 
| 
      
 1837 
     | 
    
         
            +
             
     | 
| 
      
 1838 
     | 
    
         
            +
            ;(function($){
         
     | 
| 
      
 1839 
     | 
    
         
            +
              var touch = {},
         
     | 
| 
      
 1840 
     | 
    
         
            +
                touchTimeout, tapTimeout, swipeTimeout,
         
     | 
| 
      
 1841 
     | 
    
         
            +
                longTapDelay = 750, longTapTimeout
         
     | 
| 
      
 1842 
     | 
    
         
            +
             
     | 
| 
      
 1843 
     | 
    
         
            +
              function parentIfText(node) {
         
     | 
| 
      
 1844 
     | 
    
         
            +
                return 'tagName' in node ? node : node.parentNode
         
     | 
| 
      
 1845 
     | 
    
         
            +
              }
         
     | 
| 
      
 1846 
     | 
    
         
            +
             
     | 
| 
      
 1847 
     | 
    
         
            +
              function swipeDirection(x1, x2, y1, y2) {
         
     | 
| 
      
 1848 
     | 
    
         
            +
                var xDelta = Math.abs(x1 - x2), yDelta = Math.abs(y1 - y2)
         
     | 
| 
      
 1849 
     | 
    
         
            +
                return xDelta >= yDelta ? (x1 - x2 > 0 ? 'Left' : 'Right') : (y1 - y2 > 0 ? 'Up' : 'Down')
         
     | 
| 
      
 1850 
     | 
    
         
            +
              }
         
     | 
| 
      
 1851 
     | 
    
         
            +
             
     | 
| 
      
 1852 
     | 
    
         
            +
              function longTap() {
         
     | 
| 
      
 1853 
     | 
    
         
            +
                longTapTimeout = null
         
     | 
| 
      
 1854 
     | 
    
         
            +
                if (touch.last) {
         
     | 
| 
      
 1855 
     | 
    
         
            +
                  touch.el.trigger('longTap')
         
     | 
| 
      
 1856 
     | 
    
         
            +
                  touch = {}
         
     | 
| 
      
 1857 
     | 
    
         
            +
                }
         
     | 
| 
      
 1858 
     | 
    
         
            +
              }
         
     | 
| 
      
 1859 
     | 
    
         
            +
             
     | 
| 
      
 1860 
     | 
    
         
            +
              function cancelLongTap() {
         
     | 
| 
      
 1861 
     | 
    
         
            +
                if (longTapTimeout) clearTimeout(longTapTimeout)
         
     | 
| 
      
 1862 
     | 
    
         
            +
                longTapTimeout = null
         
     | 
| 
      
 1863 
     | 
    
         
            +
              }
         
     | 
| 
      
 1864 
     | 
    
         
            +
             
     | 
| 
      
 1865 
     | 
    
         
            +
              function cancelAll() {
         
     | 
| 
      
 1866 
     | 
    
         
            +
                if (touchTimeout) clearTimeout(touchTimeout)
         
     | 
| 
      
 1867 
     | 
    
         
            +
                if (tapTimeout) clearTimeout(tapTimeout)
         
     | 
| 
      
 1868 
     | 
    
         
            +
                if (swipeTimeout) clearTimeout(swipeTimeout)
         
     | 
| 
      
 1869 
     | 
    
         
            +
                if (longTapTimeout) clearTimeout(longTapTimeout)
         
     | 
| 
      
 1870 
     | 
    
         
            +
                touchTimeout = tapTimeout = swipeTimeout = longTapTimeout = null
         
     | 
| 
      
 1871 
     | 
    
         
            +
                touch = {}
         
     | 
| 
      
 1872 
     | 
    
         
            +
              }
         
     | 
| 
      
 1873 
     | 
    
         
            +
             
     | 
| 
      
 1874 
     | 
    
         
            +
              $(document).ready(function(){
         
     | 
| 
      
 1875 
     | 
    
         
            +
                var now, delta
         
     | 
| 
      
 1876 
     | 
    
         
            +
             
     | 
| 
      
 1877 
     | 
    
         
            +
                $(document.body)
         
     | 
| 
      
 1878 
     | 
    
         
            +
                  .bind('touchstart', function(e){
         
     | 
| 
      
 1879 
     | 
    
         
            +
                    now = Date.now()
         
     | 
| 
      
 1880 
     | 
    
         
            +
                    delta = now - (touch.last || now)
         
     | 
| 
      
 1881 
     | 
    
         
            +
                    touch.el = $(parentIfText(e.touches[0].target))
         
     | 
| 
      
 1882 
     | 
    
         
            +
                    touchTimeout && clearTimeout(touchTimeout)
         
     | 
| 
      
 1883 
     | 
    
         
            +
                    touch.x1 = e.touches[0].pageX
         
     | 
| 
      
 1884 
     | 
    
         
            +
                    touch.y1 = e.touches[0].pageY
         
     | 
| 
      
 1885 
     | 
    
         
            +
                    if (delta > 0 && delta <= 250) touch.isDoubleTap = true
         
     | 
| 
      
 1886 
     | 
    
         
            +
                    touch.last = now
         
     | 
| 
      
 1887 
     | 
    
         
            +
                    longTapTimeout = setTimeout(longTap, longTapDelay)
         
     | 
| 
      
 1888 
     | 
    
         
            +
                  })
         
     | 
| 
      
 1889 
     | 
    
         
            +
                  .bind('touchmove', function(e){
         
     | 
| 
      
 1890 
     | 
    
         
            +
                    cancelLongTap()
         
     | 
| 
      
 1891 
     | 
    
         
            +
                    touch.x2 = e.touches[0].pageX
         
     | 
| 
      
 1892 
     | 
    
         
            +
                    touch.y2 = e.touches[0].pageY
         
     | 
| 
      
 1893 
     | 
    
         
            +
                    if (Math.abs(touch.x1 - touch.x2) > 10)
         
     | 
| 
      
 1894 
     | 
    
         
            +
                      e.preventDefault()
         
     | 
| 
      
 1895 
     | 
    
         
            +
                  })
         
     | 
| 
      
 1896 
     | 
    
         
            +
                  .bind('touchend', function(e){
         
     | 
| 
      
 1897 
     | 
    
         
            +
                     cancelLongTap()
         
     | 
| 
      
 1898 
     | 
    
         
            +
             
     | 
| 
      
 1899 
     | 
    
         
            +
                    // swipe
         
     | 
| 
      
 1900 
     | 
    
         
            +
                    if ((touch.x2 && Math.abs(touch.x1 - touch.x2) > 30) ||
         
     | 
| 
      
 1901 
     | 
    
         
            +
                        (touch.y2 && Math.abs(touch.y1 - touch.y2) > 30))
         
     | 
| 
      
 1902 
     | 
    
         
            +
             
     | 
| 
      
 1903 
     | 
    
         
            +
                      swipeTimeout = setTimeout(function() {
         
     | 
| 
      
 1904 
     | 
    
         
            +
                        touch.el.trigger('swipe')
         
     | 
| 
      
 1905 
     | 
    
         
            +
                        touch.el.trigger('swipe' + (swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2)))
         
     | 
| 
      
 1906 
     | 
    
         
            +
                        touch = {}
         
     | 
| 
      
 1907 
     | 
    
         
            +
                      }, 0)
         
     | 
| 
      
 1908 
     | 
    
         
            +
             
     | 
| 
      
 1909 
     | 
    
         
            +
                    // normal tap
         
     | 
| 
      
 1910 
     | 
    
         
            +
                    else if ('last' in touch)
         
     | 
| 
      
 1911 
     | 
    
         
            +
             
     | 
| 
      
 1912 
     | 
    
         
            +
                      // delay by one tick so we can cancel the 'tap' event if 'scroll' fires
         
     | 
| 
      
 1913 
     | 
    
         
            +
                      // ('tap' fires before 'scroll')
         
     | 
| 
      
 1914 
     | 
    
         
            +
                      tapTimeout = setTimeout(function() {
         
     | 
| 
      
 1915 
     | 
    
         
            +
             
     | 
| 
      
 1916 
     | 
    
         
            +
                        // trigger universal 'tap' with the option to cancelTouch()
         
     | 
| 
      
 1917 
     | 
    
         
            +
                        // (cancelTouch cancels processing of single vs double taps for faster 'tap' response)
         
     | 
| 
      
 1918 
     | 
    
         
            +
                        var event = $.Event('tap')
         
     | 
| 
      
 1919 
     | 
    
         
            +
                        event.cancelTouch = cancelAll
         
     | 
| 
      
 1920 
     | 
    
         
            +
                        touch.el.trigger(event)
         
     | 
| 
      
 1921 
     | 
    
         
            +
             
     | 
| 
      
 1922 
     | 
    
         
            +
                        // trigger double tap immediately
         
     | 
| 
      
 1923 
     | 
    
         
            +
                        if (touch.isDoubleTap) {
         
     | 
| 
      
 1924 
     | 
    
         
            +
                          touch.el.trigger('doubleTap')
         
     | 
| 
      
 1925 
     | 
    
         
            +
                          touch = {}
         
     | 
| 
      
 1926 
     | 
    
         
            +
                        }
         
     | 
| 
      
 1927 
     | 
    
         
            +
             
     | 
| 
      
 1928 
     | 
    
         
            +
                        // trigger single tap after 250ms of inactivity
         
     | 
| 
      
 1929 
     | 
    
         
            +
                        else {
         
     | 
| 
      
 1930 
     | 
    
         
            +
                          touchTimeout = setTimeout(function(){
         
     | 
| 
      
 1931 
     | 
    
         
            +
                            touchTimeout = null
         
     | 
| 
      
 1932 
     | 
    
         
            +
                            touch.el.trigger('singleTap')
         
     | 
| 
      
 1933 
     | 
    
         
            +
                            touch = {}
         
     | 
| 
      
 1934 
     | 
    
         
            +
                          }, 250)
         
     | 
| 
      
 1935 
     | 
    
         
            +
                        }
         
     | 
| 
      
 1936 
     | 
    
         
            +
             
     | 
| 
      
 1937 
     | 
    
         
            +
                      }, 0)
         
     | 
| 
      
 1938 
     | 
    
         
            +
             
     | 
| 
      
 1939 
     | 
    
         
            +
                  })
         
     | 
| 
      
 1940 
     | 
    
         
            +
                  .bind('touchcancel', cancelAll)
         
     | 
| 
      
 1941 
     | 
    
         
            +
             
     | 
| 
      
 1942 
     | 
    
         
            +
                $(window).bind('scroll', cancelAll)
         
     | 
| 
      
 1943 
     | 
    
         
            +
              })
         
     | 
| 
      
 1944 
     | 
    
         
            +
             
     | 
| 
      
 1945 
     | 
    
         
            +
              ;['swipe', 'swipeLeft', 'swipeRight', 'swipeUp', 'swipeDown', 'doubleTap', 'tap', 'singleTap', 'longTap'].forEach(function(m){
         
     | 
| 
      
 1946 
     | 
    
         
            +
                $.fn[m] = function(callback){ return this.bind(m, callback) }
         
     | 
| 
      
 1947 
     | 
    
         
            +
              })
         
     | 
| 
      
 1948 
     | 
    
         
            +
            })(Zepto)
         
     | 
| 
      
 1949 
     | 
    
         
            +
             
     | 
| 
      
 1950 
     | 
    
         
            +
             
     | 
| 
      
 1951 
     | 
    
         
            +
            // outer and inner height/width support
         
     | 
| 
      
 1952 
     | 
    
         
            +
            if (this.Zepto) {
         
     | 
| 
      
 1953 
     | 
    
         
            +
              (function($) {
         
     | 
| 
      
 1954 
     | 
    
         
            +
                var ioDim, _base;
         
     | 
| 
      
 1955 
     | 
    
         
            +
                ioDim = function(elem, Dimension, dimension, includeBorder, includeMargin) {
         
     | 
| 
      
 1956 
     | 
    
         
            +
                  var sides, size;
         
     | 
| 
      
 1957 
     | 
    
         
            +
                  if (elem) {
         
     | 
| 
      
 1958 
     | 
    
         
            +
                    size = elem[dimension]();
         
     | 
| 
      
 1959 
     | 
    
         
            +
                    sides = {
         
     | 
| 
      
 1960 
     | 
    
         
            +
                      width: ["left", "right"],
         
     | 
| 
      
 1961 
     | 
    
         
            +
                      height: ["top", "bottom"]
         
     | 
| 
      
 1962 
     | 
    
         
            +
                    };
         
     | 
| 
      
 1963 
     | 
    
         
            +
                    sides[dimension].forEach(function(side) {
         
     | 
| 
      
 1964 
     | 
    
         
            +
                      size += parseInt(elem.css("padding-" + side), 10);
         
     | 
| 
      
 1965 
     | 
    
         
            +
                      if (includeBorder) {
         
     | 
| 
      
 1966 
     | 
    
         
            +
                        size += parseInt(elem.css("border-" + side + "-width"), 10);
         
     | 
| 
      
 1967 
     | 
    
         
            +
                      }
         
     | 
| 
      
 1968 
     | 
    
         
            +
                      if (includeMargin) {
         
     | 
| 
      
 1969 
     | 
    
         
            +
                        return size += parseInt(elem.css("margin-" + side), 10);
         
     | 
| 
      
 1970 
     | 
    
         
            +
                      }
         
     | 
| 
      
 1971 
     | 
    
         
            +
                    });
         
     | 
| 
      
 1972 
     | 
    
         
            +
                    return size;
         
     | 
| 
      
 1973 
     | 
    
         
            +
                  } else {
         
     | 
| 
      
 1974 
     | 
    
         
            +
                    return null;
         
     | 
| 
      
 1975 
     | 
    
         
            +
                  }
         
     | 
| 
      
 1976 
     | 
    
         
            +
                };
         
     | 
| 
      
 1977 
     | 
    
         
            +
                ["width", "height"].forEach(function(dimension) {
         
     | 
| 
      
 1978 
     | 
    
         
            +
                  var Dimension, _base, _base1, _name, _name1;
         
     | 
| 
      
 1979 
     | 
    
         
            +
                  Dimension = dimension.replace(/./, function(m) {
         
     | 
| 
      
 1980 
     | 
    
         
            +
                    return m[0].toUpperCase();
         
     | 
| 
      
 1981 
     | 
    
         
            +
                  });
         
     | 
| 
      
 1982 
     | 
    
         
            +
                  (_base = $.fn)[_name = "inner" + Dimension] || (_base[_name] = function(includeMargin) {
         
     | 
| 
      
 1983 
     | 
    
         
            +
                    return ioDim(this, Dimension, dimension, false, includeMargin);
         
     | 
| 
      
 1984 
     | 
    
         
            +
                  });
         
     | 
| 
      
 1985 
     | 
    
         
            +
                  return (_base1 = $.fn)[_name1 = "outer" + Dimension] || (_base1[_name1] = function(includeMargin) {
         
     | 
| 
      
 1986 
     | 
    
         
            +
                    return ioDim(this, Dimension, dimension, true, includeMargin);
         
     | 
| 
      
 1987 
     | 
    
         
            +
                  });
         
     | 
| 
      
 1988 
     | 
    
         
            +
                });
         
     | 
| 
      
 1989 
     | 
    
         
            +
                return (_base = $.fn).detach || (_base.detach = function(selector) {
         
     | 
| 
      
 1990 
     | 
    
         
            +
                  var cloned, set;
         
     | 
| 
      
 1991 
     | 
    
         
            +
                  set = this;
         
     | 
| 
      
 1992 
     | 
    
         
            +
                  if (selector != null) {
         
     | 
| 
      
 1993 
     | 
    
         
            +
                    set = set.filter(selector);
         
     | 
| 
      
 1994 
     | 
    
         
            +
                  }
         
     | 
| 
      
 1995 
     | 
    
         
            +
                  cloned = set.clone(true);
         
     | 
| 
      
 1996 
     | 
    
         
            +
                  set.remove();
         
     | 
| 
      
 1997 
     | 
    
         
            +
                  return cloned;
         
     | 
| 
      
 1998 
     | 
    
         
            +
                });
         
     | 
| 
      
 1999 
     | 
    
         
            +
              })(Zepto);
         
     | 
| 
      
 2000 
     | 
    
         
            +
            }
         
     |