| /* Zepto v1.2.0 - zepto event ajax form ie - zeptojs.com/license */ | 
|   | 
| layui.define(function(exports){ | 
|    | 
|   var Zepto = (function() { | 
|   var undefined, key, $, classList, emptyArray = [], concat = emptyArray.concat, filter = emptyArray.filter, slice = emptyArray.slice, | 
|     document = window.document, | 
|     elementDisplay = {}, classCache = {}, | 
|     cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1,'opacity': 1, 'z-index': 1, 'zoom': 1 }, | 
|     fragmentRE = /^\s*<(\w+|!)[^>]*>/, | 
|     singleTagRE = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, | 
|     tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, | 
|     rootNodeRE = /^(?:body|html)$/i, | 
|     capitalRE = /([A-Z])/g, | 
|   | 
|     // special attributes that should be get/set via method calls | 
|     methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'], | 
|   | 
|     adjacencyOperators = [ 'after', 'prepend', 'before', 'append' ], | 
|     table = document.createElement('table'), | 
|     tableRow = document.createElement('tr'), | 
|     containers = { | 
|       'tr': document.createElement('tbody'), | 
|       'tbody': table, 'thead': table, 'tfoot': table, | 
|       'td': tableRow, 'th': tableRow, | 
|       '*': document.createElement('div') | 
|     }, | 
|     readyRE = /complete|loaded|interactive/, | 
|     simpleSelectorRE = /^[\w-]*$/, | 
|     class2type = {}, | 
|     toString = class2type.toString, | 
|     zepto = {}, | 
|     camelize, uniq, | 
|     tempParent = document.createElement('div'), | 
|     propMap = { | 
|       'tabindex': 'tabIndex', | 
|       'readonly': 'readOnly', | 
|       'for': 'htmlFor', | 
|       'class': 'className', | 
|       'maxlength': 'maxLength', | 
|       'cellspacing': 'cellSpacing', | 
|       'cellpadding': 'cellPadding', | 
|       'rowspan': 'rowSpan', | 
|       'colspan': 'colSpan', | 
|       'usemap': 'useMap', | 
|       'frameborder': 'frameBorder', | 
|       'contenteditable': 'contentEditable' | 
|     }, | 
|     isArray = Array.isArray || | 
|       function(object){ return object instanceof Array } | 
|   | 
|   zepto.matches = function(element, selector) { | 
|     if (!selector || !element || element.nodeType !== 1) return false | 
|     var matchesSelector = element.matches || element.webkitMatchesSelector || | 
|                           element.mozMatchesSelector || element.oMatchesSelector || | 
|                           element.matchesSelector | 
|     if (matchesSelector) return matchesSelector.call(element, selector) | 
|     // fall back to performing a selector: | 
|     var match, parent = element.parentNode, temp = !parent | 
|     if (temp) (parent = tempParent).appendChild(element) | 
|     match = ~zepto.qsa(parent, selector).indexOf(element) | 
|     temp && tempParent.removeChild(element) | 
|     return match | 
|   } | 
|   | 
|   function type(obj) { | 
|     return obj == null ? String(obj) : | 
|       class2type[toString.call(obj)] || "object" | 
|   } | 
|   | 
|   function isFunction(value) { return type(value) == "function" } | 
|   function isWindow(obj)     { return obj != null && obj == obj.window } | 
|   function isDocument(obj)   { return obj != null && obj.nodeType == obj.DOCUMENT_NODE } | 
|   function isObject(obj)     { return type(obj) == "object" } | 
|   function isPlainObject(obj) { | 
|     return isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.prototype | 
|   } | 
|   | 
|   function likeArray(obj) { | 
|     var length = !!obj && 'length' in obj && obj.length, | 
|       type = $.type(obj) | 
|   | 
|     return 'function' != type && !isWindow(obj) && ( | 
|       'array' == type || length === 0 || | 
|         (typeof length == 'number' && length > 0 && (length - 1) in obj) | 
|     ) | 
|   } | 
|   | 
|   function compact(array) { return filter.call(array, function(item){ return item != null }) } | 
|   function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array } | 
|   camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : '' }) } | 
|   function dasherize(str) { | 
|     return str.replace(/::/g, '/') | 
|            .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') | 
|            .replace(/([a-z\d])([A-Z])/g, '$1_$2') | 
|            .replace(/_/g, '-') | 
|            .toLowerCase() | 
|   } | 
|   uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) } | 
|   | 
|   function classRE(name) { | 
|     return name in classCache ? | 
|       classCache[name] : (classCache[name] = new RegExp('(^|\\s)' + name + '(\\s|$)')) | 
|   } | 
|   | 
|   function maybeAddPx(name, value) { | 
|     return (typeof value == "number" && !cssNumber[dasherize(name)]) ? value + "px" : value | 
|   } | 
|   | 
|   function defaultDisplay(nodeName) { | 
|     var element, display | 
|     if (!elementDisplay[nodeName]) { | 
|       element = document.createElement(nodeName) | 
|       document.body.appendChild(element) | 
|       display = getComputedStyle(element, '').getPropertyValue("display") | 
|       element.parentNode.removeChild(element) | 
|       display == "none" && (display = "block") | 
|       elementDisplay[nodeName] = display | 
|     } | 
|     return elementDisplay[nodeName] | 
|   } | 
|   | 
|   function children(element) { | 
|     return 'children' in element ? | 
|       slice.call(element.children) : | 
|       $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node }) | 
|   } | 
|   | 
|   function Z(dom, selector) { | 
|     var i, len = dom ? dom.length : 0 | 
|     for (i = 0; i < len; i++) this[i] = dom[i] | 
|     this.length = len | 
|     this.selector = selector || '' | 
|   } | 
|   | 
|   // `$.zepto.fragment` takes a html string and an optional tag name | 
|   // to generate DOM nodes from the given html string. | 
|   // The generated DOM nodes are returned as an array. | 
|   // This function can be overridden in plugins for example to make | 
|   // it compatible with browsers that don't support the DOM fully. | 
|   zepto.fragment = function(html, name, properties) { | 
|     var dom, nodes, container | 
|   | 
|     // A special case optimization for a single tag | 
|     if (singleTagRE.test(html)) dom = $(document.createElement(RegExp.$1)) | 
|   | 
|     if (!dom) { | 
|       if (html.replace) html = html.replace(tagExpanderRE, "<$1></$2>") | 
|       if (name === undefined) name = fragmentRE.test(html) && RegExp.$1 | 
|       if (!(name in containers)) name = '*' | 
|   | 
|       container = containers[name] | 
|       container.innerHTML = '' + html | 
|       dom = $.each(slice.call(container.childNodes), function(){ | 
|         container.removeChild(this) | 
|       }) | 
|     } | 
|   | 
|     if (isPlainObject(properties)) { | 
|       nodes = $(dom) | 
|       $.each(properties, function(key, value) { | 
|         if (methodAttributes.indexOf(key) > -1) nodes[key](value) | 
|         else nodes.attr(key, value) | 
|       }) | 
|     } | 
|   | 
|     return dom | 
|   } | 
|   | 
|   // `$.zepto.Z` swaps out the prototype of the given `dom` array | 
|   // of nodes with `$.fn` and thus supplying all the Zepto functions | 
|   // to the array. This method can be overridden in plugins. | 
|   zepto.Z = function(dom, selector) { | 
|     return new Z(dom, selector) | 
|   } | 
|   | 
|   // `$.zepto.isZ` should return `true` if the given object is a Zepto | 
|   // collection. This method can be overridden in plugins. | 
|   zepto.isZ = function(object) { | 
|     return object instanceof zepto.Z | 
|   } | 
|   | 
|   // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and | 
|   // takes a CSS selector and an optional context (and handles various | 
|   // special cases). | 
|   // This method can be overridden in plugins. | 
|   zepto.init = function(selector, context) { | 
|     var dom | 
|     // If nothing given, return an empty Zepto collection | 
|     if (!selector) return zepto.Z() | 
|     // Optimize for string selectors | 
|     else if (typeof selector == 'string') { | 
|       selector = selector.trim() | 
|       // If it's a html fragment, create nodes from it | 
|       // Note: In both Chrome 21 and Firefox 15, DOM error 12 | 
|       // is thrown if the fragment doesn't begin with < | 
|       if (selector[0] == '<' && fragmentRE.test(selector)) | 
|         dom = zepto.fragment(selector, RegExp.$1, context), selector = null | 
|       // If there's a context, create a collection on that context first, and select | 
|       // nodes from there | 
|       else if (context !== undefined) return $(context).find(selector) | 
|       // If it's a CSS selector, use it to select nodes. | 
|       else dom = zepto.qsa(document, selector) | 
|     } | 
|     // If a function is given, call it when the DOM is ready | 
|     else if (isFunction(selector)) return $(document).ready(selector) | 
|     // If a Zepto collection is given, just return it | 
|     else if (zepto.isZ(selector)) return selector | 
|     else { | 
|       // normalize array if an array of nodes is given | 
|       if (isArray(selector)) dom = compact(selector) | 
|       // Wrap DOM nodes. | 
|       else if (isObject(selector)) | 
|         dom = [selector], selector = null | 
|       // If it's a html fragment, create nodes from it | 
|       else if (fragmentRE.test(selector)) | 
|         dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null | 
|       // If there's a context, create a collection on that context first, and select | 
|       // nodes from there | 
|       else if (context !== undefined) return $(context).find(selector) | 
|       // And last but no least, if it's a CSS selector, use it to select nodes. | 
|       else dom = zepto.qsa(document, selector) | 
|     } | 
|     // create a new Zepto collection from the nodes found | 
|     return zepto.Z(dom, selector) | 
|   } | 
|   | 
|   // `$` will be the base `Zepto` object. When calling this | 
|   // function just call `$.zepto.init, which makes the implementation | 
|   // details of selecting nodes and creating Zepto collections | 
|   // patchable in plugins. | 
|   $ = function(selector, context){ | 
|     return zepto.init(selector, context) | 
|   } | 
|   | 
|   function extend(target, source, deep) { | 
|     for (key in source) | 
|       if (deep && (isPlainObject(source[key]) || isArray(source[key]))) { | 
|         if (isPlainObject(source[key]) && !isPlainObject(target[key])) | 
|           target[key] = {} | 
|         if (isArray(source[key]) && !isArray(target[key])) | 
|           target[key] = [] | 
|         extend(target[key], source[key], deep) | 
|       } | 
|       else if (source[key] !== undefined) target[key] = source[key] | 
|   } | 
|   | 
|   // Copy all but undefined properties from one or more | 
|   // objects to the `target` object. | 
|   $.extend = function(target){ | 
|     var deep, args = slice.call(arguments, 1) | 
|     if (typeof target == 'boolean') { | 
|       deep = target | 
|       target = args.shift() | 
|     } | 
|     args.forEach(function(arg){ extend(target, arg, deep) }) | 
|     return target | 
|   } | 
|   | 
|   // `$.zepto.qsa` is Zepto's CSS selector implementation which | 
|   // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`. | 
|   // This method can be overridden in plugins. | 
|   zepto.qsa = function(element, selector){ | 
|     var found, | 
|         maybeID = selector[0] == '#', | 
|         maybeClass = !maybeID && selector[0] == '.', | 
|         nameOnly = maybeID || maybeClass ? selector.slice(1) : selector, // Ensure that a 1 char tag name still gets checked | 
|         isSimple = simpleSelectorRE.test(nameOnly) | 
|     return (element.getElementById && isSimple && maybeID) ? // Safari DocumentFragment doesn't have getElementById | 
|       ( (found = element.getElementById(nameOnly)) ? [found] : [] ) : | 
|       (element.nodeType !== 1 && element.nodeType !== 9 && element.nodeType !== 11) ? [] : | 
|       slice.call( | 
|         isSimple && !maybeID && element.getElementsByClassName ? // DocumentFragment doesn't have getElementsByClassName/TagName | 
|           maybeClass ? element.getElementsByClassName(nameOnly) : // If it's simple, it could be a class | 
|           element.getElementsByTagName(selector) : // Or a tag | 
|           element.querySelectorAll(selector) // Or it's not simple, and we need to query all | 
|       ) | 
|   } | 
|   | 
|   function filtered(nodes, selector) { | 
|     return selector == null ? $(nodes) : $(nodes).filter(selector) | 
|   } | 
|   | 
|   $.contains = document.documentElement.contains ? | 
|     function(parent, node) { | 
|       return parent !== node && parent.contains(node) | 
|     } : | 
|     function(parent, node) { | 
|       while (node && (node = node.parentNode)) | 
|         if (node === parent) return true | 
|       return false | 
|     } | 
|   | 
|   function funcArg(context, arg, idx, payload) { | 
|     return isFunction(arg) ? arg.call(context, idx, payload) : arg | 
|   } | 
|   | 
|   function setAttribute(node, name, value) { | 
|     value == null ? node.removeAttribute(name) : node.setAttribute(name, value) | 
|   } | 
|   | 
|   // access className property while respecting SVGAnimatedString | 
|   function className(node, value){ | 
|     var klass = node.className || '', | 
|         svg   = klass && klass.baseVal !== undefined | 
|   | 
|     if (value === undefined) return svg ? klass.baseVal : klass | 
|     svg ? (klass.baseVal = value) : (node.className = value) | 
|   } | 
|   | 
|   // "true"  => true | 
|   // "false" => false | 
|   // "null"  => null | 
|   // "42"    => 42 | 
|   // "42.5"  => 42.5 | 
|   // "08"    => "08" | 
|   // JSON    => parse if valid | 
|   // String  => self | 
|   function deserializeValue(value) { | 
|     try { | 
|       return value ? | 
|         value == "true" || | 
|         ( value == "false" ? false : | 
|           value == "null" ? null : | 
|           +value + "" == value ? +value : | 
|           /^[\[\{]/.test(value) ? $.parseJSON(value) : | 
|           value ) | 
|         : value | 
|     } catch(e) { | 
|       return value | 
|     } | 
|   } | 
|   | 
|   $.type = type | 
|   $.isFunction = isFunction | 
|   $.isWindow = isWindow | 
|   $.isArray = isArray | 
|   $.isPlainObject = isPlainObject | 
|   | 
|   $.isEmptyObject = function(obj) { | 
|     var name | 
|     for (name in obj) return false | 
|     return true | 
|   } | 
|   | 
|   $.isNumeric = function(val) { | 
|     var num = Number(val), type = typeof val | 
|     return val != null && type != 'boolean' && | 
|       (type != 'string' || val.length) && | 
|       !isNaN(num) && isFinite(num) || false | 
|   } | 
|   | 
|   $.inArray = function(elem, array, i){ | 
|     return emptyArray.indexOf.call(array, elem, i) | 
|   } | 
|   | 
|   $.camelCase = camelize | 
|   $.trim = function(str) { | 
|     return str == null ? "" : String.prototype.trim.call(str) | 
|   } | 
|   | 
|   // plugin compatibility | 
|   $.uuid = 0 | 
|   $.support = { } | 
|   $.expr = { } | 
|   $.noop = function() {} | 
|   | 
|   $.map = function(elements, callback){ | 
|     var value, values = [], i, key | 
|     if (likeArray(elements)) | 
|       for (i = 0; i < elements.length; i++) { | 
|         value = callback(elements[i], i) | 
|         if (value != null) values.push(value) | 
|       } | 
|     else | 
|       for (key in elements) { | 
|         value = callback(elements[key], key) | 
|         if (value != null) values.push(value) | 
|       } | 
|     return flatten(values) | 
|   } | 
|   | 
|   $.each = function(elements, callback){ | 
|     var i, key | 
|     if (likeArray(elements)) { | 
|       for (i = 0; i < elements.length; i++) | 
|         if (callback.call(elements[i], i, elements[i]) === false) return elements | 
|     } else { | 
|       for (key in elements) | 
|         if (callback.call(elements[key], key, elements[key]) === false) return elements | 
|     } | 
|   | 
|     return elements | 
|   } | 
|   | 
|   $.grep = function(elements, callback){ | 
|     return filter.call(elements, callback) | 
|   } | 
|   | 
|   if (window.JSON) $.parseJSON = JSON.parse | 
|   | 
|   // Populate the class2type map | 
|   $.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { | 
|     class2type[ "[object " + name + "]" ] = name.toLowerCase() | 
|   }) | 
|   | 
|   // Define methods that will be available on all | 
|   // Zepto collections | 
|   $.fn = { | 
|     constructor: zepto.Z, | 
|     length: 0, | 
|   | 
|     // Because a collection acts like an array | 
|     // copy over these useful array functions. | 
|     forEach: emptyArray.forEach, | 
|     reduce: emptyArray.reduce, | 
|     push: emptyArray.push, | 
|     sort: emptyArray.sort, | 
|     splice: emptyArray.splice, | 
|     indexOf: emptyArray.indexOf, | 
|     concat: function(){ | 
|       var i, value, args = [] | 
|       for (i = 0; i < arguments.length; i++) { | 
|         value = arguments[i] | 
|         args[i] = zepto.isZ(value) ? value.toArray() : value | 
|       } | 
|       return concat.apply(zepto.isZ(this) ? this.toArray() : this, args) | 
|     }, | 
|   | 
|     // `map` and `slice` in the jQuery API work differently | 
|     // from their array counterparts | 
|     map: function(fn){ | 
|       return $($.map(this, function(el, i){ return fn.call(el, i, el) })) | 
|     }, | 
|     slice: function(){ | 
|       return $(slice.apply(this, arguments)) | 
|     }, | 
|   | 
|     ready: function(callback){ | 
|       // need to check if document.body exists for IE as that browser reports | 
|       // document ready when it hasn't yet created the body element | 
|       if (readyRE.test(document.readyState) && document.body) callback($) | 
|       else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false) | 
|       return this | 
|     }, | 
|     get: function(idx){ | 
|       return idx === undefined ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length] | 
|     }, | 
|     toArray: function(){ return this.get() }, | 
|     size: function(){ | 
|       return this.length | 
|     }, | 
|     remove: function(){ | 
|       return this.each(function(){ | 
|         if (this.parentNode != null) | 
|           this.parentNode.removeChild(this) | 
|       }) | 
|     }, | 
|     each: function(callback){ | 
|       emptyArray.every.call(this, function(el, idx){ | 
|         return callback.call(el, idx, el) !== false | 
|       }) | 
|       return this | 
|     }, | 
|     filter: function(selector){ | 
|       if (isFunction(selector)) return this.not(this.not(selector)) | 
|       return $(filter.call(this, function(element){ | 
|         return zepto.matches(element, selector) | 
|       })) | 
|     }, | 
|     add: function(selector,context){ | 
|       return $(uniq(this.concat($(selector,context)))) | 
|     }, | 
|     is: function(selector){ | 
|       return this.length > 0 && zepto.matches(this[0], selector) | 
|     }, | 
|     not: function(selector){ | 
|       var nodes=[] | 
|       if (isFunction(selector) && selector.call !== undefined) | 
|         this.each(function(idx){ | 
|           if (!selector.call(this,idx)) nodes.push(this) | 
|         }) | 
|       else { | 
|         var excludes = typeof selector == 'string' ? this.filter(selector) : | 
|           (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector) | 
|         this.forEach(function(el){ | 
|           if (excludes.indexOf(el) < 0) nodes.push(el) | 
|         }) | 
|       } | 
|       return $(nodes) | 
|     }, | 
|     has: function(selector){ | 
|       return this.filter(function(){ | 
|         return isObject(selector) ? | 
|           $.contains(this, selector) : | 
|           $(this).find(selector).size() | 
|       }) | 
|     }, | 
|     eq: function(idx){ | 
|       return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1) | 
|     }, | 
|     first: function(){ | 
|       var el = this[0] | 
|       return el && !isObject(el) ? el : $(el) | 
|     }, | 
|     last: function(){ | 
|       var el = this[this.length - 1] | 
|       return el && !isObject(el) ? el : $(el) | 
|     }, | 
|     find: function(selector){ | 
|       var result, $this = this | 
|       if (!selector) result = $() | 
|       else if (typeof selector == 'object') | 
|         result = $(selector).filter(function(){ | 
|           var node = this | 
|           return emptyArray.some.call($this, function(parent){ | 
|             return $.contains(parent, node) | 
|           }) | 
|         }) | 
|       else if (this.length == 1) result = $(zepto.qsa(this[0], selector)) | 
|       else result = this.map(function(){ return zepto.qsa(this, selector) }) | 
|       return result | 
|     }, | 
|     closest: function(selector, context){ | 
|       var nodes = [], collection = typeof selector == 'object' && $(selector) | 
|       this.each(function(_, node){ | 
|         while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector))) | 
|           node = node !== context && !isDocument(node) && node.parentNode | 
|         if (node && nodes.indexOf(node) < 0) nodes.push(node) | 
|       }) | 
|       return $(nodes) | 
|     }, | 
|     parents: function(selector){ | 
|       var ancestors = [], nodes = this | 
|       while (nodes.length > 0) | 
|         nodes = $.map(nodes, function(node){ | 
|           if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) { | 
|             ancestors.push(node) | 
|             return node | 
|           } | 
|         }) | 
|       return filtered(ancestors, selector) | 
|     }, | 
|     parent: function(selector){ | 
|       return filtered(uniq(this.pluck('parentNode')), selector) | 
|     }, | 
|     children: function(selector){ | 
|       return filtered(this.map(function(){ return children(this) }), selector) | 
|     }, | 
|     contents: function() { | 
|       return this.map(function() { return this.contentDocument || slice.call(this.childNodes) }) | 
|     }, | 
|     siblings: function(selector){ | 
|       return filtered(this.map(function(i, el){ | 
|         return filter.call(children(el.parentNode), function(child){ return child!==el }) | 
|       }), selector) | 
|     }, | 
|     empty: function(){ | 
|       return this.each(function(){ this.innerHTML = '' }) | 
|     }, | 
|     // `pluck` is borrowed from Prototype.js | 
|     pluck: function(property){ | 
|       return $.map(this, function(el){ return el[property] }) | 
|     }, | 
|     show: function(){ | 
|       return this.each(function(){ | 
|         this.style.display == "none" && (this.style.display = '') | 
|         if (getComputedStyle(this, '').getPropertyValue("display") == "none") | 
|           this.style.display = defaultDisplay(this.nodeName) | 
|       }) | 
|     }, | 
|     replaceWith: function(newContent){ | 
|       return this.before(newContent).remove() | 
|     }, | 
|     wrap: function(structure){ | 
|       var func = isFunction(structure) | 
|       if (this[0] && !func) | 
|         var dom   = $(structure).get(0), | 
|             clone = dom.parentNode || this.length > 1 | 
|   | 
|       return this.each(function(index){ | 
|         $(this).wrapAll( | 
|           func ? structure.call(this, index) : | 
|             clone ? dom.cloneNode(true) : dom | 
|         ) | 
|       }) | 
|     }, | 
|     wrapAll: function(structure){ | 
|       if (this[0]) { | 
|         $(this[0]).before(structure = $(structure)) | 
|         var children | 
|         // drill down to the inmost element | 
|         while ((children = structure.children()).length) structure = children.first() | 
|         $(structure).append(this) | 
|       } | 
|       return this | 
|     }, | 
|     wrapInner: function(structure){ | 
|       var func = isFunction(structure) | 
|       return this.each(function(index){ | 
|         var self = $(this), contents = self.contents(), | 
|             dom  = func ? structure.call(this, index) : structure | 
|         contents.length ? contents.wrapAll(dom) : self.append(dom) | 
|       }) | 
|     }, | 
|     unwrap: function(){ | 
|       this.parent().each(function(){ | 
|         $(this).replaceWith($(this).children()) | 
|       }) | 
|       return this | 
|     }, | 
|     clone: function(){ | 
|       return this.map(function(){ return this.cloneNode(true) }) | 
|     }, | 
|     hide: function(){ | 
|       return this.css("display", "none") | 
|     }, | 
|     toggle: function(setting){ | 
|       return this.each(function(){ | 
|         var el = $(this) | 
|         ;(setting === undefined ? el.css("display") == "none" : setting) ? el.show() : el.hide() | 
|       }) | 
|     }, | 
|     prev: function(selector){ return $(this.pluck('previousElementSibling')).filter(selector || '*') }, | 
|     next: function(selector){ return $(this.pluck('nextElementSibling')).filter(selector || '*') }, | 
|     html: function(html){ | 
|       return 0 in arguments ? | 
|         this.each(function(idx){ | 
|           var originHtml = this.innerHTML | 
|           $(this).empty().append( funcArg(this, html, idx, originHtml) ) | 
|         }) : | 
|         (0 in this ? this[0].innerHTML : null) | 
|     }, | 
|     text: function(text){ | 
|       return 0 in arguments ? | 
|         this.each(function(idx){ | 
|           var newText = funcArg(this, text, idx, this.textContent) | 
|           this.textContent = newText == null ? '' : ''+newText | 
|         }) : | 
|         (0 in this ? this.pluck('textContent').join("") : null) | 
|     }, | 
|     attr: function(name, value){ | 
|       var result | 
|       return (typeof name == 'string' && !(1 in arguments)) ? | 
|         (0 in this && this[0].nodeType == 1 && (result = this[0].getAttribute(name)) != null ? result : undefined) : | 
|         this.each(function(idx){ | 
|           if (this.nodeType !== 1) return | 
|           if (isObject(name)) for (key in name) setAttribute(this, key, name[key]) | 
|           else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name))) | 
|         }) | 
|     }, | 
|     removeAttr: function(name){ | 
|       return this.each(function(){ this.nodeType === 1 && name.split(' ').forEach(function(attribute){ | 
|         setAttribute(this, attribute) | 
|       }, this)}) | 
|     }, | 
|     prop: function(name, value){ | 
|       name = propMap[name] || name | 
|       return (1 in arguments) ? | 
|         this.each(function(idx){ | 
|           this[name] = funcArg(this, value, idx, this[name]) | 
|         }) : | 
|         (this[0] && this[0][name]) | 
|     }, | 
|     removeProp: function(name){ | 
|       name = propMap[name] || name | 
|       return this.each(function(){ delete this[name] }) | 
|     }, | 
|     data: function(name, value){ | 
|       var attrName = 'data-' + name.replace(capitalRE, '-$1').toLowerCase() | 
|   | 
|       var data = (1 in arguments) ? | 
|         this.attr(attrName, value) : | 
|         this.attr(attrName) | 
|   | 
|       return data !== null ? deserializeValue(data) : undefined | 
|     }, | 
|     val: function(value){ | 
|       if (0 in arguments) { | 
|         if (value == null) value = "" | 
|         return this.each(function(idx){ | 
|           this.value = funcArg(this, value, idx, this.value) | 
|         }) | 
|       } else { | 
|         return this[0] && (this[0].multiple ? | 
|            $(this[0]).find('option').filter(function(){ return this.selected }).pluck('value') : | 
|            this[0].value) | 
|       } | 
|     }, | 
|     offset: function(coordinates){ | 
|       if (coordinates) return this.each(function(index){ | 
|         var $this = $(this), | 
|             coords = funcArg(this, coordinates, index, $this.offset()), | 
|             parentOffset = $this.offsetParent().offset(), | 
|             props = { | 
|               top:  coords.top  - parentOffset.top, | 
|               left: coords.left - parentOffset.left | 
|             } | 
|   | 
|         if ($this.css('position') == 'static') props['position'] = 'relative' | 
|         $this.css(props) | 
|       }) | 
|       if (!this.length) return null | 
|       if (document.documentElement !== this[0] && !$.contains(document.documentElement, this[0])) | 
|         return {top: 0, left: 0} | 
|       var obj = this[0].getBoundingClientRect() | 
|       return { | 
|         left: obj.left + window.pageXOffset, | 
|         top: obj.top + window.pageYOffset, | 
|         width: Math.round(obj.width), | 
|         height: Math.round(obj.height) | 
|       } | 
|     }, | 
|     css: function(property, value){ | 
|       if (arguments.length < 2) { | 
|         var element = this[0] | 
|         if (typeof property == 'string') { | 
|           if (!element) return | 
|           return element.style[camelize(property)] || getComputedStyle(element, '').getPropertyValue(property) | 
|         } else if (isArray(property)) { | 
|           if (!element) return | 
|           var props = {} | 
|           var computedStyle = getComputedStyle(element, '') | 
|           $.each(property, function(_, prop){ | 
|             props[prop] = (element.style[camelize(prop)] || computedStyle.getPropertyValue(prop)) | 
|           }) | 
|           return props | 
|         } | 
|       } | 
|   | 
|       var css = '' | 
|       if (type(property) == 'string') { | 
|         if (!value && value !== 0) | 
|           this.each(function(){ this.style.removeProperty(dasherize(property)) }) | 
|         else | 
|           css = dasherize(property) + ":" + maybeAddPx(property, value) | 
|       } else { | 
|         for (key in property) | 
|           if (!property[key] && property[key] !== 0) | 
|             this.each(function(){ this.style.removeProperty(dasherize(key)) }) | 
|           else | 
|             css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';' | 
|       } | 
|   | 
|       return this.each(function(){ this.style.cssText += ';' + css }) | 
|     }, | 
|     index: function(element){ | 
|       return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0]) | 
|     }, | 
|     hasClass: function(name){ | 
|       if (!name) return false | 
|       return emptyArray.some.call(this, function(el){ | 
|         return this.test(className(el)) | 
|       }, classRE(name)) | 
|     }, | 
|     addClass: function(name){ | 
|       if (!name) return this | 
|       return this.each(function(idx){ | 
|         if (!('className' in this)) return | 
|         classList = [] | 
|         var cls = className(this), newName = funcArg(this, name, idx, cls) | 
|         newName.split(/\s+/g).forEach(function(klass){ | 
|           if (!$(this).hasClass(klass)) classList.push(klass) | 
|         }, this) | 
|         classList.length && className(this, cls + (cls ? " " : "") + classList.join(" ")) | 
|       }) | 
|     }, | 
|     removeClass: function(name){ | 
|       return this.each(function(idx){ | 
|         if (!('className' in this)) return | 
|         if (name === undefined) return className(this, '') | 
|         classList = className(this) | 
|         funcArg(this, name, idx, classList).split(/\s+/g).forEach(function(klass){ | 
|           classList = classList.replace(classRE(klass), " ") | 
|         }) | 
|         className(this, classList.trim()) | 
|       }) | 
|     }, | 
|     toggleClass: function(name, when){ | 
|       if (!name) return this | 
|       return this.each(function(idx){ | 
|         var $this = $(this), names = funcArg(this, name, idx, className(this)) | 
|         names.split(/\s+/g).forEach(function(klass){ | 
|           (when === undefined ? !$this.hasClass(klass) : when) ? | 
|             $this.addClass(klass) : $this.removeClass(klass) | 
|         }) | 
|       }) | 
|     }, | 
|     scrollTop: function(value){ | 
|       if (!this.length) return | 
|       var hasScrollTop = 'scrollTop' in this[0] | 
|       if (value === undefined) return hasScrollTop ? this[0].scrollTop : this[0].pageYOffset | 
|       return this.each(hasScrollTop ? | 
|         function(){ this.scrollTop = value } : | 
|         function(){ this.scrollTo(this.scrollX, value) }) | 
|     }, | 
|     scrollLeft: function(value){ | 
|       if (!this.length) return | 
|       var hasScrollLeft = 'scrollLeft' in this[0] | 
|       if (value === undefined) return hasScrollLeft ? this[0].scrollLeft : this[0].pageXOffset | 
|       return this.each(hasScrollLeft ? | 
|         function(){ this.scrollLeft = value } : | 
|         function(){ this.scrollTo(value, this.scrollY) }) | 
|     }, | 
|     position: function() { | 
|       if (!this.length) return | 
|   | 
|       var elem = this[0], | 
|         // Get *real* offsetParent | 
|         offsetParent = this.offsetParent(), | 
|         // Get correct offsets | 
|         offset       = this.offset(), | 
|         parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset() | 
|   | 
|       // Subtract element margins | 
|       // note: when an element has margin: auto the offsetLeft and marginLeft | 
|       // are the same in Safari causing offset.left to incorrectly be 0 | 
|       offset.top  -= parseFloat( $(elem).css('margin-top') ) || 0 | 
|       offset.left -= parseFloat( $(elem).css('margin-left') ) || 0 | 
|   | 
|       // Add offsetParent borders | 
|       parentOffset.top  += parseFloat( $(offsetParent[0]).css('border-top-width') ) || 0 | 
|       parentOffset.left += parseFloat( $(offsetParent[0]).css('border-left-width') ) || 0 | 
|   | 
|       // Subtract the two offsets | 
|       return { | 
|         top:  offset.top  - parentOffset.top, | 
|         left: offset.left - parentOffset.left | 
|       } | 
|     }, | 
|     offsetParent: function() { | 
|       return this.map(function(){ | 
|         var parent = this.offsetParent || document.body | 
|         while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css("position") == "static") | 
|           parent = parent.offsetParent | 
|         return parent | 
|       }) | 
|     } | 
|   } | 
|   | 
|   // for now | 
|   $.fn.detach = $.fn.remove | 
|   | 
|   // Generate the `width` and `height` functions | 
|   ;['width', 'height'].forEach(function(dimension){ | 
|     var dimensionProperty = | 
|       dimension.replace(/./, function(m){ return m[0].toUpperCase() }) | 
|   | 
|     $.fn[dimension] = function(value){ | 
|       var offset, el = this[0] | 
|       if (value === undefined) return isWindow(el) ? el['inner' + dimensionProperty] : | 
|         isDocument(el) ? el.documentElement['scroll' + dimensionProperty] : | 
|         (offset = this.offset()) && offset[dimension] | 
|       else return this.each(function(idx){ | 
|         el = $(this) | 
|         el.css(dimension, funcArg(this, value, idx, el[dimension]())) | 
|       }) | 
|     } | 
|   }) | 
|   | 
|   function traverseNode(node, fun) { | 
|     fun(node) | 
|     for (var i = 0, len = node.childNodes.length; i < len; i++) | 
|       traverseNode(node.childNodes[i], fun) | 
|   } | 
|   | 
|   // Generate the `after`, `prepend`, `before`, `append`, | 
|   // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods. | 
|   adjacencyOperators.forEach(function(operator, operatorIndex) { | 
|     var inside = operatorIndex % 2 //=> prepend, append | 
|   | 
|     $.fn[operator] = function(){ | 
|       // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings | 
|       var argType, nodes = $.map(arguments, function(arg) { | 
|             var arr = [] | 
|             argType = type(arg) | 
|             if (argType == "array") { | 
|               arg.forEach(function(el) { | 
|                 if (el.nodeType !== undefined) return arr.push(el) | 
|                 else if ($.zepto.isZ(el)) return arr = arr.concat(el.get()) | 
|                 arr = arr.concat(zepto.fragment(el)) | 
|               }) | 
|               return arr | 
|             } | 
|             return argType == "object" || arg == null ? | 
|               arg : zepto.fragment(arg) | 
|           }), | 
|           parent, copyByClone = this.length > 1 | 
|       if (nodes.length < 1) return this | 
|   | 
|       return this.each(function(_, target){ | 
|         parent = inside ? target : target.parentNode | 
|   | 
|         // convert all methods to a "before" operation | 
|         target = operatorIndex == 0 ? target.nextSibling : | 
|                  operatorIndex == 1 ? target.firstChild : | 
|                  operatorIndex == 2 ? target : | 
|                  null | 
|   | 
|         var parentInDocument = $.contains(document.documentElement, parent) | 
|   | 
|         nodes.forEach(function(node){ | 
|           if (copyByClone) node = node.cloneNode(true) | 
|           else if (!parent) return $(node).remove() | 
|   | 
|           parent.insertBefore(node, target) | 
|           if (parentInDocument) traverseNode(node, function(el){ | 
|             if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' && | 
|                (!el.type || el.type === 'text/javascript') && !el.src){ | 
|               var target = el.ownerDocument ? el.ownerDocument.defaultView : window | 
|               target['eval'].call(target, el.innerHTML) | 
|             } | 
|           }) | 
|         }) | 
|       }) | 
|     } | 
|   | 
|     // after    => insertAfter | 
|     // prepend  => prependTo | 
|     // before   => insertBefore | 
|     // append   => appendTo | 
|     $.fn[inside ? operator+'To' : 'insert'+(operatorIndex ? 'Before' : 'After')] = function(html){ | 
|       $(html)[operator](this) | 
|       return this | 
|     } | 
|   }) | 
|   | 
|   zepto.Z.prototype = Z.prototype = $.fn | 
|   | 
|   // Export internal API functions in the `$.zepto` namespace | 
|   zepto.uniq = uniq | 
|   zepto.deserializeValue = deserializeValue | 
|   $.zepto = zepto | 
|   | 
|   return $ | 
| })() | 
|   | 
| ;(function($){ | 
|   var _zid = 1, undefined, | 
|       slice = Array.prototype.slice, | 
|       isFunction = $.isFunction, | 
|       isString = function(obj){ return typeof obj == 'string' }, | 
|       handlers = {}, | 
|       specialEvents={}, | 
|       focusinSupported = 'onfocusin' in window, | 
|       focus = { focus: 'focusin', blur: 'focusout' }, | 
|       hover = { mouseenter: 'mouseover', mouseleave: 'mouseout' } | 
|   | 
|   specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents' | 
|   | 
|   function zid(element) { | 
|     return element._zid || (element._zid = _zid++) | 
|   } | 
|   function findHandlers(element, event, fn, selector) { | 
|     event = parse(event) | 
|     if (event.ns) var matcher = matcherFor(event.ns) | 
|     return (handlers[zid(element)] || []).filter(function(handler) { | 
|       return handler | 
|         && (!event.e  || handler.e == event.e) | 
|         && (!event.ns || matcher.test(handler.ns)) | 
|         && (!fn       || zid(handler.fn) === zid(fn)) | 
|         && (!selector || handler.sel == selector) | 
|     }) | 
|   } | 
|   function parse(event) { | 
|     var parts = ('' + event).split('.') | 
|     return {e: parts[0], ns: parts.slice(1).sort().join(' ')} | 
|   } | 
|   function matcherFor(ns) { | 
|     return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)') | 
|   } | 
|   | 
|   function eventCapture(handler, captureSetting) { | 
|     return handler.del && | 
|       (!focusinSupported && (handler.e in focus)) || | 
|       !!captureSetting | 
|   } | 
|   | 
|   function realEvent(type) { | 
|     return hover[type] || (focusinSupported && focus[type]) || type | 
|   } | 
|   | 
|   function add(element, events, fn, data, selector, delegator, capture){ | 
|     var id = zid(element), set = (handlers[id] || (handlers[id] = [])) | 
|     events.split(/\s/).forEach(function(event){ | 
|       if (event == 'ready') return $(document).ready(fn) | 
|       var handler   = parse(event) | 
|       handler.fn    = fn | 
|       handler.sel   = selector | 
|       // emulate mouseenter, mouseleave | 
|       if (handler.e in hover) fn = function(e){ | 
|         var related = e.relatedTarget | 
|         if (!related || (related !== this && !$.contains(this, related))) | 
|           return handler.fn.apply(this, arguments) | 
|       } | 
|       handler.del   = delegator | 
|       var callback  = delegator || fn | 
|       handler.proxy = function(e){ | 
|         e = compatible(e) | 
|         if (e.isImmediatePropagationStopped()) return | 
|         e.data = data | 
|         var result = callback.apply(element, e._args == undefined ? [e] : [e].concat(e._args)) | 
|         if (result === false) e.preventDefault(), e.stopPropagation() | 
|         return result | 
|       } | 
|       handler.i = set.length | 
|       set.push(handler) | 
|       if ('addEventListener' in element) | 
|         element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture)) | 
|     }) | 
|   } | 
|   function remove(element, events, fn, selector, capture){ | 
|     var id = zid(element) | 
|     ;(events || '').split(/\s/).forEach(function(event){ | 
|       findHandlers(element, event, fn, selector).forEach(function(handler){ | 
|         delete handlers[id][handler.i] | 
|       if ('removeEventListener' in element) | 
|         element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture)) | 
|       }) | 
|     }) | 
|   } | 
|   | 
|   $.event = { add: add, remove: remove } | 
|   | 
|   $.proxy = function(fn, context) { | 
|     var args = (2 in arguments) && slice.call(arguments, 2) | 
|     if (isFunction(fn)) { | 
|       var proxyFn = function(){ return fn.apply(context, args ? args.concat(slice.call(arguments)) : arguments) } | 
|       proxyFn._zid = zid(fn) | 
|       return proxyFn | 
|     } else if (isString(context)) { | 
|       if (args) { | 
|         args.unshift(fn[context], fn) | 
|         return $.proxy.apply(null, args) | 
|       } else { | 
|         return $.proxy(fn[context], fn) | 
|       } | 
|     } else { | 
|       throw new TypeError("expected function") | 
|     } | 
|   } | 
|   | 
|   $.fn.bind = function(event, data, callback){ | 
|     return this.on(event, data, callback) | 
|   } | 
|   $.fn.unbind = function(event, callback){ | 
|     return this.off(event, callback) | 
|   } | 
|   $.fn.one = function(event, selector, data, callback){ | 
|     return this.on(event, selector, data, callback, 1) | 
|   } | 
|   | 
|   var returnTrue = function(){return true}, | 
|       returnFalse = function(){return false}, | 
|       ignoreProperties = /^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/, | 
|       eventMethods = { | 
|         preventDefault: 'isDefaultPrevented', | 
|         stopImmediatePropagation: 'isImmediatePropagationStopped', | 
|         stopPropagation: 'isPropagationStopped' | 
|       } | 
|   | 
|   function compatible(event, source) { | 
|     if (source || !event.isDefaultPrevented) { | 
|       source || (source = event) | 
|   | 
|       $.each(eventMethods, function(name, predicate) { | 
|         var sourceMethod = source[name] | 
|         event[name] = function(){ | 
|           this[predicate] = returnTrue | 
|           return sourceMethod && sourceMethod.apply(source, arguments) | 
|         } | 
|         event[predicate] = returnFalse | 
|       }) | 
|   | 
|       event.timeStamp || (event.timeStamp = Date.now()) | 
|   | 
|       if (source.defaultPrevented !== undefined ? source.defaultPrevented : | 
|           'returnValue' in source ? source.returnValue === false : | 
|           source.getPreventDefault && source.getPreventDefault()) | 
|         event.isDefaultPrevented = returnTrue | 
|     } | 
|     return event | 
|   } | 
|   | 
|   function createProxy(event) { | 
|     var key, proxy = { originalEvent: event } | 
|     for (key in event) | 
|       if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key] | 
|   | 
|     return compatible(proxy, event) | 
|   } | 
|   | 
|   $.fn.delegate = function(selector, event, callback){ | 
|     return this.on(event, selector, callback) | 
|   } | 
|   $.fn.undelegate = function(selector, event, callback){ | 
|     return this.off(event, selector, callback) | 
|   } | 
|   | 
|   $.fn.live = function(event, callback){ | 
|     $(document.body).delegate(this.selector, event, callback) | 
|     return this | 
|   } | 
|   $.fn.die = function(event, callback){ | 
|     $(document.body).undelegate(this.selector, event, callback) | 
|     return this | 
|   } | 
|   | 
|   $.fn.on = function(event, selector, data, callback, one){ | 
|     var autoRemove, delegator, $this = this | 
|     if (event && !isString(event)) { | 
|       $.each(event, function(type, fn){ | 
|         $this.on(type, selector, data, fn, one) | 
|       }) | 
|       return $this | 
|     } | 
|   | 
|     if (!isString(selector) && !isFunction(callback) && callback !== false) | 
|       callback = data, data = selector, selector = undefined | 
|     if (callback === undefined || data === false) | 
|       callback = data, data = undefined | 
|   | 
|     if (callback === false) callback = returnFalse | 
|   | 
|     return $this.each(function(_, element){ | 
|       if (one) autoRemove = function(e){ | 
|         remove(element, e.type, callback) | 
|         return callback.apply(this, arguments) | 
|       } | 
|   | 
|       if (selector) delegator = function(e){ | 
|         var evt, match = $(e.target).closest(selector, element).get(0) | 
|         if (match && match !== element) { | 
|           evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element}) | 
|           return (autoRemove || callback).apply(match, [evt].concat(slice.call(arguments, 1))) | 
|         } | 
|       } | 
|   | 
|       add(element, event, callback, data, selector, delegator || autoRemove) | 
|     }) | 
|   } | 
|   $.fn.off = function(event, selector, callback){ | 
|     var $this = this | 
|     if (event && !isString(event)) { | 
|       $.each(event, function(type, fn){ | 
|         $this.off(type, selector, fn) | 
|       }) | 
|       return $this | 
|     } | 
|   | 
|     if (!isString(selector) && !isFunction(callback) && callback !== false) | 
|       callback = selector, selector = undefined | 
|   | 
|     if (callback === false) callback = returnFalse | 
|   | 
|     return $this.each(function(){ | 
|       remove(this, event, callback, selector) | 
|     }) | 
|   } | 
|   | 
|   $.fn.trigger = function(event, args){ | 
|     event = (isString(event) || $.isPlainObject(event)) ? $.Event(event) : compatible(event) | 
|     event._args = args | 
|     return this.each(function(){ | 
|       // handle focus(), blur() by calling them directly | 
|       if (event.type in focus && typeof this[event.type] == "function") this[event.type]() | 
|       // items in the collection might not be DOM elements | 
|       else if ('dispatchEvent' in this) this.dispatchEvent(event) | 
|       else $(this).triggerHandler(event, args) | 
|     }) | 
|   } | 
|   | 
|   // triggers event handlers on current element just as if an event occurred, | 
|   // doesn't trigger an actual event, doesn't bubble | 
|   $.fn.triggerHandler = function(event, args){ | 
|     var e, result | 
|     this.each(function(i, element){ | 
|       e = createProxy(isString(event) ? $.Event(event) : event) | 
|       e._args = args | 
|       e.target = element | 
|       $.each(findHandlers(element, event.type || event), function(i, handler){ | 
|         result = handler.proxy(e) | 
|         if (e.isImmediatePropagationStopped()) return false | 
|       }) | 
|     }) | 
|     return result | 
|   } | 
|   | 
|   // shortcut methods for `.bind(event, fn)` for each event type | 
|   ;('focusin focusout focus blur load resize scroll unload click dblclick '+ | 
|   'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave '+ | 
|   'change select keydown keypress keyup error').split(' ').forEach(function(event) { | 
|     $.fn[event] = function(callback) { | 
|       return (0 in arguments) ? | 
|         this.bind(event, callback) : | 
|         this.trigger(event) | 
|     } | 
|   }) | 
|   | 
|   $.Event = function(type, props) { | 
|     if (!isString(type)) props = type, type = props.type | 
|     var event = document.createEvent(specialEvents[type] || 'Events'), bubbles = true | 
|     if (props) for (var name in props) (name == 'bubbles') ? (bubbles = !!props[name]) : (event[name] = props[name]) | 
|     event.initEvent(type, bubbles, true) | 
|     return compatible(event) | 
|   } | 
|   | 
| })(Zepto) | 
|   | 
| ;(function($){ | 
|   var jsonpID = +new Date(), | 
|       document = window.document, | 
|       key, | 
|       name, | 
|       rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, | 
|       scriptTypeRE = /^(?:text|application)\/javascript/i, | 
|       xmlTypeRE = /^(?:text|application)\/xml/i, | 
|       jsonType = 'application/json', | 
|       htmlType = 'text/html', | 
|       blankRE = /^\s*$/, | 
|       originAnchor = document.createElement('a') | 
|   | 
|   originAnchor.href = window.location.href | 
|   | 
|   // trigger a custom event and return false if it was cancelled | 
|   function triggerAndReturn(context, eventName, data) { | 
|     var event = $.Event(eventName) | 
|     $(context).trigger(event, data) | 
|     return !event.isDefaultPrevented() | 
|   } | 
|   | 
|   // trigger an Ajax "global" event | 
|   function triggerGlobal(settings, context, eventName, data) { | 
|     if (settings.global) return triggerAndReturn(context || document, eventName, data) | 
|   } | 
|   | 
|   // Number of active Ajax requests | 
|   $.active = 0 | 
|   | 
|   function ajaxStart(settings) { | 
|     if (settings.global && $.active++ === 0) triggerGlobal(settings, null, 'ajaxStart') | 
|   } | 
|   function ajaxStop(settings) { | 
|     if (settings.global && !(--$.active)) triggerGlobal(settings, null, 'ajaxStop') | 
|   } | 
|   | 
|   // triggers an extra global event "ajaxBeforeSend" that's like "ajaxSend" but cancelable | 
|   function ajaxBeforeSend(xhr, settings) { | 
|     var context = settings.context | 
|     if (settings.beforeSend.call(context, xhr, settings) === false || | 
|         triggerGlobal(settings, context, 'ajaxBeforeSend', [xhr, settings]) === false) | 
|       return false | 
|   | 
|     triggerGlobal(settings, context, 'ajaxSend', [xhr, settings]) | 
|   } | 
|   function ajaxSuccess(data, xhr, settings, deferred) { | 
|     var context = settings.context, status = 'success' | 
|     settings.success.call(context, data, status, xhr) | 
|     if (deferred) deferred.resolveWith(context, [data, status, xhr]) | 
|     triggerGlobal(settings, context, 'ajaxSuccess', [xhr, settings, data]) | 
|     ajaxComplete(status, xhr, settings) | 
|   } | 
|   // type: "timeout", "error", "abort", "parsererror" | 
|   function ajaxError(error, type, xhr, settings, deferred) { | 
|     var context = settings.context | 
|     settings.error.call(context, xhr, type, error) | 
|     if (deferred) deferred.rejectWith(context, [xhr, type, error]) | 
|     triggerGlobal(settings, context, 'ajaxError', [xhr, settings, error || type]) | 
|     ajaxComplete(type, xhr, settings) | 
|   } | 
|   // status: "success", "notmodified", "error", "timeout", "abort", "parsererror" | 
|   function ajaxComplete(status, xhr, settings) { | 
|     var context = settings.context | 
|     settings.complete.call(context, xhr, status) | 
|     triggerGlobal(settings, context, 'ajaxComplete', [xhr, settings]) | 
|     ajaxStop(settings) | 
|   } | 
|   | 
|   function ajaxDataFilter(data, type, settings) { | 
|     if (settings.dataFilter == empty) return data | 
|     var context = settings.context | 
|     return settings.dataFilter.call(context, data, type) | 
|   } | 
|   | 
|   // Empty function, used as default callback | 
|   function empty() {} | 
|   | 
|   $.ajaxJSONP = function(options, deferred){ | 
|     if (!('type' in options)) return $.ajax(options) | 
|   | 
|     var _callbackName = options.jsonpCallback, | 
|       callbackName = ($.isFunction(_callbackName) ? | 
|         _callbackName() : _callbackName) || ('Zepto' + (jsonpID++)), | 
|       script = document.createElement('script'), | 
|       originalCallback = window[callbackName], | 
|       responseData, | 
|       abort = function(errorType) { | 
|         $(script).triggerHandler('error', errorType || 'abort') | 
|       }, | 
|       xhr = { abort: abort }, abortTimeout | 
|   | 
|     if (deferred) deferred.promise(xhr) | 
|   | 
|     $(script).on('load error', function(e, errorType){ | 
|       clearTimeout(abortTimeout) | 
|       $(script).off().remove() | 
|   | 
|       if (e.type == 'error' || !responseData) { | 
|         ajaxError(null, errorType || 'error', xhr, options, deferred) | 
|       } else { | 
|         ajaxSuccess(responseData[0], xhr, options, deferred) | 
|       } | 
|   | 
|       window[callbackName] = originalCallback | 
|       if (responseData && $.isFunction(originalCallback)) | 
|         originalCallback(responseData[0]) | 
|   | 
|       originalCallback = responseData = undefined | 
|     }) | 
|   | 
|     if (ajaxBeforeSend(xhr, options) === false) { | 
|       abort('abort') | 
|       return xhr | 
|     } | 
|   | 
|     window[callbackName] = function(){ | 
|       responseData = arguments | 
|     } | 
|   | 
|     script.src = options.url.replace(/\?(.+)=\?/, '?$1=' + callbackName) | 
|     document.head.appendChild(script) | 
|   | 
|     if (options.timeout > 0) abortTimeout = setTimeout(function(){ | 
|       abort('timeout') | 
|     }, options.timeout) | 
|   | 
|     return xhr | 
|   } | 
|   | 
|   $.ajaxSettings = { | 
|     // Default type of request | 
|     type: 'GET', | 
|     // Callback that is executed before request | 
|     beforeSend: empty, | 
|     // Callback that is executed if the request succeeds | 
|     success: empty, | 
|     // Callback that is executed the the server drops error | 
|     error: empty, | 
|     // Callback that is executed on request complete (both: error and success) | 
|     complete: empty, | 
|     // The context for the callbacks | 
|     context: null, | 
|     // Whether to trigger "global" Ajax events | 
|     global: true, | 
|     // Transport | 
|     xhr: function () { | 
|       return new window.XMLHttpRequest() | 
|     }, | 
|     // MIME types mapping | 
|     // IIS returns Javascript as "application/x-javascript" | 
|     accepts: { | 
|       script: 'text/javascript, application/javascript, application/x-javascript', | 
|       json:   jsonType, | 
|       xml:    'application/xml, text/xml', | 
|       html:   htmlType, | 
|       text:   'text/plain' | 
|     }, | 
|     // Whether the request is to another domain | 
|     crossDomain: false, | 
|     // Default timeout | 
|     timeout: 0, | 
|     // Whether data should be serialized to string | 
|     processData: true, | 
|     // Whether the browser should be allowed to cache GET responses | 
|     cache: true, | 
|     //Used to handle the raw response data of XMLHttpRequest. | 
|     //This is a pre-filtering function to sanitize the response. | 
|     //The sanitized response should be returned | 
|     dataFilter: empty | 
|   } | 
|   | 
|   function mimeToDataType(mime) { | 
|     if (mime) mime = mime.split(';', 2)[0] | 
|     return mime && ( mime == htmlType ? 'html' : | 
|       mime == jsonType ? 'json' : | 
|       scriptTypeRE.test(mime) ? 'script' : | 
|       xmlTypeRE.test(mime) && 'xml' ) || 'text' | 
|   } | 
|   | 
|   function appendQuery(url, query) { | 
|     if (query == '') return url | 
|     return (url + '&' + query).replace(/[&?]{1,2}/, '?') | 
|   } | 
|   | 
|   // serialize payload and append it to the URL for GET requests | 
|   function serializeData(options) { | 
|     if (options.processData && options.data && $.type(options.data) != "string") | 
|       options.data = $.param(options.data, options.traditional) | 
|     if (options.data && (!options.type || options.type.toUpperCase() == 'GET' || 'jsonp' == options.dataType)) | 
|       options.url = appendQuery(options.url, options.data), options.data = undefined | 
|   } | 
|   | 
|   $.ajax = function(options){ | 
|     var settings = $.extend({}, options || {}), | 
|         deferred = $.Deferred && $.Deferred(), | 
|         urlAnchor, hashIndex | 
|     for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key] | 
|   | 
|     ajaxStart(settings) | 
|   | 
|     if (!settings.crossDomain) { | 
|       urlAnchor = document.createElement('a') | 
|       urlAnchor.href = settings.url | 
|       // cleans up URL for .href (IE only), see https://github.com/madrobby/zepto/pull/1049 | 
|       urlAnchor.href = urlAnchor.href | 
|       settings.crossDomain = (originAnchor.protocol + '//' + originAnchor.host) !== (urlAnchor.protocol + '//' + urlAnchor.host) | 
|     } | 
|   | 
|     if (!settings.url) settings.url = window.location.toString() | 
|     if ((hashIndex = settings.url.indexOf('#')) > -1) settings.url = settings.url.slice(0, hashIndex) | 
|     serializeData(settings) | 
|   | 
|     var dataType = settings.dataType, hasPlaceholder = /\?.+=\?/.test(settings.url) | 
|     if (hasPlaceholder) dataType = 'jsonp' | 
|   | 
|     if (settings.cache === false || ( | 
|          (!options || options.cache !== true) && | 
|          ('script' == dataType || 'jsonp' == dataType) | 
|         )) | 
|       settings.url = appendQuery(settings.url, '_=' + Date.now()) | 
|   | 
|     if ('jsonp' == dataType) { | 
|       if (!hasPlaceholder) | 
|         settings.url = appendQuery(settings.url, | 
|           settings.jsonp ? (settings.jsonp + '=?') : settings.jsonp === false ? '' : 'callback=?') | 
|       return $.ajaxJSONP(settings, deferred) | 
|     } | 
|   | 
|     var mime = settings.accepts[dataType], | 
|         headers = { }, | 
|         setHeader = function(name, value) { headers[name.toLowerCase()] = [name, value] }, | 
|         protocol = /^([\w-]+:)\/\//.test(settings.url) ? RegExp.$1 : window.location.protocol, | 
|         xhr = settings.xhr(), | 
|         nativeSetHeader = xhr.setRequestHeader, | 
|         abortTimeout | 
|   | 
|     if (deferred) deferred.promise(xhr) | 
|   | 
|     if (!settings.crossDomain) setHeader('X-Requested-With', 'XMLHttpRequest') | 
|     setHeader('Accept', mime || '*/*') | 
|     if (mime = settings.mimeType || mime) { | 
|       if (mime.indexOf(',') > -1) mime = mime.split(',', 2)[0] | 
|       xhr.overrideMimeType && xhr.overrideMimeType(mime) | 
|     } | 
|     if (settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() != 'GET')) | 
|       setHeader('Content-Type', settings.contentType || 'application/x-www-form-urlencoded') | 
|   | 
|     if (settings.headers) for (name in settings.headers) setHeader(name, settings.headers[name]) | 
|     xhr.setRequestHeader = setHeader | 
|   | 
|     xhr.onreadystatechange = function(){ | 
|       if (xhr.readyState == 4) { | 
|         xhr.onreadystatechange = empty | 
|         clearTimeout(abortTimeout) | 
|         var result, error = false | 
|         if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == 'file:')) { | 
|           dataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader('content-type')) | 
|   | 
|           if (xhr.responseType == 'arraybuffer' || xhr.responseType == 'blob') | 
|             result = xhr.response | 
|           else { | 
|             result = xhr.responseText | 
|   | 
|             try { | 
|               // http://perfectionkills.com/global-eval-what-are-the-options/ | 
|               // sanitize response accordingly if data filter callback provided | 
|               result = ajaxDataFilter(result, dataType, settings) | 
|               if (dataType == 'script')    (1,eval)(result) | 
|               else if (dataType == 'xml')  result = xhr.responseXML | 
|               else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result) | 
|             } catch (e) { error = e } | 
|   | 
|             if (error) return ajaxError(error, 'parsererror', xhr, settings, deferred) | 
|           } | 
|   | 
|           ajaxSuccess(result, xhr, settings, deferred) | 
|         } else { | 
|           ajaxError(xhr.statusText || null, xhr.status ? 'error' : 'abort', xhr, settings, deferred) | 
|         } | 
|       } | 
|     } | 
|   | 
|     if (ajaxBeforeSend(xhr, settings) === false) { | 
|       xhr.abort() | 
|       ajaxError(null, 'abort', xhr, settings, deferred) | 
|       return xhr | 
|     } | 
|   | 
|     var async = 'async' in settings ? settings.async : true | 
|     xhr.open(settings.type, settings.url, async, settings.username, settings.password) | 
|   | 
|     if (settings.xhrFields) for (name in settings.xhrFields) xhr[name] = settings.xhrFields[name] | 
|   | 
|     for (name in headers) nativeSetHeader.apply(xhr, headers[name]) | 
|   | 
|     if (settings.timeout > 0) abortTimeout = setTimeout(function(){ | 
|         xhr.onreadystatechange = empty | 
|         xhr.abort() | 
|         ajaxError(null, 'timeout', xhr, settings, deferred) | 
|       }, settings.timeout) | 
|   | 
|     // avoid sending empty string (#319) | 
|     xhr.send(settings.data ? settings.data : null) | 
|     return xhr | 
|   } | 
|   | 
|   // handle optional data/success arguments | 
|   function parseArguments(url, data, success, dataType) { | 
|     if ($.isFunction(data)) dataType = success, success = data, data = undefined | 
|     if (!$.isFunction(success)) dataType = success, success = undefined | 
|     return { | 
|       url: url | 
|     , data: data | 
|     , success: success | 
|     , dataType: dataType | 
|     } | 
|   } | 
|   | 
|   $.get = function(/* url, data, success, dataType */){ | 
|     return $.ajax(parseArguments.apply(null, arguments)) | 
|   } | 
|   | 
|   $.post = function(/* url, data, success, dataType */){ | 
|     var options = parseArguments.apply(null, arguments) | 
|     options.type = 'POST' | 
|     return $.ajax(options) | 
|   } | 
|   | 
|   $.getJSON = function(/* url, data, success */){ | 
|     var options = parseArguments.apply(null, arguments) | 
|     options.dataType = 'json' | 
|     return $.ajax(options) | 
|   } | 
|   | 
|   $.fn.load = function(url, data, success){ | 
|     if (!this.length) return this | 
|     var self = this, parts = url.split(/\s/), selector, | 
|         options = parseArguments(url, data, success), | 
|         callback = options.success | 
|     if (parts.length > 1) options.url = parts[0], selector = parts[1] | 
|     options.success = function(response){ | 
|       self.html(selector ? | 
|         $('<div>').html(response.replace(rscript, "")).find(selector) | 
|         : response) | 
|       callback && callback.apply(self, arguments) | 
|     } | 
|     $.ajax(options) | 
|     return this | 
|   } | 
|   | 
|   var escape = encodeURIComponent | 
|   | 
|   function serialize(params, obj, traditional, scope){ | 
|     var type, array = $.isArray(obj), hash = $.isPlainObject(obj) | 
|     $.each(obj, function(key, value) { | 
|       type = $.type(value) | 
|       if (scope) key = traditional ? scope : | 
|         scope + '[' + (hash || type == 'object' || type == 'array' ? key : '') + ']' | 
|       // handle data in serializeArray() format | 
|       if (!scope && array) params.add(value.name, value.value) | 
|       // recurse into nested objects | 
|       else if (type == "array" || (!traditional && type == "object")) | 
|         serialize(params, value, traditional, key) | 
|       else params.add(key, value) | 
|     }) | 
|   } | 
|   | 
|   $.param = function(obj, traditional){ | 
|     var params = [] | 
|     params.add = function(key, value) { | 
|       if ($.isFunction(value)) value = value() | 
|       if (value == null) value = "" | 
|       this.push(escape(key) + '=' + escape(value)) | 
|     } | 
|     serialize(params, obj, traditional) | 
|     return params.join('&').replace(/%20/g, '+') | 
|   } | 
| })(Zepto) | 
|   | 
| ;(function($){ | 
|   $.fn.serializeArray = function() { | 
|     var name, type, result = [], | 
|       add = function(value) { | 
|         if (value.forEach) return value.forEach(add) | 
|         result.push({ name: name, value: value }) | 
|       } | 
|     if (this[0]) $.each(this[0].elements, function(_, field){ | 
|       type = field.type, name = field.name | 
|       if (name && field.nodeName.toLowerCase() != 'fieldset' && | 
|         !field.disabled && type != 'submit' && type != 'reset' && type != 'button' && type != 'file' && | 
|         ((type != 'radio' && type != 'checkbox') || field.checked)) | 
|           add($(field).val()) | 
|     }) | 
|     return result | 
|   } | 
|   | 
|   $.fn.serialize = function(){ | 
|     var result = [] | 
|     this.serializeArray().forEach(function(elm){ | 
|       result.push(encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.value)) | 
|     }) | 
|     return result.join('&') | 
|   } | 
|   | 
|   $.fn.submit = function(callback) { | 
|     if (0 in arguments) this.bind('submit', callback) | 
|     else if (this.length) { | 
|       var event = $.Event('submit') | 
|       this.eq(0).trigger(event) | 
|       if (!event.isDefaultPrevented()) this.get(0).submit() | 
|     } | 
|     return this | 
|   } | 
|   | 
| })(Zepto) | 
|   | 
| ;(function(){ | 
|   // getComputedStyle shouldn't freak out when called | 
|   // without a valid element as argument | 
|   try { | 
|     getComputedStyle(undefined) | 
|   } catch(e) { | 
|     var nativeGetComputedStyle = getComputedStyle | 
|     window.getComputedStyle = function(element, pseudoElement){ | 
|       try { | 
|         return nativeGetComputedStyle(element, pseudoElement) | 
|       } catch(e) { | 
|         return null | 
|       } | 
|     } | 
|   } | 
| })() | 
|    | 
|    | 
|   exports('zepto', Zepto) | 
| }); |