swc/ecmascript/minifier/tests/projects/output/mootools-1.4.5.js

3846 lines
166 KiB
JavaScript
Raw Normal View History

!function() {
this.MooTools = {
version: "1.4.5",
build: "ab8ea8824dc3b24b6666867a2c4ed58ebb762cf0"
};
var typeOf = this.typeOf = function(item) {
if (null == item) return "null";
if (null != item.$family) return item.$family();
if (item.nodeName) {
if (1 == item.nodeType) return "element";
if (3 == item.nodeType) return /\S/.test(item.nodeValue) ? "textnode" : "whitespace";
} else if ("number" == typeof item.length) {
if (item.callee) return "arguments";
if ("item" in item) return "collection";
}
return typeof item;
}, instanceOf = this.instanceOf = function(item, object) {
if (null == item) return !1;
for(var constructor = item.$constructor || item.constructor; constructor;){
if (constructor === object) return !0;
constructor = constructor.parent;
}
return !!item.hasOwnProperty && item instanceof object;
}, Function = this.Function, enumerables = !0;
for(var i in {
toString: 1
})enumerables = null;
enumerables && (enumerables = [
"hasOwnProperty",
"valueOf",
"isPrototypeOf",
"propertyIsEnumerable",
"toLocaleString",
"toString",
"constructor"
]), Function.prototype.overloadSetter = function(usePlural) {
var self = this;
return function(a, b) {
if (null == a) return this;
if (usePlural || "string" != typeof a) {
for(var k in a)self.call(this, k, a[k]);
if (enumerables) for(var i = enumerables.length; i--;)k = enumerables[i], a.hasOwnProperty(k) && self.call(this, k, a[k]);
} else self.call(this, a, b);
return this;
};
}, Function.prototype.overloadGetter = function(usePlural) {
var self = this;
return function(a) {
var args, result;
if ("string" != typeof a ? args = a : arguments.length > 1 ? args = arguments : usePlural && (args = [
a
]), args) {
result = {
};
for(var i = 0; i < args.length; i++)result[args[i]] = self.call(this, args[i]);
} else result = self.call(this, a);
return result;
};
}, Function.prototype.extend = (function(key, value) {
this[key] = value;
}).overloadSetter(), Function.prototype.implement = (function(key, value) {
this.prototype[key] = value;
}).overloadSetter();
var slice = Array.prototype.slice;
Function.from = function(item) {
return "function" == typeOf(item) ? item : function() {
return item;
};
}, Array.from = function(item) {
return null == item ? [] : Type.isEnumerable(item) && "string" != typeof item ? "array" == typeOf(item) ? item : slice.call(item) : [
item
];
}, Number.from = function(item) {
var number = parseFloat(item);
return isFinite(number) ? number : null;
}, String.from = function(item) {
return item + "";
}, Function.implement({
hide: function() {
return this.$hidden = !0, this;
},
protect: function() {
return this.$protected = !0, this;
}
});
var Type = this.Type = function(name, object) {
if (name) {
var lower = name.toLowerCase(), typeCheck = function(item) {
return typeOf(item) == lower;
};
Type["is" + name] = typeCheck, null != object && (object.prototype.$family = (function() {
return lower;
}).hide(), object.type = typeCheck);
}
return null == object ? null : (object.extend(this), object.$constructor = Type, object.prototype.$constructor = object, object);
}, toString = Object.prototype.toString;
Type.isEnumerable = function(item) {
return null != item && "number" == typeof item.length && "[object Function]" != toString.call(item);
};
var hooks = {
}, hooksOf = function(object) {
var type = typeOf(object.prototype);
return hooks[type] || (hooks[type] = []);
}, implement = function(name, method) {
if (!method || !method.$hidden) {
for(var hooks = hooksOf(this), i = 0; i < hooks.length; i++){
var hook = hooks[i];
"type" == typeOf(hook) ? implement.call(hook, name, method) : hook.call(this, name, method);
}
var previous = this.prototype[name];
null != previous && previous.$protected || (this.prototype[name] = method), null == this[name] && "function" == typeOf(method) && extend.call(this, name, function(item) {
return method.apply(item, slice.call(arguments, 1));
});
}
}, extend = function(name, method) {
if (!method || !method.$hidden) {
var previous = this[name];
null != previous && previous.$protected || (this[name] = method);
}
};
Type.implement({
implement: implement.overloadSetter(),
extend: extend.overloadSetter(),
alias: (function(name, existing) {
implement.call(this, name, this.prototype[existing]);
}).overloadSetter(),
mirror: function(hook) {
return hooksOf(this).push(hook), this;
}
}), new Type("Type", Type);
var force = function(name, object, methods) {
var isType = object != Object, prototype = object.prototype;
isType && (object = new Type(name, object));
for(var i = 0, l = methods.length; i < l; i++){
var key = methods[i], generic = object[key], proto = prototype[key];
generic && generic.protect(), isType && proto && object.implement(key, proto.protect());
}
if (isType) {
var methodsEnumerable = prototype.propertyIsEnumerable(methods[0]);
object.forEachMethod = function(fn) {
if (!methodsEnumerable) for(var i = 0, l = methods.length; i < l; i++)fn.call(prototype, prototype[methods[i]], methods[i]);
for(var key in prototype)fn.call(prototype, prototype[key], key);
};
}
return force;
};
force("String", String, [
"charAt",
"charCodeAt",
"concat",
"indexOf",
"lastIndexOf",
"match",
"quote",
"replace",
"search",
"slice",
"split",
"substr",
"substring",
"trim",
"toLowerCase",
"toUpperCase"
])("Array", Array, [
"pop",
"push",
"reverse",
"shift",
"sort",
"splice",
"unshift",
"concat",
"join",
"slice",
"indexOf",
"lastIndexOf",
"filter",
"forEach",
"every",
"map",
"some",
"reduce",
"reduceRight"
])("Number", Number, [
"toExponential",
"toFixed",
"toLocaleString",
"toPrecision"
])("Function", Function, [
"apply",
"call",
"bind"
])("RegExp", RegExp, [
"exec",
"test"
])("Object", Object, [
"create",
"defineProperty",
"defineProperties",
"keys",
"getPrototypeOf",
"getOwnPropertyDescriptor",
"getOwnPropertyNames",
"preventExtensions",
"isExtensible",
"seal",
"isSealed",
"freeze",
"isFrozen"
])("Date", Date, [
"now"
]), Object.extend = extend.overloadSetter(), Date.extend("now", function() {
return +new Date;
}), new Type("Boolean", Boolean), Number.prototype.$family = (function() {
return isFinite(this) ? "number" : "null";
}).hide(), Number.extend("random", function(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
});
var hasOwnProperty = Object.prototype.hasOwnProperty;
Object.extend("forEach", function(object, fn, bind) {
for(var key in object)hasOwnProperty.call(object, key) && fn.call(bind, object[key], key, object);
}), Object.each = Object.forEach, Array.implement({
forEach: function(fn, bind) {
for(var i = 0, l = this.length; i < l; i++)i in this && fn.call(bind, this[i], i, this);
},
each: function(fn, bind) {
return Array.forEach(this, fn, bind), this;
}
});
var cloneOf = function(item) {
switch(typeOf(item)){
case "array":
return item.clone();
case "object":
return Object.clone(item);
default:
return item;
}
};
Array.implement("clone", function() {
for(var i = this.length, clone = new Array(i); i--;)clone[i] = cloneOf(this[i]);
return clone;
});
var mergeOne = function(source, key, current) {
switch(typeOf(current)){
case "object":
"object" == typeOf(source[key]) ? Object.merge(source[key], current) : source[key] = Object.clone(current);
break;
case "array":
source[key] = current.clone();
break;
default:
source[key] = current;
}
return source;
};
Object.extend({
merge: function(source, k, v) {
if ("string" == typeOf(k)) return mergeOne(source, k, v);
for(var i = 1, l = arguments.length; i < l; i++){
var object = arguments[i];
for(var key in object)mergeOne(source, key, object[key]);
}
return source;
},
clone: function(object) {
var clone = {
};
for(var key in object)clone[key] = cloneOf(object[key]);
return clone;
},
append: function(original) {
for(var i = 1, l = arguments.length; i < l; i++){
var extended = arguments[i] || {
};
for(var key in extended)original[key] = extended[key];
}
return original;
}
}), [
"Object",
"WhiteSpace",
"TextNode",
"Collection",
"Arguments"
].each(function(name) {
new Type(name);
});
var UID = Date.now();
String.extend("uniqueID", function() {
return (UID++).toString(36);
});
var Hash = this.Hash = new Type("Hash", function(object) {
for(var key in "hash" == typeOf(object) && (object = Object.clone(object.getClean())), object)this[key] = object[key];
return this;
});
Hash.implement({
forEach: function(fn, bind) {
Object.forEach(this, fn, bind);
},
getClean: function() {
var clean = {
};
for(var key in this)this.hasOwnProperty(key) && (clean[key] = this[key]);
return clean;
},
getLength: function() {
var length = 0;
for(var key in this)this.hasOwnProperty(key) && length++;
return length;
}
}), Hash.alias("each", "forEach"), Object.type = Type.isObject;
var Native = this.Native = function(properties) {
return new Type(properties.name, properties.initialize);
};
Native.type = Type.type, Native.implement = function(objects, methods) {
for(var i = 0; i < objects.length; i++)objects[i].implement(methods);
return Native;
};
var arrayType = Array.type;
Array.type = function(item) {
return instanceOf(item, Array) || arrayType(item);
}, this.$A = function(item) {
return Array.from(item).slice();
}, this.$arguments = function(i) {
return function() {
return arguments[i];
};
}, this.$chk = function(obj) {
return !!(obj || 0 === obj);
}, this.$clear = function(timer) {
return clearTimeout(timer), clearInterval(timer), null;
}, this.$defined = function(obj) {
return null != obj;
}, this.$each = function(iterable, fn, bind) {
var type = typeOf(iterable);
("arguments" == type || "collection" == type || "array" == type || "elements" == type ? Array : Object).each(iterable, fn, bind);
}, this.$empty = function() {
}, this.$extend = function(original, extended) {
return Object.append(original, extended);
}, this.$H = function(object) {
return new Hash(object);
}, this.$merge = function() {
var args = Array.slice(arguments);
return args.unshift({
}), Object.merge.apply(null, args);
}, this.$lambda = Function.from, this.$mixin = Object.merge, this.$random = Number.random, this.$splat = Array.from, this.$time = Date.now, this.$type = function(object) {
var type = typeOf(object);
return "elements" == type ? "array" : "null" != type && type;
}, this.$unlink = function(object) {
switch(typeOf(object)){
case "object":
return Object.clone(object);
case "array":
return Array.clone(object);
case "hash":
return new Hash(object);
default:
return object;
}
};
}(), Array.implement({
every: function(fn, bind) {
for(var i = 0, l = this.length >>> 0; i < l; i++)if (i in this && !fn.call(bind, this[i], i, this)) return !1;
return !0;
},
filter: function(fn, bind) {
for(var value, results = [], i = 0, l = this.length >>> 0; i < l; i++)i in this && (value = this[i], fn.call(bind, value, i, this) && results.push(value));
return results;
},
indexOf: function(item, from) {
for(var length = this.length >>> 0, i = from < 0 ? Math.max(0, length + from) : from || 0; i < length; i++)if (this[i] === item) return i;
return -1;
},
map: function(fn, bind) {
for(var length = this.length >>> 0, results = Array(length), i = 0; i < length; i++)i in this && (results[i] = fn.call(bind, this[i], i, this));
return results;
},
some: function(fn, bind) {
for(var i = 0, l = this.length >>> 0; i < l; i++)if (i in this && fn.call(bind, this[i], i, this)) return !0;
return !1;
},
clean: function() {
return this.filter(function(item) {
return null != item;
});
},
invoke: function(methodName) {
var args = Array.slice(arguments, 1);
return this.map(function(item) {
return item[methodName].apply(item, args);
});
},
associate: function(keys) {
for(var obj = {
}, length = Math.min(this.length, keys.length), i = 0; i < length; i++)obj[keys[i]] = this[i];
return obj;
},
link: function(object) {
for(var result = {
}, i = 0, l = this.length; i < l; i++)for(var key in object)if (object[key](this[i])) {
result[key] = this[i], delete object[key];
break;
}
return result;
},
contains: function(item, from) {
return -1 != this.indexOf(item, from);
},
append: function(array) {
return this.push.apply(this, array), this;
},
getLast: function() {
return this.length ? this[this.length - 1] : null;
},
getRandom: function() {
return this.length ? this[Number.random(0, this.length - 1)] : null;
},
include: function(item) {
return this.contains(item) || this.push(item), this;
},
combine: function(array) {
for(var i = 0, l = array.length; i < l; i++)this.include(array[i]);
return this;
},
erase: function(item) {
for(var i = this.length; i--;)this[i] === item && this.splice(i, 1);
return this;
},
empty: function() {
return this.length = 0, this;
},
flatten: function() {
for(var array = [], i = 0, l = this.length; i < l; i++){
var type = typeOf(this[i]);
"null" != type && (array = array.concat("array" == type || "collection" == type || "arguments" == type || instanceOf(this[i], Array) ? Array.flatten(this[i]) : this[i]));
}
return array;
},
pick: function() {
for(var i = 0, l = this.length; i < l; i++)if (null != this[i]) return this[i];
return null;
},
hexToRgb: function(array) {
if (3 != this.length) return null;
var rgb = this.map(function(value) {
return 1 == value.length && (value += value), value.toInt(16);
});
return array ? rgb : "rgb(" + rgb + ")";
},
rgbToHex: function(array) {
if (this.length < 3) return null;
if (4 == this.length && 0 == this[3] && !array) return "transparent";
for(var hex = [], i = 0; i < 3; i++){
var bit = (this[i] - 0).toString(16);
hex.push(1 == bit.length ? "0" + bit : bit);
}
return array ? hex : "#" + hex.join("");
}
}), Array.alias("extend", "append");
var fireEvent, $pick = function() {
return Array.from(arguments).pick();
};
String.implement({
test: function(regex, params) {
return ("regexp" == typeOf(regex) ? regex : new RegExp("" + regex, params)).test(this);
},
contains: function(string, separator) {
return separator ? (separator + this + separator).indexOf(separator + string + separator) > -1 : String(this).indexOf(string) > -1;
},
trim: function() {
return String(this).replace(/^\s+|\s+$/g, "");
},
clean: function() {
return String(this).replace(/\s+/g, " ").trim();
},
camelCase: function() {
return String(this).replace(/-\D/g, function(match) {
return match.charAt(1).toUpperCase();
});
},
hyphenate: function() {
return String(this).replace(/[A-Z]/g, function(match) {
return "-" + match.charAt(0).toLowerCase();
});
},
capitalize: function() {
return String(this).replace(/\b[a-z]/g, function(match) {
return match.toUpperCase();
});
},
escapeRegExp: function() {
return String(this).replace(/([-.*+?^${}()|[\]\/\\])/g, "\\$1");
},
toInt: function(base) {
return parseInt(this, base || 10);
},
toFloat: function() {
return parseFloat(this);
},
hexToRgb: function(array) {
var hex = String(this).match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
return hex ? hex.slice(1).hexToRgb(array) : null;
},
rgbToHex: function(array) {
var rgb = String(this).match(/\d{1,3}/g);
return rgb ? rgb.rgbToHex(array) : null;
},
substitute: function(object, regexp) {
return String(this).replace(regexp || /\\?\{([^{}]+)\}/g, function(match, name) {
return "\\" == match.charAt(0) ? match.slice(1) : null != object[name] ? object[name] : "";
});
}
}), Number.implement({
limit: function(min, max) {
return Math.min(max, Math.max(min, this));
},
round: function(precision) {
return Math.round(this * (precision = Math.pow(10, precision || 0).toFixed(precision < 0 ? -precision : 0))) / precision;
},
times: function(fn, bind) {
for(var i = 0; i < this; i++)fn.call(bind, i, this);
},
toFloat: function() {
return parseFloat(this);
},
toInt: function(base) {
return parseInt(this, base || 10);
}
}), Number.alias("each", "times"), (function(math) {
var methods = {
};
math.each(function(name) {
Number[name] || (methods[name] = function() {
return Math[name].apply(null, [
this
].concat(Array.from(arguments)));
});
}), Number.implement(methods);
})([
"abs",
"acos",
"asin",
"atan",
"atan2",
"ceil",
"cos",
"exp",
"floor",
"log",
"max",
"min",
"pow",
"sin",
"sqrt",
"tan"
]), Function.extend({
attempt: function() {
for(var i = 0, l = arguments.length; i < l; i++)try {
return arguments[i]();
} catch (e) {
}
return null;
}
}), Function.implement({
attempt: function(args, bind) {
try {
return this.apply(bind, Array.from(args));
} catch (e) {
}
return null;
},
bind: function(that) {
var self = this, args = arguments.length > 1 ? Array.slice(arguments, 1) : null, F = function() {
}, bound = function() {
var context = that, length = arguments.length;
this instanceof bound && (F.prototype = self.prototype, context = new F);
var result = args || length ? self.apply(context, args && length ? args.concat(Array.slice(arguments)) : args || arguments) : self.call(context);
return context == that ? result : context;
};
return bound;
},
pass: function(args, bind) {
var self = this;
return null != args && (args = Array.from(args)), function() {
return self.apply(bind, args || arguments);
};
},
delay: function(delay, bind, args) {
return setTimeout(this.pass(null == args ? [] : args, bind), delay);
},
periodical: function(periodical, bind, args) {
return setInterval(this.pass(null == args ? [] : args, bind), periodical);
}
}), delete Function.prototype.bind, Function.implement({
create: function(options) {
var self = this;
return options = options || {
}, function(event) {
var args = options.arguments;
args = null != args ? Array.from(args) : Array.slice(arguments, options.event ? 1 : 0), options.event && (args = [
event || window.event
].extend(args));
var returns = function() {
return self.apply(options.bind || null, args);
};
return options.delay ? setTimeout(returns, options.delay) : options.periodical ? setInterval(returns, options.periodical) : options.attempt ? Function.attempt(returns) : returns();
};
},
bind: function(bind, args) {
var self = this;
return null != args && (args = Array.from(args)), function() {
return self.apply(bind, args || arguments);
};
},
bindWithEvent: function(bind, args) {
var self = this;
return null != args && (args = Array.from(args)), function(event) {
return self.apply(bind, null == args ? arguments : [
event
].concat(args));
};
},
run: function(args, bind) {
return this.apply(bind, Array.from(args));
}
}), Object.create == Function.prototype.create && (Object.create = null);
var $try = Function.attempt;
!function() {
var hasOwnProperty = Object.prototype.hasOwnProperty;
Object.extend({
subset: function(object, keys) {
for(var results = {
}, i = 0, l = keys.length; i < l; i++){
var k = keys[i];
k in object && (results[k] = object[k]);
}
return results;
},
map: function(object, fn, bind) {
var results = {
};
for(var key in object)hasOwnProperty.call(object, key) && (results[key] = fn.call(bind, object[key], key, object));
return results;
},
filter: function(object, fn, bind) {
var results = {
};
for(var key in object){
var value = object[key];
hasOwnProperty.call(object, key) && fn.call(bind, value, key, object) && (results[key] = value);
}
return results;
},
every: function(object, fn, bind) {
for(var key in object)if (hasOwnProperty.call(object, key) && !fn.call(bind, object[key], key)) return !1;
return !0;
},
some: function(object, fn, bind) {
for(var key in object)if (hasOwnProperty.call(object, key) && fn.call(bind, object[key], key)) return !0;
return !1;
},
keys: function(object) {
var keys = [];
for(var key in object)hasOwnProperty.call(object, key) && keys.push(key);
return keys;
},
values: function(object) {
var values = [];
for(var key in object)hasOwnProperty.call(object, key) && values.push(object[key]);
return values;
},
getLength: function(object) {
return Object.keys(object).length;
},
keyOf: function(object, value) {
for(var key in object)if (hasOwnProperty.call(object, key) && object[key] === value) return key;
return null;
},
contains: function(object, value) {
return null != Object.keyOf(object, value);
},
toQueryString: function(object, base) {
var queryString = [];
return Object.each(object, function(value, key) {
var result;
switch(base && (key = base + "[" + key + "]"), typeOf(value)){
case "object":
result = Object.toQueryString(value, key);
break;
case "array":
var qs = {
};
value.each(function(val, i) {
qs[i] = val;
}), result = Object.toQueryString(qs, key);
break;
default:
result = key + "=" + encodeURIComponent(value);
}
null != value && queryString.push(result);
}), queryString.join("&");
}
});
}(), Hash.implement({
has: Object.prototype.hasOwnProperty,
keyOf: function(value) {
return Object.keyOf(this, value);
},
hasValue: function(value) {
return Object.contains(this, value);
},
extend: function(properties) {
return Hash.each(properties || {
}, function(value, key) {
Hash.set(this, key, value);
}, this), this;
},
combine: function(properties) {
return Hash.each(properties || {
}, function(value, key) {
Hash.include(this, key, value);
}, this), this;
},
erase: function(key) {
return this.hasOwnProperty(key) && delete this[key], this;
},
get: function(key) {
return this.hasOwnProperty(key) ? this[key] : null;
},
set: function(key, value) {
return (!this[key] || this.hasOwnProperty(key)) && (this[key] = value), this;
},
empty: function() {
return Hash.each(this, function(value, key) {
delete this[key];
}, this), this;
},
include: function(key, value) {
return null == this[key] && (this[key] = value), this;
},
map: function(fn, bind) {
return new Hash(Object.map(this, fn, bind));
},
filter: function(fn, bind) {
return new Hash(Object.filter(this, fn, bind));
},
every: function(fn, bind) {
return Object.every(this, fn, bind);
},
some: function(fn, bind) {
return Object.some(this, fn, bind);
},
getKeys: function() {
return Object.keys(this);
},
getValues: function() {
return Object.values(this);
},
toQueryString: function(base) {
return Object.toQueryString(this, base);
}
}), Hash.extend = Object.append, Hash.alias({
indexOf: "keyOf",
contains: "hasValue"
}), (function() {
var XMLHTTP, MSXML2, MSXML, document = this.document, window = document.window = this, ua = navigator.userAgent.toLowerCase(), platform = navigator.platform.toLowerCase(), UA = ua.match(/(opera|ie|firefox|chrome|version)[\s\/:]([\w\d\.]+)?.*?(safari|version[\s\/:]([\w\d\.]+)|$)/) || [
null,
"unknown",
0
], mode = "ie" == UA[1] && document.documentMode, Browser = this.Browser = {
extend: Function.prototype.extend,
name: "version" == UA[1] ? UA[3] : UA[1],
version: mode || parseFloat("opera" == UA[1] && UA[4] ? UA[4] : UA[2]),
Platform: {
name: ua.match(/ip(?:ad|od|hone)/) ? "ios" : (ua.match(/(?:webos|android)/) || platform.match(/mac|win|linux/) || [
"other"
])[0]
},
Features: {
xpath: !!document.evaluate,
air: !!window.runtime,
query: !!document.querySelector,
json: !!window.JSON
},
Plugins: {
}
};
Browser[Browser.name] = !0, Browser[Browser.name + parseInt(Browser.version, 10)] = !0, Browser.Platform[Browser.Platform.name] = !0, XMLHTTP = function() {
return new XMLHttpRequest();
}, MSXML2 = function() {
return new ActiveXObject("MSXML2.XMLHTTP");
}, MSXML = function() {
return new ActiveXObject("Microsoft.XMLHTTP");
}, Browser.Request = Function.attempt(function() {
return XMLHTTP(), XMLHTTP;
}, function() {
return MSXML2(), MSXML2;
}, function() {
return MSXML(), MSXML;
}), Browser.Features.xhr = !!Browser.Request;
var version = (Function.attempt(function() {
return navigator.plugins["Shockwave Flash"].description;
}, function() {
return new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version");
}) || "0 r0").match(/\d+/g);
if (Browser.Plugins.Flash = {
version: Number(version[0] || "0." + version[1]) || 0,
build: Number(version[2]) || 0
}, Browser.exec = function(text) {
if (!text) return text;
if (window.execScript) window.execScript(text);
else {
var script = document.createElement("script");
script.setAttribute("type", "text/javascript"), script.text = text, document.head.appendChild(script), document.head.removeChild(script);
}
return text;
}, String.implement("stripScripts", function(exec) {
var scripts = "", text = this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function(all, code) {
return scripts += code + "\n", "";
});
return !0 === exec ? Browser.exec(scripts) : "function" == typeOf(exec) && exec(scripts, text), text;
}), Browser.extend({
Document: this.Document,
Window: this.Window,
Element: this.Element,
Event: this.Event
}), this.Window = this.$constructor = new Type("Window", function() {
}), this.$family = Function.from("window").hide(), Window.mirror(function(name, method) {
window[name] = method;
}), this.Document = document.$constructor = new Type("Document", function() {
}), document.$family = Function.from("document").hide(), Document.mirror(function(name, method) {
document[name] = method;
}), document.html = document.documentElement, document.head || (document.head = document.getElementsByTagName("head")[0]), document.execCommand) try {
document.execCommand("BackgroundImageCache", !1, !0);
} catch (e) {
}
if (this.attachEvent && !this.addEventListener) {
var unloadEvent = function() {
this.detachEvent("onunload", unloadEvent), document.head = document.html = document.window = null;
};
this.attachEvent("onunload", unloadEvent);
}
var arrayFrom = Array.from;
try {
arrayFrom(document.html.childNodes);
} catch (e1) {
Array.from = function(item) {
if ("string" != typeof item && Type.isEnumerable(item) && "array" != typeOf(item)) {
for(var i = item.length, array = new Array(i); i--;)array[i] = item[i];
return array;
}
return arrayFrom(item);
};
var prototype = Array.prototype, slice = prototype.slice;
[
"pop",
"push",
"reverse",
"shift",
"sort",
"splice",
"unshift",
"concat",
"join",
"slice"
].each(function(name) {
var method = prototype[name];
Array[name] = function(item) {
return method.apply(Array.from(item), slice.call(arguments, 1));
};
});
}
Browser.Platform.ios && (Browser.Platform.ipod = !0), Browser.Engine = {
};
var setEngine = function(name, version) {
Browser.Engine.name = name, Browser.Engine[name + version] = !0, Browser.Engine.version = version;
};
if (Browser.ie) switch(Browser.Engine.trident = !0, Browser.version){
case 6:
setEngine("trident", 4);
break;
case 7:
setEngine("trident", 5);
break;
case 8:
setEngine("trident", 6);
}
if (Browser.firefox && (Browser.Engine.gecko = !0, setEngine("gecko", Browser.version >= 3 ? 19 : 18)), Browser.safari || Browser.chrome) switch(Browser.Engine.webkit = !0, Browser.version){
case 2:
setEngine("webkit", 419);
break;
case 3:
setEngine("webkit", 420);
break;
case 4:
setEngine("webkit", 525);
}
if (Browser.opera && (Browser.Engine.presto = !0, setEngine("presto", Browser.version >= 9.6 ? 960 : Browser.version >= 9.5 ? 950 : 925)), "unknown" == Browser.name) switch((ua.match(/(?:webkit|khtml|gecko)/) || [])[0]){
case "webkit":
case "khtml":
Browser.Engine.webkit = !0;
break;
case "gecko":
Browser.Engine.gecko = !0;
}
this.$exec = Browser.exec;
})(), (function() {
var _keys = {
}, DOMEvent = this.DOMEvent = new Type("DOMEvent", function(event, win) {
if (win || (win = window), (event = event || win.event).$extended) return event;
this.event = event, this.$extended = !0, this.shift = event.shiftKey, this.control = event.ctrlKey, this.alt = event.altKey, this.meta = event.metaKey;
for(var type = this.type = event.type, target = event.target || event.srcElement; target && 3 == target.nodeType;)target = target.parentNode;
if (this.target = document.id(target), 0 == type.indexOf("key")) {
var code = this.code = event.which || event.keyCode;
this.key = _keys[code] || Object.keyOf(Event.Keys, code), "keydown" == type && (code > 111 && code < 124 ? this.key = "f" + (code - 111) : code > 95 && code < 106 && (this.key = code - 96)), null == this.key && (this.key = String.fromCharCode(code).toLowerCase());
} else if ("click" == type || "dblclick" == type || "contextmenu" == type || "DOMMouseScroll" == type || 0 == type.indexOf("mouse")) {
var doc = win.document;
if (doc = doc.compatMode && "CSS1Compat" != doc.compatMode ? doc.body : doc.html, this.page = {
x: null != event.pageX ? event.pageX : event.clientX + doc.scrollLeft,
y: null != event.pageY ? event.pageY : event.clientY + doc.scrollTop
}, this.client = {
x: null != event.pageX ? event.pageX - win.pageXOffset : event.clientX,
y: null != event.pageY ? event.pageY - win.pageYOffset : event.clientY
}, ("DOMMouseScroll" == type || "mousewheel" == type) && (this.wheel = event.wheelDelta ? event.wheelDelta / 120 : -(event.detail || 0) / 3), this.rightClick = 3 == event.which || 2 == event.button, "mouseover" == type || "mouseout" == type) {
for(var related = event.relatedTarget || event[("mouseover" == type ? "from" : "to") + "Element"]; related && 3 == related.nodeType;)related = related.parentNode;
this.relatedTarget = document.id(related);
}
} else if (0 == type.indexOf("touch") || 0 == type.indexOf("gesture")) {
this.rotation = event.rotation, this.scale = event.scale, this.targetTouches = event.targetTouches, this.changedTouches = event.changedTouches;
var touches = this.touches = event.touches;
if (touches && touches[0]) {
var touch = touches[0];
this.page = {
x: touch.pageX,
y: touch.pageY
}, this.client = {
x: touch.clientX,
y: touch.clientY
};
}
}
this.client || (this.client = {
}), this.page || (this.page = {
});
});
DOMEvent.implement({
stop: function() {
return this.preventDefault().stopPropagation();
},
stopPropagation: function() {
return this.event.stopPropagation ? this.event.stopPropagation() : this.event.cancelBubble = !0, this;
},
preventDefault: function() {
return this.event.preventDefault ? this.event.preventDefault() : this.event.returnValue = !1, this;
}
}), DOMEvent.defineKey = function(code, key) {
return _keys[code] = key, this;
}, DOMEvent.defineKeys = DOMEvent.defineKey.overloadSetter(!0), DOMEvent.defineKeys({
"38": "up",
"40": "down",
"37": "left",
"39": "right",
"27": "esc",
"32": "space",
"8": "backspace",
"9": "tab",
"46": "delete",
"13": "enter"
});
})();
var Event = DOMEvent;
Event.Keys = {
}, Event.Keys = new Hash(Event.Keys), (function() {
var Class = this.Class = new Type("Class", function(params) {
instanceOf(params, Function) && (params = {
initialize: params
});
var newClass = (function() {
if (reset(this), newClass.$prototyping) return this;
this.$caller = null;
var value = this.initialize ? this.initialize.apply(this, arguments) : this;
return this.$caller = this.caller = null, value;
}).extend(this).implement(params);
return newClass.$constructor = Class, newClass.prototype.$constructor = newClass, newClass.prototype.parent = parent, newClass;
}), parent = function() {
if (!this.$caller) throw new Error("The method \"parent\" cannot be called.");
var name = this.$caller.$name, parent = this.$caller.$owner.parent, previous = parent ? parent.prototype[name] : null;
if (!previous) throw new Error("The method \"" + name + "\" has no parent.");
return previous.apply(this, arguments);
}, reset = function(object) {
for(var key in object){
var value = object[key];
switch(typeOf(value)){
case "object":
var F = function() {
};
F.prototype = value, object[key] = reset(new F);
break;
case "array":
object[key] = value.clone();
break;
}
}
return object;
}, wrap = function(self, key, method) {
method.$origin && (method = method.$origin);
var wrapper = (function() {
if (method.$protected && null == this.$caller) throw new Error("The method \"" + key + "\" cannot be called.");
var caller = this.caller, current = this.$caller;
this.caller = current, this.$caller = wrapper;
var result = method.apply(this, arguments);
return this.$caller = current, this.caller = caller, result;
}).extend({
$owner: self,
$origin: method,
$name: key
});
return wrapper;
}, implement = function(key, value, retain) {
if (Class.Mutators.hasOwnProperty(key) && null == (value = Class.Mutators[key].call(this, value))) return this;
if ("function" == typeOf(value)) {
if (value.$hidden) return this;
this.prototype[key] = retain ? value : wrap(this, key, value);
} else Object.merge(this.prototype, key, value);
return this;
}, getInstance = function(klass) {
klass.$prototyping = !0;
var proto = new klass;
return delete klass.$prototyping, proto;
};
Class.implement("implement", implement.overloadSetter()), Class.Mutators = {
Extends: function(parent) {
this.parent = parent, this.prototype = getInstance(parent);
},
Implements: function(items) {
Array.from(items).each(function(item) {
var instance = new item;
for(var key in instance)implement.call(this, key, instance[key], !0);
}, this);
}
};
})(), (function() {
this.Chain = new Class({
$chain: [],
chain: function() {
return this.$chain.append(Array.flatten(arguments)), this;
},
callChain: function() {
return !!this.$chain.length && this.$chain.shift().apply(this, arguments);
},
clearChain: function() {
return this.$chain.empty(), this;
}
});
var removeOn = function(string) {
return string.replace(/^on([A-Z])/, function(full, first) {
return first.toLowerCase();
});
};
this.Events = new Class({
$events: {
},
addEvent: function(type, fn, internal) {
return type = removeOn(type), fn == $empty || (this.$events[type] = (this.$events[type] || []).include(fn), internal && (fn.internal = !0)), this;
},
addEvents: function(events) {
for(var type in events)this.addEvent(type, events[type]);
return this;
},
fireEvent: function(type, args, delay) {
type = removeOn(type);
var events = this.$events[type];
return events && (args = Array.from(args), events.each(function(fn) {
delay ? fn.delay(delay, this, args) : fn.apply(this, args);
}, this)), this;
},
removeEvent: function(type, fn) {
type = removeOn(type);
var events = this.$events[type];
if (events && !fn.internal) {
var index = events.indexOf(fn);
-1 != index && delete events[index];
}
return this;
},
removeEvents: function(events) {
var type;
if ("object" == typeOf(events)) {
for(type in events)this.removeEvent(type, events[type]);
return this;
}
for(type in events && (events = removeOn(events)), this.$events)if (!events || events == type) for(var fns = this.$events[type], i = fns.length; i--;)i in fns && this.removeEvent(type, fns[i]);
return this;
}
}), this.Options = new Class({
setOptions: function() {
var options = this.options = Object.merge.apply(null, [
{
},
this.options
].append(arguments));
if (this.addEvent) for(var option in options)"function" == typeOf(options[option]) && /^on[A-Z]/.test(option) && (this.addEvent(option, options[option]), delete options[option]);
return this;
}
});
})(), (function() {
var parsed, separatorIndex, combinatorIndex, reversed, cache = {
}, reverseCache = {
}, reUnescape = /\\/g, parse = function(expression, isReversed) {
if (null == expression) return null;
if (!0 === expression.Slick) return expression;
expression = ("" + expression).replace(/^\s+|\s+$/g, "");
var currentCache = (reversed = !!isReversed) ? reverseCache : cache;
if (currentCache[expression]) return currentCache[expression];
for(parsed = {
Slick: !0,
expressions: [],
raw: expression,
reverse: function() {
return parse(this.raw, !0);
}
}, separatorIndex = -1; expression != (expression = expression.replace(regexp, parser)););
return parsed.length = parsed.expressions.length, currentCache[parsed.raw] = reversed ? reverse(parsed) : parsed;
}, reverseCombinator = function(combinator) {
return "!" === combinator ? " " : " " === combinator ? "!" : /^!/.test(combinator) ? combinator.replace(/^!/, "") : "!" + combinator;
}, reverse = function(expression) {
for(var expressions = expression.expressions, i = 0; i < expressions.length; i++){
for(var exp = expressions[i], last = {
parts: [],
tag: "*",
combinator: reverseCombinator(exp[0].combinator)
}, j = 0; j < exp.length; j++){
var cexp = exp[j];
cexp.reverseCombinator || (cexp.reverseCombinator = " "), cexp.combinator = cexp.reverseCombinator, delete cexp.reverseCombinator;
}
exp.reverse().push(last);
}
return expression;
}, escapeRegExp = function(string) {
return string.replace(/[-[\]{}()*+?.\\^$|,#\s]/g, function(match) {
return "\\" + match;
});
}, regexp = new RegExp("^(?:\\s*(,)\\s*|\\s*(<combinator>+)\\s*|(\\s+)|(<unicode>+|\\*)|\\#(<unicode>+)|\\.(<unicode>+)|\\[\\s*(<unicode1>+)(?:\\s*([*^$!~|]?=)(?:\\s*(?:([\"']?)(.*?)\\9)))?\\s*\\](?!\\])|(:+)(<unicode>+)(?:\\((?:(?:([\"'])([^\\13]*)\\13)|((?:\\([^)]+\\)|[^()]*)+))\\))?)".replace(/<combinator>/, "[" + escapeRegExp(">+~`!@$%^&={}\\;</") + "]").replace(/<unicode>/g, "(?:[\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])").replace(/<unicode1>/g, "(?:[:\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])"));
function parser(rawMatch, separator, combinator, combinatorChildren, tagName, id, className, attributeKey, attributeOperator, attributeQuote, attributeValue, pseudoMarker, pseudoClass, pseudoQuote, pseudoClassQuotedValue, pseudoClassValue) {
if ((separator || -1 === separatorIndex) && (parsed.expressions[++separatorIndex] = [], combinatorIndex = -1, separator)) return "";
if (combinator || combinatorChildren || -1 === combinatorIndex) {
combinator = combinator || " ";
var test, regexp, currentSeparator = parsed.expressions[separatorIndex];
reversed && currentSeparator[combinatorIndex] && (currentSeparator[combinatorIndex].reverseCombinator = reverseCombinator(combinator)), currentSeparator[++combinatorIndex] = {
combinator: combinator,
tag: "*"
};
}
var currentParsed = parsed.expressions[separatorIndex][combinatorIndex];
if (tagName) currentParsed.tag = tagName.replace(reUnescape, "");
else if (id) currentParsed.id = id.replace(reUnescape, "");
else if (className) className = className.replace(reUnescape, ""), currentParsed.classList || (currentParsed.classList = []), currentParsed.classes || (currentParsed.classes = []), currentParsed.classList.push(className), currentParsed.classes.push({
value: className,
regexp: new RegExp("(^|\\s)" + escapeRegExp(className) + "(\\s|$)")
});
else if (pseudoClass) pseudoClassValue = (pseudoClassValue = pseudoClassValue || pseudoClassQuotedValue) ? pseudoClassValue.replace(reUnescape, "") : null, currentParsed.pseudos || (currentParsed.pseudos = []), currentParsed.pseudos.push({
key: pseudoClass.replace(reUnescape, ""),
value: pseudoClassValue,
type: 1 == pseudoMarker.length ? "class" : "element"
});
else if (attributeKey) {
switch(attributeKey = attributeKey.replace(reUnescape, ""), attributeValue = (attributeValue || "").replace(reUnescape, ""), attributeOperator){
case "^=":
regexp = new RegExp("^" + escapeRegExp(attributeValue));
break;
case "$=":
regexp = new RegExp(escapeRegExp(attributeValue) + "$");
break;
case "~=":
regexp = new RegExp("(^|\\s)" + escapeRegExp(attributeValue) + "(\\s|$)");
break;
case "|=":
regexp = new RegExp("^" + escapeRegExp(attributeValue) + "(-|$)");
break;
case "=":
test = function(value) {
return attributeValue == value;
};
break;
case "*=":
test = function(value) {
return value && value.indexOf(attributeValue) > -1;
};
break;
case "!=":
test = function(value) {
return attributeValue != value;
};
break;
default:
test = function(value) {
return !!value;
};
}
"" == attributeValue && /^[*$^]=$/.test(attributeOperator) && (test = function() {
return !1;
}), test || (test = function(value) {
return value && regexp.test(value);
}), currentParsed.attributes || (currentParsed.attributes = []), currentParsed.attributes.push({
key: attributeKey,
operator: attributeOperator,
value: attributeValue,
test: test
});
}
return "";
}
var Slick = this.Slick || {
};
Slick.parse = function(expression) {
return parse(expression);
}, Slick.escapeRegExp = escapeRegExp, this.Slick || (this.Slick = Slick);
}).apply("undefined" != typeof exports ? exports : this), (function() {
var local = {
}, featuresCache = {
}, toString = Object.prototype.toString;
local.isNativeCode = function(fn) {
return /\{\s*\[native code\]\s*\}/.test("" + fn);
}, local.isXML = function(document) {
return !!document.xmlVersion || !!document.xml || "[object XMLDocument]" == toString.call(document) || 9 == document.nodeType && "HTML" != document.documentElement.nodeName;
}, local.setDocument = function(document) {
var nodeType = document.nodeType;
if (9 == nodeType) ;
else if (nodeType) document = document.ownerDocument;
else {
if (!document.navigator) return;
document = document.document;
}
if (this.document !== document) {
this.document = document;
var feature, root = document.documentElement, rootUid = this.getUIDXML(root), features = featuresCache[rootUid];
if (features) {
for(feature in features)this[feature] = features[feature];
return;
}
(features = featuresCache[rootUid] = {
}).root = root, features.isXMLDocument = this.isXML(document), features.brokenStarGEBTN = features.starSelectsClosedQSA = features.idGetsName = features.brokenMixedCaseQSA = features.brokenGEBCN = features.brokenCheckedQSA = features.brokenEmptyAttributeQSA = features.isHTMLDocument = features.nativeMatchesSelector = !1;
var starSelectsClosed, starSelectsComments, brokenSecondClassNameGEBCN, cachedGetElementsByClassName, brokenFormAttributeGetter, selected, id = "slick_uniqueid", testNode = document.createElement("div"), testRoot = document.body || document.getElementsByTagName("body")[0] || root;
testRoot.appendChild(testNode);
try {
testNode.innerHTML = "<a id=\"" + id + "\"></a>", features.isHTMLDocument = !!document.getElementById(id);
} catch (e) {
}
if (features.isHTMLDocument) {
testNode.style.display = "none", testNode.appendChild(document.createComment("")), starSelectsComments = testNode.getElementsByTagName("*").length > 1;
try {
testNode.innerHTML = "foo</foo>", starSelectsClosed = (selected = testNode.getElementsByTagName("*")) && !!selected.length && "/" == selected[0].nodeName.charAt(0);
} catch (e) {
}
features.brokenStarGEBTN = starSelectsComments || starSelectsClosed;
try {
testNode.innerHTML = "<a name=\"" + id + "\"></a><b id=\"" + id + "\"></b>", features.idGetsName = document.getElementById(id) === testNode.firstChild;
} catch (e1) {
}
if (testNode.getElementsByClassName) {
try {
testNode.innerHTML = "<a class=\"f\"></a><a class=\"b\"></a>", testNode.getElementsByClassName("b").length, testNode.firstChild.className = "b", cachedGetElementsByClassName = 2 != testNode.getElementsByClassName("b").length;
} catch (e) {
}
try {
testNode.innerHTML = "<a class=\"a\"></a><a class=\"f b a\"></a>", brokenSecondClassNameGEBCN = 2 != testNode.getElementsByClassName("a").length;
} catch (e2) {
}
features.brokenGEBCN = cachedGetElementsByClassName || brokenSecondClassNameGEBCN;
}
if (testNode.querySelectorAll) {
try {
testNode.innerHTML = "foo</foo>", selected = testNode.querySelectorAll("*"), features.starSelectsClosedQSA = selected && !!selected.length && "/" == selected[0].nodeName.charAt(0);
} catch (e) {
}
try {
testNode.innerHTML = "<a class=\"MiX\"></a>", features.brokenMixedCaseQSA = !testNode.querySelectorAll(".MiX").length;
} catch (e2) {
}
try {
testNode.innerHTML = "<select><option selected=\"selected\">a</option></select>", features.brokenCheckedQSA = 0 == testNode.querySelectorAll(":checked").length;
} catch (e3) {
}
try {
testNode.innerHTML = "<a class=\"\"></a>", features.brokenEmptyAttributeQSA = 0 != testNode.querySelectorAll("[class*=\"\"]").length;
} catch (e4) {
}
}
try {
testNode.innerHTML = "<form action=\"s\"><input id=\"action\"/></form>", brokenFormAttributeGetter = "s" != testNode.firstChild.getAttribute("action");
} catch (e2) {
}
if (features.nativeMatchesSelector = root.matchesSelector || root.mozMatchesSelector || root.webkitMatchesSelector, features.nativeMatchesSelector) try {
features.nativeMatchesSelector.call(root, ":slick"), features.nativeMatchesSelector = null;
} catch (e3) {
}
}
try {
root.slick_expando = 1, delete root.slick_expando, features.getUID = this.getUIDHTML;
} catch (e1) {
features.getUID = this.getUIDXML;
}
testRoot.removeChild(testNode), testNode = selected = testRoot = null, features.getAttribute = features.isHTMLDocument && brokenFormAttributeGetter ? function(node, name) {
var method = this.attributeGetters[name];
if (method) return method.call(node);
var attributeNode = node.getAttributeNode(name);
return attributeNode ? attributeNode.nodeValue : null;
} : function(node, name) {
var method = this.attributeGetters[name];
return method ? method.call(node) : node.getAttribute(name);
}, features.hasAttribute = root && this.isNativeCode(root.hasAttribute) ? function(node, attribute) {
return node.hasAttribute(attribute);
} : function(node, attribute) {
return !!((node = node.getAttributeNode(attribute)) && (node.specified || node.nodeValue));
};
var nativeRootContains = root && this.isNativeCode(root.contains), nativeDocumentContains = document && this.isNativeCode(document.contains);
for(feature in features.contains = nativeRootContains && nativeDocumentContains ? function(context, node) {
return context.contains(node);
} : nativeRootContains && !nativeDocumentContains ? function(context, node) {
return context === node || (context === document ? document.documentElement : context).contains(node);
} : root && root.compareDocumentPosition ? function(context, node) {
return context === node || !!(16 & context.compareDocumentPosition(node));
} : function(context, node) {
if (node) do if (node === context) return !0;
while (node = node.parentNode)
return !1;
}, features.documentSorter = root.compareDocumentPosition ? function(a, b) {
return a.compareDocumentPosition && b.compareDocumentPosition ? 4 & a.compareDocumentPosition(b) ? -1 : a === b ? 0 : 1 : 0;
} : "sourceIndex" in root ? function(a, b) {
return a.sourceIndex && b.sourceIndex ? a.sourceIndex - b.sourceIndex : 0;
} : document.createRange ? function(a, b) {
if (!a.ownerDocument || !b.ownerDocument) return 0;
var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
return aRange.setStart(a, 0), aRange.setEnd(a, 0), bRange.setStart(b, 0), bRange.setEnd(b, 0), aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
} : null, root = null, features)this[feature] = features[feature];
}
};
var reSimpleSelector = /^([#.]?)((?:[\w-]+|\*))$/, reEmptyAttribute = /\[.+[*$^]=(?:""|'')?\]/, qsaFailExpCache = {
};
local.search = function(context, expression, append, first) {
var found = this.found = first ? null : append || [];
if (!context) return found;
if (context.navigator) context = context.document;
else if (!context.nodeType) return found;
var parsed, i, uniques = this.uniques = {
}, hasOthers = !!(append && append.length), contextIsDocument = 9 == context.nodeType;
if (this.document !== (contextIsDocument ? context : context.ownerDocument) && this.setDocument(context), hasOthers) for(i = found.length; i--;)uniques[this.getUID(found[i])] = !0;
if ("string" == typeof expression) {
var simpleSelector = expression.match(reSimpleSelector);
simpleSelectors: if (simpleSelector) {
var node, nodes, symbol = simpleSelector[1], name = simpleSelector[2];
if (symbol) {
if ("#" == symbol) {
if (!this.isHTMLDocument || !contextIsDocument) break simpleSelectors;
if (!(node = context.getElementById(name))) return found;
if (this.idGetsName && node.getAttributeNode("id").nodeValue != name) break simpleSelectors;
if (first) return node || null;
hasOthers && uniques[this.getUID(node)] || found.push(node);
} else if ("." == symbol) {
if (!this.isHTMLDocument || (!context.getElementsByClassName || this.brokenGEBCN) && context.querySelectorAll) break simpleSelectors;
if (context.getElementsByClassName && !this.brokenGEBCN) {
if (nodes = context.getElementsByClassName(name), first) return nodes[0] || null;
for(i = 0; node = nodes[i++];)hasOthers && uniques[this.getUID(node)] || found.push(node);
} else {
var matchClass = new RegExp("(^|\\s)" + Slick.escapeRegExp(name) + "(\\s|$)");
for(i = 0, nodes = context.getElementsByTagName("*"); node = nodes[i++];)if ((className = node.className) && matchClass.test(className)) {
if (first) return node;
hasOthers && uniques[this.getUID(node)] || found.push(node);
}
}
}
} else {
if ("*" == name && this.brokenStarGEBTN) break simpleSelectors;
if (nodes = context.getElementsByTagName(name), first) return nodes[0] || null;
for(i = 0; node = nodes[i++];)hasOthers && uniques[this.getUID(node)] || found.push(node);
}
return hasOthers && this.sort(found), first ? null : found;
}
querySelector: if (context.querySelectorAll) {
if (!this.isHTMLDocument || qsaFailExpCache[expression] || this.brokenMixedCaseQSA || this.brokenCheckedQSA && expression.indexOf(":checked") > -1 || this.brokenEmptyAttributeQSA && reEmptyAttribute.test(expression) || !contextIsDocument && expression.indexOf(",") > -1 || Slick.disableQSA) break querySelector;
var _expression = expression, _context = context;
if (!contextIsDocument) {
var currentId = _context.getAttribute("id"), slickid = "slickid__";
_context.setAttribute("id", slickid), _expression = "#" + slickid + " " + _expression, context = _context.parentNode;
}
try {
if (first) return context.querySelector(_expression) || null;
nodes = context.querySelectorAll(_expression);
} catch (e) {
qsaFailExpCache[expression] = 1;
break querySelector;
} finally{
contextIsDocument || (currentId ? _context.setAttribute("id", currentId) : _context.removeAttribute("id"), context = _context);
}
if (this.starSelectsClosedQSA) for(i = 0; node = nodes[i++];)!(node.nodeName > "@") || hasOthers && uniques[this.getUID(node)] || found.push(node);
else for(i = 0; node = nodes[i++];)hasOthers && uniques[this.getUID(node)] || found.push(node);
return hasOthers && this.sort(found), found;
}
if (!(parsed = this.Slick.parse(expression)).length) return found;
} else if (null == expression) return found;
else if (expression.Slick) parsed = expression;
else if (this.contains(context.documentElement || context, expression)) return found ? found.push(expression) : found = expression, found;
else return found;
this.posNTH = {
}, this.posNTHLast = {
}, this.posNTHType = {
}, this.posNTHTypeLast = {
}, this.push = !hasOthers && (first || 1 == parsed.length && 1 == parsed.expressions[0].length) ? this.pushArray : this.pushUID, null == found && (found = []);
var j, m, n, combinator, tag, id, classList, classes, attributes, pseudos, currentItems, currentExpression, currentBit, lastBit, expressions = parsed.expressions;
search: for(i = 0; currentExpression = expressions[i]; i++)for(j = 0; currentBit = currentExpression[j]; j++){
if (!this[combinator = "combinator:" + currentBit.combinator]) continue search;
if (tag = this.isXMLDocument ? currentBit.tag : currentBit.tag.toUpperCase(), id = currentBit.id, classList = currentBit.classList, classes = currentBit.classes, attributes = currentBit.attributes, pseudos = currentBit.pseudos, lastBit = j === currentExpression.length - 1, this.bitUniques = {
}, lastBit ? (this.uniques = uniques, this.found = found) : (this.uniques = {
}, this.found = []), 0 === j) {
if (this[combinator](context, tag, id, classes, attributes, pseudos, classList), first && lastBit && found.length) break search;
} else if (first && lastBit) {
for(m = 0, n = currentItems.length; m < n; m++)if (this[combinator](currentItems[m], tag, id, classes, attributes, pseudos, classList), found.length) break search;
} else for(m = 0, n = currentItems.length; m < n; m++)this[combinator](currentItems[m], tag, id, classes, attributes, pseudos, classList);
currentItems = this.found;
}
return (hasOthers || parsed.expressions.length > 1) && this.sort(found), first ? found[0] || null : found;
}, local.uidx = 1, local.uidk = "slick-uniqueid", local.getUIDXML = function(node) {
var uid = node.getAttribute(this.uidk);
return uid || (uid = this.uidx++, node.setAttribute(this.uidk, uid)), uid;
}, local.getUIDHTML = function(node) {
return node.uniqueNumber || (node.uniqueNumber = this.uidx++);
}, local.sort = function(results) {
return this.documentSorter && results.sort(this.documentSorter), results;
}, local.cacheNTH = {
}, local.matchNTH = /^([+-]?\d*)?([a-z]+)?([+-]\d+)?$/, local.parseNTHArgument = function(argument) {
var parsed = argument.match(this.matchNTH);
if (!parsed) return !1;
var special = parsed[2] || !1, a = parsed[1] || 1;
"-" == a && (a = -1);
var b = +parsed[3] || 0;
return parsed = "n" == special ? {
a: a,
b: b
} : "odd" == special ? {
a: 2,
b: 1
} : "even" == special ? {
a: 2,
b: 0
} : {
a: 0,
b: a
}, this.cacheNTH[argument] = parsed;
}, local.createNTHPseudo = function(child, sibling, positions, ofType) {
return function(node, argument) {
var uid = this.getUID(node);
if (!this[positions][uid]) {
var parent = node.parentNode;
if (!parent) return !1;
var el = parent[child], count = 1;
if (ofType) {
var nodeName = node.nodeName;
do {
if (el.nodeName != nodeName) continue;
this[positions][this.getUID(el)] = count++;
}while (el = el[sibling])
} else do {
if (1 != el.nodeType) continue;
this[positions][this.getUID(el)] = count++;
}while (el = el[sibling])
}
argument = argument || "n";
var parsed = this.cacheNTH[argument] || this.parseNTHArgument(argument);
if (!parsed) return !1;
var a = parsed.a, b = parsed.b, pos = this[positions][uid];
return 0 == a ? b == pos : a > 0 ? !(pos < b) && void 0 : !(b < pos) && (pos - b) % a == 0;
};
}, local.pushArray = function(node, tag, id, classes, attributes, pseudos) {
this.matchSelector(node, tag, id, classes, attributes, pseudos) && this.found.push(node);
}, local.pushUID = function(node, tag, id, classes, attributes, pseudos) {
var uid = this.getUID(node);
!this.uniques[uid] && this.matchSelector(node, tag, id, classes, attributes, pseudos) && (this.uniques[uid] = !0, this.found.push(node));
}, local.matchNode = function(node, selector) {
if (this.isHTMLDocument && this.nativeMatchesSelector) try {
return this.nativeMatchesSelector.call(node, selector.replace(/\[([^=]+)=\s*([^'"\]]+?)\s*\]/g, "[$1=\"$2\"]"));
} catch (matchError) {
}
var parsed = this.Slick.parse(selector);
if (!parsed) return !0;
var i, expressions = parsed.expressions, simpleExpCounter = 0;
for(i = 0; currentExpression = expressions[i]; i++)if (1 == currentExpression.length) {
var exp = currentExpression[0];
if (this.matchSelector(node, this.isXMLDocument ? exp.tag : exp.tag.toUpperCase(), exp.id, exp.classes, exp.attributes, exp.pseudos)) return !0;
simpleExpCounter++;
}
if (simpleExpCounter == parsed.length) return !1;
var item, nodes = this.search(this.document, parsed);
for(i = 0; item = nodes[i++];)if (item === node) return !0;
return !1;
}, local.matchPseudo = function(node, name, argument) {
var pseudoName = "pseudo:" + name;
if (this[pseudoName]) return this[pseudoName](node, argument);
var attribute = this.getAttribute(node, name);
return argument ? argument == attribute : !!attribute;
}, local.matchSelector = function(node, tag, id, classes, attributes, pseudos) {
if (tag) {
var i, part, cls, nodeName = this.isXMLDocument ? node.nodeName : node.nodeName.toUpperCase();
if ("*" == tag) {
if (nodeName < "@") return !1;
} else if (nodeName != tag) return !1;
}
if (id && node.getAttribute("id") != id) return !1;
if (classes) {
for(i = classes.length; i--;)if (!((cls = this.getAttribute(node, "class")) && classes[i].regexp.test(cls))) return !1;
}
if (attributes) {
for(i = attributes.length; i--;)if ((part = attributes[i]).operator ? !part.test(this.getAttribute(node, part.key)) : !this.hasAttribute(node, part.key)) return !1;
}
if (pseudos) {
for(i = pseudos.length; i--;)if (part = pseudos[i], !this.matchPseudo(node, part.key, part.value)) return !1;
}
return !0;
};
var combinators = {
" ": function(node, tag, id, classes, attributes, pseudos, classList) {
var i, item, children;
if (this.isHTMLDocument) {
getById: if (id) {
if (!(item = this.document.getElementById(id)) && node.all || this.idGetsName && item && item.getAttributeNode("id").nodeValue != id) {
if (!(children = node.all[id])) return;
for(children[0] || (children = [
children
]), i = 0; item = children[i++];){
var idNode = item.getAttributeNode("id");
if (idNode && idNode.nodeValue == id) {
this.push(item, tag, null, classes, attributes, pseudos);
break;
}
}
return;
}
if (item) {
if (this.document !== node && !this.contains(node, item)) return;
} else {
if (this.contains(this.root, node)) return;
break getById;
}
return void this.push(item, tag, null, classes, attributes, pseudos);
}
getByClass: if (classes && node.getElementsByClassName && !this.brokenGEBCN) {
if (!((children = node.getElementsByClassName(classList.join(" "))) && children.length)) break getByClass;
for(i = 0; item = children[i++];)this.push(item, tag, id, null, attributes, pseudos);
return;
}
}
getByTag: {
if (!((children = node.getElementsByTagName(tag)) && children.length)) break getByTag;
for(this.brokenStarGEBTN || (tag = null), i = 0; item = children[i++];)this.push(item, tag, id, classes, attributes, pseudos);
}
},
">": function(node, tag, id, classes, attributes, pseudos) {
if (node = node.firstChild) do 1 == node.nodeType && this.push(node, tag, id, classes, attributes, pseudos);
while (node = node.nextSibling)
},
"+": function(node, tag, id, classes, attributes, pseudos) {
for(; node = node.nextSibling;)if (1 == node.nodeType) {
this.push(node, tag, id, classes, attributes, pseudos);
break;
}
},
"^": function(node, tag, id, classes, attributes, pseudos) {
(node = node.firstChild) && (1 == node.nodeType ? this.push(node, tag, id, classes, attributes, pseudos) : this["combinator:+"](node, tag, id, classes, attributes, pseudos));
},
"~": function(node, tag, id, classes, attributes, pseudos) {
for(; node = node.nextSibling;)if (1 == node.nodeType) {
var uid = this.getUID(node);
if (this.bitUniques[uid]) break;
this.bitUniques[uid] = !0, this.push(node, tag, id, classes, attributes, pseudos);
}
},
"++": function(node, tag, id, classes, attributes, pseudos) {
this["combinator:+"](node, tag, id, classes, attributes, pseudos), this["combinator:!+"](node, tag, id, classes, attributes, pseudos);
},
"~~": function(node, tag, id, classes, attributes, pseudos) {
this["combinator:~"](node, tag, id, classes, attributes, pseudos), this["combinator:!~"](node, tag, id, classes, attributes, pseudos);
},
"!": function(node, tag, id, classes, attributes, pseudos) {
for(; node = node.parentNode;)node !== this.document && this.push(node, tag, id, classes, attributes, pseudos);
},
"!>": function(node, tag, id, classes, attributes, pseudos) {
(node = node.parentNode) !== this.document && this.push(node, tag, id, classes, attributes, pseudos);
},
"!+": function(node, tag, id, classes, attributes, pseudos) {
for(; node = node.previousSibling;)if (1 == node.nodeType) {
this.push(node, tag, id, classes, attributes, pseudos);
break;
}
},
"!^": function(node, tag, id, classes, attributes, pseudos) {
(node = node.lastChild) && (1 == node.nodeType ? this.push(node, tag, id, classes, attributes, pseudos) : this["combinator:!+"](node, tag, id, classes, attributes, pseudos));
},
"!~": function(node, tag, id, classes, attributes, pseudos) {
for(; node = node.previousSibling;)if (1 == node.nodeType) {
var uid = this.getUID(node);
if (this.bitUniques[uid]) break;
this.bitUniques[uid] = !0, this.push(node, tag, id, classes, attributes, pseudos);
}
}
};
for(var c in combinators)local["combinator:" + c] = combinators[c];
var pseudos = {
empty: function(node) {
var child = node.firstChild;
return !(child && 1 == child.nodeType) && !(node.innerText || node.textContent || "").length;
},
not: function(node, expression) {
return !this.matchNode(node, expression);
},
contains: function(node, text) {
return (node.innerText || node.textContent || "").indexOf(text) > -1;
},
"first-child": function(node) {
for(; node = node.previousSibling;)if (1 == node.nodeType) return !1;
return !0;
},
"last-child": function(node) {
for(; node = node.nextSibling;)if (1 == node.nodeType) return !1;
return !0;
},
"only-child": function(node) {
for(var prev = node; prev = prev.previousSibling;)if (1 == prev.nodeType) return !1;
for(var next = node; next = next.nextSibling;)if (1 == next.nodeType) return !1;
return !0;
},
"nth-child": local.createNTHPseudo("firstChild", "nextSibling", "posNTH"),
"nth-last-child": local.createNTHPseudo("lastChild", "previousSibling", "posNTHLast"),
"nth-of-type": local.createNTHPseudo("firstChild", "nextSibling", "posNTHType", !0),
"nth-last-of-type": local.createNTHPseudo("lastChild", "previousSibling", "posNTHTypeLast", !0),
index: function(node, index) {
return this["pseudo:nth-child"](node, "" + (index + 1));
},
even: function(node) {
return this["pseudo:nth-child"](node, "2n");
},
odd: function(node) {
return this["pseudo:nth-child"](node, "2n+1");
},
"first-of-type": function(node) {
for(var nodeName = node.nodeName; node = node.previousSibling;)if (node.nodeName == nodeName) return !1;
return !0;
},
"last-of-type": function(node) {
for(var nodeName = node.nodeName; node = node.nextSibling;)if (node.nodeName == nodeName) return !1;
return !0;
},
"only-of-type": function(node) {
for(var prev = node, nodeName = node.nodeName; prev = prev.previousSibling;)if (prev.nodeName == nodeName) return !1;
for(var next = node; next = next.nextSibling;)if (next.nodeName == nodeName) return !1;
return !0;
},
enabled: function(node) {
return !node.disabled;
},
disabled: function(node) {
return node.disabled;
},
checked: function(node) {
return node.checked || node.selected;
},
focus: function(node) {
return this.isHTMLDocument && this.document.activeElement === node && (node.href || node.type || this.hasAttribute(node, "tabindex"));
},
root: function(node) {
return node === this.root;
},
selected: function(node) {
return node.selected;
}
};
for(var p in pseudos)local["pseudo:" + p] = pseudos[p];
var attributeGetters = local.attributeGetters = {
"for": function() {
return "htmlFor" in this ? this.htmlFor : this.getAttribute("for");
},
href: function() {
return "href" in this ? this.getAttribute("href", 2) : this.getAttribute("href");
},
style: function() {
return this.style ? this.style.cssText : this.getAttribute("style");
},
tabindex: function() {
var attributeNode = this.getAttributeNode("tabindex");
return attributeNode && attributeNode.specified ? attributeNode.nodeValue : null;
},
type: function() {
return this.getAttribute("type");
},
maxlength: function() {
var attributeNode = this.getAttributeNode("maxLength");
return attributeNode && attributeNode.specified ? attributeNode.nodeValue : null;
}
};
attributeGetters.MAXLENGTH = attributeGetters.maxLength = attributeGetters.maxlength;
var Slick = local.Slick = this.Slick || {
};
Slick.version = "1.1.7", Slick.search = function(context, expression, append) {
return local.search(context, expression, append);
}, Slick.find = function(context, expression) {
return local.search(context, expression, null, !0);
}, Slick.contains = function(container, node) {
return local.setDocument(container), local.contains(container, node);
}, Slick.getAttribute = function(node, name) {
return local.setDocument(node), local.getAttribute(node, name);
}, Slick.hasAttribute = function(node, name) {
return local.setDocument(node), local.hasAttribute(node, name);
}, Slick.match = function(node, selector) {
return !!node && !!selector && (!selector || selector === node || (local.setDocument(node), local.matchNode(node, selector)));
}, Slick.defineAttributeGetter = function(name, fn) {
return local.attributeGetters[name] = fn, this;
}, Slick.lookupAttributeGetter = function(name) {
return local.attributeGetters[name];
}, Slick.definePseudo = function(name, fn) {
return local["pseudo:" + name] = function(node, argument) {
return fn.call(node, argument);
}, this;
}, Slick.lookupPseudo = function(name) {
var pseudo = local["pseudo:" + name];
return pseudo ? function(argument) {
return pseudo.call(this, argument);
} : null;
}, Slick.override = function(regexp, fn) {
return local.override(regexp, fn), this;
}, Slick.isXML = local.isXML, Slick.uidOf = function(node) {
return local.getUIDHTML(node);
}, this.Slick || (this.Slick = Slick);
}).apply("undefined" != typeof exports ? exports : this);
var Element = function(tag, props) {
var konstructor = Element.Constructors[tag];
if (konstructor) return konstructor(props);
if ("string" != typeof tag) return document.id(tag).set(props);
if (props || (props = {
}), !/^[\w-]+$/.test(tag)) {
var parsed = Slick.parse(tag).expressions[0][0];
tag = "*" == parsed.tag ? "div" : parsed.tag, parsed.id && null == props.id && (props.id = parsed.id);
var attributes = parsed.attributes;
if (attributes) for(var attr, i = 0, l = attributes.length; i < l; i++)null == props[(attr = attributes[i]).key] && (null != attr.value && "=" == attr.operator ? props[attr.key] = attr.value : attr.value || attr.operator || (props[attr.key] = !0));
parsed.classList && null == props.class && (props.class = parsed.classList.join(" "));
}
return document.newElement(tag, props);
};
Browser.Element && (Element.prototype = Browser.Element.prototype, Element.prototype._fireEvent = function(type, event) {
return (fireEvent = Element.prototype.fireEvent).call(this, type, event);
}), new Type("Element", Element).mirror(function(name) {
if (!Array.prototype[name]) {
var obj = {
};
obj[name] = function() {
for(var results = [], args = arguments, elements = !0, i = 0, l = this.length; i < l; i++){
var element = this[i], result = results[i] = element[name].apply(element, args);
elements = elements && "element" == typeOf(result);
}
return elements ? new Elements(results) : results;
}, Elements.implement(obj);
}
}), Browser.Element || (Element.parent = Object, Element.Prototype = {
"$constructor": Element,
"$family": Function.from("element").hide()
}, Element.mirror(function(name, method) {
Element.Prototype[name] = method;
})), Element.Constructors = {
}, Element.Constructors = new Hash;
var IFrame = new Type("IFrame", function() {
var iframe, params = Array.link(arguments, {
properties: Type.isObject,
iframe: function(obj) {
return null != obj;
}
}), props = params.properties || {
};
params.iframe && (iframe = document.id(params.iframe));
var onload = props.onload || function() {
};
delete props.onload, props.id = props.name = [
props.id,
props.name,
iframe ? iframe.id || iframe.name : "IFrame_" + String.uniqueID()
].pick();
var onLoad = function() {
onload.call((iframe = new Element(iframe || "iframe", props)).contentWindow);
};
return window.frames[props.id] ? onLoad() : iframe.addListener("load", onLoad), iframe;
}), Elements = this.Elements = function(nodes) {
if (nodes && nodes.length) for(var node, uniques = {
}, i = 0; node = nodes[i++];){
var uid = Slick.uidOf(node);
uniques[uid] || (uniques[uid] = !0, this.push(node));
}
};
Elements.prototype = {
length: 0
}, Elements.parent = Array, new Type("Elements", Elements).implement({
filter: (function(filter, bind) {
return filter ? new Elements(Array.filter(this, "string" == typeOf(filter) ? function(item) {
return item.match(filter);
} : filter, bind)) : this;
}).protect(),
push: (function() {
for(var length = this.length, i = 0, l = arguments.length; i < l; i++){
var item = document.id(arguments[i]);
item && (this[length++] = item);
}
return this.length = length;
}).protect(),
unshift: (function() {
for(var items = [], i = 0, l = arguments.length; i < l; i++){
var item = document.id(arguments[i]);
item && items.push(item);
}
return Array.prototype.unshift.apply(this, items);
}).protect(),
concat: (function() {
for(var newElements = new Elements(this), i = 0, l = arguments.length; i < l; i++){
var item = arguments[i];
Type.isEnumerable(item) ? newElements.append(item) : newElements.push(item);
}
return newElements;
}).protect(),
append: (function(collection) {
for(var i = 0, l = collection.length; i < l; i++)this.push(collection[i]);
return this;
}).protect(),
empty: (function() {
for(; this.length;)delete this[--this.length];
return this;
}).protect()
}), Elements.alias("extend", "append"), (function() {
var createElementAcceptsHTML, splice = Array.prototype.splice, object = {
"0": 0,
"1": 1,
length: 2
};
splice.call(object, 1, 1), 1 == object[1] && Elements.implement("splice", (function() {
for(var length = this.length, result = splice.apply(this, arguments); length >= this.length;)delete this[length--];
return result;
}).protect()), Array.forEachMethod(function(method, name) {
Elements.implement(name, method);
}), Array.mirror(Elements);
try {
createElementAcceptsHTML = "x" == document.createElement("<input name=x>").name;
} catch (e) {
}
var escapeQuotes = function(html) {
return ("" + html).replace(/&/g, "&amp;").replace(/"/g, "&quot;");
};
Document.implement({
newElement: function(tag, props) {
return props && null != props.checked && (props.defaultChecked = props.checked), createElementAcceptsHTML && props && (tag = "<" + tag, props.name && (tag += " name=\"" + escapeQuotes(props.name) + "\""), props.type && (tag += " type=\"" + escapeQuotes(props.type) + "\""), tag += ">", delete props.name, delete props.type), this.id(this.createElement(tag)).set(props);
}
});
})(), (function() {
Slick.uidOf(window), Slick.uidOf(document), Document.implement({
newTextNode: function(text) {
return this.createTextNode(text);
},
getDocument: function() {
return this;
},
getWindow: function() {
return this.window;
},
id: ((types = {
string: function(id, nocash, doc) {
return (id = Slick.find(doc, "#" + id.replace(/(\W)/g, "\\$1"))) ? types.element(id, nocash) : null;
},
element: function(el, nocash) {
if (Slick.uidOf(el), !nocash && !el.$family && !/^(?:object|embed)$/i.test(el.tagName)) {
var fireEvent = el.fireEvent;
el._fireEvent = function(type, event) {
return fireEvent(type, event);
}, Object.append(el, Element.Prototype);
}
return el;
},
object: function(obj, nocash, doc) {
return obj.toElement ? types.element(obj.toElement(doc), nocash) : null;
}
}).textnode = types.whitespace = types.window = types.document = function(zero) {
return zero;
}, function(el, nocash, doc) {
if (el && el.$family && el.uniqueNumber) return el;
var type = typeOf(el);
return types[type] ? types[type](el, nocash, doc || document) : null;
})
}), null == window.$ && Window.implement("$", function(el, nc) {
return document.id(el, nc, this.document);
}), Window.implement({
getDocument: function() {
return this.document;
},
getWindow: function() {
return this;
}
}), [
Document,
Element
].invoke("implement", {
getElements: function(expression) {
return Slick.search(this, expression, new Elements);
},
getElement: function(expression) {
return document.id(Slick.find(this, expression));
}
});
var set, translations, types, search, find, match, pseudos, addSlickPseudos, contains = {
contains: function(element) {
return Slick.contains(this, element);
}
};
document.contains || Document.implement(contains), document.createElement("div").contains || Element.implement(contains), Element.implement("hasChild", function(element) {
return this !== element && this.contains(element);
}), search = Slick.search, find = Slick.find, match = Slick.match, this.Selectors = {
}, pseudos = this.Selectors.Pseudo = new Hash(), addSlickPseudos = function() {
for(var name in pseudos)pseudos.hasOwnProperty(name) && (Slick.definePseudo(name, pseudos[name]), delete pseudos[name]);
}, Slick.search = function(context, expression, append) {
return addSlickPseudos(), search.call(this, context, expression, append);
}, Slick.find = function(context, expression) {
return addSlickPseudos(), find.call(this, context, expression);
}, Slick.match = function(node, selector) {
return addSlickPseudos(), match.call(this, node, selector);
};
var injectCombinator = function(expression, combinator) {
if (!expression) return combinator;
for(var expressions = (expression = Object.clone(Slick.parse(expression))).expressions, i = expressions.length; i--;)expressions[i][0].combinator = combinator;
return expression;
};
Object.forEach({
getNext: "~",
getPrevious: "!~",
getParent: "!"
}, function(combinator, method) {
Element.implement(method, function(expression) {
return this.getElement(injectCombinator(expression, combinator));
});
}), Object.forEach({
getAllNext: "~",
getAllPrevious: "!~",
getSiblings: "~~",
getChildren: ">",
getParents: "!"
}, function(combinator, method) {
Element.implement(method, function(expression) {
return this.getElements(injectCombinator(expression, combinator));
});
}), Element.implement({
getFirst: function(expression) {
return document.id(Slick.search(this, injectCombinator(expression, ">"))[0]);
},
getLast: function(expression) {
return document.id(Slick.search(this, injectCombinator(expression, ">")).getLast());
},
getWindow: function() {
return this.ownerDocument.window;
},
getDocument: function() {
return this.ownerDocument;
},
getElementById: function(id) {
return document.id(Slick.find(this, "#" + ("" + id).replace(/(\W)/g, "\\$1")));
},
match: function(expression) {
return !expression || Slick.match(this, expression);
}
}), null == window.$$ && Window.implement("$$", function(selector) {
var elements = new Elements;
if (1 == arguments.length && "string" == typeof selector) return Slick.search(this.document, selector, elements);
for(var args = Array.flatten(arguments), i = 0, l = args.length; i < l; i++){
var item = args[i];
switch(typeOf(item)){
case "element":
elements.push(item);
break;
case "string":
Slick.search(this.document, item, elements);
}
}
return elements;
}), null == window.$$ && Window.implement("$$", function(selector) {
if (1 == arguments.length) {
if ("string" == typeof selector) return Slick.search(this.document, selector, new Elements);
if (Type.isEnumerable(selector)) return new Elements(selector);
}
return new Elements(arguments);
});
var inserters = {
before: function(context, element) {
var parent = element.parentNode;
parent && parent.insertBefore(context, element);
},
after: function(context, element) {
var parent = element.parentNode;
parent && parent.insertBefore(context, element.nextSibling);
},
bottom: function(context, element) {
element.appendChild(context);
},
top: function(context, element) {
element.insertBefore(context, element.firstChild);
}
};
inserters.inside = inserters.bottom, Object.each(inserters, function(inserter, where) {
where = where.capitalize();
var methods = {
};
methods["inject" + where] = function(el) {
return inserter(this, document.id(el, !0)), this;
}, methods["grab" + where] = function(el) {
return inserter(document.id(el, !0), this), this;
}, Element.implement(methods);
});
var propertyGetters = {
}, propertySetters = {
}, properties = {
};
Array.forEach([
"type",
"value",
"defaultValue",
"accessKey",
"cellPadding",
"cellSpacing",
"colSpan",
"frameBorder",
"rowSpan",
"tabIndex",
"useMap"
], function(property) {
properties[property.toLowerCase()] = property;
}), properties.html = "innerHTML", properties.text = null == document.createElement("div").textContent ? "innerText" : "textContent", Object.forEach(properties, function(real, key) {
propertySetters[key] = function(node, value) {
node[real] = value;
}, propertyGetters[key] = function(node) {
return node[real];
};
});
var bools = [
"compact",
"nowrap",
"ismap",
"declare",
"noshade",
"checked",
"disabled",
"readOnly",
"multiple",
"selected",
"noresize",
"defer",
"defaultChecked",
"autofocus",
"controls",
"autoplay",
"loop"
], booleans = {
};
Array.forEach(bools, function(bool) {
var lower = bool.toLowerCase();
booleans[lower] = bool, propertySetters[lower] = function(node, value) {
node[bool] = !!value;
}, propertyGetters[lower] = function(node) {
return !!node[bool];
};
}), Object.append(propertySetters, {
"class": function(node, value) {
"className" in node ? node.className = value || "" : node.setAttribute("class", value);
},
"for": function(node, value) {
"htmlFor" in node ? node.htmlFor = value : node.setAttribute("for", value);
},
style: function(node, value) {
node.style ? node.style.cssText = value : node.setAttribute("style", value);
},
value: function(node, value) {
node.value = null != value ? value : "";
}
}), propertyGetters.class = function(node) {
return "className" in node ? node.className || null : node.getAttribute("class");
};
var el = document.createElement("button");
try {
el.type = "button";
} catch (e) {
}
"button" != el.type && (propertySetters.type = function(node, value) {
node.setAttribute("type", value);
}), el = null;
var input = document.createElement("input");
input.value = "t", input.type = "submit", "t" != input.value && (propertySetters.type = function(node, type) {
var value = node.value;
node.type = type, node.value = value;
}), input = null;
var div, pollutesGetAttribute = ((div = document.createElement("div")).random = "attribute", "attribute" == div.getAttribute("random"));
Element.implement({
setProperty: function(name, value) {
var setter = propertySetters[name.toLowerCase()];
if (setter) setter(this, value);
else {
if (pollutesGetAttribute) var attributeWhiteList = this.retrieve("$attributeWhiteList", {
});
null == value ? (this.removeAttribute(name), pollutesGetAttribute && delete attributeWhiteList[name]) : (this.setAttribute(name, "" + value), pollutesGetAttribute && (attributeWhiteList[name] = !0));
}
return this;
},
setProperties: function(attributes) {
for(var attribute in attributes)this.setProperty(attribute, attributes[attribute]);
return this;
},
getProperty: function(name) {
var getter = propertyGetters[name.toLowerCase()];
if (getter) return getter(this);
if (pollutesGetAttribute) {
var attr = this.getAttributeNode(name), attributeWhiteList = this.retrieve("$attributeWhiteList", {
});
if (!attr) return null;
if (attr.expando && !attributeWhiteList[name]) {
var outer = this.outerHTML;
if (0 > outer.substr(0, outer.search(/\/?['"]?>(?![^<]*<['"])/)).indexOf(name)) return null;
attributeWhiteList[name] = !0;
}
}
var result = Slick.getAttribute(this, name);
return result || Slick.hasAttribute(this, name) ? result : null;
},
getProperties: function() {
var args = Array.from(arguments);
return args.map(this.getProperty, this).associate(args);
},
removeProperty: function(name) {
return this.setProperty(name, null);
},
removeProperties: function() {
return Array.each(arguments, this.removeProperty, this), this;
},
set: (function(prop, value) {
var property = Element.Properties[prop];
property && property.set ? property.set.call(this, value) : this.setProperty(prop, value);
}).overloadSetter(),
get: (function(prop) {
var property = Element.Properties[prop];
return property && property.get ? property.get.apply(this) : this.getProperty(prop);
}).overloadGetter(),
erase: function(prop) {
var property = Element.Properties[prop];
return property && property.erase ? property.erase.apply(this) : this.removeProperty(prop), this;
},
hasClass: function(className) {
return this.className.clean().contains(className, " ");
},
addClass: function(className) {
return this.hasClass(className) || (this.className = (this.className + " " + className).clean()), this;
},
removeClass: function(className) {
return this.className = this.className.replace(new RegExp("(^|\\s)" + className + "(?:\\s|$)"), "$1"), this;
},
toggleClass: function(className, force) {
return null == force && (force = !this.hasClass(className)), force ? this.addClass(className) : this.removeClass(className);
},
adopt: function() {
var fragment, parent = this, elements = Array.flatten(arguments), length = elements.length;
length > 1 && (parent = fragment = document.createDocumentFragment());
for(var i = 0; i < length; i++){
var element = document.id(elements[i], !0);
element && parent.appendChild(element);
}
return fragment && this.appendChild(fragment), this;
},
appendText: function(text, where) {
return this.grab(this.getDocument().newTextNode(text), where);
},
grab: function(el, where) {
return inserters[where || "bottom"](document.id(el, !0), this), this;
},
inject: function(el, where) {
return inserters[where || "bottom"](this, document.id(el, !0)), this;
},
replaces: function(el) {
return (el = document.id(el, !0)).parentNode.replaceChild(this, el), this;
},
wraps: function(el, where) {
return el = document.id(el, !0), this.replaces(el).grab(el, where);
},
getSelected: function() {
return this.selectedIndex, new Elements(Array.from(this.options).filter(function(option) {
return option.selected;
}));
},
toQueryString: function() {
var queryString = [];
return this.getElements("input, select, textarea").each(function(el) {
var type = el.type;
if (el.name && !el.disabled && "submit" != type && "reset" != type && "file" != type && "image" != type) {
var value = "select" == el.get("tag") ? el.getSelected().map(function(opt) {
return document.id(opt).get("value");
}) : "radio" != type && "checkbox" != type || el.checked ? el.get("value") : null;
Array.from(value).each(function(val) {
void 0 !== val && queryString.push(encodeURIComponent(el.name) + "=" + encodeURIComponent(val));
});
}
}), queryString.join("&");
}
});
var collected = {
}, storage = {
}, get = function(uid) {
return storage[uid] || (storage[uid] = {
});
}, clean = function(item) {
var uid = item.uniqueNumber;
return item.removeEvents && item.removeEvents(), item.clearAttributes && item.clearAttributes(), null != uid && (delete collected[uid], delete storage[uid]), item;
}, formProps = {
input: "checked",
option: "selected",
textarea: "value"
};
Element.implement({
destroy: function() {
var children = clean(this).getElementsByTagName("*");
return Array.each(children, clean), Element.dispose(this), null;
},
empty: function() {
return Array.from(this.childNodes).each(Element.dispose), this;
},
dispose: function() {
return this.parentNode ? this.parentNode.removeChild(this) : this;
},
clone: function(contents, keepid) {
contents = !1 !== contents;
var i, clone = this.cloneNode(contents), ce = [
clone
], te = [
this
];
for(contents && (ce.append(Array.from(clone.getElementsByTagName("*"))), te.append(Array.from(this.getElementsByTagName("*")))), i = ce.length; i--;){
var node = ce[i], element = te[i];
if (keepid || node.removeAttribute("id"), node.clearAttributes && (node.clearAttributes(), node.mergeAttributes(element), node.removeAttribute("uniqueNumber"), node.options)) for(var no = node.options, eo = element.options, j = no.length; j--;)no[j].selected = eo[j].selected;
var prop = formProps[element.tagName.toLowerCase()];
prop && element[prop] && (node[prop] = element[prop]);
}
if (Browser.ie) {
var co = clone.getElementsByTagName("object"), to = this.getElementsByTagName("object");
for(i = co.length; i--;)co[i].outerHTML = to[i].outerHTML;
}
return document.id(clone);
}
}), [
Element,
Window,
Document
].invoke("implement", {
addListener: function(type, fn) {
if ("unload" == type) {
var old = fn, self = this;
fn = function() {
self.removeListener("unload", fn), old();
};
} else collected[Slick.uidOf(this)] = this;
return this.addEventListener ? this.addEventListener(type, fn, !!arguments[2]) : this.attachEvent("on" + type, fn), this;
},
removeListener: function(type, fn) {
return this.removeEventListener ? this.removeEventListener(type, fn, !!arguments[2]) : this.detachEvent("on" + type, fn), this;
},
retrieve: function(property, dflt) {
var storage = get(Slick.uidOf(this)), prop = storage[property];
return null != dflt && null == prop && (prop = storage[property] = dflt), null != prop ? prop : null;
},
store: function(property, value) {
return get(Slick.uidOf(this))[property] = value, this;
},
eliminate: function(property) {
return delete get(Slick.uidOf(this))[property], this;
}
}), window.attachEvent && !window.addEventListener && window.addListener("unload", function() {
Object.each(collected, clean), window.CollectGarbage && CollectGarbage();
}), Element.Properties = {
}, Element.Properties = new Hash, Element.Properties.style = {
set: function(style) {
this.style.cssText = style;
},
get: function() {
return this.style.cssText;
},
erase: function() {
this.style.cssText = "";
}
}, Element.Properties.tag = {
get: function() {
return this.tagName.toLowerCase();
}
}, Element.Properties.html = {
set: function(html) {
null == html ? html = "" : "array" == typeOf(html) && (html = html.join("")), this.innerHTML = html;
},
erase: function() {
this.innerHTML = "";
}
};
var div1 = document.createElement("div");
div1.innerHTML = "<nav></nav>";
var supportsHTML5Elements = 1 == div1.childNodes.length;
if (!supportsHTML5Elements) for(var tags = "abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video".split(" "), fragment = document.createDocumentFragment(), l = tags.length; l--;)fragment.createElement(tags[l]);
div1 = null;
var supportsTableInnerHTML = Function.attempt(function() {
return document.createElement("table").innerHTML = "<tr><td></td></tr>", !0;
}), tr = document.createElement("tr"), html = "<td></td>";
tr.innerHTML = html;
var supportsTRInnerHTML = tr.innerHTML == html;
tr = null, supportsTableInnerHTML && supportsTRInnerHTML && supportsHTML5Elements || (Element.Properties.html.set = (set = Element.Properties.html.set, (translations = {
table: [
1,
"<table>",
"</table>"
],
select: [
1,
"<select>",
"</select>"
],
tbody: [
2,
"<table><tbody>",
"</tbody></table>"
],
tr: [
3,
"<table><tbody><tr>",
"</tr></tbody></table>"
]
}).thead = translations.tfoot = translations.tbody, function(html) {
var wrap = translations[this.get("tag")];
if (wrap || supportsHTML5Elements || (wrap = [
0,
"",
""
]), !wrap) return set.call(this, html);
var level = wrap[0], wrapper = document.createElement("div"), target = wrapper;
for(supportsHTML5Elements || fragment.appendChild(wrapper), wrapper.innerHTML = [
wrap[1],
html,
wrap[2]
].flatten().join(""); level--;)target = target.firstChild;
this.empty().adopt(target.childNodes), supportsHTML5Elements || fragment.removeChild(wrapper), wrapper = null;
}));
var testForm = document.createElement("form");
null.innerHTML = "<select><option>s</option></select>", "s" != null.firstChild.value && (Element.Properties.value = {
set: function(value) {
if ("select" != this.get("tag")) return this.setProperty("value", value);
for(var options = this.getElements("option"), i = 0; i < options.length; i++){
var option = options[i], attr = option.getAttributeNode("value");
if ((attr && attr.specified ? option.value : option.get("text")) == value) return option.selected = !0;
}
},
get: function() {
var option = this, tag = option.get("tag");
if ("select" != tag && "option" != tag) return this.getProperty("value");
if ("select" == tag && !(option = option.getSelected()[0])) return "";
var attr = option.getAttributeNode("value");
return attr && attr.specified ? option.value : option.get("text");
}
}), testForm = null, document.createElement("div").getAttributeNode("id") && (Element.Properties.id = {
set: function(id) {
this.id = this.getAttributeNode("id").value = id;
},
get: function() {
return this.id || null;
},
erase: function() {
this.id = this.getAttributeNode("id").value = "";
}
});
})(), (function() {
var html = document.html, el = document.createElement("div");
null.style.color = "red", null.style.color = null;
var doesNotRemoveStyles = "red" == null.style.color;
el = null, Element.Properties.styles = {
set: function(styles) {
this.setStyles(styles);
}
};
var hasOpacity = null != html.style.opacity, hasFilter = null != html.style.filter, reAlpha = /alpha\(opacity=([\d.]+)\)/i, setVisibility = function(element, opacity) {
element.store("$opacity", opacity), element.style.visibility = opacity > 0 || null == opacity ? "visible" : "hidden";
}, setOpacity = hasOpacity ? function(element, opacity) {
element.style.opacity = opacity;
} : hasFilter ? function(element, opacity) {
var style = element.style;
element.currentStyle && element.currentStyle.hasLayout || (style.zoom = 1), opacity = null == opacity || 1 == opacity ? "" : "alpha(opacity=" + (100 * opacity).limit(0, 100).round() + ")";
var filter = style.filter || element.getComputedStyle("filter") || "";
style.filter = reAlpha.test(filter) ? filter.replace(reAlpha, opacity) : filter + opacity, style.filter || style.removeAttribute("filter");
} : setVisibility, getOpacity = hasOpacity ? function(element) {
var opacity = element.style.opacity || element.getComputedStyle("opacity");
return "" == opacity ? 1 : opacity.toFloat();
} : hasFilter ? function(element) {
var opacity, filter = element.style.filter || element.getComputedStyle("filter");
return filter && (opacity = filter.match(reAlpha)), null == opacity || null == filter ? 1 : opacity[1] / 100;
} : function(element) {
var opacity = element.retrieve("$opacity");
return null == opacity && (opacity = "hidden" == element.style.visibility ? 0 : 1), opacity;
}, floatName = null == html.style.cssFloat ? "styleFloat" : "cssFloat";
Element.implement({
getComputedStyle: function(property) {
if (this.currentStyle) return this.currentStyle[property.camelCase()];
var defaultView = Element.getDocument(this).defaultView, computed = defaultView ? defaultView.getComputedStyle(this, null) : null;
return computed ? computed.getPropertyValue(property == floatName ? "float" : property.hyphenate()) : null;
},
setStyle: function(property, value) {
if ("opacity" == property) return null != value && (value = parseFloat(value)), setOpacity(this, value), this;
if (property = ("float" == property ? floatName : property).camelCase(), "string" != typeOf(value)) {
var map = (Element.Styles[property] || "@").split(" ");
value = Array.from(value).map(function(val, i) {
return map[i] ? "number" == typeOf(val) ? map[i].replace("@", Math.round(val)) : val : "";
}).join(" ");
} else value == String(Number(value)) && (value = Math.round(value));
return this.style[property] = value, ("" == value || null == value) && doesNotRemoveStyles && this.style.removeAttribute && this.style.removeAttribute(property), this;
},
getStyle: function(property) {
if ("opacity" == property) return getOpacity(this);
property = ("float" == property ? floatName : property).camelCase();
var result = this.style[property];
if (!result || "zIndex" == property) {
for(var style in result = [], Element.ShortStyles)if (property == style) {
for(var s in Element.ShortStyles[style])result.push(this.getStyle(s));
return result.join(" ");
}
result = this.getComputedStyle(property);
}
if (result) {
var color = (result = String(result)).match(/rgba?\([\d\s,]+\)/);
color && (result = result.replace(color[0], color[0].rgbToHex()));
}
if (Browser.opera || Browser.ie) {
if (/^(height|width)$/.test(property) && !/px$/.test(result)) {
var values = "width" == property ? [
"left",
"right"
] : [
"top",
"bottom"
], size = 0;
return values.each(function(value) {
size += this.getStyle("border-" + value + "-width").toInt() + this.getStyle("padding-" + value).toInt();
}, this), this["offset" + property.capitalize()] - size + "px";
}
if (Browser.ie && /^border(.+)Width|margin|padding/.test(property) && isNaN(parseFloat(result))) return "0px";
}
return result;
},
setStyles: function(styles) {
for(var style in styles)this.setStyle(style, styles[style]);
return this;
},
getStyles: function() {
var result = {
};
return Array.flatten(arguments).each(function(key) {
result[key] = this.getStyle(key);
}, this), result;
}
}), Element.Styles = {
left: "@px",
top: "@px",
bottom: "@px",
right: "@px",
width: "@px",
height: "@px",
maxWidth: "@px",
maxHeight: "@px",
minWidth: "@px",
minHeight: "@px",
backgroundColor: "rgb(@, @, @)",
backgroundPosition: "@px @px",
color: "rgb(@, @, @)",
fontSize: "@px",
letterSpacing: "@px",
lineHeight: "@px",
clip: "rect(@px @px @px @px)",
margin: "@px @px @px @px",
padding: "@px @px @px @px",
border: "@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)",
borderWidth: "@px @px @px @px",
borderStyle: "@ @ @ @",
borderColor: "rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)",
zIndex: "@",
zoom: "@",
fontWeight: "@",
textIndent: "@px",
opacity: "@"
}, Element.implement({
setOpacity: function(value) {
return setOpacity(this, value), this;
},
getOpacity: function() {
return getOpacity(this);
}
}), Element.Properties.opacity = {
set: function(opacity) {
setOpacity(this, opacity), setVisibility(this, opacity);
},
get: function() {
return getOpacity(this);
}
}, Element.Styles = new Hash(Element.Styles), Element.ShortStyles = {
margin: {
},
padding: {
},
border: {
},
borderWidth: {
},
borderStyle: {
},
borderColor: {
}
}, [
"Top",
"Right",
"Bottom",
"Left"
].each(function(direction) {
var Short = Element.ShortStyles, All = Element.Styles;
[
"margin",
"padding"
].each(function(style) {
var sd = style + direction;
Short[style][sd] = All[sd] = "@px";
});
var bd = "border" + direction;
Short.border[bd] = All[bd] = "@px @ rgb(@, @, @)";
var bdw = bd + "Width", bds = bd + "Style", bdc = bd + "Color";
Short[bd] = {
}, Short.borderWidth[bdw] = Short[bd][bdw] = All[bdw] = "@px", Short.borderStyle[bds] = Short[bd][bds] = All[bds] = "@", Short.borderColor[bdc] = Short[bd][bdc] = All[bdc] = "rgb(@, @, @)";
});
})(), (function() {
if (Element.Properties.events = {
set: function(events) {
this.addEvents(events);
}
}, [
Element,
Window,
Document
].invoke("implement", {
addEvent: function(type, fn) {
var events = this.retrieve("events", {
});
if (events[type] || (events[type] = {
keys: [],
values: []
}), events[type].keys.contains(fn)) return this;
events[type].keys.push(fn);
var realType = type, custom = Element.Events[type], condition = fn, self = this;
custom && (custom.onAdd && custom.onAdd.call(this, fn, type), custom.condition && (condition = function(event) {
return !custom.condition.call(this, event, type) || fn.call(this, event);
}), custom.base && (realType = Function.from(custom.base).call(this, type)));
var defn = function() {
return fn.call(self);
}, nativeEvent = Element.NativeEvents[realType];
return nativeEvent && (2 == nativeEvent && (defn = function(event) {
event = new DOMEvent(event, self.getWindow()), !1 === condition.call(self, event) && event.stop();
}), this.addListener(realType, defn, arguments[2])), events[type].values.push(defn), this;
},
removeEvent: function(type, fn) {
var events = this.retrieve("events");
if (!events || !events[type]) return this;
var list = events[type], index = list.keys.indexOf(fn);
if (-1 == index) return this;
var value = list.values[index];
delete list.keys[index], delete list.values[index];
var custom = Element.Events[type];
return custom && (custom.onRemove && custom.onRemove.call(this, fn, type), custom.base && (type = Function.from(custom.base).call(this, type))), Element.NativeEvents[type] ? this.removeListener(type, value, arguments[2]) : this;
},
addEvents: function(events) {
for(var event in events)this.addEvent(event, events[event]);
return this;
},
removeEvents: function(events) {
var type;
if ("object" == typeOf(events)) {
for(type in events)this.removeEvent(type, events[type]);
return this;
}
var attached = this.retrieve("events");
if (!attached) return this;
if (events) attached[events] && (attached[events].keys.each(function(fn) {
this.removeEvent(events, fn);
}, this), delete attached[events]);
else {
for(type in attached)this.removeEvents(type);
this.eliminate("events");
}
return this;
},
fireEvent: function(type, args, delay) {
var events = this.retrieve("events");
return events && events[type] && (args = Array.from(args), events[type].keys.each(function(fn) {
delay ? fn.delay(delay, this, args) : fn.apply(this, args);
}, this)), this;
},
cloneEvents: function(from, type) {
var events = (from = document.id(from)).retrieve("events");
if (!events) return this;
if (type) events[type] && events[type].keys.each(function(fn) {
this.addEvent(type, fn);
}, this);
else for(var eventType in events)this.cloneEvents(from, eventType);
return this;
}
}), Element.NativeEvents = {
click: 2,
dblclick: 2,
mouseup: 2,
mousedown: 2,
contextmenu: 2,
mousewheel: 2,
DOMMouseScroll: 2,
mouseover: 2,
mouseout: 2,
mousemove: 2,
selectstart: 2,
selectend: 2,
keydown: 2,
keypress: 2,
keyup: 2,
orientationchange: 2,
touchstart: 2,
touchmove: 2,
touchend: 2,
touchcancel: 2,
gesturestart: 2,
gesturechange: 2,
gestureend: 2,
focus: 2,
blur: 2,
change: 2,
reset: 2,
select: 2,
submit: 2,
paste: 2,
input: 2,
load: 2,
unload: 1,
beforeunload: 2,
resize: 1,
move: 1,
DOMContentLoaded: 1,
readystatechange: 1,
error: 1,
abort: 1,
scroll: 1
}, Element.Events = {
mousewheel: {
base: Browser.firefox ? "DOMMouseScroll" : "mousewheel"
}
}, "onmouseenter" in document.documentElement) Element.NativeEvents.mouseenter = Element.NativeEvents.mouseleave = 2;
else {
var check = function(event) {
var related = event.relatedTarget;
return null == related || !!related && related != this && "xul" != related.prefix && "document" != typeOf(this) && !this.contains(related);
};
Element.Events.mouseenter = {
base: "mouseover",
condition: check
}, Element.Events.mouseleave = {
base: "mouseout",
condition: check
};
}
window.addEventListener || (Element.NativeEvents.propertychange = 2, Element.Events.change = {
base: function() {
var type = this.type;
return "input" == this.get("tag") && ("radio" == type || "checkbox" == type) ? "propertychange" : "change";
},
condition: function(event) {
return "radio" != this.type || "checked" == event.event.propertyName && this.checked;
}
}), Element.Events = new Hash(Element.Events);
})(), (function() {
var eventListenerSupport = !!window.addEventListener;
Element.NativeEvents.focusin = Element.NativeEvents.focusout = 2;
var bubbleUp = function(self, match, fn, event, target) {
for(; target && target != self;){
if (match(target, event)) return fn.call(target, event, target);
target = document.id(target.parentNode);
}
}, map = {
mouseenter: {
base: "mouseover"
},
mouseleave: {
base: "mouseout"
},
focus: {
base: "focus" + (eventListenerSupport ? "" : "in"),
capture: !0
},
blur: {
base: eventListenerSupport ? "blur" : "focusout",
capture: !0
}
}, _key = "$delegation:", formObserver = function(type) {
return {
base: "focusin",
remove: function(self, uid) {
var list = self.retrieve(_key + type + "listeners", {
})[uid];
if (list && list.forms) for(var i = list.forms.length; i--;)list.forms[i].removeEvent(type, list.fns[i]);
},
listen: function(self, match, fn, event, target, uid) {
var form = "form" == target.get("tag") ? target : event.target.getParent("form");
if (form) {
var listeners = self.retrieve(_key + type + "listeners", {
}), listener = listeners[uid] || {
forms: [],
fns: []
}, forms = listener.forms;
if (-1 == forms.indexOf(form)) {
forms.push(form);
var _fn = function(event) {
bubbleUp(self, match, fn, event, target);
};
form.addEvent(type, _fn), listener.fns.push(_fn), listeners[uid] = listener, self.store(_key + type + "listeners", listeners);
}
}
}
};
}, inputObserver = function(type) {
return {
base: "focusin",
listen: function(self, match, fn, event, target) {
var events = {
blur: function() {
this.removeEvents(events);
}
};
events[type] = function(event) {
bubbleUp(self, match, fn, event, target);
}, event.target.addEvents(events);
}
};
};
eventListenerSupport || Object.append(map, {
submit: formObserver("submit"),
reset: formObserver("reset"),
change: inputObserver("change"),
select: inputObserver("select")
});
var proto = Element.prototype, addEvent = proto.addEvent, removeEvent = proto.removeEvent, relay = function(old, method) {
return function(type, fn, useCapture) {
if (-1 == type.indexOf(":relay")) return old.call(this, type, fn, useCapture);
var parsed = Slick.parse(type).expressions[0][0];
if ("relay" != parsed.pseudos[0].key) return old.call(this, type, fn, useCapture);
var newType = parsed.tag;
return parsed.pseudos.slice(1).each(function(pseudo) {
newType += ":" + pseudo.key + (pseudo.value ? "(" + pseudo.value + ")" : "");
}), old.call(this, type, fn), method.call(this, newType, parsed.pseudos[0].value, fn);
};
}, delegation = {
addEvent: function(type, match, fn) {
var storage = this.retrieve("$delegates", {
}), stored = storage[type];
if (stored) {
for(var _uid in stored)if (stored[_uid].fn == fn && stored[_uid].match == match) return this;
}
var _type = type, _match = match, _fn = fn, _map = map[type] || {
};
type = _map.base || _type, match = function(target) {
return Slick.match(target, _match);
};
var elementEvent = Element.Events[_type];
if (elementEvent && elementEvent.condition) {
var __match = match, condition = elementEvent.condition;
match = function(target, event) {
return __match(target, event) && condition.call(target, event, type);
};
}
var self = this, uid = String.uniqueID(), delegator = _map.listen ? function(event, target) {
!target && event && event.target && (target = event.target), target && _map.listen(self, match, fn, event, target, uid);
} : function(event, target) {
!target && event && event.target && (target = event.target), target && bubbleUp(self, match, fn, event, target);
};
return stored || (stored = {
}), stored[uid] = {
match: _match,
fn: _fn,
delegator: delegator
}, storage[_type] = stored, addEvent.call(this, type, delegator, _map.capture);
},
removeEvent: function(type, match, fn, _uid) {
var __uid, s, storage = this.retrieve("$delegates", {
}), stored = storage[type];
if (!stored) return this;
if (_uid) {
var _type = type, delegator = stored[_uid].delegator, _map = map[type] || {
};
return type = _map.base || _type, _map.remove && _map.remove(this, _uid), delete stored[_uid], storage[_type] = stored, removeEvent.call(this, type, delegator);
}
if (fn) {
for(__uid in stored)if ((s = stored[__uid]).match == match && s.fn == fn) return delegation.removeEvent.call(this, type, match, fn, __uid);
} else for(__uid in stored)(s = stored[__uid]).match == match && delegation.removeEvent.call(this, type, match, s.fn, __uid);
return this;
}
};
[
Element,
Window,
Document
].invoke("implement", {
addEvent: relay(addEvent, delegation.addEvent),
removeEvent: relay(removeEvent, delegation.removeEvent)
});
})(), (function() {
var element = document.createElement("div"), child = document.createElement("div");
element.style.height = "0", element.appendChild(child);
var brokenOffsetParent = child.offsetParent === element;
element = child = null;
var isOffset = function(el) {
return "static" != styleString(el, "position") || isBody(el);
}, isOffsetStatic = function(el) {
return isOffset(el) || /^(?:table|td|th)$/i.test(el.tagName);
};
Element.implement({
scrollTo: function(x, y) {
return isBody(this) ? this.getWindow().scrollTo(x, y) : (this.scrollLeft = x, this.scrollTop = y), this;
},
getSize: function() {
return isBody(this) ? this.getWindow().getSize() : {
x: this.offsetWidth,
y: this.offsetHeight
};
},
getScrollSize: function() {
return isBody(this) ? this.getWindow().getScrollSize() : {
x: this.scrollWidth,
y: this.scrollHeight
};
},
getScroll: function() {
return isBody(this) ? this.getWindow().getScroll() : {
x: this.scrollLeft,
y: this.scrollTop
};
},
getScrolls: function() {
for(var element = this.parentNode, position = {
x: 0,
y: 0
}; element && !isBody(element);)position.x += element.scrollLeft, position.y += element.scrollTop, element = element.parentNode;
return position;
},
getOffsetParent: brokenOffsetParent ? function() {
var element = this;
if (isBody(element) || "fixed" == styleString(element, "position")) return null;
for(var isOffsetCheck = "static" == styleString(element, "position") ? isOffsetStatic : isOffset; element = element.parentNode;)if (isOffsetCheck(element)) return element;
return null;
} : function() {
var element = this;
if (isBody(element) || "fixed" == styleString(element, "position")) return null;
try {
return element.offsetParent;
} catch (e) {
}
return null;
},
getOffsets: function() {
if (this.getBoundingClientRect && !Browser.Platform.ios) {
var bound = this.getBoundingClientRect(), html = document.id(this.getDocument().documentElement), htmlScroll = html.getScroll(), elemScrolls = this.getScrolls(), isFixed = "fixed" == styleString(this, "position");
return {
x: bound.left.toInt() + elemScrolls.x + (isFixed ? 0 : htmlScroll.x) - html.clientLeft,
y: bound.top.toInt() + elemScrolls.y + (isFixed ? 0 : htmlScroll.y) - html.clientTop
};
}
var element = this, position = {
x: 0,
y: 0
};
if (isBody(this)) return position;
for(; element && !isBody(element);){
if (position.x += element.offsetLeft, position.y += element.offsetTop, Browser.firefox) {
borderBox(element) || (position.x += leftBorder(element), position.y += topBorder(element));
var parent = element.parentNode;
parent && "visible" != styleString(parent, "overflow") && (position.x += leftBorder(parent), position.y += topBorder(parent));
} else element != this && Browser.safari && (position.x += leftBorder(element), position.y += topBorder(element));
element = element.offsetParent;
}
return Browser.firefox && !borderBox(this) && (position.x -= leftBorder(this), position.y -= topBorder(this)), position;
},
getPosition: function(relative) {
var offset = this.getOffsets(), scroll = this.getScrolls(), position = {
x: offset.x - scroll.x,
y: offset.y - scroll.y
};
if (relative && (relative = document.id(relative))) {
var relativePosition = relative.getPosition();
return {
x: position.x - relativePosition.x - leftBorder(relative),
y: position.y - relativePosition.y - topBorder(relative)
};
}
return position;
},
getCoordinates: function(element) {
if (isBody(this)) return this.getWindow().getCoordinates();
var position = this.getPosition(element), size = this.getSize(), obj = {
left: position.x,
top: position.y,
width: size.x,
height: size.y
};
return obj.right = obj.left + obj.width, obj.bottom = obj.top + obj.height, obj;
},
computePosition: function(obj) {
return {
left: obj.x - styleNumber(this, "margin-left"),
top: obj.y - styleNumber(this, "margin-top")
};
},
setPosition: function(obj) {
return this.setStyles(this.computePosition(obj));
}
}), [
Document,
Window
].invoke("implement", {
getSize: function() {
var doc = getCompatElement(this);
return {
x: doc.clientWidth,
y: doc.clientHeight
};
},
getScroll: function() {
var win = this.getWindow(), doc = getCompatElement(this);
return {
x: win.pageXOffset || doc.scrollLeft,
y: win.pageYOffset || doc.scrollTop
};
},
getScrollSize: function() {
var doc = getCompatElement(this), min = this.getSize(), body = this.getDocument().body;
return {
x: Math.max(doc.scrollWidth, body.scrollWidth, min.x),
y: Math.max(doc.scrollHeight, body.scrollHeight, min.y)
};
},
getPosition: function() {
return {
x: 0,
y: 0
};
},
getCoordinates: function() {
var size = this.getSize();
return {
top: 0,
left: 0,
bottom: size.y,
right: size.x,
height: size.y,
width: size.x
};
}
});
var styleString = Element.getComputedStyle;
function styleNumber(element, style) {
return styleString(element, style).toInt() || 0;
}
function borderBox(element) {
return "border-box" == styleString(element, "-moz-box-sizing");
}
function topBorder(element) {
return styleNumber(element, "border-top-width");
}
function leftBorder(element) {
return styleNumber(element, "border-left-width");
}
function isBody(element) {
return /^(?:body|html)$/i.test(element.tagName);
}
function getCompatElement(element) {
var doc = element.getDocument();
return doc.compatMode && "CSS1Compat" != doc.compatMode ? doc.body : doc.html;
}
})(), Element.alias({
position: "setPosition"
}), [
Window,
Document,
Element
].invoke("implement", {
getHeight: function() {
return this.getSize().y;
},
getWidth: function() {
return this.getSize().x;
},
getScrollTop: function() {
return this.getScroll().y;
},
getScrollLeft: function() {
return this.getScroll().x;
},
getScrollHeight: function() {
return this.getScrollSize().y;
},
getScrollWidth: function() {
return this.getScrollSize().x;
},
getTop: function() {
return this.getPosition().y;
},
getLeft: function() {
return this.getPosition().x;
}
}), (function() {
var Fx = this.Fx = new Class({
Implements: [
Chain,
Events,
Options
],
options: {
fps: 60,
unit: !1,
duration: 500,
frames: null,
frameSkip: !0,
link: "ignore"
},
initialize: function(options) {
this.subject = this.subject || this, this.setOptions(options);
},
getTransition: function() {
return function(p) {
return -(Math.cos(Math.PI * p) - 1) / 2;
};
},
step: function(now) {
if (this.options.frameSkip) {
var frames = (null != this.time ? now - this.time : 0) / this.frameInterval;
this.time = now, this.frame += frames;
} else this.frame++;
if (this.frame < this.frames) {
var delta = this.transition(this.frame / this.frames);
this.set(this.compute(this.from, this.to, delta));
} else this.frame = this.frames, this.set(this.compute(this.from, this.to, 1)), this.stop();
},
set: function(now) {
return now;
},
compute: function(from, to, delta) {
return Fx.compute(from, to, delta);
},
check: function() {
if (!this.isRunning()) return !0;
switch(this.options.link){
case "cancel":
return this.cancel(), !0;
case "chain":
return this.chain(this.caller.pass(arguments, this)), !1;
}
return !1;
},
start: function(from, to) {
if (!this.check(from, to)) return this;
this.from = from, this.to = to, this.frame = this.options.frameSkip ? 0 : -1, this.time = null, this.transition = this.getTransition();
var frames = this.options.frames, fps = this.options.fps, duration = this.options.duration;
return this.duration = Fx.Durations[duration] || duration.toInt(), this.frameInterval = 1000 / fps, this.frames = frames || Math.round(this.duration / this.frameInterval), this.fireEvent("start", this.subject), pushInstance.call(this, fps), this;
},
stop: function() {
return this.isRunning() && (this.time = null, pullInstance.call(this, this.options.fps), this.frames == this.frame ? (this.fireEvent("complete", this.subject), this.callChain() || this.fireEvent("chainComplete", this.subject)) : this.fireEvent("stop", this.subject)), this;
},
cancel: function() {
return this.isRunning() && (this.time = null, pullInstance.call(this, this.options.fps), this.frame = this.frames, this.fireEvent("cancel", this.subject).clearChain()), this;
},
pause: function() {
return this.isRunning() && (this.time = null, pullInstance.call(this, this.options.fps)), this;
},
resume: function() {
return this.frame < this.frames && !this.isRunning() && pushInstance.call(this, this.options.fps), this;
},
isRunning: function() {
var list = instances[this.options.fps];
return list && list.contains(this);
}
});
Fx.compute = function(from, to, delta) {
return (to - from) * delta + from;
}, Fx.Durations = {
"short": 250,
normal: 500,
"long": 1000
};
var instances = {
}, timers = {
}, loop = function() {
for(var now = Date.now(), i = this.length; i--;){
var instance = this[i];
instance && instance.step(now);
}
}, pushInstance = function(fps) {
var list = instances[fps] || (instances[fps] = []);
list.push(this), timers[fps] || (timers[fps] = loop.periodical(Math.round(1000 / fps), list));
}, pullInstance = function(fps) {
var list = instances[fps];
list && (list.erase(this), !list.length && timers[fps] && (delete instances[fps], timers[fps] = clearInterval(timers[fps])));
};
})(), Fx.CSS = new Class({
Extends: Fx,
prepare: function(element, property, values) {
var from = (values = Array.from(values))[0], to = values[1];
if (null == to) {
to = from, from = element.getStyle(property);
var unit = this.options.unit;
if (unit && from.slice(-unit.length) != unit && 0 != parseFloat(from)) {
element.setStyle(property, to + unit);
var value = element.getComputedStyle(property);
if (!/px$/.test(value) && null == (value = element.style[("pixel-" + property).camelCase()])) {
var left = element.style.left;
element.style.left = to + unit, value = element.style.pixelLeft, element.style.left = left;
}
from = (to || 1) / (parseFloat(value) || 1) * (parseFloat(from) || 0), element.setStyle(property, from + unit);
}
}
return {
from: this.parse(from),
to: this.parse(to)
};
},
parse: function(value) {
return (value = "string" == typeof (value = Function.from(value)()) ? value.split(" ") : Array.from(value)).map(function(val) {
val = String(val);
var found = !1;
return Object.each(Fx.CSS.Parsers, function(parser, key) {
if (!found) {
var parsed = parser.parse(val);
(parsed || 0 === parsed) && (found = {
value: parsed,
parser: parser
});
}
}), found = found || {
value: val,
parser: Fx.CSS.Parsers.String
};
});
},
compute: function(from, to, delta) {
var computed = [];
return Math.min(from.length, to.length).times(function(i) {
computed.push({
value: from[i].parser.compute(from[i].value, to[i].value, delta),
parser: from[i].parser
});
}), computed.$family = Function.from("fx:css:value"), computed;
},
serve: function(value, unit) {
"fx:css:value" != typeOf(value) && (value = this.parse(value));
var returned = [];
return value.each(function(bit) {
returned = returned.concat(bit.parser.serve(bit.value, unit));
}), returned;
},
render: function(element, property, value, unit) {
element.setStyle(property, this.serve(value, unit));
},
search: function(selector) {
if (Fx.CSS.Cache[selector]) return Fx.CSS.Cache[selector];
var to = {
}, selectorTest = new RegExp("^" + selector.escapeRegExp() + "$");
return Array.each(document.styleSheets, function(sheet, j) {
var href = sheet.href;
if (!(href && href.contains("://")) || href.contains(document.domain)) {
var rules = sheet.rules || sheet.cssRules;
Array.each(rules, function(rule, i) {
if (rule.style) {
var selectorText = rule.selectorText ? rule.selectorText.replace(/^\w+/, function(m) {
return m.toLowerCase();
}) : null;
selectorText && selectorTest.test(selectorText) && Object.each(Element.Styles, function(value, style) {
rule.style[style] && !Element.ShortStyles[style] && (value = String(rule.style[style]), to[style] = /^rgb/.test(value) ? value.rgbToHex() : value);
});
}
});
}
}), Fx.CSS.Cache[selector] = to;
}
}), Fx.CSS.Cache = {
}, Fx.CSS.Parsers = {
Color: {
parse: function(value) {
return value.match(/^#[0-9a-f]{3,6}$/i) ? value.hexToRgb(!0) : !!(value = value.match(/(\d+),\s*(\d+),\s*(\d+)/)) && [
value[1],
value[2],
value[3]
];
},
compute: function(from, to, delta) {
return from.map(function(value, i) {
return Math.round(Fx.compute(from[i], to[i], delta));
});
},
serve: function(value) {
return value.map(Number);
}
},
Number: {
parse: parseFloat,
compute: Fx.compute,
serve: function(value, unit) {
return unit ? value + unit : value;
}
},
String: {
parse: Function.from(!1),
compute: function(zero, one) {
return one;
},
serve: function(zero) {
return zero;
}
}
}, Fx.CSS.Parsers = new Hash(Fx.CSS.Parsers), Fx.Tween = new Class({
Extends: Fx.CSS,
initialize: function(element, options) {
this.element = this.subject = document.id(element), this.parent(options);
},
set: function(property, now) {
return 1 == arguments.length && (now = property, property = this.property || this.options.property), this.render(this.element, property, now, this.options.unit), this;
},
start: function(property, from, to) {
if (!this.check(property, from, to)) return this;
var args = Array.flatten(arguments);
this.property = this.options.property || args.shift();
var parsed = this.prepare(this.element, this.property, args);
return this.parent(parsed.from, parsed.to);
}
}), Element.Properties.tween = {
set: function(options) {
return this.get("tween").cancel().setOptions(options), this;
},
get: function() {
var tween = this.retrieve("tween");
return tween || (tween = new Fx.Tween(this, {
link: "cancel"
}), this.store("tween", tween)), tween;
}
}, Element.implement({
tween: function(property, from, to) {
return this.get("tween").start(property, from, to), this;
},
fade: function(how) {
var method, toggle, fade = this.get("tween"), args = [
"opacity"
].append(arguments);
switch(null == args[1] && (args[1] = "toggle"), args[1]){
case "in":
method = "start", args[1] = 1;
break;
case "out":
method = "start", args[1] = 0;
break;
case "show":
method = "set", args[1] = 1;
break;
case "hide":
method = "set", args[1] = 0;
break;
case "toggle":
var flag = this.retrieve("fade:flag", 1 == this.getStyle("opacity"));
method = "start", args[1] = flag ? 0 : 1, this.store("fade:flag", !flag), toggle = !0;
break;
default:
method = "start";
}
toggle || this.eliminate("fade:flag"), fade[method].apply(fade, args);
var to = args[args.length - 1];
return "set" == method || 0 != to ? this.setStyle("visibility", 0 == to ? "hidden" : "visible") : fade.chain(function() {
this.element.setStyle("visibility", "hidden"), this.callChain();
}), this;
},
highlight: function(start, end) {
end || (end = "transparent" == (end = this.retrieve("highlight:original", this.getStyle("background-color"))) ? "#fff" : end);
var tween = this.get("tween");
return tween.start("background-color", start || "#ffff88", end).chain((function() {
this.setStyle("background-color", this.retrieve("highlight:original")), tween.callChain();
}).bind(this)), this;
}
}), Fx.Morph = new Class({
Extends: Fx.CSS,
initialize: function(element, options) {
this.element = this.subject = document.id(element), this.parent(options);
},
set: function(now) {
for(var p in "string" == typeof now && (now = this.search(now)), now)this.render(this.element, p, now[p], this.options.unit);
return this;
},
compute: function(from, to, delta) {
var now = {
};
for(var p in from)now[p] = this.parent(from[p], to[p], delta);
return now;
},
start: function(properties) {
if (!this.check(properties)) return this;
"string" == typeof properties && (properties = this.search(properties));
var from = {
}, to = {
};
for(var p in properties){
var parsed = this.prepare(this.element, p, properties[p]);
from[p] = parsed.from, to[p] = parsed.to;
}
return this.parent(from, to);
}
}), Element.Properties.morph = {
set: function(options) {
return this.get("morph").cancel().setOptions(options), this;
},
get: function() {
var morph = this.retrieve("morph");
return morph || (morph = new Fx.Morph(this, {
link: "cancel"
}), this.store("morph", morph)), morph;
}
}, Element.implement({
morph: function(props) {
return this.get("morph").start(props), this;
}
}), Fx.implement({
getTransition: function() {
var trans = this.options.transition || Fx.Transitions.Sine.easeInOut;
if ("string" == typeof trans) {
var data = trans.split(":");
trans = (trans = Fx.Transitions)[data[0]] || trans[data[0].capitalize()], data[1] && (trans = trans["ease" + data[1].capitalize() + (data[2] ? data[2].capitalize() : "")]);
}
return trans;
}
}), Fx.Transition = function(transition, params) {
var easeIn = function(pos) {
return transition(pos, params = Array.from(params));
};
return Object.append(easeIn, {
easeIn: easeIn,
easeOut: function(pos) {
return 1 - transition(1 - pos, params);
},
easeInOut: function(pos) {
return (pos <= 0.5 ? transition(2 * pos, params) : 2 - transition(2 * (1 - pos), params)) / 2;
}
});
}, Fx.Transitions = {
linear: function(zero) {
return zero;
}
}, Fx.Transitions = new Hash(Fx.Transitions), Fx.Transitions.extend = function(transitions) {
for(var transition in transitions)Fx.Transitions[transition] = new Fx.Transition(transitions[transition]);
}, Fx.Transitions.extend({
Pow: function(p, x) {
return Math.pow(p, x && x[0] || 6);
},
Expo: function(p) {
return Math.pow(2, 8 * (p - 1));
},
Circ: function(p) {
return 1 - Math.sin(Math.acos(p));
},
Sine: function(p) {
return 1 - Math.cos(p * Math.PI / 2);
},
Back: function(p, x) {
return Math.pow(p, 2) * (((x = x && x[0] || 1.618) + 1) * p - x);
},
Bounce: function(p) {
for(var value, a = 0, b = 1;; a += b, b /= 2)if (p >= (7 - 4 * a) / 11) {
value = b * b - Math.pow((11 - 6 * a - 11 * p) / 4, 2);
break;
}
return value;
},
Elastic: function(p, x) {
return Math.pow(2, 10 * --p) * Math.cos(20 * p * Math.PI * (x && x[0] || 1) / 3);
}
}), [
"Quad",
"Cubic",
"Quart",
"Quint"
].each(function(transition, i) {
Fx.Transitions[transition] = new Fx.Transition(function(p) {
return Math.pow(p, i + 2);
});
}), (function() {
var empty = function() {
}, progressSupport = "onprogress" in new Browser.Request, Request = this.Request = new Class({
Implements: [
Chain,
Events,
Options
],
options: {
url: "",
data: "",
headers: {
"X-Requested-With": "XMLHttpRequest",
Accept: "text/javascript, text/html, application/xml, text/xml, */*"
},
async: !0,
format: !1,
method: "post",
link: "ignore",
isSuccess: null,
emulation: !0,
urlEncoded: !0,
encoding: "utf-8",
evalScripts: !1,
evalResponse: !1,
timeout: 0,
noCache: !1
},
initialize: function(options) {
this.xhr = new Browser.Request(), this.setOptions(options), this.headers = this.options.headers;
},
onStateChange: function() {
var xhr = this.xhr;
4 == xhr.readyState && this.running && (this.running = !1, this.status = 0, Function.attempt((function() {
var status = xhr.status;
this.status = 1223 == status ? 204 : status;
}).bind(this)), xhr.onreadystatechange = empty, progressSupport && (xhr.onprogress = xhr.onloadstart = empty), clearTimeout(this.timer), this.response = {
text: this.xhr.responseText || "",
xml: this.xhr.responseXML
}, this.options.isSuccess.call(this, this.status) ? this.success(this.response.text, this.response.xml) : this.failure());
},
isSuccess: function() {
var status = this.status;
return status >= 200 && status < 300;
},
isRunning: function() {
return !!this.running;
},
processScripts: function(text) {
return this.options.evalResponse || /(ecma|java)script/.test(this.getHeader("Content-type")) ? Browser.exec(text) : text.stripScripts(this.options.evalScripts);
},
success: function(text, xml) {
this.onSuccess(this.processScripts(text), xml);
},
onSuccess: function() {
this.fireEvent("complete", arguments).fireEvent("success", arguments).callChain();
},
failure: function() {
this.onFailure();
},
onFailure: function() {
this.fireEvent("complete").fireEvent("failure", this.xhr);
},
loadstart: function(event) {
this.fireEvent("loadstart", [
event,
this.xhr
]);
},
progress: function(event) {
this.fireEvent("progress", [
event,
this.xhr
]);
},
timeout: function() {
this.fireEvent("timeout", this.xhr);
},
setHeader: function(name, value) {
return this.headers[name] = value, this;
},
getHeader: function(name) {
return Function.attempt((function() {
return this.xhr.getResponseHeader(name);
}).bind(this));
},
check: function() {
if (!this.running) return !0;
switch(this.options.link){
case "cancel":
return this.cancel(), !0;
case "chain":
return this.chain(this.caller.pass(arguments, this)), !1;
}
return !1;
},
send: function(options) {
if (!this.check(options)) return this;
this.options.isSuccess = this.options.isSuccess || this.isSuccess, this.running = !0;
var type = typeOf(options);
("string" == type || "element" == type) && (options = {
data: options
});
var old = this.options, data = (options = Object.append({
data: old.data,
url: old.url,
method: old.method
}, options)).data, url = String(options.url), method = options.method.toLowerCase();
switch(typeOf(data)){
case "element":
data = document.id(data).toQueryString();
break;
case "object":
case "hash":
data = Object.toQueryString(data);
}
if (this.options.format) {
var format = "format=" + this.options.format;
data = data ? format + "&" + data : format;
}
if (this.options.emulation && ![
"get",
"post"
].contains(method)) {
var _method = "_method=" + method;
data = data ? _method + "&" + data : _method, method = "post";
}
if (this.options.urlEncoded && [
"post",
"put"
].contains(method)) {
var encoding = this.options.encoding ? "; charset=" + this.options.encoding : "";
this.headers["Content-type"] = "application/x-www-form-urlencoded" + encoding;
}
url || (url = document.location.pathname);
var trimPosition = url.lastIndexOf("/");
trimPosition > -1 && (trimPosition = url.indexOf("#")) > -1 && (url = url.substr(0, trimPosition)), this.options.noCache && (url += (url.contains("?") ? "&" : "?") + String.uniqueID()), data && "get" == method && (url += (url.contains("?") ? "&" : "?") + data, data = null);
var xhr = this.xhr;
return progressSupport && (xhr.onloadstart = this.loadstart.bind(this), xhr.onprogress = this.progress.bind(this)), xhr.open(method.toUpperCase(), url, this.options.async, this.options.user, this.options.password), this.options.user && "withCredentials" in xhr && (xhr.withCredentials = !0), xhr.onreadystatechange = this.onStateChange.bind(this), Object.each(this.headers, function(value, key) {
try {
xhr.setRequestHeader(key, value);
} catch (e) {
this.fireEvent("exception", [
key,
value
]);
}
}, this), this.fireEvent("request"), xhr.send(data), this.options.async ? this.options.timeout && (this.timer = this.timeout.delay(this.options.timeout, this)) : this.onStateChange(), this;
},
cancel: function() {
if (!this.running) return this;
this.running = !1;
var xhr = this.xhr;
return xhr.abort(), clearTimeout(this.timer), xhr.onreadystatechange = empty, progressSupport && (xhr.onprogress = xhr.onloadstart = empty), this.xhr = new Browser.Request(), this.fireEvent("cancel"), this;
}
}), methods = {
};
[
"get",
"post",
"put",
"delete",
"GET",
"POST",
"PUT",
"DELETE"
].each(function(method) {
methods[method] = function(data) {
var object = {
method: method
};
return null != data && (object.data = data), this.send(object);
};
}), Request.implement(methods), Element.Properties.send = {
set: function(options) {
return this.get("send").cancel().setOptions(options), this;
},
get: function() {
var send = this.retrieve("send");
return send || (send = new Request({
data: this,
link: "cancel",
method: this.get("method") || "post",
url: this.get("action")
}), this.store("send", send)), send;
}
}, Element.implement({
send: function(url) {
var sender = this.get("send");
return sender.send({
data: this,
url: url || sender.options.url
}), this;
}
});
})(), Request.HTML = new Class({
Extends: Request,
options: {
update: !1,
append: !1,
evalScripts: !0,
filter: !1,
headers: {
Accept: "text/html, application/xml, text/xml, */*"
}
},
success: function(text) {
var options = this.options, response = this.response;
response.html = text.stripScripts(function(script) {
response.javascript = script;
});
var match = response.html.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
match && (response.html = match[1]);
var temp = new Element("div").set("html", response.html);
if (response.tree = temp.childNodes, response.elements = temp.getElements(options.filter || "*"), options.filter && (response.tree = response.elements), options.update) {
var update = document.id(options.update).empty();
options.filter ? update.adopt(response.elements) : update.set("html", response.html);
} else if (options.append) {
var append = document.id(options.append);
options.filter ? response.elements.reverse().inject(append) : append.adopt(temp.getChildren());
}
options.evalScripts && Browser.exec(response.javascript), this.onSuccess(response.tree, response.elements, response.html, response.javascript);
}
}), Element.Properties.load = {
set: function(options) {
return this.get("load").cancel().setOptions(options), this;
},
get: function() {
var load = this.retrieve("load");
return load || (load = new Request.HTML({
data: this,
link: "cancel",
update: this,
method: "get"
}), this.store("load", load)), load;
}
}, Element.implement({
load: function() {
return this.get("load").send(Array.link(arguments, {
data: Type.isObject,
url: Type.isString
})), this;
}
}), "undefined" == typeof JSON && (this.JSON = {
}), JSON = new Hash({
stringify: JSON.stringify,
parse: JSON.parse
}), (function() {
var special = {
"\b": "\\b",
"\t": "\\t",
"\n": "\\n",
"\f": "\\f",
"\r": "\\r",
"\"": "\\\"",
"\\": "\\\\"
}, escape = function(chr) {
return special[chr] || "\\u" + ("0000" + chr.charCodeAt(0).toString(16)).slice(-4);
};
JSON.validate = function(string) {
return string = string.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""), /^[\],:{}\s]*$/.test(string);
}, JSON.encode = JSON.stringify ? function(obj) {
return JSON.stringify(obj);
} : function(obj) {
switch(obj && obj.toJSON && (obj = obj.toJSON()), typeOf(obj)){
case "string":
return "\"" + obj.replace(/[\x00-\x1f\\"]/g, escape) + "\"";
case "array":
return "[" + obj.map(JSON.encode).clean() + "]";
case "object":
case "hash":
var string = [];
return Object.each(obj, function(value, key) {
var json = JSON.encode(value);
json && string.push(JSON.encode(key) + ":" + json);
}), "{" + string + "}";
case "number":
case "boolean":
return "" + obj;
case "null":
return "null";
}
return null;
}, JSON.decode = function(string, secure) {
if (!string || "string" != typeOf(string)) return null;
if (secure || JSON.secure) {
if (JSON.parse) return JSON.parse(string);
if (!JSON.validate(string)) throw new Error("JSON could not decode the input; security is enabled and the value is not secure.");
}
return eval("(" + string + ")");
};
})(), Request.JSON = new Class({
Extends: Request,
options: {
secure: !0
},
initialize: function(options) {
this.parent(options), Object.append(this.headers, {
Accept: "application/json",
"X-Request": "JSON"
});
},
success: function(text) {
var json;
try {
json = this.response.json = JSON.decode(text, this.options.secure);
} catch (error) {
return void this.fireEvent("error", [
text,
error
]);
}
null == json ? this.onFailure() : this.onSuccess(json, text);
}
});
var Cookie = new Class({
Implements: Options,
options: {
path: "/",
domain: !1,
duration: !1,
secure: !1,
document: document,
encode: !0
},
initialize: function(key, options) {
this.key = key, this.setOptions(options);
},
write: function(value) {
if (this.options.encode && (value = encodeURIComponent(value)), this.options.domain && (value += "; domain=" + this.options.domain), this.options.path && (value += "; path=" + this.options.path), this.options.duration) {
var date = new Date();
date.setTime(date.getTime() + 86400000 * this.options.duration), value += "; expires=" + date.toGMTString();
}
return this.options.secure && (value += "; secure"), this.options.document.cookie = this.key + "=" + value, this;
},
read: function() {
var value = this.options.document.cookie.match("(?:^|;)\\s*" + this.key.escapeRegExp() + "=([^;]*)");
return value ? decodeURIComponent(value[1]) : null;
},
dispose: function() {
return new Cookie(this.key, Object.merge({
}, this.options, {
duration: -1
})).write(""), this;
}
});
Cookie.write = function(key, value, options) {
return new Cookie(key, options).write(value);
}, Cookie.read = function(key) {
return new Cookie(key).read();
}, Cookie.dispose = function(key, options) {
return new Cookie(key, options).dispose();
}, (function(window, document) {
var ready, loaded, shouldPoll, timer, checks = [], testElement = document.createElement("div"), domready = function() {
clearTimeout(timer), ready || (Browser.loaded = ready = !0, document.removeListener("DOMContentLoaded", domready).removeListener("readystatechange", check), document.fireEvent("domready"), window.fireEvent("domready"));
}, check = function() {
for(var i = checks.length; i--;)if (checks[i]()) return domready(), !0;
return !1;
}, poll = function() {
clearTimeout(timer), check() || (timer = setTimeout(poll, 10));
};
document.addListener("DOMContentLoaded", domready);
var doScrollWorks = function() {
try {
return testElement.doScroll(), !0;
} catch (e) {
}
return !1;
};
testElement.doScroll && !doScrollWorks() && (checks.push(doScrollWorks), shouldPoll = !0), document.readyState && checks.push(function() {
var state = document.readyState;
return "loaded" == state || "complete" == state;
}), "onreadystatechange" in document ? document.addListener("readystatechange", check) : shouldPoll = !0, shouldPoll && poll(), Element.Events.domready = {
onAdd: function(fn) {
ready && fn.call(this);
}
}, Element.Events.load = {
base: "load",
onAdd: function(fn) {
loaded && this == window && fn.call(this);
},
condition: function() {
return this == window && (domready(), delete Element.Events.load), !0;
}
}, window.addEvent("load", function() {
loaded = !0;
});
})(window, document), (function() {
var Swiff = this.Swiff = new Class({
Implements: Options,
options: {
id: null,
height: 1,
width: 1,
container: null,
properties: {
},
params: {
quality: "high",
allowScriptAccess: "always",
wMode: "window",
swLiveConnect: !0
},
callBacks: {
},
vars: {
}
},
toElement: function() {
return this.object;
},
initialize: function(path, options) {
this.instance = "Swiff_" + String.uniqueID(), this.setOptions(options), options = this.options;
var id = this.id = options.id || this.instance, container = document.id(options.container);
Swiff.CallBacks[this.instance] = {
};
var params = options.params, vars = options.vars, callBacks = options.callBacks, properties = Object.append({
height: options.height,
width: options.width
}, options.properties), self = this;
for(var callBack in callBacks)Swiff.CallBacks[this.instance][callBack] = (function(option) {
return function() {
return option.apply(self.object, arguments);
};
})(callBacks[callBack]), vars[callBack] = "Swiff.CallBacks." + this.instance + "." + callBack;
params.flashVars = Object.toQueryString(vars), Browser.ie ? (properties.classid = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", params.movie = path) : properties.type = "application/x-shockwave-flash", properties.data = path;
var build = "<object id=\"" + id + "\"";
for(var property in properties)build += " " + property + "=\"" + properties[property] + "\"";
for(var param in build += ">", params)params[param] && (build += "<param name=\"" + param + "\" value=\"" + params[param] + "\" />");
build += "</object>", this.object = (container ? container.empty() : new Element("div")).set("html", build).firstChild;
},
replaces: function(element) {
return (element = document.id(element, !0)).parentNode.replaceChild(this.toElement(), element), this;
},
inject: function(element) {
return document.id(element, !0).appendChild(this.toElement()), this;
},
remote: function() {
return Swiff.remote.apply(Swiff, [
this.toElement()
].append(arguments));
}
});
Swiff.CallBacks = {
}, Swiff.remote = function(obj, fn) {
var rs = obj.CallFunction("<invoke name=\"" + fn + "\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments, 2) + "</invoke>");
return eval(rs);
};
})();